@banzamel/mineralui 1.4.0 → 1.5.0

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 (404) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-DMNwEhrd.cjs +2 -0
  3. package/dist/{MAvatar-DlFdIi6R.cjs.map → MAvatar-DMNwEhrd.cjs.map} +1 -1
  4. package/dist/{MAvatar-B0uPeciT.js → MAvatar-lCDowKeG.js} +5 -5
  5. package/dist/{MAvatar-B0uPeciT.js.map → MAvatar-lCDowKeG.js.map} +1 -1
  6. package/dist/{MBadge-5PivwWxe.js → MBadge-CuVY4TXo.js} +3 -3
  7. package/dist/{MBadge-5PivwWxe.js.map → MBadge-CuVY4TXo.js.map} +1 -1
  8. package/dist/MBadge-DmIO-oEJ.cjs +2 -0
  9. package/dist/{MBadge-DNqOptef.cjs.map → MBadge-DmIO-oEJ.cjs.map} +1 -1
  10. package/dist/MButton-DTblkF4v.cjs +2 -0
  11. package/dist/{MButton-CtEFKjYZ.cjs.map → MButton-DTblkF4v.cjs.map} +1 -1
  12. package/dist/{MButton-Bfe4iq51.js → MButton-JumA31vM.js} +4 -4
  13. package/dist/{MButton-Bfe4iq51.js.map → MButton-JumA31vM.js.map} +1 -1
  14. package/dist/{MCheckbox-B7SpcD4H.js → MCheckbox-DYrfb_bW.js} +3 -3
  15. package/dist/{MCheckbox-B7SpcD4H.js.map → MCheckbox-DYrfb_bW.js.map} +1 -1
  16. package/dist/MCheckbox-DbHXmu1a.cjs +2 -0
  17. package/dist/{MCheckbox-Bea3orrs.cjs.map → MCheckbox-DbHXmu1a.cjs.map} +1 -1
  18. package/dist/{MCookieBootstrap-DSOT4FQo.cjs → MCookieBootstrap-ByObqs4o.cjs} +1 -1
  19. package/dist/{MCookieBootstrap-DSOT4FQo.cjs.map → MCookieBootstrap-ByObqs4o.cjs.map} +1 -1
  20. package/dist/{MCookieBootstrap-CNYLvKjW.js → MCookieBootstrap-D1OGFCC7.js} +1 -1
  21. package/dist/{MCookieBootstrap-CNYLvKjW.js.map → MCookieBootstrap-D1OGFCC7.js.map} +1 -1
  22. package/dist/MDataTable-BSuwd0gb.cjs +2 -0
  23. package/dist/{MDataTable-CVwnVouZ.cjs.map → MDataTable-BSuwd0gb.cjs.map} +1 -1
  24. package/dist/{MDataTable-D0ONRmcC.js → MDataTable-CEGkEf5L.js} +6 -6
  25. package/dist/{MDataTable-D0ONRmcC.js.map → MDataTable-CEGkEf5L.js.map} +1 -1
  26. package/dist/{MDrawer-C7rLXC_O.js → MDrawer-BCjiepJO.js} +5 -5
  27. package/dist/{MDrawer-C7rLXC_O.js.map → MDrawer-BCjiepJO.js.map} +1 -1
  28. package/dist/MDrawer-YhA79aS4.cjs +2 -0
  29. package/dist/{MDrawer-DF42-zF2.cjs.map → MDrawer-YhA79aS4.cjs.map} +1 -1
  30. package/dist/MDropdownMenu-BRL0Vcq_.cjs +2 -0
  31. package/dist/{MDropdownMenu-X7ywPqth.cjs.map → MDropdownMenu-BRL0Vcq_.cjs.map} +1 -1
  32. package/dist/{MDropdownMenu-CxBhYxQb.js → MDropdownMenu-CVp1LFgZ.js} +4 -4
  33. package/dist/{MDropdownMenu-CxBhYxQb.js.map → MDropdownMenu-CVp1LFgZ.js.map} +1 -1
  34. package/dist/MGalleryIllustration-BHtRFizZ.cjs +2 -0
  35. package/dist/{MGalleryIllustration-CeOMHzpt.cjs.map → MGalleryIllustration-BHtRFizZ.cjs.map} +1 -1
  36. package/dist/{MGalleryIllustration-D7CVMSwO.js → MGalleryIllustration-DhOtXwhC.js} +2 -2
  37. package/dist/{MGalleryIllustration-D7CVMSwO.js.map → MGalleryIllustration-DhOtXwhC.js.map} +1 -1
  38. package/dist/MHeading-4vfYPN_i.cjs +2 -0
  39. package/dist/{MHeading-XCMJNMYB.cjs.map → MHeading-4vfYPN_i.cjs.map} +1 -1
  40. package/dist/{MHeading-DBS5Kytw.js → MHeading-qOPIM4dL.js} +4 -4
  41. package/dist/{MHeading-DBS5Kytw.js.map → MHeading-qOPIM4dL.js.map} +1 -1
  42. package/dist/{MI18nProvider-VH14CI8u.js → MI18nProvider-BRZxEMqL.js} +1 -1
  43. package/dist/{MI18nProvider-VH14CI8u.js.map → MI18nProvider-BRZxEMqL.js.map} +1 -1
  44. package/dist/MI18nProvider-Bml7Vs2-.cjs +2 -0
  45. package/dist/{MI18nProvider-4ji0oN3U.cjs.map → MI18nProvider-Bml7Vs2-.cjs.map} +1 -1
  46. package/dist/MImage-DXy-dHas.cjs +2 -0
  47. package/dist/{MImage-2Xztd_N6.cjs.map → MImage-DXy-dHas.cjs.map} +1 -1
  48. package/dist/{MImage-UmiZwzDJ.js → MImage-Dp81HSZr.js} +5 -5
  49. package/dist/{MImage-UmiZwzDJ.js.map → MImage-Dp81HSZr.js.map} +1 -1
  50. package/dist/{MInline-BYsbmfkz.js → MInline-CnxH6VZx.js} +5 -5
  51. package/dist/{MInline-BYsbmfkz.js.map → MInline-CnxH6VZx.js.map} +1 -1
  52. package/dist/MInline-DYy3IhF-.cjs +2 -0
  53. package/dist/{MInline-oCvhfJwM.cjs.map → MInline-DYy3IhF-.cjs.map} +1 -1
  54. package/dist/{MInput-iKIeefss.js → MInput-3ynY4aGD.js} +6 -6
  55. package/dist/{MInput-iKIeefss.js.map → MInput-3ynY4aGD.js.map} +1 -1
  56. package/dist/MInput-DkbdeGQW.cjs +2 -0
  57. package/dist/{MInput-CpEJQ9SV.cjs.map → MInput-DkbdeGQW.cjs.map} +1 -1
  58. package/dist/{MInputCVC-BpGTqkQx.js → MInputCVC-BO251yU6.js} +5 -5
  59. package/dist/{MInputCVC-BpGTqkQx.js.map → MInputCVC-BO251yU6.js.map} +1 -1
  60. package/dist/MInputCVC-NSy1SkiZ.cjs +2 -0
  61. package/dist/{MInputCVC-BuGwm7fv.cjs.map → MInputCVC-NSy1SkiZ.cjs.map} +1 -1
  62. package/dist/{MInputSearch-y3_ihYRj.js → MInputSearch-BT0OqlE_.js} +4 -4
  63. package/dist/{MInputSearch-y3_ihYRj.js.map → MInputSearch-BT0OqlE_.js.map} +1 -1
  64. package/dist/MInputSearch-CQQIKYMt.cjs +2 -0
  65. package/dist/{MInputSearch-B-Lqr-QG.cjs.map → MInputSearch-CQQIKYMt.cjs.map} +1 -1
  66. package/dist/MLink-B6Az9m2B.cjs +2 -0
  67. package/dist/{MLink-7hndQLKM.cjs.map → MLink-B6Az9m2B.cjs.map} +1 -1
  68. package/dist/{MLink-tcICJfPn.js → MLink-Cytb3UVc.js} +3 -3
  69. package/dist/{MLink-tcICJfPn.js.map → MLink-Cytb3UVc.js.map} +1 -1
  70. package/dist/{MModal-___Rw8YK.js → MModal-BTOS_Xrs.js} +4 -4
  71. package/dist/{MModal-___Rw8YK.js.map → MModal-BTOS_Xrs.js.map} +1 -1
  72. package/dist/MModal-BhYBOKUh.cjs +2 -0
  73. package/dist/{MModal-DlnT3BBp.cjs.map → MModal-BhYBOKUh.cjs.map} +1 -1
  74. package/dist/MPagination-4X0we8Ab.cjs +2 -0
  75. package/dist/{MPagination-CTtr_L-Q.cjs.map → MPagination-4X0we8Ab.cjs.map} +1 -1
  76. package/dist/{MPagination-CzJGko3i.js → MPagination-Bz35UIbt.js} +4 -4
  77. package/dist/{MPagination-CzJGko3i.js.map → MPagination-Bz35UIbt.js.map} +1 -1
  78. package/dist/MPopover-C03jl1zd.cjs +2 -0
  79. package/dist/{MPopover-C3-fGAke.cjs.map → MPopover-C03jl1zd.cjs.map} +1 -1
  80. package/dist/{MPopover-BC9C5967.js → MPopover-DHc3otwX.js} +3 -3
  81. package/dist/{MPopover-BC9C5967.js.map → MPopover-DHc3otwX.js.map} +1 -1
  82. package/dist/{MPortal-Dqlkh3hw.js → MPortal-CHoRxTlE.js} +1 -1
  83. package/dist/{MPortal-Dqlkh3hw.js.map → MPortal-CHoRxTlE.js.map} +1 -1
  84. package/dist/MPortal-xGHZKLX5.cjs +2 -0
  85. package/dist/{MPortal-PyRKsZxc.cjs.map → MPortal-xGHZKLX5.cjs.map} +1 -1
  86. package/dist/{MQrCode-B7jbpcUj.js → MQrCode-Dmgh8fzs.js} +4 -4
  87. package/dist/{MQrCode-B7jbpcUj.js.map → MQrCode-Dmgh8fzs.js.map} +1 -1
  88. package/dist/MQrCode-blzcp1yz.cjs +2 -0
  89. package/dist/{MQrCode-Cha7657D.cjs.map → MQrCode-blzcp1yz.cjs.map} +1 -1
  90. package/dist/{MSkeleton-Cwa-JRxo.js → MSkeleton-CJIlxsCx.js} +4 -4
  91. package/dist/{MSkeleton-Cwa-JRxo.js.map → MSkeleton-CJIlxsCx.js.map} +1 -1
  92. package/dist/MSkeleton-CQEnuIos.cjs +2 -0
  93. package/dist/{MSkeleton-BAkzwxOS.cjs.map → MSkeleton-CQEnuIos.cjs.map} +1 -1
  94. package/dist/MSlider-B4K6bkIs.cjs +2 -0
  95. package/dist/{MSlider-BCMJkvcA.cjs.map → MSlider-B4K6bkIs.cjs.map} +1 -1
  96. package/dist/{MSlider-CqrusKJQ.js → MSlider-DuTnRaK_.js} +2 -2
  97. package/dist/{MSlider-CqrusKJQ.js.map → MSlider-DuTnRaK_.js.map} +1 -1
  98. package/dist/MSparkline-7ycEh2eZ.cjs +2 -0
  99. package/dist/{MSparkline-BOaNmbeB.cjs.map → MSparkline-7ycEh2eZ.cjs.map} +1 -1
  100. package/dist/{MSparkline-Cb_EwR-E.js → MSparkline-Dz4K9Vx9.js} +2 -2
  101. package/dist/{MSparkline-Cb_EwR-E.js.map → MSparkline-Dz4K9Vx9.js.map} +1 -1
  102. package/dist/{MStack-DVOFZo1L.js → MStack-8qZI36jT.js} +5 -5
  103. package/dist/{MStack-DVOFZo1L.js.map → MStack-8qZI36jT.js.map} +1 -1
  104. package/dist/MStack-BcEwA2sk.cjs +2 -0
  105. package/dist/{MStack-Bp1x4woD.cjs.map → MStack-BcEwA2sk.cjs.map} +1 -1
  106. package/dist/{MSubText-CHvUFOlt.js → MSubText-D-wde4hz.js} +4 -4
  107. package/dist/{MSubText-CHvUFOlt.js.map → MSubText-D-wde4hz.js.map} +1 -1
  108. package/dist/MSubText-DjtJHCSy.cjs +2 -0
  109. package/dist/{MSubText-Dg3PKnwI.cjs.map → MSubText-DjtJHCSy.cjs.map} +1 -1
  110. package/dist/MSurface-DWl0groZ.cjs +2 -0
  111. package/dist/{MSurface-ClPdv7a4.cjs.map → MSurface-DWl0groZ.cjs.map} +1 -1
  112. package/dist/{MSurface-FEfWBJFx.js → MSurface-DnwfNn3F.js} +5 -5
  113. package/dist/{MSurface-FEfWBJFx.js.map → MSurface-DnwfNn3F.js.map} +1 -1
  114. package/dist/{MTag-CjaE6vPj.js → MTag-CGns3Rk2.js} +5 -5
  115. package/dist/{MTag-CjaE6vPj.js.map → MTag-CGns3Rk2.js.map} +1 -1
  116. package/dist/MTag-D_mw488_.cjs +2 -0
  117. package/dist/{MTag-BxoSuAOj.cjs.map → MTag-D_mw488_.cjs.map} +1 -1
  118. package/dist/{MText-hHMgVJ4-.js → MText-C0VxNQCE.js} +4 -4
  119. package/dist/{MText-hHMgVJ4-.js.map → MText-C0VxNQCE.js.map} +1 -1
  120. package/dist/MText-rSgurLeq.cjs +2 -0
  121. package/dist/{MText-CWHwmjs8.cjs.map → MText-rSgurLeq.cjs.map} +1 -1
  122. package/dist/MTimeAgo-BesEN_u2.cjs +2 -0
  123. package/dist/{MTimeAgo-91_ndjxU.cjs.map → MTimeAgo-BesEN_u2.cjs.map} +1 -1
  124. package/dist/{MTimeAgo-xxl53mct.js → MTimeAgo-ecmmkLeM.js} +4 -4
  125. package/dist/{MTimeAgo-xxl53mct.js.map → MTimeAgo-ecmmkLeM.js.map} +1 -1
  126. package/dist/MToggle-DV0lHLSE.cjs +2 -0
  127. package/dist/{MToggle-CsGS_W3X.cjs.map → MToggle-DV0lHLSE.cjs.map} +1 -1
  128. package/dist/{MToggle-B6emKoKq.js → MToggle-DXw8qz0m.js} +3 -3
  129. package/dist/{MToggle-B6emKoKq.js.map → MToggle-DXw8qz0m.js.map} +1 -1
  130. package/dist/{MTooltip-UYOjDBOu.js → MTooltip-BW4hHnEf.js} +3 -3
  131. package/dist/{MTooltip-UYOjDBOu.js.map → MTooltip-BW4hHnEf.js.map} +1 -1
  132. package/dist/MTooltip-Ce1cs9e3.cjs +2 -0
  133. package/dist/{MTooltip-CNXoyQEN.cjs.map → MTooltip-Ce1cs9e3.cjs.map} +1 -1
  134. package/dist/{cards-1--Cy-KV.js → cards-D45hG2rJ.js} +17 -17
  135. package/dist/{cards-1--Cy-KV.js.map → cards-D45hG2rJ.js.map} +1 -1
  136. package/dist/cards-DFUONqA1.cjs +2 -0
  137. package/dist/{cards-CTegCxIA.cjs.map → cards-DFUONqA1.cjs.map} +1 -1
  138. package/dist/cards.cjs +1 -1
  139. package/dist/cards.js +2 -2
  140. package/dist/chunk-350yNsax.cjs +1 -0
  141. package/dist/chunk-efA98nb6.js +13 -0
  142. package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
  143. package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
  144. package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
  145. package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
  146. package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +2 -0
  147. package/dist/components/display/MCodeBlock/MCodeBlock.types.d.ts +15 -0
  148. package/dist/components/display/MCodeBlock/index.d.ts +2 -0
  149. package/dist/components/display/index.d.ts +2 -0
  150. package/dist/components/layout/MGrid/MGrid.d.ts +7 -3
  151. package/dist/components/layout/MGrid/MGrid.types.d.ts +1 -2
  152. package/dist/controls-CkndCsX9.cjs +2 -0
  153. package/dist/{controls-CAab2nyg.cjs.map → controls-CkndCsX9.cjs.map} +1 -1
  154. package/dist/{controls-C0qr_vMu.js → controls-DY0O5P1b.js} +6 -6
  155. package/dist/{controls-C0qr_vMu.js.map → controls-DY0O5P1b.js.map} +1 -1
  156. package/dist/controls.cjs +1 -1
  157. package/dist/controls.js +5 -5
  158. package/dist/cookie-consent-bootstrap.cjs +1 -1
  159. package/dist/cookie-consent-bootstrap.js +1 -1
  160. package/dist/{creditCards-ljs044xt.cjs → creditCards-198KJN0s.cjs} +1 -1
  161. package/dist/{creditCards-ljs044xt.cjs.map → creditCards-198KJN0s.cjs.map} +1 -1
  162. package/dist/{creditCards-CCysEwry.js → creditCards-BB11bW7D.js} +1 -1
  163. package/dist/{creditCards-CCysEwry.js.map → creditCards-BB11bW7D.js.map} +1 -1
  164. package/dist/data-BKhx0T2n.cjs +2 -0
  165. package/dist/{data-Uy_XSs32.cjs.map → data-BKhx0T2n.cjs.map} +1 -1
  166. package/dist/{data-z3Uc9FSI.js → data-Coc1KFVp.js} +24 -24
  167. package/dist/{data-z3Uc9FSI.js.map → data-Coc1KFVp.js.map} +1 -1
  168. package/dist/data.cjs +1 -1
  169. package/dist/data.js +3 -3
  170. package/dist/{dateUtils-CUY6CRCf.js → dateUtils-Ben8lfvV.js} +1 -1
  171. package/dist/{dateUtils-CUY6CRCf.js.map → dateUtils-Ben8lfvV.js.map} +1 -1
  172. package/dist/{dateUtils-Dq1vaA-D.cjs → dateUtils-vT9rOf1J.cjs} +1 -1
  173. package/dist/{dateUtils-Dq1vaA-D.cjs.map → dateUtils-vT9rOf1J.cjs.map} +1 -1
  174. package/dist/display-Bt0G6RPk.cjs +3 -0
  175. package/dist/display-Bt0G6RPk.cjs.map +1 -0
  176. package/dist/display-CZO1cOXZ.js +614 -0
  177. package/dist/display-CZO1cOXZ.js.map +1 -0
  178. package/dist/display.cjs +1 -1
  179. package/dist/display.js +4 -4
  180. package/dist/dropdowns-CI4qUI4Q.cjs +2 -0
  181. package/dist/{dropdowns-CzqyYQwR.cjs.map → dropdowns-CI4qUI4Q.cjs.map} +1 -1
  182. package/dist/{dropdowns-FQlxsOYd.js → dropdowns-y3B9jSZf.js} +15 -15
  183. package/dist/{dropdowns-FQlxsOYd.js.map → dropdowns-y3B9jSZf.js.map} +1 -1
  184. package/dist/dropdowns.cjs +1 -1
  185. package/dist/dropdowns.js +1 -1
  186. package/dist/{feedback-xtBDPbzP.js → feedback-5T-NKzak.js} +18 -18
  187. package/dist/{feedback-xtBDPbzP.js.map → feedback-5T-NKzak.js.map} +1 -1
  188. package/dist/feedback-Cfi3ON4a.cjs +2 -0
  189. package/dist/{feedback-C9z4MZ-V.cjs.map → feedback-Cfi3ON4a.cjs.map} +1 -1
  190. package/dist/feedback.cjs +1 -1
  191. package/dist/feedback.js +6 -6
  192. package/dist/{form-CFWADsyf.js → form-ClvMlxiX.js} +2 -2
  193. package/dist/{form-CFWADsyf.js.map → form-ClvMlxiX.js.map} +1 -1
  194. package/dist/form-g7ns3G0R.cjs +2 -0
  195. package/dist/{form-6JwrowsS.cjs.map → form-g7ns3G0R.cjs.map} +1 -1
  196. package/dist/form.cjs +1 -1
  197. package/dist/form.js +1 -1
  198. package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
  199. package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
  200. package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
  201. package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
  202. package/dist/{frameworkTexts-B6oE8pMk.js → frameworkTexts-Brl68Lwf.js} +2 -2
  203. package/dist/{frameworkTexts-B6oE8pMk.js.map → frameworkTexts-Brl68Lwf.js.map} +1 -1
  204. package/dist/frameworkTexts-khAIsKS9.cjs +2 -0
  205. package/dist/{frameworkTexts-C_9KZK_A.cjs.map → frameworkTexts-khAIsKS9.cjs.map} +1 -1
  206. package/dist/i18n.cjs +1 -1
  207. package/dist/i18n.js +1 -1
  208. package/dist/icons-BhZaama4.cjs +2 -0
  209. package/dist/{icons-Dv1T-cF4.cjs.map → icons-BhZaama4.cjs.map} +1 -1
  210. package/dist/{icons-D5DK-J2C.js → icons-DZr7JKf6.js} +1 -1
  211. package/dist/{icons-D5DK-J2C.js.map → icons-DZr7JKf6.js.map} +1 -1
  212. package/dist/icons.cjs +1 -1
  213. package/dist/icons.js +1 -1
  214. package/dist/illustrations.cjs +1 -1
  215. package/dist/illustrations.js +1 -1
  216. package/dist/index.cjs +1 -1
  217. package/dist/index.js +59 -59
  218. package/dist/inputs-BIqwv3qy.cjs +2 -0
  219. package/dist/{inputs-z84nU7A8.cjs.map → inputs-BIqwv3qy.cjs.map} +1 -1
  220. package/dist/{inputs-gB1ET0dG.js → inputs-Cj6ITRad.js} +12 -12
  221. package/dist/{inputs-gB1ET0dG.js.map → inputs-Cj6ITRad.js.map} +1 -1
  222. package/dist/inputs.cjs +1 -1
  223. package/dist/inputs.js +4 -4
  224. package/dist/{layout-DHVIqY-O.js → layout-Cu2u9xLW.js} +116 -81
  225. package/dist/layout-Cu2u9xLW.js.map +1 -0
  226. package/dist/layout-DZXYG0TB.cjs +2 -0
  227. package/dist/layout-DZXYG0TB.cjs.map +1 -0
  228. package/dist/layout.cjs +1 -1
  229. package/dist/layout.js +5 -5
  230. package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-Cwq4EXTV.js} +1 -1
  231. package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-Cwq4EXTV.js.map} +1 -1
  232. package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-DbnX4zRp.cjs} +1 -1
  233. package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-DbnX4zRp.cjs.map} +1 -1
  234. package/dist/{licensing-CwzqhHH9.js → licensing-Cbpi1toF.js} +1 -1
  235. package/dist/{licensing-CwzqhHH9.js.map → licensing-Cbpi1toF.js.map} +1 -1
  236. package/dist/licensing-JchPJhVY.cjs +2 -0
  237. package/dist/{licensing-BXFauUj_.cjs.map → licensing-JchPJhVY.cjs.map} +1 -1
  238. package/dist/{locale-BNyzqXAU.js → locale-CS1-IY_I.js} +1 -1
  239. package/dist/{locale-BNyzqXAU.js.map → locale-CS1-IY_I.js.map} +1 -1
  240. package/dist/locale-DAkrtKuT.cjs +2 -0
  241. package/dist/{locale-BltrWJtd.cjs.map → locale-DAkrtKuT.cjs.map} +1 -1
  242. package/dist/media-CWx--sZw.cjs +2 -0
  243. package/dist/{media-Ch3Fyf4K.cjs.map → media-CWx--sZw.cjs.map} +1 -1
  244. package/dist/{media-DV58aS3j.js → media-fmOnjugH.js} +9 -9
  245. package/dist/{media-DV58aS3j.js.map → media-fmOnjugH.js.map} +1 -1
  246. package/dist/media.cjs +1 -1
  247. package/dist/media.js +3 -3
  248. package/dist/{overlays-_zOs7GGk.js → overlays-DlQem0xt.js} +7 -7
  249. package/dist/{overlays-_zOs7GGk.js.map → overlays-DlQem0xt.js.map} +1 -1
  250. package/dist/overlays-pT3iozjm.cjs +2 -0
  251. package/dist/{overlays-7HBAQneO.cjs.map → overlays-pT3iozjm.cjs.map} +1 -1
  252. package/dist/overlays.cjs +1 -1
  253. package/dist/overlays.js +5 -5
  254. package/dist/primitives.cjs +1 -1
  255. package/dist/primitives.js +2 -2
  256. package/dist/prism-bash-Xs-n623m.js +177 -0
  257. package/dist/prism-bash-Xs-n623m.js.map +1 -0
  258. package/dist/prism-bash-oC8SHnvZ.cjs +2 -0
  259. package/dist/prism-bash-oC8SHnvZ.cjs.map +1 -0
  260. package/dist/prism-clike-BHy7LBAZ.cjs +2 -0
  261. package/dist/prism-clike-BHy7LBAZ.cjs.map +1 -0
  262. package/dist/prism-clike-CrtZga9r.js +30 -0
  263. package/dist/prism-clike-CrtZga9r.js.map +1 -0
  264. package/dist/prism-core-DsZQ3wSm.js +299 -0
  265. package/dist/prism-core-DsZQ3wSm.js.map +1 -0
  266. package/dist/prism-core-Z2NDHfPM.cjs +2 -0
  267. package/dist/prism-core-Z2NDHfPM.cjs.map +1 -0
  268. package/dist/prism-css-CtHScmdk.cjs +2 -0
  269. package/dist/prism-css-CtHScmdk.cjs.map +1 -0
  270. package/dist/prism-css-DNZzCmaG.js +57 -0
  271. package/dist/prism-css-DNZzCmaG.js.map +1 -0
  272. package/dist/prism-javascript-DVQ8iSSP.cjs +2 -0
  273. package/dist/prism-javascript-DVQ8iSSP.cjs.map +1 -0
  274. package/dist/prism-javascript-tgrsDJvl.js +103 -0
  275. package/dist/prism-javascript-tgrsDJvl.js.map +1 -0
  276. package/dist/prism-json-D3AIyrc5.cjs +2 -0
  277. package/dist/prism-json-D3AIyrc5.cjs.map +1 -0
  278. package/dist/prism-json-DdyAX9Pp.js +27 -0
  279. package/dist/prism-json-DdyAX9Pp.js.map +1 -0
  280. package/dist/prism-jsx-CnFRZYK4.cjs +2 -0
  281. package/dist/prism-jsx-CnFRZYK4.cjs.map +1 -0
  282. package/dist/prism-jsx-WafGh0eg.js +48 -0
  283. package/dist/prism-jsx-WafGh0eg.js.map +1 -0
  284. package/dist/prism-markup-3wgbeWT0.js +118 -0
  285. package/dist/prism-markup-3wgbeWT0.js.map +1 -0
  286. package/dist/prism-markup-BsZlEnsE.cjs +2 -0
  287. package/dist/prism-markup-BsZlEnsE.cjs.map +1 -0
  288. package/dist/prism-markup-templating-DwntZfmY.js +41 -0
  289. package/dist/prism-markup-templating-DwntZfmY.js.map +1 -0
  290. package/dist/prism-markup-templating-Vn_U79T9.cjs +2 -0
  291. package/dist/prism-markup-templating-Vn_U79T9.cjs.map +1 -0
  292. package/dist/prism-php-CizDps-m.js +279 -0
  293. package/dist/prism-php-CizDps-m.js.map +1 -0
  294. package/dist/prism-php-DDMsSDeI.cjs +2 -0
  295. package/dist/prism-php-DDMsSDeI.cjs.map +1 -0
  296. package/dist/prism-tsx-BFlaUgcE.js +10 -0
  297. package/dist/prism-tsx-BFlaUgcE.js.map +1 -0
  298. package/dist/prism-tsx-DDg7MuNh.cjs +2 -0
  299. package/dist/prism-tsx-DDg7MuNh.cjs.map +1 -0
  300. package/dist/prism-typescript-Br2XvXsL.js +40 -0
  301. package/dist/prism-typescript-Br2XvXsL.js.map +1 -0
  302. package/dist/prism-typescript-DYi8QiPX.cjs +2 -0
  303. package/dist/prism-typescript-DYi8QiPX.cjs.map +1 -0
  304. package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
  305. package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
  306. package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
  307. package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
  308. package/dist/style-runtime.cjs +1 -1
  309. package/dist/style-runtime.js +1 -1
  310. package/dist/styles.css +1 -1
  311. package/dist/theme/responsive.d.ts +1 -1
  312. package/dist/theme-Bnwe-wvr.cjs +2 -0
  313. package/dist/{theme-B9iSuxqh.cjs.map → theme-Bnwe-wvr.cjs.map} +1 -1
  314. package/dist/{theme-XRUdoLqw.js → theme-KYwqDZxJ.js} +2 -2
  315. package/dist/{theme-XRUdoLqw.js.map → theme-KYwqDZxJ.js.map} +1 -1
  316. package/dist/theme.cjs +1 -1
  317. package/dist/theme.js +1 -1
  318. package/dist/typography-B_xK5Q_j.cjs +2 -0
  319. package/dist/{typography-D0dyVQlP.cjs.map → typography-B_xK5Q_j.cjs.map} +1 -1
  320. package/dist/{typography-Db_SHI0H.js → typography-C3BBQ_9r.js} +3 -3
  321. package/dist/{typography-Db_SHI0H.js.map → typography-C3BBQ_9r.js.map} +1 -1
  322. package/dist/typography.cjs +1 -1
  323. package/dist/typography.js +5 -5
  324. package/dist/{useGhostText-DG0bzcao.js → useGhostText-BJZKdZpw.js} +1 -1
  325. package/dist/{useGhostText-DG0bzcao.js.map → useGhostText-BJZKdZpw.js.map} +1 -1
  326. package/dist/useGhostText-D1DbIs-n.cjs +2 -0
  327. package/dist/{useGhostText-QMdO_HK6.cjs.map → useGhostText-D1DbIs-n.cjs.map} +1 -1
  328. package/dist/useInteractionEffect-CYHGHV1e.cjs +2 -0
  329. package/dist/{useInteractionEffect-DnEfbCrX.cjs.map → useInteractionEffect-CYHGHV1e.cjs.map} +1 -1
  330. package/dist/{useInteractionEffect-DtpbVd77.js → useInteractionEffect-ClkU3aH5.js} +1 -1
  331. package/dist/{useInteractionEffect-DtpbVd77.js.map → useInteractionEffect-ClkU3aH5.js.map} +1 -1
  332. package/dist/useKeyboardNav-BoibrRUF.cjs +2 -0
  333. package/dist/{useKeyboardNav-BrODLJaL.cjs.map → useKeyboardNav-BoibrRUF.cjs.map} +1 -1
  334. package/dist/{useKeyboardNav-iEXOdEMB.js → useKeyboardNav-CBOdeTFM.js} +1 -1
  335. package/dist/{useKeyboardNav-iEXOdEMB.js.map → useKeyboardNav-CBOdeTFM.js.map} +1 -1
  336. package/dist/useReveal-DVwtH8Dl.cjs +2 -0
  337. package/dist/{useReveal-B_17PI89.cjs.map → useReveal-DVwtH8Dl.cjs.map} +1 -1
  338. package/dist/{useReveal-BJ59usiL.js → useReveal-JAiIFTia.js} +1 -1
  339. package/dist/{useReveal-BJ59usiL.js.map → useReveal-JAiIFTia.js.map} +1 -1
  340. package/dist/utils.cjs +1 -1
  341. package/dist/utils.js +11 -11
  342. package/dist/{validators-BeNTD8mf.cjs → validators-D4aTeaH0.cjs} +1 -1
  343. package/dist/{validators-BeNTD8mf.cjs.map → validators-D4aTeaH0.cjs.map} +1 -1
  344. package/dist/{validators-H8tNxb8O.js → validators-YZyyyLvE.js} +1 -1
  345. package/dist/{validators-H8tNxb8O.js.map → validators-YZyyyLvE.js.map} +1 -1
  346. package/package.json +4 -1
  347. package/dist/MAvatar-DlFdIi6R.cjs +0 -2
  348. package/dist/MBadge-DNqOptef.cjs +0 -2
  349. package/dist/MButton-CtEFKjYZ.cjs +0 -2
  350. package/dist/MCheckbox-Bea3orrs.cjs +0 -2
  351. package/dist/MDataTable-CVwnVouZ.cjs +0 -2
  352. package/dist/MDrawer-DF42-zF2.cjs +0 -2
  353. package/dist/MDropdownMenu-X7ywPqth.cjs +0 -2
  354. package/dist/MGalleryIllustration-CeOMHzpt.cjs +0 -2
  355. package/dist/MHeading-XCMJNMYB.cjs +0 -2
  356. package/dist/MI18nProvider-4ji0oN3U.cjs +0 -2
  357. package/dist/MImage-2Xztd_N6.cjs +0 -2
  358. package/dist/MInline-oCvhfJwM.cjs +0 -2
  359. package/dist/MInput-CpEJQ9SV.cjs +0 -2
  360. package/dist/MInputCVC-BuGwm7fv.cjs +0 -2
  361. package/dist/MInputSearch-B-Lqr-QG.cjs +0 -2
  362. package/dist/MLink-7hndQLKM.cjs +0 -2
  363. package/dist/MModal-DlnT3BBp.cjs +0 -2
  364. package/dist/MPagination-CTtr_L-Q.cjs +0 -2
  365. package/dist/MPopover-C3-fGAke.cjs +0 -2
  366. package/dist/MPortal-PyRKsZxc.cjs +0 -2
  367. package/dist/MQrCode-Cha7657D.cjs +0 -2
  368. package/dist/MSkeleton-BAkzwxOS.cjs +0 -2
  369. package/dist/MSlider-BCMJkvcA.cjs +0 -2
  370. package/dist/MSparkline-BOaNmbeB.cjs +0 -2
  371. package/dist/MStack-Bp1x4woD.cjs +0 -2
  372. package/dist/MSubText-Dg3PKnwI.cjs +0 -2
  373. package/dist/MSurface-ClPdv7a4.cjs +0 -2
  374. package/dist/MTag-BxoSuAOj.cjs +0 -2
  375. package/dist/MText-CWHwmjs8.cjs +0 -2
  376. package/dist/MTimeAgo-91_ndjxU.cjs +0 -2
  377. package/dist/MToggle-CsGS_W3X.cjs +0 -2
  378. package/dist/MTooltip-CNXoyQEN.cjs +0 -2
  379. package/dist/cards-CTegCxIA.cjs +0 -2
  380. package/dist/controls-CAab2nyg.cjs +0 -2
  381. package/dist/data-Uy_XSs32.cjs +0 -2
  382. package/dist/display-GygMuO4c.js +0 -467
  383. package/dist/display-GygMuO4c.js.map +0 -1
  384. package/dist/display-WS1tupQD.cjs +0 -2
  385. package/dist/display-WS1tupQD.cjs.map +0 -1
  386. package/dist/dropdowns-CzqyYQwR.cjs +0 -2
  387. package/dist/feedback-C9z4MZ-V.cjs +0 -2
  388. package/dist/form-6JwrowsS.cjs +0 -2
  389. package/dist/frameworkTexts-C_9KZK_A.cjs +0 -2
  390. package/dist/icons-Dv1T-cF4.cjs +0 -2
  391. package/dist/inputs-z84nU7A8.cjs +0 -2
  392. package/dist/layout-BIPyHdYN.cjs +0 -2
  393. package/dist/layout-BIPyHdYN.cjs.map +0 -1
  394. package/dist/layout-DHVIqY-O.js.map +0 -1
  395. package/dist/licensing-BXFauUj_.cjs +0 -2
  396. package/dist/locale-BltrWJtd.cjs +0 -2
  397. package/dist/media-Ch3Fyf4K.cjs +0 -2
  398. package/dist/overlays-7HBAQneO.cjs +0 -2
  399. package/dist/theme-B9iSuxqh.cjs +0 -2
  400. package/dist/typography-D0dyVQlP.cjs +0 -2
  401. package/dist/useGhostText-QMdO_HK6.cjs +0 -2
  402. package/dist/useInteractionEffect-DnEfbCrX.cjs +0 -2
  403. package/dist/useKeyboardNav-BrODLJaL.cjs +0 -2
  404. package/dist/useReveal-B_17PI89.cjs +0 -2
@@ -0,0 +1,2 @@
1
+ require(`./chunk-350yNsax.cjs`);const e=require(`./theme-Bnwe-wvr.cjs`),t=require(`./cn-DYFxgzi2.cjs`),n=require(`./MText-rSgurLeq.cjs`);let r=require(`react`);function i({level:i=2,tone:a=`default`,hidden:o,color:s,truncate:c,className:l,style:u,children:d,...f}){let p=typeof c==`number`?c:void 0;return(0,r.createElement)(`h${i}`,{className:t.t(`heading`,`h${i}`,!s&&a,c===!0&&`truncate`,p!=null&&`line-clamp`,...n.n({color:s}),l),style:p?{"--line-clamp":p,...u}:u,...e.r(o),...f},d)}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
+ //# sourceMappingURL=MHeading-4vfYPN_i.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MHeading-XCMJNMYB.cjs","names":[],"sources":["../src/components/typography/MHeading/MHeading.tsx"],"sourcesContent":["import {createElement} from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MHeadingProps} from './MHeading.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MHeading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function MHeading({\n level = 2,\n tone = 'default',\n hidden,\n color,\n truncate,\n className,\n style,\n children,\n ...rest\n}: MHeadingProps) {\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return createElement(\n `h${level}`,\n {\n className: cn(\n 'heading',\n `h${level}`,\n !color && tone,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n className\n ),\n style: lines ? ({'--line-clamp': lines, ...style} as CSSProperties) : style,\n ...getHiddenProps(hidden),\n ...rest,\n },\n children\n )\n}\n"],"mappings":"gIASA,SAAgB,EAAS,CACrB,QAAQ,EACR,OAAO,UACP,SACA,QACA,WACA,YACA,QACA,WACA,GAAG,GACW,CACd,IAAM,EAAQ,OAAO,GAAa,SAAW,EAAW,IAAA,GAExD,OAAA,EAAA,EAAA,eACI,IAAI,IACJ,CACI,UAAW,EAAA,EACP,UACA,IAAI,IACJ,CAAC,GAAS,EACV,IAAa,IAAQ,WACrB,GAAS,MAAQ,aACjB,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CACnC,EACH,CACD,MAAO,EAAS,CAAC,eAAgB,EAAO,GAAG,EAAM,CAAqB,EACtE,GAAG,EAAA,EAAe,EAAO,CACzB,GAAG,EACN,CACD,EACH"}
1
+ {"version":3,"file":"MHeading-4vfYPN_i.cjs","names":[],"sources":["../src/components/typography/MHeading/MHeading.tsx"],"sourcesContent":["import {createElement} from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MHeadingProps} from './MHeading.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MHeading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function MHeading({\n level = 2,\n tone = 'default',\n hidden,\n color,\n truncate,\n className,\n style,\n children,\n ...rest\n}: MHeadingProps) {\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return createElement(\n `h${level}`,\n {\n className: cn(\n 'heading',\n `h${level}`,\n !color && tone,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n className\n ),\n style: lines ? ({'--line-clamp': lines, ...style} as CSSProperties) : style,\n ...getHiddenProps(hidden),\n ...rest,\n },\n children\n )\n}\n"],"mappings":"gKASA,SAAgB,EAAS,CACrB,QAAQ,EACR,OAAO,UACP,SACA,QACA,WACA,YACA,QACA,WACA,GAAG,GACW,CACd,IAAM,EAAQ,OAAO,GAAa,SAAW,EAAW,IAAA,GAExD,OAAA,EAAA,EAAA,eACI,IAAI,IACJ,CACI,UAAW,EAAA,EACP,UACA,IAAI,IACJ,CAAC,GAAS,EACV,IAAa,IAAQ,WACrB,GAAS,MAAQ,aACjB,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CACnC,EACH,CACD,MAAO,EAAS,CAAC,eAAgB,EAAO,GAAG,EAAM,CAAqB,EACtE,GAAG,EAAA,EAAe,EAAO,CACzB,GAAG,EACN,CACD,EACH"}
@@ -1,6 +1,6 @@
1
- import { r as e } from "./theme-XRUdoLqw.js";
2
- import { t } from "./cn-YER3QsV1.js";
3
- import { n } from "./MText-hHMgVJ4-.js";
1
+ import { r as e } from "./theme-KYwqDZxJ.js";
2
+ import { t } from "./cn-CUSXNnjF.js";
3
+ import { n } from "./MText-C0VxNQCE.js";
4
4
  import { createElement as r } from "react";
5
5
  //#region src/components/typography/MHeading/MHeading.tsx
6
6
  function i({ level: i = 2, tone: a = "default", hidden: o, color: s, truncate: c, className: l, style: u, children: d, ...f }) {
@@ -18,4 +18,4 @@ function i({ level: i = 2, tone: a = "default", hidden: o, color: s, truncate: c
18
18
  //#endregion
19
19
  export { i as t };
20
20
 
21
- //# sourceMappingURL=MHeading-DBS5Kytw.js.map
21
+ //# sourceMappingURL=MHeading-qOPIM4dL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MHeading-DBS5Kytw.js","names":[],"sources":["../src/components/typography/MHeading/MHeading.tsx"],"sourcesContent":["import {createElement} from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MHeadingProps} from './MHeading.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MHeading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function MHeading({\n level = 2,\n tone = 'default',\n hidden,\n color,\n truncate,\n className,\n style,\n children,\n ...rest\n}: MHeadingProps) {\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return createElement(\n `h${level}`,\n {\n className: cn(\n 'heading',\n `h${level}`,\n !color && tone,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n className\n ),\n style: lines ? ({'--line-clamp': lines, ...style} as CSSProperties) : style,\n ...getHiddenProps(hidden),\n ...rest,\n },\n children\n )\n}\n"],"mappings":";;;;;AASA,SAAgB,EAAS,EACrB,WAAQ,GACR,UAAO,WACP,WACA,UACA,aACA,cACA,UACA,aACA,GAAG,KACW;CACd,IAAM,IAAQ,OAAO,KAAa,WAAW,IAAW,KAAA;AAExD,QAAO,EACH,IAAI,KACJ;EACI,WAAW,EACP,WACA,IAAI,KACJ,CAAC,KAAS,GACV,MAAa,MAAQ,YACrB,KAAS,QAAQ,cACjB,GAAG,EAAwB,EAAC,UAAM,CAAC,EACnC,EACH;EACD,OAAO,IAAS;GAAC,gBAAgB;GAAO,GAAG;GAAM,GAAqB;EACtE,GAAG,EAAe,EAAO;EACzB,GAAG;EACN,EACD,EACH"}
1
+ {"version":3,"file":"MHeading-qOPIM4dL.js","names":[],"sources":["../src/components/typography/MHeading/MHeading.tsx"],"sourcesContent":["import {createElement} from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MHeadingProps} from './MHeading.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MHeading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function MHeading({\n level = 2,\n tone = 'default',\n hidden,\n color,\n truncate,\n className,\n style,\n children,\n ...rest\n}: MHeadingProps) {\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return createElement(\n `h${level}`,\n {\n className: cn(\n 'heading',\n `h${level}`,\n !color && tone,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n className\n ),\n style: lines ? ({'--line-clamp': lines, ...style} as CSSProperties) : style,\n ...getHiddenProps(hidden),\n ...rest,\n },\n children\n )\n}\n"],"mappings":";;;;;AASA,SAAgB,EAAS,EACrB,WAAQ,GACR,UAAO,WACP,WACA,UACA,aACA,cACA,UACA,aACA,GAAG,KACW;CACd,IAAM,IAAQ,OAAO,KAAa,WAAW,IAAW,KAAA;AAExD,QAAO,EACH,IAAI,KACJ;EACI,WAAW,EACP,WACA,IAAI,KACJ,CAAC,KAAS,GACV,MAAa,MAAQ,YACrB,KAAS,QAAQ,cACjB,GAAG,EAAwB,EAAC,UAAM,CAAC,EACnC,EACH;EACD,OAAO,IAAS;GAAC,gBAAgB;GAAO,GAAG;GAAM,GAAqB;EACtE,GAAG,EAAe,EAAO;EACzB,GAAG;EACN,EACD,EACH"}
@@ -69,4 +69,4 @@ function p() {
69
69
  //#endregion
70
70
  export { f as n, p as r, d as t };
71
71
 
72
- //# sourceMappingURL=MI18nProvider-VH14CI8u.js.map
72
+ //# sourceMappingURL=MI18nProvider-BRZxEMqL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MI18nProvider-VH14CI8u.js","names":[],"sources":["../src/i18n/MI18nProvider.tsx"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode} from 'react'\n\nconst STORAGE_KEY = 'mineralui-locale'\n\ntype Dict = Record<string, unknown>\n\n// Read the saved locale, but fall back cleanly in SSR or blocked storage.\nfunction readStored(fallback: string): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? fallback\n } catch {\n return fallback\n }\n}\n\n// Resolve nested translation keys like \"ui.actions.save\".\nfunction getByPath(obj: unknown, path: string): unknown {\n return path\n .split('.')\n .reduce<unknown>((cur, key) => (cur != null && typeof cur === 'object' ? (cur as Dict)[key] : undefined), obj)\n}\n\nexport interface MI18nContextValue<T extends Dict = Dict> {\n locale: string\n setLocale: (next: string) => void\n toggleLocale: () => void\n dict: T\n t: (key: string, fallback?: string) => string\n}\n\nconst I18nContext = createContext<MI18nContextValue | null>(null)\n\nexport interface MI18nProviderProps<T extends Dict = Dict> {\n locales: Record<string, T>\n defaultLocale?: string\n persist?: boolean\n children: ReactNode\n}\n\n// Provide the active locale, dictionary and a tiny dot-path translator.\nexport function MI18nProvider<T extends Dict = Dict>({\n locales,\n defaultLocale,\n persist = true,\n children,\n}: MI18nProviderProps<T>) {\n const keys = useMemo(() => Object.keys(locales), [locales])\n const fallback = defaultLocale ?? keys[0] ?? 'en'\n\n const [locale, setLocaleState] = useState<string>(() => {\n if (persist) {\n const stored = readStored(fallback)\n if (stored in locales) return stored\n }\n return fallback\n })\n\n const setLocale = useCallback(\n (next: string) => {\n setLocaleState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleLocale = useCallback(() => {\n const idx = keys.indexOf(locale)\n const next = keys[(idx + 1) % keys.length]\n setLocale(next)\n }, [keys, locale, setLocale])\n\n useEffect(() => {\n document.documentElement.lang = locale\n }, [locale])\n\n const dict = (locales[locale] ?? locales[fallback] ?? {}) as T\n\n const t = useCallback(\n (key: string, fb?: string): string => {\n const val = getByPath(dict, key)\n if (typeof val === 'string') return val\n\n const docsVal =\n dict != null && typeof dict === 'object' && typeof (dict as Dict).docsTranslations === 'object'\n ? ((dict as Dict).docsTranslations as Dict)[key]\n : undefined\n\n if (typeof docsVal === 'string') return docsVal\n\n return fb ?? key\n },\n [dict]\n )\n\n const ctx = useMemo<MI18nContextValue<T>>(\n () => ({\n locale,\n setLocale,\n toggleLocale,\n dict,\n t,\n }),\n [locale, setLocale, toggleLocale, dict, t]\n )\n\n return <I18nContext.Provider value={ctx as MI18nContextValue}>{children}</I18nContext.Provider>\n}\n\nexport function useMI18n<T extends Dict = Dict>(): MI18nContextValue<T> {\n const ctx = useContext(I18nContext)\n if (!ctx) throw new Error('useMI18n must be used within MI18nProvider')\n return ctx as MI18nContextValue<T>\n}\n\nexport function useOptionalMI18n<T extends Dict = Dict>(): MI18nContextValue<T> | null {\n const ctx = useContext(I18nContext)\n return ctx as MI18nContextValue<T> | null\n}\n"],"mappings":";;;AAEA,IAAM,IAAc;AAKpB,SAAS,EAAW,GAA0B;AAC1C,KAAI;AACA,SAAO,aAAa,QAAQ,EAAY,IAAI;SACxC;AACJ,SAAO;;;AAKf,SAAS,EAAU,GAAc,GAAuB;AACpD,QAAO,EACF,MAAM,IAAI,CACV,QAAiB,GAAK,MAAwB,OAAO,KAAQ,YAA9B,IAA0C,EAAa,KAAO,KAAA,GAAY,EAAI;;AAWtH,IAAM,IAAc,EAAwC,KAAK;AAUjE,SAAgB,EAAqC,EACjD,YACA,kBACA,aAAU,IACV,eACsB;CACtB,IAAM,IAAO,QAAc,OAAO,KAAK,EAAQ,EAAE,CAAC,EAAQ,CAAC,EACrD,IAAW,KAAiB,EAAK,MAAM,MAEvC,CAAC,GAAQ,KAAkB,QAAuB;AACpD,MAAI,GAAS;GACT,IAAM,IAAS,EAAW,EAAS;AACnC,OAAI,KAAU,EAAS,QAAO;;AAElC,SAAO;GACT,EAEI,IAAY,GACb,MAAiB;AAEd,MADA,EAAe,EAAK,EAChB,EACA,KAAI;AACA,gBAAa,QAAQ,GAAa,EAAK;UACnC;IAKhB,CAAC,EAAQ,CACZ,EAEK,IAAe,QAAkB;EAEnC,IAAM,IAAO,GADD,EAAK,QAAQ,EAAO,GACP,KAAK,EAAK;AACnC,IAAU,EAAK;IAChB;EAAC;EAAM;EAAQ;EAAU,CAAC;AAE7B,SAAgB;AACZ,WAAS,gBAAgB,OAAO;IACjC,CAAC,EAAO,CAAC;CAEZ,IAAM,IAAQ,EAAQ,MAAW,EAAQ,MAAa,EAAE,EAElD,IAAI,GACL,GAAa,MAAwB;EAClC,IAAM,IAAM,EAAU,GAAM,EAAI;AAChC,MAAI,OAAO,KAAQ,SAAU,QAAO;EAEpC,IAAM,IACc,OAAO,KAAS,YAAhC,KAA4C,OAAQ,EAAc,oBAAqB,WAC/E,EAAc,iBAA0B,KAC1C,KAAA;AAIV,SAFI,OAAO,KAAY,WAAiB,IAEjC,KAAM;IAEjB,CAAC,EAAK,CACT,EAEK,IAAM,SACD;EACH;EACA;EACA;EACA;EACA;EACH,GACD;EAAC;EAAQ;EAAW;EAAc;EAAM;EAAE,CAC7C;AAED,QAAO,kBAAC,EAAY,UAAb;EAAsB,OAAO;EAA2B;EAAgC,CAAA;;AAGnG,SAAgB,IAAwD;CACpE,IAAM,IAAM,EAAW,EAAY;AACnC,KAAI,CAAC,EAAK,OAAU,MAAM,6CAA6C;AACvE,QAAO;;AAGX,SAAgB,IAAuE;AAEnF,QADY,EAAW,EAAY"}
1
+ {"version":3,"file":"MI18nProvider-BRZxEMqL.js","names":[],"sources":["../src/i18n/MI18nProvider.tsx"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode} from 'react'\n\nconst STORAGE_KEY = 'mineralui-locale'\n\ntype Dict = Record<string, unknown>\n\n// Read the saved locale, but fall back cleanly in SSR or blocked storage.\nfunction readStored(fallback: string): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? fallback\n } catch {\n return fallback\n }\n}\n\n// Resolve nested translation keys like \"ui.actions.save\".\nfunction getByPath(obj: unknown, path: string): unknown {\n return path\n .split('.')\n .reduce<unknown>((cur, key) => (cur != null && typeof cur === 'object' ? (cur as Dict)[key] : undefined), obj)\n}\n\nexport interface MI18nContextValue<T extends Dict = Dict> {\n locale: string\n setLocale: (next: string) => void\n toggleLocale: () => void\n dict: T\n t: (key: string, fallback?: string) => string\n}\n\nconst I18nContext = createContext<MI18nContextValue | null>(null)\n\nexport interface MI18nProviderProps<T extends Dict = Dict> {\n locales: Record<string, T>\n defaultLocale?: string\n persist?: boolean\n children: ReactNode\n}\n\n// Provide the active locale, dictionary and a tiny dot-path translator.\nexport function MI18nProvider<T extends Dict = Dict>({\n locales,\n defaultLocale,\n persist = true,\n children,\n}: MI18nProviderProps<T>) {\n const keys = useMemo(() => Object.keys(locales), [locales])\n const fallback = defaultLocale ?? keys[0] ?? 'en'\n\n const [locale, setLocaleState] = useState<string>(() => {\n if (persist) {\n const stored = readStored(fallback)\n if (stored in locales) return stored\n }\n return fallback\n })\n\n const setLocale = useCallback(\n (next: string) => {\n setLocaleState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleLocale = useCallback(() => {\n const idx = keys.indexOf(locale)\n const next = keys[(idx + 1) % keys.length]\n setLocale(next)\n }, [keys, locale, setLocale])\n\n useEffect(() => {\n document.documentElement.lang = locale\n }, [locale])\n\n const dict = (locales[locale] ?? locales[fallback] ?? {}) as T\n\n const t = useCallback(\n (key: string, fb?: string): string => {\n const val = getByPath(dict, key)\n if (typeof val === 'string') return val\n\n const docsVal =\n dict != null && typeof dict === 'object' && typeof (dict as Dict).docsTranslations === 'object'\n ? ((dict as Dict).docsTranslations as Dict)[key]\n : undefined\n\n if (typeof docsVal === 'string') return docsVal\n\n return fb ?? key\n },\n [dict]\n )\n\n const ctx = useMemo<MI18nContextValue<T>>(\n () => ({\n locale,\n setLocale,\n toggleLocale,\n dict,\n t,\n }),\n [locale, setLocale, toggleLocale, dict, t]\n )\n\n return <I18nContext.Provider value={ctx as MI18nContextValue}>{children}</I18nContext.Provider>\n}\n\nexport function useMI18n<T extends Dict = Dict>(): MI18nContextValue<T> {\n const ctx = useContext(I18nContext)\n if (!ctx) throw new Error('useMI18n must be used within MI18nProvider')\n return ctx as MI18nContextValue<T>\n}\n\nexport function useOptionalMI18n<T extends Dict = Dict>(): MI18nContextValue<T> | null {\n const ctx = useContext(I18nContext)\n return ctx as MI18nContextValue<T> | null\n}\n"],"mappings":";;;AAEA,IAAM,IAAc;AAKpB,SAAS,EAAW,GAA0B;AAC1C,KAAI;AACA,SAAO,aAAa,QAAQ,EAAY,IAAI;SACxC;AACJ,SAAO;;;AAKf,SAAS,EAAU,GAAc,GAAuB;AACpD,QAAO,EACF,MAAM,IAAI,CACV,QAAiB,GAAK,MAAwB,OAAO,KAAQ,YAA9B,IAA0C,EAAa,KAAO,KAAA,GAAY,EAAI;;AAWtH,IAAM,IAAc,EAAwC,KAAK;AAUjE,SAAgB,EAAqC,EACjD,YACA,kBACA,aAAU,IACV,eACsB;CACtB,IAAM,IAAO,QAAc,OAAO,KAAK,EAAQ,EAAE,CAAC,EAAQ,CAAC,EACrD,IAAW,KAAiB,EAAK,MAAM,MAEvC,CAAC,GAAQ,KAAkB,QAAuB;AACpD,MAAI,GAAS;GACT,IAAM,IAAS,EAAW,EAAS;AACnC,OAAI,KAAU,EAAS,QAAO;;AAElC,SAAO;GACT,EAEI,IAAY,GACb,MAAiB;AAEd,MADA,EAAe,EAAK,EAChB,EACA,KAAI;AACA,gBAAa,QAAQ,GAAa,EAAK;UACnC;IAKhB,CAAC,EAAQ,CACZ,EAEK,IAAe,QAAkB;EAEnC,IAAM,IAAO,GADD,EAAK,QAAQ,EAAO,GACP,KAAK,EAAK;AACnC,IAAU,EAAK;IAChB;EAAC;EAAM;EAAQ;EAAU,CAAC;AAE7B,SAAgB;AACZ,WAAS,gBAAgB,OAAO;IACjC,CAAC,EAAO,CAAC;CAEZ,IAAM,IAAQ,EAAQ,MAAW,EAAQ,MAAa,EAAE,EAElD,IAAI,GACL,GAAa,MAAwB;EAClC,IAAM,IAAM,EAAU,GAAM,EAAI;AAChC,MAAI,OAAO,KAAQ,SAAU,QAAO;EAEpC,IAAM,IACc,OAAO,KAAS,YAAhC,KAA4C,OAAQ,EAAc,oBAAqB,WAC/E,EAAc,iBAA0B,KAC1C,KAAA;AAIV,SAFI,OAAO,KAAY,WAAiB,IAEjC,KAAM;IAEjB,CAAC,EAAK,CACT,EAEK,IAAM,SACD;EACH;EACA;EACA;EACA;EACA;EACH,GACD;EAAC;EAAQ;EAAW;EAAc;EAAM;EAAE,CAC7C;AAED,QAAO,kBAAC,EAAY,UAAb;EAAsB,OAAO;EAA2B;EAAgC,CAAA;;AAGnG,SAAgB,IAAwD;CACpE,IAAM,IAAM,EAAW,EAAY;AACnC,KAAI,CAAC,EAAK,OAAU,MAAM,6CAA6C;AACvE,QAAO;;AAGX,SAAgB,IAAuE;AAEnF,QADY,EAAW,EAAY"}
@@ -0,0 +1,2 @@
1
+ require(`./chunk-350yNsax.cjs`);let e=require(`react`),t=require(`react/jsx-runtime`);var n=`mineralui-locale`;function r(e){try{return localStorage.getItem(n)??e}catch{return e}}function i(e,t){return t.split(`.`).reduce((e,t)=>typeof e==`object`&&e?e[t]:void 0,e)}var a=(0,e.createContext)(null);function o({locales:o,defaultLocale:s,persist:c=!0,children:l}){let u=(0,e.useMemo)(()=>Object.keys(o),[o]),d=s??u[0]??`en`,[f,p]=(0,e.useState)(()=>{if(c){let e=r(d);if(e in o)return e}return d}),m=(0,e.useCallback)(e=>{if(p(e),c)try{localStorage.setItem(n,e)}catch{}},[c]),h=(0,e.useCallback)(()=>{let e=u[(u.indexOf(f)+1)%u.length];m(e)},[u,f,m]);(0,e.useEffect)(()=>{document.documentElement.lang=f},[f]);let g=o[f]??o[d]??{},_=(0,e.useCallback)((e,t)=>{let n=i(g,e);if(typeof n==`string`)return n;let r=typeof g==`object`&&g&&typeof g.docsTranslations==`object`?g.docsTranslations[e]:void 0;return typeof r==`string`?r:t??e},[g]),v=(0,e.useMemo)(()=>({locale:f,setLocale:m,toggleLocale:h,dict:g,t:_}),[f,m,h,g,_]);return(0,t.jsx)(a.Provider,{value:v,children:l})}function s(){let t=(0,e.useContext)(a);if(!t)throw Error(`useMI18n must be used within MI18nProvider`);return t}function c(){return(0,e.useContext)(a)}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
2
+ //# sourceMappingURL=MI18nProvider-Bml7Vs2-.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MI18nProvider-4ji0oN3U.cjs","names":[],"sources":["../src/i18n/MI18nProvider.tsx"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode} from 'react'\n\nconst STORAGE_KEY = 'mineralui-locale'\n\ntype Dict = Record<string, unknown>\n\n// Read the saved locale, but fall back cleanly in SSR or blocked storage.\nfunction readStored(fallback: string): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? fallback\n } catch {\n return fallback\n }\n}\n\n// Resolve nested translation keys like \"ui.actions.save\".\nfunction getByPath(obj: unknown, path: string): unknown {\n return path\n .split('.')\n .reduce<unknown>((cur, key) => (cur != null && typeof cur === 'object' ? (cur as Dict)[key] : undefined), obj)\n}\n\nexport interface MI18nContextValue<T extends Dict = Dict> {\n locale: string\n setLocale: (next: string) => void\n toggleLocale: () => void\n dict: T\n t: (key: string, fallback?: string) => string\n}\n\nconst I18nContext = createContext<MI18nContextValue | null>(null)\n\nexport interface MI18nProviderProps<T extends Dict = Dict> {\n locales: Record<string, T>\n defaultLocale?: string\n persist?: boolean\n children: ReactNode\n}\n\n// Provide the active locale, dictionary and a tiny dot-path translator.\nexport function MI18nProvider<T extends Dict = Dict>({\n locales,\n defaultLocale,\n persist = true,\n children,\n}: MI18nProviderProps<T>) {\n const keys = useMemo(() => Object.keys(locales), [locales])\n const fallback = defaultLocale ?? keys[0] ?? 'en'\n\n const [locale, setLocaleState] = useState<string>(() => {\n if (persist) {\n const stored = readStored(fallback)\n if (stored in locales) return stored\n }\n return fallback\n })\n\n const setLocale = useCallback(\n (next: string) => {\n setLocaleState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleLocale = useCallback(() => {\n const idx = keys.indexOf(locale)\n const next = keys[(idx + 1) % keys.length]\n setLocale(next)\n }, [keys, locale, setLocale])\n\n useEffect(() => {\n document.documentElement.lang = locale\n }, [locale])\n\n const dict = (locales[locale] ?? locales[fallback] ?? {}) as T\n\n const t = useCallback(\n (key: string, fb?: string): string => {\n const val = getByPath(dict, key)\n if (typeof val === 'string') return val\n\n const docsVal =\n dict != null && typeof dict === 'object' && typeof (dict as Dict).docsTranslations === 'object'\n ? ((dict as Dict).docsTranslations as Dict)[key]\n : undefined\n\n if (typeof docsVal === 'string') return docsVal\n\n return fb ?? key\n },\n [dict]\n )\n\n const ctx = useMemo<MI18nContextValue<T>>(\n () => ({\n locale,\n setLocale,\n toggleLocale,\n dict,\n t,\n }),\n [locale, setLocale, toggleLocale, dict, t]\n )\n\n return <I18nContext.Provider value={ctx as MI18nContextValue}>{children}</I18nContext.Provider>\n}\n\nexport function useMI18n<T extends Dict = Dict>(): MI18nContextValue<T> {\n const ctx = useContext(I18nContext)\n if (!ctx) throw new Error('useMI18n must be used within MI18nProvider')\n return ctx as MI18nContextValue<T>\n}\n\nexport function useOptionalMI18n<T extends Dict = Dict>(): MI18nContextValue<T> | null {\n const ctx = useContext(I18nContext)\n return ctx as MI18nContextValue<T> | null\n}\n"],"mappings":"sDAEA,IAAM,EAAc,mBAKpB,SAAS,EAAW,EAA0B,CAC1C,GAAI,CACA,OAAO,aAAa,QAAQ,EAAY,EAAI,OACxC,CACJ,OAAO,GAKf,SAAS,EAAU,EAAc,EAAuB,CACpD,OAAO,EACF,MAAM,IAAI,CACV,QAAiB,EAAK,IAAwB,OAAO,GAAQ,UAA9B,EAA0C,EAAa,GAAO,IAAA,GAAY,EAAI,CAWtH,IAAM,GAAA,EAAA,EAAA,eAAsD,KAAK,CAUjE,SAAgB,EAAqC,CACjD,UACA,gBACA,UAAU,GACV,YACsB,CACtB,IAAM,GAAA,EAAA,EAAA,aAAqB,OAAO,KAAK,EAAQ,CAAE,CAAC,EAAQ,CAAC,CACrD,EAAW,GAAiB,EAAK,IAAM,KAEvC,CAAC,EAAQ,IAAA,EAAA,EAAA,cAAyC,CACpD,GAAI,EAAS,CACT,IAAM,EAAS,EAAW,EAAS,CACnC,GAAI,KAAU,EAAS,OAAO,EAElC,OAAO,GACT,CAEI,GAAA,EAAA,EAAA,aACD,GAAiB,CAEd,GADA,EAAe,EAAK,CAChB,EACA,GAAI,CACA,aAAa,QAAQ,EAAa,EAAK,MACnC,IAKhB,CAAC,EAAQ,CACZ,CAEK,GAAA,EAAA,EAAA,iBAAiC,CAEnC,IAAM,EAAO,GADD,EAAK,QAAQ,EAAO,CACP,GAAK,EAAK,QACnC,EAAU,EAAK,EAChB,CAAC,EAAM,EAAQ,EAAU,CAAC,EAE7B,EAAA,EAAA,eAAgB,CACZ,SAAS,gBAAgB,KAAO,GACjC,CAAC,EAAO,CAAC,CAEZ,IAAM,EAAQ,EAAQ,IAAW,EAAQ,IAAa,EAAE,CAElD,GAAA,EAAA,EAAA,cACD,EAAa,IAAwB,CAClC,IAAM,EAAM,EAAU,EAAM,EAAI,CAChC,GAAI,OAAO,GAAQ,SAAU,OAAO,EAEpC,IAAM,EACc,OAAO,GAAS,UAAhC,GAA4C,OAAQ,EAAc,kBAAqB,SAC/E,EAAc,iBAA0B,GAC1C,IAAA,GAIV,OAFI,OAAO,GAAY,SAAiB,EAEjC,GAAM,GAEjB,CAAC,EAAK,CACT,CAEK,GAAA,EAAA,EAAA,cACK,CACH,SACA,YACA,eACA,OACA,IACH,EACD,CAAC,EAAQ,EAAW,EAAc,EAAM,EAAE,CAC7C,CAED,OAAO,EAAA,EAAA,KAAC,EAAY,SAAb,CAAsB,MAAO,EAA2B,WAAgC,CAAA,CAGnG,SAAgB,GAAwD,CACpE,IAAM,GAAA,EAAA,EAAA,YAAiB,EAAY,CACnC,GAAI,CAAC,EAAK,MAAU,MAAM,6CAA6C,CACvE,OAAO,EAGX,SAAgB,GAAuE,CAEnF,OAAA,EAAA,EAAA,YADuB,EAAY"}
1
+ {"version":3,"file":"MI18nProvider-Bml7Vs2-.cjs","names":[],"sources":["../src/i18n/MI18nProvider.tsx"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode} from 'react'\n\nconst STORAGE_KEY = 'mineralui-locale'\n\ntype Dict = Record<string, unknown>\n\n// Read the saved locale, but fall back cleanly in SSR or blocked storage.\nfunction readStored(fallback: string): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? fallback\n } catch {\n return fallback\n }\n}\n\n// Resolve nested translation keys like \"ui.actions.save\".\nfunction getByPath(obj: unknown, path: string): unknown {\n return path\n .split('.')\n .reduce<unknown>((cur, key) => (cur != null && typeof cur === 'object' ? (cur as Dict)[key] : undefined), obj)\n}\n\nexport interface MI18nContextValue<T extends Dict = Dict> {\n locale: string\n setLocale: (next: string) => void\n toggleLocale: () => void\n dict: T\n t: (key: string, fallback?: string) => string\n}\n\nconst I18nContext = createContext<MI18nContextValue | null>(null)\n\nexport interface MI18nProviderProps<T extends Dict = Dict> {\n locales: Record<string, T>\n defaultLocale?: string\n persist?: boolean\n children: ReactNode\n}\n\n// Provide the active locale, dictionary and a tiny dot-path translator.\nexport function MI18nProvider<T extends Dict = Dict>({\n locales,\n defaultLocale,\n persist = true,\n children,\n}: MI18nProviderProps<T>) {\n const keys = useMemo(() => Object.keys(locales), [locales])\n const fallback = defaultLocale ?? keys[0] ?? 'en'\n\n const [locale, setLocaleState] = useState<string>(() => {\n if (persist) {\n const stored = readStored(fallback)\n if (stored in locales) return stored\n }\n return fallback\n })\n\n const setLocale = useCallback(\n (next: string) => {\n setLocaleState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleLocale = useCallback(() => {\n const idx = keys.indexOf(locale)\n const next = keys[(idx + 1) % keys.length]\n setLocale(next)\n }, [keys, locale, setLocale])\n\n useEffect(() => {\n document.documentElement.lang = locale\n }, [locale])\n\n const dict = (locales[locale] ?? locales[fallback] ?? {}) as T\n\n const t = useCallback(\n (key: string, fb?: string): string => {\n const val = getByPath(dict, key)\n if (typeof val === 'string') return val\n\n const docsVal =\n dict != null && typeof dict === 'object' && typeof (dict as Dict).docsTranslations === 'object'\n ? ((dict as Dict).docsTranslations as Dict)[key]\n : undefined\n\n if (typeof docsVal === 'string') return docsVal\n\n return fb ?? key\n },\n [dict]\n )\n\n const ctx = useMemo<MI18nContextValue<T>>(\n () => ({\n locale,\n setLocale,\n toggleLocale,\n dict,\n t,\n }),\n [locale, setLocale, toggleLocale, dict, t]\n )\n\n return <I18nContext.Provider value={ctx as MI18nContextValue}>{children}</I18nContext.Provider>\n}\n\nexport function useMI18n<T extends Dict = Dict>(): MI18nContextValue<T> {\n const ctx = useContext(I18nContext)\n if (!ctx) throw new Error('useMI18n must be used within MI18nProvider')\n return ctx as MI18nContextValue<T>\n}\n\nexport function useOptionalMI18n<T extends Dict = Dict>(): MI18nContextValue<T> | null {\n const ctx = useContext(I18nContext)\n return ctx as MI18nContextValue<T> | null\n}\n"],"mappings":"sFAEA,IAAM,EAAc,mBAKpB,SAAS,EAAW,EAA0B,CAC1C,GAAI,CACA,OAAO,aAAa,QAAQ,EAAY,EAAI,OACxC,CACJ,OAAO,GAKf,SAAS,EAAU,EAAc,EAAuB,CACpD,OAAO,EACF,MAAM,IAAI,CACV,QAAiB,EAAK,IAAwB,OAAO,GAAQ,UAA9B,EAA0C,EAAa,GAAO,IAAA,GAAY,EAAI,CAWtH,IAAM,GAAA,EAAA,EAAA,eAAsD,KAAK,CAUjE,SAAgB,EAAqC,CACjD,UACA,gBACA,UAAU,GACV,YACsB,CACtB,IAAM,GAAA,EAAA,EAAA,aAAqB,OAAO,KAAK,EAAQ,CAAE,CAAC,EAAQ,CAAC,CACrD,EAAW,GAAiB,EAAK,IAAM,KAEvC,CAAC,EAAQ,IAAA,EAAA,EAAA,cAAyC,CACpD,GAAI,EAAS,CACT,IAAM,EAAS,EAAW,EAAS,CACnC,GAAI,KAAU,EAAS,OAAO,EAElC,OAAO,GACT,CAEI,GAAA,EAAA,EAAA,aACD,GAAiB,CAEd,GADA,EAAe,EAAK,CAChB,EACA,GAAI,CACA,aAAa,QAAQ,EAAa,EAAK,MACnC,IAKhB,CAAC,EAAQ,CACZ,CAEK,GAAA,EAAA,EAAA,iBAAiC,CAEnC,IAAM,EAAO,GADD,EAAK,QAAQ,EAAO,CACP,GAAK,EAAK,QACnC,EAAU,EAAK,EAChB,CAAC,EAAM,EAAQ,EAAU,CAAC,EAE7B,EAAA,EAAA,eAAgB,CACZ,SAAS,gBAAgB,KAAO,GACjC,CAAC,EAAO,CAAC,CAEZ,IAAM,EAAQ,EAAQ,IAAW,EAAQ,IAAa,EAAE,CAElD,GAAA,EAAA,EAAA,cACD,EAAa,IAAwB,CAClC,IAAM,EAAM,EAAU,EAAM,EAAI,CAChC,GAAI,OAAO,GAAQ,SAAU,OAAO,EAEpC,IAAM,EACc,OAAO,GAAS,UAAhC,GAA4C,OAAQ,EAAc,kBAAqB,SAC/E,EAAc,iBAA0B,GAC1C,IAAA,GAIV,OAFI,OAAO,GAAY,SAAiB,EAEjC,GAAM,GAEjB,CAAC,EAAK,CACT,CAEK,GAAA,EAAA,EAAA,cACK,CACH,SACA,YACA,eACA,OACA,IACH,EACD,CAAC,EAAQ,EAAW,EAAc,EAAM,EAAE,CAC7C,CAED,OAAO,EAAA,EAAA,KAAC,EAAY,SAAb,CAAsB,MAAO,EAA2B,WAAgC,CAAA,CAGnG,SAAgB,GAAwD,CACpE,IAAM,GAAA,EAAA,EAAA,YAAiB,EAAY,CACnC,GAAI,CAAC,EAAK,MAAU,MAAM,6CAA6C,CACvE,OAAO,EAGX,SAAgB,GAAuE,CAEnF,OAAA,EAAA,EAAA,YADuB,EAAY"}
@@ -0,0 +1,2 @@
1
+ require(`./chunk-350yNsax.cjs`);const e=require(`./theme-Bnwe-wvr.cjs`),t=require(`./cn-DYFxgzi2.cjs`),n=require(`./useInteractionEffect-CYHGHV1e.cjs`),r=require(`./MSkeleton-CQEnuIos.cjs`);let i=require(`react`),a=require(`react/jsx-runtime`);var o={"1:1":`1 / 1`,"4:3":`4 / 3`,"16:9":`16 / 9`,"21:9":`21 / 9`};function s({fit:s=`cover`,ratio:c=`auto`,hidden:l,rounded:u=!1,bordered:d=!1,shadow:f=!1,clickEffect:p=`none`,fallback:m,skeleton:h=!1,className:g,style:_,alt:v,onError:y,...b}){let[x,S]=(0,i.useState)(!1),{effectClassName:C,effectLayer:w,handlePointerDown:T}=n.t({effect:h?`none`:p}),E=e=>{m&&!x&&(S(!0),e.currentTarget.src=m),y?.(e)},D=c!==`auto`&&!!o[c],O=D?{aspectRatio:o[c],..._}:_;if(h)return(0,a.jsx)(r.t,{variant:`rectangle`,animate:`pulse`,className:t.t(`image-skeleton`,u&&`rounded`,d&&`bordered`,g),style:O,"aria-label":`Loading`,...e.r(l)});let k=t.t(`image`,s,!w&&u&&`rounded`,!w&&d&&`bordered`,!w&&f&&`shadow`);return w?(0,a.jsxs)(`span`,{className:t.t(`image-wrap`,D&&`has-ratio`,u&&`rounded`,d&&`bordered`,f&&`shadow`,C,g),style:O,onPointerDown:T,...e.r(l),children:[w,(0,a.jsx)(`img`,{className:k,onError:E,...b,alt:v??``})]}):(0,a.jsx)(`img`,{className:t.t(k,g),style:O,onError:E,...e.r(l),...b,alt:v??``})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
2
+ //# sourceMappingURL=MImage-DXy-dHas.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MImage-2Xztd_N6.cjs","names":[],"sources":["../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type * as React from 'react'\nimport type {MImageProps} from './MImage.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n fit = 'cover',\n ratio = 'auto',\n hidden,\n rounded = false,\n bordered = false,\n shadow = false,\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const ratioStyle = hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio], ...style} : style\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n {...getHiddenProps(hidden)}\n />\n )\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n\n if (effectLayer) {\n return (\n <span\n className={cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n effectClassName,\n className\n )}\n style={ratioStyle}\n onPointerDown={handlePointerDown}\n {...getHiddenProps(hidden)}\n >\n {effectLayer}\n <img className={imgClassName} onError={handleError} {...rest} alt={alt ?? ''} />\n </span>\n )\n }\n\n return (\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n {...getHiddenProps(hidden)}\n {...rest}\n alt={alt ?? ''}\n />\n )\n}\n"],"mappings":"oNASA,IAAM,EAAoC,CACtC,MAAO,QACP,MAAO,QACP,OAAQ,SACR,OAAQ,SACX,CAGD,SAAgB,EAAO,CACnB,MAAM,QACN,QAAQ,OACR,SACA,UAAU,GACV,WAAW,GACX,SAAS,GACT,cAAc,OACd,WACA,WAAW,GACX,YACA,QACA,MACA,UACA,GAAG,GACS,CACZ,GAAM,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,GAAM,CACvC,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAsC,CAC5F,OAAQ,EAAW,OAAS,EAC/B,CAAC,CAEI,EAAe,GAA8C,CAC3D,GAAY,CAAC,IACb,EAAW,GAAK,CAChB,EAAE,cAAc,IAAM,GAE1B,IAAU,EAAE,EAGV,EAAgB,IAAU,QAAU,CAAC,CAAC,EAAU,GAChD,EAAa,EAAgB,CAAC,YAAa,EAAU,GAAQ,GAAG,EAAM,CAAG,EAG/E,GAAI,EACA,OACI,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,YACR,QAAQ,QACR,UAAW,EAAA,EAAG,iBAAkB,GAAW,UAAW,GAAY,WAAY,EAAU,CACxF,MAAO,EACP,aAAW,UACX,GAAI,EAAA,EAAe,EAAO,CAC5B,CAAA,CAIV,IAAM,EAAe,EAAA,EACjB,QACA,EACA,CAAC,GAAe,GAAW,UAC3B,CAAC,GAAe,GAAY,WAC5B,CAAC,GAAe,GAAU,SAC7B,CAwBD,OAtBI,GAEI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,aACA,GAAiB,YACjB,GAAW,UACX,GAAY,WACZ,GAAU,SACV,EACA,EACH,CACD,MAAO,EACP,cAAe,EACf,GAAI,EAAA,EAAe,EAAO,UAZ9B,CAcK,GACD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAc,QAAS,EAAa,GAAI,EAAM,IAAK,GAAO,GAAM,CAAA,CAC7E,IAKX,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,EAAc,EAAU,CACtC,MAAO,EACP,QAAS,EACT,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EACJ,IAAK,GAAO,GACd,CAAA"}
1
+ {"version":3,"file":"MImage-DXy-dHas.cjs","names":[],"sources":["../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type * as React from 'react'\nimport type {MImageProps} from './MImage.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n fit = 'cover',\n ratio = 'auto',\n hidden,\n rounded = false,\n bordered = false,\n shadow = false,\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const ratioStyle = hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio], ...style} : style\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n {...getHiddenProps(hidden)}\n />\n )\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n\n if (effectLayer) {\n return (\n <span\n className={cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n effectClassName,\n className\n )}\n style={ratioStyle}\n onPointerDown={handlePointerDown}\n {...getHiddenProps(hidden)}\n >\n {effectLayer}\n <img className={imgClassName} onError={handleError} {...rest} alt={alt ?? ''} />\n </span>\n )\n }\n\n return (\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n {...getHiddenProps(hidden)}\n {...rest}\n alt={alt ?? ''}\n />\n )\n}\n"],"mappings":"oPASA,IAAM,EAAoC,CACtC,MAAO,QACP,MAAO,QACP,OAAQ,SACR,OAAQ,SACX,CAGD,SAAgB,EAAO,CACnB,MAAM,QACN,QAAQ,OACR,SACA,UAAU,GACV,WAAW,GACX,SAAS,GACT,cAAc,OACd,WACA,WAAW,GACX,YACA,QACA,MACA,UACA,GAAG,GACS,CACZ,GAAM,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,GAAM,CACvC,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAsC,CAC5F,OAAQ,EAAW,OAAS,EAC/B,CAAC,CAEI,EAAe,GAA8C,CAC3D,GAAY,CAAC,IACb,EAAW,GAAK,CAChB,EAAE,cAAc,IAAM,GAE1B,IAAU,EAAE,EAGV,EAAgB,IAAU,QAAU,CAAC,CAAC,EAAU,GAChD,EAAa,EAAgB,CAAC,YAAa,EAAU,GAAQ,GAAG,EAAM,CAAG,EAG/E,GAAI,EACA,OACI,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,YACR,QAAQ,QACR,UAAW,EAAA,EAAG,iBAAkB,GAAW,UAAW,GAAY,WAAY,EAAU,CACxF,MAAO,EACP,aAAW,UACX,GAAI,EAAA,EAAe,EAAO,CAC5B,CAAA,CAIV,IAAM,EAAe,EAAA,EACjB,QACA,EACA,CAAC,GAAe,GAAW,UAC3B,CAAC,GAAe,GAAY,WAC5B,CAAC,GAAe,GAAU,SAC7B,CAwBD,OAtBI,GAEI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,aACA,GAAiB,YACjB,GAAW,UACX,GAAY,WACZ,GAAU,SACV,EACA,EACH,CACD,MAAO,EACP,cAAe,EACf,GAAI,EAAA,EAAe,EAAO,UAZ9B,CAcK,GACD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAc,QAAS,EAAa,GAAI,EAAM,IAAK,GAAO,GAAM,CAAA,CAC7E,IAKX,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,EAAc,EAAU,CACtC,MAAO,EACP,QAAS,EACT,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EACJ,IAAK,GAAO,GACd,CAAA"}
@@ -1,7 +1,7 @@
1
- import { r as e } from "./theme-XRUdoLqw.js";
2
- import { t } from "./cn-YER3QsV1.js";
3
- import { t as n } from "./useInteractionEffect-DtpbVd77.js";
4
- import { t as r } from "./MSkeleton-Cwa-JRxo.js";
1
+ import { r as e } from "./theme-KYwqDZxJ.js";
2
+ import { t } from "./cn-CUSXNnjF.js";
3
+ import { t as n } from "./useInteractionEffect-ClkU3aH5.js";
4
+ import { t as r } from "./MSkeleton-CJIlxsCx.js";
5
5
  import { useState as i } from "react";
6
6
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
7
  //#region src/components/media/MImage/MImage.tsx
@@ -50,4 +50,4 @@ function c({ fit: c = "cover", ratio: l = "auto", hidden: u, rounded: d = !1, bo
50
50
  //#endregion
51
51
  export { c as t };
52
52
 
53
- //# sourceMappingURL=MImage-UmiZwzDJ.js.map
53
+ //# sourceMappingURL=MImage-Dp81HSZr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MImage-UmiZwzDJ.js","names":[],"sources":["../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type * as React from 'react'\nimport type {MImageProps} from './MImage.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n fit = 'cover',\n ratio = 'auto',\n hidden,\n rounded = false,\n bordered = false,\n shadow = false,\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const ratioStyle = hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio], ...style} : style\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n {...getHiddenProps(hidden)}\n />\n )\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n\n if (effectLayer) {\n return (\n <span\n className={cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n effectClassName,\n className\n )}\n style={ratioStyle}\n onPointerDown={handlePointerDown}\n {...getHiddenProps(hidden)}\n >\n {effectLayer}\n <img className={imgClassName} onError={handleError} {...rest} alt={alt ?? ''} />\n </span>\n )\n }\n\n return (\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n {...getHiddenProps(hidden)}\n {...rest}\n alt={alt ?? ''}\n />\n )\n}\n"],"mappings":";;;;;;;AASA,IAAM,IAAoC;CACtC,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;CACX;AAGD,SAAgB,EAAO,EACnB,SAAM,SACN,WAAQ,QACR,WACA,aAAU,IACV,cAAW,IACX,YAAS,IACT,iBAAc,QACd,aACA,cAAW,IACX,cACA,UACA,QACA,YACA,GAAG,KACS;CACZ,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,EAAC,oBAAiB,gBAAa,yBAAqB,EAAsC,EAC5F,QAAQ,IAAW,SAAS,GAC/B,CAAC,EAEI,KAAe,MAA8C;AAK/D,EAJI,KAAY,CAAC,MACb,EAAW,GAAK,EAChB,EAAE,cAAc,MAAM,IAE1B,IAAU,EAAE;IAGV,IAAgB,MAAU,UAAU,CAAC,CAAC,EAAU,IAChD,IAAa,IAAgB;EAAC,aAAa,EAAU;EAAQ,GAAG;EAAM,GAAG;AAG/E,KAAI,EACA,QACI,kBAAC,GAAD;EACI,SAAQ;EACR,SAAQ;EACR,WAAW,EAAG,kBAAkB,KAAW,WAAW,KAAY,YAAY,EAAU;EACxF,OAAO;EACP,cAAW;EACX,GAAI,EAAe,EAAO;EAC5B,CAAA;CAIV,IAAM,IAAe,EACjB,SACA,GACA,CAAC,KAAe,KAAW,WAC3B,CAAC,KAAe,KAAY,YAC5B,CAAC,KAAe,KAAU,SAC7B;AAwBD,QAtBI,IAEI,kBAAC,QAAD;EACI,WAAW,EACP,cACA,KAAiB,aACjB,KAAW,WACX,KAAY,YACZ,KAAU,UACV,GACA,EACH;EACD,OAAO;EACP,eAAe;EACf,GAAI,EAAe,EAAO;YAZ9B,CAcK,GACD,kBAAC,OAAD;GAAK,WAAW;GAAc,SAAS;GAAa,GAAI;GAAM,KAAK,KAAO;GAAM,CAAA,CAC7E;MAKX,kBAAC,OAAD;EACI,WAAW,EAAG,GAAc,EAAU;EACtC,OAAO;EACP,SAAS;EACT,GAAI,EAAe,EAAO;EAC1B,GAAI;EACJ,KAAK,KAAO;EACd,CAAA"}
1
+ {"version":3,"file":"MImage-Dp81HSZr.js","names":[],"sources":["../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type * as React from 'react'\nimport type {MImageProps} from './MImage.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n fit = 'cover',\n ratio = 'auto',\n hidden,\n rounded = false,\n bordered = false,\n shadow = false,\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const ratioStyle = hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio], ...style} : style\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n {...getHiddenProps(hidden)}\n />\n )\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n\n if (effectLayer) {\n return (\n <span\n className={cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n effectClassName,\n className\n )}\n style={ratioStyle}\n onPointerDown={handlePointerDown}\n {...getHiddenProps(hidden)}\n >\n {effectLayer}\n <img className={imgClassName} onError={handleError} {...rest} alt={alt ?? ''} />\n </span>\n )\n }\n\n return (\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n {...getHiddenProps(hidden)}\n {...rest}\n alt={alt ?? ''}\n />\n )\n}\n"],"mappings":";;;;;;;AASA,IAAM,IAAoC;CACtC,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;CACX;AAGD,SAAgB,EAAO,EACnB,SAAM,SACN,WAAQ,QACR,WACA,aAAU,IACV,cAAW,IACX,YAAS,IACT,iBAAc,QACd,aACA,cAAW,IACX,cACA,UACA,QACA,YACA,GAAG,KACS;CACZ,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,EAAC,oBAAiB,gBAAa,yBAAqB,EAAsC,EAC5F,QAAQ,IAAW,SAAS,GAC/B,CAAC,EAEI,KAAe,MAA8C;AAK/D,EAJI,KAAY,CAAC,MACb,EAAW,GAAK,EAChB,EAAE,cAAc,MAAM,IAE1B,IAAU,EAAE;IAGV,IAAgB,MAAU,UAAU,CAAC,CAAC,EAAU,IAChD,IAAa,IAAgB;EAAC,aAAa,EAAU;EAAQ,GAAG;EAAM,GAAG;AAG/E,KAAI,EACA,QACI,kBAAC,GAAD;EACI,SAAQ;EACR,SAAQ;EACR,WAAW,EAAG,kBAAkB,KAAW,WAAW,KAAY,YAAY,EAAU;EACxF,OAAO;EACP,cAAW;EACX,GAAI,EAAe,EAAO;EAC5B,CAAA;CAIV,IAAM,IAAe,EACjB,SACA,GACA,CAAC,KAAe,KAAW,WAC3B,CAAC,KAAe,KAAY,YAC5B,CAAC,KAAe,KAAU,SAC7B;AAwBD,QAtBI,IAEI,kBAAC,QAAD;EACI,WAAW,EACP,cACA,KAAiB,aACjB,KAAW,WACX,KAAY,YACZ,KAAU,UACV,GACA,EACH;EACD,OAAO;EACP,eAAe;EACf,GAAI,EAAe,EAAO;YAZ9B,CAcK,GACD,kBAAC,OAAD;GAAK,WAAW;GAAc,SAAS;GAAa,GAAI;GAAM,KAAK,KAAO;GAAM,CAAA,CAC7E;MAKX,kBAAC,OAAD;EACI,WAAW,EAAG,GAAc,EAAU;EACtC,OAAO;EACP,SAAS;EACT,GAAI,EAAe,EAAO;EAC1B,GAAI;EACJ,KAAK,KAAO;EACd,CAAA"}
@@ -1,7 +1,7 @@
1
- import { r as e } from "./theme-XRUdoLqw.js";
2
- import { t } from "./cn-YER3QsV1.js";
3
- import { t as n } from "./useReveal-BJ59usiL.js";
4
- import { n as r, t as i } from "./layoutProps-Cl6d1KmH.js";
1
+ import { r as e } from "./theme-KYwqDZxJ.js";
2
+ import { t } from "./cn-CUSXNnjF.js";
3
+ import { t as n } from "./useReveal-JAiIFTia.js";
4
+ import { n as r, t as i } from "./layoutProps-Cwq4EXTV.js";
5
5
  import { jsx as a } from "react/jsx-runtime";
6
6
  //#region src/components/layout/MInline/MInline.tsx
7
7
  function o({ align: o = "center", justify: s = "start", wrap: c = "wrap", hidden: l, reveal: u, spacing: d, padding: f, fsize: p, mt: m, mb: h, ml: g, mr: _, mx: v, my: y, pt: b, pb: x, pl: S, pr: C, px: w, py: T, fullWidth: E, className: D, style: O, children: k, ...A }) {
@@ -38,4 +38,4 @@ function o({ align: o = "center", justify: s = "start", wrap: c = "wrap", hidden
38
38
  //#endregion
39
39
  export { o as t };
40
40
 
41
- //# sourceMappingURL=MInline-BYsbmfkz.js.map
41
+ //# sourceMappingURL=MInline-CnxH6VZx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MInline-BYsbmfkz.js","names":[],"sources":["../src/components/layout/MInline/MInline.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {useReveal} from '../../../utils/useReveal'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\n reveal,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const revealRef = useReveal<HTMLDivElement>(reveal)\n\n return (\n <div\n ref={reveal !== undefined && reveal !== false ? revealRef : undefined}\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n reveal !== undefined && reveal !== false && 'reveal',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":";;;;;;AAQA,SAAgB,EAAQ,EACpB,WAAQ,UACR,aAAU,SACV,UAAO,QACP,WACA,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC,EAC9C,IAAY,EAA0B,EAAO;AAEnD,QACI,kBAAC,OAAD;EACI,KAAK,MAAW,KAAA,KAAa,MAAW,KAAQ,IAAY,KAAA;EAC5D,WAAW,EACP,UACA,GACA,WAAW,KACX,GACA,MAAW,KAAA,KAAa,MAAW,MAAS,UAC5C,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA"}
1
+ {"version":3,"file":"MInline-CnxH6VZx.js","names":[],"sources":["../src/components/layout/MInline/MInline.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {useReveal} from '../../../utils/useReveal'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\n reveal,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const revealRef = useReveal<HTMLDivElement>(reveal)\n\n return (\n <div\n ref={reveal !== undefined && reveal !== false ? revealRef : undefined}\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n reveal !== undefined && reveal !== false && 'reveal',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":";;;;;;AAQA,SAAgB,EAAQ,EACpB,WAAQ,UACR,aAAU,SACV,UAAO,QACP,WACA,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC,EAC9C,IAAY,EAA0B,EAAO;AAEnD,QACI,kBAAC,OAAD;EACI,KAAK,MAAW,KAAA,KAAa,MAAW,KAAQ,IAAY,KAAA;EAC5D,WAAW,EACP,UACA,GACA,WAAW,KACX,GACA,MAAW,KAAA,KAAa,MAAW,MAAS,UAC5C,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA"}
@@ -0,0 +1,2 @@
1
+ require(`./chunk-350yNsax.cjs`);const e=require(`./theme-Bnwe-wvr.cjs`),t=require(`./cn-DYFxgzi2.cjs`),n=require(`./useReveal-DVwtH8Dl.cjs`),r=require(`./layoutProps-DbnX4zRp.cjs`);let i=require(`react/jsx-runtime`);function a({align:a=`center`,justify:o=`start`,wrap:s=`wrap`,hidden:c,reveal:l,spacing:u,padding:d,fsize:f,mt:p,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T,className:E,style:D,children:O,...k}){let A=r.n({fsize:f}),j=n.t(l);return(0,i.jsx)(`div`,{ref:l!==void 0&&l!==!1?j:void 0,className:t.t(`inline`,a,`justify-${o}`,s,l!==void 0&&l!==!1&&`reveal`,...r.t({spacing:u,padding:d,fsize:f,mt:p,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T}),E),style:{...A,...D},...e.r(c),...k,children:O})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MInline-DYy3IhF-.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MInline-oCvhfJwM.cjs","names":[],"sources":["../src/components/layout/MInline/MInline.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {useReveal} from '../../../utils/useReveal'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\n reveal,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const revealRef = useReveal<HTMLDivElement>(reveal)\n\n return (\n <div\n ref={reveal !== undefined && reveal !== false ? revealRef : undefined}\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n reveal !== undefined && reveal !== false && 'reveal',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"wLAQA,SAAgB,EAAQ,CACpB,QAAQ,SACR,UAAU,QACV,OAAO,OACP,SACA,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACU,CACb,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAY,EAAA,EAA0B,EAAO,CAEnD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,IAAW,IAAA,IAAa,IAAW,GAAQ,EAAY,IAAA,GAC5D,UAAW,EAAA,EACP,SACA,EACA,WAAW,IACX,EACA,IAAW,IAAA,IAAa,IAAW,IAAS,SAC5C,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
1
+ {"version":3,"file":"MInline-DYy3IhF-.cjs","names":[],"sources":["../src/components/layout/MInline/MInline.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {useReveal} from '../../../utils/useReveal'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\n reveal,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const revealRef = useReveal<HTMLDivElement>(reveal)\n\n return (\n <div\n ref={reveal !== undefined && reveal !== false ? revealRef : undefined}\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n reveal !== undefined && reveal !== false && 'reveal',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"wNAQA,SAAgB,EAAQ,CACpB,QAAQ,SACR,UAAU,QACV,OAAO,OACP,SACA,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACU,CACb,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAY,EAAA,EAA0B,EAAO,CAEnD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,IAAW,IAAA,IAAa,IAAW,GAAQ,EAAY,IAAA,GAC5D,UAAW,EAAA,EACP,SACA,EACA,WAAW,IACX,EACA,IAAW,IAAA,IAAa,IAAW,IAAS,SAC5C,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
@@ -1,8 +1,8 @@
1
- import { Ii as e } from "./icons-D5DK-J2C.js";
2
- import { t } from "./cn-YER3QsV1.js";
3
- import { t as n } from "./useGhostText-DG0bzcao.js";
4
- import { t as r } from "./useInteractionEffect-DtpbVd77.js";
5
- import { r as i } from "./MButton-Bfe4iq51.js";
1
+ import { Ii as e } from "./icons-DZr7JKf6.js";
2
+ import { t } from "./cn-CUSXNnjF.js";
3
+ import { t as n } from "./useGhostText-BJZKdZpw.js";
4
+ import { t as r } from "./useInteractionEffect-ClkU3aH5.js";
5
+ import { r as i } from "./MButton-JumA31vM.js";
6
6
  import { forwardRef as a, useCallback as o, useRef as ee, useState as s } from "react";
7
7
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
8
  //#region src/utils/useControllableString.ts
@@ -183,4 +183,4 @@ var f = a(function({ type: a = "text", value: u, defaultValue: f, name: p, id: m
183
183
  //#endregion
184
184
  export { d as n, f as t };
185
185
 
186
- //# sourceMappingURL=MInput-iKIeefss.js.map
186
+ //# sourceMappingURL=MInput-3ynY4aGD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MInput-iKIeefss.js","names":[],"sources":["../src/utils/useControllableString.ts","../src/components/inputs/MInput/MInput.tsx"],"sourcesContent":["import {useCallback, useState} from 'react'\n\ntype ControllableStringLike = string | number | readonly string[] | null | undefined\n\n// Normalize mixed input values so text-like controls always work with strings.\nfunction normalizeStringValue(value: ControllableStringLike) {\n if (value === null || value === undefined) {\n return ''\n }\n\n return value.toString()\n}\n\n// Share controlled and uncontrolled string state logic between text-like primitives.\nexport function useControllableString(value: ControllableStringLike, defaultValue?: ControllableStringLike) {\n const [internalValue, setInternalValue] = useState(() => normalizeStringValue(defaultValue))\n const isControlled = value !== undefined\n const currentValue = isControlled ? normalizeStringValue(value) : internalValue\n\n const setCurrentValue = useCallback(\n (nextValue: string) => {\n if (!isControlled) {\n setInternalValue(nextValue)\n }\n },\n [isControlled]\n )\n\n return {\n isControlled,\n currentValue,\n setCurrentValue,\n }\n}\n","import {forwardRef, useCallback, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputProps} from './MInput.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {useGhostText} from '../../../utils/useGhostText'\nimport {MSpinner} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MInput.css'\n\n// Render the base text input used by all specialized input wrappers.\nexport const MInput = forwardRef<HTMLInputElement, MInputProps>(function MInput(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n ghostOptions,\n ghostMinChars = 2,\n onGhostAccept,\n loading = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const {isControlled, currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const ghost = useGhostText({\n options: ghostOptions ?? [],\n value: currentValue,\n minChars: ghostMinChars,\n })\n const hasError = error || !!errorText\n const hasContent = currentValue.length > 0\n const resolvedColorClass = hasError ? 'color-error' : color ? `color-${color}` : undefined\n\n // Mirror focus state so the wrapper can style the input consistently.\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(event)\n },\n [onFocus]\n )\n\n // Clear focus styles before delegating to the caller.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(event)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value)\n onChange?.(event)\n ghost.reset()\n },\n [onChange, setCurrentValue, ghost.reset]\n )\n\n // Intercept keyboard events for ghost text acceptance before delegating.\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (ghostOptions && ghost.hint) {\n const accepted = ghost.onKeyDown(event)\n if (accepted) {\n const result = ghost.accept()\n setCurrentValue(result.value)\n onGhostAccept?.(result.value)\n // Fire synthetic change so controlled parents stay in sync.\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, result.value)\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n return\n }\n }\n onKeyDown?.(event)\n },\n [ghostOptions, ghost, setCurrentValue, onGhostAccept, onKeyDown, ref]\n )\n\n // Reset the visible value while preserving focus for quick repeated input.\n const handleClear = useCallback(() => {\n setCurrentValue('')\n\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, '')\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n\n onClear?.()\n input?.focus()\n }, [onClear, ref, setCurrentValue])\n\n const containerClasses = cn(\n 'container',\n `field-${variant}`,\n `field-${size}`,\n focused && 'focused',\n hasError && 'input-error',\n success && !hasError && 'input-success',\n resolvedColorClass,\n disabled && 'disabled',\n rounded && 'rounded',\n effectClassName\n )\n\n return (\n <div className={cn('input', resolvedColorClass, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'field-label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses} onPointerDown={handlePointerDown}>\n {effectLayer}\n {startIcon && <span className=\"start-icon\">{startIcon}</span>}\n\n {ghostOptions ? (\n <div className=\"ghost-text-field\">\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete ?? 'off'}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n {focused && ghost.hint && (\n <span className=\"ghost-text-overlay\" aria-hidden=\"true\">\n <span className=\"ghost-text-typed\">{currentValue}</span>\n <span className=\"ghost-text-hint\">{ghost.hint}</span>\n </span>\n )}\n </div>\n ) : (\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n )}\n\n {loading && <MSpinner size=\"sm\" color={color} />}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n <MCloseIcon />\n </button>\n )}\n\n {endIcon && !loading && <span className=\"end-icon\">{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"field-helper\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"MInput-3ynY4aGD.js","names":[],"sources":["../src/utils/useControllableString.ts","../src/components/inputs/MInput/MInput.tsx"],"sourcesContent":["import {useCallback, useState} from 'react'\n\ntype ControllableStringLike = string | number | readonly string[] | null | undefined\n\n// Normalize mixed input values so text-like controls always work with strings.\nfunction normalizeStringValue(value: ControllableStringLike) {\n if (value === null || value === undefined) {\n return ''\n }\n\n return value.toString()\n}\n\n// Share controlled and uncontrolled string state logic between text-like primitives.\nexport function useControllableString(value: ControllableStringLike, defaultValue?: ControllableStringLike) {\n const [internalValue, setInternalValue] = useState(() => normalizeStringValue(defaultValue))\n const isControlled = value !== undefined\n const currentValue = isControlled ? normalizeStringValue(value) : internalValue\n\n const setCurrentValue = useCallback(\n (nextValue: string) => {\n if (!isControlled) {\n setInternalValue(nextValue)\n }\n },\n [isControlled]\n )\n\n return {\n isControlled,\n currentValue,\n setCurrentValue,\n }\n}\n","import {forwardRef, useCallback, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputProps} from './MInput.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {useGhostText} from '../../../utils/useGhostText'\nimport {MSpinner} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MInput.css'\n\n// Render the base text input used by all specialized input wrappers.\nexport const MInput = forwardRef<HTMLInputElement, MInputProps>(function MInput(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n ghostOptions,\n ghostMinChars = 2,\n onGhostAccept,\n loading = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const {isControlled, currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const ghost = useGhostText({\n options: ghostOptions ?? [],\n value: currentValue,\n minChars: ghostMinChars,\n })\n const hasError = error || !!errorText\n const hasContent = currentValue.length > 0\n const resolvedColorClass = hasError ? 'color-error' : color ? `color-${color}` : undefined\n\n // Mirror focus state so the wrapper can style the input consistently.\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(event)\n },\n [onFocus]\n )\n\n // Clear focus styles before delegating to the caller.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(event)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value)\n onChange?.(event)\n ghost.reset()\n },\n [onChange, setCurrentValue, ghost.reset]\n )\n\n // Intercept keyboard events for ghost text acceptance before delegating.\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (ghostOptions && ghost.hint) {\n const accepted = ghost.onKeyDown(event)\n if (accepted) {\n const result = ghost.accept()\n setCurrentValue(result.value)\n onGhostAccept?.(result.value)\n // Fire synthetic change so controlled parents stay in sync.\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, result.value)\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n return\n }\n }\n onKeyDown?.(event)\n },\n [ghostOptions, ghost, setCurrentValue, onGhostAccept, onKeyDown, ref]\n )\n\n // Reset the visible value while preserving focus for quick repeated input.\n const handleClear = useCallback(() => {\n setCurrentValue('')\n\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, '')\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n\n onClear?.()\n input?.focus()\n }, [onClear, ref, setCurrentValue])\n\n const containerClasses = cn(\n 'container',\n `field-${variant}`,\n `field-${size}`,\n focused && 'focused',\n hasError && 'input-error',\n success && !hasError && 'input-success',\n resolvedColorClass,\n disabled && 'disabled',\n rounded && 'rounded',\n effectClassName\n )\n\n return (\n <div className={cn('input', resolvedColorClass, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'field-label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses} onPointerDown={handlePointerDown}>\n {effectLayer}\n {startIcon && <span className=\"start-icon\">{startIcon}</span>}\n\n {ghostOptions ? (\n <div className=\"ghost-text-field\">\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete ?? 'off'}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n {focused && ghost.hint && (\n <span className=\"ghost-text-overlay\" aria-hidden=\"true\">\n <span className=\"ghost-text-typed\">{currentValue}</span>\n <span className=\"ghost-text-hint\">{ghost.hint}</span>\n </span>\n )}\n </div>\n ) : (\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n )}\n\n {loading && <MSpinner size=\"sm\" color={color} />}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n <MCloseIcon />\n </button>\n )}\n\n {endIcon && !loading && <span className=\"end-icon\">{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"field-helper\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n"],"mappings":";;;;;;;;AAKA,SAAS,EAAqB,GAA+B;AAKzD,QAJI,KAAU,OACH,KAGJ,EAAM,UAAU;;AAI3B,SAAgB,EAAsB,GAA+B,GAAuC;CACxG,IAAM,CAAC,GAAe,KAAoB,QAAe,EAAqB,EAAa,CAAC,EACtF,IAAe,MAAU,KAAA;AAY/B,QAAO;EACH;EACA,cAbiB,IAAe,EAAqB,EAAM,GAAG;EAc9D,iBAZoB,GACnB,MAAsB;AACnB,GAAK,KACD,EAAiB,EAAU;KAGnC,CAAC,EAAa,CACjB;EAMA;;;;ACpBL,IAAa,IAAS,EAA0C,SAC5D,EACI,UAAO,QACP,UACA,iBACA,SACA,OACA,gBACA,cAAW,IACX,cAAW,IACX,cAAW,IACX,eAAY,IACZ,iBACA,cACA,cAAU,YACV,WAAO,MACP,UACA,gBAAY,IACZ,cAAU,IACV,UACA,eACA,cACA,cACA,YACA,gBAAY,IACZ,WAAQ,IACR,aAAU,IACV,cACA,mBAAgB,IAChB,aACA,YACA,WACA,cACA,YACA,iBACA,oBAAgB,GAChB,kBACA,aAAU,IACV,iBAAc,UACd,iBACA,eACA,WACA,mBACA,sBAEJ,GACF;CACE,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,IAAW,GAAyB,KAAK,EACzC,EAAC,qBAAiB,iBAAa,0BAAqB,EAAqC;EAC3F,QAAQ;EACR,UAAU,KAAY;EACtB,OAAO;EACV,CAAC,EAEI,EAAC,kBAAc,iBAAc,uBAAmB,EAAsB,GAAO,EAAa,EAC1F,IAAQ,EAAa;EACvB,SAAS,KAAgB,EAAE;EAC3B,OAAO;EACP,UAAU;EACb,CAAC,EACI,IAAW,KAAS,CAAC,CAAC,GACtB,KAAa,EAAa,SAAS,GACnC,IAAqB,IAAW,gBAAgB,IAAQ,SAAS,MAAU,KAAA,GAG3E,IAAc,GACf,MAA8C;AAE3C,EADA,EAAW,GAAK,EAChB,IAAU,EAAM;IAEpB,CAAC,EAAQ,CACZ,EAGK,IAAa,GACd,MAA8C;AAE3C,EADA,EAAW,GAAM,EACjB,IAAS,EAAM;IAEnB,CAAC,EAAO,CACX,EAGK,IAAe,GAChB,MAA+C;AAG5C,EAFA,EAAgB,EAAM,OAAO,MAAM,EACnC,IAAW,EAAM,EACjB,EAAM,OAAO;IAEjB;EAAC;EAAU;EAAiB,EAAM;EAAM,CAC3C,EAGK,KAAgB,GACjB,MAAiD;AAC9C,MAAI,KAAgB,EAAM,QACL,EAAM,UAAU,EAAM,EACzB;GACV,IAAM,IAAS,EAAM,QAAQ;AAE7B,GADA,EAAgB,EAAO,MAAM,EAC7B,IAAgB,EAAO,MAAM;GAE7B,IAAM,IAAS,GAA2C,WAAW,EAAS;AAC9E,GAAI,OACkB,OAAO,yBAAyB,iBAAiB,WAAW,QAAQ,EAAE,MAC7E,KAAK,GAAO,EAAO,MAAM,EACpC,EAAM,cAAc,IAAI,MAAM,SAAS,EAAC,SAAS,IAAK,CAAC,CAAC;AAE5D;;AAGR,MAAY,EAAM;IAEtB;EAAC;EAAc;EAAO;EAAiB;EAAe;EAAW;EAAI,CACxE,EAGK,KAAc,QAAkB;AAClC,IAAgB,GAAG;EAEnB,IAAM,IAAS,GAA2C,WAAW,EAAS;AAQ9E,EAPI,OACkB,OAAO,yBAAyB,iBAAiB,WAAW,QAAQ,EAAE,MAC7E,KAAK,GAAO,GAAG,EAC1B,EAAM,cAAc,IAAI,MAAM,SAAS,EAAC,SAAS,IAAK,CAAC,CAAC,GAG5D,KAAW,EACX,GAAO,OAAO;IACf;EAAC;EAAS;EAAK;EAAgB,CAAC,EAE7B,KAAmB,EACrB,aACA,SAAS,MACT,SAAS,MACT,KAAW,WACX,KAAY,eACZ,KAAW,CAAC,KAAY,iBACxB,GACA,KAAY,YACZ,MAAW,WACX,GACH;AAED,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,SAAS,GAAoB,MAAa,cAAc,GAAU;EAAS;YAA9F;GACK,KACG,kBAAC,SAAD;IACI,SAAS;IACT,WAAW,EACP,eACA,KAAW,WACX,KAAY,SACZ,KAAW,CAAC,KAAY,WACxB,KAAY,YACZ,GACH;cAEA;IACG,CAAA;GAGZ,kBAAC,OAAD;IAAK,WAAW;IAAkB,eAAe;cAAjD;KACK;KACA,KAAa,kBAAC,QAAD;MAAM,WAAU;gBAAc;MAAiB,CAAA;KAE5D,IACG,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACI,kBAAC,SAAD;OACI,KAAK,KAAO;OACN;OACN,OAAO;OACD;OACF;OACS;OACH;OACA;OACA;OACC;OACX,cAAc,KAAgB;OACnB;OACA;OACX,WAAW,EAAG,SAAS,EAAe;OACtC,UAAU;OACV,SAAS;OACT,QAAQ;OACR,WAAW;OACX,gBAAc,KAAY,KAAA;OAC1B,oBAAkB,IAAY,GAAG,EAAG,UAAU,IAAa,GAAG,EAAG,WAAW,KAAA;OAC9E,CAAA,EACD,KAAW,EAAM,QACd,kBAAC,QAAD;OAAM,WAAU;OAAqB,eAAY;iBAAjD,CACI,kBAAC,QAAD;QAAM,WAAU;kBAAoB;QAAoB,CAAA,EACxD,kBAAC,QAAD;QAAM,WAAU;kBAAmB,EAAM;QAAY,CAAA,CAClD;SAET;UAEN,kBAAC,SAAD;MACI,KAAK,KAAO;MACN;MACN,OAAO;MACD;MACF;MACS;MACH;MACA;MACA;MACC;MACG;MACH;MACA;MACX,WAAW,EAAG,SAAS,EAAe;MACtC,UAAU;MACV,SAAS;MACT,QAAQ;MACG;MACX,gBAAc,KAAY,KAAA;MAC1B,oBAAkB,IAAY,GAAG,EAAG,UAAU,IAAa,GAAG,EAAG,WAAW,KAAA;MAC9E,CAAA;KAGL,KAAW,kBAAC,GAAD;MAAU,MAAK;MAAY;MAAS,CAAA;KAE/C,MAAa,MAAc,CAAC,KAAW,CAAC,KACrC,kBAAC,UAAD;MACI,MAAK;MACL,WAAU;MACV,SAAS;MACT,UAAU;MACV,cAAW;gBAEX,kBAAC,GAAD,EAAc,CAAA;MACT,CAAA;KAGZ,KAAW,CAAC,KAAW,kBAAC,QAAD;MAAM,WAAU;gBAAY;MAAe,CAAA;KACjE;;IAEJ,KAAa,KAAc,MACzB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACI,kBAAC,QAAD,EAAA,UAAA,CACK,KACG,kBAAC,QAAD;KAAM,IAAI,IAAK,GAAG,EAAG,UAAU,KAAA;KAAW,WAAU;KAAc,MAAK;eAClE;KACE,CAAA,EAEV,CAAC,KAAa,KACX,kBAAC,QAAD;KAAM,IAAI,IAAK,GAAG,EAAG,WAAW,KAAA;KAAW,WAAU;eAChD;KACE,CAAA,CAER,EAAA,CAAA,EACN,KAAiB,KACd,kBAAC,QAAD;KAAM,WAAW,EAAG,cAAc,EAAa,SAAS,KAAa,OAAO;eAA5E;MACK,EAAa;MAAO;MAAE;MACpB;OAET;;GAER;;EAEZ"}
@@ -0,0 +1,2 @@
1
+ require(`./chunk-350yNsax.cjs`);const e=require(`./icons-BhZaama4.cjs`),t=require(`./cn-DYFxgzi2.cjs`),n=require(`./useGhostText-D1DbIs-n.cjs`),r=require(`./useInteractionEffect-CYHGHV1e.cjs`),i=require(`./MButton-DTblkF4v.cjs`);let a=require(`react`),o=require(`react/jsx-runtime`);function s(e){return e==null?``:e.toString()}function c(e,t){let[n,r]=(0,a.useState)(()=>s(t)),i=e!==void 0;return{isControlled:i,currentValue:i?s(e):n,setCurrentValue:(0,a.useCallback)(e=>{i||r(e)},[i])}}var l=(0,a.forwardRef)(function({type:s=`text`,value:l,defaultValue:u,name:d,id:f,placeholder:p,disabled:m=!1,readOnly:h=!1,required:g=!1,autoFocus:_=!1,autoComplete:v,inputMode:y,variant:ee=`outlined`,size:te=`md`,color:b,fullWidth:ne=!1,rounded:re=!1,label:x,helperText:S,errorText:C,startIcon:w,endIcon:T,clearable:E=!1,error:D=!1,success:O=!1,maxLength:k,showCharCount:A=!1,onChange:j,onFocus:M,onBlur:N,onKeyDown:P,onClear:F,ghostOptions:I,ghostMinChars:ie=2,onGhostAccept:L,loading:R=!1,clickEffect:z=`ripple`,rippleColor:B,className:ae,style:oe,inputClassName:V,labelClassName:se},H){let[U,W]=(0,a.useState)(!1),G=(0,a.useRef)(null),{effectClassName:ce,effectLayer:le,handlePointerDown:ue}=r.t({effect:z,disabled:m||h,color:B}),{isControlled:de,currentValue:K,setCurrentValue:q}=c(l,u),J=n.t({options:I??[],value:K,minChars:ie}),Y=D||!!C,fe=K.length>0,X=Y?`color-error`:b?`color-${b}`:void 0,Z=(0,a.useCallback)(e=>{W(!0),M?.(e)},[M]),Q=(0,a.useCallback)(e=>{W(!1),N?.(e)},[N]),$=(0,a.useCallback)(e=>{q(e.target.value),j?.(e),J.reset()},[j,q,J.reset]),pe=(0,a.useCallback)(e=>{if(I&&J.hint&&J.onKeyDown(e)){let e=J.accept();q(e.value),L?.(e.value);let t=H?.current??G.current;t&&((Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`value`)?.set)?.call(t,e.value),t.dispatchEvent(new Event(`input`,{bubbles:!0})));return}P?.(e)},[I,J,q,L,P,H]),me=(0,a.useCallback)(()=>{q(``);let e=H?.current??G.current;e&&((Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`value`)?.set)?.call(e,``),e.dispatchEvent(new Event(`input`,{bubbles:!0}))),F?.(),e?.focus()},[F,H,q]),he=t.t(`container`,`field-${ee}`,`field-${te}`,U&&`focused`,Y&&`input-error`,O&&!Y&&`input-success`,X,m&&`disabled`,re&&`rounded`,ce);return(0,o.jsxs)(`div`,{className:t.t(`input`,X,ne&&`full-width`,ae),style:oe,children:[x&&(0,o.jsx)(`label`,{htmlFor:f,className:t.t(`field-label`,U&&`focused`,Y&&`error`,O&&!Y&&`success`,g&&`required`,se),children:x}),(0,o.jsxs)(`div`,{className:he,onPointerDown:ue,children:[le,w&&(0,o.jsx)(`span`,{className:`start-icon`,children:w}),I?(0,o.jsxs)(`div`,{className:`ghost-text-field`,children:[(0,o.jsx)(`input`,{ref:H??G,type:s,value:K,name:d,id:f,placeholder:p,disabled:m,readOnly:h,required:g,autoFocus:_,autoComplete:v??`off`,inputMode:y,maxLength:k,className:t.t(`field`,V),onChange:$,onFocus:Z,onBlur:Q,onKeyDown:pe,"aria-invalid":Y||void 0,"aria-describedby":C?`${f}-error`:S?`${f}-helper`:void 0}),U&&J.hint&&(0,o.jsxs)(`span`,{className:`ghost-text-overlay`,"aria-hidden":`true`,children:[(0,o.jsx)(`span`,{className:`ghost-text-typed`,children:K}),(0,o.jsx)(`span`,{className:`ghost-text-hint`,children:J.hint})]})]}):(0,o.jsx)(`input`,{ref:H??G,type:s,value:K,name:d,id:f,placeholder:p,disabled:m,readOnly:h,required:g,autoFocus:_,autoComplete:v,inputMode:y,maxLength:k,className:t.t(`field`,V),onChange:$,onFocus:Z,onBlur:Q,onKeyDown:P,"aria-invalid":Y||void 0,"aria-describedby":C?`${f}-error`:S?`${f}-helper`:void 0}),R&&(0,o.jsx)(i.r,{size:`sm`,color:b}),E&&fe&&!R&&!m&&(0,o.jsx)(`button`,{type:`button`,className:`clear-btn clear-btn-base`,onClick:me,tabIndex:-1,"aria-label":`Clear input`,children:(0,o.jsx)(e.Ii,{})}),T&&!R&&(0,o.jsx)(`span`,{className:`end-icon`,children:T})]}),(C||S||A)&&(0,o.jsxs)(`div`,{className:`bottom-row`,children:[(0,o.jsxs)(`span`,{children:[C&&(0,o.jsx)(`span`,{id:f?`${f}-error`:void 0,className:`field-error`,role:`alert`,children:C}),!C&&S&&(0,o.jsx)(`span`,{id:f?`${f}-helper`:void 0,className:`field-helper`,children:S})]}),A&&k&&(0,o.jsxs)(`span`,{className:t.t(`char-count`,K.length>k&&`over`),children:[K.length,`/`,k]})]})]})});Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
2
+ //# sourceMappingURL=MInput-DkbdeGQW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MInput-CpEJQ9SV.cjs","names":[],"sources":["../src/utils/useControllableString.ts","../src/components/inputs/MInput/MInput.tsx"],"sourcesContent":["import {useCallback, useState} from 'react'\n\ntype ControllableStringLike = string | number | readonly string[] | null | undefined\n\n// Normalize mixed input values so text-like controls always work with strings.\nfunction normalizeStringValue(value: ControllableStringLike) {\n if (value === null || value === undefined) {\n return ''\n }\n\n return value.toString()\n}\n\n// Share controlled and uncontrolled string state logic between text-like primitives.\nexport function useControllableString(value: ControllableStringLike, defaultValue?: ControllableStringLike) {\n const [internalValue, setInternalValue] = useState(() => normalizeStringValue(defaultValue))\n const isControlled = value !== undefined\n const currentValue = isControlled ? normalizeStringValue(value) : internalValue\n\n const setCurrentValue = useCallback(\n (nextValue: string) => {\n if (!isControlled) {\n setInternalValue(nextValue)\n }\n },\n [isControlled]\n )\n\n return {\n isControlled,\n currentValue,\n setCurrentValue,\n }\n}\n","import {forwardRef, useCallback, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputProps} from './MInput.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {useGhostText} from '../../../utils/useGhostText'\nimport {MSpinner} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MInput.css'\n\n// Render the base text input used by all specialized input wrappers.\nexport const MInput = forwardRef<HTMLInputElement, MInputProps>(function MInput(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n ghostOptions,\n ghostMinChars = 2,\n onGhostAccept,\n loading = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const {isControlled, currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const ghost = useGhostText({\n options: ghostOptions ?? [],\n value: currentValue,\n minChars: ghostMinChars,\n })\n const hasError = error || !!errorText\n const hasContent = currentValue.length > 0\n const resolvedColorClass = hasError ? 'color-error' : color ? `color-${color}` : undefined\n\n // Mirror focus state so the wrapper can style the input consistently.\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(event)\n },\n [onFocus]\n )\n\n // Clear focus styles before delegating to the caller.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(event)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value)\n onChange?.(event)\n ghost.reset()\n },\n [onChange, setCurrentValue, ghost.reset]\n )\n\n // Intercept keyboard events for ghost text acceptance before delegating.\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (ghostOptions && ghost.hint) {\n const accepted = ghost.onKeyDown(event)\n if (accepted) {\n const result = ghost.accept()\n setCurrentValue(result.value)\n onGhostAccept?.(result.value)\n // Fire synthetic change so controlled parents stay in sync.\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, result.value)\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n return\n }\n }\n onKeyDown?.(event)\n },\n [ghostOptions, ghost, setCurrentValue, onGhostAccept, onKeyDown, ref]\n )\n\n // Reset the visible value while preserving focus for quick repeated input.\n const handleClear = useCallback(() => {\n setCurrentValue('')\n\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, '')\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n\n onClear?.()\n input?.focus()\n }, [onClear, ref, setCurrentValue])\n\n const containerClasses = cn(\n 'container',\n `field-${variant}`,\n `field-${size}`,\n focused && 'focused',\n hasError && 'input-error',\n success && !hasError && 'input-success',\n resolvedColorClass,\n disabled && 'disabled',\n rounded && 'rounded',\n effectClassName\n )\n\n return (\n <div className={cn('input', resolvedColorClass, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'field-label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses} onPointerDown={handlePointerDown}>\n {effectLayer}\n {startIcon && <span className=\"start-icon\">{startIcon}</span>}\n\n {ghostOptions ? (\n <div className=\"ghost-text-field\">\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete ?? 'off'}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n {focused && ghost.hint && (\n <span className=\"ghost-text-overlay\" aria-hidden=\"true\">\n <span className=\"ghost-text-typed\">{currentValue}</span>\n <span className=\"ghost-text-hint\">{ghost.hint}</span>\n </span>\n )}\n </div>\n ) : (\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n )}\n\n {loading && <MSpinner size=\"sm\" color={color} />}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n <MCloseIcon />\n </button>\n )}\n\n {endIcon && !loading && <span className=\"end-icon\">{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"field-helper\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"MInput-DkbdeGQW.cjs","names":[],"sources":["../src/utils/useControllableString.ts","../src/components/inputs/MInput/MInput.tsx"],"sourcesContent":["import {useCallback, useState} from 'react'\n\ntype ControllableStringLike = string | number | readonly string[] | null | undefined\n\n// Normalize mixed input values so text-like controls always work with strings.\nfunction normalizeStringValue(value: ControllableStringLike) {\n if (value === null || value === undefined) {\n return ''\n }\n\n return value.toString()\n}\n\n// Share controlled and uncontrolled string state logic between text-like primitives.\nexport function useControllableString(value: ControllableStringLike, defaultValue?: ControllableStringLike) {\n const [internalValue, setInternalValue] = useState(() => normalizeStringValue(defaultValue))\n const isControlled = value !== undefined\n const currentValue = isControlled ? normalizeStringValue(value) : internalValue\n\n const setCurrentValue = useCallback(\n (nextValue: string) => {\n if (!isControlled) {\n setInternalValue(nextValue)\n }\n },\n [isControlled]\n )\n\n return {\n isControlled,\n currentValue,\n setCurrentValue,\n }\n}\n","import {forwardRef, useCallback, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputProps} from './MInput.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {useGhostText} from '../../../utils/useGhostText'\nimport {MSpinner} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MInput.css'\n\n// Render the base text input used by all specialized input wrappers.\nexport const MInput = forwardRef<HTMLInputElement, MInputProps>(function MInput(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n ghostOptions,\n ghostMinChars = 2,\n onGhostAccept,\n loading = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const {isControlled, currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const ghost = useGhostText({\n options: ghostOptions ?? [],\n value: currentValue,\n minChars: ghostMinChars,\n })\n const hasError = error || !!errorText\n const hasContent = currentValue.length > 0\n const resolvedColorClass = hasError ? 'color-error' : color ? `color-${color}` : undefined\n\n // Mirror focus state so the wrapper can style the input consistently.\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(event)\n },\n [onFocus]\n )\n\n // Clear focus styles before delegating to the caller.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(event)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value)\n onChange?.(event)\n ghost.reset()\n },\n [onChange, setCurrentValue, ghost.reset]\n )\n\n // Intercept keyboard events for ghost text acceptance before delegating.\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (ghostOptions && ghost.hint) {\n const accepted = ghost.onKeyDown(event)\n if (accepted) {\n const result = ghost.accept()\n setCurrentValue(result.value)\n onGhostAccept?.(result.value)\n // Fire synthetic change so controlled parents stay in sync.\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, result.value)\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n return\n }\n }\n onKeyDown?.(event)\n },\n [ghostOptions, ghost, setCurrentValue, onGhostAccept, onKeyDown, ref]\n )\n\n // Reset the visible value while preserving focus for quick repeated input.\n const handleClear = useCallback(() => {\n setCurrentValue('')\n\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, '')\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n\n onClear?.()\n input?.focus()\n }, [onClear, ref, setCurrentValue])\n\n const containerClasses = cn(\n 'container',\n `field-${variant}`,\n `field-${size}`,\n focused && 'focused',\n hasError && 'input-error',\n success && !hasError && 'input-success',\n resolvedColorClass,\n disabled && 'disabled',\n rounded && 'rounded',\n effectClassName\n )\n\n return (\n <div className={cn('input', resolvedColorClass, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'field-label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses} onPointerDown={handlePointerDown}>\n {effectLayer}\n {startIcon && <span className=\"start-icon\">{startIcon}</span>}\n\n {ghostOptions ? (\n <div className=\"ghost-text-field\">\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete ?? 'off'}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n {focused && ghost.hint && (\n <span className=\"ghost-text-overlay\" aria-hidden=\"true\">\n <span className=\"ghost-text-typed\">{currentValue}</span>\n <span className=\"ghost-text-hint\">{ghost.hint}</span>\n </span>\n )}\n </div>\n ) : (\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n )}\n\n {loading && <MSpinner size=\"sm\" color={color} />}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n <MCloseIcon />\n </button>\n )}\n\n {endIcon && !loading && <span className=\"end-icon\">{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"field-helper\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { Fi as e, Ii as t, Mi as n } from "./icons-D5DK-J2C.js";
2
- import { t as r } from "./cn-YER3QsV1.js";
3
- import { n as i, t as a } from "./MInput-iKIeefss.js";
4
- import { i as o, r as s } from "./MDropdownMenu-CxBhYxQb.js";
1
+ import { Fi as e, Ii as t, Mi as n } from "./icons-DZr7JKf6.js";
2
+ import { t as r } from "./cn-CUSXNnjF.js";
3
+ import { n as i, t as a } from "./MInput-3ynY4aGD.js";
4
+ import { i as o, r as s } from "./MDropdownMenu-CVp1LFgZ.js";
5
5
  import { forwardRef as c, useCallback as l, useMemo as u, useRef as d, useState as f } from "react";
6
6
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
7
7
  //#region src/components/inputs/MInputExpDate/MInputExpDate.tsx
@@ -317,4 +317,4 @@ var w = c(function({ length: t = 3, validateOnBlur: n = !0, validateOnChange: i
317
317
  //#endregion
318
318
  export { x as n, w as t };
319
319
 
320
- //# sourceMappingURL=MInputCVC-BpGTqkQx.js.map
320
+ //# sourceMappingURL=MInputCVC-BO251yU6.js.map