{"version":3,"sources":["webpack:///./src/pages/pageSignIn.ts","webpack:///./src/helpers/formatPhoneNumber.ts"],"names":["btnQr","btnNext","page","setCountries","countries","countriesList","filter","country","pFlags","hidden","sort","a","b","name","default_name","localeCompare","addEventListener","liMap","Map","lastCountrySelected","lastCountryCodeSelected","inputWrapper","document","createElement","classList","add","countryInputField","label","container","countryInput","input","selectWrapper","arrowDown","append","selectList","appendChild","initSelect","forEach","c","emoji","iso2","liArr","country_codes","countryCode","li","wrapped","wrapEmojiText","spanEmoji","innerHTML","el","dataset","defaultName","span","innerText","country_code","push","set","e","button","target","selectCountryByTarget","childNodes","phoneCode","querySelector","replace","find","_countryCode","telInputField","value","lastValue","hidePicker","setTimeout","telEl","focus","hideTimeout","get","style","display","clearTimeout","undefined","remove","offsetWidth","select","pageEl","parentElement","element","position","margin","mouseDownHandlerAttached","onMouseDown","capture","removeEventListener","window","key","ctrlKey","_value","toLowerCase","matches","names","Boolean","abbr","split","word","test","map","join","length","good","str","indexOf","cancelBubble","preventDefault","blur","onInput","formatted","loadLottieWorkers","code","countryName","visibility","onSubmit","signedCheckboxField","text","withRipple","checked","keepSigned","pushToState","toggleStorage","getState","then","state","storage","isAvailable","toggle","phone_number","invokeApi","api_id","id","api_hash","hash","settings","_","m","default","mount","Object","assign","catch","err","type","setError","console","error","h4","subtitle","nearestDcResult","langPack","getFromCache","getLangPack","lang_code","dcs","Set","done","this_dc","promise","nearest_dc","getNetworker","Promise","resolve","dcId","delete","_dcs","g","shift","dbKey","finally","removeAttribute","prefixes","maxPrefixLength","setPrefix","prefix","Math","max","formatPhoneNumber","originalStr","size","prefixCountry","slice","i","leftPattern","patterns","searchForPattern","pattern","mostMatchedPatternMatches","mostMatchedPattern","_pattern","patternMatches","k","min","symbol","idx"],"mappings":"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","file":"25.dcbbd29bad085f151e64.chunk.js","sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { putPreloader } from \"../components/misc\";\r\nimport Scrollable from '../components/scrollable';\r\nimport appStateManager from \"../lib/appManagers/appStateManager\";\r\nimport apiManager from \"../lib/mtproto/mtprotoworker\";\r\nimport { RichTextProcessor } from '../lib/richtextprocessor';\r\nimport Page from \"./page\";\r\nimport InputField from \"../components/inputField\";\r\nimport CheckboxField from \"../components/checkboxField\";\r\nimport Button from \"../components/button\";\r\nimport fastSmoothScroll from \"../helpers/fastSmoothScroll\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\nimport App from \"../config/app\";\r\nimport I18n, { _i18n, i18n } from \"../lib/langPack\";\r\nimport lottieLoader from \"../lib/rlottie/lottieLoader\";\r\nimport { ripple } from \"../components/ripple\";\r\nimport findUpTag from \"../helpers/dom/findUpTag\";\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport { randomLong } from \"../helpers/random\";\r\nimport AppStorage from \"../lib/storage\";\r\nimport CacheStorageController from \"../lib/cacheStorage\";\r\nimport pageSignQR from \"./pageSignQR\";\r\nimport getLanguageChangeButton from \"../components/languageChangeButton\";\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport toggleDisability from \"../helpers/dom/toggleDisability\";\r\nimport sessionStorage from \"../lib/sessionStorage\";\r\nimport { DcAuthKey } from \"../types\";\r\nimport placeCaretAtEnd from \"../helpers/dom/placeCaretAtEnd\";\r\nimport { HelpCountry, HelpCountryCode } from \"../layer\";\r\nimport { getCountryEmoji } from \"../vendor/emoji\";\r\nimport simulateEvent from \"../helpers/dom/dispatchEvent\";\r\nimport stateStorage from \"../lib/stateStorage\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport TelInputField from \"../components/telInputField\";\r\nimport IS_EMOJI_SUPPORTED from \"../environment/emojiSupport\";\r\n\r\n//import _countries from '../countries_pretty.json';\r\nlet btnNext: HTMLButtonElement = null, btnQr: HTMLButtonElement;\r\n\r\nlet onFirstMount = () => {\r\n /* if(Modes.test) {\r\n Countries.push({\r\n _: 'help.country',\r\n default_name: 'Test Country',\r\n country_codes: [{\r\n _: 'help.countryCode',\r\n country_code: '999 66',\r\n patterns: ['999 66 XXX XX']\r\n }],\r\n iso2: 'KK'\r\n });\r\n \r\n console.log('Added test country to list!');\r\n } */\r\n\r\n //const countries: Country[] = _countries.default.filter(c => c.emoji);\r\n // const countries: Country[] = Countries.filter(c => c.emoji).sort((a, b) => a.name.localeCompare(b.name));\r\n // const countries = I18n.countriesList.filter(country => !country.pFlags?.hidden);\r\n const setCountries = () => {\r\n countries = I18n.countriesList\r\n .filter(country => !country.pFlags?.hidden)\r\n .sort((a, b) => (a.name || a.default_name).localeCompare(b.name || b.default_name));\r\n };\r\n let countries: HelpCountry.helpCountry[]; \r\n\r\n setCountries();\r\n\r\n rootScope.addEventListener('language_change', () => {\r\n setCountries();\r\n });\r\n\r\n const liMap: Map = new Map();\r\n\r\n let lastCountrySelected: HelpCountry, lastCountryCodeSelected: HelpCountryCode;\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const countryInputField = new InputField({\r\n label: 'Login.CountrySelectorLabel',\r\n name: randomLong()\r\n });\r\n\r\n countryInputField.container.classList.add('input-select');\r\n\r\n const countryInput = countryInputField.input;\r\n // countryInput.autocomplete = randomLong();\r\n\r\n const selectWrapper = document.createElement('div');\r\n selectWrapper.classList.add('select-wrapper', 'z-depth-3', 'hide');\r\n\r\n const arrowDown = document.createElement('span');\r\n arrowDown.classList.add('arrow', 'arrow-down');\r\n countryInputField.container.append(arrowDown);\r\n\r\n const selectList = document.createElement('ul');\r\n selectWrapper.appendChild(selectList);\r\n\r\n const scroll = new Scrollable(selectWrapper);\r\n\r\n let initSelect = () => {\r\n initSelect = null;\r\n\r\n countries.forEach((c) => {\r\n const emoji = getCountryEmoji(c.iso2);\r\n\r\n const liArr: Array = [];\r\n c.country_codes.forEach((countryCode) => {\r\n const li = document.createElement('li');\r\n\r\n let wrapped = RichTextProcessor.wrapEmojiText(emoji);\r\n if(IS_EMOJI_SUPPORTED) {\r\n const spanEmoji = document.createElement('span');\r\n spanEmoji.innerHTML = wrapped;\r\n li.append(spanEmoji);\r\n } else {\r\n li.innerHTML = wrapped;\r\n }\r\n \r\n const el = i18n(c.default_name as any);\r\n el.dataset.defaultName = c.default_name;\r\n li.append(el);\r\n\r\n const span = document.createElement('span');\r\n span.classList.add('phone-code');\r\n span.innerText = '+' + countryCode.country_code;\r\n li.appendChild(span);\r\n\r\n liArr.push(li);\r\n selectList.append(li);\r\n });\r\n\r\n liMap.set(c.iso2, liArr);\r\n });\r\n \r\n selectList.addEventListener('mousedown', (e) => {\r\n if(e.button !== 0) { // other buttons but left shall not pass\r\n return;\r\n }\r\n \r\n const target = findUpTag(e.target, 'LI')\r\n selectCountryByTarget(target);\r\n //console.log('clicked', e, countryName, phoneCode);\r\n });\r\n\r\n countryInputField.container.appendChild(selectWrapper);\r\n };\r\n\r\n const selectCountryByTarget = (target: HTMLElement) => {\r\n const defaultName = (target.childNodes[1] as HTMLElement).dataset.defaultName;\r\n const phoneCode = target.querySelector('.phone-code').innerText;\r\n const countryCode = phoneCode.replace(/\\D/g, '');\r\n\r\n replaceContent(countryInput, i18n(defaultName as any));\r\n simulateEvent(countryInput, 'input');\r\n lastCountrySelected = countries.find(c => c.default_name === defaultName);\r\n lastCountryCodeSelected = lastCountrySelected.country_codes.find(_countryCode => _countryCode.country_code === countryCode);\r\n \r\n telInputField.value = telInputField.lastValue = phoneCode;\r\n hidePicker();\r\n setTimeout(() => {\r\n telEl.focus();\r\n placeCaretAtEnd(telEl, true);\r\n }, 0);\r\n };\r\n \r\n initSelect();\r\n\r\n let hideTimeout: number;\r\n\r\n countryInput.addEventListener('focus', function(this: typeof countryInput, e) {\r\n if(initSelect) {\r\n initSelect();\r\n } else {\r\n countries.forEach((c) => {\r\n liMap.get(c.iso2).forEach(li => li.style.display = '');\r\n });\r\n }\r\n\r\n clearTimeout(hideTimeout);\r\n hideTimeout = undefined;\r\n\r\n selectWrapper.classList.remove('hide');\r\n void selectWrapper.offsetWidth; // reflow\r\n selectWrapper.classList.add('active');\r\n\r\n countryInputField.select();\r\n\r\n fastSmoothScroll({\r\n container: page.pageEl.parentElement.parentElement, \r\n element: countryInput, \r\n position: 'start', \r\n margin: 4\r\n });\r\n\r\n setTimeout(() => {\r\n if(!mouseDownHandlerAttached) {\r\n document.addEventListener('mousedown', onMouseDown, {capture: true});\r\n mouseDownHandlerAttached = true;\r\n }\r\n }, 0);\r\n });\r\n\r\n let mouseDownHandlerAttached = false;\r\n const onMouseDown = (e: MouseEvent) => {\r\n if(findUpClassName(e.target, 'input-select')) {\r\n return;\r\n }\r\n if(e.target === countryInput) {\r\n return;\r\n }\r\n\r\n hidePicker();\r\n document.removeEventListener('mousedown', onMouseDown, {capture: true});\r\n mouseDownHandlerAttached = false;\r\n };\r\n\r\n const hidePicker = () => {\r\n if(hideTimeout !== undefined) return;\r\n selectWrapper.classList.remove('active');\r\n hideTimeout = window.setTimeout(() => {\r\n selectWrapper.classList.add('hide');\r\n hideTimeout = undefined;\r\n }, 200);\r\n };\r\n /* false && countryInput.addEventListener('blur', function(this: typeof countryInput, e) {\r\n hidePicker();\r\n \r\n e.cancelBubble = true;\r\n }, {capture: true}); */\r\n\r\n countryInput.addEventListener('keyup', (e) => {\r\n const key = e.key;\r\n if(e.ctrlKey || key === 'Control') return false;\r\n\r\n //let i = new RegExp('^' + this.value, 'i');\r\n let _value = countryInputField.value.toLowerCase();\r\n let matches: HelpCountry[] = [];\r\n countries.forEach((c) => {\r\n const names = [\r\n c.name, \r\n c.default_name,\r\n c.iso2\r\n ];\r\n\r\n names.filter(Boolean).forEach(name => {\r\n const abbr = name.split(' ').filter(word => /\\w/.test(word)).map(word => word[0]).join('');\r\n if(abbr.length > 1) {\r\n names.push(abbr);\r\n }\r\n });\r\n\r\n let good = !!names.filter(Boolean).find(str => str.toLowerCase().indexOf(_value) !== -1)/* === 0 */;//i.test(c.name);\r\n\r\n liMap.get(c.iso2).forEach(li => li.style.display = good ? '' : 'none');\r\n if(good) matches.push(c);\r\n });\r\n\r\n // Код ниже автоматически выберет страну если она осталась одна при поиске\r\n /* if(matches.length === 1 && matches[0].li.length === 1) {\r\n if(matches[0].name === lastCountrySelected) return false;\r\n //console.log('clicking', matches[0]);\r\n\r\n var clickEvent = document.createEvent('MouseEvents');\r\n clickEvent.initEvent('mousedown', true, true);\r\n matches[0].li[0].dispatchEvent(clickEvent);\r\n return false;\r\n } else */if(matches.length === 0) {\r\n countries.forEach((c) => {\r\n liMap.get(c.iso2).forEach(li => li.style.display = '');\r\n });\r\n } else if(matches.length === 1 && key === 'Enter') {\r\n selectCountryByTarget(liMap.get(matches[0].iso2)[0]);\r\n }\r\n });\r\n\r\n arrowDown.addEventListener('mousedown', function(this: typeof arrowDown, e) {\r\n e.cancelBubble = true;\r\n e.preventDefault();\r\n if(countryInput.matches(':focus')) countryInput.blur();\r\n else countryInput.focus();\r\n });\r\n\r\n const telInputField = new TelInputField({\r\n onInput: (formatted) => {\r\n lottieLoader.loadLottieWorkers();\r\n\r\n const {country, code} = formatted || {};\r\n let countryName = country ? country.name || country.default_name : ''/* 'Unknown' */;\r\n if(countryName !== countryInputField.value && (\r\n !lastCountrySelected || \r\n !country ||\r\n !code || (\r\n lastCountrySelected !== country && \r\n lastCountryCodeSelected.country_code !== code.country_code\r\n )\r\n )\r\n ) {\r\n replaceContent(countryInput, country ? i18n(country.default_name as any) : countryName);\r\n lastCountrySelected = country;\r\n lastCountryCodeSelected = code;\r\n }\r\n \r\n //if(country && (telInputField.value.length - 1) >= (country.pattern ? country.pattern.length : 9)) {\r\n if(country || (telInputField.value.length - 1) > 1) {\r\n btnNext.style.visibility = '';\r\n } else {\r\n btnNext.style.visibility = 'hidden';\r\n }\r\n }\r\n });\r\n\r\n const telEl = telInputField.input;\r\n\r\n telEl.addEventListener('keypress', (e) => {\r\n //console.log('keypress', this.value);\r\n if(!btnNext.style.visibility &&/* this.value.length >= 9 && */ e.key === 'Enter') {\r\n return onSubmit();\r\n }\r\n });\r\n\r\n /* telEl.addEventListener('focus', function(this: typeof telEl, e) {\r\n this.removeAttribute('readonly'); // fix autocomplete\r\n });*/\r\n\r\n const signedCheckboxField = new CheckboxField({\r\n text: 'Login.KeepSigned', \r\n name: 'keepSession',\r\n withRipple: true,\r\n checked: true\r\n });\r\n\r\n signedCheckboxField.input.addEventListener('change', () => {\r\n const keepSigned = signedCheckboxField.checked;\r\n appStateManager.pushToState('keepSigned', keepSigned);\r\n \r\n AppStorage.toggleStorage(keepSigned);\r\n CacheStorageController.toggleStorage(keepSigned);\r\n apiManager.toggleStorage(keepSigned);\r\n sessionStorage.toggleStorage(keepSigned);\r\n });\r\n\r\n appStateManager.getState().then(state => {\r\n if(!appStateManager.storage.isAvailable()) {\r\n signedCheckboxField.checked = false;\r\n signedCheckboxField.label.classList.add('checkbox-disabled');\r\n } else {\r\n signedCheckboxField.checked = state.keepSigned;\r\n }\r\n });\r\n\r\n btnNext = Button('btn-primary btn-color-primary', {text: 'Login.Next'});\r\n btnNext.style.visibility = 'hidden';\r\n\r\n const onSubmit = (e?: Event) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n\r\n const toggle = toggleDisability([/* telEl, countryInput, */btnNext, btnQr], true);\r\n\r\n replaceContent(btnNext, i18n('PleaseWait'));\r\n putPreloader(btnNext);\r\n\r\n //return;\r\n\r\n let phone_number = telInputField.value;\r\n apiManager.invokeApi('auth.sendCode', {\r\n phone_number: phone_number,\r\n api_id: App.id,\r\n api_hash: App.hash,\r\n settings: {\r\n _: 'codeSettings' // that's how we sending Type\r\n }\r\n //lang_code: navigator.language || 'en'\r\n }).then((code) => {\r\n //console.log('got code', code);\r\n\r\n import('./pageAuthCode').then(m => m.default.mount(Object.assign(code, {phone_number: phone_number})));\r\n }).catch(err => {\r\n toggle();\r\n\r\n switch(err.type) {\r\n case 'PHONE_NUMBER_INVALID':\r\n telInputField.setError();\r\n replaceContent(telInputField.label, i18n('Login.PhoneLabelInvalid'));\r\n telEl.classList.add('error');\r\n replaceContent(btnNext, i18n('Login.Next'));\r\n break;\r\n default:\r\n console.error('auth.sendCode error:', err);\r\n btnNext.innerText = err.type;\r\n break;\r\n }\r\n });\r\n };\r\n\r\n attachClickEvent(btnNext, onSubmit);\r\n\r\n btnQr = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'Login.QR.Login'});\r\n\r\n let qrMounted = false;\r\n btnQr.addEventListener('click', () => {\r\n pageSignQR.mount();\r\n /* const promise = import('./pageSignQR');\r\n btnQr.disabled = true;\r\n\r\n let preloaderDiv: HTMLElement;\r\n if(!qrMounted) {\r\n preloaderDiv = putPreloader(btnQr);\r\n qrMounted = true;\r\n }\r\n\r\n promise.then(module => {\r\n module.default.mount();\r\n\r\n setTimeout(() => {\r\n btnQr.removeAttribute('disabled');\r\n if(preloaderDiv) {\r\n preloaderDiv.remove();\r\n }\r\n }, 200);\r\n }); */\r\n });\r\n\r\n inputWrapper.append(countryInputField.container, telInputField.container, signedCheckboxField.label, btnNext, btnQr);\r\n\r\n const h4 = document.createElement('h4');\r\n h4.classList.add('text-center');\r\n _i18n(h4, 'Login.Title');\r\n\r\n const subtitle = document.createElement('div');\r\n subtitle.classList.add('subtitle', 'text-center');\r\n _i18n(subtitle, 'Login.StartText');\r\n\r\n page.pageEl.querySelector('.container').append(h4, subtitle, inputWrapper);\r\n\r\n let tryAgain = () => {\r\n apiManager.invokeApi('help.getNearestDc').then((nearestDcResult) => {\r\n const langPack = stateStorage.getFromCache('langPack');\r\n if(langPack && !langPack.countries?.hash) {\r\n I18n.getLangPack(langPack.lang_code).then(() => {\r\n simulateEvent(telEl, 'input');\r\n });\r\n }\r\n\r\n const dcs = new Set([1, 2, 3, 4, 5]);\r\n const done: number[] = [nearestDcResult.this_dc];\r\n\r\n let promise: Promise;\r\n if(nearestDcResult.nearest_dc !== nearestDcResult.this_dc) {\r\n promise = apiManager.getNetworker(nearestDcResult.nearest_dc).then(() => {\r\n done.push(nearestDcResult.nearest_dc);\r\n });\r\n }\r\n\r\n (promise || Promise.resolve()).then(() => {\r\n done.forEach(dcId => {\r\n dcs.delete(dcId);\r\n });\r\n\r\n const _dcs = [...dcs];\r\n const g = async(): Promise => {\r\n const dcId = _dcs.shift();\r\n if(!dcId) return;\r\n\r\n const dbKey: DcAuthKey = `dc${dcId}_auth_key` as any;\r\n const key = await sessionStorage.get(dbKey);\r\n if(key) {\r\n return g();\r\n }\r\n\r\n setTimeout(() => { // * если одновременно запросить все нетворкеры, не будет проходить запрос на код\r\n apiManager.getNetworker(dcId/* , {fileDownload: true} */).finally(g);\r\n }, /* done.includes(dcId) ? 0 : */3000);\r\n };\r\n \r\n g();\r\n });\r\n \r\n return nearestDcResult;\r\n }).then((nearestDcResult) => {\r\n if(!countryInputField.value.length && !telInputField.value.length) {\r\n selectCountryByTarget(liMap.get(nearestDcResult.country)[0]);\r\n }\r\n \r\n //console.log('woohoo', nearestDcResult, country);\r\n })//.catch(tryAgain);\r\n };\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n setTimeout(() => {\r\n telEl.focus();\r\n }, 0);\r\n }\r\n\r\n getLanguageChangeButton(inputWrapper);\r\n\r\n tryAgain();\r\n};\r\n\r\nconst page = new Page('page-sign', true, onFirstMount, () => {\r\n if(btnNext) {\r\n replaceContent(btnNext, i18n('Login.Next'));\r\n ripple(btnNext, undefined, undefined, true);\r\n btnNext.removeAttribute('disabled');\r\n }\r\n\r\n if(btnQr) {\r\n btnQr.removeAttribute('disabled');\r\n }\r\n\r\n appStateManager.pushToState('authState', {_: 'authStateSignIn'});\r\n});\r\n\r\nexport default page;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { HelpCountry, HelpCountryCode } from \"../layer\";\nimport I18n from \"../lib/langPack\";\n\nlet sortedCountries: HelpCountry[];\ntype PrefixCountry = {country: HelpCountry, code: HelpCountryCode};\nconst prefixes: Map = new Map();\nlet maxPrefixLength = 0;\nconst setPrefix = (country: HelpCountry, code: HelpCountryCode, prefix: string = '') => {\n prefix = code.country_code + prefix;\n /* if(prefixes.has(prefix)) {\n console.error('asdasdasd', prefixes.get(prefix), country, code);\n } */\n maxPrefixLength = Math.max(maxPrefixLength, prefix.length);\n prefixes.set(prefix, {country, code});\n};\n\nexport function formatPhoneNumber(originalStr: string): {\n formatted: string,\n country: HelpCountry,\n code: HelpCountryCode,\n leftPattern: string\n} {\n originalStr = originalStr || '';\n \n if(!prefixes.size) {\n I18n.countriesList.forEach(country => {\n country.country_codes.forEach(code => {\n if(code.prefixes) {\n code.prefixes.forEach(prefix => {\n setPrefix(country, code, prefix);\n });\n } else {\n setPrefix(country, code);\n }\n });\n });\n }\n\n // return {formatted: originalStr, country: undefined as any, leftPattern: ''};\n let str = originalStr.replace(/\\D/g, '');\n let phoneCode = str.slice(0, maxPrefixLength);\n \n ////console.log('str', str, phoneCode);\n // if(!sortedCountries) {\n // sortedCountries = I18n.countriesList.slice().sort((a, b) => b.country_codes[0].country_code.length - a.country_codes[0].country_code.length);\n // }\n \n // let country = sortedCountries.find((c) => {\n // return c.country_codes.find((c) => phoneCode.indexOf(c.replace(/\\D/g, '')) === 0);\n // });\n\n let prefixCountry: PrefixCountry;\n for(let i = phoneCode.length - 1; i >= 0; --i) { // lookup for country by prefix\n prefixCountry = prefixes.get(phoneCode.slice(0, i + 1));\n if(prefixCountry) {\n break;\n }\n }\n\n if(!prefixCountry) {\n return {\n formatted: str, \n country: undefined, \n code: undefined, \n leftPattern: ''\n };\n }\n\n // country = /* PhoneCodesMain[country.phoneCode] || */country;\n const country = prefixCountry.country;\n \n const patterns = prefixCountry.code.patterns || [];\n const searchForPattern = str.slice(prefixCountry.code.country_code.length); // splice country code\n let pattern = '', mostMatchedPatternMatches = 0, mostMatchedPattern = '';\n for(let i = patterns.length - 1; i >= 0; --i) {\n pattern = patterns[i];\n\n const _pattern = pattern.replace(/ /g, '');\n let patternMatches = 0;\n for(let k = 0, length = Math.min(searchForPattern.length, _pattern.length); k < length; ++k) {\n if(searchForPattern[k] === _pattern[k] || _pattern[k] === 'X') {\n ++patternMatches;\n } else {\n patternMatches = 0;\n break;\n }\n }\n\n if(patternMatches > mostMatchedPatternMatches) {\n mostMatchedPatternMatches = patternMatches;\n mostMatchedPattern = pattern;\n }\n }\n\n pattern = mostMatchedPattern || pattern;\n pattern = pattern.replace(/\\d/g, 'X');\n\n pattern = prefixCountry.code.country_code + ' ' + pattern;\n // let pattern = country.pattern || country.phoneCode;\n pattern.split('').forEach((symbol, idx) => {\n if(symbol === ' ' && str[idx] !== ' ' && str.length > idx) {\n str = str.slice(0, idx) + ' ' + str.slice(idx);\n }\n });\n \n /* if(country.pattern) {\n str = str.slice(0, country.pattern.length);\n } */\n\n let leftPattern = pattern && pattern.length > str.length ? pattern.slice(str.length) : '';\n if(leftPattern) {\n /* const length = str.length;\n leftPattern = leftPattern.split('').map((_, idx) => (length + idx).toString().slice(-1)).join(''); */\n leftPattern = leftPattern.replace(/X/g, '‒');\n // leftPattern = leftPattern.replace(/X/g, '0');\n }\n \n return {formatted: str, country, code: prefixCountry.code, leftPattern};\n}\n"],"sourceRoot":""}