@banzamel/mineralui 1.0.2 → 1.0.4

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 (551) hide show
  1. package/README.md +55 -22
  2. package/dist/{MArrowDownIcon-BslRpwqk.js → MArrowDownIcon-BcKSgdTY.js} +1 -1
  3. package/dist/{MArrowDownIcon-BslRpwqk.js.map → MArrowDownIcon-BcKSgdTY.js.map} +1 -1
  4. package/dist/{MArrowDownIcon-DjLz-A0I.cjs → MArrowDownIcon-C8EAODgv.cjs} +1 -1
  5. package/dist/{MArrowDownIcon-DjLz-A0I.cjs.map → MArrowDownIcon-C8EAODgv.cjs.map} +1 -1
  6. package/dist/MArrowUpDownIcon-CW_PWr7Q.cjs +2 -0
  7. package/dist/MArrowUpDownIcon-CW_PWr7Q.cjs.map +1 -0
  8. package/dist/MArrowUpDownIcon-DukXemVA.js +19 -0
  9. package/dist/MArrowUpDownIcon-DukXemVA.js.map +1 -0
  10. package/dist/{MArrowUpIcon-CjLbBZOW.cjs → MArrowUpIcon-DWV_HYrz.cjs} +1 -1
  11. package/dist/{MArrowUpIcon-CjLbBZOW.cjs.map → MArrowUpIcon-DWV_HYrz.cjs.map} +1 -1
  12. package/dist/{MArrowUpIcon-CudFd1sD.js → MArrowUpIcon-Dan-4hs8.js} +1 -1
  13. package/dist/{MArrowUpIcon-CudFd1sD.js.map → MArrowUpIcon-Dan-4hs8.js.map} +1 -1
  14. package/dist/{MAvatar-B_YPaZt9.js → MAvatar-Blh5pfSO.js} +4 -4
  15. package/dist/{MAvatar-B_YPaZt9.js.map → MAvatar-Blh5pfSO.js.map} +1 -1
  16. package/dist/{MAvatar-lzW37S2c.cjs → MAvatar-DMM1CsdO.cjs} +2 -2
  17. package/dist/{MAvatar-lzW37S2c.cjs.map → MAvatar-DMM1CsdO.cjs.map} +1 -1
  18. package/dist/{MBadge-lezDpe-x.cjs → MBadge-Babyr1R9.cjs} +2 -2
  19. package/dist/{MBadge-lezDpe-x.cjs.map → MBadge-Babyr1R9.cjs.map} +1 -1
  20. package/dist/{MBadge-jh7HI3jR.js → MBadge-BjZX0MIC.js} +2 -2
  21. package/dist/{MBadge-jh7HI3jR.js.map → MBadge-BjZX0MIC.js.map} +1 -1
  22. package/dist/MBrandMoreIcons-ClUq3DXO.js +873 -0
  23. package/dist/MBrandMoreIcons-ClUq3DXO.js.map +1 -0
  24. package/dist/MBrandMoreIcons-Xxf9FaIx.cjs +2 -0
  25. package/dist/MBrandMoreIcons-Xxf9FaIx.cjs.map +1 -0
  26. package/dist/{MButton-BIWj6T2J.js → MButton-33EzpGvQ.js} +3 -3
  27. package/dist/{MButton-BIWj6T2J.js.map → MButton-33EzpGvQ.js.map} +1 -1
  28. package/dist/{MButton-DOtMjOTz.cjs → MButton-C_WTyNvw.cjs} +2 -2
  29. package/dist/{MButton-DOtMjOTz.cjs.map → MButton-C_WTyNvw.cjs.map} +1 -1
  30. package/dist/{MCalendarIcon-CgFKAojj.cjs → MCalendarIcon-4PilFCrR.cjs} +1 -1
  31. package/dist/{MCalendarIcon-CgFKAojj.cjs.map → MCalendarIcon-4PilFCrR.cjs.map} +1 -1
  32. package/dist/{MCalendarIcon-Csj_JV9i.js → MCalendarIcon-DXx62vjV.js} +1 -1
  33. package/dist/{MCalendarIcon-Csj_JV9i.js.map → MCalendarIcon-DXx62vjV.js.map} +1 -1
  34. package/dist/MChatIcon-CnDOfqkO.js +102 -0
  35. package/dist/MChatIcon-CnDOfqkO.js.map +1 -0
  36. package/dist/MChatIcon-DX-u8_6S.cjs +2 -0
  37. package/dist/MChatIcon-DX-u8_6S.cjs.map +1 -0
  38. package/dist/MCheckIcon-DQumT4HX.js +15 -0
  39. package/dist/MCheckIcon-DQumT4HX.js.map +1 -0
  40. package/dist/MCheckIcon-ck_21ybZ.cjs +2 -0
  41. package/dist/MCheckIcon-ck_21ybZ.cjs.map +1 -0
  42. package/dist/{MCheckbox-Vbr4IhEn.cjs → MCheckbox-BhtJDdip.cjs} +2 -2
  43. package/dist/{MCheckbox-Vbr4IhEn.cjs.map → MCheckbox-BhtJDdip.cjs.map} +1 -1
  44. package/dist/{MCheckbox-DhDggBnO.js → MCheckbox-CugP7F6H.js} +3 -3
  45. package/dist/{MCheckbox-DhDggBnO.js.map → MCheckbox-CugP7F6H.js.map} +1 -1
  46. package/dist/{MChevronDownIcon-CPXk51nE.js → MChevronDownIcon-D3yTpzni.js} +1 -1
  47. package/dist/{MChevronDownIcon-CPXk51nE.js.map → MChevronDownIcon-D3yTpzni.js.map} +1 -1
  48. package/dist/{MChevronDownIcon-CE25HFYo.cjs → MChevronDownIcon-DCMmxkRt.cjs} +1 -1
  49. package/dist/{MChevronDownIcon-CE25HFYo.cjs.map → MChevronDownIcon-DCMmxkRt.cjs.map} +1 -1
  50. package/dist/{MChevronRightIcon-QbfE-b7g.cjs → MChevronRightIcon-BC08M6g8.cjs} +1 -1
  51. package/dist/{MChevronRightIcon-QbfE-b7g.cjs.map → MChevronRightIcon-BC08M6g8.cjs.map} +1 -1
  52. package/dist/{MChevronRightIcon-BozfuNpv.js → MChevronRightIcon-CXs8IHiV.js} +1 -1
  53. package/dist/{MChevronRightIcon-BozfuNpv.js.map → MChevronRightIcon-CXs8IHiV.js.map} +1 -1
  54. package/dist/{MClockIcon-2NNldTuA.cjs → MClockIcon-C-zYY2A0.cjs} +1 -1
  55. package/dist/{MClockIcon-2NNldTuA.cjs.map → MClockIcon-C-zYY2A0.cjs.map} +1 -1
  56. package/dist/{MClockIcon-D4K6fmV9.js → MClockIcon-DefFl5ks.js} +1 -1
  57. package/dist/{MClockIcon-D4K6fmV9.js.map → MClockIcon-DefFl5ks.js.map} +1 -1
  58. package/dist/{MCloseIcon-BKH33Q51.cjs → MCloseIcon-6cfw9trj.cjs} +1 -1
  59. package/dist/{MCloseIcon-BKH33Q51.cjs.map → MCloseIcon-6cfw9trj.cjs.map} +1 -1
  60. package/dist/{MCloseIcon-BQv01JOS.js → MCloseIcon-lDH3Vc10.js} +1 -1
  61. package/dist/{MCloseIcon-BQv01JOS.js.map → MCloseIcon-lDH3Vc10.js.map} +1 -1
  62. package/dist/MCookieBootstrap-Ct5mIm5P.cjs +2 -0
  63. package/dist/MCookieBootstrap-Ct5mIm5P.cjs.map +1 -0
  64. package/dist/MCookieBootstrap-DEEHYxXi.js +437 -0
  65. package/dist/MCookieBootstrap-DEEHYxXi.js.map +1 -0
  66. package/dist/MDataTable--pUkQHAv.js +151 -0
  67. package/dist/MDataTable--pUkQHAv.js.map +1 -0
  68. package/dist/MDataTable-8ZhnWhqW.cjs +2 -0
  69. package/dist/MDataTable-8ZhnWhqW.cjs.map +1 -0
  70. package/dist/MDrawer-00BvU8Dn.js +122 -0
  71. package/dist/MDrawer-00BvU8Dn.js.map +1 -0
  72. package/dist/MDrawer-FYS50FtQ.cjs +2 -0
  73. package/dist/MDrawer-FYS50FtQ.cjs.map +1 -0
  74. package/dist/MDropdownMenu-BLBdToIz.cjs +2 -0
  75. package/dist/MDropdownMenu-BLBdToIz.cjs.map +1 -0
  76. package/dist/MDropdownMenu-BgOiM5yr.js +152 -0
  77. package/dist/MDropdownMenu-BgOiM5yr.js.map +1 -0
  78. package/dist/MEllipsisVerticalIcon-C87B9UQK.cjs +2 -0
  79. package/dist/MEllipsisVerticalIcon-C87B9UQK.cjs.map +1 -0
  80. package/dist/MEllipsisVerticalIcon-CNn1AQ8W.js +37 -0
  81. package/dist/MEllipsisVerticalIcon-CNn1AQ8W.js.map +1 -0
  82. package/dist/{MFileExtIcons-H7zvI8AL.js → MFileExtIcons-BoG3GPxg.js} +1 -1
  83. package/dist/{MFileExtIcons-H7zvI8AL.js.map → MFileExtIcons-BoG3GPxg.js.map} +1 -1
  84. package/dist/{MFileExtIcons-DzACx_eM.cjs → MFileExtIcons-DH9oZPpf.cjs} +1 -1
  85. package/dist/{MFileExtIcons-DzACx_eM.cjs.map → MFileExtIcons-DH9oZPpf.cjs.map} +1 -1
  86. package/dist/MImage-CKrjXRmf.js +49 -0
  87. package/dist/MImage-CKrjXRmf.js.map +1 -0
  88. package/dist/MImage-f854avZS.cjs +2 -0
  89. package/dist/MImage-f854avZS.cjs.map +1 -0
  90. package/dist/{MInput-DYEAqxod.js → MInput-BUCcLWSI.js} +6 -6
  91. package/dist/{MInput-DYEAqxod.js.map → MInput-BUCcLWSI.js.map} +1 -1
  92. package/dist/{MInput-CjsJRLaz.cjs → MInput-CQ3MqKsk.cjs} +2 -2
  93. package/dist/{MInput-CjsJRLaz.cjs.map → MInput-CQ3MqKsk.cjs.map} +1 -1
  94. package/dist/{MInputSearch-CrVrpYsR.js → MInputSearch-BeXUh4lz.js} +4 -4
  95. package/dist/{MInputSearch-CrVrpYsR.js.map → MInputSearch-BeXUh4lz.js.map} +1 -1
  96. package/dist/{MInputSearch-CQZ-ccri.cjs → MInputSearch-Dt79qbZg.cjs} +2 -2
  97. package/dist/{MInputSearch-CQZ-ccri.cjs.map → MInputSearch-Dt79qbZg.cjs.map} +1 -1
  98. package/dist/{MLink-CAaK6SOG.cjs → MLink-CVN-Vll4.cjs} +2 -2
  99. package/dist/{MLink-CAaK6SOG.cjs.map → MLink-CVN-Vll4.cjs.map} +1 -1
  100. package/dist/{MLink-BfRaT8NU.js → MLink-DH4vk7O5.js} +2 -2
  101. package/dist/{MLink-BfRaT8NU.js.map → MLink-DH4vk7O5.js.map} +1 -1
  102. package/dist/{MMenuIcon-TZ9iJAXz.cjs → MMenuIcon-Brpitjq1.cjs} +1 -1
  103. package/dist/{MMenuIcon-TZ9iJAXz.cjs.map → MMenuIcon-Brpitjq1.cjs.map} +1 -1
  104. package/dist/{MMenuIcon-B13EvS3i.js → MMenuIcon-idfVpVQD.js} +1 -1
  105. package/dist/{MMenuIcon-B13EvS3i.js.map → MMenuIcon-idfVpVQD.js.map} +1 -1
  106. package/dist/MModal-BQvk1KKc.cjs +2 -0
  107. package/dist/MModal-BQvk1KKc.cjs.map +1 -0
  108. package/dist/MModal-D1Knn-bg.js +69 -0
  109. package/dist/MModal-D1Knn-bg.js.map +1 -0
  110. package/dist/MPagination-Bu84ZlVh.cjs +2 -0
  111. package/dist/MPagination-Bu84ZlVh.cjs.map +1 -0
  112. package/dist/MPagination-CbkRMnL1.js +147 -0
  113. package/dist/MPagination-CbkRMnL1.js.map +1 -0
  114. package/dist/MPhoneIcon-efl6BqwU.js +38 -0
  115. package/dist/MPhoneIcon-efl6BqwU.js.map +1 -0
  116. package/dist/MPhoneIcon-lgC9DH5a.cjs +2 -0
  117. package/dist/MPhoneIcon-lgC9DH5a.cjs.map +1 -0
  118. package/dist/{MPopover-BE73Iock.cjs → MPopover-BXPkE575.cjs} +2 -2
  119. package/dist/{MPopover-BE73Iock.cjs.map → MPopover-BXPkE575.cjs.map} +1 -1
  120. package/dist/{MPopover-C7ZJz7Uj.js → MPopover-DKBdLfrw.js} +3 -3
  121. package/dist/{MPopover-C7ZJz7Uj.js.map → MPopover-DKBdLfrw.js.map} +1 -1
  122. package/dist/{MPortal-d1mwLhwx.cjs → MPortal-BysJLuEi.cjs} +1 -1
  123. package/dist/{MPortal-d1mwLhwx.cjs.map → MPortal-BysJLuEi.cjs.map} +1 -1
  124. package/dist/{MPortal-BzordRff.js → MPortal-CbpNkzfC.js} +1 -1
  125. package/dist/{MPortal-BzordRff.js.map → MPortal-CbpNkzfC.js.map} +1 -1
  126. package/dist/MProtectIcon-BPYP06QD.cjs +2 -0
  127. package/dist/MProtectIcon-BPYP06QD.cjs.map +1 -0
  128. package/dist/{MBoltIcon-B1P4i_X4.js → MProtectIcon-BTtMmrib.js} +11 -29
  129. package/dist/MProtectIcon-BTtMmrib.js.map +1 -0
  130. package/dist/MQrCode-AttGRC6v.js +416 -0
  131. package/dist/MQrCode-AttGRC6v.js.map +1 -0
  132. package/dist/MQrCode-CbUPPd4S.cjs +2 -0
  133. package/dist/MQrCode-CbUPPd4S.cjs.map +1 -0
  134. package/dist/{MSearchIcon-Bb-f5JdO.cjs → MSearchIcon-BakfEJQd.cjs} +1 -1
  135. package/dist/{MSearchIcon-Bb-f5JdO.cjs.map → MSearchIcon-BakfEJQd.cjs.map} +1 -1
  136. package/dist/{MSearchIcon-COQaC0mk.js → MSearchIcon-Dlg4Og8t.js} +1 -1
  137. package/dist/{MSearchIcon-COQaC0mk.js.map → MSearchIcon-Dlg4Og8t.js.map} +1 -1
  138. package/dist/MSkeleton-B5jZNFOG.cjs +2 -0
  139. package/dist/MSkeleton-B5jZNFOG.cjs.map +1 -0
  140. package/dist/MSkeleton-BL4C5FkH.js +98 -0
  141. package/dist/MSkeleton-BL4C5FkH.js.map +1 -0
  142. package/dist/{MSlider-KyOhqE6d.js → MSlider-D5ckYDop.js} +2 -2
  143. package/dist/{MSlider-KyOhqE6d.js.map → MSlider-D5ckYDop.js.map} +1 -1
  144. package/dist/{MSlider-VFCviEUW.cjs → MSlider-vD6Sla2p.cjs} +2 -2
  145. package/dist/{MSlider-VFCviEUW.cjs.map → MSlider-vD6Sla2p.cjs.map} +1 -1
  146. package/dist/MSparkline-DjcDtnZH.js +207 -0
  147. package/dist/MSparkline-DjcDtnZH.js.map +1 -0
  148. package/dist/MSparkline-U-XaDvpV.cjs +2 -0
  149. package/dist/MSparkline-U-XaDvpV.cjs.map +1 -0
  150. package/dist/{MStack-SPM68IMq.cjs → MStack-BvFI0AFv.cjs} +2 -2
  151. package/dist/{MStack-SPM68IMq.cjs.map → MStack-BvFI0AFv.cjs.map} +1 -1
  152. package/dist/{MStack-CQLO9e-3.js → MStack-DhdMFSUL.js} +4 -4
  153. package/dist/{MStack-CQLO9e-3.js.map → MStack-DhdMFSUL.js.map} +1 -1
  154. package/dist/{MStarFillIcon-w67ZD64c.js → MStarFillIcon-CGyQPFi8.js} +1 -1
  155. package/dist/{MStarFillIcon-w67ZD64c.js.map → MStarFillIcon-CGyQPFi8.js.map} +1 -1
  156. package/dist/{MStarFillIcon-B2H1b7mD.cjs → MStarFillIcon-DJHfl_Qy.cjs} +1 -1
  157. package/dist/{MStarFillIcon-B2H1b7mD.cjs.map → MStarFillIcon-DJHfl_Qy.cjs.map} +1 -1
  158. package/dist/MSubText-CfWNytoK.cjs +2 -0
  159. package/dist/MSubText-CfWNytoK.cjs.map +1 -0
  160. package/dist/MSubText-uvcBr9Ba.js +15 -0
  161. package/dist/MSubText-uvcBr9Ba.js.map +1 -0
  162. package/dist/MSuccessIcon-CatQ4FmG.cjs +2 -0
  163. package/dist/MSuccessIcon-CatQ4FmG.cjs.map +1 -0
  164. package/dist/MSuccessIcon-D3GrOvye.js +33 -0
  165. package/dist/MSuccessIcon-D3GrOvye.js.map +1 -0
  166. package/dist/MSurface-DlcK6Bre.js +39 -0
  167. package/dist/MSurface-DlcK6Bre.js.map +1 -0
  168. package/dist/MSurface-qcGLaTIK.cjs +2 -0
  169. package/dist/MSurface-qcGLaTIK.cjs.map +1 -0
  170. package/dist/{MTag-CXAmy8tJ.cjs → MTag-BMi1GS7v.cjs} +2 -2
  171. package/dist/{MTag-CXAmy8tJ.cjs.map → MTag-BMi1GS7v.cjs.map} +1 -1
  172. package/dist/{MTag-BbIqugpb.js → MTag-Cor8ZIW3.js} +4 -4
  173. package/dist/{MTag-BbIqugpb.js.map → MTag-Cor8ZIW3.js.map} +1 -1
  174. package/dist/MText-C0FdseW1.js +57 -0
  175. package/dist/MText-C0FdseW1.js.map +1 -0
  176. package/dist/MText-OV0ihtQ6.cjs +2 -0
  177. package/dist/MText-OV0ihtQ6.cjs.map +1 -0
  178. package/dist/MTimeAgo-BOXKcDYN.cjs +2 -0
  179. package/dist/MTimeAgo-BOXKcDYN.cjs.map +1 -0
  180. package/dist/MTimeAgo-DrDs52Y1.js +51 -0
  181. package/dist/MTimeAgo-DrDs52Y1.js.map +1 -0
  182. package/dist/MToggle-B7cKH5Tl.js +48 -0
  183. package/dist/MToggle-B7cKH5Tl.js.map +1 -0
  184. package/dist/MToggle-Hheo-jfZ.cjs +2 -0
  185. package/dist/MToggle-Hheo-jfZ.cjs.map +1 -0
  186. package/dist/{MTooltip-CKS_zgzR.js → MTooltip-D3xuZ5kG.js} +3 -3
  187. package/dist/{MTooltip-CKS_zgzR.js.map → MTooltip-D3xuZ5kG.js.map} +1 -1
  188. package/dist/{MTooltip-CXXYU-j1.cjs → MTooltip-DzwZ637q.cjs} +2 -2
  189. package/dist/{MTooltip-CXXYU-j1.cjs.map → MTooltip-DzwZ637q.cjs.map} +1 -1
  190. package/dist/{MZoomInIcon-CK2aJhDg.js → MZoomInIcon-BEdmglk6.js} +11 -46
  191. package/dist/MZoomInIcon-BEdmglk6.js.map +1 -0
  192. package/dist/MZoomInIcon-dhRm7zT6.cjs +2 -0
  193. package/dist/MZoomInIcon-dhRm7zT6.cjs.map +1 -0
  194. package/dist/cards-CKCr-GuJ.js +934 -0
  195. package/dist/cards-CKCr-GuJ.js.map +1 -0
  196. package/dist/cards-yPK4lBAA.cjs +2 -0
  197. package/dist/cards-yPK4lBAA.cjs.map +1 -0
  198. package/dist/cards.cjs +1 -1
  199. package/dist/cards.js +3 -3
  200. package/dist/{cn-B_veu23e.js → cn-DZLxql0l.js} +1 -1
  201. package/dist/{cn-B_veu23e.js.map → cn-DZLxql0l.js.map} +1 -1
  202. package/dist/{cn-CpRt8Xjj.cjs → cn-SOcVdnX6.cjs} +1 -1
  203. package/dist/{cn-CpRt8Xjj.cjs.map → cn-SOcVdnX6.cjs.map} +1 -1
  204. package/dist/components/cards/MCardBusiness/MCardBusiness.d.ts +2 -0
  205. package/dist/components/cards/MCardBusiness/MCardBusiness.types.d.ts +37 -0
  206. package/dist/components/cards/MCardBusiness/index.d.ts +4 -0
  207. package/dist/components/cards/MCardFinance/MCardFinance.d.ts +2 -0
  208. package/dist/components/cards/MCardFinance/MCardFinance.types.d.ts +16 -0
  209. package/dist/components/cards/MCardFinance/index.d.ts +4 -0
  210. package/dist/components/cards/index.d.ts +8 -0
  211. package/dist/components/data/MCalendarBoard/MCalendarBoard.d.ts +7 -0
  212. package/dist/components/data/MCalendarBoard/MCalendarBoard.types.d.ts +117 -0
  213. package/dist/components/data/MCalendarBoard/index.d.ts +4 -0
  214. package/dist/components/data/MChart/MAreaChart.d.ts +2 -0
  215. package/dist/components/data/MChart/MBarChart.d.ts +2 -0
  216. package/dist/components/data/MChart/MChart.d.ts +2 -0
  217. package/dist/components/data/MChart/MChart.types.d.ts +95 -0
  218. package/dist/components/data/MChart/MLineChart.d.ts +2 -0
  219. package/dist/components/data/MChart/MPieChart.d.ts +2 -0
  220. package/dist/components/data/MChart/charts/MAreaChart.d.ts +27 -0
  221. package/dist/components/data/MChart/charts/MBarChart.d.ts +26 -0
  222. package/dist/components/data/MChart/charts/MLineChart.d.ts +26 -0
  223. package/dist/components/data/MChart/charts/MPieChart.d.ts +19 -0
  224. package/dist/components/data/MChart/index.d.ts +5 -0
  225. package/dist/components/data/MChart/parts/ChartAxis.d.ts +13 -0
  226. package/dist/components/data/MChart/parts/ChartDefs.d.ts +1 -0
  227. package/dist/components/data/MChart/parts/ChartGrid.d.ts +10 -0
  228. package/dist/components/data/MChart/parts/ChartLegend.d.ts +9 -0
  229. package/dist/components/data/MChart/parts/ChartTooltip.d.ts +7 -0
  230. package/dist/components/data/MChart/utils/formats.d.ts +3 -0
  231. package/dist/components/data/MChart/utils/paths.d.ts +10 -0
  232. package/dist/components/data/MChart/utils/scales.d.ts +7 -0
  233. package/dist/components/data/MChat/MChat.d.ts +2 -0
  234. package/dist/components/data/MChat/MChat.types.d.ts +77 -0
  235. package/dist/components/data/MChat/MChatBody.d.ts +2 -0
  236. package/dist/components/data/MChat/MChatContext.d.ts +6 -0
  237. package/dist/components/data/MChat/MChatConversationItem.d.ts +2 -0
  238. package/dist/components/data/MChat/MChatConversationList.d.ts +2 -0
  239. package/dist/components/data/MChat/MChatHeader.d.ts +2 -0
  240. package/dist/components/data/MChat/MChatInput.d.ts +2 -0
  241. package/dist/components/data/MChat/MChatMessage.d.ts +2 -0
  242. package/dist/components/data/MChat/MChatTypingIndicator.d.ts +2 -0
  243. package/dist/components/data/MChat/emojis.d.ts +2 -0
  244. package/dist/components/data/MChat/index.d.ts +9 -0
  245. package/dist/components/data/MFileManager/MFileManager.d.ts +2 -0
  246. package/dist/components/data/MFileManager/MFileManager.types.d.ts +70 -0
  247. package/dist/components/data/MFileManager/index.d.ts +4 -0
  248. package/dist/components/data/MSparkline/MSparkline.d.ts +2 -0
  249. package/dist/components/data/MSparkline/MSparkline.types.d.ts +15 -0
  250. package/dist/components/data/MSparkline/index.d.ts +2 -0
  251. package/dist/components/data/index.d.ts +20 -0
  252. package/dist/components/display/MQrCode/MQrCode.d.ts +2 -0
  253. package/dist/components/display/MQrCode/MQrCode.types.d.ts +11 -0
  254. package/dist/components/display/MQrCode/index.d.ts +4 -0
  255. package/dist/components/display/MStepper/MStepper.d.ts +3 -0
  256. package/dist/components/display/MStepper/MStepper.types.d.ts +20 -0
  257. package/dist/components/display/MStepper/index.d.ts +2 -0
  258. package/dist/components/display/MTimeline/MTimeline.d.ts +3 -0
  259. package/dist/components/display/MTimeline/MTimeline.types.d.ts +16 -0
  260. package/dist/components/display/MTimeline/index.d.ts +2 -0
  261. package/dist/components/display/index.d.ts +12 -0
  262. package/dist/components/feedback/MCookie/MCookieBanner/MCookieBanner.d.ts +3 -0
  263. package/dist/components/feedback/MCookie/MCookieBanner/MCookieBanner.types.d.ts +27 -0
  264. package/dist/components/feedback/MCookie/MCookieBanner/index.d.ts +2 -0
  265. package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.d.ts +6 -0
  266. package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.types.d.ts +90 -0
  267. package/dist/components/feedback/MCookie/MCookieBootstrap/index.d.ts +3 -0
  268. package/dist/components/feedback/MCookie/MCookieConsent/MCookieConsent.d.ts +2 -0
  269. package/dist/components/feedback/MCookie/MCookieConsent/MCookieConsent.types.d.ts +11 -0
  270. package/dist/components/feedback/MCookie/MCookieConsent/index.d.ts +2 -0
  271. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.defaults.d.ts +9 -0
  272. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.inventory.d.ts +6 -0
  273. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.storage.d.ts +11 -0
  274. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.types.d.ts +95 -0
  275. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsentContext.d.ts +4 -0
  276. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsentProvider.d.ts +2 -0
  277. package/dist/components/feedback/MCookie/MCookieConsentProvider/index.d.ts +3 -0
  278. package/dist/components/feedback/MCookie/MCookieDeclaration/MCookieDeclaration.d.ts +2 -0
  279. package/dist/components/feedback/MCookie/MCookieDeclaration/MCookieDeclaration.types.d.ts +18 -0
  280. package/dist/components/feedback/MCookie/MCookieDeclaration/index.d.ts +2 -0
  281. package/dist/components/feedback/MCookie/MCookiePreferences/MCookiePreferences.d.ts +2 -0
  282. package/dist/components/feedback/MCookie/MCookiePreferences/MCookiePreferences.types.d.ts +25 -0
  283. package/dist/components/feedback/MCookie/MCookiePreferences/index.d.ts +2 -0
  284. package/dist/components/feedback/MCookie/MCookieTrigger/MCookieTrigger.d.ts +2 -0
  285. package/dist/components/feedback/MCookie/MCookieTrigger/MCookieTrigger.types.d.ts +7 -0
  286. package/dist/components/feedback/MCookie/MCookieTrigger/index.d.ts +2 -0
  287. package/dist/components/feedback/MCookie/index.d.ts +16 -0
  288. package/dist/components/feedback/index.d.ts +1 -0
  289. package/dist/components/layout/MTopbar/MTopbar.d.ts +2 -0
  290. package/dist/components/layout/MTopbar/MTopbar.types.d.ts +36 -0
  291. package/dist/components/layout/MTopbar/index.d.ts +2 -0
  292. package/dist/components/layout/index.d.ts +4 -0
  293. package/dist/components/media/MAvatarStack/MAvatarStack.d.ts +2 -0
  294. package/dist/components/media/MAvatarStack/MAvatarStack.types.d.ts +14 -0
  295. package/dist/components/media/MAvatarStack/index.d.ts +2 -0
  296. package/dist/components/media/MMasonry/MMasonry.d.ts +2 -0
  297. package/dist/components/media/MMasonry/MMasonry.types.d.ts +7 -0
  298. package/dist/components/media/MMasonry/index.d.ts +2 -0
  299. package/dist/components/media/MMasonryItem/MMasonryItem.d.ts +2 -0
  300. package/dist/components/media/MMasonryItem/MMasonryItem.types.d.ts +14 -0
  301. package/dist/components/media/MMasonryItem/index.d.ts +2 -0
  302. package/dist/components/media/MShowcaseCarousel/MShowcaseCarousel.d.ts +2 -0
  303. package/dist/components/media/MShowcaseCarousel/MShowcaseCarousel.types.d.ts +19 -0
  304. package/dist/components/media/MShowcaseCarousel/index.d.ts +2 -0
  305. package/dist/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.d.ts +2 -0
  306. package/dist/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.types.d.ts +18 -0
  307. package/dist/components/media/MShowcaseCarouselItem/index.d.ts +2 -0
  308. package/dist/components/media/index.d.ts +16 -0
  309. package/dist/controls-DEEbLT5o.cjs +2 -0
  310. package/dist/controls-DEEbLT5o.cjs.map +1 -0
  311. package/dist/{controls-1nIh1Ih1.js → controls-IsOBNxW0.js} +33 -74
  312. package/dist/controls-IsOBNxW0.js.map +1 -0
  313. package/dist/controls.cjs +1 -1
  314. package/dist/controls.js +6 -5
  315. package/dist/cookie-consent-bootstrap.cjs +2 -0
  316. package/dist/cookie-consent-bootstrap.cjs.map +1 -0
  317. package/dist/cookie-consent-bootstrap.d.ts +1 -0
  318. package/dist/cookie-consent-bootstrap.js +93 -0
  319. package/dist/cookie-consent-bootstrap.js.map +1 -0
  320. package/dist/{creditCards-BVKi47yn.cjs → creditCards-BjHGqAFx.cjs} +1 -1
  321. package/dist/{creditCards-BVKi47yn.cjs.map → creditCards-BjHGqAFx.cjs.map} +1 -1
  322. package/dist/{creditCards-Bk9rsMJf.js → creditCards-CoZpbB1e.js} +1 -1
  323. package/dist/{creditCards-Bk9rsMJf.js.map → creditCards-CoZpbB1e.js.map} +1 -1
  324. package/dist/data-BEH7TbuW.cjs +2 -0
  325. package/dist/data-BEH7TbuW.cjs.map +1 -0
  326. package/dist/data-Bp3Fd2Al.js +2529 -0
  327. package/dist/data-Bp3Fd2Al.js.map +1 -0
  328. package/dist/data.cjs +1 -1
  329. package/dist/data.js +4 -2
  330. package/dist/{dateUtils-BYfEWGkb.js → dateUtils-BOsYyWde.js} +1 -1
  331. package/dist/{dateUtils-BYfEWGkb.js.map → dateUtils-BOsYyWde.js.map} +1 -1
  332. package/dist/{dateUtils-5jacfR5Q.cjs → dateUtils-xSfrXjbY.cjs} +1 -1
  333. package/dist/{dateUtils-5jacfR5Q.cjs.map → dateUtils-xSfrXjbY.cjs.map} +1 -1
  334. package/dist/display-B0Db8pF3.js +468 -0
  335. package/dist/display-B0Db8pF3.js.map +1 -0
  336. package/dist/display-DmB5CZYB.cjs +2 -0
  337. package/dist/display-DmB5CZYB.cjs.map +1 -0
  338. package/dist/display.cjs +1 -1
  339. package/dist/display.js +4 -3
  340. package/dist/dropdowns-BkBtQP4v.js +1689 -0
  341. package/dist/dropdowns-BkBtQP4v.js.map +1 -0
  342. package/dist/dropdowns-CD2myl19.cjs +2 -0
  343. package/dist/dropdowns-CD2myl19.cjs.map +1 -0
  344. package/dist/dropdowns.cjs +1 -1
  345. package/dist/dropdowns.js +1 -1
  346. package/dist/feedback-CuPBnCOw.cjs +2 -0
  347. package/dist/feedback-CuPBnCOw.cjs.map +1 -0
  348. package/dist/feedback-QP7-6I7O.js +1013 -0
  349. package/dist/feedback-QP7-6I7O.js.map +1 -0
  350. package/dist/feedback.cjs +1 -1
  351. package/dist/feedback.js +7 -6
  352. package/dist/{form-DFx61JJJ.cjs → form-BQ6-ieVC.cjs} +2 -2
  353. package/dist/{form-DFx61JJJ.cjs.map → form-BQ6-ieVC.cjs.map} +1 -1
  354. package/dist/{form-C7T4heU2.js → form-JanaUHTQ.js} +2 -2
  355. package/dist/{form-C7T4heU2.js.map → form-JanaUHTQ.js.map} +1 -1
  356. package/dist/form.cjs +1 -1
  357. package/dist/form.js +1 -1
  358. package/dist/{formatters-bW67hwbX.cjs → formatters-BIijIfCB.cjs} +1 -1
  359. package/dist/{formatters-bW67hwbX.cjs.map → formatters-BIijIfCB.cjs.map} +1 -1
  360. package/dist/{formatters-qn3Mj74v.js → formatters-DMI5QqhS.js} +1 -1
  361. package/dist/{formatters-qn3Mj74v.js.map → formatters-DMI5QqhS.js.map} +1 -1
  362. package/dist/frameworkTexts-5_DBGFFg.js +115 -0
  363. package/dist/frameworkTexts-5_DBGFFg.js.map +1 -0
  364. package/dist/frameworkTexts-CwSSRPWS.cjs +2 -0
  365. package/dist/frameworkTexts-CwSSRPWS.cjs.map +1 -0
  366. package/dist/icons/MIconV2.d.ts +7 -0
  367. package/dist/icons/MIconV2Glyph.d.ts +11 -0
  368. package/dist/icons/MIconV2Scenes.d.ts +40 -0
  369. package/dist/icons/glyphs/MCalendarIconV2.d.ts +2 -0
  370. package/dist/icons/glyphs/MChartIconV2.d.ts +2 -0
  371. package/dist/icons/glyphs/MFlagIconsV2.d.ts +19 -0
  372. package/dist/icons/glyphs/MHomeIconV2.d.ts +2 -0
  373. package/dist/icons/glyphs/MNavigationIconsV2.d.ts +14 -0
  374. package/dist/icons/glyphs/MSearchIconV2.d.ts +2 -0
  375. package/dist/icons/glyphs/MSettingsIconV2.d.ts +2 -0
  376. package/dist/icons/glyphs/MUserIconV2.d.ts +2 -0
  377. package/dist/icons/index.d.ts +12 -0
  378. package/dist/icons.cjs +1 -1
  379. package/dist/icons.entry-LwjwnjE2.cjs +2 -0
  380. package/dist/icons.entry-LwjwnjE2.cjs.map +1 -0
  381. package/dist/{icons.entry-CbJp27gc.js → icons.entry-txsQqMvb.js} +1663 -985
  382. package/dist/icons.entry-txsQqMvb.js.map +1 -0
  383. package/dist/icons.js +22 -17
  384. package/dist/illustrations.cjs +1 -1
  385. package/dist/{illustrations.entry-CaBqXBpd.js → illustrations.entry-C0rSNpF1.js} +2 -2
  386. package/dist/{illustrations.entry-CaBqXBpd.js.map → illustrations.entry-C0rSNpF1.js.map} +1 -1
  387. package/dist/{illustrations.entry-D5StzALw.cjs → illustrations.entry-DtMxssXq.cjs} +2 -2
  388. package/dist/{illustrations.entry-D5StzALw.cjs.map → illustrations.entry-DtMxssXq.cjs.map} +1 -1
  389. package/dist/illustrations.js +1 -1
  390. package/dist/index.cjs +1 -1
  391. package/dist/index.js +74 -60
  392. package/dist/inputs-BRjbpf9P.cjs +2 -0
  393. package/dist/{inputs-6TRTzH12.cjs.map → inputs-BRjbpf9P.cjs.map} +1 -1
  394. package/dist/{inputs-Bd_5Xg49.js → inputs-DFoD2MMX.js} +193 -191
  395. package/dist/{inputs-Bd_5Xg49.js.map → inputs-DFoD2MMX.js.map} +1 -1
  396. package/dist/inputs.cjs +1 -1
  397. package/dist/inputs.js +3 -3
  398. package/dist/layout-BWhQ1VXM.cjs +2 -0
  399. package/dist/layout-BWhQ1VXM.cjs.map +1 -0
  400. package/dist/layout-yIAZ4bP6.js +819 -0
  401. package/dist/layout-yIAZ4bP6.js.map +1 -0
  402. package/dist/layout.cjs +1 -1
  403. package/dist/layout.js +5 -5
  404. package/dist/{layoutProps-CAv0VWdN.cjs → layoutProps-CZ-XhpIX.cjs} +1 -1
  405. package/dist/{layoutProps-CAv0VWdN.cjs.map → layoutProps-CZ-XhpIX.cjs.map} +1 -1
  406. package/dist/{layoutProps-D8exMwKp.js → layoutProps-DUPQsWy9.js} +1 -1
  407. package/dist/{layoutProps-D8exMwKp.js.map → layoutProps-DUPQsWy9.js.map} +1 -1
  408. package/dist/licensing-CMLexRJk.cjs +2 -0
  409. package/dist/licensing-CMLexRJk.cjs.map +1 -0
  410. package/dist/licensing-SQAMYrOI.js +105 -0
  411. package/dist/licensing-SQAMYrOI.js.map +1 -0
  412. package/dist/{locale-BJucQij_.js → locale-Crzgecoe.js} +1 -1
  413. package/dist/{locale-BJucQij_.js.map → locale-Crzgecoe.js.map} +1 -1
  414. package/dist/{locale-CjYHLr1l.cjs → locale-DpCe_7mG.cjs} +1 -1
  415. package/dist/{locale-CjYHLr1l.cjs.map → locale-DpCe_7mG.cjs.map} +1 -1
  416. package/dist/media-D0KRmTG_.cjs +2 -0
  417. package/dist/media-D0KRmTG_.cjs.map +1 -0
  418. package/dist/media-DWG2uW1h.js +406 -0
  419. package/dist/media-DWG2uW1h.js.map +1 -0
  420. package/dist/media.cjs +1 -1
  421. package/dist/media.js +4 -3
  422. package/dist/overlays-CROlfKrR.cjs +2 -0
  423. package/dist/overlays-CROlfKrR.cjs.map +1 -0
  424. package/dist/overlays-DQOnI2NS.js +186 -0
  425. package/dist/overlays-DQOnI2NS.js.map +1 -0
  426. package/dist/overlays.cjs +1 -1
  427. package/dist/overlays.js +6 -4
  428. package/dist/primitives.cjs +1 -1
  429. package/dist/primitives.js +2 -2
  430. package/dist/{relativeTime-FdokPH7W.js → relativeTime-3dGgniAK.js} +1 -1
  431. package/dist/{relativeTime-FdokPH7W.js.map → relativeTime-3dGgniAK.js.map} +1 -1
  432. package/dist/{relativeTime-oubkDkrk.cjs → relativeTime-D5qYOJVu.cjs} +1 -1
  433. package/dist/{relativeTime-oubkDkrk.cjs.map → relativeTime-D5qYOJVu.cjs.map} +1 -1
  434. package/dist/style-runtime.cjs +1 -1
  435. package/dist/style-runtime.js +1 -1
  436. package/dist/styles.css +1 -1
  437. package/dist/typography-CCkJaTzp.js +40 -0
  438. package/dist/typography-CCkJaTzp.js.map +1 -0
  439. package/dist/typography-CtITQOAU.cjs +2 -0
  440. package/dist/typography-CtITQOAU.cjs.map +1 -0
  441. package/dist/typography.cjs +1 -1
  442. package/dist/typography.js +5 -4
  443. package/dist/{useGhostText-BrRYBrV_.cjs → useGhostText-CL1kSB_V.cjs} +1 -1
  444. package/dist/{useGhostText-BrRYBrV_.cjs.map → useGhostText-CL1kSB_V.cjs.map} +1 -1
  445. package/dist/{useGhostText-BpSSyl8G.js → useGhostText-Zq3iktss.js} +1 -1
  446. package/dist/{useGhostText-BpSSyl8G.js.map → useGhostText-Zq3iktss.js.map} +1 -1
  447. package/dist/{useInteractionEffect-BaJeiUns.cjs → useInteractionEffect-BLehDk91.cjs} +1 -1
  448. package/dist/{useInteractionEffect-BaJeiUns.cjs.map → useInteractionEffect-BLehDk91.cjs.map} +1 -1
  449. package/dist/{useInteractionEffect-B5_UpgTt.js → useInteractionEffect-Dfqq8lGO.js} +1 -1
  450. package/dist/{useInteractionEffect-B5_UpgTt.js.map → useInteractionEffect-Dfqq8lGO.js.map} +1 -1
  451. package/dist/{useKeyboardNav-DJtFz7Fx.cjs → useKeyboardNav-DBeCcTmg.cjs} +1 -1
  452. package/dist/{useKeyboardNav-DJtFz7Fx.cjs.map → useKeyboardNav-DBeCcTmg.cjs.map} +1 -1
  453. package/dist/{useKeyboardNav-CmUKtJag.js → useKeyboardNav-DXvrPrx9.js} +1 -1
  454. package/dist/{useKeyboardNav-CmUKtJag.js.map → useKeyboardNav-DXvrPrx9.js.map} +1 -1
  455. package/dist/{useReveal-D1YuWN9z.cjs → useReveal-CdIoh0Rk.cjs} +1 -1
  456. package/dist/{useReveal-D1YuWN9z.cjs.map → useReveal-CdIoh0Rk.cjs.map} +1 -1
  457. package/dist/{useReveal-BB9OaMDU.js → useReveal-DzskFHKb.js} +1 -1
  458. package/dist/{useReveal-BB9OaMDU.js.map → useReveal-DzskFHKb.js.map} +1 -1
  459. package/dist/utils/licensing.d.ts +78 -1
  460. package/dist/utils.cjs +1 -1
  461. package/dist/utils.js +11 -11
  462. package/dist/{validators-CA-TznrL.cjs → validators-CyDTl6cC.cjs} +1 -1
  463. package/dist/{validators-CA-TznrL.cjs.map → validators-CyDTl6cC.cjs.map} +1 -1
  464. package/dist/{validators-CAahqOcq.js → validators-ljBWrIca.js} +1 -1
  465. package/dist/{validators-CAahqOcq.js.map → validators-ljBWrIca.js.map} +1 -1
  466. package/package.json +29 -6
  467. package/dist/MBoltIcon-B1P4i_X4.js.map +0 -1
  468. package/dist/MBoltIcon-DB6JHWMo.cjs +0 -2
  469. package/dist/MBoltIcon-DB6JHWMo.cjs.map +0 -1
  470. package/dist/MCard-BBBA2UVf.cjs +0 -2
  471. package/dist/MCard-BBBA2UVf.cjs.map +0 -1
  472. package/dist/MCard-ViJ2Lf73.js +0 -65
  473. package/dist/MCard-ViJ2Lf73.js.map +0 -1
  474. package/dist/MDropdownMenu-BcRbNfoR.js +0 -186
  475. package/dist/MDropdownMenu-BcRbNfoR.js.map +0 -1
  476. package/dist/MDropdownMenu-DOxSG00i.cjs +0 -2
  477. package/dist/MDropdownMenu-DOxSG00i.cjs.map +0 -1
  478. package/dist/MFolderOpenIcon-35Lmw91g.cjs +0 -2
  479. package/dist/MFolderOpenIcon-35Lmw91g.cjs.map +0 -1
  480. package/dist/MFolderOpenIcon-DFahkqXu.js +0 -31
  481. package/dist/MFolderOpenIcon-DFahkqXu.js.map +0 -1
  482. package/dist/MPagination-C8txsdB6.cjs +0 -2
  483. package/dist/MPagination-C8txsdB6.cjs.map +0 -1
  484. package/dist/MPagination-RupoyjxR.js +0 -113
  485. package/dist/MPagination-RupoyjxR.js.map +0 -1
  486. package/dist/MRating-0-_XBF-T.js +0 -38
  487. package/dist/MRating-0-_XBF-T.js.map +0 -1
  488. package/dist/MRating-B-fQMZ8c.cjs +0 -2
  489. package/dist/MRating-B-fQMZ8c.cjs.map +0 -1
  490. package/dist/MSkeleton-7YJwDcvl.cjs +0 -2
  491. package/dist/MSkeleton-7YJwDcvl.cjs.map +0 -1
  492. package/dist/MSkeleton-QQ57uNaL.js +0 -39
  493. package/dist/MSkeleton-QQ57uNaL.js.map +0 -1
  494. package/dist/MSortIcon-3mD9vpMX.cjs +0 -2
  495. package/dist/MSortIcon-3mD9vpMX.cjs.map +0 -1
  496. package/dist/MSortIcon-DGHyltKa.js +0 -84
  497. package/dist/MSortIcon-DGHyltKa.js.map +0 -1
  498. package/dist/MText-BxAcAs-j.cjs +0 -2
  499. package/dist/MText-BxAcAs-j.cjs.map +0 -1
  500. package/dist/MText-CzceD0k5.js +0 -43
  501. package/dist/MText-CzceD0k5.js.map +0 -1
  502. package/dist/MZoomInIcon-BcpTfzRD.cjs +0 -2
  503. package/dist/MZoomInIcon-BcpTfzRD.cjs.map +0 -1
  504. package/dist/MZoomInIcon-CK2aJhDg.js.map +0 -1
  505. package/dist/cards-Bw7aZCIy.cjs +0 -2
  506. package/dist/cards-Bw7aZCIy.cjs.map +0 -1
  507. package/dist/cards-CYzgOCG5.js +0 -613
  508. package/dist/cards-CYzgOCG5.js.map +0 -1
  509. package/dist/controls-1nIh1Ih1.js.map +0 -1
  510. package/dist/controls-2pkUWkOa.cjs +0 -2
  511. package/dist/controls-2pkUWkOa.cjs.map +0 -1
  512. package/dist/data-BGEuiFne.cjs +0 -2
  513. package/dist/data-BGEuiFne.cjs.map +0 -1
  514. package/dist/data-CYb66BuD.js +0 -423
  515. package/dist/data-CYb66BuD.js.map +0 -1
  516. package/dist/display-BEw4iW6N.js +0 -416
  517. package/dist/display-BEw4iW6N.js.map +0 -1
  518. package/dist/display-BVeaSZDJ.cjs +0 -2
  519. package/dist/display-BVeaSZDJ.cjs.map +0 -1
  520. package/dist/dropdowns-CsUSxR0u.cjs +0 -2
  521. package/dist/dropdowns-CsUSxR0u.cjs.map +0 -1
  522. package/dist/dropdowns-DiEsLPoq.js +0 -1729
  523. package/dist/dropdowns-DiEsLPoq.js.map +0 -1
  524. package/dist/feedback-BOPPNYr5.js +0 -217
  525. package/dist/feedback-BOPPNYr5.js.map +0 -1
  526. package/dist/feedback-vTRXpBZw.cjs +0 -2
  527. package/dist/feedback-vTRXpBZw.cjs.map +0 -1
  528. package/dist/icons.entry-BBIBT_e2.cjs +0 -2
  529. package/dist/icons.entry-BBIBT_e2.cjs.map +0 -1
  530. package/dist/icons.entry-CbJp27gc.js.map +0 -1
  531. package/dist/inputs-6TRTzH12.cjs +0 -2
  532. package/dist/layout-DgxSN0QV.js +0 -698
  533. package/dist/layout-DgxSN0QV.js.map +0 -1
  534. package/dist/layout-DsxgXjK_.cjs +0 -2
  535. package/dist/layout-DsxgXjK_.cjs.map +0 -1
  536. package/dist/licensing-C80xLz-j.cjs +0 -2
  537. package/dist/licensing-C80xLz-j.cjs.map +0 -1
  538. package/dist/licensing-DsWLXZiM.js +0 -28
  539. package/dist/licensing-DsWLXZiM.js.map +0 -1
  540. package/dist/media-V8oypokY.js +0 -171
  541. package/dist/media-V8oypokY.js.map +0 -1
  542. package/dist/media-uvYa5r3D.cjs +0 -2
  543. package/dist/media-uvYa5r3D.cjs.map +0 -1
  544. package/dist/overlays-BjO2sRrU.cjs +0 -2
  545. package/dist/overlays-BjO2sRrU.cjs.map +0 -1
  546. package/dist/overlays-DnMM32yB.js +0 -360
  547. package/dist/overlays-DnMM32yB.js.map +0 -1
  548. package/dist/typography-Bcn3mZPw.js +0 -63
  549. package/dist/typography-Bcn3mZPw.js.map +0 -1
  550. package/dist/typography-Cy_-zrZI.cjs +0 -2
  551. package/dist/typography-Cy_-zrZI.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"inputs-6TRTzH12.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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"}
1
+ {"version":3,"file":"inputs-BRjbpf9P.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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"}