tweb/public/4.3e09949378470770bf73.chun...

1 line
61 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,"sources":["webpack:///./src/helpers/dom/placeCaretAtEnd.ts","webpack:///./src/helpers/formatPhoneNumber.ts","webpack:///./src/components/telInputField.ts","webpack:///./src/pages/pageSignIn.ts","webpack:///./src/components/scrollable.ts","webpack:///./src/components/checkboxField.ts","webpack:///./src/helpers/dom/toggleDisability.ts","webpack:///./src/helpers/dom/findUpTag.ts"],"names":["placeCaretAtEnd","el","ignoreTouchCheck","document","activeElement","focus","window","getSelection","createRange","range","selectNodeContents","collapse","sel","removeAllRanges","addRange","body","createTextRange","textRange","moveToElementText","select","prefixes","Map","maxPrefixLength","setPrefix","country","code","prefix","country_code","Math","max","length","set","formatPhoneNumber","originalStr","size","countriesList","forEach","country_codes","prefixCountry","str","replace","phoneCode","slice","i","get","formatted","undefined","leftPattern","patterns","searchForPattern","pattern","mostMatchedPatternMatches","mostMatchedPattern","_pattern","patternMatches","k","min","split","symbol","idx","TelInputField","options","super","label","name","pasted","lastValue","this","container","classList","add","telEl","input","HTMLInputElement","type","autocomplete","inputMode","pixelRatio","devicePixelRatio","letterSpacing","style","setProperty","originalFunc","setValueSilently","bind","value","addEventListener","remove","formattedPhoneNumber","abs","setLabel","countryCode","dataset","onInput","e","key","test","metaKey","ctrlKey","shiftKey","preventDefault","btnQr","btnNext","page","setCountries","countries","filter","pFlags","hidden","sort","a","b","default_name","localeCompare","liMap","lastCountrySelected","lastCountryCodeSelected","inputWrapper","createElement","countryInputField","countryInput","selectWrapper","arrowDown","append","selectList","appendChild","initSelect","c","emoji","iso2","liArr","li","wrapped","wrapEmojiText","spanEmoji","innerHTML","defaultName","span","innerText","push","button","target","selectCountryByTarget","childNodes","querySelector","find","_countryCode","telInputField","hidePicker","setTimeout","hideTimeout","display","clearTimeout","offsetWidth","pageEl","parentElement","element","position","margin","mouseDownHandlerAttached","onMouseDown","capture","removeEventListener","_value","toLowerCase","matches","names","Boolean","abbr","word","map","join","good","indexOf","cancelBubble","blur","loadLottieWorkers","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","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","ScrollableBase","logPrefix","onScrollMeasure","lastScrollPosition","lastScrollDirection","isHeavyAnimationInProgress","needCheckAfterAnimation","onScroll","cancelMeasure","onScrolledTop","onScrolledBottom","splitUp","onAdditionalScroll","requestAnimationFrame","scrollPosition","scrollProperty","checkForTriggers","log","Error","Array","from","children","addedScrollListener","passive","removeHeavyAnimationListener","addScrollListener","removeScrollListener","cancelAnimationFrame","Scrollable","onScrollOffset","withPaddingContainer","loadedAll","top","bottom","scrollHeight","maxScrollTop","clientHeight","scrollTop","setListeners","elements","padding","prepend","round","offsetHeight","getDistanceToEnd","y","ignoreNextScrollEvent","once","ScrollableX","splitCount","scrollHorizontally","deltaX","scrollWidth","clientWidth","scrollLeft","deltaY","CheckboxField","restriction","disabled","toggleDisability","stateKey","stateValue","stateValues","setByKey","textArgs","box","checkSvg","createElementNS","setAttributeNS","use","bg","border","withHover","event","Event","bubbles","cancelable","dispatchEvent","disable","setAttribute","findUpTag","tag","closest"],"mappings":"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","file":"4.3e09949378470770bf73.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 * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\n\r\nexport default function placeCaretAtEnd(el: HTMLElement, ignoreTouchCheck = false) {\r\n if(IS_TOUCH_SUPPORTED && (!ignoreTouchCheck || document.activeElement !== el)) {\r\n return;\r\n }\r\n \r\n el.focus();\r\n if(typeof window.getSelection !== \"undefined\" && typeof document.createRange !== \"undefined\") {\r\n var range = document.createRange();\r\n range.selectNodeContents(el);\r\n range.collapse(false);\r\n var sel = window.getSelection();\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n // @ts-ignore\r\n } else if(typeof document.body.createTextRange !== \"undefined\") {\r\n // @ts-ignore\r\n var textRange = document.body.createTextRange();\r\n textRange.moveToElementText(el);\r\n textRange.collapse(false);\r\n textRange.select();\r\n }\r\n}\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<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 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","/*\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 let 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","/*\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<string, HTMLLIElement[]> = 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<HTMLLIElement> = [];\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<HTMLElement>('.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<any>;\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<void> => {\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","/*\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 { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\nimport { logger, LogTypes } from \"../lib/logger\";\r\nimport fastSmoothScroll, { ScrollOptions } from \"../helpers/fastSmoothScroll\";\r\nimport useHeavyAnimationCheck from \"../hooks/useHeavyAnimationCheck\";\r\nimport cancelEvent from \"../helpers/dom/cancelEvent\";\r\n/*\r\nvar el = $0;\r\nvar height = 0;\r\nvar checkUp = false;\r\n\r\ndo {\r\n height += el.scrollHeight;\r\n} while(el = (checkUp ? el.previousElementSibling : el.nextElementSibling));\r\nconsole.log(height);\r\n*/\r\n\r\n/*\r\nArray.from($0.querySelectorAll('.bubble-content')).forEach(_el => {\r\n\t//_el.style.display = '';\t\r\n\t//return;\r\n\r\n\tlet el = _el.parentElement;\r\n\tlet height = el.scrollHeight;\r\n\tlet width = el.scrollWidth;\r\n\tel.style.width = width + 'px';\r\n\tel.style.height = height + 'px';\r\n\t_el.style.display = 'none';\r\n});\r\n*/\r\n\r\n/* const scrollables: Map<HTMLElement, Scrollable> = new Map();\r\nconst scrollsIntersector = new IntersectionObserver(entries => {\r\n for(let entry of entries) {\r\n const scrollable = scrollables.get(entry.target as HTMLElement);\r\n\r\n if(entry.isIntersecting) {\r\n scrollable.isVisible = true;\r\n } else {\r\n scrollable.isVisible = false;\r\n\r\n if(!isInDOM(entry.target)) {\r\n scrollsIntersector.unobserve(scrollable.container);\r\n scrollables.delete(scrollable.container);\r\n }\r\n }\r\n }\r\n}); */\r\n\r\nexport class ScrollableBase {\r\n protected log: ReturnType<typeof logger>;\r\n\r\n public splitUp: HTMLElement;\r\n public onScrollMeasure: number = 0;\r\n\r\n public lastScrollPosition: number = 0;\r\n public lastScrollDirection: number = 0;\r\n\r\n public onAdditionalScroll: () => void;\r\n public onScrolledTop: () => void;\r\n public onScrolledBottom: () => void;\r\n\r\n public isHeavyAnimationInProgress = false;\r\n protected needCheckAfterAnimation = false;\r\n\r\n public checkForTriggers?: () => void;\r\n\r\n public scrollProperty: 'scrollTop' | 'scrollLeft';\r\n \r\n protected removeHeavyAnimationListener: () => void;\r\n protected addedScrollListener: boolean;\r\n\r\n constructor(public el: HTMLElement, logPrefix = '', public container: HTMLElement = document.createElement('div')) {\r\n this.container.classList.add('scrollable');\r\n\r\n this.log = logger('SCROLL' + (logPrefix ? '-' + logPrefix : ''), LogTypes.Error);\r\n\r\n if(el) {\r\n Array.from(el.children).forEach(c => this.container.append(c));\r\n\r\n el.append(this.container);\r\n }\r\n //this.onScroll();\r\n }\r\n\r\n public addScrollListener() {\r\n if(this.addedScrollListener) {\r\n return;\r\n }\r\n\r\n this.addedScrollListener = true;\r\n this.container.addEventListener('scroll', this.onScroll, {passive: true, capture: true});\r\n }\r\n \r\n public removeScrollListener() {\r\n if(!this.addedScrollListener) {\r\n return;\r\n }\r\n\r\n this.addedScrollListener = false;\r\n this.container.removeEventListener('scroll', this.onScroll, {capture: true});\r\n }\r\n\r\n public setListeners() {\r\n if(this.removeHeavyAnimationListener) {\r\n return;\r\n }\r\n\r\n window.addEventListener('resize', this.onScroll, {passive: true});\r\n this.addScrollListener();\r\n\r\n this.removeHeavyAnimationListener = useHeavyAnimationCheck(() => {\r\n this.isHeavyAnimationInProgress = true;\r\n\r\n if(this.onScrollMeasure) {\r\n this.cancelMeasure();\r\n this.needCheckAfterAnimation = true;\r\n }\r\n }, () => {\r\n this.isHeavyAnimationInProgress = false;\r\n\r\n if(this.needCheckAfterAnimation) {\r\n this.onScroll();\r\n this.needCheckAfterAnimation = false;\r\n }\r\n });\r\n }\r\n\r\n public removeListeners() {\r\n if(!this.removeHeavyAnimationListener) {\r\n return;\r\n }\r\n\r\n window.removeEventListener('resize', this.onScroll);\r\n this.removeScrollListener();\r\n\r\n this.removeHeavyAnimationListener();\r\n this.removeHeavyAnimationListener = undefined;\r\n }\r\n\r\n public append(element: HTMLElement) {\r\n this.container.append(element);\r\n }\r\n\r\n public scrollIntoViewNew(options: Omit<ScrollOptions, 'container'>) {\r\n //return Promise.resolve();\r\n return fastSmoothScroll({\r\n ...options,\r\n container: this.container\r\n });\r\n }\r\n\r\n public onScroll = () => {\r\n //if(this.debug) {\r\n //this.log('onScroll call', this.onScrollMeasure);\r\n //}\r\n\r\n //return;\r\n\r\n if(this.isHeavyAnimationInProgress) {\r\n this.cancelMeasure();\r\n this.needCheckAfterAnimation = true;\r\n return;\r\n }\r\n\r\n //if(this.onScrollMeasure || ((this.scrollLocked || (!this.onScrolledTop && !this.onScrolledBottom)) && !this.splitUp && !this.onAdditionalScroll)) return;\r\n if((!this.onScrolledTop && !this.onScrolledBottom) && !this.splitUp && !this.onAdditionalScroll) return;\r\n if(this.onScrollMeasure) return;\r\n // if(this.onScrollMeasure) window.cancelAnimationFrame(this.onScrollMeasure);\r\n this.onScrollMeasure = window.requestAnimationFrame(() => {\r\n this.onScrollMeasure = 0;\r\n\r\n const scrollPosition = this.container[this.scrollProperty];\r\n this.lastScrollDirection = this.lastScrollPosition === scrollPosition ? 0 : (this.lastScrollPosition < scrollPosition ? 1 : -1); // * 1 - bottom, -1 - top\r\n this.lastScrollPosition = scrollPosition;\r\n\r\n // lastScrollDirection check is useless here, every callback should decide on its own\r\n if(this.onAdditionalScroll/* && this.lastScrollDirection !== 0 */) {\r\n this.onAdditionalScroll();\r\n }\r\n \r\n if(this.checkForTriggers) {\r\n this.checkForTriggers();\r\n }\r\n });\r\n };\r\n\r\n public cancelMeasure() {\r\n if(this.onScrollMeasure) {\r\n window.cancelAnimationFrame(this.onScrollMeasure);\r\n this.onScrollMeasure = 0;\r\n }\r\n }\r\n}\r\n\r\nexport type SliceSides = 'top' | 'bottom';\r\nexport type SliceSidesContainer = {[k in SliceSides]: boolean};\r\n\r\nexport default class Scrollable extends ScrollableBase {\r\n public padding: HTMLElement;\r\n \r\n public loadedAll: SliceSidesContainer = {top: true, bottom: false};\r\n\r\n constructor(el: HTMLElement, logPrefix = '', public onScrollOffset = 300, withPaddingContainer?: boolean) {\r\n super(el, logPrefix);\r\n\r\n /* if(withPaddingContainer) {\r\n this.padding = document.createElement('div');\r\n this.padding.classList.add('scrollable-padding');\r\n Array.from(this.container.children).forEach(c => this.padding.append(c));\r\n this.container.append(this.padding);\r\n } */\r\n\r\n this.container.classList.add('scrollable-y');\r\n this.setListeners();\r\n this.scrollProperty = 'scrollTop';\r\n }\r\n\r\n public setVirtualContainer(el?: HTMLElement) {\r\n this.splitUp = el;\r\n this.log('setVirtualContainer:', el, this);\r\n }\r\n\r\n public checkForTriggers = () => {\r\n if((!this.onScrolledTop && !this.onScrolledBottom)) return;\r\n\r\n if(this.isHeavyAnimationInProgress) {\r\n this.onScroll();\r\n return;\r\n }\r\n\r\n const scrollHeight = this.container.scrollHeight;\r\n if(!scrollHeight) { // незачем вызывать триггеры если блок пустой или не виден\r\n return;\r\n }\r\n\r\n const clientHeight = this.container.clientHeight;\r\n const maxScrollTop = scrollHeight - clientHeight;\r\n const scrollTop = this.lastScrollPosition;\r\n\r\n //this.log('checkForTriggers:', scrollTop, maxScrollTop);\r\n\r\n if(this.onScrolledTop && scrollTop <= this.onScrollOffset && this.lastScrollDirection <= 0/* && direction === -1 */) {\r\n this.onScrolledTop();\r\n }\r\n\r\n if(this.onScrolledBottom && (maxScrollTop - scrollTop) <= this.onScrollOffset && this.lastScrollDirection >= 0/* && direction === 1 */) {\r\n this.onScrolledBottom();\r\n }\r\n };\r\n\r\n public prepend(...elements: (HTMLElement | DocumentFragment)[]) {\r\n (this.splitUp || this.padding || this.container).prepend(...elements);\r\n }\r\n\r\n public append(...elements: (HTMLElement | DocumentFragment)[]) {\r\n (this.splitUp || this.padding || this.container).append(...elements);\r\n }\r\n\r\n public getDistanceToEnd() {\r\n return this.scrollHeight - Math.round(this.scrollTop + this.container.offsetHeight);\r\n }\r\n\r\n get isScrolledDown() {\r\n return this.getDistanceToEnd() <= 1;\r\n }\r\n\r\n set scrollTop(y: number) {\r\n this.container.scrollTop = y;\r\n }\r\n \r\n get scrollTop() {\r\n //this.log.trace('get scrollTop');\r\n return this.container.scrollTop;\r\n }\r\n\r\n public setScrollTopSilently(value: number) {\r\n this.lastScrollPosition = value;\r\n this.ignoreNextScrollEvent();\r\n\r\n this.scrollTop = value;\r\n }\r\n\r\n public ignoreNextScrollEvent() {\r\n if(this.removeHeavyAnimationListener) {\r\n this.removeScrollListener();\r\n this.container.addEventListener('scroll', (e) => {\r\n cancelEvent(e);\r\n this.addScrollListener();\r\n }, {capture: true, passive: false, once: true});\r\n }\r\n }\r\n \r\n get scrollHeight() {\r\n return this.container.scrollHeight;\r\n }\r\n}\r\n\r\nexport class ScrollableX extends ScrollableBase {\r\n constructor(el: HTMLElement, logPrefix = '', public onScrollOffset = 300, public splitCount = 15, public container: HTMLElement = document.createElement('div')) {\r\n super(el, logPrefix, container);\r\n\r\n this.container.classList.add('scrollable-x');\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n const scrollHorizontally = (e: any) => {\r\n if(!e.deltaX && this.container.scrollWidth > this.container.clientWidth) {\r\n this.container.scrollLeft += e.deltaY / 4;\r\n cancelEvent(e);\r\n }\r\n };\r\n \r\n this.container.addEventListener('wheel', scrollHorizontally, {passive: false});\r\n }\r\n\r\n this.scrollProperty = 'scrollLeft';\r\n }\r\n}\r\n","/*\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 appStateManager from \"../lib/appManagers/appStateManager\";\r\nimport ripple from \"./ripple\";\r\nimport { LangPackKey, _i18n } from \"../lib/langPack\";\r\nimport getDeepProperty from \"../helpers/object/getDeepProperty\";\r\n\r\nexport type CheckboxFieldOptions = {\r\n text?: LangPackKey,\r\n textArgs?: any[],\r\n name?: string, \r\n round?: boolean, \r\n toggle?: boolean,\r\n stateKey?: string,\r\n stateValues?: any[],\r\n disabled?: boolean,\r\n checked?: boolean,\r\n restriction?: boolean,\r\n withRipple?: boolean,\r\n withHover?: boolean,\r\n};\r\nexport default class CheckboxField {\r\n public input: HTMLInputElement;\r\n public label: HTMLLabelElement;\r\n public span: HTMLSpanElement;\r\n\r\n constructor(options: CheckboxFieldOptions = {}) {\r\n const label = this.label = document.createElement('label');\r\n label.classList.add('checkbox-field');\r\n\r\n if(options.restriction) {\r\n label.classList.add('checkbox-field-restriction');\r\n }\r\n\r\n if(options.round) {\r\n label.classList.add('checkbox-field-round');\r\n }\r\n\r\n if(options.disabled) {\r\n this.toggleDisability(true);\r\n }\r\n\r\n const input = this.input = document.createElement('input');\r\n input.classList.add('checkbox-field-input');\r\n input.type = 'checkbox';\r\n if(options.name) {\r\n input.id = 'input-' + options.name;\r\n }\r\n\r\n if(options.checked) {\r\n input.checked = true;\r\n }\r\n\r\n if(options.stateKey) {\r\n appStateManager.getState().then(state => {\r\n const stateValue = getDeepProperty(state, options.stateKey);\r\n let checked: boolean;\r\n if(options.stateValues) {\r\n checked = options.stateValues.indexOf(stateValue) === 1;\r\n } else {\r\n checked = stateValue;\r\n }\r\n\r\n this.setValueSilently(checked);\r\n\r\n input.addEventListener('change', () => {\r\n let value: any;\r\n if(options.stateValues) {\r\n value = options.stateValues[input.checked ? 1 : 0];\r\n } else {\r\n value = input.checked;\r\n }\r\n\r\n appStateManager.setByKey(options.stateKey, value);\r\n });\r\n });\r\n }\r\n\r\n let span: HTMLSpanElement;\r\n if(options.text) {\r\n span = this.span = document.createElement('span');\r\n span.classList.add('checkbox-caption');\r\n _i18n(span, options.text, options.textArgs);\r\n } else {\r\n label.classList.add('checkbox-without-caption');\r\n }\r\n\r\n label.append(input);\r\n\r\n if(options.toggle) {\r\n label.classList.add('checkbox-field-toggle');\r\n\r\n const toggle = document.createElement('div');\r\n toggle.classList.add('checkbox-toggle');\r\n label.append(toggle);\r\n } else {\r\n const box = document.createElement('div');\r\n box.classList.add('checkbox-box');\r\n \r\n const checkSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n checkSvg.classList.add('checkbox-box-check');\r\n checkSvg.setAttributeNS(null, 'viewBox', '0 0 24 24');\r\n const use = document.createElementNS(\"http://www.w3.org/2000/svg\", \"use\");\r\n use.setAttributeNS(null, 'href', '#check');\r\n use.setAttributeNS(null, 'x', '-1');\r\n checkSvg.append(use);\r\n \r\n const bg = document.createElement('div');\r\n bg.classList.add('checkbox-box-background');\r\n \r\n const border = document.createElement('div');\r\n border.classList.add('checkbox-box-border');\r\n \r\n box.append(border, bg, checkSvg);\r\n \r\n label.append(box);\r\n }\r\n\r\n if(span) {\r\n label.append(span);\r\n }\r\n\r\n if(options.withRipple) {\r\n label.classList.add('checkbox-ripple', 'hover-effect');\r\n ripple(label, undefined, undefined, true);\r\n //label.prepend(input);\r\n } else if(options.withHover) {\r\n label.classList.add('hover-effect');\r\n }\r\n }\r\n\r\n get checked() {\r\n return this.input.checked;\r\n }\r\n\r\n set checked(checked: boolean) {\r\n /* if(this.checked === checked) {\r\n return;\r\n } */\r\n \r\n this.setValueSilently(checked);\r\n\r\n const event = new Event('change', {bubbles: true, cancelable: true});\r\n this.input.dispatchEvent(event);\r\n }\r\n\r\n public setValueSilently(checked: boolean) {\r\n this.input.checked = checked;\r\n }\r\n\r\n public toggleDisability(disable: boolean) {\r\n this.label.classList.toggle('checkbox-disabled', disable);\r\n return () => this.toggleDisability(!disable);\r\n }\r\n}\r\n","/*\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\nexport default function toggleDisability(elements: HTMLElement[], disable: boolean): () => void {\r\n if(disable) {\r\n elements.forEach(el => el.setAttribute('disabled', 'true'));\r\n } else {\r\n elements.forEach(el => el.removeAttribute('disabled'));\r\n }\r\n\r\n return () => toggleDisability(elements, !disable);\r\n}\r\n","/*\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\nexport default function findUpTag(el: any, tag: string): HTMLElement {\r\n return el.closest(tag);\r\n /* if(el.tagName === tag) return el; // 03.02.2020\r\n\r\n while(el.parentElement) {\r\n el = el.parentElement;\r\n if(el.tagName === tag) \r\n return el;\r\n }\r\n return null; */\r\n}\r\n"],"sourceRoot":""}