@banzamel/mineralui 1.6.4 → 1.8.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 (460) hide show
  1. package/README.md +1 -1
  2. package/dist/{MAvatar-BHASnoyu.js → MAvatar-BcayQCnp.js} +2 -2
  3. package/dist/{MAvatar-BHASnoyu.js.map → MAvatar-BcayQCnp.js.map} +1 -1
  4. package/dist/{MAvatar-BVJh6kgW.cjs → MAvatar-BgevCYi3.cjs} +2 -2
  5. package/dist/{MAvatar-BVJh6kgW.cjs.map → MAvatar-BgevCYi3.cjs.map} +1 -1
  6. package/dist/MButton-8UCydOik.cjs +2 -0
  7. package/dist/MButton-8UCydOik.cjs.map +1 -0
  8. package/dist/{MButton-y9qXhhGt.js → MButton-DZLLrtQb.js} +38 -36
  9. package/dist/MButton-DZLLrtQb.js.map +1 -0
  10. package/dist/{MCheckbox-B-nT2OBE.js → MCheckbox-B7SpcD4H.js} +1 -1
  11. package/dist/{MCheckbox-B-nT2OBE.js.map → MCheckbox-B7SpcD4H.js.map} +1 -1
  12. package/dist/{MCheckbox-C40ESQRe.cjs → MCheckbox-Dn3p_9-1.cjs} +2 -2
  13. package/dist/{MCheckbox-C40ESQRe.cjs.map → MCheckbox-Dn3p_9-1.cjs.map} +1 -1
  14. package/dist/{MCookieBootstrap-3-wyz3Dk.cjs → MCookieBootstrap-BUqtJO3m.cjs} +1 -1
  15. package/dist/{MCookieBootstrap-3-wyz3Dk.cjs.map → MCookieBootstrap-BUqtJO3m.cjs.map} +1 -1
  16. package/dist/{MCookieBootstrap-CGvYxIK8.js → MCookieBootstrap-Btt49Iuq.js} +1 -1
  17. package/dist/{MCookieBootstrap-CGvYxIK8.js.map → MCookieBootstrap-Btt49Iuq.js.map} +1 -1
  18. package/dist/MDataTable-95_Mb6jE.cjs +2 -0
  19. package/dist/MDataTable-95_Mb6jE.cjs.map +1 -0
  20. package/dist/MDataTable-DxDS5auV.js +297 -0
  21. package/dist/MDataTable-DxDS5auV.js.map +1 -0
  22. package/dist/{MDrawer-W2WQs1sM.js → MDrawer-CXNHYwPO.js} +2 -2
  23. package/dist/{MDrawer-W2WQs1sM.js.map → MDrawer-CXNHYwPO.js.map} +1 -1
  24. package/dist/{MDrawer-DFkrFrnD.cjs → MDrawer-DzqtHVeA.cjs} +2 -2
  25. package/dist/{MDrawer-DFkrFrnD.cjs.map → MDrawer-DzqtHVeA.cjs.map} +1 -1
  26. package/dist/{MDropdownMenu-D79Cm5aS.js → MDropdownMenu-CeiC1tz3.js} +5 -5
  27. package/dist/MDropdownMenu-CeiC1tz3.js.map +1 -0
  28. package/dist/MDropdownMenu-c9U3sEcl.cjs +2 -0
  29. package/dist/MDropdownMenu-c9U3sEcl.cjs.map +1 -0
  30. package/dist/{MGalleryIllustration-BB3DoCl_.cjs → MGalleryIllustration-Dglx_Ckc.cjs} +2 -2
  31. package/dist/{MGalleryIllustration-BB3DoCl_.cjs.map → MGalleryIllustration-Dglx_Ckc.cjs.map} +1 -1
  32. package/dist/MGrid-C4kPZDSa.cjs +2 -0
  33. package/dist/MGrid-C4kPZDSa.cjs.map +1 -0
  34. package/dist/MGrid-DR0fHItF.js +182 -0
  35. package/dist/MGrid-DR0fHItF.js.map +1 -0
  36. package/dist/{MHeading-BhCNoJeW.cjs → MHeading-CKe5lcM_.cjs} +2 -2
  37. package/dist/{MHeading-BhCNoJeW.cjs.map → MHeading-CKe5lcM_.cjs.map} +1 -1
  38. package/dist/{MI18nProvider-B2sE0x5D.cjs → MI18nProvider-DOh5xexz.cjs} +2 -2
  39. package/dist/{MI18nProvider-B2sE0x5D.cjs.map → MI18nProvider-DOh5xexz.cjs.map} +1 -1
  40. package/dist/MImage-BZ6SrSao.cjs +2 -0
  41. package/dist/MImage-BZ6SrSao.cjs.map +1 -0
  42. package/dist/{MImage-BKX-xBm3.js → MImage-Btx_7g2Z.js} +5 -6
  43. package/dist/MImage-Btx_7g2Z.js.map +1 -0
  44. package/dist/{MInput-bzSwK880.js → MInput-7i0Dy1t4.js} +3 -2
  45. package/dist/{MInput-bzSwK880.js.map → MInput-7i0Dy1t4.js.map} +1 -1
  46. package/dist/{MInput-DYqV3-rQ.cjs → MInput-D_zaoWwX.cjs} +2 -2
  47. package/dist/{MInput-DYqV3-rQ.cjs.map → MInput-D_zaoWwX.cjs.map} +1 -1
  48. package/dist/MInputExpDate-DWWwjMYK.cjs +2 -0
  49. package/dist/MInputExpDate-DWWwjMYK.cjs.map +1 -0
  50. package/dist/{MInputCVC-BHpMHTO5.js → MInputExpDate-DhO5zN7L.js} +97 -97
  51. package/dist/MInputExpDate-DhO5zN7L.js.map +1 -0
  52. package/dist/{MInputSearch-Dh4C3Tz5.js → MInputSearch-CmzHPnmC.js} +2 -2
  53. package/dist/{MInputSearch-Dh4C3Tz5.js.map → MInputSearch-CmzHPnmC.js.map} +1 -1
  54. package/dist/{MInputSearch-DfoenJIm.cjs → MInputSearch-DpHSVpmL.cjs} +2 -2
  55. package/dist/{MInputSearch-DfoenJIm.cjs.map → MInputSearch-DpHSVpmL.cjs.map} +1 -1
  56. package/dist/MKbd-DWTS3iS5.cjs +2 -0
  57. package/dist/MKbd-DWTS3iS5.cjs.map +1 -0
  58. package/dist/MKbd-v6-tJ9sP.js +14 -0
  59. package/dist/MKbd-v6-tJ9sP.js.map +1 -0
  60. package/dist/{MLink-CY45UR_j.cjs → MLink-B3ImjkJV.cjs} +2 -2
  61. package/dist/{MLink-CY45UR_j.cjs.map → MLink-B3ImjkJV.cjs.map} +1 -1
  62. package/dist/{MModal-DT5BBgNZ.cjs → MModal-CP0e31pv.cjs} +2 -2
  63. package/dist/{MModal-DT5BBgNZ.cjs.map → MModal-CP0e31pv.cjs.map} +1 -1
  64. package/dist/{MModal-BDTAgnrm.js → MModal-DGmeQlWo.js} +2 -2
  65. package/dist/{MModal-BDTAgnrm.js.map → MModal-DGmeQlWo.js.map} +1 -1
  66. package/dist/{MPagination-CZEJMJzZ.cjs → MPagination-CS62B9kZ.cjs} +2 -2
  67. package/dist/{MPagination-CZEJMJzZ.cjs.map → MPagination-CS62B9kZ.cjs.map} +1 -1
  68. package/dist/{MPagination-CTnaW5AW.js → MPagination-Dr110are.js} +2 -2
  69. package/dist/{MPagination-CTnaW5AW.js.map → MPagination-Dr110are.js.map} +1 -1
  70. package/dist/{MPopover-B4IUb9f0.cjs → MPopover-CxxaY9kr.cjs} +2 -2
  71. package/dist/{MPopover-B4IUb9f0.cjs.map → MPopover-CxxaY9kr.cjs.map} +1 -1
  72. package/dist/{MPortal-Bi24xTGW.cjs → MPortal-BIxPtFYd.cjs} +2 -2
  73. package/dist/{MPortal-Bi24xTGW.cjs.map → MPortal-BIxPtFYd.cjs.map} +1 -1
  74. package/dist/{MQrCode-CCtTkkv9.js → MQrCode-6ANDcExA.js} +150 -100
  75. package/dist/MQrCode-6ANDcExA.js.map +1 -0
  76. package/dist/MQrCode-B0-Np-N3.cjs +2 -0
  77. package/dist/MQrCode-B0-Np-N3.cjs.map +1 -0
  78. package/dist/MSimpleGrid-Bojj4xKH.js +18 -0
  79. package/dist/MSimpleGrid-Bojj4xKH.js.map +1 -0
  80. package/dist/MSimpleGrid-CyLf-9R2.cjs +2 -0
  81. package/dist/MSimpleGrid-CyLf-9R2.cjs.map +1 -0
  82. package/dist/MSkeleton-BdwhPx-k.cjs +2 -0
  83. package/dist/MSkeleton-BdwhPx-k.cjs.map +1 -0
  84. package/dist/MSkeleton-BvXgnYs_.js +136 -0
  85. package/dist/MSkeleton-BvXgnYs_.js.map +1 -0
  86. package/dist/{MSlider-5141rKeH.js → MSlider-CqrusKJQ.js} +1 -1
  87. package/dist/{MSlider-5141rKeH.js.map → MSlider-CqrusKJQ.js.map} +1 -1
  88. package/dist/{MSlider-Ch3VjAJC.cjs → MSlider-qCGmD4UA.cjs} +2 -2
  89. package/dist/{MSlider-Ch3VjAJC.cjs.map → MSlider-qCGmD4UA.cjs.map} +1 -1
  90. package/dist/MStack-ByFYGSsy.cjs +2 -0
  91. package/dist/MStack-ByFYGSsy.cjs.map +1 -0
  92. package/dist/MStack-DFIc3S4_.js +70 -0
  93. package/dist/MStack-DFIc3S4_.js.map +1 -0
  94. package/dist/{MSubText-C-70zn0m.cjs → MSubText-1ilKSz8e.cjs} +2 -2
  95. package/dist/{MSubText-C-70zn0m.cjs.map → MSubText-1ilKSz8e.cjs.map} +1 -1
  96. package/dist/MSurface-CmVIQC1A.js +43 -0
  97. package/dist/MSurface-CmVIQC1A.js.map +1 -0
  98. package/dist/MSurface-CpAuwpHv.cjs +2 -0
  99. package/dist/MSurface-CpAuwpHv.cjs.map +1 -0
  100. package/dist/MTabs-BQZ--mMq.js +89 -0
  101. package/dist/MTabs-BQZ--mMq.js.map +1 -0
  102. package/dist/MTabs-DeUn6bIp.cjs +2 -0
  103. package/dist/MTabs-DeUn6bIp.cjs.map +1 -0
  104. package/dist/{MTag-CH5nMbm7.js → MTag-C4SUJly2.js} +2 -2
  105. package/dist/{MTag-CH5nMbm7.js.map → MTag-C4SUJly2.js.map} +1 -1
  106. package/dist/{MTag-Y4Tswmli.cjs → MTag-DwQ-j1sV.cjs} +2 -2
  107. package/dist/{MTag-Y4Tswmli.cjs.map → MTag-DwQ-j1sV.cjs.map} +1 -1
  108. package/dist/{MText-DEJddMB5.cjs → MText-D0fI_D_Q.cjs} +2 -2
  109. package/dist/{MText-DEJddMB5.cjs.map → MText-D0fI_D_Q.cjs.map} +1 -1
  110. package/dist/{MTimeAgo-DxZGVo2Y.cjs → MTimeAgo-DI3DF7bD.cjs} +2 -2
  111. package/dist/{MTimeAgo-DxZGVo2Y.cjs.map → MTimeAgo-DI3DF7bD.cjs.map} +1 -1
  112. package/dist/{MTimeAgo-C4p80NvI.js → MTimeAgo-Db8gOade.js} +2 -2
  113. package/dist/{MTimeAgo-C4p80NvI.js.map → MTimeAgo-Db8gOade.js.map} +1 -1
  114. package/dist/{MToggle-Dt1Ctr5e.js → MToggle-B6emKoKq.js} +1 -1
  115. package/dist/{MToggle-Dt1Ctr5e.js.map → MToggle-B6emKoKq.js.map} +1 -1
  116. package/dist/{MToggle-C8vYRzpC.cjs → MToggle-BVJm5Bdk.cjs} +2 -2
  117. package/dist/{MToggle-C8vYRzpC.cjs.map → MToggle-BVJm5Bdk.cjs.map} +1 -1
  118. package/dist/{MTooltip-kSTMMpvu.cjs → MTooltip-Dq2vYf3G.cjs} +2 -2
  119. package/dist/{MTooltip-kSTMMpvu.cjs.map → MTooltip-Dq2vYf3G.cjs.map} +1 -1
  120. package/dist/{MTooltip-C43aUKMP.js → MTooltip-jSf4VBtB.js} +1 -1
  121. package/dist/{MTooltip-C43aUKMP.js.map → MTooltip-jSf4VBtB.js.map} +1 -1
  122. package/dist/MTreeView-AqH8XMPz.js +516 -0
  123. package/dist/MTreeView-AqH8XMPz.js.map +1 -0
  124. package/dist/MTreeView-Dp9qbqQh.cjs +2 -0
  125. package/dist/MTreeView-Dp9qbqQh.cjs.map +1 -0
  126. package/dist/{arduino-CXUo7Bjy.cjs → arduino-Bm509TuR.cjs} +1 -1
  127. package/dist/{arduino-CXUo7Bjy.cjs.map → arduino-Bm509TuR.cjs.map} +1 -1
  128. package/dist/{arduino-Eif5KI8O.js → arduino-C5s1z3P1.js} +1 -1
  129. package/dist/{arduino-Eif5KI8O.js.map → arduino-C5s1z3P1.js.map} +1 -1
  130. package/dist/{bash-W4h3o_nx.cjs → bash-CyBbinAU.cjs} +1 -1
  131. package/dist/{bash-W4h3o_nx.cjs.map → bash-CyBbinAU.cjs.map} +1 -1
  132. package/dist/{bash-CCF_TYbb.js → bash-RIFbRcCe.js} +1 -1
  133. package/dist/{bash-CCF_TYbb.js.map → bash-RIFbRcCe.js.map} +1 -1
  134. package/dist/{c-DVgkp6T3.js → c-DAywn1DE.js} +1 -1
  135. package/dist/{c-DVgkp6T3.js.map → c-DAywn1DE.js.map} +1 -1
  136. package/dist/{c-Dm60JY-W.cjs → c-DGOxo0dj.cjs} +1 -1
  137. package/dist/{c-Dm60JY-W.cjs.map → c-DGOxo0dj.cjs.map} +1 -1
  138. package/dist/cards-B9g6Lf1n.cjs +2 -0
  139. package/dist/cards-B9g6Lf1n.cjs.map +1 -0
  140. package/dist/cards-D7oHIHmU.js +1535 -0
  141. package/dist/cards-D7oHIHmU.js.map +1 -0
  142. package/dist/cards.cjs +1 -1
  143. package/dist/cards.js +3 -3
  144. package/dist/components/cards/MCard/MCard.d.ts +1 -1
  145. package/dist/components/cards/MCard/MCard.types.d.ts +2 -5
  146. package/dist/components/cards/MCardActionArea/MCardActionArea.d.ts +2 -0
  147. package/dist/components/cards/MCardActionArea/MCardActionArea.types.d.ts +7 -0
  148. package/dist/components/cards/MCardActionArea/index.d.ts +2 -0
  149. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +2 -0
  150. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.types.d.ts +41 -0
  151. package/dist/components/cards/MCardDaySchedule/index.d.ts +2 -0
  152. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +2 -0
  153. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.types.d.ts +31 -0
  154. package/dist/components/cards/MCardDocumentTree/index.d.ts +2 -0
  155. package/dist/components/cards/MCardFinance/MCardFinance.d.ts +1 -1
  156. package/dist/components/cards/MCardFinance/MCardFinance.types.d.ts +2 -1
  157. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  158. package/dist/components/cards/MCardGrid/MCardGrid.types.d.ts +23 -5
  159. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  160. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +2 -1
  161. package/dist/components/cards/MCardTile/MCardTile.d.ts +2 -0
  162. package/dist/components/cards/MCardTile/MCardTile.types.d.ts +26 -0
  163. package/dist/components/cards/MCardTile/index.d.ts +2 -0
  164. package/dist/components/cards/MCardWidget/MCardWidget.d.ts +1 -1
  165. package/dist/components/cards/MCardWidget/MCardWidget.types.d.ts +2 -1
  166. package/dist/components/cards/MStatCard/MStatCard.d.ts +3 -0
  167. package/dist/components/cards/MStatCard/MStatCard.types.d.ts +16 -0
  168. package/dist/components/cards/MStatCard/index.d.ts +2 -0
  169. package/dist/components/cards/ServiceCardsShared/ServiceCardsShared.d.ts +1 -1
  170. package/dist/components/cards/ServiceCardsShared/ServiceCardsShared.types.d.ts +1 -3
  171. package/dist/components/cards/index.d.ts +12 -0
  172. package/dist/components/cards/shared/MCardAction.types.d.ts +12 -0
  173. package/dist/components/cards/shared/MCardAction.utils.d.ts +16 -0
  174. package/dist/components/cards/shared/MCardColor.utils.d.ts +3 -0
  175. package/dist/components/cards/shared/index.d.ts +3 -0
  176. package/dist/components/controls/MButton/MButton.types.d.ts +2 -0
  177. package/dist/components/controls/MQuickActions/MQuickActions.d.ts +2 -0
  178. package/dist/components/controls/MQuickActions/MQuickActions.types.d.ts +33 -0
  179. package/dist/components/controls/MQuickActions/index.d.ts +2 -0
  180. package/dist/components/controls/index.d.ts +2 -0
  181. package/dist/components/data/MCalendarBoard/MCalendarBoard.d.ts +8 -7
  182. package/dist/components/data/MCalendarBoard/MCalendarBoard.types.d.ts +75 -6
  183. package/dist/components/data/MCalendarBoard/index.d.ts +2 -2
  184. package/dist/components/data/MDataTable/MDataTable.d.ts +1 -1
  185. package/dist/components/data/MDataTable/MDataTable.types.d.ts +23 -0
  186. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  187. package/dist/components/data/MTreeView/MTreeView.types.d.ts +11 -1
  188. package/dist/components/data/index.d.ts +2 -2
  189. package/dist/components/display/MBlur/MBlur.d.ts +2 -0
  190. package/dist/components/display/MBlur/MBlur.types.d.ts +13 -0
  191. package/dist/components/display/MBlur/index.d.ts +2 -0
  192. package/dist/components/display/MDetailList/MDetailList.d.ts +2 -0
  193. package/dist/components/display/MDetailList/MDetailList.types.d.ts +20 -0
  194. package/dist/components/display/MDetailList/index.d.ts +2 -0
  195. package/dist/components/display/index.d.ts +4 -0
  196. package/dist/components/inputs/MInputIBAN/MInputIBAN.types.d.ts +3 -3
  197. package/dist/components/inputs/MInputPhone/MInputPhone.types.d.ts +2 -0
  198. package/dist/components/layout/MAppMenu/MAppMenu.d.ts +2 -0
  199. package/dist/components/layout/MAppMenu/MAppMenu.types.d.ts +63 -0
  200. package/dist/components/layout/MAppMenu/index.d.ts +2 -0
  201. package/dist/components/layout/MGrid/MGrid.d.ts +2 -2
  202. package/dist/components/layout/MGrid/MGrid.types.d.ts +2 -0
  203. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  204. package/dist/components/layout/MInline/MInline.types.d.ts +1 -1
  205. package/dist/components/layout/MSidebar/MSidebar.d.ts +1 -1
  206. package/dist/components/layout/MSidebar/MSidebar.types.d.ts +7 -0
  207. package/dist/components/layout/MStatGrid/MStatGrid.d.ts +2 -0
  208. package/dist/components/layout/MStatGrid/MStatGrid.types.d.ts +9 -0
  209. package/dist/components/layout/MStatGrid/index.d.ts +2 -0
  210. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  211. package/dist/components/layout/MSurface/MSurface.types.d.ts +6 -1
  212. package/dist/components/layout/index.d.ts +6 -0
  213. package/dist/components/media/MGallery/MGallery.types.d.ts +5 -0
  214. package/dist/components/media/MMediaLightbox/MMediaLightbox.d.ts +1 -1
  215. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +2 -0
  216. package/dist/components/overlays/MCommandPalette/MCommandPalette.types.d.ts +35 -0
  217. package/dist/components/overlays/MCommandPalette/index.d.ts +2 -0
  218. package/dist/components/overlays/MTooltip/MTooltip.types.d.ts +2 -2
  219. package/dist/components/overlays/index.d.ts +2 -0
  220. package/dist/components/typography/MHeading/MHeading.d.ts +3 -3
  221. package/dist/{controls-DCtMOoQe.js → controls-BczTk73I.js} +141 -100
  222. package/dist/controls-BczTk73I.js.map +1 -0
  223. package/dist/controls-BfV0vxeJ.cjs +2 -0
  224. package/dist/controls-BfV0vxeJ.cjs.map +1 -0
  225. package/dist/controls.cjs +1 -1
  226. package/dist/controls.js +6 -6
  227. package/dist/cookie-consent-bootstrap.cjs +1 -1
  228. package/dist/cookie-consent-bootstrap.js +1 -1
  229. package/dist/{core-CB9-PTLK.js → core-BUYr52VU.js} +1 -1
  230. package/dist/{core-CB9-PTLK.js.map → core-BUYr52VU.js.map} +1 -1
  231. package/dist/{core-AKWkE8Bx.cjs → core-DAox0BHy.cjs} +1 -1
  232. package/dist/{core-AKWkE8Bx.cjs.map → core-DAox0BHy.cjs.map} +1 -1
  233. package/dist/{cpp-DyKt1H8n.cjs → cpp-D-FtdQo9.cjs} +1 -1
  234. package/dist/{cpp-DyKt1H8n.cjs.map → cpp-D-FtdQo9.cjs.map} +1 -1
  235. package/dist/{cpp-OOenfB17.js → cpp-Y9cHXDal.js} +1 -1
  236. package/dist/{cpp-OOenfB17.js.map → cpp-Y9cHXDal.js.map} +1 -1
  237. package/dist/creditCards-D_HwRUBz.cjs +2 -0
  238. package/dist/creditCards-D_HwRUBz.cjs.map +1 -0
  239. package/dist/{creditCards-CCysEwry.js → creditCards-D_iWmtG6.js} +14 -8
  240. package/dist/creditCards-D_iWmtG6.js.map +1 -0
  241. package/dist/{css-u5LSEAra.js → css-C__ffGj6.js} +1 -1
  242. package/dist/{css-u5LSEAra.js.map → css-C__ffGj6.js.map} +1 -1
  243. package/dist/{css-DxVbPJLu.cjs → css-DCYZ-Rs6.cjs} +1 -1
  244. package/dist/{css-DxVbPJLu.cjs.map → css-DCYZ-Rs6.cjs.map} +1 -1
  245. package/dist/data-7kG1MC1Z.cjs +2 -0
  246. package/dist/data-7kG1MC1Z.cjs.map +1 -0
  247. package/dist/{data-BiwK5rfx.js → data-z3e8XTSt.js} +1039 -874
  248. package/dist/data-z3e8XTSt.js.map +1 -0
  249. package/dist/data.cjs +1 -1
  250. package/dist/data.js +4 -4
  251. package/dist/display-Cw3-bTsm.cjs +3 -0
  252. package/dist/display-Cw3-bTsm.cjs.map +1 -0
  253. package/dist/{display-Zxj9YHu_.js → display-DyC7084n.js} +68 -41
  254. package/dist/display-DyC7084n.js.map +1 -0
  255. package/dist/display.cjs +1 -1
  256. package/dist/display.js +4 -4
  257. package/dist/dropdowns-6eO0b6eI.cjs +2 -0
  258. package/dist/dropdowns-6eO0b6eI.cjs.map +1 -0
  259. package/dist/{dropdowns-Bw8obCYl.js → dropdowns-zXgrjNXZ.js} +586 -559
  260. package/dist/dropdowns-zXgrjNXZ.js.map +1 -0
  261. package/dist/dropdowns.cjs +1 -1
  262. package/dist/dropdowns.js +1 -1
  263. package/dist/feedback-BvRmoSzV.cjs +2 -0
  264. package/dist/{feedback-Di0SEpRe.cjs.map → feedback-BvRmoSzV.cjs.map} +1 -1
  265. package/dist/{feedback-8H3bmQw5.js → feedback-DfBjzJAw.js} +299 -300
  266. package/dist/{feedback-8H3bmQw5.js.map → feedback-DfBjzJAw.js.map} +1 -1
  267. package/dist/feedback.cjs +1 -1
  268. package/dist/feedback.js +6 -7
  269. package/dist/{form-JHlvtP9r.js → form-BiPQ8SRK.js} +2 -2
  270. package/dist/{form-JHlvtP9r.js.map → form-BiPQ8SRK.js.map} +1 -1
  271. package/dist/{form-BYz99Py5.cjs → form-DlXWN2ul.cjs} +2 -2
  272. package/dist/{form-BYz99Py5.cjs.map → form-DlXWN2ul.cjs.map} +1 -1
  273. package/dist/form.cjs +1 -1
  274. package/dist/form.js +1 -1
  275. package/dist/frameworkTexts-BLJcGUXz.cjs +2 -0
  276. package/dist/frameworkTexts-BLJcGUXz.cjs.map +1 -0
  277. package/dist/{frameworkTexts-CvxcWRXp.js → frameworkTexts-BTFyhWFD.js} +3 -1
  278. package/dist/frameworkTexts-BTFyhWFD.js.map +1 -0
  279. package/dist/i18n/frameworkTexts.d.ts +2 -0
  280. package/dist/i18n.cjs +1 -1
  281. package/dist/icons-CfpYxnfg.js.map +1 -1
  282. package/dist/{icons-DWMgDKgt.cjs → icons-qCoE70hn.cjs} +2 -2
  283. package/dist/{icons-DWMgDKgt.cjs.map → icons-qCoE70hn.cjs.map} +1 -1
  284. package/dist/icons.cjs +1 -1
  285. package/dist/illustrations.cjs +1 -1
  286. package/dist/index.cjs +2 -1
  287. package/dist/index.cjs.map +1 -0
  288. package/dist/index.d.ts +4 -0
  289. package/dist/index.js +88 -53
  290. package/dist/index.js.map +1 -0
  291. package/dist/inputs-C1I1SLZ8.cjs +2 -0
  292. package/dist/inputs-C1I1SLZ8.cjs.map +1 -0
  293. package/dist/{inputs-Bcwd_UTr.js → inputs-Dy1WurNK.js} +556 -441
  294. package/dist/inputs-Dy1WurNK.js.map +1 -0
  295. package/dist/inputs.cjs +1 -1
  296. package/dist/inputs.js +5 -5
  297. package/dist/{javascript-CXjsxb-I.js → javascript-ClV78Svx.js} +1 -1
  298. package/dist/{javascript-CXjsxb-I.js.map → javascript-ClV78Svx.js.map} +1 -1
  299. package/dist/{javascript-CzjCTQxn.cjs → javascript-_Sr9cnsG.cjs} +1 -1
  300. package/dist/{javascript-CzjCTQxn.cjs.map → javascript-_Sr9cnsG.cjs.map} +1 -1
  301. package/dist/{json-9Qq5guN0.cjs → json-BFetU4Pi.cjs} +1 -1
  302. package/dist/{json-9Qq5guN0.cjs.map → json-BFetU4Pi.cjs.map} +1 -1
  303. package/dist/{json-CyV5VF8D.js → json-Dz6EkGZR.js} +1 -1
  304. package/dist/{json-CyV5VF8D.js.map → json-Dz6EkGZR.js.map} +1 -1
  305. package/dist/layout-D1-mF4xn.js +772 -0
  306. package/dist/layout-D1-mF4xn.js.map +1 -0
  307. package/dist/layout-Op6GWQ8w.cjs +2 -0
  308. package/dist/layout-Op6GWQ8w.cjs.map +1 -0
  309. package/dist/layout.cjs +1 -1
  310. package/dist/layout.js +8 -6
  311. package/dist/licensing-DmF0ObpG.cjs +2 -0
  312. package/dist/licensing-DmF0ObpG.cjs.map +1 -0
  313. package/dist/{licensing-CwzqhHH9.js → licensing-ZFCUU4Z8.js} +5 -1
  314. package/dist/licensing-ZFCUU4Z8.js.map +1 -0
  315. package/dist/{locale-CZyqh3ON.cjs → locale-Bz2JXxDZ.cjs} +2 -2
  316. package/dist/{locale-CZyqh3ON.cjs.map → locale-Bz2JXxDZ.cjs.map} +1 -1
  317. package/dist/{locale-JX_gX03k.js → locale-CS1-IY_I.js} +1 -1
  318. package/dist/{locale-JX_gX03k.js.map → locale-CS1-IY_I.js.map} +1 -1
  319. package/dist/media-DbToUupt.cjs +2 -0
  320. package/dist/media-DbToUupt.cjs.map +1 -0
  321. package/dist/{media-IM9mfVAn.js → media-DdChr0Cw.js} +7 -7
  322. package/dist/media-DdChr0Cw.js.map +1 -0
  323. package/dist/media.cjs +1 -1
  324. package/dist/media.js +3 -3
  325. package/dist/overlays-B0khU6Wb.js +392 -0
  326. package/dist/overlays-B0khU6Wb.js.map +1 -0
  327. package/dist/overlays-VAh5PqAe.cjs +2 -0
  328. package/dist/overlays-VAh5PqAe.cjs.map +1 -0
  329. package/dist/overlays.cjs +1 -1
  330. package/dist/overlays.js +6 -6
  331. package/dist/{php-deNqvHeU.js → php-5Erp5xxI.js} +1 -1
  332. package/dist/{php-deNqvHeU.js.map → php-5Erp5xxI.js.map} +1 -1
  333. package/dist/{php-Br75m0HU.cjs → php-jOdR0XS8.cjs} +1 -1
  334. package/dist/{php-Br75m0HU.cjs.map → php-jOdR0XS8.cjs.map} +1 -1
  335. package/dist/primitives.cjs +1 -1
  336. package/dist/style-runtime.cjs +1 -1
  337. package/dist/style-runtime.js +1 -1
  338. package/dist/styles.css +1 -1
  339. package/dist/{theme-CgS-bND3.cjs → theme-BaroO-OB.cjs} +2 -2
  340. package/dist/{theme-CgS-bND3.cjs.map → theme-BaroO-OB.cjs.map} +1 -1
  341. package/dist/theme.cjs +1 -1
  342. package/dist/{typescript-CRgqVaw_.cjs → typescript-C65sNL5w.cjs} +1 -1
  343. package/dist/{typescript-CRgqVaw_.cjs.map → typescript-C65sNL5w.cjs.map} +1 -1
  344. package/dist/{typescript-jNfCpQvl.js → typescript-wdQKWfxO.js} +1 -1
  345. package/dist/{typescript-jNfCpQvl.js.map → typescript-wdQKWfxO.js.map} +1 -1
  346. package/dist/{typography-BSBsn0f8.js → typography-CldwDFse.js} +2 -11
  347. package/dist/typography-CldwDFse.js.map +1 -0
  348. package/dist/typography-D7COsP1O.cjs +2 -0
  349. package/dist/typography-D7COsP1O.cjs.map +1 -0
  350. package/dist/typography.cjs +1 -1
  351. package/dist/typography.js +4 -3
  352. package/dist/{useGhostText-tv1LiSPs.cjs → useGhostText-Dg4P606B.cjs} +2 -2
  353. package/dist/{useGhostText-tv1LiSPs.cjs.map → useGhostText-Dg4P606B.cjs.map} +1 -1
  354. package/dist/{useInteractionEffect-D1ZdNbKU.cjs → useInteractionEffect-Bo8285cg.cjs} +2 -2
  355. package/dist/{useInteractionEffect-D1ZdNbKU.cjs.map → useInteractionEffect-Bo8285cg.cjs.map} +1 -1
  356. package/dist/{useKeyboardNav-CkIlAagq.cjs → useKeyboardNav-CyeQtqF8.cjs} +2 -2
  357. package/dist/{useKeyboardNav-CkIlAagq.cjs.map → useKeyboardNav-CyeQtqF8.cjs.map} +1 -1
  358. package/dist/utils/commandPaletteFromAppMenu.d.ts +42 -0
  359. package/dist/utils/creditCards.d.ts +1 -0
  360. package/dist/utils/licensing.d.ts +4 -0
  361. package/dist/utils/validators.d.ts +2 -0
  362. package/dist/utils.cjs +1 -1
  363. package/dist/utils.js +4 -4
  364. package/dist/{validators-H8tNxb8O.js → validators-D5OCyV2h.js} +23 -20
  365. package/dist/validators-D5OCyV2h.js.map +1 -0
  366. package/dist/{validators-BeNTD8mf.cjs → validators-DRhikiAi.cjs} +2 -2
  367. package/dist/validators-DRhikiAi.cjs.map +1 -0
  368. package/dist/{xml-C_ksWBRH.cjs → xml-B2okahIr.cjs} +1 -1
  369. package/dist/{xml-C_ksWBRH.cjs.map → xml-B2okahIr.cjs.map} +1 -1
  370. package/dist/{xml-0Th6YIDv.js → xml-a3b-XevT.js} +1 -1
  371. package/dist/{xml-0Th6YIDv.js.map → xml-a3b-XevT.js.map} +1 -1
  372. package/package.json +1 -1
  373. package/dist/MBadge-B4x-Lx7e.cjs +0 -2
  374. package/dist/MBadge-B4x-Lx7e.cjs.map +0 -1
  375. package/dist/MBadge-_BggwkrM.js +0 -19
  376. package/dist/MBadge-_BggwkrM.js.map +0 -1
  377. package/dist/MButton-DrkVdRDy.cjs +0 -2
  378. package/dist/MButton-DrkVdRDy.cjs.map +0 -1
  379. package/dist/MButton-y9qXhhGt.js.map +0 -1
  380. package/dist/MDataTable-Bx7W-Ari.cjs +0 -2
  381. package/dist/MDataTable-Bx7W-Ari.cjs.map +0 -1
  382. package/dist/MDataTable-ByvNQqNP.js +0 -149
  383. package/dist/MDataTable-ByvNQqNP.js.map +0 -1
  384. package/dist/MDropdownMenu-BmfXSc46.cjs +0 -2
  385. package/dist/MDropdownMenu-BmfXSc46.cjs.map +0 -1
  386. package/dist/MDropdownMenu-D79Cm5aS.js.map +0 -1
  387. package/dist/MImage-BKX-xBm3.js.map +0 -1
  388. package/dist/MImage-YbDKE-1t.cjs +0 -2
  389. package/dist/MImage-YbDKE-1t.cjs.map +0 -1
  390. package/dist/MInline-CHrh3PHH.cjs +0 -2
  391. package/dist/MInline-CHrh3PHH.cjs.map +0 -1
  392. package/dist/MInline-CoMhfX5V.js +0 -39
  393. package/dist/MInline-CoMhfX5V.js.map +0 -1
  394. package/dist/MInputCVC-5NkYSxV8.cjs +0 -2
  395. package/dist/MInputCVC-5NkYSxV8.cjs.map +0 -1
  396. package/dist/MInputCVC-BHpMHTO5.js.map +0 -1
  397. package/dist/MQrCode-ByfmG33y.cjs +0 -2
  398. package/dist/MQrCode-ByfmG33y.cjs.map +0 -1
  399. package/dist/MQrCode-CCtTkkv9.js.map +0 -1
  400. package/dist/MSkeleton-5j1h9s95.cjs +0 -2
  401. package/dist/MSkeleton-5j1h9s95.cjs.map +0 -1
  402. package/dist/MSkeleton-DGhtNmpI.js +0 -98
  403. package/dist/MSkeleton-DGhtNmpI.js.map +0 -1
  404. package/dist/MSparkline-B6qpt5WM.cjs +0 -2
  405. package/dist/MSparkline-B6qpt5WM.cjs.map +0 -1
  406. package/dist/MSparkline-voNWOLNz.js +0 -207
  407. package/dist/MSparkline-voNWOLNz.js.map +0 -1
  408. package/dist/MStack-Bh-R2opf.cjs +0 -2
  409. package/dist/MStack-Bh-R2opf.cjs.map +0 -1
  410. package/dist/MStack-CSaEbepM.js +0 -39
  411. package/dist/MStack-CSaEbepM.js.map +0 -1
  412. package/dist/MSurface-CpiV1-7f.cjs +0 -2
  413. package/dist/MSurface-CpiV1-7f.cjs.map +0 -1
  414. package/dist/MSurface-DJYSftdM.js +0 -39
  415. package/dist/MSurface-DJYSftdM.js.map +0 -1
  416. package/dist/cards-BiYdorB0.cjs +0 -2
  417. package/dist/cards-BiYdorB0.cjs.map +0 -1
  418. package/dist/cards-fn61xD_5.js +0 -1013
  419. package/dist/cards-fn61xD_5.js.map +0 -1
  420. package/dist/controls-C5PtrGZf.cjs +0 -2
  421. package/dist/controls-C5PtrGZf.cjs.map +0 -1
  422. package/dist/controls-DCtMOoQe.js.map +0 -1
  423. package/dist/creditCards-CCysEwry.js.map +0 -1
  424. package/dist/creditCards-ljs044xt.cjs +0 -2
  425. package/dist/creditCards-ljs044xt.cjs.map +0 -1
  426. package/dist/data-BiwK5rfx.js.map +0 -1
  427. package/dist/data-DOuPqg8d.cjs +0 -2
  428. package/dist/data-DOuPqg8d.cjs.map +0 -1
  429. package/dist/display-BafEcBK_.cjs +0 -3
  430. package/dist/display-BafEcBK_.cjs.map +0 -1
  431. package/dist/display-Zxj9YHu_.js.map +0 -1
  432. package/dist/dropdowns-Bw8obCYl.js.map +0 -1
  433. package/dist/dropdowns-DN7j1HhE.cjs +0 -2
  434. package/dist/dropdowns-DN7j1HhE.cjs.map +0 -1
  435. package/dist/feedback-Di0SEpRe.cjs +0 -2
  436. package/dist/frameworkTexts-CvxcWRXp.js.map +0 -1
  437. package/dist/frameworkTexts-abkS5XZK.cjs +0 -2
  438. package/dist/frameworkTexts-abkS5XZK.cjs.map +0 -1
  439. package/dist/inputs-Bcwd_UTr.js.map +0 -1
  440. package/dist/inputs-FP545Yri.cjs +0 -2
  441. package/dist/inputs-FP545Yri.cjs.map +0 -1
  442. package/dist/layout-BpEnTocp.js +0 -936
  443. package/dist/layout-BpEnTocp.js.map +0 -1
  444. package/dist/layout-rtlHrjDb.cjs +0 -2
  445. package/dist/layout-rtlHrjDb.cjs.map +0 -1
  446. package/dist/licensing-CwzqhHH9.js.map +0 -1
  447. package/dist/licensing-ezfo7ZTh.cjs +0 -2
  448. package/dist/licensing-ezfo7ZTh.cjs.map +0 -1
  449. package/dist/media-CiHsgOmu.cjs +0 -2
  450. package/dist/media-CiHsgOmu.cjs.map +0 -1
  451. package/dist/media-IM9mfVAn.js.map +0 -1
  452. package/dist/overlays-CGlqD3rl.js +0 -186
  453. package/dist/overlays-CGlqD3rl.js.map +0 -1
  454. package/dist/overlays-DrSGzbbA.cjs +0 -2
  455. package/dist/overlays-DrSGzbbA.cjs.map +0 -1
  456. package/dist/typography-BSBsn0f8.js.map +0 -1
  457. package/dist/typography-Zo4Usx9I.cjs +0 -2
  458. package/dist/typography-Zo4Usx9I.cjs.map +0 -1
  459. package/dist/validators-BeNTD8mf.cjs.map +0 -1
  460. package/dist/validators-H8tNxb8O.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"inputs-FP545Yri.cjs","names":[],"sources":["../src/components/inputs/MTextarea/MTextarea.tsx","../src/components/inputs/MInputPassword/MInputPassword.tsx","../src/components/inputs/MInputNumber/MInputNumber.tsx","../src/components/inputs/MInputEmail/MInputEmail.tsx","../src/components/inputs/MInputPhone/MInputPhone.tsx","../src/components/inputs/MInputName/MInputName.tsx","../src/components/inputs/MInputIBAN/MInputIBAN.tsx","../src/components/inputs/MInputTaxId/MInputTaxId.tsx","../src/components/inputs/MInputCurrency/MInputCurrency.tsx","../src/components/inputs/MInputDate/MInputDate.tsx","../src/components/inputs/MInputCreditCard/MInputCreditCard.tsx","../src/components/inputs/MInputGroup/MInputGroup.tsx","../src/components/inputs/MInputPostCode/MInputPostCode.tsx","../src/components/inputs/MInputOTP/MInputOTP.tsx","../src/components/inputs/MInputSlider/MInputSlider.tsx","../src/components/inputs/MInputFile/MCropEditor.tsx","../src/components/inputs/MInputFile/MInputFile.tsx"],"sourcesContent":["import {useState, useRef, useCallback, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MTextareaProps} from './MTextarea.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useGhostText} from '../../../utils/useGhostText'\nimport {MSpinner} from '../../feedback'\nimport './MTextarea.css'\n\n// Render the multiline text input with optional auto-resize behavior.\nexport const MTextarea = forwardRef<HTMLTextAreaElement, MTextareaProps>(function MTextarea(\n {\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n rows = 3,\n autoResize = false,\n minRows,\n maxRows,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n ghostOptions,\n ghostMinChars = 2,\n onGhostAccept,\n loading = false,\n onChange,\n onFocus,\n onBlur,\n className,\n style,\n textareaClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const {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 resolvedColorClass = hasError ? 'color-error' : color ? `color-${color}` : undefined\n const resolvedRef = ref ?? textareaRef\n\n // Resize the textarea to fit content while respecting min and max row limits.\n const adjustHeight = useCallback(() => {\n const el = typeof resolvedRef === 'function' ? null : resolvedRef?.current\n if (!el || !autoResize) return\n\n el.style.height = 'auto'\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20\n const minH = minRows ? minRows * lineHeight : 0\n const maxH = maxRows ? maxRows * lineHeight : Infinity\n const newHeight = Math.min(Math.max(el.scrollHeight, minH), maxH)\n el.style.height = `${newHeight}px`\n el.style.overflowY = el.scrollHeight > newHeight ? 'auto' : 'hidden'\n }, [autoResize, minRows, maxRows, resolvedRef])\n\n useEffect(() => {\n adjustHeight()\n }, [currentValue, adjustHeight])\n\n // Mirror focus state so wrapper styling stays consistent with MInput.\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true)\n onFocus?.(e)\n },\n [onFocus]\n )\n\n // Clear focus styling before delegating blur handling.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCurrentValue(e.target.value)\n onChange?.(e)\n ghost.reset()\n },\n [onChange, setCurrentValue, ghost.reset]\n )\n\n // Intercept keyboard events for ghost text acceptance.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (ghostOptions && ghost.hint) {\n const accepted = ghost.onKeyDown(e)\n if (accepted) {\n const result = ghost.accept()\n setCurrentValue(result.value)\n onGhostAccept?.(result.value)\n const el = typeof resolvedRef === 'function' ? null : resolvedRef?.current\n if (el) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set\n nativeSet?.call(el, result.value)\n el.dispatchEvent(new Event('input', {bubbles: true}))\n }\n return\n }\n }\n },\n [ghostOptions, ghost, setCurrentValue, onGhostAccept, resolvedRef]\n )\n\n const containerClasses = cn(\n 'container',\n `field-${variant}`,\n `field-${size}`,\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n disabled && 'disabled'\n )\n\n return (\n <div className={cn('textarea', 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}>\n {ghostOptions ? (\n <div className=\"ghost-text-field ghost-text-field-multi\">\n <textarea\n ref={resolvedRef as React.Ref<HTMLTextAreaElement>}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n rows={autoResize ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n value={currentValue}\n className={cn('field', textareaClassName)}\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 <textarea\n ref={resolvedRef as React.Ref<HTMLTextAreaElement>}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n rows={autoResize ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n value={currentValue}\n className={cn('field', textareaClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n )}\n {loading && <MSpinner size=\"sm\" color={color} className=\"textarea-spinner\" />}\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","import {useState, useCallback, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputPasswordProps, MPasswordStrength} from './MInputPassword.types'\nimport {MInput} from '../MInput'\nimport {MEyeIcon, MEyeOffIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MInputPassword.css'\n\n// Approximate password strength with simple UI-focused heuristics.\nfunction calcStrength(value: string): MPasswordStrength {\n let score = 0\n if (value.length >= 8) score++\n if (value.length >= 12) score++\n if (/[a-z]/.test(value) && /[A-Z]/.test(value)) score++\n if (/\\d/.test(value)) score++\n if (/[^a-zA-Z0-9]/.test(value)) score++\n\n if (score <= 1) return 'weak'\n if (score <= 2) return 'fair'\n if (score <= 3) return 'good'\n return 'strong'\n}\n\nconst STRENGTH_LABELS: Record<MPasswordStrength, string> = {\n weak: 'Weak',\n fair: 'Fair',\n good: 'Good',\n strong: 'Strong',\n}\n\n// Extend the base input with password visibility and optional strength feedback.\nexport const MInputPassword = forwardRef<HTMLInputElement, MInputPasswordProps>(function MInputPassword(\n {showToggle = true, showStrength = false, onStrengthChange, value, defaultValue, onChange, className, ...rest},\n ref\n) {\n const [visible, setVisible] = useState(false)\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const currentValue = value !== undefined ? value.toString() : internalValue\n const strength = calcStrength(currentValue)\n\n useEffect(() => {\n onStrengthChange?.(strength)\n }, [strength, onStrengthChange])\n\n // Keep uncontrolled usage working while reporting changes to the caller.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n },\n [onChange, value]\n )\n\n const toggleIcon = showToggle ? (\n <button\n type=\"button\"\n className=\"password toggle\"\n onClick={() => setVisible((v) => !v)}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n >\n {visible ? <MEyeOffIcon /> : <MEyeIcon />}\n </button>\n ) : undefined\n\n return (\n <div className={cn('password input', className)}>\n <MInput\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n value={currentValue}\n onChange={handleChange}\n endIcon={toggleIcon}\n />\n {showStrength && currentValue.length > 0 && (\n <div className=\"password strength row\">\n <div className=\"password strength bar\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={cn(\n 'password strength segment',\n i < ['weak', 'fair', 'good', 'strong'].indexOf(strength) + 1 &&\n `strength-${strength}`\n )}\n />\n ))}\n </div>\n <span className={cn('password strength label', `strength-${strength}`)}>\n {STRENGTH_LABELS[strength]}\n </span>\n </div>\n )}\n </div>\n )\n})\n","import {useState, useCallback, useRef, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputNumberProps} from './MInputNumber.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {MChevronDownIcon, MChevronUpIcon} from '../../../icons'\nimport './MInputNumber.css'\n\n// Keep numeric values inside optional min and max bounds.\nfunction clampValue(val: number, min?: number, max?: number): number {\n if (min !== undefined && val < min) return min\n if (max !== undefined && val > max) return max\n return val\n}\n\n// Prevent floating-point drift when step values use decimal precision.\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision)\n return Math.round(val * factor) / factor\n}\n\n// Extend the base input with stepping, clamping and keyboard increment support.\nexport const MInputNumber = forwardRef<HTMLInputElement, MInputNumberProps>(function MInputNumber(\n {\n min,\n max,\n step = 1,\n showStepper = true,\n precision = 0,\n allowNegative = true,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n onBlur,\n disabled = false,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const currentValue = value !== undefined ? value.toString() : internalValue\n const intervalRef = useRef<ReturnType<typeof setInterval>>(null)\n const currentValueRef = useRef(currentValue)\n\n useEffect(() => {\n currentValueRef.current = currentValue\n }, [currentValue])\n\n // Keep the displayed string and numeric callback in sync.\n const updateValue = useCallback(\n (newVal: string) => {\n if (value === undefined) {\n setInternalValue(newVal)\n }\n const num = parseFloat(newVal)\n onValueChange?.(isNaN(num) ? null : num)\n },\n [value, onValueChange]\n )\n\n // Move the current value by one step in the requested direction.\n const increment = useCallback(\n (direction: 1 | -1) => {\n const current = parseFloat(currentValueRef.current) || 0\n const newVal = roundToPrecision(clampValue(current + step * direction, min, max), precision)\n currentValueRef.current = newVal.toString()\n updateValue(newVal.toString())\n },\n [step, min, max, precision, updateValue]\n )\n\n // Repeat stepping while the pointer is held on a stepper button.\n const startHold = useCallback(\n (direction: 1 | -1) => {\n increment(direction)\n intervalRef.current = setInterval(() => increment(direction), 150)\n },\n [increment]\n )\n\n // Clear the hold timer when the pointer is released.\n const stopHold = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n intervalRef.current = null\n }\n }, [])\n\n useEffect(() => stopHold, [stopHold])\n\n // Filter user input down to numeric characters before storing it.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n const filtered = raw.replace(allowNegative ? /[^\\d.,-]/g : /[^\\d.,]/g, '')\n currentValueRef.current = filtered\n updateValue(filtered)\n onChange?.(e)\n },\n [onChange, allowNegative, updateValue]\n )\n\n // Snap the entered value back into range when the field loses focus.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n const num = parseFloat(currentValueRef.current)\n if (!isNaN(num)) {\n const clamped = roundToPrecision(clampValue(num, min, max), precision)\n currentValueRef.current = clamped.toString()\n updateValue(clamped.toString())\n }\n onBlur?.(e)\n },\n [min, max, precision, updateValue, onBlur]\n )\n\n // Support ArrowUp and ArrowDown as a keyboard stepper.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n increment(1)\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n increment(-1)\n }\n onKeyDown?.(e)\n },\n [increment, onKeyDown]\n )\n\n const stepper =\n showStepper && !disabled ? (\n <div className=\"number stepper\">\n <button\n type=\"button\"\n className=\"number step button\"\n onPointerDown={(event) => {\n event.preventDefault()\n startHold(1)\n }}\n onPointerUp={stopHold}\n onPointerLeave={stopHold}\n onPointerCancel={stopHold}\n tabIndex={-1}\n aria-label=\"Increment\"\n >\n <MChevronUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"number step button\"\n onPointerDown={(event) => {\n event.preventDefault()\n startHold(-1)\n }}\n onPointerUp={stopHold}\n onPointerLeave={stopHold}\n onPointerCancel={stopHold}\n tabIndex={-1}\n aria-label=\"Decrement\"\n >\n <MChevronDownIcon />\n </button>\n </div>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n endIcon={stepper}\n disabled={disabled}\n className={cn('number input', className)}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputEmailProps} from './MInputEmail.types'\nimport {MInput} from '../MInput'\nimport {validateEmail} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon, MMailIcon} from '../../../icons'\n\n// Extend the base input with email validation and optional success feedback.\nexport const MInputEmail = forwardRef<HTMLInputElement, MInputEmailProps>(function MInputEmail(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showValidIcon = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'email@example.com',\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Reuse the shared email validator and surface the latest result upstream.\n const runValidation = useCallback(\n (val: string) => {\n const result = validateEmail(val)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Validate while typing only when the component is configured to do so.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value)\n }\n if (validateOnChange && touched) {\n runValidation(e.target.value)\n }\n onChange?.(e)\n },\n [onChange, value, validateOnChange, touched, runValidation]\n )\n\n // Validate optional email input on blur once the user has interacted with it.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && e.target.value) {\n runValidation(e.target.value)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, runValidation]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && success !== undefined ? success : touched && validation.valid && currentValue.length > 0\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"validation-icon\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"email\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={<MMailIcon />}\n endIcon={validIcon}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputPhoneProps} from './MInputPhone.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {validatePhone} from '../../../utils/validators'\nimport {formatPhone, stripNonDigits} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MPhoneIcon} from '../../../icons'\nimport './MInputPhone.css'\n\n// Extend the base input with country-aware phone formatting and validation.\nexport const MInputPhone = forwardRef<HTMLInputElement, MInputPhoneProps>(function MInputPhone(\n {\n countryCode = 'PL',\n showCountryCode = true,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = '123 456 789',\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Keep the emitted raw digits and the displayed formatted value aligned.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value)\n const formatted = formatOnChange ? formatPhone(digits, {countryCode}) : digits\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(digits, formatted)\n onChange?.(e)\n },\n [onChange, value, formatOnChange, countryCode, onValueChange]\n )\n\n // Validate the raw number on blur using country-specific length rules.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const result = validatePhone(stripNonDigits(currentValue), countryCode)\n setValidation(result)\n onValidationChange?.(result)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, countryCode, onValidationChange]\n )\n\n const COUNTRY_PREFIXES: Record<string, string> = {\n PL: '+48',\n DE: '+49',\n US: '+1',\n GB: '+44',\n FR: '+33',\n CZ: '+420',\n SK: '+421',\n }\n\n const prefix = showCountryCode ? (\n <span className=\"phone prefix\">{COUNTRY_PREFIXES[countryCode.toUpperCase()] ?? `+${countryCode}`}</span>\n ) : undefined\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"tel\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={showCountryCode ? prefix : <MPhoneIcon />}\n className={cn('phone input', className)}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputNameProps} from './MInputName.types'\nimport {MInput} from '../MInput'\nimport {capitalizeWords} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MUserIcon} from '../../../icons'\n\n// Extend the base input with name-friendly filtering and optional word-count validation.\nexport const MInputName = forwardRef<HTMLInputElement, MInputNameProps>(function MInputName(\n {\n autoCapitalize = true,\n allowNumbers = false,\n allowSpecialChars = false,\n minWords,\n validateOnBlur = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = 'Jan Kowalski',\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Normalize user input according to the configured name rules.\n const filterValue = useCallback(\n (raw: string): string => {\n let filtered = raw\n if (!allowNumbers) {\n filtered = filtered.replace(/\\d/g, '')\n }\n if (!allowSpecialChars) {\n filtered = filtered.replace(/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\\s'-]/g, '')\n }\n if (autoCapitalize) {\n filtered = capitalizeWords(filtered)\n }\n return filtered\n },\n [allowNumbers, allowSpecialChars, autoCapitalize]\n )\n\n // Store the filtered value while still delegating the original change event.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const filtered = filterValue(e.target.value)\n if (value === undefined) {\n setInternalValue(filtered)\n }\n onChange?.(e)\n },\n [onChange, value, filterValue]\n )\n\n // Validate the minimum word count after the user leaves the field.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const words = currentValue.trim().split(/\\s+/).filter(Boolean)\n if (minWords && words.length < minWords) {\n const result: ValidationResult = {\n valid: false,\n error: `Enter at least ${minWords} word${minWords > 1 ? 's' : ''}`,\n }\n setValidation(result)\n onValidationChange?.(result)\n } else {\n const result: ValidationResult = {valid: true}\n setValidation(result)\n onValidationChange?.(result)\n }\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, minWords, onValidationChange]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={<MUserIcon />}\n />\n )\n})\n","import {useState, useCallback, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputIBANProps} from './MInputIBAN.types'\nimport {MInput} from '../MInput'\nimport {validateIBAN} from '../../../utils/validators'\nimport {formatIBAN, unformatIBAN} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MBankIcon, MCheckIcon} from '../../../icons'\n\nfunction normalizeCountryCode(countryCode?: string): string | undefined {\n const normalized = countryCode\n ?.replace(/[^a-zA-Z]/g, '')\n .toUpperCase()\n .slice(0, 2)\n return normalized || undefined\n}\n\nfunction normalizeIbanValue(value: string, countryCode?: string): string {\n const clean = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase()\n const normalizedCountryCode = normalizeCountryCode(countryCode)\n\n if (!normalizedCountryCode) {\n return clean\n }\n\n return `${normalizedCountryCode}${clean.replace(/^[A-Z]{0,2}/, '')}`\n}\n\nfunction formatIbanDisplayValue(value: string, countryCode?: string, formatOnChange: boolean = true): string {\n const normalized = normalizeIbanValue(value, countryCode)\n return formatOnChange ? formatIBAN(normalized) : normalized\n}\n\nfunction buildIbanPlaceholder(countryCode?: string): string {\n const normalizedCountryCode = normalizeCountryCode(countryCode)\n return normalizedCountryCode\n ? `${normalizedCountryCode}00 0000 0000 0000 0000 0000 0000`\n : 'PL00 0000 0000 0000 0000 0000 0000'\n}\n\n// Extend the base input with IBAN formatting and checksum validation.\nexport const MInputIBAN = forwardRef<HTMLInputElement, MInputIBANProps>(function MInputIBAN(\n {\n countryCode,\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(() =>\n formatIbanDisplayValue(defaultValue?.toString() ?? '', countryCode, formatOnChange)\n )\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue =\n value !== undefined ? formatIbanDisplayValue(value.toString(), countryCode, formatOnChange) : internalValue\n\n useEffect(() => {\n if (value !== undefined) return\n setInternalValue((prev) => formatIbanDisplayValue(prev, countryCode, formatOnChange))\n }, [countryCode, formatOnChange, value])\n\n // Keep raw and formatted IBAN values aligned for consumers and display.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const clean = normalizeIbanValue(unformatIBAN(e.target.value), countryCode)\n const formatted = formatOnChange ? formatIBAN(clean) : clean\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(clean, formatted)\n onChange?.(e)\n },\n [countryCode, onChange, value, formatOnChange, onValueChange]\n )\n\n // Validate the normalized IBAN once the user leaves the field.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const result = validateIBAN(normalizeIbanValue(unformatIBAN(currentValue), countryCode))\n setValidation(result)\n onValidationChange?.(result)\n }\n onBlur?.(e)\n },\n [countryCode, onBlur, validateOnBlur, currentValue, onValidationChange]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && (success !== undefined ? success : touched && validation.valid && currentValue.length > 0)\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"validation-icon\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder ?? buildIbanPlaceholder(countryCode)}\n startIcon={<MBankIcon />}\n endIcon={validIcon}\n maxLength={34 + 8}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputTaxIdProps, MTaxIdType} from './MInputTaxId.types'\nimport {MInput} from '../MInput'\nimport {validateNIP, validatePESEL, validateREGON} from '../../../utils/validators'\nimport {formatNIP, stripNonDigits} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon, MIdCardIcon} from '../../../icons'\n\nconst VALIDATORS: Record<MTaxIdType, (v: string) => ValidationResult> = {\n NIP: validateNIP,\n PESEL: validatePESEL,\n REGON: validateREGON,\n}\n\nconst MAX_LENGTHS: Record<MTaxIdType, number> = {\n NIP: 13,\n PESEL: 11,\n REGON: 14,\n}\n\nconst PLACEHOLDERS: Record<MTaxIdType, string> = {\n NIP: '123-456-78-19',\n PESEL: '00000000000',\n REGON: '000000000',\n}\n\n// Extend the base input with NIP, PESEL and REGON formatting and validation.\nexport const MInputTaxId = forwardRef<HTMLInputElement, MInputTaxIdProps>(function MInputTaxId(\n {\n taxIdType,\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Normalize the visible value based on the selected identifier type.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value)\n const formatted = formatOnChange && taxIdType === 'NIP' ? formatNIP(digits) : digits\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(digits)\n onChange?.(e)\n },\n [onChange, value, formatOnChange, taxIdType, onValueChange]\n )\n\n // Validate the stripped numeric value against the active identifier rules.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const validator = VALIDATORS[taxIdType]\n const result = validator(stripNonDigits(currentValue))\n setValidation(result)\n onValidationChange?.(result)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, taxIdType, onValidationChange]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && (success !== undefined ? success : touched && validation.valid && currentValue.length > 0)\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"validation-icon\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder ?? PLACEHOLDERS[taxIdType]}\n startIcon={<MIdCardIcon />}\n endIcon={validIcon}\n maxLength={MAX_LENGTHS[taxIdType]}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputCurrencyProps} from './MInputCurrency.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {formatCurrency, parseCurrencyToNumber} from '../../../utils/formatters'\nimport './MInputCurrency.css'\n\n// Extend the base input with currency formatting and numeric callbacks.\nexport const MInputCurrency = forwardRef<HTMLInputElement, MInputCurrencyProps>(function MInputCurrency(\n {\n currency,\n currencySymbol,\n currencyPosition = 'end',\n decimalSeparator = ',',\n thousandSeparator = ' ',\n precision = 2,\n min,\n max,\n allowNegative = false,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n placeholder = '0,00',\n startIcon,\n endIcon,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n const symbol = currencySymbol ?? currency ?? ''\n\n // Filter user input down to one decimal separator and an optional minus sign.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n let filtered = ''\n let hasDecimal = false\n for (const ch of raw) {\n if (ch >= '0' && ch <= '9') {\n filtered += ch\n } else if ((ch === ',' || ch === '.') && !hasDecimal) {\n filtered += decimalSeparator\n hasDecimal = true\n } else if (ch === '-' && allowNegative && filtered.length === 0) {\n filtered += '-'\n }\n }\n\n const formatted = formatCurrency(filtered, {decimalSeparator, thousandSeparator, precision})\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n\n const num = parseCurrencyToNumber(formatted, thousandSeparator, decimalSeparator)\n onValueChange?.(num)\n onChange?.(e)\n },\n [onChange, value, decimalSeparator, thousandSeparator, precision, allowNegative, onValueChange]\n )\n\n // Clamp the numeric value on blur and snap it to the configured precision.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n let num = parseCurrencyToNumber(currentValue, thousandSeparator, decimalSeparator)\n if (num !== null) {\n if (min !== undefined && num < min) num = min\n if (max !== undefined && num > max) num = max\n const fixed = num.toFixed(precision).replace('.', decimalSeparator)\n const formatted = formatCurrency(fixed, {decimalSeparator, thousandSeparator, precision})\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(num)\n }\n onBlur?.(e)\n },\n [currentValue, min, max, precision, decimalSeparator, thousandSeparator, value, onValueChange, onBlur]\n )\n\n const symbolEl = symbol ? <span className=\"currency symbol\">{symbol}</span> : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n startIcon={currencyPosition === 'start' ? symbolEl : startIcon}\n endIcon={currencyPosition === 'end' ? symbolEl : endIcon}\n className={cn('currency input', className)}\n />\n )\n})\n","import {useState, useCallback, useEffect, useRef, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputDateProps} from './MInputDate.types'\nimport {MInput} from '../MInput'\nimport {stripNonDigits, formatDateInput} from '../../../utils/formatters'\nimport {validateDate, parseDateString} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCalendarIcon} from '../../../icons'\n\nconst FORMAT_PLACEHOLDER: Record<string, string> = {\n 'DD/MM/YYYY': 'DD{s}MM{s}YYYY',\n 'MM/DD/YYYY': 'MM{s}DD{s}YYYY',\n 'YYYY/MM/DD': 'YYYY{s}MM{s}DD',\n}\n\n// Specialized date input with auto-formatting, parsing and validation.\n// Displays in DD/MM/YYYY (or other format) and emits a Date object.\nexport const MInputDate = forwardRef<HTMLInputElement, MInputDateProps>(function MInputDate(\n {\n format = 'DD/MM/YYYY',\n separator = '/',\n minDate,\n maxDate,\n validateOnBlur = true,\n validateOnChange = false,\n onDateChange,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n onKeyDown,\n onClear,\n error,\n errorText,\n placeholder,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n const internalChangeRef = useRef(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n useEffect(() => {\n if (internalChangeRef.current) {\n internalChangeRef.current = false\n return\n }\n\n if (!currentValue) {\n setValidation({valid: true})\n setTouched(false)\n return\n }\n\n setValidation(validateDate(currentValue, {format, minDate, maxDate}))\n }, [currentValue, format, maxDate, minDate])\n\n const runValidation = useCallback(\n (val: string) => {\n const result = validateDate(val, {format, minDate, maxDate})\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [format, minDate, maxDate, onValidationChange]\n )\n\n const emitDate = useCallback(\n (formatted: string) => {\n const digits = stripNonDigits(formatted)\n if (digits.length === 8) {\n onDateChange?.(parseDateString(formatted, format), formatted)\n } else {\n onDateChange?.(null, formatted)\n }\n },\n [format, onDateChange]\n )\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value)\n if (digits.length > 8) return\n\n const formatted = formatDateInput(digits, format, separator)\n internalChangeRef.current = true\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n\n emitDate(formatted)\n\n if (validateOnChange && touched) {\n runValidation(formatted)\n }\n\n onChange?.(e)\n },\n [onChange, value, format, separator, validateOnChange, touched, runValidation, emitDate]\n )\n\n const handleClear = useCallback(() => {\n internalChangeRef.current = true\n if (value === undefined) {\n setInternalValue('')\n }\n setValidation({valid: true})\n setTouched(false)\n onDateChange?.(null, '')\n onClear?.()\n }, [value, onDateChange, onClear])\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n runValidation(currentValue)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, runValidation]\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) {\n onKeyDown?.(e)\n return\n }\n if (e.ctrlKey || e.metaKey) {\n onKeyDown?.(e)\n return\n }\n if (!/^\\d$/.test(e.key)) {\n e.preventDefault()\n }\n onKeyDown?.(e)\n },\n [onKeyDown]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder ?? FORMAT_PLACEHOLDER[format].replace(/\\{s\\}/g, separator)}\n startIcon={<MCalendarIcon />}\n maxLength={10}\n className={className}\n />\n )\n})\n","import {forwardRef, useCallback, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputCreditCardProps} from './MInputCreditCard.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {detectCardBrand, formatCardNumber, stripCardNumber, validateCardNumber} from '../../../utils/creditCards'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon} from '../../../icons'\nimport './MInputCreditCard.css'\n\nfunction CardBrandBadge({value}: {value: string}) {\n const brand = detectCardBrand(value)\n\n return <span className={cn('credit-card-brand-badge', 'credit-brand', brand.brand)}>{brand.iconLabel}</span>\n}\n\n// Extend the base input with payment card detection, formatting and checksum validation.\nexport const MInputCreditCard = forwardRef<HTMLInputElement, MInputCreditCardProps>(function MInputCreditCard(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showBrandIcon = true,\n showValidIcon = true,\n onValidationChange,\n onCardBrandChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = '4242 4242 4242 4242',\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(() => formatCardNumber(defaultValue?.toString() ?? ''))\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? formatCardNumber(value.toString()) : internalValue\n const runValidation = useCallback(\n (formattedValue: string) => {\n const result = validateCardNumber(formattedValue)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Keep the visible card number grouped while exposing raw digits to the caller.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatCardNumber(event.target.value)\n const nextBrand = detectCardBrand(formattedValue)\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onCardBrandChange?.(nextBrand.brand)\n onValueChange?.(stripCardNumber(formattedValue), formattedValue, nextBrand.brand)\n\n if (validateOnChange && touched) {\n runValidation(formattedValue)\n }\n\n onChange?.(event)\n },\n [onCardBrandChange, onChange, onValueChange, runValidation, touched, validateOnChange, value]\n )\n\n // Validate after the user leaves the field so checksum feedback stays predictable.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n runValidation(currentValue)\n }\n\n onBlur?.(event)\n },\n [currentValue, onBlur, runValidation, validateOnBlur]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && success !== undefined\n ? success\n : touched && validation.valid && stripCardNumber(currentValue).length > 0\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"credit valid validation-icon credit-card-valid-icon\" aria-hidden=\"true\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={showBrandIcon ? <CardBrandBadge value={currentValue} /> : undefined}\n endIcon={validIcon}\n className={cn('credit-card input', className)}\n />\n )\n})\n","import {useState, useRef, useCallback, forwardRef, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MInputGroupProps, MInputGroupAddon, MInputGroupSlot} from './MInputGroup.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MButton, MCheckbox} from '../../controls'\nimport {MSpinner} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MInputGroup.css'\n\n// Detect structured addon configs while leaving raw React nodes untouched.\nfunction isAddonObject(slot: MInputGroupSlot): slot is MInputGroupAddon {\n return typeof slot === 'object' && slot !== null && !isValidElement(slot) && 'type' in slot\n}\n\n// Render one prepend or append slot based on its declared addon type.\nfunction renderSlot(slot: MInputGroupSlot, position: 'prepend' | 'append', index: number, color: string) {\n if (!isAddonObject(slot)) {\n return (\n <div key={`${position}-${index}`} className={cn('addon', 'custom', position)}>\n {slot}\n </div>\n )\n }\n\n const addon = slot\n\n if (addon.type === 'button') {\n return (\n <MButton\n key={`${position}-${index}`}\n variant=\"ghost\"\n color={color as any}\n size=\"sm\"\n className={cn('addon', position, 'addon-button')}\n onClick={addon.onClick}\n clickEffect=\"none\"\n >\n {addon.content}\n </MButton>\n )\n }\n\n if (addon.type === 'checkbox') {\n return (\n <div key={`${position}-${index}`} className={cn('addon', position, 'checkbox')}>\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n checked={addon.checked}\n onChange={(e) => addon.onCheckedChange?.(e.target.checked)}\n className=\"addon-checkbox\"\n />\n </div>\n )\n }\n\n // text or icon\n return (\n <span key={`${position}-${index}`} className={cn('addon', position)}>\n {addon.content}\n </span>\n )\n}\n\n// Normalize the public slot API to a flat array for predictable rendering.\nfunction normalizeSlots(slots?: MInputGroupSlot | MInputGroupSlot[]): MInputGroupSlot[] {\n if (slots === undefined || slots === null) return []\n if (Array.isArray(slots)) return slots\n return [slots]\n}\n\n// Render a grouped input with prepend and append content around a shared field.\nexport const MInputGroup = forwardRef<HTMLInputElement, MInputGroupProps>(function MInputGroup(\n {\n prepend,\n append,\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 size = 'md',\n fullWidth = false,\n label,\n helperText,\n errorText,\n color = 'primary',\n error = false,\n maxLength,\n clearable = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\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 hasError = error || !!errorText\n const resolvedColorClass = hasError ? 'color-error' : `color-${color}`\n const {currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const hasContent = currentValue.length > 0\n\n // Mirror focus state so the wrapper can style the group consistently.\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(e)\n },\n [onFocus]\n )\n\n // Clear wrapper focus styling before delegating blur handling.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(e.target.value)\n onChange?.(e)\n },\n [onChange, setCurrentValue]\n )\n\n // Reset the field value while preserving focus and controlled integrations.\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 prependSlots = normalizeSlots(prepend)\n const appendSlots = normalizeSlots(append)\n\n return (\n <div className={cn('input-group', 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 required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div\n className={cn(\n 'container',\n `field-${size}`,\n focused && 'focused',\n hasError && 'has-error',\n disabled && 'disabled',\n effectClassName\n )}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n {prependSlots.map((slot, i) => renderSlot(slot, 'prepend', i, color))}\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 {loading && (\n <span className={'spinner-addon'}>\n <MSpinner size=\"sm\" color={color} />\n </span>\n )}\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 {appendSlots.map((slot, i) => renderSlot(slot, 'append', i, color))}\n </div>\n\n {(errorText || helperText) && (\n <div className={'bottom'}>\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 </div>\n )}\n </div>\n )\n})\n","import {forwardRef, useCallback, useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputPostCodeProps} from './MInputPostCode.types'\nimport {MInputGroup} from '../MInputGroup'\nimport {cn} from '../../../utils/cn'\nimport {formatPostCode, getPostCodeRule, postCodeCountries, validatePostCode} from '../../../utils/postalCodes'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './MInputPostCode.css'\n\n// Extend the grouped input with country-aware postal code masking and validation.\nexport const MInputPostCode = forwardRef<HTMLInputElement, MInputPostCodeProps>(function MInputPostCode(\n {\n country,\n defaultCountry = 'PL',\n selectableCountry = true,\n validateOnBlur = true,\n validateOnChange = false,\n onCountryChange,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n helperText,\n placeholder,\n className,\n disabled = false,\n ...rest\n },\n ref\n) {\n const [internalCountry, setInternalCountry] = useState(defaultCountry.toUpperCase())\n const [internalValue, setInternalValue] = useState(() =>\n formatPostCode(defaultValue?.toString() ?? '', country ?? defaultCountry)\n )\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentCountry = (country ?? internalCountry).toUpperCase()\n const currentRule = useMemo(() => getPostCodeRule(currentCountry), [currentCountry])\n const currentValue = value !== undefined ? formatPostCode(value.toString(), currentCountry) : internalValue\n\n const runValidation = useCallback(\n (formattedValue: string, nextCountry: string) => {\n const result = validatePostCode(formattedValue, nextCountry)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Keep the visible postal code aligned with the selected country rule.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatPostCode(event.target.value, currentCountry)\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onValueChange?.(formattedValue.replace(/\\s|-/g, ''), formattedValue, currentCountry)\n\n if (validateOnChange && touched) {\n runValidation(formattedValue, currentCountry)\n }\n\n onChange?.(event)\n },\n [currentCountry, onChange, onValueChange, runValidation, touched, validateOnChange, value]\n )\n\n // Re-run validation after blur so the visible formatting and error state stay in sync.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n runValidation(currentValue, currentCountry)\n }\n\n onBlur?.(event)\n },\n [currentCountry, currentValue, onBlur, runValidation, validateOnBlur]\n )\n\n // Switch the formatter and validation rule whenever the selected country changes.\n const handleCountryChange = useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextCountry = event.target.value.toUpperCase()\n const formattedValue = formatPostCode(currentValue, nextCountry)\n\n if (country === undefined) {\n setInternalCountry(nextCountry)\n }\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onCountryChange?.(nextCountry)\n\n if (touched) {\n runValidation(formattedValue, nextCountry)\n }\n },\n [country, currentValue, onCountryChange, runValidation, touched, value]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInputGroup\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode={currentRule.inputMode}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n helperText={resolvedErrorText ? undefined : (helperText ?? `Format: ${currentRule.example}`)}\n placeholder={placeholder ?? currentRule.placeholder}\n maxLength={currentRule.maxLength}\n disabled={disabled}\n prepend={\n selectableCountry ? (\n <div className=\"country-select-wrap\">\n <select\n className=\"country-select\"\n value={currentCountry}\n onChange={handleCountryChange}\n disabled={disabled}\n aria-label=\"Postal code country\"\n >\n {postCodeCountries.map((option) => (\n <option key={option.value} value={option.value}>\n {option.value}\n </option>\n ))}\n </select>\n </div>\n ) : (\n {type: 'text', content: currentCountry}\n )\n }\n className={cn('input-post-code', className)}\n />\n )\n})\n","import {useState, useCallback, useRef, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputOTPProps} from './MInputOTP.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport './MInputOTP.css'\n\nexport const MInputOTP = forwardRef<HTMLDivElement, MInputOTPProps>(function MInputOTP(\n {\n length = 6,\n value,\n onChange,\n autoFocus = false,\n disabled = false,\n color = 'primary',\n size = 'md',\n error = false,\n errorText,\n clearable = false,\n label,\n onClear,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState('')\n const currentValue = value !== undefined ? value : internalValue\n const inputsRef = useRef<(HTMLInputElement | null)[]>([])\n const resolvedColorClass = error ? 'color-error' : `color-${color}`\n\n const updateValue = useCallback(\n (newVal: string) => {\n if (value === undefined) setInternalValue(newVal)\n onChange?.(newVal)\n },\n [value, onChange]\n )\n\n const focusSlot = useCallback(\n (index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1))\n inputsRef.current[clamped]?.focus()\n },\n [length]\n )\n\n useEffect(() => {\n if (autoFocus) focusSlot(0)\n }, [autoFocus, focusSlot])\n\n const handleInput = useCallback(\n (index: number, char: string) => {\n if (!/^\\d$/.test(char)) return\n const chars = currentValue.split('')\n while (chars.length <= index) chars.push('')\n chars[index] = char\n updateValue(chars.join(''))\n if (index < length - 1) focusSlot(index + 1)\n },\n [currentValue, length, updateValue, focusSlot]\n )\n\n const handleKeyDown = useCallback(\n (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault()\n const chars = currentValue.split('')\n if (chars[index]) {\n chars[index] = ''\n updateValue(chars.join(''))\n } else if (index > 0) {\n chars[index - 1] = ''\n updateValue(chars.join(''))\n focusSlot(index - 1)\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n if (index > 0) focusSlot(index - 1)\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n if (index < length - 1) focusSlot(index + 1)\n }\n },\n [currentValue, length, updateValue, focusSlot]\n )\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length)\n if (pasted) {\n updateValue(pasted)\n focusSlot(Math.min(pasted.length, length - 1))\n }\n },\n [length, updateValue, focusSlot]\n )\n\n const handleClear = useCallback(() => {\n updateValue('')\n onClear?.()\n focusSlot(0)\n }, [focusSlot, onClear, updateValue])\n\n return (\n <div\n ref={ref}\n className={cn('otp input', resolvedColorClass, size, disabled && 'disabled', className)}\n {...rest}\n >\n {label && <div className=\"otp label\">{label}</div>}\n <div className=\"otp control\">\n <div className=\"otp slots\" onPaste={handlePaste}>\n {Array.from({length}, (_, i) => (\n <input\n key={i}\n ref={(el) => {\n inputsRef.current[i] = el\n }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={currentValue[i] || ''}\n disabled={disabled}\n className={cn('otp slot', currentValue[i] && 'filled')}\n aria-label={`Digit ${i + 1}`}\n onChange={(e) => {\n const char = e.target.value.slice(-1)\n handleInput(i, char)\n }}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={(e) => e.target.select()}\n />\n ))}\n </div>\n {clearable && currentValue.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"otp clear clear-btn-base\"\n onClick={handleClear}\n aria-label=\"Clear code\"\n >\n <MCloseIcon />\n </button>\n )}\n </div>\n {error && errorText && <div className=\"otp error\">{errorText}</div>}\n </div>\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputSliderProps} from './MInputSlider.types'\nimport {MSlider} from '../../controls'\nimport {cn} from '../../../utils/cn'\nimport './MInputSlider.css'\n\nfunction clampValue(val: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, val))\n}\n\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision)\n return Math.round(val * factor) / factor\n}\n\nexport const MInputSlider = forwardRef<HTMLDivElement, MInputSliderProps>(function MInputSlider(\n {\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n precision = 0,\n marks,\n showInput = true,\n color = 'primary',\n size = 'md',\n disabled = false,\n label,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(min)\n const currentValue = value !== undefined ? value : internalValue\n\n const update = useCallback(\n (newVal: number) => {\n const clamped = roundToPrecision(clampValue(newVal, min, max), precision)\n if (value === undefined) setInternalValue(clamped)\n onChange?.(clamped)\n },\n [min, max, precision, value, onChange]\n )\n\n const handleSliderChange = useCallback((val: number) => update(val), [update])\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n if (raw === '' || raw === '-') return\n const num = parseFloat(raw)\n if (!isNaN(num)) update(num)\n },\n [update]\n )\n\n const handleBlur = useCallback(() => {\n update(currentValue)\n }, [currentValue, update])\n\n return (\n <div ref={ref} className={cn('slider input', size, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"slider label\">{label}</div>}\n <div className=\"slider row\">\n <MSlider\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleSliderChange}\n marks={marks}\n color={color}\n disabled={disabled}\n />\n {showInput && (\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className={cn('slider field', `color-${color}`)}\n value={currentValue}\n onChange={handleInputChange}\n onBlur={handleBlur}\n disabled={disabled}\n aria-label={label || 'MSlider value'}\n />\n )}\n </div>\n </div>\n )\n})\n","import {useState, useRef, useCallback, useEffect} from 'react'\nimport type * as React from 'react'\nimport type {MInputFileCropShape} from './MInputFile.types'\nimport {MButton, MSlider} from '../../controls'\nimport {MZoomInIcon} from '../../../icons'\nimport './MCropEditor.css'\n\ninterface MCropEditorProps {\n file: File\n shape: MInputFileCropShape\n outputSize: number\n quality: number\n onCrop: (cropped: File) => void\n onCancel: () => void\n}\n\nexport function MCropEditor({file, shape, outputSize, quality, onCrop, onCancel}: MCropEditorProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const imgRef = useRef<HTMLImageElement | null>(null)\n const [imgSrc, setImgSrc] = useState('')\n const [scale, setScale] = useState(1)\n const [offset, setOffset] = useState({x: 0, y: 0})\n const [dragging, setDragging] = useState(false)\n const dragStart = useRef({x: 0, y: 0, ox: 0, oy: 0})\n\n useEffect(() => {\n const url = URL.createObjectURL(file)\n setImgSrc(url)\n return () => URL.revokeObjectURL(url)\n }, [file])\n\n useEffect(() => {\n if (!imgSrc) return\n const img = new Image()\n img.onload = () => {\n imgRef.current = img\n const minDim = Math.min(img.width, img.height)\n const containerSize = 280\n const initialScale = containerSize / minDim\n setScale(initialScale)\n setOffset({\n x: (containerSize - img.width * initialScale) / 2,\n y: (containerSize - img.height * initialScale) / 2,\n })\n }\n img.src = imgSrc\n }, [imgSrc])\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n setDragging(true)\n dragStart.current = {x: e.clientX, y: e.clientY, ox: offset.x, oy: offset.y}\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n },\n [offset]\n )\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!dragging) return\n setOffset({\n x: dragStart.current.ox + (e.clientX - dragStart.current.x),\n y: dragStart.current.oy + (e.clientY - dragStart.current.y),\n })\n },\n [dragging]\n )\n\n const handlePointerUp = useCallback(() => {\n setDragging(false)\n }, [])\n\n const handleWheel = useCallback(\n (e: React.WheelEvent) => {\n e.preventDefault()\n const containerSize = 280\n const cx = containerSize / 2\n const cy = containerSize / 2\n\n const delta = e.deltaY > 0 ? 0.95 : 1.05\n const newScale = Math.max(0.1, Math.min(scale * delta, 10))\n\n setOffset({\n x: cx - (cx - offset.x) * (newScale / scale),\n y: cy - (cy - offset.y) * (newScale / scale),\n })\n setScale(newScale)\n },\n [scale, offset]\n )\n\n const handleSliderChange = useCallback(\n (newScale: number) => {\n const containerSize = 280\n const cx = containerSize / 2\n const cy = containerSize / 2\n\n setOffset({\n x: cx - (cx - offset.x) * (newScale / scale),\n y: cy - (cy - offset.y) * (newScale / scale),\n })\n setScale(newScale)\n },\n [scale, offset]\n )\n\n const exportCrop = useCallback(() => {\n const img = imgRef.current\n const canvas = canvasRef.current\n if (!img || !canvas) return\n\n const containerSize = 280\n canvas.width = outputSize\n canvas.height = outputSize\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n const ratio = outputSize / containerSize\n\n if (shape === 'circle') {\n ctx.beginPath()\n ctx.arc(outputSize / 2, outputSize / 2, outputSize / 2, 0, Math.PI * 2)\n ctx.closePath()\n ctx.clip()\n }\n\n ctx.drawImage(img, offset.x * ratio, offset.y * ratio, img.width * scale * ratio, img.height * scale * ratio)\n\n canvas.toBlob(\n (blob) => {\n if (!blob) return\n const ext = file.name.replace(/.*\\./, '')\n const name = file.name.replace(/\\.[^.]+$/, '') + '_cropped.' + ext\n const cropped = new File([blob], name, {type: blob.type})\n onCrop(cropped)\n },\n file.type.startsWith('image/png') ? 'image/png' : 'image/jpeg',\n quality\n )\n }, [file, offset, scale, outputSize, quality, shape, onCrop])\n\n // Convert scale to 0-100 range for MSlider and back\n const sliderValue = Math.round(((scale - 0.1) / (5 - 0.1)) * 100)\n\n const handleSliderValueChange = useCallback(\n (value: number) => {\n const newScale = 0.1 + (value / 100) * (5 - 0.1)\n handleSliderChange(newScale)\n },\n [handleSliderChange]\n )\n\n return (\n <div className=\"crop editor\">\n <div\n ref={containerRef}\n className={`crop viewport ${shape}`}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onWheel={handleWheel}\n >\n {imgSrc && (\n <img\n src={imgSrc}\n alt=\"\"\n className=\"crop image\"\n draggable={false}\n style={{\n transform: `translate(${offset.x}px, ${offset.y}px) scale(${scale})`,\n transformOrigin: '0 0',\n }}\n />\n )}\n <div className={`crop overlay ${shape}`} />\n </div>\n\n <div className=\"crop zoom\">\n <MZoomInIcon className=\"crop zoom icon\" aria-hidden=\"true\" />\n <MSlider\n min={0}\n max={100}\n step={1}\n value={sliderValue}\n onChange={handleSliderValueChange}\n color=\"primary\"\n className=\"crop zoom slider\"\n />\n </div>\n\n <div className=\"crop actions\">\n <MButton variant=\"ghost\" size=\"sm\" color=\"neutral\" onClick={onCancel}>\n Cancel\n </MButton>\n <MButton variant=\"ghost\" size=\"sm\" color=\"primary\" onClick={exportCrop}>\n Crop\n </MButton>\n </div>\n\n <canvas ref={canvasRef} style={{display: 'none'}} />\n </div>\n )\n}\n","import {useState, useCallback, useRef, useMemo, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputFileProps, MInputFileCropOptions} from './MInputFile.types'\nimport {MCropEditor} from './MCropEditor'\nimport {cn} from '../../../utils/cn'\nimport {\n MCloseIcon,\n MFileArchiveIcon,\n MFileCodeIcon,\n MFileDocsIcon,\n MFileExeIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFileTextIcon,\n MFileXlsIcon,\n MFileZipIcon,\n MUploadIcon,\n} from '../../../icons'\nimport './MInputFile.css'\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nfunction fileExtension(name: string): string {\n const dot = name.lastIndexOf('.')\n return dot >= 0 ? name.slice(dot + 1).toUpperCase() : ''\n}\n\nfunction isImage(file: File): boolean {\n return file.type.startsWith('image/')\n}\n\nfunction FileTypeIcon({ext}: {ext: string}) {\n const name = ext.toLowerCase()\n\n if (name === 'pdf') return <MFilePdfIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'].includes(name)) {\n return <MFileImageIcon className=\"file type icon\" aria-hidden=\"true\" />\n }\n if (['json'].includes(name)) return <MFileJsonIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['js', 'jsx', 'ts', 'tsx', 'html', 'css', 'php', 'xml'].includes(name)) {\n return <MFileCodeIcon className=\"file type icon\" aria-hidden=\"true\" />\n }\n if (['txt'].includes(name)) return <MFileTextIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['md'].includes(name)) return <MFileMdIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['docs', 'doc', 'docx'].includes(name)) return <MFileDocsIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['odt'].includes(name)) return <MFileOdtIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['csv', 'xls', 'xlsx'].includes(name)) return <MFileXlsIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['zip'].includes(name)) return <MFileZipIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['rar', '7z', 'tar', 'gz'].includes(name))\n return <MFileArchiveIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['mp3', 'wav', 'ogg'].includes(name)) return <MFileMp3Icon className=\"file type icon\" aria-hidden=\"true\" />\n if (['mp4', 'mov', 'avi', 'mkv', 'webm'].includes(name)) {\n return <MFileMp4Icon className=\"file type icon\" aria-hidden=\"true\" />\n }\n if (['exe', 'msi', 'bat'].includes(name)) return <MFileExeIcon className=\"file type icon\" aria-hidden=\"true\" />\n\n return <MFileIcon className=\"file type icon\" aria-hidden=\"true\" />\n}\n\nexport const MInputFile = forwardRef<HTMLDivElement, MInputFileProps>(function MInputFile(\n {\n accept,\n multiple = false,\n maxSize,\n maxFiles,\n onChange,\n label,\n helperText,\n errorText,\n error = false,\n disabled = false,\n color = 'primary',\n size = 'md',\n preview = true,\n clearable = false,\n icon,\n placeholder = 'Drop files here or click to browse',\n dropText = 'Drop files here',\n fullWidth = false,\n crop,\n onClear,\n className,\n ...rest\n },\n ref\n) {\n const [dragging, setDragging] = useState(false)\n const [files, setFiles] = useState<File[]>([])\n const [fileError, setFileError] = useState('')\n const [cropFile, setCropFile] = useState<File | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const dragCounter = useRef(0)\n\n const cropOptions: MInputFileCropOptions | null = crop\n ? typeof crop === 'boolean'\n ? {shape: 'square', outputSize: 256, quality: 0.92}\n : {shape: crop.shape ?? 'square', outputSize: crop.outputSize ?? 256, quality: crop.quality ?? 0.92}\n : null\n\n const objectUrls = useMemo(() => {\n return files.map((f) => (isImage(f) ? URL.createObjectURL(f) : null))\n }, [files])\n\n useEffect(() => {\n return () => {\n objectUrls.forEach((url) => {\n if (url) URL.revokeObjectURL(url)\n })\n }\n }, [objectUrls])\n\n const processFiles = useCallback(\n (incoming: FileList | File[]) => {\n let accepted = Array.from(incoming)\n\n if (accept) {\n const patterns = accept.split(',').map((s) => s.trim().toLowerCase())\n accepted = accepted.filter((f) => {\n const ext = '.' + f.name.split('.').pop()?.toLowerCase()\n const mime = f.type.toLowerCase()\n return patterns.some(\n (p) => p === ext || p === mime || (p.endsWith('/*') && mime.startsWith(p.slice(0, -1)))\n )\n })\n }\n\n if (maxSize) {\n const oversized = accepted.filter((f) => f.size > maxSize)\n if (oversized.length) {\n setFileError(`Max file size: ${formatSize(maxSize)}`)\n return\n }\n }\n\n if (maxFiles && accepted.length > maxFiles) {\n setFileError(`Max ${maxFiles} file${maxFiles > 1 ? 's' : ''}`)\n return\n }\n\n setFileError('')\n\n if (cropOptions && accepted.length === 1 && isImage(accepted[0])) {\n setCropFile(accepted[0])\n return\n }\n\n setFiles(accepted)\n onChange?.(accepted)\n },\n [accept, maxSize, maxFiles, onChange, cropOptions]\n )\n\n const handleCropDone = useCallback(\n (cropped: File) => {\n setCropFile(null)\n setFiles([cropped])\n onChange?.([cropped])\n },\n [onChange]\n )\n\n const handleCropCancel = useCallback(() => {\n setCropFile(null)\n }, [])\n\n const handleDragEnter = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (disabled) return\n dragCounter.current++\n setDragging(true)\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragCounter.current--\n if (dragCounter.current <= 0) {\n dragCounter.current = 0\n setDragging(false)\n }\n }, [])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragCounter.current = 0\n setDragging(false)\n if (disabled) return\n if (e.dataTransfer.files.length) {\n processFiles(e.dataTransfer.files)\n }\n },\n [disabled, processFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) inputRef.current?.click()\n }, [disabled])\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files?.length) {\n processFiles(e.target.files)\n }\n },\n [processFiles]\n )\n\n const removeFile = useCallback(\n (index: number) => {\n const url = objectUrls[index]\n if (url) URL.revokeObjectURL(url)\n const next = files.filter((_, i) => i !== index)\n setFiles(next)\n onChange?.(next)\n },\n [files, objectUrls, onChange]\n )\n\n const clearFiles = useCallback(() => {\n objectUrls.forEach((url) => {\n if (url) URL.revokeObjectURL(url)\n })\n setCropFile(null)\n setFiles([])\n setFileError('')\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n onChange?.([])\n onClear?.()\n }, [objectUrls, onChange, onClear])\n\n const displayError = errorText || fileError\n const hasError = error || !!fileError\n const resolvedColorClass = hasError ? 'color-error' : `color-${color}`\n\n return (\n <div\n ref={ref}\n className={cn(\n 'file input',\n resolvedColorClass,\n size,\n fullWidth && 'full-width',\n disabled && 'disabled',\n className\n )}\n {...rest}\n >\n {(label || (clearable && files.length > 0 && !disabled)) && (\n <div className=\"file header\">\n {label && <div className=\"file label\">{label}</div>}\n {clearable && files.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"file clear clear-btn-base\"\n onClick={clearFiles}\n aria-label=\"Clear files\"\n >\n <MCloseIcon aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )}\n\n <div\n className={cn('file dropzone', dragging && 'dragging', hasError && 'error')}\n onClick={handleClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n aria-label={label || placeholder}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n tabIndex={-1}\n className=\"file hidden\"\n />\n\n <div className=\"file content\">\n {icon && <div className=\"file icon\">{icon}</div>}\n {!icon && <MUploadIcon className=\"file icon default\" aria-hidden=\"true\" />}\n <div className=\"file text\">{dragging ? dropText : placeholder}</div>\n {accept && <div className=\"file accept\">{accept}</div>}\n </div>\n </div>\n\n {cropFile && cropOptions && (\n <MCropEditor\n file={cropFile}\n shape={cropOptions.shape!}\n outputSize={cropOptions.outputSize!}\n quality={cropOptions.quality!}\n onCrop={handleCropDone}\n onCancel={handleCropCancel}\n />\n )}\n\n {helperText && !hasError && <div className=\"file helper\">{helperText}</div>}\n {hasError && displayError && <div className=\"file error\">{displayError}</div>}\n\n {preview && files.length > 0 && !cropFile && (\n <div className=\"file preview\">\n {files.map((file, i) => (\n <div key={`${file.name}-${i}`} className=\"file item\">\n <div className=\"file thumb\">\n {objectUrls[i] ? (\n <img src={objectUrls[i]!} alt={file.name} className=\"file image\" />\n ) : (\n <FileTypeIcon ext={fileExtension(file.name)} />\n )}\n </div>\n <div className=\"file info\">\n <span className=\"file name\">{file.name}</span>\n <span className=\"file size\">{formatSize(file.size)}</span>\n </div>\n <button\n type=\"button\"\n className=\"file remove\"\n onClick={(e) => {\n e.stopPropagation()\n removeFile(i)\n }}\n aria-label={`Remove ${file.name}`}\n >\n <MCloseIcon aria-hidden=\"true\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n})\n"],"mappings":"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"}