Spaccogram/webk/public/countryInputField-Dm2t4SUk....

1 line
35 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"countryInputField-Dm2t4SUk.js","sources":["../src/helpers/object/getDeepProperty.ts","../src/components/checkboxField.ts","../src/helpers/formatPhoneNumber.ts","../src/components/telInputField.ts","../src/components/countryInputField.ts"],"sourcesContent":["import {splitDeepPath} from './setDeepProperty';\n\nexport default function getDeepProperty(object: any, key: string | Array<string>) {\n const splitted = Array.isArray(key) ? key : splitDeepPath(key);\n let o: any = object;\n for(const key of splitted) {\n o = o?.[key];\n if(!o) {\n break;\n }\n }\n\n return o;\n}\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 type ListenerSetter from '../helpers/listenerSetter';\nimport ripple from './ripple';\nimport {LangPackKey, _i18n} from '../lib/langPack';\nimport getDeepProperty from '../helpers/object/getDeepProperty';\nimport rootScope from '../lib/rootScope';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport simulateEvent from '../helpers/dom/dispatchEvent';\n\nexport type CheckboxFieldOptions = {\n text?: LangPackKey,\n textArgs?: any[],\n name?: string,\n round?: boolean,\n toggle?: boolean,\n stateKey?: string,\n stateValues?: any[],\n stateValueReverse?: boolean,\n disabled?: boolean,\n checked?: boolean,\n restriction?: boolean,\n withRipple?: boolean,\n withHover?: boolean,\n listenerSetter?: ListenerSetter,\n asRadio?: boolean\n};\nexport default class CheckboxField {\n public input: HTMLInputElement;\n public label: HTMLLabelElement;\n public span: HTMLSpanElement;\n public listenerSetter: ListenerSetter;\n\n constructor(options: CheckboxFieldOptions = {}) {\n const label = this.label = document.createElement('label');\n label.classList.add('checkbox-field');\n\n if(options.restriction && !options.toggle) {\n label.classList.add('checkbox-field-restriction');\n }\n\n if(options.round) {\n label.classList.add('checkbox-field-round');\n }\n\n if(options.disabled) {\n this.toggleDisability(true);\n }\n\n this.listenerSetter = options.listenerSetter;\n\n const input = this.input = document.createElement('input');\n input.classList.add('checkbox-field-input');\n input.type = options.asRadio ? 'radio' : 'checkbox';\n if(options.name) {\n input[options.asRadio ? 'name' : 'id'] = 'input-' + options.name;\n }\n\n if(options.checked) {\n input.checked = true;\n }\n\n if(options.stateKey) {\n let loaded = options.checked !== undefined;\n const onChange = () => {\n if(!loaded) {\n return;\n }\n\n let value: any;\n if(options.stateValues) {\n value = options.stateValues[input.checked ? 1 : 0];\n } else {\n value = input.checked;\n\n if(options.stateValueReverse) {\n value = !value;\n }\n }\n\n rootScope.managers.appStateManager.setByKey(options.stateKey, value);\n };\n\n !loaded && apiManagerProxy.getState().then((state) => {\n loaded = true;\n const stateValue = getDeepProperty(state, options.stateKey);\n let checked: boolean;\n if(options.stateValues) {\n checked = options.stateValues.indexOf(stateValue) === 1;\n } else {\n checked = stateValue;\n\n if(options.stateValueReverse) {\n checked = !checked;\n }\n }\n\n this.setValueSilently(checked);\n });\n\n if(options.listenerSetter) options.listenerSetter.add(input)('change', onChange);\n else input.addEventListener('change', onChange);\n }\n\n let span: HTMLSpanElement;\n if(options.text) {\n span = this.span = document.createElement('span');\n span.classList.add('checkbox-caption');\n _i18n(span, options.text, options.textArgs);\n } else {\n label.classList.add('checkbox-without-caption');\n }\n\n label.append(input);\n\n if(options.toggle) {\n label.classList.add('checkbox-field-toggle');\n\n if(options.restriction) {\n label.classList.add('checkbox-field-toggle-restriction');\n }\n\n const toggle = document.createElement('div');\n toggle.classList.add('checkbox-toggle');\n const circle = document.createElement('div');\n circle.classList.add('checkbox-toggle-circle');\n toggle.append(circle);\n label.append(toggle);\n } else {\n const box = document.createElement('div');\n box.classList.add('checkbox-box');\n\n const checkSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n checkSvg.classList.add('checkbox-box-check');\n checkSvg.setAttributeNS(null, 'viewBox', '0 0 24 24');\n const use = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n use.setAttributeNS(null, 'href', '#check');\n use.setAttributeNS(null, 'x', '-1');\n checkSvg.append(use);\n\n const bg = document.createElement('div');\n bg.classList.add('checkbox-box-background');\n\n const border = document.createElement('div');\n border.classList.add('checkbox-box-border');\n\n box.append(border, bg, checkSvg);\n\n label.append(box);\n }\n\n if(span) {\n label.append(span);\n }\n\n if(options.withRipple) {\n label.classList.add('checkbox-ripple', 'hover-effect');\n ripple(label, undefined, undefined, true);\n // label.prepend(input);\n } else if(options.withHover) {\n label.classList.add('hover-effect');\n }\n }\n\n get checked() {\n return this.input.checked;\n }\n\n set checked(checked: boolean) {\n /* if(this.checked === checked) {\n return;\n } */\n\n this.setValueSilently(checked);\n simulateEvent(this.input, 'change');\n }\n\n public setValueSilently(checked: boolean) {\n this.input.checked = checked;\n }\n\n public isDisabled() {\n return this.label.classList.contains('checkbox-disabled');\n }\n\n public toggleDisability(disable: boolean) {\n this.label.classList.toggle('checkbox-disabled', disable);\n this.input.disabled = disable;\n return () => this.toggleDisability(!disable);\n }\n}\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<string, PrefixCountry> = 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 const 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]) {\n patternMatches += 1.01;\n } else if(_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","/*\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 placeCaretAtEnd from '../helpers/dom/placeCaretAtEnd';\nimport {formatPhoneNumber} from '../helpers/formatPhoneNumber';\nimport {IS_APPLE, IS_ANDROID, IS_APPLE_MOBILE} from '../environment/userAgent';\nimport {HelpCountry, HelpCountryCode} from '../layer';\nimport InputField, {InputFieldOptions} from './inputField';\n\nexport default class TelInputField extends InputField {\n private pasted = false;\n public lastValue = '';\n\n constructor(options: InputFieldOptions & {\n onInput?: (formatted: ReturnType<typeof formatPhoneNumber>) => void\n } = {}) {\n super({\n label: 'Contacts.PhoneNumber.Placeholder',\n // plainText: true,\n name: 'phone',\n ...options\n });\n\n this.container.classList.add('input-field-phone');\n\n const telEl = this.input;\n if(telEl instanceof HTMLInputElement) {\n telEl.type = 'tel';\n telEl.autocomplete = 'rr55RandomRR55';\n } else {\n telEl.inputMode = 'decimal';\n\n const pixelRatio = window.devicePixelRatio;\n if(pixelRatio > 1) {\n let letterSpacing: number;\n if(IS_APPLE) {\n letterSpacing = pixelRatio * -.16;\n } else if(IS_ANDROID) {\n letterSpacing = 0;\n }\n\n telEl.style.setProperty('--letter-spacing', letterSpacing + 'px');\n }\n\n const originalFunc = this.setValueSilently.bind(this);\n this.setValueSilently = (value) => {\n originalFunc(value);\n placeCaretAtEnd(this.input, true);\n };\n }\n\n telEl.addEventListener('input', () => {\n // console.log('input', this.value);\n telEl.classList.remove('error');\n\n const value = this.value;\n const diff = Math.abs(value.length - this.lastValue.length);\n if(diff > 1 && !this.pasted && IS_APPLE_MOBILE) {\n this.setValueSilently(this.lastValue + value);\n }\n\n this.pasted = false;\n\n this.setLabel();\n\n let formattedPhoneNumber: ReturnType<typeof formatPhoneNumber>;\n let formatted: string, country: HelpCountry, countryCode: HelpCountryCode, leftPattern = '';\n if(this.value.replace(/\\++/, '+') === '+') {\n this.setValueSilently('+');\n } else {\n formattedPhoneNumber = formatPhoneNumber(this.value);\n formatted = formattedPhoneNumber.formatted;\n country = formattedPhoneNumber.country;\n leftPattern = formattedPhoneNumber.leftPattern;\n countryCode = formattedPhoneNumber.code;\n this.setValueSilently(this.lastValue = formatted ? '+' + formatted : '');\n }\n\n telEl.dataset.leftPattern = leftPattern/* .replace(/X/g, '0') */;\n\n // console.log(formatted, country);\n\n options.onInput && options.onInput(formattedPhoneNumber);\n });\n\n telEl.addEventListener('paste', () => {\n this.pasted = true;\n // console.log('paste', telEl.value);\n });\n\n /* telEl.addEventListener('change', (e) => {\n console.log('change', telEl.value);\n }); */\n\n telEl.addEventListener('keypress', (e) => {\n // console.log('keypress', this.value);\n const key = e.key;\n if(/\\D/.test(key) && !(e.metaKey || e.ctrlKey) && key !== 'Backspace' && !(key === '+' && e.shiftKey/* && !this.value */)) {\n e.preventDefault();\n return false;\n }\n });\n\n /* telEl.addEventListener('focus', function(this: typeof telEl, e) {\n this.removeAttribute('readonly'); // fix autocomplete\n });*/\n }\n}\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 IS_EMOJI_SUPPORTED from '../environment/emojiSupport';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport findUpTag from '../helpers/dom/findUpTag';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport fastSmoothScroll from '../helpers/fastSmoothScroll';\nimport {randomLong} from '../helpers/random';\nimport {HelpCountry, HelpCountryCode} from '../layer';\nimport I18n, {i18n} from '../lib/langPack';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../lib/rootScope';\nimport {getCountryEmoji} from '../vendor/emoji';\nimport InputField, {InputFieldOptions} from './inputField';\nimport Scrollable from './scrollable';\n\nlet countries: HelpCountry.helpCountry[];\nconst setCountries = () => {\n countries = I18n.countriesList\n .filter((country) => !country.pFlags?.hidden)\n .sort((a, b) => (a.name || a.default_name).localeCompare(b.name || b.default_name));\n};\n\nlet init = () => {\n init = undefined;\n setCountries();\n rootScope.addEventListener('language_change', () => {\n setCountries();\n });\n};\n\nconst VIRTUAL_COUNTRIES = new Set(['FT']);\n\nexport function filterCountries(value: string, excludeVirtual?: boolean) {\n init?.();\n\n value = value.toLowerCase();\n const filtered = countries.filter((c) => {\n if(excludeVirtual && VIRTUAL_COUNTRIES.has(c.iso2)) {\n return false;\n }\n\n const names = [\n c.name,\n c.default_name,\n c.iso2\n ];\n\n names.filter(Boolean).forEach((name) => {\n const abbr = name.split(' ').filter((word) => /\\w/.test(word)).map((word) => word[0]).join('');\n if(abbr.length > 1) {\n names.push(abbr);\n }\n });\n\n const good = !!names.filter(Boolean).find((str) => str.toLowerCase().indexOf(value) !== -1)/* === 0 */;// i.test(c.name);\n return good;\n });\n\n return filtered;\n}\n\nexport function sortCountries(countries: HelpCountry.helpCountry[]) {\n return countries.sort((a, b) => (a.name || a.default_name).localeCompare(b.name || b.default_name));\n}\n\nexport default class CountryInputField extends InputField {\n private lastCountrySelected: HelpCountry;\n private lastCountryCodeSelected: HelpCountryCode;\n\n private hideTimeout: number;\n private selectWrapper: HTMLElement;\n\n private liMap: Map<string, HTMLLIElement[]>;\n\n constructor(public options: InputFieldOptions & {\n onCountryChange?: (country: HelpCountry.helpCountry, code: HelpCountryCode.helpCountryCode) => void,\n noPhoneCodes?: boolean\n } = {}) {\n super({\n label: 'Country',\n name: randomLong(),\n ...options\n });\n\n init?.();\n\n this.liMap = new Map();\n\n this.container.classList.add('input-select');\n\n const selectWrapper = this.selectWrapper = document.createElement('div');\n selectWrapper.classList.add('select-wrapper', 'z-depth-3', 'hide');\n\n const arrowDown = document.createElement('span');\n arrowDown.classList.add('arrow', 'arrow-down');\n this.container.append(arrowDown);\n\n const selectList = document.createElement('ul');\n selectWrapper.appendChild(selectList);\n\n const scroll = new Scrollable(selectWrapper);\n\n let initSelect = () => {\n initSelect = null;\n\n countries.forEach((c) => {\n if(options.noPhoneCodes && VIRTUAL_COUNTRIES.has(c.iso2)) {\n return;\n }\n\n const emoji = getCountryEmoji(c.iso2);\n\n const liArr: Array<HTMLLIElement> = [];\n for(let i = 0, length = Math.min(c.country_codes.length, options.noPhoneCodes ? 1 : Infinity); i < length; ++i) {\n const countryCode = c.country_codes[i];\n const li = document.createElement('li');\n\n const wrapped = wrapEmojiText(emoji);\n if(IS_EMOJI_SUPPORTED) {\n const spanEmoji = document.createElement('span');\n setInnerHTML(spanEmoji, wrapped);\n li.append(spanEmoji);\n } else {\n setInnerHTML(li, wrapped);\n }\n\n const el = i18n(c.default_name as any);\n el.dataset.defaultName = c.default_name;\n li.append(el);\n\n if(!options.noPhoneCodes) {\n const span = document.createElement('span');\n span.classList.add('phone-code');\n span.innerText = '+' + countryCode.country_code;\n li.appendChild(span);\n }\n\n liArr.push(li);\n selectList.append(li);\n }\n\n this.liMap.set(c.iso2, liArr);\n });\n\n selectList.addEventListener('mousedown', (e) => {\n if(e.button !== 0) { // other buttons but left shall not pass\n return;\n }\n\n const target = findUpTag(e.target, 'LI')\n this.selectCountryByTarget(target);\n // console.log('clicked', e, countryName, phoneCode);\n });\n\n this.container.appendChild(selectWrapper);\n };\n\n initSelect();\n\n this.input.addEventListener('focus', (e) => {\n if(initSelect) {\n initSelect();\n } else {\n countries.forEach((c) => {\n const arr = this.liMap.get(c.iso2);\n if(!arr) return;\n arr.forEach((li) => li.style.display = '');\n });\n }\n\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n\n selectWrapper.classList.remove('hide');\n void selectWrapper.offsetWidth; // reflow\n selectWrapper.classList.add('active');\n\n this.select();\n\n fastSmoothScroll({\n // container: page.pageEl.parentElement.parentElement,\n container: findUpClassName(this.container, 'scrollable-y'),\n element: this.input,\n position: 'start',\n margin: 4\n });\n\n setTimeout(() => {\n if(!mouseDownHandlerAttached) {\n document.addEventListener('mousedown', onMouseDown, {capture: true});\n mouseDownHandlerAttached = true;\n }\n }, 0);\n });\n\n let mouseDownHandlerAttached = false;\n const onMouseDown = (e: MouseEvent) => {\n if(findUpClassName(e.target, 'input-select')) {\n return;\n }\n if(e.target === this.input) {\n return;\n }\n\n this.hidePicker();\n document.removeEventListener('mousedown', onMouseDown, {capture: true});\n mouseDownHandlerAttached = false;\n };\n\n /* false && this.input.addEventListener('blur', function(this: typeof this.input, e) {\n hidePicker();\n\n e.cancelBubble = true;\n }, {capture: true}); */\n\n const onKeyPress = (e: KeyboardEvent) => {\n const key = e.key;\n if(e.ctrlKey || key === 'Control') return false;\n\n // let i = new RegExp('^' + this.value, 'i');\n const filtered = new Set(filterCountries(this.value).map((c) => c.iso2));\n this.liMap.forEach((arr, iso2) => {\n arr.forEach((li) => li.style.display = filtered.has(iso2) ? '' : 'none');\n });\n\n // Код ниже автоматически выберет страну если она осталась одна при поиске\n /* if(matches.length === 1 && matches[0].li.length === 1) {\n if(matches[0].name === lastCountrySelected) return false;\n //console.log('clicking', matches[0]);\n\n var clickEvent = document.createEvent('MouseEvents');\n clickEvent.initEvent('mousedown', true, true);\n matches[0].li[0].dispatchEvent(clickEvent);\n return false;\n } else */if(!filtered.size) {\n countries.forEach((c) => {\n const arr = this.liMap.get(c.iso2);\n if(!arr) {\n return;\n }\n\n arr.forEach((li) => li.style.display = '');\n });\n } else if(filtered.size === 1 && key === 'Enter') {\n cancelEvent(e);\n this.selectCountryByTarget(this.liMap.get([...filtered][0])[0]);\n }\n };\n\n this.input.addEventListener('keyup', onKeyPress);\n this.input.addEventListener('keydown', (e) => {\n if(e.key === 'Enter') {\n onKeyPress(e);\n }\n });\n\n arrowDown.addEventListener('mousedown', (e) => {\n if(this.input.matches(':focus')) {\n this.hidePicker();\n this.input.blur();\n } else {\n e.cancelBubble = true;\n e.preventDefault();\n this.input.focus();\n }\n });\n }\n\n public getSelected() {\n return {country: this.lastCountrySelected, code: this.lastCountryCodeSelected};\n }\n\n public hidePicker = () => {\n if(this.hideTimeout !== undefined) return;\n this.selectWrapper.classList.remove('active');\n this.hideTimeout = window.setTimeout(() => {\n this.selectWrapper.classList.add('hide');\n this.hideTimeout = undefined;\n }, 200);\n }\n\n public selectCountryByTarget = (target: HTMLElement) => {\n const defaultName = target.querySelector<HTMLElement>('[data-default-name]').dataset.defaultName;\n const phoneCodeEl = target.querySelector<HTMLElement>('.phone-code');\n const phoneCode = phoneCodeEl?.innerText;\n const countryCode = phoneCode && phoneCode.replace(/\\D/g, '');\n\n this.value = i18n(defaultName as any);\n this.lastCountrySelected = countries.find((c) => c.default_name === defaultName);\n this.lastCountryCodeSelected = countryCode && this.lastCountrySelected.country_codes.find((_countryCode) => _countryCode.country_code === countryCode);\n\n this.options.onCountryChange?.(this.lastCountrySelected, this.lastCountryCodeSelected);\n this.hidePicker();\n }\n\n public selectCountryByIso2(iso2: string) {\n this.selectCountryByTarget(this.liMap.get(iso2)[0]);\n }\n\n public override(country: HelpCountry, code: HelpCountryCode, countryName?: string) {\n this.setValueSilently(country ? i18n(country.default_name as any) : countryName);\n this.lastCountrySelected = country;\n this.lastCountryCodeSelected = code;\n this.options.onCountryChange?.(this.lastCountrySelected, this.lastCountryCodeSelected);\n }\n}\n"],"names":["getDeepProperty","object","key","splitted","splitDeepPath","o","CheckboxField","options","label","input","loaded","onChange","value","rootScope","apiManagerProxy","state","stateValue","checked","span","_i18n","toggle","circle","box","checkSvg","use","bg","border","ripple","simulateEvent","disable","prefixes","maxPrefixLength","setPrefix","country","code","prefix","formatPhoneNumber","originalStr","I18n","str","phoneCode","prefixCountry","i","patterns","searchForPattern","pattern","mostMatchedPatternMatches","mostMatchedPattern","_pattern","patternMatches","k","length","symbol","idx","leftPattern","TelInputField","InputField","telEl","pixelRatio","letterSpacing","IS_APPLE","IS_ANDROID","originalFunc","placeCaretAtEnd","IS_APPLE_MOBILE","formattedPhoneNumber","formatted","e","countries","setCountries","a","b","init","VIRTUAL_COUNTRIES","filterCountries","excludeVirtual","c","names","name","abbr","word","CountryInputField","randomLong","target","defaultName","countryCode","i18n","_countryCode","selectWrapper","arrowDown","selectList","Scrollable","initSelect","emoji","getCountryEmoji","liArr","li","wrapped","wrapEmojiText","IS_EMOJI_SUPPORTED","spanEmoji","setInnerHTML","el","findUpTag","arr","fastSmoothScroll","findUpClassName","mouseDownHandlerAttached","onMouseDown","onKeyPress","filtered","iso2","cancelEvent","countryName"],"mappings":"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"}