{"version":3,"sources":["webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/InputMask.js"],"names":["isSymbol","str","match","isLowerCaseLetter","isUpperCaseLetter","isLetter","shouldThisInvalidDigitBeHere","digit","mask","numericValidation","digitMask","key","field","hasAttribute","concatSymbols","splitMask","lastDigitPosition","symbols","i","length","concat","value","validateDigit","isFullValidation","undefined","isTextSelected","selectionStart","selectionEnd","validateMask","event","split","preventDefault","e","getFinalMaskSymbols","finalSymbols","reverseSplitMask","reverse","forEach","push","Error","fullyValidateMask","validatedMask","index","join","insertSymbol","fieldValue","symbol","splitValue","firstHalf","substr","secondHalf","splice","addSymbols","fullyValidateChange","getCaretPos","range","bookmark","caretPos","document","selection","createRange","getBookmark","charCodeAt","setSelectionRange","setCaretPosition","createTextRange","move","select","focus","validateBackspaceButton","deletionType","caretPosition","deletedCharacter","InputMask","onKeypress","onChange","onInput","inputType","onPaste","clipboardData","window","getData","validate"],"mappings":";;;;;;;;;;AAAA;AAAA;;;;;;;;AAQA;;;;;AAKA,SAASA,QAAT,CAAkBC,GAAlB,EAAuB;AACnB,SAAO,CAAC,CAACA,GAAG,CAACC,KAAJ,CAAU,qBAAV,CAAT;AACH;AAED;;;;;;;AAKA,SAASC,iBAAT,CAA2BF,GAA3B,EAAgC;AAC5B,SAAO,CAAC,CAACA,GAAG,CAACC,KAAJ,CAAU,OAAV,CAAT;AACH;AAED;;;;;;;AAKA,SAASE,iBAAT,CAA2BH,GAA3B,EAAgC;AAC5B,SAAO,CAAC,CAACA,GAAG,CAACC,KAAJ,CAAU,OAAV,CAAT;AACH;AAED;;;;;;;AAKA,SAASG,QAAT,CAAkBJ,GAAlB,EAAuB;AACnB;AACA,SAAO,CAAC,CAACA,GAAG,CAACC,KAAJ,CAAU,WAAV,CAAT;AACH;AAED;;;;;;;;AAMA,SAASI,4BAAT,CAAsCC,KAAtC,EAA6CC,IAA7C,EAAmD;AAC/C,SAAOD,KAAK,KAAKC,IAAjB;AACH;AAED;;;;;;;;;AAOA,SAASC,iBAAT,CAA2BC,SAA3B,EAAsCC,GAAtC,EAA2CC,KAA3C,EAAkD;AAC9C,MAAIA,KAAK,CAACC,YAAN,CAAmB,kBAAnB,CAAJ,EAA4C;AACxC,WAAQ,CAACF,GAAD,IAAQD,SAAhB;AACH,GAFD,MAEO,IAAI,CAACC,GAAD,IAAQD,SAAZ,EAAuB;AAC1B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;;;;;;;;;AAOA,SAASI,aAAT,CAAuBF,KAAvB,EAA8BG,SAA9B,EAAyCC,iBAAzC,EAA4D;AACxD,MAAIC,OAAO,GAAG,EAAd;;AACA,OAAK,IAAIC,CAAC,GAAGF,iBAAb,EAAgCE,CAAC,GAAGH,SAAS,CAACI,MAA9C,EAAsDD,CAAC,EAAvD,EAA2D;AACvD,QAAIlB,QAAQ,CAACe,SAAS,CAACG,CAAD,CAAV,CAAZ,EAA4B;AACxBD,aAAO,GAAGA,OAAO,CAACG,MAAR,CAAeL,SAAS,CAACG,CAAD,CAAxB,CAAV;AACH,KAFD,MAEO;AACH;AACH;AACJ;;AAED,SAAON,KAAK,CAACS,KAAN,CAAYD,MAAZ,CAAmBH,OAAnB,CAAP;AACH;AAED;;;;;;;;;;;AASA,SAASK,aAAT,CAAuBP,SAAvB,EAAkCC,iBAAlC,EAAqDL,GAArD,EAA0DC,KAA1D,EAAiEW,gBAAgB,GAAG,KAApF,EAA2F;AACvF,QAAMb,SAAS,GAAGK,SAAS,CAACC,iBAAD,CAA3B;;AAEA,MAAIL,GAAG,KAAK,GAAZ,EAAiB;AACb,WAAO,KAAP;AACH;;AAED,MAAIX,QAAQ,CAACU,SAAD,CAAZ,EAAyB;AACrB,QAAI,CAACa,gBAAL,EAAuB;AACnBX,WAAK,CAACS,KAAN,GAAcP,aAAa,CAACF,KAAD,EAAQG,SAAR,EAAmBC,iBAAnB,CAA3B;AACA,aAAOM,aAAa,CAACP,SAAD,EAAYH,KAAK,CAACS,KAAN,CAAYF,MAAxB,EAAgCR,GAAhC,EAAqCC,KAArC,CAApB;AACH;;AACD,WAAOU,aAAa,CAACP,SAAD,EAAaC,iBAAiB,GAAG,CAAjC,EAAqCL,GAArC,EAA0CC,KAA1C,EAAiD,IAAjD,CAApB;AACH;;AAED,MAAI,CAACF,SAAD,IAAcA,SAAS,KAAK,GAAhC,EAAqC;AACjC,WAAOD,iBAAiB,CAACC,SAAD,EAAYC,GAAZ,EAAiBC,KAAjB,CAAxB;AACH;;AACD,MAAIR,iBAAiB,CAACM,SAAD,CAAjB,IAAgCN,iBAAiB,CAACO,GAAD,CAArD,EAA4D;AACxD,WAAO,IAAP;AACH;;AACD,MAAIR,iBAAiB,CAACO,SAAD,CAAjB,IAAgCP,iBAAiB,CAACQ,GAAD,CAArD,EAA4D;AACxD,WAAO,IAAP;AACH;;AACD,MAAID,SAAS,KAAK,GAAd,IAAqBL,QAAQ,CAACM,GAAD,CAAjC,EAAwC;AACpC,WAAO,IAAP;AACH;;AACD,MAAID,SAAS,KAAK,GAAlB,EAAuB;AACnB,WAAO,IAAP;AACH;;AAED,SAAOc,SAAP;AACH;AAED;;;;;;;;AAMA,SAASC,cAAT,CAAwBb,KAAxB,EAA+B;AAC3B,MAAI,OAAOA,KAAK,CAACc,cAAb,KAAgC,QAApC,EAA8C;AAC1C,WAAOd,KAAK,CAACc,cAAN,KAAyB,CAAzB,IAA8Bd,KAAK,CAACe,YAAN,KAAuBf,KAAK,CAACS,KAAN,CAAYF,MAAxE;AACH;;AACD,SAAO,KAAP;AACH;AAED;;;;;;;;;AAOA,SAASS,YAAT,CAAsBhB,KAAtB,EAA6BJ,IAA7B,EAAmCqB,KAAnC,EAA0C;AACtC,QAAMb,iBAAiB,GAAGJ,KAAK,CAACS,KAAN,CAAYF,MAAtC;AACA,QAAMJ,SAAS,GAAGP,IAAI,CAACsB,KAAL,CAAW,EAAX,CAAlB;;AAEA,MAAI;AACA,QAAI,CAACR,aAAa,CAACP,SAAD,EAAYC,iBAAZ,EAA+Ba,KAAK,CAAClB,GAArC,EAA0CC,KAA1C,CAAlB,EAAoE;AAChEiB,WAAK,CAACE,cAAN;AACH;AACJ,GAJD,CAIE,OAAOC,CAAP,EAAU;AACRH,SAAK,CAACE,cAAN;AACH;AACJ;AAED;;;;;;;AAKA,SAASE,mBAAT,CAA6BzB,IAA7B,EAAmC;AAC/B,QAAM0B,YAAY,GAAG,EAArB;AACA,QAAMC,gBAAgB,GAAG3B,IAAI,CAACsB,KAAL,CAAW,EAAX,EAAeM,OAAf,EAAzB;;AACA,MAAI;AACAD,oBAAgB,CAACE,OAAjB,CAAyB9B,KAAK,IAAI;AAC9B,UAAIP,QAAQ,CAACO,KAAD,CAAZ,EAAqB;AACjB2B,oBAAY,CAACI,IAAb,CAAkB/B,KAAlB;AACH,OAFD,MAEO;AACH,cAAM,IAAIgC,KAAJ,CAAU,8BAAV,CAAN;AACH;AACJ,KAND;AAOH,GARD,CAQE,OAAOP,CAAP,EAAU,CAAG,CAXgB,CAWf;;;AAEhB,SAAOE,YAAP;AACH;AAED;;;;;;;;AAMA,SAASM,iBAAT,CAA2B5B,KAA3B,EAAkCJ,IAAlC,EAAwC;AACpC,MAAIiC,aAAa,GAAG,EAApB;AACA,QAAMP,YAAY,GAAGD,mBAAmB,CAACzB,IAAD,CAAxC;;AAEA,MAAI;AACAI,SAAK,CAACS,KAAN,CAAYS,KAAZ,CAAkB,EAAlB,EAAsBO,OAAtB,CAA8B,CAAC9B,KAAD,EAAQmC,KAAR,KAAkB;AAC5C,UAAIpB,aAAa,CAACd,IAAI,CAACsB,KAAL,CAAW,EAAX,CAAD,EAAiBY,KAAjB,EAAwBnC,KAAxB,EAA+BK,KAA/B,EAAsC,IAAtC,CAAjB,EAA8D;AAC1D6B,qBAAa,GAAGA,aAAa,CAACrB,MAAd,CAAqBb,KAArB,CAAhB;AACA,eAAOqB,YAAP;AACH;;AACD,UAAItB,4BAA4B,CAACC,KAAD,EAAQC,IAAI,CAACkC,KAAD,CAAZ,CAAhC,EAAsD;AAClDD,qBAAa,GAAGA,aAAa,CAACrB,MAAd,CAAqBb,KAArB,CAAhB;AACA,eAAOqB,YAAP;AACH;;AACD,YAAM,IAAIW,KAAJ,CAAU,eAAV,CAAN;AACH,KAVD;AAWH,GAZD,CAYE,OAAOP,CAAP,EAAU;AACRpB,SAAK,CAACS,KAAN,GAAcoB,aAAa,GAAGP,YAAY,CAACS,IAAb,CAAkB,EAAlB,CAA9B;AACA,WAAO/B,KAAK,CAACS,KAAb;AACH;;AAED,SAAOG,SAAP;AACH;AAED;;;;;;;;;AAOA,SAASoB,YAAT,CAAsBC,UAAtB,EAAkCH,KAAlC,EAAyCI,MAAzC,EAAiD;AAC7C,QAAMC,UAAU,GAAGF,UAAU,CAACf,KAAX,CAAiB,EAAjB,CAAnB;AACA,QAAMkB,SAAS,GAAGH,UAAU,CAACI,MAAX,CAAkB,CAAlB,EAAqBP,KAArB,CAAlB;AACA,QAAMQ,UAAU,GAAGH,UAAU,CAACI,MAAX,CAAkBT,KAAlB,EAAyBC,IAAzB,CAA8B,EAA9B,CAAnB;AAEA,SAAOK,SAAS,GAAGF,MAAZ,GAAqBI,UAA5B;AACH;AAED;;;;;;;;AAMA,SAASE,UAAT,CAAoBxC,KAApB,EAA2BJ,IAA3B,EAAiC;AAC7B,MAAII,KAAK,CAACS,KAAN,CAAYF,MAAZ,KAAuB,CAA3B,EAA8B;AAC1B,WAAOP,KAAK,CAACS,KAAb;AACH;;AAED,QAAMN,SAAS,GAAGP,IAAI,CAACsB,KAAL,CAAW,EAAX,CAAlB;AACA,MAAIiB,UAAU,GAAGnC,KAAK,CAACS,KAAN,CAAYS,KAAZ,CAAkB,EAAlB,CAAjB;;AAEA,MAAI;AACAf,aAAS,CAACsB,OAAV,CAAkB,CAAC9B,KAAD,EAAQmC,KAAR,KAAkB;AAChC,UAAIA,KAAK,GAAGK,UAAU,CAAC5B,MAAvB,EAA+B;AAC3B,cAAM,IAAIoB,KAAJ,CAAU,iCAAV,CAAN;AACH;;AACD,UAAIvC,QAAQ,CAACO,KAAD,CAAR,IAAmBwC,UAAU,CAACL,KAAD,CAAV,KAAsBnC,KAA7C,EAAoD;AAChDwC,kBAAU,GAAGH,YAAY,CAACG,UAAU,CAACJ,IAAX,CAAgB,EAAhB,CAAD,EAAsBD,KAAtB,EAA6BnC,KAA7B,CAAZ,CAAgDuB,KAAhD,CAAsD,EAAtD,CAAb;AACH;AACJ,KAPD;AAQH,GATD,CASE,OAAOE,CAAP,EAAU,CAAG,CAjBc,CAiBb;;;AAEhBpB,OAAK,CAACS,KAAN,GAAc0B,UAAU,CAACJ,IAAX,CAAgB,EAAhB,CAAd;AACA,SAAOnB,SAAP;AACH;AAED;;;;;;;AAKA,SAAS6B,mBAAT,CAA6BzC,KAA7B,EAAoCJ,IAApC,EAA0C;AACtC4C,YAAU,CAACxC,KAAD,EAAQJ,IAAR,CAAV;AACAgC,mBAAiB,CAAC5B,KAAD,EAAQJ,IAAR,CAAjB;AACH;AAED;;;;;;;AAKA,SAAS8C,WAAT,CAAqB1C,KAArB,EAA4B;AACxB,MAAI2C,KAAJ;AACA,MAAIC,QAAJ;AACA,MAAIC,QAAJ,CAHwB,CAKxB;;AACA,MAAIC,QAAQ,CAACC,SAAT,IAAsBD,QAAQ,CAACC,SAAT,CAAmBC,WAA7C,EAA0D;AACtD;AACAL,SAAK,GAAGG,QAAQ,CAACC,SAAT,CAAmBC,WAAnB,EAAR;AACAJ,YAAQ,GAAGD,KAAK,CAACM,WAAN,EAAX;AACAJ,YAAQ,GAAGD,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB,CAApC;AACH,GALD,MAKO,IAAI,OAAOlD,KAAK,CAACmD,iBAAb,KAAmC,UAAvC,EAAmD;AACtDN,YAAQ,GAAG7C,KAAK,CAACc,cAAjB;AACH;;AAED,SAAO+B,QAAP;AACH;AAED;;;;;;;;AAMA,SAASO,gBAAT,CAA0BpD,KAA1B,EAAiC6C,QAAjC,EAA2C;AACvC,MAAI,OAAO7C,KAAK,CAACqD,eAAb,KAAiC,UAArC,EAAiD;AAC7C,UAAMV,KAAK,GAAG3C,KAAK,CAACqD,eAAN,EAAd;AAEAV,SAAK,CAACW,IAAN,CAAW,WAAX,EAAwBT,QAAxB;AACAF,SAAK,CAACY,MAAN;AACH,GALD,MAKO,IAAIvD,KAAK,CAACc,cAAV,EAA0B;AAC7Bd,SAAK,CAACwD,KAAN;AACAxD,SAAK,CAACmD,iBAAN,CAAwBN,QAAxB,EAAkCA,QAAlC;AACH,GAHM,MAGA;AACH7C,SAAK,CAACwD,KAAN;AACH;AACJ;AAED;;;;;;;;;AAOA,SAASC,uBAAT,CAAiCzD,KAAjC,EAAwCJ,IAAxC,EAA8C8D,YAAY,GAAG,WAA7D,EAA0E;AACtE,QAAMC,aAAa,GAAGjB,WAAW,CAAC1C,KAAD,CAAjC;;AAEA,MAAI,CAAC2D,aAAL,EAAoB;AAChB;AACH;;AAED,QAAMC,gBAAgB,GAAGhE,IAAI,CAAC+D,aAAD,CAA7B;;AAEA,MAAIvE,QAAQ,CAACwE,gBAAD,CAAR,IAA8B5D,KAAK,CAACS,KAAN,CAAYS,KAAZ,CAAkB,EAAlB,EAAsByC,aAAtB,CAAlC,EAAwE;AACpE3D,SAAK,CAACS,KAAN,GAAcuB,YAAY,CAAChC,KAAK,CAACS,KAAP,EAAckD,aAAd,EAA6BC,gBAA7B,CAA1B;;AAEA,YAAQF,YAAR;AACI,WAAK,WAAL;AACIN,wBAAgB,CAACpD,KAAD,EAAQ2D,aAAR,CAAhB;AACA;;AACJ,WAAK,QAAL;AACIP,wBAAgB,CAACpD,KAAD,EAAQ2D,aAAa,GAAG,CAAxB,CAAhB;AACA;;AACJ;AACI;AARR;AAUH;AACJ;AAED;;;;;;AAIA,MAAME,SAAN,CAAgB;AACZ;;;;;;AAMAC,YAAU,CAAC9D,KAAD,EAAQJ,IAAR,EAAcqB,KAAd,EAAqB;AAC3B,QAAIJ,cAAc,CAACb,KAAD,CAAlB,EAA2B;AACvBA,WAAK,CAACS,KAAN,GAAc,EAAd;AACH;;AAEDO,gBAAY,CAAChB,KAAD,EAAQJ,IAAR,EAAcqB,KAAd,CAAZ;AACH;AAED;;;;;;;AAKA8C,UAAQ,CAAC/D,KAAD,EAAQJ,IAAR,EAAc;AAClB6C,uBAAmB,CAACzC,KAAD,EAAQJ,IAAR,CAAnB;AACH;AAED;;;;;;;;AAMAoE,SAAO,CAAChE,KAAD,EAAQJ,IAAR,EAAcqB,KAAd,EAAqB;AACxB;AACA,YAAQA,KAAK,CAACgD,SAAd;AACI,WAAK,sBAAL;AACIR,+BAAuB,CAACzD,KAAD,EAAQJ,IAAR,EAAc,QAAd,CAAvB;AACA;;AACJ,WAAK,uBAAL;AACI6D,+BAAuB,CAACzD,KAAD,EAAQJ,IAAR,CAAvB;AACA;;AACJ,WAAK,gBAAL;AACI6C,2BAAmB,CAACzC,KAAD,EAAQJ,IAAR,CAAnB;AACA;;AACJ;AACI;AAXR;AAaH;AAED;;;;;;;;AAMAsE,SAAO,CAAClE,KAAD,EAAQJ,IAAR,EAAcqB,KAAd,EAAqB;AACxB,QAAI,CAACjB,KAAK,CAACC,YAAN,CAAmB,cAAnB,CAAL,EAAyC;AACrC;AACAD,WAAK,CAACS,KAAN,IAAe,CAACQ,KAAK,CAACkD,aAAN,IAAuBC,MAAM,CAACD,aAA/B,EAA8CE,OAA9C,CAAsD,MAAtD,CAAf;AACA5B,yBAAmB,CAACzC,KAAD,EAAQJ,IAAR,CAAnB;AACH;AACJ;AAED;;;;;;;AAKA0E,UAAQ,CAACtE,KAAD,EAAQJ,IAAR,EAAc;AAClB,QAAII,KAAK,CAACS,KAAV,EAAiB;AACbgC,yBAAmB,CAACzC,KAAD,EAAQJ,IAAR,CAAnB;AACH;AACJ;;AAtEW;;AAyEDiE,wEAAf,E","file":"inputmask.bundle.js","sourcesContent":["/**\n * @description Original library `supermask.js` was taken from\n * [this library](https://github.com/ViniChab/supermask.js).\n * It was re-factored to conform Widget's appropach, because OOTB implementation is too much different\n * form widgets useage concepts.\n * Underlying original logic was not touched, just formatted for project specific linter rules.\n */\n\n/**\n * @param {string} str - string to check\n * @description To check if string is symbol\n * @returns {boolean} result\n */\nfunction isSymbol(str) {\n return !!str.match(/(?![Ã])(?![Á])[_\\W]/);\n}\n\n/**\n * @param {string} str - string to check\n * @description To check if string is lowercase letter\n * @returns {boolean} result\n */\nfunction isLowerCaseLetter(str) {\n return !!str.match(/[a-z]/);\n}\n\n/**\n * @param {string} str - string to check\n * @description To check if string is uppercase letter\n * @returns {boolean} result\n */\nfunction isUpperCaseLetter(str) {\n return !!str.match(/[A-Z]/);\n}\n\n/**\n * @param {string} str - string to check\n * @description To check if string is letter\n * @returns {boolean} result\n */\nfunction isLetter(str) {\n // eslint-disable-next-line\n return !!str.match(/[a-z\\A-Z]/);\n}\n\n/**\n * @param digit\n * @param mask\n * @description To check if digit should be here according to mask\n * @returns {boolean} result\n */\nfunction shouldThisInvalidDigitBeHere(digit, mask) {\n return digit === mask;\n}\n\n/**\n * @param digitMask\n * @param key\n * @param {HTMLInputElement} field - masked field\n * @description Will validate a number in a specific position\n * @returns {boolean} result\n */\nfunction numericValidation(digitMask, key, field) {\n if (field.hasAttribute('inverted-numbers')) {\n return (+key >= digitMask);\n } else if (+key <= digitMask) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @param splitMask\n * @param {number} lastDigitPosition\n * @description Function to concat symbols at the end of mask\n * @returns {string} result\n */\nfunction concatSymbols(field, splitMask, lastDigitPosition) {\n let symbols = '';\n for (let i = lastDigitPosition; i < splitMask.length; i++) {\n if (isSymbol(splitMask[i])) {\n symbols = symbols.concat(splitMask[i]);\n } else {\n break;\n }\n }\n\n return field.value.concat(symbols);\n}\n\n/**\n * @param splitMask\n * @param {number} lastDigitPosition - last digit position\n * @param key\n * @param {HTMLInputElement} field - masked field\n * @param isFullValidation\n * @description Will validate a specific digit of the mask\n * @returns {boolean|undefined} result\n */\nfunction validateDigit(splitMask, lastDigitPosition, key, field, isFullValidation = false) {\n const digitMask = splitMask[lastDigitPosition];\n\n if (key === ' ') {\n return false;\n }\n\n if (isSymbol(digitMask)) {\n if (!isFullValidation) {\n field.value = concatSymbols(field, splitMask, lastDigitPosition);\n return validateDigit(splitMask, field.value.length, key, field);\n }\n return validateDigit(splitMask, (lastDigitPosition + 1), key, field, true);\n }\n\n if (+digitMask || digitMask === '0') {\n return numericValidation(digitMask, key, field);\n }\n if (isUpperCaseLetter(digitMask) && isUpperCaseLetter(key)) {\n return true;\n }\n if (isLowerCaseLetter(digitMask) && isLowerCaseLetter(key)) {\n return true;\n }\n if (digitMask === 'Á' && isLetter(key)) {\n return true;\n }\n if (digitMask === 'Ã') {\n return true;\n }\n\n return undefined;\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @description Function to check if value in input field is fully selected.\n * This is useful when changing text input after either `tab` or `shift+tab` from another field\n * @returns {boolean} result\n */\nfunction isTextSelected(field) {\n if (typeof field.selectionStart === 'number') {\n return field.selectionStart === 0 && field.selectionEnd === field.value.length;\n }\n return false;\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @param mask\n * @param {Event} event Event object\n * @description Function to validate mask on type, it'll also add symbols\n * @returns {void}\n */\nfunction validateMask(field, mask, event) {\n const lastDigitPosition = field.value.length;\n const splitMask = mask.split('');\n\n try {\n if (!validateDigit(splitMask, lastDigitPosition, event.key, field)) {\n event.preventDefault();\n }\n } catch (e) {\n event.preventDefault();\n }\n}\n\n/**\n * @param mask\n * @description Function used to catch any symbols a mask might have at the end (such as AAA---)\n * @returns {Array} result\n */\nfunction getFinalMaskSymbols(mask) {\n const finalSymbols = [];\n const reverseSplitMask = mask.split('').reverse();\n try {\n reverseSplitMask.forEach(digit => {\n if (isSymbol(digit)) {\n finalSymbols.push(digit);\n } else {\n throw new Error('Reached a non-symbolic value');\n }\n });\n } catch (e) { } // eslint-disable-line\n\n return finalSymbols;\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @param mask\n * @description Function to validate every digit\n * @returns {string|undefined} result\n */\nfunction fullyValidateMask(field, mask) {\n let validatedMask = '';\n const finalSymbols = getFinalMaskSymbols(mask);\n\n try {\n field.value.split('').forEach((digit, index) => {\n if (validateDigit(mask.split(''), index, digit, field, true)) {\n validatedMask = validatedMask.concat(digit);\n return validateMask;\n }\n if (shouldThisInvalidDigitBeHere(digit, mask[index])) {\n validatedMask = validatedMask.concat(digit);\n return validateMask;\n }\n throw new Error('invalid input');\n });\n } catch (e) {\n field.value = validatedMask + finalSymbols.join('');\n return field.value;\n }\n\n return undefined;\n}\n\n/**\n * @param {string} fieldValue\n * @param index\n * @param symbol\n * @description Function used to insert symbol at specific position\n * @returns {string} result\n */\nfunction insertSymbol(fieldValue, index, symbol) {\n const splitValue = fieldValue.split('');\n const firstHalf = fieldValue.substr(0, index);\n const secondHalf = splitValue.splice(index).join('');\n\n return firstHalf + symbol + secondHalf;\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @param mask\n * @description Will add every symbol the mask should have\n * @returns {string|undefined} result\n */\nfunction addSymbols(field, mask) {\n if (field.value.length === 0) {\n return field.value;\n }\n\n const splitMask = mask.split('');\n let splitValue = field.value.split('');\n\n try {\n splitMask.forEach((digit, index) => {\n if (index > splitValue.length) {\n throw new Error('mask is bigger than input value');\n }\n if (isSymbol(digit) && splitValue[index] !== digit) {\n splitValue = insertSymbol(splitValue.join(''), index, digit).split('');\n }\n });\n } catch (e) { } // eslint-disable-line\n\n field.value = splitValue.join('');\n return undefined;\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @param mask\n * @description Capsule function to validate field value after focusout\n */\nfunction fullyValidateChange(field, mask) {\n addSymbols(field, mask);\n fullyValidateMask(field, mask);\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @description Will get the carret position\n * @returns {number|null|undefined} result\n */\nfunction getCaretPos(field) {\n let range;\n let bookmark;\n let caretPos;\n\n // @ts-ignore\n if (document.selection && document.selection.createRange) {\n // @ts-ignore\n range = document.selection.createRange();\n bookmark = range.getBookmark();\n caretPos = bookmark.charCodeAt(2) - 2;\n } else if (typeof field.setSelectionRange === 'function') {\n caretPos = field.selectionStart;\n }\n\n return caretPos;\n}\n\n/**\n * @param field - masked field\n * @param {number} caretPos - caret position\n * @description Will set the carret position\n * @returns {void}\n */\nfunction setCaretPosition(field, caretPos) {\n if (typeof field.createTextRange === 'function') {\n const range = field.createTextRange();\n\n range.move('character', caretPos);\n range.select();\n } else if (field.selectionStart) {\n field.focus();\n field.setSelectionRange(caretPos, caretPos);\n } else {\n field.focus();\n }\n}\n\n/**\n * @param {HTMLInputElement} field - masked field\n * @param mask\n * @param {string} deletionType - deletion type\n * @description Function to make backspace unable to delete a symbol at the middle of the field\n * @returns {void}\n */\nfunction validateBackspaceButton(field, mask, deletionType = 'backspace') {\n const caretPosition = getCaretPos(field);\n\n if (!caretPosition) {\n return;\n }\n\n const deletedCharacter = mask[caretPosition];\n\n if (isSymbol(deletedCharacter) && field.value.split('')[caretPosition]) {\n field.value = insertSymbol(field.value, caretPosition, deletedCharacter);\n\n switch (deletionType) {\n case 'backspace':\n setCaretPosition(field, caretPosition);\n break;\n case 'delete':\n setCaretPosition(field, caretPosition + 1);\n break;\n default:\n break;\n }\n }\n}\n\n/**\n * @description Class represents an input mask.\n * Originally was taken from [this library](https://github.com/ViniChab/supermask.js).\n */\nclass InputMask {\n /**\n * @description On keypress logic\n * @param {HTMLInputElement} field - masked field\n * @param {string} mask - current field mask\n * @param {Event} event - target event\n */\n onKeypress(field, mask, event) {\n if (isTextSelected(field)) {\n field.value = '';\n }\n\n validateMask(field, mask, event);\n }\n\n /**\n * @description On change logic\n * @param {HTMLInputElement} field - masked field\n * @param {string} mask - current field mask\n */\n onChange(field, mask) {\n fullyValidateChange(field, mask);\n }\n\n /**\n * @description On change logic\n * @param {HTMLInputElement} field - masked field\n * @param {string} mask - current field mask\n * @param {Event} event Event object\n */\n onInput(field, mask, event) {\n // @ts-ignore\n switch (event.inputType) {\n case 'deleteContentForward':\n validateBackspaceButton(field, mask, 'delete');\n break;\n case 'deleteContentBackward':\n validateBackspaceButton(field, mask);\n break;\n case 'insertFromDrop':\n fullyValidateChange(field, mask);\n break;\n default:\n break;\n }\n }\n\n /**\n * @description On paste logic\n * @param {HTMLInputElement} field - masked field\n * @param {string} mask - current field mask\n * @param {Event} event - target event\n */\n onPaste(field, mask, event) {\n if (!field.hasAttribute('blockpasting')) {\n // @ts-ignore\n field.value += (event.clipboardData || window.clipboardData).getData('text');\n fullyValidateChange(field, mask);\n }\n }\n\n /**\n * @description Validate applied change. Might be triggered on form definition reloaded, etc\n * @param {HTMLInputElement} field - masked field\n * @param {string} mask - current field mask\n */\n validate(field, mask) {\n if (field.value) {\n fullyValidateChange(field, mask);\n }\n }\n}\n\nexport default InputMask;\n"],"sourceRoot":""}