@banzamel/mineralui 2.4.2 → 2.4.3
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.
- package/README.md +1 -1
- package/dist/{MAvatar-Capz5Gbc.cjs → MAvatar-DHNB3829.cjs} +2 -2
- package/dist/{MAvatar-Capz5Gbc.cjs.map → MAvatar-DHNB3829.cjs.map} +1 -1
- package/dist/{MAvatar-DtJCj3dD.js → MAvatar-GeRL-CNO.js} +2 -2
- package/dist/{MAvatar-DtJCj3dD.js.map → MAvatar-GeRL-CNO.js.map} +1 -1
- package/dist/{MButton-C1pnL4_j.js → MButton-CEwo8lUB.js} +1 -1
- package/dist/{MButton-C1pnL4_j.js.map → MButton-CEwo8lUB.js.map} +1 -1
- package/dist/{MButton-sTKnano6.cjs → MButton-CnAr77Za.cjs} +2 -2
- package/dist/{MButton-sTKnano6.cjs.map → MButton-CnAr77Za.cjs.map} +1 -1
- package/dist/{MButtonGroup-BkNf7fzo.js → MButtonGroup-BEJxXZ8u.js} +2 -2
- package/dist/{MButtonGroup-BkNf7fzo.js.map → MButtonGroup-BEJxXZ8u.js.map} +1 -1
- package/dist/{MButtonGroup-iPv14c0V.cjs → MButtonGroup-DO1Tq3Za.cjs} +2 -2
- package/dist/{MButtonGroup-iPv14c0V.cjs.map → MButtonGroup-DO1Tq3Za.cjs.map} +1 -1
- package/dist/{MCard-azpp4YVD.js → MCard-BqSkGAgf.js} +3 -3
- package/dist/{MCard-azpp4YVD.js.map → MCard-BqSkGAgf.js.map} +1 -1
- package/dist/{MCard-DK-_FkpE.cjs → MCard-P8OoswWM.cjs} +2 -2
- package/dist/{MCard-DK-_FkpE.cjs.map → MCard-P8OoswWM.cjs.map} +1 -1
- package/dist/{MCheckbox-B7SpcD4H.js → MCheckbox-BxFBADcE.js} +1 -1
- package/dist/{MCheckbox-B7SpcD4H.js.map → MCheckbox-BxFBADcE.js.map} +1 -1
- package/dist/{MCheckbox-CIX7wp41.cjs → MCheckbox-DozwF2ai.cjs} +2 -2
- package/dist/{MCheckbox-CIX7wp41.cjs.map → MCheckbox-DozwF2ai.cjs.map} +1 -1
- package/dist/{MConflictIllustration-CZ3Md38Z.cjs → MConflictIllustration-2QL-BHYv.cjs} +2 -2
- package/dist/{MConflictIllustration-CZ3Md38Z.cjs.map → MConflictIllustration-2QL-BHYv.cjs.map} +1 -1
- package/dist/{MDetailList-Ce7KzUKC.cjs → MDetailList-CThQvoyf.cjs} +2 -2
- package/dist/{MDetailList-Ce7KzUKC.cjs.map → MDetailList-CThQvoyf.cjs.map} +1 -1
- package/dist/{MDetailList-fDhVyhm7.js → MDetailList-Cx9H81xT.js} +5 -5
- package/dist/{MDetailList-fDhVyhm7.js.map → MDetailList-Cx9H81xT.js.map} +1 -1
- package/dist/{MDropdownMenu-B_QWQhxy.cjs → MDropdownMenu-DnKcCyW6.cjs} +2 -2
- package/dist/{MDropdownMenu-B_QWQhxy.cjs.map → MDropdownMenu-DnKcCyW6.cjs.map} +1 -1
- package/dist/{MDropdownMenu-C4CuKMRZ.js → MDropdownMenu-DxbKN7Ui.js} +2 -2
- package/dist/{MDropdownMenu-C4CuKMRZ.js.map → MDropdownMenu-DxbKN7Ui.js.map} +1 -1
- package/dist/{MGrid-fTx6wFq_.cjs → MGrid-BkRSGN2t.cjs} +2 -2
- package/dist/{MGrid-fTx6wFq_.cjs.map → MGrid-BkRSGN2t.cjs.map} +1 -1
- package/dist/{MGrid-CYL3cbUI.js → MGrid-CIz-2i6X.js} +2 -2
- package/dist/{MGrid-CYL3cbUI.js.map → MGrid-CIz-2i6X.js.map} +1 -1
- package/dist/{MHeading-KDSpnCof.cjs → MHeading-AYQ8_GFP.cjs} +2 -2
- package/dist/{MHeading-KDSpnCof.cjs.map → MHeading-AYQ8_GFP.cjs.map} +1 -1
- package/dist/{MHeading-B7KgSP4T.js → MHeading-DcGxUMwC.js} +2 -2
- package/dist/{MHeading-B7KgSP4T.js.map → MHeading-DcGxUMwC.js.map} +1 -1
- package/dist/{MI18nProvider-DXRbB0VY.cjs → MI18nProvider-CqAwaswx.cjs} +2 -2
- package/dist/{MI18nProvider-DXRbB0VY.cjs.map → MI18nProvider-CqAwaswx.cjs.map} +1 -1
- package/dist/MInput-BYj2BdUe.cjs +2 -0
- package/dist/MInput-BYj2BdUe.cjs.map +1 -0
- package/dist/{MInput-C8ObGzQk.js → MInput-nodE-CZF.js} +37 -36
- package/dist/MInput-nodE-CZF.js.map +1 -0
- package/dist/MInputCVC-9XWryaTz.cjs +2 -0
- package/dist/MInputCVC-9XWryaTz.cjs.map +1 -0
- package/dist/MInputCVC-CrDTaUXm.js +321 -0
- package/dist/MInputCVC-CrDTaUXm.js.map +1 -0
- package/dist/{MInputSearch-BM8gLlJ1.js → MInputSearch-BMgCHjFk.js} +2 -2
- package/dist/{MInputSearch-BM8gLlJ1.js.map → MInputSearch-BMgCHjFk.js.map} +1 -1
- package/dist/{MInputSearch-BZDnbFB4.cjs → MInputSearch-BiVI1jNc.cjs} +2 -2
- package/dist/{MInputSearch-BZDnbFB4.cjs.map → MInputSearch-BiVI1jNc.cjs.map} +1 -1
- package/dist/{MKbd-DqMnZ7Iv.cjs → MKbd-BR1GX5oK.cjs} +2 -2
- package/dist/{MKbd-DqMnZ7Iv.cjs.map → MKbd-BR1GX5oK.cjs.map} +1 -1
- package/dist/{MKbd-v6-tJ9sP.js → MKbd-COb7oh_k.js} +1 -1
- package/dist/{MKbd-v6-tJ9sP.js.map → MKbd-COb7oh_k.js.map} +1 -1
- package/dist/{MLink-Bd8fLH1N.js → MLink-CAl6N6_z.js} +1 -1
- package/dist/{MLink-Bd8fLH1N.js.map → MLink-CAl6N6_z.js.map} +1 -1
- package/dist/{MLink-U24G6KJj.cjs → MLink-Dk_ReE6i.cjs} +2 -2
- package/dist/{MLink-U24G6KJj.cjs.map → MLink-Dk_ReE6i.cjs.map} +1 -1
- package/dist/{MLoader-CnvWqFtA.js → MLoader-CYp0OJU_.js} +4 -4
- package/dist/{MLoader-CnvWqFtA.js.map → MLoader-CYp0OJU_.js.map} +1 -1
- package/dist/{MLoader-CvFIvytw.cjs → MLoader-DvmFle31.cjs} +2 -2
- package/dist/{MLoader-CvFIvytw.cjs.map → MLoader-DvmFle31.cjs.map} +1 -1
- package/dist/{MPagination-BkvOEZpp.js → MPagination-E7IixIeo.js} +2 -2
- package/dist/{MPagination-BkvOEZpp.js.map → MPagination-E7IixIeo.js.map} +1 -1
- package/dist/{MPagination-DgQta29Q.cjs → MPagination-reDU9xTW.cjs} +2 -2
- package/dist/{MPagination-DgQta29Q.cjs.map → MPagination-reDU9xTW.cjs.map} +1 -1
- package/dist/{MPopover-Dd-GIBU6.js → MPopover-8gYD3Ogq.js} +37 -74
- package/dist/MPopover-8gYD3Ogq.js.map +1 -0
- package/dist/MPopover-B3npyAkL.cjs +2 -0
- package/dist/MPopover-B3npyAkL.cjs.map +1 -0
- package/dist/{MPortal-DUSIuINN.cjs → MPortal-CuBXhhl_.cjs} +2 -2
- package/dist/{MPortal-DUSIuINN.cjs.map → MPortal-CuBXhhl_.cjs.map} +1 -1
- package/dist/{MSimpleGrid-BzlIitcJ.cjs → MSimpleGrid-BchGYPMi.cjs} +2 -2
- package/dist/{MSimpleGrid-BzlIitcJ.cjs.map → MSimpleGrid-BchGYPMi.cjs.map} +1 -1
- package/dist/{MSimpleGrid-BWKurW6H.js → MSimpleGrid-Ui8cI0ho.js} +1 -1
- package/dist/{MSimpleGrid-BWKurW6H.js.map → MSimpleGrid-Ui8cI0ho.js.map} +1 -1
- package/dist/{MSkeleton-BoFpowFU.cjs → MSkeleton-DPa_G_2X.cjs} +2 -2
- package/dist/{MSkeleton-BoFpowFU.cjs.map → MSkeleton-DPa_G_2X.cjs.map} +1 -1
- package/dist/{MSkeleton-C5uD4Axo.js → MSkeleton-Dhu-loDO.js} +1 -1
- package/dist/{MSkeleton-C5uD4Axo.js.map → MSkeleton-Dhu-loDO.js.map} +1 -1
- package/dist/{MSlider-CqrusKJQ.js → MSlider-BRjhyBSc.js} +1 -1
- package/dist/{MSlider-CqrusKJQ.js.map → MSlider-BRjhyBSc.js.map} +1 -1
- package/dist/{MSlider-BTDBqF8t.cjs → MSlider-w5214a-W.cjs} +2 -2
- package/dist/{MSlider-BTDBqF8t.cjs.map → MSlider-w5214a-W.cjs.map} +1 -1
- package/dist/{MStack-CSCw6to2.js → MStack-Dt-rWvg3.js} +2 -2
- package/dist/{MStack-CSCw6to2.js.map → MStack-Dt-rWvg3.js.map} +1 -1
- package/dist/{MStack-B3Ldqsc-.cjs → MStack-nc6Y_9K3.cjs} +2 -2
- package/dist/{MStack-B3Ldqsc-.cjs.map → MStack-nc6Y_9K3.cjs.map} +1 -1
- package/dist/{MSubText-C-N15d4Z.js → MSubText-B0tXiuAp.js} +2 -2
- package/dist/{MSubText-C-N15d4Z.js.map → MSubText-B0tXiuAp.js.map} +1 -1
- package/dist/{MSubText-47PsgE8T.cjs → MSubText-C6v6Exa2.cjs} +2 -2
- package/dist/{MSubText-47PsgE8T.cjs.map → MSubText-C6v6Exa2.cjs.map} +1 -1
- package/dist/{MSurface-QYEygc_0.cjs → MSurface-BjE-mL1L.cjs} +2 -2
- package/dist/{MSurface-QYEygc_0.cjs.map → MSurface-BjE-mL1L.cjs.map} +1 -1
- package/dist/{MSurface-B-sjyczH.js → MSurface-CpDJCdb5.js} +2 -2
- package/dist/{MSurface-B-sjyczH.js.map → MSurface-CpDJCdb5.js.map} +1 -1
- package/dist/MTag-BgOxiahL.cjs +2 -0
- package/dist/MTag-BgOxiahL.cjs.map +1 -0
- package/dist/MTag-cw3cIGHX.js +41 -0
- package/dist/MTag-cw3cIGHX.js.map +1 -0
- package/dist/{MText-Dni707tS.cjs → MText-BDI4mdw8.cjs} +2 -2
- package/dist/{MText-Dni707tS.cjs.map → MText-BDI4mdw8.cjs.map} +1 -1
- package/dist/{MText-CL-LPcXi.js → MText-DhbAjtUE.js} +2 -2
- package/dist/{MText-CL-LPcXi.js.map → MText-DhbAjtUE.js.map} +1 -1
- package/dist/MTooltip-BAgHlv5I.cjs +2 -0
- package/dist/MTooltip-BAgHlv5I.cjs.map +1 -0
- package/dist/MTooltip-CJxvlkOX.js +92 -0
- package/dist/MTooltip-CJxvlkOX.js.map +1 -0
- package/dist/{MTreeView-B1J7uqd1.js → MTreeView-DsBnYQMT.js} +2 -2
- package/dist/{MTreeView-B1J7uqd1.js.map → MTreeView-DsBnYQMT.js.map} +1 -1
- package/dist/{MTreeView-VYp0eErQ.cjs → MTreeView-LiJ5o-zy.cjs} +2 -2
- package/dist/{MTreeView-VYp0eErQ.cjs.map → MTreeView-LiJ5o-zy.cjs.map} +1 -1
- package/dist/{arduino-BdpdaLwK.cjs → arduino-C1gw-z1N.cjs} +1 -1
- package/dist/{arduino-BdpdaLwK.cjs.map → arduino-C1gw-z1N.cjs.map} +1 -1
- package/dist/{arduino-DDDlP9Yt.js → arduino-CcVvzDWF.js} +1 -1
- package/dist/{arduino-DDDlP9Yt.js.map → arduino-CcVvzDWF.js.map} +1 -1
- package/dist/{bash-D8WbAmuA.js → bash-DkMiO80l.js} +1 -1
- package/dist/{bash-D8WbAmuA.js.map → bash-DkMiO80l.js.map} +1 -1
- package/dist/{bash-eOUFh3S1.cjs → bash-wzZkpJC-.cjs} +1 -1
- package/dist/{bash-eOUFh3S1.cjs.map → bash-wzZkpJC-.cjs.map} +1 -1
- package/dist/{c-Bur7Mn-u.cjs → c-BSPjDa0P.cjs} +1 -1
- package/dist/{c-Bur7Mn-u.cjs.map → c-BSPjDa0P.cjs.map} +1 -1
- package/dist/{c-CTKNfUJI.js → c-DtlFV5Pa.js} +1 -1
- package/dist/{c-CTKNfUJI.js.map → c-DtlFV5Pa.js.map} +1 -1
- package/dist/{calendar-bzeZRst9.js → calendar-Bq6NMNnS.js} +6 -6
- package/dist/{calendar-bzeZRst9.js.map → calendar-Bq6NMNnS.js.map} +1 -1
- package/dist/{calendar-P7MwKfWS.cjs → calendar-C57BH8Nd.cjs} +2 -2
- package/dist/{calendar-P7MwKfWS.cjs.map → calendar-C57BH8Nd.cjs.map} +1 -1
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.js +1 -1
- package/dist/{calendarDates-CYkJqcnp.js → calendarDates-M_Dawj0j.js} +1 -1
- package/dist/{calendarDates-CYkJqcnp.js.map → calendarDates-M_Dawj0j.js.map} +1 -1
- package/dist/{calendarDates-AnlGcvZM.cjs → calendarDates-qm047RW2.cjs} +1 -1
- package/dist/{calendarDates-AnlGcvZM.cjs.map → calendarDates-qm047RW2.cjs.map} +1 -1
- package/dist/{cards-CFDJsdxR.js → cards-D4xJVd4q.js} +278 -277
- package/dist/cards-D4xJVd4q.js.map +1 -0
- package/dist/cards-Du6dbZSQ.cjs +2 -0
- package/dist/cards-Du6dbZSQ.cjs.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/components/primitives/MPopover/popoverStack.d.ts +2 -0
- package/dist/{controls-BKAhqjNM.js → controls-BKoc_yel.js} +113 -112
- package/dist/controls-BKoc_yel.js.map +1 -0
- package/dist/controls-Ck-PMt__.cjs +2 -0
- package/dist/controls-Ck-PMt__.cjs.map +1 -0
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +5 -5
- package/dist/{core-D5-SQcs8.js → core-B8VC-Umz.js} +1 -1
- package/dist/{core-D5-SQcs8.js.map → core-B8VC-Umz.js.map} +1 -1
- package/dist/{core-D66c1_Wo.cjs → core-w629c4ND.cjs} +1 -1
- package/dist/{core-D66c1_Wo.cjs.map → core-w629c4ND.cjs.map} +1 -1
- package/dist/{cpp-DAzz2TpY.js → cpp-BraS2arf.js} +1 -1
- package/dist/{cpp-DAzz2TpY.js.map → cpp-BraS2arf.js.map} +1 -1
- package/dist/{cpp-BMULAf-B.cjs → cpp-LIcuHkFj.cjs} +1 -1
- package/dist/{cpp-BMULAf-B.cjs.map → cpp-LIcuHkFj.cjs.map} +1 -1
- package/dist/{css-9M03GzKO.cjs → css-D6fGBtGV.cjs} +1 -1
- package/dist/{css-9M03GzKO.cjs.map → css-D6fGBtGV.cjs.map} +1 -1
- package/dist/{css-EGOXTWIl.js → css-Dy8pFAWa.js} +1 -1
- package/dist/{css-EGOXTWIl.js.map → css-Dy8pFAWa.js.map} +1 -1
- package/dist/{data-CgLutFxU.js → data-CdQximqm.js} +38 -38
- package/dist/{data-CgLutFxU.js.map → data-CdQximqm.js.map} +1 -1
- package/dist/{data-DFrkJTlF.cjs → data-PS4ygCyj.cjs} +2 -2
- package/dist/{data-DFrkJTlF.cjs.map → data-PS4ygCyj.cjs.map} +1 -1
- package/dist/data.cjs +1 -1
- package/dist/data.js +2 -2
- package/dist/{display-BnkHKW1n.js → display-YC1fVpXA.js} +19 -19
- package/dist/{display-BnkHKW1n.js.map → display-YC1fVpXA.js.map} +1 -1
- package/dist/{display--E7rI0tk.cjs → display-slIo1bQI.cjs} +2 -2
- package/dist/{display--E7rI0tk.cjs.map → display-slIo1bQI.cjs.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/dropdowns-DFbUoZ8Q.cjs +2 -0
- package/dist/dropdowns-DFbUoZ8Q.cjs.map +1 -0
- package/dist/dropdowns-nW3MY5XG.js +1715 -0
- package/dist/dropdowns-nW3MY5XG.js.map +1 -0
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/feedback-6MNb2Xyk.cjs +2 -0
- package/dist/feedback-6MNb2Xyk.cjs.map +1 -0
- package/dist/feedback-CPwJaQHY.js +259 -0
- package/dist/feedback-CPwJaQHY.js.map +1 -0
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +5 -5
- package/dist/form-CMsZo6Dm.cjs +2 -0
- package/dist/form-CMsZo6Dm.cjs.map +1 -0
- package/dist/{form-CAFcvmUS.js → form-WU6DcQGD.js} +52 -55
- package/dist/form-WU6DcQGD.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/frameworkTexts-BSXUtXOp.cjs +2 -0
- package/dist/{frameworkTexts-iDXhcW6k.cjs.map → frameworkTexts-BSXUtXOp.cjs.map} +1 -1
- package/dist/frameworkTexts-DP5RUl19.js +131 -0
- package/dist/{frameworkTexts-DH0Xp-Vx.js.map → frameworkTexts-DP5RUl19.js.map} +1 -1
- package/dist/i18n/frameworkTexts.d.ts +61 -0
- package/dist/i18n.cjs +1 -1
- package/dist/{icons-D_NB67he.cjs → icons-D3n9-919.cjs} +2 -2
- package/dist/{icons-D_NB67he.cjs.map → icons-D3n9-919.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/illustrations.cjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +40 -40
- package/dist/{inputs-B1LCddA4.js → inputs-B7rGMLMr.js} +399 -398
- package/dist/inputs-B7rGMLMr.js.map +1 -0
- package/dist/inputs-BiN62hgH.cjs +2 -0
- package/dist/inputs-BiN62hgH.cjs.map +1 -0
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/{javascript-CHSg4NGc.js → javascript-CqKLBRqa.js} +1 -1
- package/dist/{javascript-CHSg4NGc.js.map → javascript-CqKLBRqa.js.map} +1 -1
- package/dist/{javascript-CastOQF5.cjs → javascript-Oy5hkezl.cjs} +1 -1
- package/dist/{javascript-CastOQF5.cjs.map → javascript-Oy5hkezl.cjs.map} +1 -1
- package/dist/{json-DCkJ-m-p.cjs → json-BP8eqPWc.cjs} +1 -1
- package/dist/{json-DCkJ-m-p.cjs.map → json-BP8eqPWc.cjs.map} +1 -1
- package/dist/{json-Bejy9Rlg.js → json-DJkyYaPe.js} +1 -1
- package/dist/{json-Bejy9Rlg.js.map → json-DJkyYaPe.js.map} +1 -1
- package/dist/layout-BMggJ_qO.cjs +2 -0
- package/dist/layout-BMggJ_qO.cjs.map +1 -0
- package/dist/{layout-DsE4zfpg.js → layout-DBYHyCTr.js} +269 -268
- package/dist/layout-DBYHyCTr.js.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +6 -6
- package/dist/{layoutProps-B8y2XwHy.cjs → layoutProps-Ck4VtGm9.cjs} +1 -1
- package/dist/{layoutProps-B8y2XwHy.cjs.map → layoutProps-Ck4VtGm9.cjs.map} +1 -1
- package/dist/{layoutProps-CE5-ghKw.js → layoutProps-Cl6d1KmH.js} +1 -1
- package/dist/{layoutProps-CE5-ghKw.js.map → layoutProps-Cl6d1KmH.js.map} +1 -1
- package/dist/{licensing-DGIdtfNg.cjs → licensing-Be3g-PJt.cjs} +2 -2
- package/dist/{licensing-DGIdtfNg.cjs.map → licensing-Be3g-PJt.cjs.map} +1 -1
- package/dist/{locale-DRRl_s5-.cjs → locale-C08q7FjE.cjs} +2 -2
- package/dist/{locale-DRRl_s5-.cjs.map → locale-C08q7FjE.cjs.map} +1 -1
- package/dist/{locale-CS1-IY_I.js → locale-CjJpk9GN.js} +1 -1
- package/dist/{locale-CS1-IY_I.js.map → locale-CjJpk9GN.js.map} +1 -1
- package/dist/media-BPzMgzqE.js +405 -0
- package/dist/media-BPzMgzqE.js.map +1 -0
- package/dist/media-D63hxCAJ.cjs +2 -0
- package/dist/media-D63hxCAJ.cjs.map +1 -0
- package/dist/media.cjs +1 -1
- package/dist/media.js +2 -2
- package/dist/overlays-CCeYD6hT.js +555 -0
- package/dist/overlays-CCeYD6hT.js.map +1 -0
- package/dist/overlays-CsRN5OG8.cjs +2 -0
- package/dist/overlays-CsRN5OG8.cjs.map +1 -0
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/{php-BdVXegqn.cjs → php-Cwjc-ZYq.cjs} +1 -1
- package/dist/{php-BdVXegqn.cjs.map → php-Cwjc-ZYq.cjs.map} +1 -1
- package/dist/{php-Cb_S1hXT.js → php-Db8PWzaX.js} +1 -1
- package/dist/{php-Cb_S1hXT.js.map → php-Db8PWzaX.js.map} +1 -1
- package/dist/popoverStack--0r2oJCD.js +44 -0
- package/dist/popoverStack--0r2oJCD.js.map +1 -0
- package/dist/popoverStack-BmMk-VZJ.cjs +2 -0
- package/dist/popoverStack-BmMk-VZJ.cjs.map +1 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +1 -1
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/{theme-DgaM4CjM.cjs → theme-CJuqObWL.cjs} +2 -2
- package/dist/{theme-DgaM4CjM.cjs.map → theme-CJuqObWL.cjs.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{typescript-CcGBfzlS.cjs → typescript-QKlfKtex.cjs} +1 -1
- package/dist/{typescript-CcGBfzlS.cjs.map → typescript-QKlfKtex.cjs.map} +1 -1
- package/dist/{typescript-0VHxrxf2.js → typescript-chdf_txx.js} +1 -1
- package/dist/{typescript-0VHxrxf2.js.map → typescript-chdf_txx.js.map} +1 -1
- package/dist/{typography-C4_O8len.cjs → typography-4v01oNWx.cjs} +2 -2
- package/dist/{typography-C4_O8len.cjs.map → typography-4v01oNWx.cjs.map} +1 -1
- package/dist/{typography-CAW17MDj.js → typography-C806GYT4.js} +2 -2
- package/dist/{typography-CAW17MDj.js.map → typography-C806GYT4.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +6 -6
- package/dist/{useGhostText-Dlemg1vw.cjs → useGhostText-mibV4s1-.cjs} +2 -2
- package/dist/{useGhostText-Dlemg1vw.cjs.map → useGhostText-mibV4s1-.cjs.map} +1 -1
- package/dist/{useInteractionEffect-CFwDX5UF.cjs → useInteractionEffect-CtXlbjhC.cjs} +2 -2
- package/dist/{useInteractionEffect-CFwDX5UF.cjs.map → useInteractionEffect-CtXlbjhC.cjs.map} +1 -1
- package/dist/{useKeyboardNav-Bm-dxVq-.cjs → useKeyboardNav-CCUoRMgm.cjs} +2 -2
- package/dist/{useKeyboardNav-Bm-dxVq-.cjs.map → useKeyboardNav-CCUoRMgm.cjs.map} +1 -1
- package/dist/useModalLayer-Bf4TcEz-.js +58 -0
- package/dist/useModalLayer-Bf4TcEz-.js.map +1 -0
- package/dist/useModalLayer-DxYhhgRO.cjs +2 -0
- package/dist/useModalLayer-DxYhhgRO.cjs.map +1 -0
- package/dist/utils/useModalLayer.d.ts +10 -0
- package/dist/utils.cjs +1 -1
- package/dist/{xml-Dbm3mobK.cjs → xml-DEtyywwU.cjs} +1 -1
- package/dist/{xml-Dbm3mobK.cjs.map → xml-DEtyywwU.cjs.map} +1 -1
- package/dist/{xml-8GjNy8SM.js → xml-DnydRpfh.js} +1 -1
- package/dist/{xml-8GjNy8SM.js.map → xml-DnydRpfh.js.map} +1 -1
- package/package.json +1 -1
- package/dist/MInput-C8ObGzQk.js.map +0 -1
- package/dist/MInput-CGl2Q-rM.cjs +0 -2
- package/dist/MInput-CGl2Q-rM.cjs.map +0 -1
- package/dist/MInputCVC-Blv5PeyS.js +0 -320
- package/dist/MInputCVC-Blv5PeyS.js.map +0 -1
- package/dist/MInputCVC-lAFKTV6y.cjs +0 -2
- package/dist/MInputCVC-lAFKTV6y.cjs.map +0 -1
- package/dist/MPopover-C-e1CoV0.cjs +0 -2
- package/dist/MPopover-C-e1CoV0.cjs.map +0 -1
- package/dist/MPopover-Dd-GIBU6.js.map +0 -1
- package/dist/MTag-BjV-dXkk.cjs +0 -2
- package/dist/MTag-BjV-dXkk.cjs.map +0 -1
- package/dist/MTag-D9q6faIk.js +0 -39
- package/dist/MTag-D9q6faIk.js.map +0 -1
- package/dist/MTooltip-ChvuN4Ow.cjs +0 -2
- package/dist/MTooltip-ChvuN4Ow.cjs.map +0 -1
- package/dist/MTooltip-H3we0a7w.js +0 -57
- package/dist/MTooltip-H3we0a7w.js.map +0 -1
- package/dist/cards-CFDJsdxR.js.map +0 -1
- package/dist/cards-DeA7I2KC.cjs +0 -2
- package/dist/cards-DeA7I2KC.cjs.map +0 -1
- package/dist/controls-BKAhqjNM.js.map +0 -1
- package/dist/controls-KK-TyUTT.cjs +0 -2
- package/dist/controls-KK-TyUTT.cjs.map +0 -1
- package/dist/dropdowns-DGYg9zIh.cjs +0 -2
- package/dist/dropdowns-DGYg9zIh.cjs.map +0 -1
- package/dist/dropdowns-Dq-xAplH.js +0 -1698
- package/dist/dropdowns-Dq-xAplH.js.map +0 -1
- package/dist/feedback-CA77ShtB.cjs +0 -2
- package/dist/feedback-CA77ShtB.cjs.map +0 -1
- package/dist/feedback-CCwbdNZu.js +0 -255
- package/dist/feedback-CCwbdNZu.js.map +0 -1
- package/dist/form-CAFcvmUS.js.map +0 -1
- package/dist/form-DpfzLUOn.cjs +0 -2
- package/dist/form-DpfzLUOn.cjs.map +0 -1
- package/dist/frameworkTexts-DH0Xp-Vx.js +0 -78
- package/dist/frameworkTexts-iDXhcW6k.cjs +0 -2
- package/dist/inputs-B1LCddA4.js.map +0 -1
- package/dist/inputs-Clenc4Rm.cjs +0 -2
- package/dist/inputs-Clenc4Rm.cjs.map +0 -1
- package/dist/layout-CNoZdeXw.cjs +0 -2
- package/dist/layout-CNoZdeXw.cjs.map +0 -1
- package/dist/layout-DsE4zfpg.js.map +0 -1
- package/dist/media-DRTBXDnn.cjs +0 -2
- package/dist/media-DRTBXDnn.cjs.map +0 -1
- package/dist/media-vOQOIYFD.js +0 -402
- package/dist/media-vOQOIYFD.js.map +0 -1
- package/dist/overlays-BKk_ZXue.js +0 -568
- package/dist/overlays-BKk_ZXue.js.map +0 -1
- package/dist/overlays-Qbp4d596.cjs +0 -2
- package/dist/overlays-Qbp4d596.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs-B7rGMLMr.js","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/MInputUrl/MInputUrl.tsx","../src/components/inputs/MInputPhone/MInputPhone.tsx","../src/components/inputs/MInputName/MInputName.tsx","../src/components/inputs/MInputGroup/MInputGroup.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/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'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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={texts.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={texts.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 {MInputUrlProps} from './MInputUrl.types'\nimport {MInput} from '../MInput'\nimport {validateUrl} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon, MLinkIcon} from '../../../icons'\n\nconst DEFAULT_PROTOCOLS = ['http', 'https']\n\n// Extend the base input with URL validation, optional protocol whitelisting\n// and an optional autoformatter that prepends the first allowed protocol on\n// blur (so users can type `example.com` and walk away with `https://example.com`).\nexport const MInputUrl = forwardRef<HTMLInputElement, MInputUrlProps>(function MInputUrl(\n {\n protocols = DEFAULT_PROTOCOLS,\n requireProtocol = true,\n formatOnBlur = false,\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 = 'https://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 const runValidation = useCallback(\n (val: string) => {\n const result = validateUrl(val, {protocols, requireProtocol})\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [protocols, requireProtocol, onValidationChange]\n )\n\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 // On blur: optionally prepend the first allowed protocol when the value\n // has no scheme yet, then run validation against the (possibly rewritten)\n // value. The rewritten value is surfaced to consumers through a\n // synthesised `onChange` so controlled inputs stay in sync.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n let next = e.target.value\n const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(next)\n if (formatOnBlur && next && !hasScheme && protocols.length > 0) {\n next = `${protocols[0]}://${next}`\n if (value === undefined) {\n setInternalValue(next)\n }\n // Re-use the same native input element so refs, names and\n // ids on the synthetic event still resolve to the real DOM.\n e.target.value = next\n onChange?.(e as unknown as React.ChangeEvent<HTMLInputElement>)\n }\n\n if (validateOnBlur && next) {\n runValidation(next)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, runValidation, formatOnBlur, protocols, value, onChange]\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=\"url\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={<MLinkIcon />}\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\nconst 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// Sort longest prefix first so '+421' is matched before '+4'.\nconst PREFIX_ENTRIES = Object.entries(COUNTRY_PREFIXES).sort(([, a], [, b]) => b.length - a.length)\n\n// Match a leading +XX prefix back to its country code so the user can type the country in.\nfunction detectCountryFromValue(value: string): {country: string; rest: string} | null {\n const trimmed = value.trim().replace(/^00/, '+')\n\n if (!trimmed.startsWith('+')) {\n return null\n }\n\n const digitsAfterPlus = '+' + stripNonDigits(trimmed)\n\n for (const [country, prefix] of PREFIX_ENTRIES) {\n if (digitsAfterPlus.startsWith(prefix)) {\n return {country, rest: digitsAfterPlus.slice(prefix.length)}\n }\n }\n\n return null\n}\n\n// Detect a partial prefix the user is in the middle of typing (e.g. \"+4\" before they finish \"+49\").\nfunction looksLikePartialPrefix(value: string): boolean {\n const trimmed = value.trim()\n if (!trimmed.startsWith('+') && !trimmed.startsWith('00')) return false\n const normalized = trimmed.startsWith('00') ? '+' + trimmed.slice(2) : trimmed\n const digits = stripNonDigits(normalized)\n // Longest prefix in COUNTRY_PREFIXES is 3 digits (\"+421\"), so accept up to 3 digits as \"still typing\".\n return digits.length <= 3\n}\n\n// Normalize a partial prefix to canonical \"+digits\" form, so 00420 → +420 while typing.\nfunction normalizePartialPrefix(value: string): string {\n const trimmed = value.trim()\n const body = trimmed.startsWith('00') ? trimmed.slice(2) : trimmed.slice(1)\n return '+' + stripNonDigits(body).slice(0, 3)\n}\n\n// Extend the base input with country-aware phone formatting and validation.\nexport const MInputPhone = forwardRef<HTMLInputElement, MInputPhoneProps>(function MInputPhone(\n {\n countryCode,\n defaultCountryCode = 'PL',\n showCountryCode = true,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n onCountryChange,\n onClear,\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 [internalCountry, setInternalCountry] = useState((countryCode ?? defaultCountryCode).toUpperCase())\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentCountry = (countryCode ?? internalCountry).toUpperCase()\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 raw = e.target.value\n\n // Empty input — short-circuit so clear/backspace doesn't loop through the formatter.\n if (raw === '') {\n if (value === undefined) setInternalValue('')\n onValueChange?.('', '')\n onChange?.(e)\n return\n }\n\n const detected = detectCountryFromValue(raw)\n\n if (detected) {\n const nextCountry = detected.country\n if (countryCode === undefined && nextCountry !== currentCountry) {\n setInternalCountry(nextCountry)\n onCountryChange?.(nextCountry)\n }\n const digits = stripNonDigits(detected.rest)\n const formatted = formatOnChange ? formatPhone(digits, {countryCode: nextCountry}) : digits\n if (value === undefined) setInternalValue(formatted)\n onValueChange?.(digits, formatted)\n onChange?.(e)\n return\n }\n\n // User is mid-prefix (e.g. \"+\", \"+4\", \"+42\") — preserve so they can finish typing.\n if (looksLikePartialPrefix(raw)) {\n const preserved = normalizePartialPrefix(raw)\n if (value === undefined) setInternalValue(preserved)\n onValueChange?.(stripNonDigits(preserved), preserved)\n onChange?.(e)\n return\n }\n\n const digits = stripNonDigits(raw)\n const formatted = formatOnChange ? formatPhone(digits, {countryCode: currentCountry}) : digits\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(digits, formatted)\n onChange?.(e)\n },\n [onChange, value, formatOnChange, currentCountry, countryCode, onValueChange, onCountryChange]\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), currentCountry)\n setValidation(result)\n onValidationChange?.(result)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, currentCountry, onValidationChange]\n )\n\n // Reset validation state alongside the value when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n onValueChange?.('', '')\n onClear?.()\n }, [onClear, onValueChange, onValidationChange, value])\n\n // Hide the static prefix while the user is typing a partial +XX so the field doesn't show two prefixes at once.\n const isTypingPrefix = currentValue.startsWith('+')\n const prefix =\n showCountryCode && !isTypingPrefix ? (\n <span className=\"phone prefix\">{COUNTRY_PREFIXES[currentCountry] ?? `+${currentCountry}`}</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 onClear={handleClear}\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, 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'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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 onMouseDown={(event) => event.preventDefault()}\n onClick={handleClear}\n tabIndex={-1}\n aria-label={texts.clearInput}\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 {MInputIBANProps} from './MInputIBAN.types'\nimport {MInputGroup} from '../MInputGroup'\nimport {cn} from '../../../utils/cn'\nimport {ibanCountries, getIbanCountryLength, validateIBAN} from '../../../utils/validators'\nimport {formatIBAN, unformatIBAN} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './MInputIBAN.css'\n\nfunction normalizeCountryCode(countryCode?: string): string {\n return (\n countryCode\n ?.replace(/[^a-zA-Z]/g, '')\n .toUpperCase()\n .slice(0, 2) || ''\n )\n}\n\nfunction getAccountDigitsCap(countryCode: string): number {\n const length = getIbanCountryLength(countryCode) ?? 28\n return Math.max(length - 2, 0)\n}\n\nfunction buildIbanPlaceholder(countryCode: string): string {\n const accountChars = getAccountDigitsCap(countryCode)\n const groups: string[] = []\n let remaining = accountChars\n\n while (remaining > 0) {\n const take = Math.min(4, remaining)\n groups.push('0'.repeat(take))\n remaining -= take\n }\n\n return groups.join(' ')\n}\n\n// Browser-level cap: account digits plus the spaces that formatIBAN inserts between 4-char groups.\nfunction getFormattedMaxLength(countryCode: string): number {\n const accountChars = getAccountDigitsCap(countryCode)\n if (accountChars === 0) return 0\n const spaces = Math.max(0, Math.ceil(accountChars / 4) - 1)\n return accountChars + spaces\n}\n\n// Extend the grouped input with country-aware IBAN formatting and checksum validation.\nexport const MInputIBAN = forwardRef<HTMLInputElement, MInputIBANProps>(function MInputIBAN(\n {\n countryCode,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n onCountryChange,\n onClear,\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(normalizeCountryCode(countryCode) || 'PL')\n const currentCountry = normalizeCountryCode(countryCode) || internalCountry\n\n const buildDisplayValue = useCallback(\n (raw: string, country: string): string => {\n const cleaned = unformatIBAN(raw)\n .replace(/[^0-9]/g, '')\n .slice(0, getAccountDigitsCap(country))\n if (!cleaned) return ''\n return formatOnChange ? formatIBAN(cleaned) : cleaned\n },\n [formatOnChange]\n )\n\n const [internalValue, setInternalValue] = useState(() =>\n buildDisplayValue(defaultValue?.toString() ?? '', normalizeCountryCode(countryCode) || 'PL')\n )\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? buildDisplayValue(value.toString(), currentCountry) : internalValue\n\n const resetValidation = useCallback(() => {\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n }, [onValidationChange])\n\n // Keep raw and formatted IBAN values aligned for consumers and display.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = buildDisplayValue(e.target.value, currentCountry)\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n\n if (!formatted && (touched || !validation.valid)) {\n resetValidation()\n }\n\n onValueChange?.(unformatIBAN(formatted), formatted)\n onChange?.(e)\n },\n [buildDisplayValue, currentCountry, onChange, onValueChange, resetValidation, touched, validation.valid, value]\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\n if (validateOnBlur && currentValue) {\n const fullIban = `${currentCountry}${unformatIBAN(currentValue)}`\n const result = validateIBAN(fullIban)\n setValidation(result)\n onValidationChange?.(result)\n }\n\n onBlur?.(e)\n },\n [currentCountry, currentValue, onBlur, onValidationChange, validateOnBlur]\n )\n\n // Reset both the displayed value and any error state when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n resetValidation()\n onValueChange?.('', '')\n onClear?.()\n }, [onClear, onValueChange, resetValidation, value])\n\n // Switch the country code via the inline select.\n const handleCountrySelect = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n const next = normalizeCountryCode(e.target.value)\n if (!next) return\n\n if (countryCode === undefined) {\n setInternalCountry(next)\n }\n\n const reformatted = buildDisplayValue(currentValue, next)\n if (value === undefined) {\n setInternalValue(reformatted)\n }\n onValueChange?.(unformatIBAN(reformatted), reformatted)\n\n onCountryChange?.(next)\n\n if (touched && reformatted) {\n const fullIban = `${next}${unformatIBAN(reformatted)}`\n const result = validateIBAN(fullIban)\n setValidation(result)\n onValidationChange?.(result)\n }\n },\n [\n buildDisplayValue,\n countryCode,\n currentValue,\n onCountryChange,\n onValidationChange,\n onValueChange,\n touched,\n value,\n ]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n const countryOptions = useMemo(() => ibanCountries, [])\n const resolvedHelperText = resolvedErrorText\n ? undefined\n : (helperText ?? `Format: ${currentCountry} ${buildIbanPlaceholder(currentCountry)}`)\n\n return (\n <MInputGroup\n {...rest}\n ref={ref}\n type=\"text\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder ?? buildIbanPlaceholder(currentCountry)}\n helperText={resolvedHelperText}\n disabled={disabled}\n maxLength={getFormattedMaxLength(currentCountry)}\n prepend={\n <div className=\"country-select-wrap\">\n <select\n className=\"country-select\"\n value={currentCountry}\n onChange={handleCountrySelect}\n disabled={disabled}\n aria-label=\"IBAN country\"\n >\n {countryOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n }\n className={cn('input-iban', className)}\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, useEffect, useLayoutEffect, useRef, 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 symbol = currencySymbol ?? currency ?? ''\n\n // Turn anything the consumer may pass — a number, a machine string (`45.5`)\n // or an already formatted one (`1 234,50`) — into the display string.\n const toDisplay = useCallback(\n (input: string | number | null | undefined): string => {\n if (input === undefined || input === null || input === '') return ''\n const raw = typeof input === 'number' ? input.toFixed(precision) : String(input)\n const stripped = thousandSeparator ? raw.split(thousandSeparator).join('') : raw\n const num = parseCurrencyToNumber(stripped, '', decimalSeparator)\n if (num === null) return ''\n return formatCurrency(num.toFixed(precision), {decimalSeparator, thousandSeparator, precision})\n },\n [decimalSeparator, thousandSeparator, precision]\n )\n\n const toNumber = useCallback(\n (input: string | number | null | undefined): number | null => {\n if (input === undefined || input === null || input === '') return null\n if (typeof input === 'number') return Number.isNaN(input) ? null : input\n return parseCurrencyToNumber(input, thousandSeparator, decimalSeparator)\n },\n [thousandSeparator, decimalSeparator]\n )\n\n // The field keeps its own display buffer even when `value` is controlled.\n // Without it a half-typed amount (`45,`) round-trips through the consumer's\n // number state and comes back as `45`, which makes the decimals impossible\n // to type at all.\n const [display, setDisplay] = useState<string>(() => toDisplay(value !== undefined ? value : defaultValue))\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const caretRef = useRef<number | null>(null)\n\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.RefObject<HTMLInputElement | null>).current = node\n },\n [ref]\n )\n\n // Re-sync from a controlled `value` only when it disagrees numerically with\n // what is on screen, so typing is never interrupted by the round-trip.\n useEffect(() => {\n if (value === undefined) return\n if (toNumber(value) === toNumber(display)) return\n setDisplay(toDisplay(value))\n }, [value, display, toDisplay, toNumber])\n\n // Count the characters that carry meaning, ignoring the grouping separators\n // this component inserts — used to keep the caret where the user left it.\n const countSignificant = useCallback(\n (text: string, upTo: number): number => {\n let count = 0\n for (let i = 0; i < upTo && i < text.length; i++) {\n const ch = text[i]\n if ((ch >= '0' && ch <= '9') || ch === decimalSeparator || ch === '-') count++\n }\n return count\n },\n [decimalSeparator]\n )\n\n const caretForSignificant = useCallback(\n (text: string, significant: number): number => {\n if (significant <= 0) return 0\n let count = 0\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n if ((ch >= '0' && ch <= '9') || ch === decimalSeparator || ch === '-') count++\n if (count === significant) return i + 1\n }\n return text.length\n },\n [decimalSeparator]\n )\n\n useLayoutEffect(() => {\n const caret = caretRef.current\n caretRef.current = null\n if (caret === null) return\n const node = inputRef.current\n if (!node || document.activeElement !== node) return\n node.setSelectionRange(caret, caret)\n }, [display])\n\n // Filter user input down to digits, one decimal separator and an optional\n // minus sign, then re-group it without swallowing what is still being typed.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n const rawCaret = e.target.selectionStart ?? raw.length\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 && precision > 0) {\n filtered += decimalSeparator\n hasDecimal = true\n } else if (ch === '-' && allowNegative && filtered.length === 0) {\n filtered += '-'\n }\n }\n\n const hasDigits = /\\d/.test(filtered)\n let next: string\n if (!hasDigits) {\n // Keep the transient states the user needs to pass through\n // (empty field, a lone minus) instead of snapping them to `0`.\n next = filtered.startsWith('-') ? '-' : ''\n } else {\n next = formatCurrency(filtered, {decimalSeparator, thousandSeparator, precision})\n // `formatCurrency` drops an empty fractional part, which would\n // eat the separator on the keystroke that opens the decimals.\n if (filtered.endsWith(decimalSeparator) && !next.includes(decimalSeparator)) {\n next += decimalSeparator\n }\n }\n\n caretRef.current = caretForSignificant(next, countSignificant(raw, rawCaret))\n setDisplay(next)\n onValueChange?.(parseCurrencyToNumber(next, thousandSeparator, decimalSeparator))\n onChange?.(e)\n },\n [\n onChange,\n decimalSeparator,\n thousandSeparator,\n precision,\n allowNegative,\n onValueChange,\n countSignificant,\n caretForSignificant,\n ]\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(display, thousandSeparator, decimalSeparator)\n if (num !== null) {\n if (min !== undefined && num < min) num = min\n if (max !== undefined && num > max) num = max\n const formatted = toDisplay(num)\n if (formatted !== display) {\n setDisplay(formatted)\n }\n onValueChange?.(num)\n } else if (display !== '') {\n setDisplay('')\n onValueChange?.(null)\n }\n onBlur?.(e)\n },\n [display, min, max, decimalSeparator, thousandSeparator, toDisplay, onValueChange, onBlur]\n )\n\n const symbolEl = symbol ? <span className=\"currency symbol\">{symbol}</span> : undefined\n\n return (\n <MInput\n {...rest}\n ref={setRefs}\n type=\"text\"\n inputMode=\"decimal\"\n value={display}\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 onClear,\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 // Reset validation state alongside the value when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n onValueChange?.('', '', 'unknown')\n onClear?.()\n }, [onClear, onValidationChange, onValueChange, value])\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 onClear={handleClear}\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 {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'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\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 onClear,\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 texts = useMCommonTexts()\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 // Reset validation state alongside the value when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n onValueChange?.('', '', currentCountry)\n onClear?.()\n }, [onClear, onValidationChange, onValueChange, value, currentCountry])\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 onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n helperText={resolvedErrorText ? undefined : (helperText ?? `Format: ${currentRule.example}`)}\n placeholder={selectableCountry ? currentRule.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={texts.postalCodeCountry}\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'\nimport {useMCommonTexts, formatMText} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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={formatMText(texts.digitNumber, {index: 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={texts.clearCode}\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 className=\"crop hint\" role=\"note\">\n Drag the image to reposition, scroll or use the slider to zoom, then click <strong>Apply</strong> to\n confirm the crop.\n </div>\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=\"filled\" size=\"sm\" color=\"primary\" onClick={exportCrop}>\n Apply\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'\nimport {useMCommonTexts, formatMText} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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={texts.clearFiles}\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={formatMText(texts.removeItem, {name: 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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./icons-D3n9-919.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./validators-B6yWdsu2.cjs`),r=require(`./creditCards-D_HwRUBz.cjs`),i=require(`./formatters-CNjg_h7-.cjs`),a=require(`./useGhostText-mibV4s1-.cjs`),o=require(`./useInteractionEffect-CtXlbjhC.cjs`),s=require(`./MButton-CnAr77Za.cjs`),c=require(`./MCheckbox-DozwF2ai.cjs`),l=require(`./MSlider-w5214a-W.cjs`),u=require(`./frameworkTexts-BSXUtXOp.cjs`),d=require(`./MInput-BYj2BdUe.cjs`);require(`./core-w629c4ND.cjs`);let f=require(`react`),p=require(`react/jsx-runtime`);var m=(0,f.forwardRef)(function({value:e,defaultValue:n,name:r,id:i,placeholder:o,disabled:c=!1,readOnly:l=!1,required:u=!1,autoFocus:m=!1,rows:h=3,autoResize:g=!1,minRows:_,maxRows:v,variant:y=`outlined`,size:b=`md`,color:x,fullWidth:S=!1,label:C,helperText:w,errorText:T,error:E=!1,success:D=!1,maxLength:O,showCharCount:k=!1,ghostOptions:A,ghostMinChars:j=2,onGhostAccept:M,loading:N=!1,onChange:P,onFocus:F,onBlur:I,className:L,style:R,textareaClassName:z,labelClassName:B},V){let[H,U]=(0,f.useState)(!1),W=(0,f.useRef)(null),{currentValue:G,setCurrentValue:K}=d.n(e,n),q=a.t({options:A??[],value:G,minChars:j}),J=E||!!T,Y=J?`color-error`:x?`color-${x}`:void 0,X=V??W,ee=(0,f.useCallback)(()=>{let e=typeof X==`function`?null:X?.current;if(!e||!g)return;e.style.height=`auto`;let t=parseFloat(getComputedStyle(e).lineHeight)||20,n=_?_*t:0,r=v?v*t:1/0,i=Math.min(Math.max(e.scrollHeight,n),r);e.style.height=`${i}px`,e.style.overflowY=e.scrollHeight>i?`auto`:`hidden`},[g,_,v,X]);(0,f.useEffect)(()=>{ee()},[G,ee]);let Z=(0,f.useCallback)(e=>{U(!0),F?.(e)},[F]),Q=(0,f.useCallback)(e=>{U(!1),I?.(e)},[I]),te=(0,f.useCallback)(e=>{K(e.target.value),P?.(e),q.reset()},[P,K,q.reset]),ne=(0,f.useCallback)(e=>{if(A&&q.hint&&q.onKeyDown(e)){let e=q.accept();K(e.value),M?.(e.value);let t=typeof X==`function`?null:X?.current;t&&((Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,`value`)?.set)?.call(t,e.value),t.dispatchEvent(new Event(`input`,{bubbles:!0})));return}},[A,q,K,M,X]),$=t.t(`container`,`field-${y}`,`field-${b}`,H&&`focused`,J&&`error`,D&&!J&&`success`,c&&`disabled`);return(0,p.jsxs)(`div`,{className:t.t(`textarea`,Y,S&&`full-width`,L),style:R,children:[C&&(0,p.jsx)(`label`,{htmlFor:i,className:t.t(`field-label`,H&&`focused`,J&&`error`,D&&!J&&`success`,u&&`required`,B),children:C}),(0,p.jsxs)(`div`,{className:$,children:[A?(0,p.jsxs)(`div`,{className:`ghost-text-field ghost-text-field-multi`,children:[(0,p.jsx)(`textarea`,{ref:X,name:r,id:i,placeholder:o,disabled:c,readOnly:l,required:u,autoFocus:m,rows:g?_??h:h,maxLength:O,value:G,className:t.t(`field`,z),onChange:te,onFocus:Z,onBlur:Q,onKeyDown:ne,"aria-invalid":J||void 0,"aria-describedby":T?`${i}-error`:w?`${i}-helper`:void 0}),H&&q.hint&&(0,p.jsxs)(`span`,{className:`ghost-text-overlay`,"aria-hidden":`true`,children:[(0,p.jsx)(`span`,{className:`ghost-text-typed`,children:G}),(0,p.jsx)(`span`,{className:`ghost-text-hint`,children:q.hint})]})]}):(0,p.jsx)(`textarea`,{ref:X,name:r,id:i,placeholder:o,disabled:c,readOnly:l,required:u,autoFocus:m,rows:g?_??h:h,maxLength:O,value:G,className:t.t(`field`,z),onChange:te,onFocus:Z,onBlur:Q,"aria-invalid":J||void 0,"aria-describedby":T?`${i}-error`:w?`${i}-helper`:void 0}),N&&(0,p.jsx)(s.r,{size:`sm`,color:x,className:`textarea-spinner`})]}),(T||w||k)&&(0,p.jsxs)(`div`,{className:`bottom-row`,children:[(0,p.jsxs)(`span`,{children:[T&&(0,p.jsx)(`span`,{id:i?`${i}-error`:void 0,className:`field-error`,role:`alert`,children:T}),!T&&w&&(0,p.jsx)(`span`,{id:i?`${i}-helper`:void 0,className:`field-helper`,children:w})]}),k&&O&&(0,p.jsxs)(`span`,{className:t.t(`char-count`,G.length>O&&`over`),children:[G.length,`/`,O]})]})]})});function h(e){let t=0;return e.length>=8&&t++,e.length>=12&&t++,/[a-z]/.test(e)&&/[A-Z]/.test(e)&&t++,/\d/.test(e)&&t++,/[^a-zA-Z0-9]/.test(e)&&t++,t<=1?`weak`:t<=2?`fair`:t<=3?`good`:`strong`}var g={weak:`Weak`,fair:`Fair`,good:`Good`,strong:`Strong`},_=(0,f.forwardRef)(function({showToggle:n=!0,showStrength:r=!1,onStrengthChange:i,value:a,defaultValue:o,onChange:s,className:c,...l},u){let[m,_]=(0,f.useState)(!1),[v,y]=(0,f.useState)(o?.toString()??``),b=a===void 0?v:a.toString(),x=h(b);(0,f.useEffect)(()=>{i?.(x)},[x,i]);let S=(0,f.useCallback)(e=>{a===void 0&&y(e.target.value),s?.(e)},[s,a]),C=n?(0,p.jsx)(`button`,{type:`button`,className:`password toggle`,onClick:()=>_(e=>!e),tabIndex:-1,"aria-label":m?`Hide password`:`Show password`,children:m?(0,p.jsx)(e.lr,{}):(0,p.jsx)(e.ur,{})}):void 0;return(0,p.jsxs)(`div`,{className:t.t(`password input`,c),children:[(0,p.jsx)(d.t,{...l,ref:u,type:m?`text`:`password`,value:b,onChange:S,endIcon:C}),r&&b.length>0&&(0,p.jsxs)(`div`,{className:`password strength row`,children:[(0,p.jsx)(`div`,{className:`password strength bar`,children:[0,1,2,3].map(e=>(0,p.jsx)(`div`,{className:t.t(`password strength segment`,e<[`weak`,`fair`,`good`,`strong`].indexOf(x)+1&&`strength-${x}`)},e))}),(0,p.jsx)(`span`,{className:t.t(`password strength label`,`strength-${x}`),children:g[x]})]})]})});function v(e,t,n){return t!==void 0&&e<t?t:n!==void 0&&e>n?n:e}function y(e,t){let n=10**t;return Math.round(e*n)/n}var b=(0,f.forwardRef)(function({min:n,max:r,step:i=1,showStepper:a=!0,precision:o=0,allowNegative:s=!0,onValueChange:c,value:l,defaultValue:m,onChange:h,onKeyDown:g,onBlur:_,disabled:b=!1,className:x,...S},C){let w=u.n(),[T,E]=(0,f.useState)(m?.toString()??``),D=l===void 0?T:l.toString(),O=(0,f.useRef)(null),k=(0,f.useRef)(D);(0,f.useEffect)(()=>{k.current=D},[D]);let A=(0,f.useCallback)(e=>{l===void 0&&E(e);let t=parseFloat(e);c?.(isNaN(t)?null:t)},[l,c]),j=(0,f.useCallback)(e=>{let t=y(v((parseFloat(k.current)||0)+i*e,n,r),o);k.current=t.toString(),A(t.toString())},[i,n,r,o,A]),M=(0,f.useCallback)(e=>{j(e),O.current=setInterval(()=>j(e),150)},[j]),N=(0,f.useCallback)(()=>{O.current&&=(clearInterval(O.current),null)},[]);(0,f.useEffect)(()=>N,[N]);let P=(0,f.useCallback)(e=>{let t=e.target.value.replace(s?/[^\d.,-]/g:/[^\d.,]/g,``);k.current=t,A(t),h?.(e)},[h,s,A]),F=(0,f.useCallback)(e=>{let t=parseFloat(k.current);if(!isNaN(t)){let e=y(v(t,n,r),o);k.current=e.toString(),A(e.toString())}_?.(e)},[n,r,o,A,_]),I=(0,f.useCallback)(e=>{e.key===`ArrowUp`?(e.preventDefault(),j(1)):e.key===`ArrowDown`&&(e.preventDefault(),j(-1)),g?.(e)},[j,g]),L=a&&!b?(0,p.jsxs)(`div`,{className:`number stepper`,children:[(0,p.jsx)(`button`,{type:`button`,className:`number step button`,onPointerDown:e=>{e.preventDefault(),M(1)},onPointerUp:N,onPointerLeave:N,onPointerCancel:N,tabIndex:-1,"aria-label":w.increment,children:(0,p.jsx)(e.Gi,{})}),(0,p.jsx)(`button`,{type:`button`,className:`number step button`,onPointerDown:e=>{e.preventDefault(),M(-1)},onPointerUp:N,onPointerLeave:N,onPointerCancel:N,tabIndex:-1,"aria-label":w.decrement,children:(0,p.jsx)(e.Ki,{})})]}):void 0;return(0,p.jsx)(d.t,{...S,ref:C,type:`text`,inputMode:`decimal`,value:D,onChange:P,onBlur:F,onKeyDown:I,endIcon:L,disabled:b,className:t.t(`number input`,x)})}),x=(0,f.forwardRef)(function({validateOnBlur:t=!0,validateOnChange:r=!1,showValidIcon:i=!0,onValidationChange:a,value:o,defaultValue:s,onChange:c,onBlur:l,error:u,errorText:m,success:h,placeholder:g=`email@example.com`,..._},v){let[y,b]=(0,f.useState)(s?.toString()??``),[x,S]=(0,f.useState)({valid:!0}),[C,w]=(0,f.useState)(!1),T=o===void 0?y:o.toString(),E=(0,f.useCallback)(e=>{let t=n.o(e);return S(t),a?.(t),t},[a]),D=(0,f.useCallback)(e=>{o===void 0&&b(e.target.value),r&&C&&E(e.target.value),c?.(e)},[c,o,r,C,E]),O=(0,f.useCallback)(e=>{w(!0),t&&e.target.value&&E(e.target.value),l?.(e)},[l,t,E]),k=u||C&&!x.valid,A=m||(C&&!x.valid?x.error:void 0),j=!k&&h!==void 0?h:C&&x.valid&&T.length>0,M=i&&j?(0,p.jsx)(`span`,{className:`validation-icon`,children:(0,p.jsx)(e.Yi,{})}):void 0;return(0,p.jsx)(d.t,{..._,ref:v,type:`email`,value:T,onChange:D,onBlur:O,error:k,errorText:A,success:j,placeholder:g,startIcon:(0,p.jsx)(e.Fi,{}),endIcon:M})}),S=[`http`,`https`],C=(0,f.forwardRef)(function({protocols:t=S,requireProtocol:r=!0,formatOnBlur:i=!1,validateOnBlur:a=!0,validateOnChange:o=!1,showValidIcon:s=!0,onValidationChange:c,value:l,defaultValue:u,onChange:m,onBlur:h,error:g,errorText:_,success:v,placeholder:y=`https://example.com`,...b},x){let[C,w]=(0,f.useState)(u?.toString()??``),[T,E]=(0,f.useState)({valid:!0}),[D,O]=(0,f.useState)(!1),k=l===void 0?C:l.toString(),A=(0,f.useCallback)(e=>{let i=n._(e,{protocols:t,requireProtocol:r});return E(i),c?.(i),i},[t,r,c]),j=(0,f.useCallback)(e=>{l===void 0&&w(e.target.value),o&&D&&A(e.target.value),m?.(e)},[m,l,o,D,A]),M=(0,f.useCallback)(e=>{O(!0);let n=e.target.value,r=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(n);i&&n&&!r&&t.length>0&&(n=`${t[0]}://${n}`,l===void 0&&w(n),e.target.value=n,m?.(e)),a&&n&&A(n),h?.(e)},[h,a,A,i,t,l,m]),N=g||D&&!T.valid,P=_||(D&&!T.valid?T.error:void 0),F=!N&&v!==void 0?v:D&&T.valid&&k.length>0,I=s&&F?(0,p.jsx)(`span`,{className:`validation-icon`,children:(0,p.jsx)(e.Yi,{})}):void 0;return(0,p.jsx)(d.t,{...b,ref:x,type:`url`,value:k,onChange:j,onBlur:M,error:N,errorText:P,success:F,placeholder:y,startIcon:(0,p.jsx)(e.On,{}),endIcon:I})}),w={PL:`+48`,DE:`+49`,US:`+1`,GB:`+44`,FR:`+33`,CZ:`+420`,SK:`+421`},T=Object.entries(w).sort(([,e],[,t])=>t.length-e.length);function E(e){let t=e.trim().replace(/^00/,`+`);if(!t.startsWith(`+`))return null;let n=`+`+i.u(t);for(let[e,t]of T)if(n.startsWith(t))return{country:e,rest:n.slice(t.length)};return null}function D(e){let t=e.trim();return!t.startsWith(`+`)&&!t.startsWith(`00`)?!1:i.u(t.startsWith(`00`)?`+`+t.slice(2):t).length<=3}function O(e){let t=e.trim();return`+`+i.u(t.startsWith(`00`)?t.slice(2):t.slice(1)).slice(0,3)}var k=(0,f.forwardRef)(function({countryCode:r,defaultCountryCode:a=`PL`,showCountryCode:o=!0,formatOnChange:s=!0,validateOnBlur:c=!0,onValidationChange:l,onValueChange:u,onCountryChange:m,onClear:h,value:g,defaultValue:_,onChange:v,onBlur:y,error:b,errorText:x,placeholder:S=`123 456 789`,className:C,...T},k){let[A,j]=(0,f.useState)((r??a).toUpperCase()),[M,N]=(0,f.useState)(_?.toString()??``),[P,F]=(0,f.useState)({valid:!0}),[I,L]=(0,f.useState)(!1),R=(r??A).toUpperCase(),z=g===void 0?M:g.toString(),B=(0,f.useCallback)(e=>{let t=e.target.value;if(t===``){g===void 0&&N(``),u?.(``,``),v?.(e);return}let n=E(t);if(n){let t=n.country;r===void 0&&t!==R&&(j(t),m?.(t));let a=i.u(n.rest),o=s?i.s(a,{countryCode:t}):a;g===void 0&&N(o),u?.(a,o),v?.(e);return}if(D(t)){let n=O(t);g===void 0&&N(n),u?.(i.u(n),n),v?.(e);return}let a=i.u(t),o=s?i.s(a,{countryCode:R}):a;g===void 0&&N(o),u?.(a,o),v?.(e)},[v,g,s,R,r,u,m]),V=(0,f.useCallback)(e=>{if(L(!0),c&&z){let e=n.p(i.u(z),R);F(e),l?.(e)}y?.(e)},[y,c,z,R,l]),H=(0,f.useCallback)(()=>{g===void 0&&N(``),F({valid:!0}),L(!1),l?.({valid:!0}),u?.(``,``),h?.()},[h,u,l,g]),U=z.startsWith(`+`),W=o&&!U?(0,p.jsx)(`span`,{className:`phone prefix`,children:w[R]??`+${R}`}):void 0,G=b||I&&!P.valid,K=x||(I&&!P.valid?P.error:void 0);return(0,p.jsx)(d.t,{...T,ref:k,type:`tel`,value:z,onChange:B,onBlur:V,onClear:H,error:G,errorText:K,placeholder:S,startIcon:o?W:(0,p.jsx)(e.Ni,{}),className:t.t(`phone input`,C)})}),A=(0,f.forwardRef)(function({autoCapitalize:t=!0,allowNumbers:n=!1,allowSpecialChars:r=!1,minWords:a,validateOnBlur:o=!0,onValidationChange:s,value:c,defaultValue:l,onChange:u,onBlur:m,error:h,errorText:g,placeholder:_=`Jan Kowalski`,...v},y){let[b,x]=(0,f.useState)(l?.toString()??``),[S,C]=(0,f.useState)({valid:!0}),[w,T]=(0,f.useState)(!1),E=c===void 0?b:c.toString(),D=(0,f.useCallback)(e=>{let a=e;return n||(a=a.replace(/\d/g,``)),r||(a=a.replace(/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s'-]/g,``)),t&&(a=i.n(a)),a},[n,r,t]),O=(0,f.useCallback)(e=>{let t=D(e.target.value);c===void 0&&x(t),u?.(e)},[u,c,D]),k=(0,f.useCallback)(e=>{if(T(!0),o&&E){let e=E.trim().split(/\s+/).filter(Boolean);if(a&&e.length<a){let e={valid:!1,error:`Enter at least ${a} word${a>1?`s`:``}`};C(e),s?.(e)}else{let e={valid:!0};C(e),s?.(e)}}m?.(e)},[m,o,E,a,s]),A=h||w&&!S.valid,j=g||(w&&!S.valid?S.error:void 0);return(0,p.jsx)(d.t,{...v,ref:y,type:`text`,value:E,onChange:O,onBlur:k,error:A,errorText:j,placeholder:_,startIcon:(0,p.jsx)(e._r,{})})});function j(e){return typeof e==`object`&&!!e&&!(0,f.isValidElement)(e)&&`type`in e}function M(e,n,r,i){if(!j(e))return(0,p.jsx)(`div`,{className:t.t(`addon`,`custom`,n),children:e},`${n}-${r}`);let a=e;return a.type===`button`?(0,p.jsx)(s.t,{variant:`ghost`,color:i,size:`sm`,className:t.t(`addon`,n,`addon-button`),onClick:a.onClick,clickEffect:`none`,children:a.content},`${n}-${r}`):a.type===`checkbox`?(0,p.jsx)(`div`,{className:t.t(`addon`,n,`checkbox`),children:(0,p.jsx)(c.t,{size:`sm`,clickEffect:`none`,checked:a.checked,onChange:e=>a.onCheckedChange?.(e.target.checked),className:`addon-checkbox`})},`${n}-${r}`):(0,p.jsx)(`span`,{className:t.t(`addon`,n),children:a.content},`${n}-${r}`)}function N(e){return e==null?[]:Array.isArray(e)?e:[e]}var P=(0,f.forwardRef)(function({prepend:n,append:r,type:i=`text`,value:a,defaultValue:c,name:l,id:m,placeholder:h,disabled:g=!1,readOnly:_=!1,required:v=!1,autoFocus:y=!1,autoComplete:b,inputMode:x,size:S=`md`,fullWidth:C=!1,label:w,helperText:T,errorText:E,color:D=`primary`,error:O=!1,maxLength:k,clearable:A=!1,onChange:j,onFocus:P,onBlur:F,onKeyDown:I,onClear:L,loading:R=!1,clickEffect:z=`ripple`,rippleColor:B,className:V,style:H,inputClassName:U,labelClassName:W},G){let K=u.n(),[q,J]=(0,f.useState)(!1),Y=(0,f.useRef)(null),{effectClassName:X,effectLayer:ee,handlePointerDown:Z}=o.t({effect:z,disabled:g||_,color:B}),Q=O||!!E,te=Q?`color-error`:`color-${D}`,{currentValue:ne,setCurrentValue:$}=d.n(a,c),re=ne.length>0,ie=(0,f.useCallback)(e=>{J(!0),P?.(e)},[P]),ae=(0,f.useCallback)(e=>{J(!1),F?.(e)},[F]),oe=(0,f.useCallback)(e=>{$(e.target.value),j?.(e)},[j,$]),se=(0,f.useCallback)(()=>{$(``);let e=G?.current??Y.current;e&&((Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`value`)?.set)?.call(e,``),e.dispatchEvent(new Event(`input`,{bubbles:!0}))),L?.(),e?.focus()},[L,G,$]),ce=N(n),le=N(r);return(0,p.jsxs)(`div`,{className:t.t(`input-group`,te,C&&`full-width`,V),style:H,children:[w&&(0,p.jsx)(`label`,{htmlFor:m,className:t.t(`field-label`,q&&`focused`,Q&&`error`,v&&`required`,W),children:w}),(0,p.jsxs)(`div`,{className:t.t(`container`,`field-${S}`,q&&`focused`,Q&&`has-error`,g&&`disabled`,X),onPointerDown:Z,children:[ee,ce.map((e,t)=>M(e,`prepend`,t,D)),(0,p.jsx)(`input`,{ref:G??Y,type:i,value:ne,name:l,id:m,placeholder:h,disabled:g,readOnly:_,required:v,autoFocus:y,autoComplete:b,inputMode:x,maxLength:k,className:t.t(`field`,U),onChange:oe,onFocus:ie,onBlur:ae,onKeyDown:I,"aria-invalid":Q||void 0,"aria-describedby":E?`${m}-error`:T?`${m}-helper`:void 0}),R&&(0,p.jsx)(`span`,{className:`spinner-addon`,children:(0,p.jsx)(s.r,{size:`sm`,color:D})}),A&&re&&!R&&!g&&(0,p.jsx)(`button`,{type:`button`,className:`clear-btn clear-btn-base`,onMouseDown:e=>e.preventDefault(),onClick:se,tabIndex:-1,"aria-label":K.clearInput,children:(0,p.jsx)(e.Xi,{})}),le.map((e,t)=>M(e,`append`,t,D))]}),(E||T)&&(0,p.jsxs)(`div`,{className:`bottom`,children:[E&&(0,p.jsx)(`span`,{id:m?`${m}-error`:void 0,className:`field-error`,role:`alert`,children:E}),!E&&T&&(0,p.jsx)(`span`,{id:m?`${m}-helper`:void 0,className:`field-helper`,children:T})]})]})});function F(e){return e?.replace(/[^a-zA-Z]/g,``).toUpperCase().slice(0,2)||``}function I(e){let t=n.n(e)??28;return Math.max(t-2,0)}function L(e){let t=I(e),n=[],r=t;for(;r>0;){let e=Math.min(4,r);n.push(`0`.repeat(e)),r-=e}return n.join(` `)}function R(e){let t=I(e);return t===0?0:t+Math.max(0,Math.ceil(t/4)-1)}var z=(0,f.forwardRef)(function({countryCode:e,formatOnChange:r=!0,validateOnBlur:a=!0,onValidationChange:o,onValueChange:s,onCountryChange:c,onClear:l,value:u,defaultValue:d,onChange:m,onBlur:h,error:g,errorText:_,helperText:v,placeholder:y,className:b,disabled:x=!1,...S},C){let[w,T]=(0,f.useState)(F(e)||`PL`),E=F(e)||w,D=(0,f.useCallback)((e,t)=>{let n=i.d(e).replace(/[^0-9]/g,``).slice(0,I(t));return n?r?i.a(n):n:``},[r]),[O,k]=(0,f.useState)(()=>D(d?.toString()??``,F(e)||`PL`)),[A,j]=(0,f.useState)({valid:!0}),[M,N]=(0,f.useState)(!1),z=u===void 0?O:D(u.toString(),E),B=(0,f.useCallback)(()=>{j({valid:!0}),N(!1),o?.({valid:!0})},[o]),V=(0,f.useCallback)(e=>{let t=D(e.target.value,E);u===void 0&&k(t),!t&&(M||!A.valid)&&B(),s?.(i.d(t),t),m?.(e)},[D,E,m,s,B,M,A.valid,u]),H=(0,f.useCallback)(e=>{if(N(!0),a&&z){let e=n.s(`${E}${i.d(z)}`);j(e),o?.(e)}h?.(e)},[E,z,h,o,a]),U=(0,f.useCallback)(()=>{u===void 0&&k(``),B(),s?.(``,``),l?.()},[l,s,B,u]),W=(0,f.useCallback)(t=>{let r=F(t.target.value);if(!r)return;e===void 0&&T(r);let a=D(z,r);if(u===void 0&&k(a),s?.(i.d(a),a),c?.(r),M&&a){let e=n.s(`${r}${i.d(a)}`);j(e),o?.(e)}},[D,e,z,c,o,s,M,u]),G=g||M&&!A.valid,K=_||(M&&!A.valid?A.error:void 0),q=(0,f.useMemo)(()=>n.r,[]),J=K?void 0:v??`Format: ${E} ${L(E)}`;return(0,p.jsx)(P,{...S,ref:C,type:`text`,value:z,onChange:V,onBlur:H,onClear:U,error:G,errorText:K,placeholder:y??L(E),helperText:J,disabled:x,maxLength:R(E),prepend:(0,p.jsx)(`div`,{className:`country-select-wrap`,children:(0,p.jsx)(`select`,{className:`country-select`,value:E,onChange:W,disabled:x,"aria-label":`IBAN country`,children:q.map(e=>(0,p.jsx)(`option`,{value:e,children:e},e))})}),className:t.t(`input-iban`,b)})}),B={NIP:n.u,PESEL:n.d,REGON:n.m},V={NIP:13,PESEL:11,REGON:14},H={NIP:`123-456-78-19`,PESEL:`00000000000`,REGON:`000000000`},U=(0,f.forwardRef)(function({taxIdType:t,formatOnChange:n=!0,validateOnBlur:r=!0,showValidIcon:a=!0,onValidationChange:o,onValueChange:s,value:c,defaultValue:l,onChange:u,onBlur:m,error:h,errorText:g,success:_,placeholder:v,...y},b){let[x,S]=(0,f.useState)(l?.toString()??``),[C,w]=(0,f.useState)({valid:!0}),[T,E]=(0,f.useState)(!1),D=c===void 0?x:c.toString(),O=(0,f.useCallback)(e=>{let r=i.u(e.target.value),a=n&&t===`NIP`?i.o(r):r;c===void 0&&S(a),s?.(r),u?.(e)},[u,c,n,t,s]),k=(0,f.useCallback)(e=>{if(E(!0),r&&D){let e=B[t],n=e(i.u(D));w(n),o?.(n)}m?.(e)},[m,r,D,t,o]),A=h||T&&!C.valid,j=g||(T&&!C.valid?C.error:void 0),M=!A&&(_===void 0?T&&C.valid&&D.length>0:_),N=a&&M?(0,p.jsx)(`span`,{className:`validation-icon`,children:(0,p.jsx)(e.Yi,{})}):void 0;return(0,p.jsx)(d.t,{...y,ref:b,type:`text`,inputMode:`numeric`,value:D,onChange:O,onBlur:k,error:A,errorText:j,success:M,placeholder:v??H[t],startIcon:(0,p.jsx)(e.dr,{}),endIcon:N,maxLength:V[t]})}),W=(0,f.forwardRef)(function({currency:e,currencySymbol:n,currencyPosition:r=`end`,decimalSeparator:a=`,`,thousandSeparator:o=` `,precision:s=2,min:c,max:l,allowNegative:u=!1,onValueChange:m,value:h,defaultValue:g,onChange:_,onBlur:v,placeholder:y=`0,00`,startIcon:b,endIcon:x,className:S,...C},w){let T=n??e??``,E=(0,f.useCallback)(e=>{if(e==null||e===``)return``;let t=typeof e==`number`?e.toFixed(s):String(e),n=i.c(o?t.split(o).join(``):t,``,a);return n===null?``:i.r(n.toFixed(s),{decimalSeparator:a,thousandSeparator:o,precision:s})},[a,o,s]),D=(0,f.useCallback)(e=>e==null||e===``?null:typeof e==`number`?Number.isNaN(e)?null:e:i.c(e,o,a),[o,a]),[O,k]=(0,f.useState)(()=>E(h===void 0?g:h)),A=(0,f.useRef)(null),j=(0,f.useRef)(null),M=(0,f.useCallback)(e=>{A.current=e,typeof w==`function`?w(e):w&&(w.current=e)},[w]);(0,f.useEffect)(()=>{h!==void 0&&D(h)!==D(O)&&k(E(h))},[h,O,E,D]);let N=(0,f.useCallback)((e,t)=>{let n=0;for(let r=0;r<t&&r<e.length;r++){let t=e[r];(t>=`0`&&t<=`9`||t===a||t===`-`)&&n++}return n},[a]),P=(0,f.useCallback)((e,t)=>{if(t<=0)return 0;let n=0;for(let r=0;r<e.length;r++){let i=e[r];if((i>=`0`&&i<=`9`||i===a||i===`-`)&&n++,n===t)return r+1}return e.length},[a]);(0,f.useLayoutEffect)(()=>{let e=j.current;if(j.current=null,e===null)return;let t=A.current;!t||document.activeElement!==t||t.setSelectionRange(e,e)},[O]);let F=(0,f.useCallback)(e=>{let t=e.target.value,n=e.target.selectionStart??t.length,r=``,c=!1;for(let e of t)e>=`0`&&e<=`9`?r+=e:(e===`,`||e===`.`)&&!c&&s>0?(r+=a,c=!0):e===`-`&&u&&r.length===0&&(r+=`-`);let l=/\d/.test(r),d;l?(d=i.r(r,{decimalSeparator:a,thousandSeparator:o,precision:s}),r.endsWith(a)&&!d.includes(a)&&(d+=a)):d=r.startsWith(`-`)?`-`:``,j.current=P(d,N(t,n)),k(d),m?.(i.c(d,o,a)),_?.(e)},[_,a,o,s,u,m,N,P]),I=(0,f.useCallback)(e=>{let t=i.c(O,o,a);if(t!==null){c!==void 0&&t<c&&(t=c),l!==void 0&&t>l&&(t=l);let e=E(t);e!==O&&k(e),m?.(t)}else O!==``&&(k(``),m?.(null));v?.(e)},[O,c,l,a,o,E,m,v]),L=T?(0,p.jsx)(`span`,{className:`currency symbol`,children:T}):void 0;return(0,p.jsx)(d.t,{...C,ref:M,type:`text`,inputMode:`decimal`,value:O,onChange:F,onBlur:I,placeholder:y,startIcon:r===`start`?L:b,endIcon:r===`end`?L:x,className:t.t(`currency input`,S)})}),G={"DD/MM/YYYY":`DD{s}MM{s}YYYY`,"MM/DD/YYYY":`MM{s}DD{s}YYYY`,"YYYY/MM/DD":`YYYY{s}MM{s}DD`},K=(0,f.forwardRef)(function({format:t=`DD/MM/YYYY`,separator:r=`/`,minDate:a,maxDate:o,validateOnBlur:s=!0,validateOnChange:c=!1,onDateChange:l,onValidationChange:u,value:m,defaultValue:h,onChange:g,onBlur:_,onKeyDown:v,onClear:y,error:b,errorText:x,placeholder:S,className:C,...w},T){let[E,D]=(0,f.useState)(h?.toString()??``),[O,k]=(0,f.useState)({valid:!0}),[A,j]=(0,f.useState)(!1),M=(0,f.useRef)(!1),N=m===void 0?E:m.toString();(0,f.useEffect)(()=>{if(M.current){M.current=!1;return}if(!N){k({valid:!0}),j(!1);return}k(n.a(N,{format:t,minDate:a,maxDate:o}))},[N,t,o,a]);let P=(0,f.useCallback)(e=>{let r=n.a(e,{format:t,minDate:a,maxDate:o});return k(r),u?.(r),r},[t,a,o,u]),F=(0,f.useCallback)(e=>{i.u(e).length===8?l?.(n.i(e,t),e):l?.(null,e)},[t,l]),I=(0,f.useCallback)(e=>{let n=i.u(e.target.value);if(n.length>8)return;let a=i.i(n,t,r);M.current=!0,m===void 0&&D(a),F(a),c&&A&&P(a),g?.(e)},[g,m,t,r,c,A,P,F]),L=(0,f.useCallback)(()=>{M.current=!0,m===void 0&&D(``),k({valid:!0}),j(!1),l?.(null,``),y?.()},[m,l,y]),R=(0,f.useCallback)(e=>{j(!0),s&&N&&P(N),_?.(e)},[_,s,N,P]),z=(0,f.useCallback)(e=>{if([`Backspace`,`Delete`,`Tab`,`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key)){v?.(e);return}if(e.ctrlKey||e.metaKey){v?.(e);return}/^\d$/.test(e.key)||e.preventDefault(),v?.(e)},[v]),B=b||A&&!O.valid,V=x||(A&&!O.valid?O.error:void 0);return(0,p.jsx)(d.t,{...w,ref:T,type:`text`,inputMode:`numeric`,value:N,onChange:I,onBlur:R,onKeyDown:z,onClear:L,error:B,errorText:V,placeholder:S??G[t].replace(/\{s\}/g,r),startIcon:(0,p.jsx)(e.Ri,{}),maxLength:10,className:C})});function q({value:e}){let n=r.n(e);return(0,p.jsx)(`span`,{className:t.t(`credit-card-brand-badge`,`credit-brand`,n.brand),children:n.iconLabel})}var J=(0,f.forwardRef)(function({validateOnBlur:n=!0,validateOnChange:i=!1,showBrandIcon:a=!0,showValidIcon:o=!0,onValidationChange:s,onCardBrandChange:c,onValueChange:l,onClear:u,value:m,defaultValue:h,onChange:g,onBlur:_,error:v,errorText:y,success:b,placeholder:x=`4242 4242 4242 4242`,className:S,...C},w){let[T,E]=(0,f.useState)(()=>r.r(h?.toString()??``)),[D,O]=(0,f.useState)({valid:!0}),[k,A]=(0,f.useState)(!1),j=m===void 0?T:r.r(m.toString()),M=(0,f.useCallback)(e=>{let t=r.a(e);return O(t),s?.(t),t},[s]),N=(0,f.useCallback)(e=>{let t=r.r(e.target.value),n=r.n(t);m===void 0&&E(t),c?.(n.brand),l?.(r.i(t),t,n.brand),i&&k&&M(t),g?.(e)},[c,g,l,M,k,i,m]),P=(0,f.useCallback)(e=>{A(!0),n&&j&&M(j),_?.(e)},[j,_,M,n]),F=(0,f.useCallback)(()=>{m===void 0&&E(``),O({valid:!0}),A(!1),s?.({valid:!0}),l?.(``,``,`unknown`),u?.()},[u,s,l,m]),I=v||k&&!D.valid,L=y||(k&&!D.valid?D.error:void 0),R=!I&&b!==void 0?b:k&&D.valid&&r.i(j).length>0,z=o&&R?(0,p.jsx)(`span`,{className:`credit valid validation-icon credit-card-valid-icon`,"aria-hidden":`true`,children:(0,p.jsx)(e.Yi,{})}):void 0;return(0,p.jsx)(d.t,{...C,ref:w,type:`text`,inputMode:`numeric`,value:j,onChange:N,onBlur:P,onClear:F,error:I,errorText:L,success:R,placeholder:x,startIcon:a?(0,p.jsx)(q,{value:j}):void 0,endIcon:z,className:t.t(`credit-card input`,S)})}),Y=(0,f.forwardRef)(function({country:e,defaultCountry:r=`PL`,selectableCountry:i=!0,validateOnBlur:a=!0,validateOnChange:o=!1,onCountryChange:s,onValidationChange:c,onValueChange:l,onClear:d,value:m,defaultValue:h,onChange:g,onBlur:_,error:v,errorText:y,helperText:b,placeholder:x,className:S,disabled:C=!1,...w},T){let E=u.n(),[D,O]=(0,f.useState)(r.toUpperCase()),[k,A]=(0,f.useState)(()=>n.v(h?.toString()??``,e??r)),[j,M]=(0,f.useState)({valid:!0}),[N,F]=(0,f.useState)(!1),I=(e??D).toUpperCase(),L=(0,f.useMemo)(()=>n.y(I),[I]),R=m===void 0?k:n.v(m.toString(),I),z=(0,f.useCallback)((e,t)=>{let r=n.S(e,t);return M(r),c?.(r),r},[c]),B=(0,f.useCallback)(e=>{let t=n.v(e.target.value,I);m===void 0&&A(t),l?.(t.replace(/\s|-/g,``),t,I),o&&N&&z(t,I),g?.(e)},[I,g,l,z,N,o,m]),V=(0,f.useCallback)(e=>{F(!0),a&&R&&z(R,I),_?.(e)},[I,R,_,z,a]),H=(0,f.useCallback)(()=>{m===void 0&&A(``),M({valid:!0}),F(!1),c?.({valid:!0}),l?.(``,``,I),d?.()},[d,c,l,m,I]),U=(0,f.useCallback)(t=>{let r=t.target.value.toUpperCase(),i=n.v(R,r);e===void 0&&O(r),m===void 0&&A(i),s?.(r),N&&z(i,r)},[e,R,s,z,N,m]),W=v||N&&!j.valid,G=y||(N&&!j.valid?j.error:void 0);return(0,p.jsx)(P,{...w,ref:T,type:`text`,inputMode:L.inputMode,value:R,onChange:B,onBlur:V,onClear:H,error:W,errorText:G,helperText:G?void 0:b??`Format: ${L.example}`,placeholder:i?L.placeholder:x??L.placeholder,maxLength:L.maxLength,disabled:C,prepend:i?(0,p.jsx)(`div`,{className:`country-select-wrap`,children:(0,p.jsx)(`select`,{className:`country-select`,value:I,onChange:U,disabled:C,"aria-label":E.postalCodeCountry,children:n.b.map(e=>(0,p.jsx)(`option`,{value:e.value,children:e.value},e.value))})}):{type:`text`,content:I},className:t.t(`input-post-code`,S)})}),X=(0,f.forwardRef)(function({length:n=6,value:r,onChange:i,autoFocus:a=!1,disabled:o=!1,color:s=`primary`,size:c=`md`,error:l=!1,errorText:d,clearable:m=!1,label:h,onClear:g,className:_,...v},y){let b=u.n(),[x,S]=(0,f.useState)(``),C=r===void 0?x:r,w=(0,f.useRef)([]),T=l?`color-error`:`color-${s}`,E=(0,f.useCallback)(e=>{r===void 0&&S(e),i?.(e)},[r,i]),D=(0,f.useCallback)(e=>{let t=Math.max(0,Math.min(e,n-1));w.current[t]?.focus()},[n]);(0,f.useEffect)(()=>{a&&D(0)},[a,D]);let O=(0,f.useCallback)((e,t)=>{if(!/^\d$/.test(t))return;let r=C.split(``);for(;r.length<=e;)r.push(``);r[e]=t,E(r.join(``)),e<n-1&&D(e+1)},[C,n,E,D]),k=(0,f.useCallback)((e,t)=>{if(t.key===`Backspace`){t.preventDefault();let n=C.split(``);n[e]?(n[e]=``,E(n.join(``))):e>0&&(n[e-1]=``,E(n.join(``)),D(e-1))}else t.key===`ArrowLeft`?(t.preventDefault(),e>0&&D(e-1)):t.key===`ArrowRight`&&(t.preventDefault(),e<n-1&&D(e+1))},[C,n,E,D]),A=(0,f.useCallback)(e=>{e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,n);t&&(E(t),D(Math.min(t.length,n-1)))},[n,E,D]),j=(0,f.useCallback)(()=>{E(``),g?.(),D(0)},[D,g,E]);return(0,p.jsxs)(`div`,{ref:y,className:t.t(`otp input`,T,c,o&&`disabled`,_),...v,children:[h&&(0,p.jsx)(`div`,{className:`otp label`,children:h}),(0,p.jsxs)(`div`,{className:`otp control`,children:[(0,p.jsx)(`div`,{className:`otp slots`,onPaste:A,children:Array.from({length:n},(e,n)=>(0,p.jsx)(`input`,{ref:e=>{w.current[n]=e},type:`text`,inputMode:`numeric`,maxLength:1,value:C[n]||``,disabled:o,className:t.t(`otp slot`,C[n]&&`filled`),"aria-label":u.t(b.digitNumber,{index:n+1}),onChange:e=>{O(n,e.target.value.slice(-1))},onKeyDown:e=>k(n,e),onFocus:e=>e.target.select()},n))}),m&&C.length>0&&!o&&(0,p.jsx)(`button`,{type:`button`,className:`otp clear clear-btn-base`,onClick:j,"aria-label":b.clearCode,children:(0,p.jsx)(e.Xi,{})})]}),l&&d&&(0,p.jsx)(`div`,{className:`otp error`,children:d})]})});function ee(e,t,n){return Math.min(n,Math.max(t,e))}function Z(e,t){let n=10**t;return Math.round(e*n)/n}var Q=(0,f.forwardRef)(function({min:e=0,max:n=100,step:r=1,value:i,onChange:a,precision:o=0,marks:s,showInput:c=!0,color:u=`primary`,size:d=`md`,disabled:m=!1,label:h,className:g,..._},v){let[y,b]=(0,f.useState)(e),x=i===void 0?y:i,S=(0,f.useCallback)(t=>{let r=Z(ee(t,e,n),o);i===void 0&&b(r),a?.(r)},[e,n,o,i,a]),C=(0,f.useCallback)(e=>S(e),[S]),w=(0,f.useCallback)(e=>{let t=e.target.value;if(t===``||t===`-`)return;let n=parseFloat(t);isNaN(n)||S(n)},[S]),T=(0,f.useCallback)(()=>{S(x)},[x,S]);return(0,p.jsxs)(`div`,{ref:v,className:t.t(`slider input`,d,m&&`disabled`,g),..._,children:[h&&(0,p.jsx)(`div`,{className:`slider label`,children:h}),(0,p.jsxs)(`div`,{className:`slider row`,children:[(0,p.jsx)(l.t,{min:e,max:n,step:r,value:x,onChange:C,marks:s,color:u,disabled:m}),c&&(0,p.jsx)(`input`,{type:`text`,inputMode:`decimal`,className:t.t(`slider field`,`color-${u}`),value:x,onChange:w,onBlur:T,disabled:m,"aria-label":h||`MSlider value`})]})]})});function te({file:t,shape:n,outputSize:r,quality:i,onCrop:a,onCancel:o}){let c=(0,f.useRef)(null),u=(0,f.useRef)(null),d=(0,f.useRef)(null),[m,h]=(0,f.useState)(``),[g,_]=(0,f.useState)(1),[v,y]=(0,f.useState)({x:0,y:0}),[b,x]=(0,f.useState)(!1),S=(0,f.useRef)({x:0,y:0,ox:0,oy:0});(0,f.useEffect)(()=>{let e=URL.createObjectURL(t);return h(e),()=>URL.revokeObjectURL(e)},[t]),(0,f.useEffect)(()=>{if(!m)return;let e=new Image;e.onload=()=>{d.current=e;let t=280/Math.min(e.width,e.height);_(t),y({x:(280-e.width*t)/2,y:(280-e.height*t)/2})},e.src=m},[m]);let C=(0,f.useCallback)(e=>{e.preventDefault(),x(!0),S.current={x:e.clientX,y:e.clientY,ox:v.x,oy:v.y},e.target.setPointerCapture(e.pointerId)},[v]),w=(0,f.useCallback)(e=>{b&&y({x:S.current.ox+(e.clientX-S.current.x),y:S.current.oy+(e.clientY-S.current.y)})},[b]),T=(0,f.useCallback)(()=>{x(!1)},[]),E=(0,f.useCallback)(e=>{e.preventDefault();let t=e.deltaY>0?.95:1.05,n=Math.max(.1,Math.min(g*t,10));y({x:140-(140-v.x)*(n/g),y:140-(140-v.y)*(n/g)}),_(n)},[g,v]),D=(0,f.useCallback)(e=>{y({x:140-(140-v.x)*(e/g),y:140-(140-v.y)*(e/g)}),_(e)},[g,v]),O=(0,f.useCallback)(()=>{let e=d.current,o=c.current;if(!e||!o)return;o.width=r,o.height=r;let s=o.getContext(`2d`);if(!s)return;let l=r/280;n===`circle`&&(s.beginPath(),s.arc(r/2,r/2,r/2,0,Math.PI*2),s.closePath(),s.clip()),s.drawImage(e,v.x*l,v.y*l,e.width*g*l,e.height*g*l),o.toBlob(e=>{if(!e)return;let n=t.name.replace(/.*\./,``),r=t.name.replace(/\.[^.]+$/,``)+`_cropped.`+n;a(new File([e],r,{type:e.type}))},t.type.startsWith(`image/png`)?`image/png`:`image/jpeg`,i)},[t,v,g,r,i,n,a]),k=Math.round((g-.1)/4.9*100),A=(0,f.useCallback)(e=>{D(.1+e/100*4.9)},[D]);return(0,p.jsxs)(`div`,{className:`crop editor`,children:[(0,p.jsxs)(`div`,{className:`crop hint`,role:`note`,children:[`Drag the image to reposition, scroll or use the slider to zoom, then click `,(0,p.jsx)(`strong`,{children:`Apply`}),` to confirm the crop.`]}),(0,p.jsxs)(`div`,{ref:u,className:`crop viewport ${n}`,onPointerDown:C,onPointerMove:w,onPointerUp:T,onWheel:E,children:[m&&(0,p.jsx)(`img`,{src:m,alt:``,className:`crop image`,draggable:!1,style:{transform:`translate(${v.x}px, ${v.y}px) scale(${g})`,transformOrigin:`0 0`}}),(0,p.jsx)(`div`,{className:`crop overlay ${n}`})]}),(0,p.jsxs)(`div`,{className:`crop zoom`,children:[(0,p.jsx)(e.$n,{className:`crop zoom icon`,"aria-hidden":`true`}),(0,p.jsx)(l.t,{min:0,max:100,step:1,value:k,onChange:A,color:`primary`,className:`crop zoom slider`})]}),(0,p.jsxs)(`div`,{className:`crop actions`,children:[(0,p.jsx)(s.t,{variant:`ghost`,size:`sm`,color:`neutral`,onClick:o,children:`Cancel`}),(0,p.jsx)(s.t,{variant:`filled`,size:`sm`,color:`primary`,onClick:O,children:`Apply`})]}),(0,p.jsx)(`canvas`,{ref:c,style:{display:`none`}})]})}function ne(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function $(e){let t=e.lastIndexOf(`.`);return t>=0?e.slice(t+1).toUpperCase():``}function re(e){return e.type.startsWith(`image/`)}function ie({ext:t}){let n=t.toLowerCase();return n===`pdf`?(0,p.jsx)(e.pi,{className:`file type icon`,"aria-hidden":`true`}):[`png`,`jpg`,`jpeg`,`gif`,`webp`,`svg`].includes(n)?(0,p.jsx)(e.fi,{className:`file type icon`,"aria-hidden":`true`}):[`json`].includes(n)?(0,p.jsx)(e.Gr,{className:`file type icon`,"aria-hidden":`true`}):[`js`,`jsx`,`ts`,`tsx`,`html`,`css`,`php`,`xml`].includes(n)?(0,p.jsx)(e.di,{className:`file type icon`,"aria-hidden":`true`}):[`txt`].includes(n)?(0,p.jsx)(e.mi,{className:`file type icon`,"aria-hidden":`true`}):[`md`].includes(n)?(0,p.jsx)(e.qr,{className:`file type icon`,"aria-hidden":`true`}):[`docs`,`doc`,`docx`].includes(n)?(0,p.jsx)(e.zr,{className:`file type icon`,"aria-hidden":`true`}):[`odt`].includes(n)?(0,p.jsx)(e.Xr,{className:`file type icon`,"aria-hidden":`true`}):[`csv`,`xls`,`xlsx`].includes(n)?(0,p.jsx)(e.oi,{className:`file type icon`,"aria-hidden":`true`}):[`zip`].includes(n)?(0,p.jsx)(e.ci,{className:`file type icon`,"aria-hidden":`true`}):[`rar`,`7z`,`tar`,`gz`].includes(n)?(0,p.jsx)(e.ui,{className:`file type icon`,"aria-hidden":`true`}):[`mp3`,`wav`,`ogg`].includes(n)?(0,p.jsx)(e.Jr,{className:`file type icon`,"aria-hidden":`true`}):[`mp4`,`mov`,`avi`,`mkv`,`webm`].includes(n)?(0,p.jsx)(e.Yr,{className:`file type icon`,"aria-hidden":`true`}):[`exe`,`msi`,`bat`].includes(n)?(0,p.jsx)(e.Br,{className:`file type icon`,"aria-hidden":`true`}):(0,p.jsx)(e._i,{className:`file type icon`,"aria-hidden":`true`})}var ae=(0,f.forwardRef)(function({accept:n,multiple:r=!1,maxSize:i,maxFiles:a,onChange:o,label:s,helperText:c,errorText:l,error:d=!1,disabled:m=!1,color:h=`primary`,size:g=`md`,preview:_=!0,clearable:v=!1,icon:y,placeholder:b=`Drop files here or click to browse`,dropText:x=`Drop files here`,fullWidth:S=!1,crop:C,onClear:w,className:T,...E},D){let O=u.n(),[k,A]=(0,f.useState)(!1),[j,M]=(0,f.useState)([]),[N,P]=(0,f.useState)(``),[F,I]=(0,f.useState)(null),L=(0,f.useRef)(null),R=(0,f.useRef)(0),z=C?typeof C==`boolean`?{shape:`square`,outputSize:256,quality:.92}:{shape:C.shape??`square`,outputSize:C.outputSize??256,quality:C.quality??.92}:null,B=(0,f.useMemo)(()=>j.map(e=>re(e)?URL.createObjectURL(e):null),[j]);(0,f.useEffect)(()=>()=>{B.forEach(e=>{e&&URL.revokeObjectURL(e)})},[B]);let V=(0,f.useCallback)(e=>{let t=Array.from(e);if(n){let e=n.split(`,`).map(e=>e.trim().toLowerCase());t=t.filter(t=>{let n=`.`+t.name.split(`.`).pop()?.toLowerCase(),r=t.type.toLowerCase();return e.some(e=>e===n||e===r||e.endsWith(`/*`)&&r.startsWith(e.slice(0,-1)))})}if(i&&t.filter(e=>e.size>i).length){P(`Max file size: ${ne(i)}`);return}if(a&&t.length>a){P(`Max ${a} file${a>1?`s`:``}`);return}if(P(``),z&&t.length===1&&re(t[0])){I(t[0]);return}M(t),o?.(t)},[n,i,a,o,z]),H=(0,f.useCallback)(e=>{I(null),M([e]),o?.([e])},[o]),U=(0,f.useCallback)(()=>{I(null)},[]),W=(0,f.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),!m&&(R.current++,A(!0))},[m]),G=(0,f.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),R.current--,R.current<=0&&(R.current=0,A(!1))},[]),K=(0,f.useCallback)(e=>{e.preventDefault(),e.stopPropagation()},[]),q=(0,f.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),R.current=0,A(!1),!m&&e.dataTransfer.files.length&&V(e.dataTransfer.files)},[m,V]),J=(0,f.useCallback)(()=>{m||L.current?.click()},[m]),Y=(0,f.useCallback)(e=>{e.target.files?.length&&V(e.target.files)},[V]),X=(0,f.useCallback)(e=>{let t=B[e];t&&URL.revokeObjectURL(t);let n=j.filter((t,n)=>n!==e);M(n),o?.(n)},[j,B,o]),ee=(0,f.useCallback)(()=>{B.forEach(e=>{e&&URL.revokeObjectURL(e)}),I(null),M([]),P(``),L.current&&(L.current.value=``),o?.([]),w?.()},[B,o,w]),Z=l||N,Q=d||!!N;return(0,p.jsxs)(`div`,{ref:D,className:t.t(`file input`,Q?`color-error`:`color-${h}`,g,S&&`full-width`,m&&`disabled`,T),...E,children:[(s||v&&j.length>0&&!m)&&(0,p.jsxs)(`div`,{className:`file header`,children:[s&&(0,p.jsx)(`div`,{className:`file label`,children:s}),v&&j.length>0&&!m&&(0,p.jsx)(`button`,{type:`button`,className:`file clear clear-btn-base`,onClick:ee,"aria-label":O.clearFiles,children:(0,p.jsx)(e.Xi,{"aria-hidden":`true`})})]}),(0,p.jsxs)(`div`,{className:t.t(`file dropzone`,k&&`dragging`,Q&&`error`),onClick:J,onDragEnter:W,onDragLeave:G,onDragOver:K,onDrop:q,role:`button`,tabIndex:m?-1:0,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),J())},"aria-label":s||b,children:[(0,p.jsx)(`input`,{ref:L,type:`file`,accept:n,multiple:r,onChange:Y,tabIndex:-1,className:`file hidden`}),(0,p.jsxs)(`div`,{className:`file content`,children:[y&&(0,p.jsx)(`div`,{className:`file icon`,children:y}),!y&&(0,p.jsx)(e.bi,{className:`file icon default`,"aria-hidden":`true`}),(0,p.jsx)(`div`,{className:`file text`,children:k?x:b}),n&&(0,p.jsx)(`div`,{className:`file accept`,children:n})]})]}),F&&z&&(0,p.jsx)(te,{file:F,shape:z.shape,outputSize:z.outputSize,quality:z.quality,onCrop:H,onCancel:U}),c&&!Q&&(0,p.jsx)(`div`,{className:`file helper`,children:c}),Q&&Z&&(0,p.jsx)(`div`,{className:`file error`,children:Z}),_&&j.length>0&&!F&&(0,p.jsx)(`div`,{className:`file preview`,children:j.map((t,n)=>(0,p.jsxs)(`div`,{className:`file item`,children:[(0,p.jsx)(`div`,{className:`file thumb`,children:B[n]?(0,p.jsx)(`img`,{src:B[n],alt:t.name,className:`file image`}):(0,p.jsx)(ie,{ext:$(t.name)})}),(0,p.jsxs)(`div`,{className:`file info`,children:[(0,p.jsx)(`span`,{className:`file name`,children:t.name}),(0,p.jsx)(`span`,{className:`file size`,children:ne(t.size)})]}),(0,p.jsx)(`button`,{type:`button`,className:`file remove`,onClick:e=>{e.stopPropagation(),X(n)},"aria-label":u.t(O.removeItem,{name:t.name}),children:(0,p.jsx)(e.Xi,{"aria-hidden":`true`})})]},`${t.name}-${n}`))})]})});Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return P}});
|
|
2
|
+
//# sourceMappingURL=inputs-BiN62hgH.cjs.map
|