Spaccogram/webk/public/avatar-QMf5nvPE.js.map

1 line
85 KiB
Plaintext

{"version":3,"file":"avatar-QMf5nvPE.js","sources":["../src/helpers/dom/isSendShortcutPressed.ts","../src/helpers/dom/fullScreen.ts","../src/components/buttonIcon.ts","../src/vendor/solid/web/dist/web.js","../src/components/popups/index.ts","../src/lib/cropper.ts","../src/helpers/blob/readBlobAs.ts","../src/helpers/blob/readBlobAsDataURL.ts","../src/components/popups/avatar.ts"],"sourcesContent":["/*\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 rootScope from '../../lib/rootScope';\nimport {IS_MOBILE, IS_APPLE} from '../../environment/userAgent';\n\nexport default function isSendShortcutPressed(e: KeyboardEvent) {\n if(e.key === 'Enter' && !IS_MOBILE && !e.isComposing) {\n /* if(e.ctrlKey || e.metaKey) {\n this.messageInput.innerHTML += '<br>';\n placeCaretAtEnd(this.message)\n return;\n } */\n\n if(rootScope.settings.sendShortcut === 'enter') {\n if(e.shiftKey || e.ctrlKey || e.metaKey) {\n return;\n }\n\n return true;\n } else {\n const secondaryKey = IS_APPLE ? e.metaKey : e.ctrlKey;\n if(e.shiftKey || (IS_APPLE ? e.ctrlKey : e.metaKey)) {\n return;\n }\n\n if(secondaryKey) {\n return true;\n }\n }\n }\n\n return false;\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 '../listenerSetter';\n\nexport function requestFullScreen(element: HTMLElement) {\n if(element.requestFullscreen) {\n element.requestFullscreen();\n // @ts-ignore\n } else if(element.mozRequestFullScreen) {\n // @ts-ignore\n element.mozRequestFullScreen(); // Firefox\n // @ts-ignore\n } else if(element.webkitRequestFullscreen) {\n // @ts-ignore\n element.webkitRequestFullscreen(); // Chrome and Safari\n // @ts-ignore\n } else if(element.msRequestFullscreen) {\n // @ts-ignore\n element.msRequestFullscreen();\n }\n}\n\nexport function cancelFullScreen() {\n // @ts-ignore\n if(document.cancelFullScreen) {\n // @ts-ignore\n document.cancelFullScreen();\n // @ts-ignore\n } else if(document.mozCancelFullScreen) {\n // @ts-ignore\n document.mozCancelFullScreen();\n // @ts-ignore\n } else if(document.webkitCancelFullScreen) {\n // @ts-ignore\n document.webkitCancelFullScreen();\n // @ts-ignore\n } else if(document.msExitFullscreen) {\n // @ts-ignore\n document.msExitFullscreen();\n }\n}\n\nexport function addFullScreenListener(element: HTMLElement, callback: (e: Event) => any, listenerSetter?: ListenerSetter) {\n const addListener = listenerSetter ? listenerSetter.add(element) : element.addEventListener.bind(element);\n 'webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange'.split(' ').forEach((eventName) => {\n addListener(eventName, callback, false);\n });\n}\n\nexport function getFullScreenElement(): HTMLElement {\n // @ts-ignore\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;\n}\n\nexport function isFullScreen() {\n return !!getFullScreenElement();\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 Button from './button';\n\nconst ButtonIcon = (className?: string, options: Partial<{noRipple: true, onlyMobile: true, asDiv: boolean}> = {}) => {\n const splitted = className?.split(' ');\n const button = Button('btn-icon' + (splitted?.length > 1 ? ' ' + splitted.slice(1).join(' ') : ''), {\n icon: splitted?.[0] as Icon || undefined,\n ...options\n });\n\n return button;\n};\n\nexport default ButtonIcon;\n","import { createRoot, createRenderEffect, sharedConfig, untrack, enableHydration, getOwner, createEffect, runWithOwner, createMemo, createSignal, onCleanup, splitProps } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, createMemo as memo, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"autofocus\", \"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\", \"indeterminate\", \"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\", \"selected\"];\nconst Properties = /*#__PURE__*/new Set([\"className\", \"value\", \"readOnly\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", ...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isCE, isSVG) {\n let node;\n const create = () => {\n const t = document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : t.content.firstChild;\n };\n const fn = isCE ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setAttribute(node, name, value) {\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction className(node, value) {\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => props.ref && props.ref(node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = globalThis._$HY.load;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n gatherHydratable(element, options.renderId);\n const dispose = render(code, element, [...element.childNodes], options);\n sharedConfig.context = null;\n return dispose;\n}\nfunction getNextElement(template) {\n let node, key;\n if (!sharedConfig.context || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (sharedConfig.context) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"#\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n eventHandler(e);\n events.shift();\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev);\n value && node.addEventListener(e, value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\"))) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n }\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n const key = `$$${e.type}`;\n let node = e.composedPath && e.composedPath()[0] || e.target;\n if (e.target !== node) {\n Object.defineProperty(e, \"target\", {\n configurable: true,\n value: node\n });\n }\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n while (node) {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node = node._$host || node.parentNode || node.host;\n }\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n if (sharedConfig.context) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (sharedConfig.context) return current;\n if (t === \"number\") value = value.toString();\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data = value;\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (sharedConfig.context) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (sharedConfig.context) {\n if (!array.length) return current;\n for (let i = 0; i < array.length; i++) {\n if (array[i].parentNode) return current = array;\n }\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (sharedConfig.context && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[i],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n const hydrate = sharedConfig.context;\n return `${hydrate.id}${hydrate.count++}`;\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nfunction voidFn() {}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName);\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction Dynamic(props) {\n const [p, others] = splitProps(props, [\"component\"]);\n const cached = createMemo(() => p.component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(others));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg);\n spread(el, others, isSvg);\n return el;\n }\n });\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, hydrate, innerHTML, insert, isDev, isServer, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\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 ripple from '../ripple';\nimport animationIntersector from '../animationIntersector';\nimport appNavigationController, {NavigationItem} from '../appNavigationController';\nimport {i18n, LangPackKey, _i18n} from '../../lib/langPack';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport blurActiveElement from '../../helpers/dom/blurActiveElement';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport {attachClickEvent, simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport isSendShortcutPressed from '../../helpers/dom/isSendShortcutPressed';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport EventListenerBase, {EventListenerListeners} from '../../helpers/eventListenerBase';\nimport {addFullScreenListener, getFullScreenElement} from '../../helpers/dom/fullScreen';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport overlayCounter from '../../helpers/overlayCounter';\nimport Scrollable from '../scrollable';\nimport {getMiddleware, MiddlewareHelper} from '../../helpers/middleware';\nimport ButtonIcon from '../buttonIcon';\nimport Icon from '../icon';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport {JSX} from 'solid-js';\nimport {render} from 'solid-js/web';\n\nexport type PopupButton = {\n text?: HTMLElement | DocumentFragment | Text,\n callback?: (e: MouseEvent) => void | MaybePromise<boolean>,\n langKey?: LangPackKey,\n langArgs?: any[],\n isDanger?: boolean,\n isCancel?: boolean,\n element?: HTMLButtonElement,\n noRipple?: boolean,\n iconLeft?: Icon,\n iconRight?: Icon\n};\n\nexport type PopupOptions = Partial<{\n closable: boolean,\n onBackClick: () => void | false,\n isConfirmationNeededOnClose: () => void | boolean | Promise<any>, // should return boolean instantly or `Promise` from `confirmationPopup`\n overlayClosable: boolean,\n withConfirm: LangPackKey | boolean,\n body: boolean,\n footer: boolean,\n confirmShortcutIsSendShortcut: boolean,\n withoutOverlay: boolean,\n scrollable: boolean,\n buttons: Array<PopupButton>,\n title: boolean | LangPackKey | DocumentFragment | HTMLElement,\n floatingHeader: boolean,\n withFooterConfirm: boolean\n}>;\n\nexport interface PopupElementConstructable<T extends PopupElement = any> {\n new(...args: any[]): T;\n}\n\nconst DEFAULT_APPEND_TO = document.body;\nlet appendPopupTo = DEFAULT_APPEND_TO;\n\nconst onFullScreenChange = () => {\n appendPopupTo = getFullScreenElement() || DEFAULT_APPEND_TO;\n PopupElement.reAppend();\n};\n\naddFullScreenListener(DEFAULT_APPEND_TO, onFullScreenChange);\n\ntype PopupListeners = {\n close: () => void,\n closeAfterTimeout: () => void\n};\n\nexport default class PopupElement<T extends EventListenerListeners = {}> extends EventListenerBase<PopupListeners & T> {\n private static POPUPS: PopupElement<any>[] = [];\n public static MANAGERS: AppManagers;\n\n protected element = document.createElement('div');\n protected container = document.createElement('div');\n protected header = document.createElement('div');\n protected title = document.createElement('div');\n protected footer: HTMLElement;\n protected btnClose: HTMLElement;\n protected btnCloseAnimatedIcon: HTMLElement;\n protected btnConfirm: HTMLButtonElement;\n protected body: HTMLElement;\n protected buttonsEl: HTMLElement;\n\n protected isConfirmationNeededOnClose: PopupOptions['isConfirmationNeededOnClose'];\n\n protected navigationItem: NavigationItem;\n\n protected listenerSetter: ListenerSetter;\n\n protected confirmShortcutIsSendShortcut: boolean;\n protected btnConfirmOnEnter: HTMLElement;\n\n protected withoutOverlay: boolean;\n\n protected managers: AppManagers;\n\n protected scrollable: Scrollable;\n\n protected buttons: Array<PopupButton>;\n\n protected middlewareHelper: MiddlewareHelper;\n protected destroyed: boolean;\n\n protected night: boolean;\n\n constructor(className: string, options: PopupOptions = {}) {\n super(false);\n this.element.classList.add('popup');\n this.element.className = 'popup' + (className ? ' ' + className : '');\n this.container.classList.add('popup-container', 'z-depth-1');\n\n if(overlayCounter.isDarkOverlayActive) {\n this.night = true;\n this.element.classList.add('night');\n }\n\n this.header.classList.add('popup-header');\n\n if(options.title) {\n this.title.classList.add('popup-title');\n if(typeof(options.title) === 'string') {\n _i18n(this.title, options.title);\n } else if(typeof(options.title) !== 'boolean') {\n this.title.append(options.title);\n }\n\n this.header.append(this.title);\n }\n\n this.isConfirmationNeededOnClose = options.isConfirmationNeededOnClose;\n this.middlewareHelper = getMiddleware();\n this.listenerSetter = new ListenerSetter();\n this.managers = PopupElement.MANAGERS;\n\n this.confirmShortcutIsSendShortcut = options.confirmShortcutIsSendShortcut;\n\n if(options.closable) {\n this.btnClose = ButtonIcon('', {noRipple: true});\n this.btnClose.classList.add('popup-close');\n // ripple(this.closeBtn);\n this.header.prepend(this.btnClose);\n\n if(options.onBackClick) {\n this.btnCloseAnimatedIcon = document.createElement('div');\n this.btnCloseAnimatedIcon.classList.add('animated-close-icon');\n this.btnClose.append(this.btnCloseAnimatedIcon);\n } else {\n this.btnClose.append(Icon('close'));\n }\n\n attachClickEvent(this.btnClose, () => {\n if(options.onBackClick && this.btnCloseAnimatedIcon.classList.contains('state-back')) {\n if(options.onBackClick() !== false) {\n this.btnCloseAnimatedIcon.classList.remove('state-back');\n }\n } else {\n this.hide();\n }\n }, {listenerSetter: this.listenerSetter});\n }\n\n this.withoutOverlay = options.withoutOverlay;\n if(this.withoutOverlay) {\n this.element.classList.add('no-overlay');\n }\n\n if(options.overlayClosable) {\n attachClickEvent(this.element, (e: MouseEvent) => {\n if(findUpClassName(e.target, 'popup-container') || !(e.target as HTMLElement).isConnected) {\n return;\n }\n\n this.hide();\n }, {listenerSetter: this.listenerSetter});\n }\n\n if(options.withConfirm) {\n this.btnConfirm = document.createElement('button');\n this.btnConfirm.classList.add('btn-primary', 'btn-color-primary');\n if(options.withConfirm !== true) {\n this.btnConfirm.append(i18n(options.withConfirm));\n }\n this.header.append(this.btnConfirm);\n // ripple(this.btnConfirm);\n }\n\n this.container.append(this.header);\n if(options.body) {\n this.body = document.createElement('div');\n this.body.classList.add('popup-body');\n this.container.append(this.body);\n }\n\n if(options.scrollable) {\n const scrollable = this.scrollable = new Scrollable(this.body);\n this.attachScrollableListeners();\n\n if(options.floatingHeader) {\n this.attachScrollableListeners(this.header);\n const background = document.createElement('div');\n background.classList.add('popup-header-background');\n this.header.prepend(background);\n this.header.classList.add('is-floating');\n }\n\n if(!this.body) {\n this.header.after(scrollable.container);\n }\n }\n\n if(options.footer) {\n this.footer = document.createElement('div');\n this.footer.classList.add('popup-footer');\n (this.body || this.container).append(this.footer);\n\n if(options.withFooterConfirm) {\n this.footer.append(this.btnConfirm);\n }\n }\n\n this.btnConfirmOnEnter = this.btnConfirm;\n this.setButtons(options.buttons);\n\n this.element.append(this.container);\n\n PopupElement.POPUPS.push(this);\n }\n\n protected setButtons(buttons: PopupButton[]) {\n this.buttons = buttons;\n if(this.buttonsEl) {\n this.buttonsEl.remove();\n this.buttonsEl = undefined;\n }\n\n if(!buttons?.length) {\n return;\n }\n\n const buttonsDiv = this.buttonsEl = document.createElement('div');\n buttonsDiv.classList.add('popup-buttons');\n\n const buttonsElements = buttons.map((b) => {\n const button = document.createElement('button');\n button.className = 'popup-button btn' + (b.isDanger ? ' danger' : ' primary');\n\n if(!b.noRipple) {\n ripple(button);\n }\n\n if(b.text) {\n button.append(b.text);\n } else if(b.langKey) {\n button.append(i18n(b.langKey, b.langArgs));\n }\n\n if(b.iconLeft || b.iconRight) {\n const i = Icon(b.iconLeft || b.iconRight, 'popup-button-icon', b.iconLeft ? 'left' : 'right');\n button.classList.add('with-icon');\n if(b.iconLeft) button.prepend(i);\n else button.append(i);\n }\n\n attachClickEvent(button, async(e) => {\n let result = b.callback?.(e);\n if(result !== undefined && result instanceof Promise) {\n const toggle = toggleDisability([b.element], true);\n try {\n result = await result;\n } catch(err) {\n result = false;\n }\n\n if(result === false) {\n toggle();\n }\n }\n\n if(result === false) {\n return;\n }\n\n this.hide();\n }, {listenerSetter: this.listenerSetter});\n\n return b.element = button;\n });\n\n if(!this.btnConfirmOnEnter && buttons.length === 2) {\n const button = buttons.find((button) => !button.isCancel);\n if(button) {\n this.btnConfirmOnEnter = button.element;\n }\n }\n\n if(buttons.length >= 3) {\n buttonsDiv.classList.add('is-vertical-layout');\n }\n\n buttonsDiv.append(...buttonsElements);\n this.container.append(buttonsDiv);\n }\n\n protected attachScrollableListeners(setClassOn?: HTMLElement) {\n return this.scrollable.attachBorderListeners(setClassOn);\n }\n\n protected onContentUpdate() {\n this.scrollable?.onAdditionalScroll?.();\n }\n\n public show() {\n this.navigationItem = {\n type: 'popup',\n onPop: () => {\n if(this.isConfirmationNeededOnClose) {\n const result = this.isConfirmationNeededOnClose();\n if(result) {\n Promise.resolve(result).then(() => {\n this.destroy();\n });\n\n return false;\n }\n }\n\n return this.destroy();\n }\n };\n\n appNavigationController.pushItem(this.navigationItem);\n\n blurActiveElement(); // * hide mobile keyboard\n appendPopupTo.append(this.element);\n void this.element.offsetWidth; // reflow\n this.element.classList.add('active');\n\n this.onContentUpdate();\n\n if(!this.withoutOverlay) {\n overlayCounter.isOverlayActive = true;\n animationIntersector.checkAnimations2(true);\n }\n\n // cannot add event instantly because keydown propagation will fire it\n // if(this.btnConfirmOnEnter) {\n setTimeout(() => {\n if(!this.element.classList.contains('active')) {\n return;\n }\n\n this.listenerSetter.add(document.body)('keydown', (e) => {\n if(!this.btnConfirmOnEnter ||\n (this.btnConfirmOnEnter as HTMLButtonElement).disabled ||\n PopupElement.POPUPS[PopupElement.POPUPS.length - 1] !== this) {\n return;\n }\n\n if(this.confirmShortcutIsSendShortcut ? isSendShortcutPressed(e) : e.key === 'Enter') {\n simulateClickEvent(this.btnConfirmOnEnter);\n cancelEvent(e);\n }\n });\n }, 0);\n // }\n }\n\n public hide() {\n if(this.destroyed || !this.navigationItem) {\n return;\n }\n\n appNavigationController.backByItem(this.navigationItem);\n }\n\n public hideWithCallback(callback: () => void) {\n this.addEventListener('closeAfterTimeout', callback as any);\n this.hide();\n }\n\n public forceHide() {\n return this.destroy();\n }\n\n protected destroy() {\n if(this.destroyed) {\n return;\n }\n\n this.destroyed = true;\n this.dispatchEvent<PopupListeners>('close');\n this.element.classList.add('hiding');\n this.element.classList.remove('active');\n this.listenerSetter.removeAll();\n this.middlewareHelper.destroy();\n\n if(!this.withoutOverlay) {\n overlayCounter.isOverlayActive = false;\n }\n\n appNavigationController.removeItem(this.navigationItem);\n this.navigationItem = undefined;\n\n indexOfAndSplice(PopupElement.POPUPS, this);\n\n // ! calm\n onFullScreenChange();\n\n setTimeout(() => {\n this.element.remove();\n this.dispatchEvent<PopupListeners>('closeAfterTimeout');\n this.cleanup();\n this.scrollable?.destroy();\n\n if(!this.withoutOverlay) {\n animationIntersector.checkAnimations2(false);\n }\n }, 250);\n }\n\n protected appendSolid(callback: () => JSX.Element) {\n const div = document.createElement('div');\n (this.scrollable || this.body).prepend(div);\n const dispose = render(callback, div);\n this.addEventListener('closeAfterTimeout', dispose as any);\n }\n\n public static reAppend() {\n this.POPUPS.forEach((popup) => {\n const {element, container} = popup;\n const parentElement = element.parentElement;\n if(parentElement && parentElement !== appendPopupTo && appendPopupTo !== container) {\n appendPopupTo.append(element);\n }\n });\n }\n\n public static getPopups<T extends PopupElement>(popupConstructor: PopupElementConstructable<T>) {\n return this.POPUPS.filter((element) => element instanceof popupConstructor) as T[];\n }\n\n public static createPopup<T extends /* PopupElement */any, A extends Array<any>>(ctor: {new(...args: A): T}, ...args: A) {\n const popup = new ctor(...args);\n return popup;\n }\n}\n\nexport const addCancelButton = (buttons: PopupButton[]) => {\n const button = buttons.find((b) => b.isCancel);\n if(!button) {\n buttons.push({\n langKey: 'Cancel',\n isCancel: true\n });\n }\n\n return buttons;\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\nfunction resizeableImage(originalImage: HTMLImageElement, canvas?: HTMLCanvasElement) {\n let cropComponent: HTMLDivElement,\n container: HTMLDivElement,\n cropImage: HTMLImageElement,\n cropLeft = 0,\n cropTop = 0,\n cropWidth = 0,\n cropHeight = 0,\n scaledRatio = 0;\n\n const keyZoomValue = 4.0;\n const event_state: Partial<{\n mouse_x: number,\n mouse_y: number,\n container_width: number,\n container_height: number,\n container_left: number,\n container_top: number\n }> = {};\n const MINWIDTH = 50,\n MINHEIGHT = 50,\n CROPWIDTH = 200,\n CROPHEIGHT = 200;\n\n if(originalImage.complete) init();\n else originalImage.onload = init;\n\n function removeHandlers() {\n container.removeEventListener('mousedown', startMoving);\n container.removeEventListener('touchstart', startMoving);\n container.removeEventListener('wheel', resizing);\n\n document.removeEventListener('mouseup', endMoving);\n document.removeEventListener('touchend', endMoving);\n document.removeEventListener('mousemove', moving);\n document.removeEventListener('touchmove', moving);\n document.removeEventListener('keypress', keyHandler);\n\n cropComponent.remove();\n container.remove();\n cropImage.remove();\n }\n\n function addHandlers() {\n container.addEventListener('mousedown', startMoving, false);\n container.addEventListener('touchstart', startMoving, false);\n container.addEventListener('wheel', resizing, false);\n\n document.addEventListener('keypress', keyHandler, false);\n // document.querySelector('.btn-crop').addEventListener('click', openCropCanvasImg);\n }\n\n function init() {\n originalImage.classList.add('crop-blur');\n originalImage.draggable = false;\n\n cropImage = new Image();\n cropImage.src = originalImage.src;\n cropImage.draggable = false;\n cropImage.classList.add('crop-overlay-image');\n\n if(!canvas) {\n canvas = document.createElement('canvas');\n }\n\n cropComponent = document.createElement('div');\n cropComponent.classList.add('crop-component');\n\n container = document.createElement('div');\n container.classList.add('crop-overlay');\n\n const overlayColor = document.createElement('div');\n overlayColor.classList.add('crop-overlay-color');\n\n cropComponent.appendChild(container);\n const wrapper = originalImage.parentNode as HTMLElement;\n wrapper.appendChild(cropComponent);\n cropComponent.appendChild(cropImage);\n cropComponent.appendChild(originalImage);\n cropComponent.appendChild(overlayColor);\n container.appendChild(cropImage);\n\n cropImage.style.maxWidth = originalImage.width + 'px';\n\n scaledRatio = originalImage.naturalWidth / originalImage.offsetWidth;\n\n const left = originalImage.offsetWidth / 2 - CROPWIDTH / 2;\n const top = originalImage.offsetHeight / 2 - CROPHEIGHT / 2;\n\n updateCropSize(CROPWIDTH, CROPHEIGHT);\n updateCropImage(left, top);\n updateContainer(left, top);\n addHandlers();\n // crop();\n }\n\n function updateCropSize(width: number, height: number) {\n cropWidth = width * scaledRatio;\n cropHeight = height * scaledRatio;\n\n container.style.width = width + 'px';\n container.style.height = height + 'px';\n }\n\n function updateCropImage(left: number, top: number) {\n cropTop = top * scaledRatio;\n cropLeft = left * scaledRatio;\n\n cropImage.style.top = -top + 'px';\n cropImage.style.left = -left + 'px';\n }\n\n function updateContainer(left: number, top: number) {\n container.style.top = top + 'px';\n container.style.left = left + 'px';\n }\n\n // Save the initial event details and container state\n function saveEventState(e: any) {\n event_state.container_width = container.offsetWidth;\n event_state.container_height = container.offsetHeight;\n\n event_state.container_left = container.offsetLeft;\n event_state.container_top = container.offsetTop;\n\n event_state.mouse_x = (e.clientX || e.pageX || e.touches && e.touches[0].clientX) + window.scrollX;\n event_state.mouse_y = (e.clientY || e.pageY || e.touches && e.touches[0].clientY) + window.scrollY;\n }\n\n function imgZoom(zoom: number) {\n zoom = zoom * Math.PI * 2\n const newWidth = Math.floor(container.clientWidth + zoom),\n newHeight = Math.floor(container.clientHeight + zoom),\n w = cropImage.clientWidth,\n h = cropImage.clientHeight;\n let left: number,\n top: number;\n\n if(newWidth < MINWIDTH) {\n return;\n } else if(newWidth > w) {\n return;\n }\n\n left = container.offsetLeft - (zoom / 2);\n top = container.offsetTop - (zoom / 2);\n const right = left + newWidth;\n const bottom = top + newHeight;\n\n if(left < 0) left = 0;\n if(top < 0) top = 0;\n\n if(right > w) return;\n if(bottom > h) return;\n\n updateCropSize(newWidth, newWidth);\n updateCropImage(left, top);\n updateContainer(left, top);\n // crop();\n }\n\n function keyHandler(e: KeyboardEvent) {\n e.preventDefault();\n\n switch(String.fromCharCode(e.charCode)) {\n case '+':\n imgZoom(keyZoomValue);\n break;\n case '-':\n imgZoom(-keyZoomValue);\n break;\n }\n }\n\n function resizing(e: any) {\n e.preventDefault();\n imgZoom(e.deltaY > 0 ? 1 : -1);\n }\n\n function startMoving(e: MouseEvent | TouchEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n saveEventState(e);\n\n document.addEventListener('mousemove', moving);\n document.addEventListener('touchmove', moving);\n document.addEventListener('mouseup', endMoving);\n document.addEventListener('touchend', endMoving);\n }\n\n function endMoving(e: MouseEvent | TouchEvent) {\n e.preventDefault();\n\n document.removeEventListener('mouseup', endMoving);\n document.removeEventListener('touchend', endMoving);\n document.removeEventListener('mousemove', moving);\n document.removeEventListener('touchmove', moving);\n }\n\n function moving(e: any) {\n const currentTouch = {x: 0, y: 0};\n\n e.preventDefault();\n e.stopPropagation();\n\n currentTouch.x = e.pageX || e.touches && e.touches[0].pageX;\n currentTouch.y = e.pageY || e.touches && e.touches[0].pageY;\n\n let left = currentTouch.x - (event_state.mouse_x - event_state.container_left);\n let top = currentTouch.y - (event_state.mouse_y - event_state.container_top);\n const w = container.offsetWidth;\n const h = container.offsetHeight;\n\n if(left < 0) left = 0;\n else if(left > cropImage.offsetWidth - w) left = cropImage.offsetWidth - w;\n\n if(top < 0) top = 0;\n else if(top > cropImage.offsetHeight - h) top = cropImage.offsetHeight - h;\n\n updateCropImage(left, top);\n updateContainer(left, top);\n // crop();\n }\n\n function crop() {\n canvas.width = cropWidth;\n canvas.height = cropHeight;\n\n const ctx = canvas.getContext('2d');\n ctx.drawImage(originalImage,\n cropLeft, cropTop,\n cropWidth, cropHeight,\n 0, 0,\n cropWidth, cropHeight\n );\n }\n\n return {crop, removeHandlers};\n}\n\nexport default resizeableImage;\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\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise<string>;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise<string>;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise<ArrayBuffer>;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise<any> {\n // const perf = performance.now();\n return new Promise<any>((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\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 readBlobAs from './readBlobAs';\n\nexport default function readBlobAsDataURL(blob: Blob) {\n return readBlobAs(blob, 'readAsDataURL');\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 {AppDownloadManager} from '../../lib/appManagers/appDownloadManager';\nimport resizeableImage from '../../lib/cropper';\nimport PopupElement from '.';\nimport {_i18n} from '../../lib/langPack';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport readBlobAsDataURL from '../../helpers/blob/readBlobAsDataURL';\nimport appDownloadManager from '../../lib/appManagers/appDownloadManager';\nimport Button from '../button';\n\nexport default class PopupAvatar extends PopupElement {\n private cropContainer: HTMLElement;\n private input: HTMLInputElement;\n private h6: HTMLElement;\n\n private image = new Image();\n\n private canvas: HTMLCanvasElement;\n private blob: Blob;\n private cropper = {\n crop: () => {},\n removeHandlers: () => {}\n };\n\n private onCrop: (upload: () => ReturnType<AppDownloadManager['upload']>) => void;\n\n constructor(options: Partial<{\n isForum: boolean\n }> = {}) {\n super('popup-avatar', {closable: true});\n\n this.h6 = document.createElement('h6');\n _i18n(this.h6, 'Popup.Avatar.Title');\n\n this.btnClose.classList.remove('btn-icon');\n\n this.header.append(this.h6);\n\n this.cropContainer = document.createElement('div');\n this.cropContainer.classList.add('crop');\n this.cropContainer.append(this.image);\n\n if(options.isForum) {\n this.cropContainer.classList.add('is-forum');\n }\n\n this.input = document.createElement('input');\n this.input.type = 'file';\n this.input.style.display = 'none';\n this.listenerSetter.add(this.input)('change', (e: any) => {\n const file = e.target.files[0];\n if(!file) {\n return;\n }\n\n readBlobAsDataURL(file).then((contents) => {\n this.image = new Image();\n this.cropContainer.append(this.image);\n this.image.src = contents;\n\n this.image.onload = () => {\n /* let {w, h} = calcImageInBox(this.image.naturalWidth, this.image.naturalHeight, 460, 554);\n cropContainer.style.width = w + 'px';\n cropContainer.style.height = h + 'px'; */\n this.show();\n\n this.cropper = resizeableImage(this.image, this.canvas);\n this.input.value = '';\n };\n });\n }, false);\n\n this.btnConfirm = Button(`btn-primary btn-color-primary btn-circle btn-crop btn-icon z-depth-1`, {noRipple: true, icon: 'check'});\n attachClickEvent(this.btnConfirm, () => {\n this.cropper.crop();\n this.hide();\n\n this.canvas.toBlob((blob) => {\n this.blob = blob; // save blob to send after reg\n this.darkenCanvas();\n this.resolve();\n }, 'image/jpeg', 1);\n }, {listenerSetter: this.listenerSetter});\n\n this.container.append(this.cropContainer, this.btnConfirm, this.input);\n\n this.addEventListener('closeAfterTimeout', () => {\n this.cropper.removeHandlers();\n if(this.image) {\n this.image.remove();\n }\n });\n }\n\n private resolve() {\n this.onCrop(() => {\n return appDownloadManager.upload(this.blob);\n });\n }\n\n public open(postCanvas: HTMLCanvasElement, onCrop: PopupAvatar['onCrop']) {\n this.canvas = postCanvas;\n this.onCrop = onCrop;\n\n this.input.click();\n }\n\n public darkenCanvas() {\n const ctx = this.canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0, 0, 0, 0.3)';\n ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n }\n}\n"],"names":["isSendShortcutPressed","e","IS_MOBILE","rootScope","secondaryKey","IS_APPLE","requestFullScreen","element","cancelFullScreen","addFullScreenListener","callback","listenerSetter","addListener","eventName","getFullScreenElement","isFullScreen","ButtonIcon","className","options","splitted","Button","booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","a","DelegatedEvents","SVGElements","SVGNamespace","reconcileArrays","parentNode","b","bLength","aEnd","bEnd","aStart","bStart","after","map","node","i","index","sequence","t","$$EVENTS","render","code","init","disposer","createRoot","dispose","insert","template","html","isCE","isSVG","create","fn","untrack","delegateEvents","eventNames","document","l","name","eventHandler","setAttribute","value","setAttributeNS","namespace","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","len","key","toggleClassKey","classValue","style","nodeStyle","v","s","spread","props","skipChildren","prevProps","createRenderEffect","insertExpression","assign","use","arg","parent","accessor","marker","initial","current","skipRef","assignProp","toPropertyName","_","w","classNames","nameLen","isProp","isChildProp","propAlias","forceProp","h","ns","data","unwrapArray","multi","cleanChildren","array","currentArray","normalizeIncomingArray","appendNodes","normalized","unwrap","dynamic","item","replacement","inserted","el","isParent","SVG_NAMESPACE","createElement","Portal","useShadow","mount","owner","getOwner","content","hydrating","sharedConfig","createEffect","runWithOwner","createMemo","clean","setClean","createSignal","cleanup","onCleanup","container","renderRoot","Dynamic","p","others","splitProps","cached","component","isSvg","DEFAULT_APPEND_TO","appendPopupTo","onFullScreenChange","PopupElement","_PopupElement","EventListenerBase","overlayCounter","_i18n","getMiddleware","ListenerSetter","Icon","attachClickEvent","findUpClassName","i18n","scrollable","Scrollable","background","buttons","buttonsDiv","buttonsElements","button","ripple","result","toggle","toggleDisability","setClassOn","appNavigationController","blurActiveElement","animationIntersector","simulateClickEvent","cancelEvent","indexOfAndSplice","div","popup","parentElement","popupConstructor","ctor","args","addCancelButton","resizeableImage","originalImage","canvas","cropComponent","cropImage","cropLeft","cropTop","cropWidth","cropHeight","scaledRatio","keyZoomValue","event_state","MINWIDTH","CROPWIDTH","CROPHEIGHT","removeHandlers","startMoving","resizing","endMoving","moving","keyHandler","addHandlers","overlayColor","left","top","updateCropSize","updateCropImage","updateContainer","width","height","saveEventState","imgZoom","zoom","newWidth","newHeight","right","bottom","currentTouch","crop","readBlobAs","blob","method","resolve","reader","readBlobAsDataURL","PopupAvatar","file","contents","appDownloadManager","postCanvas","onCrop","ctx"],"mappings":"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"}