1 line
27 KiB
Plaintext
1 line
27 KiB
Plaintext
{"version":3,"file":"button-DUmZNV0E.js","sources":["../src/helpers/sequentialDom.ts","../src/components/ripple.ts","../src/icons.ts","../src/iconsReverse.ts","../src/components/icon.ts","../src/components/button.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 {fastRaf} from './schedulers';\nimport deferredPromise, {CancellablePromise} from './cancellablePromise';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport isInDOM from './dom/isInDOM';\n\nclass SequentialDom {\n private promises: Partial<{\n read: CancellablePromise<void>,\n write: CancellablePromise<void>\n }> = {};\n private raf = fastRaf.bind(null);\n private scheduled = false;\n\n private do(kind: keyof SequentialDom['promises'], callback?: VoidFunction) {\n let promise = this.promises[kind];\n if(!promise) {\n this.scheduleFlush();\n promise = this.promises[kind] = deferredPromise<void>();\n }\n\n if(callback !== undefined) {\n promise.then(() => callback());\n }\n\n return promise;\n }\n\n public measure(callback?: VoidFunction) {\n return this.do('read', callback);\n }\n\n public mutate(callback?: VoidFunction) {\n return this.do('write', callback);\n }\n\n /**\n * Will fire instantly if element is not connected\n * @param element\n * @param callback\n */\n public mutateElement(element: HTMLElement, callback?: VoidFunction) {\n const isConnected = isInDOM(element);\n const promise = isConnected ? this.mutate() : Promise.resolve();\n\n if(callback !== undefined) {\n if(!isConnected) {\n callback();\n } else {\n promise.then(() => callback());\n }\n }\n\n return promise;\n }\n\n private scheduleFlush() {\n if(!this.scheduled) {\n this.scheduled = true;\n\n this.raf(() => {\n this.promises.read && this.promises.read.resolve();\n this.promises.write && this.promises.write.resolve();\n\n this.scheduled = false;\n this.promises = {};\n });\n }\n }\n}\n\nconst sequentialDom = new SequentialDom();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.sequentialDom = sequentialDom);\nexport default sequentialDom;\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 findUpClassName from '../helpers/dom/findUpClassName';\nimport sequentialDom from '../helpers/sequentialDom';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport findUpAsChild from '../helpers/dom/findUpAsChild';\nimport {fastRaf} from '../helpers/schedulers';\nimport liteMode from '../helpers/liteMode';\n\nlet rippleClickId = 0;\nexport default function ripple(\n elem: HTMLElement,\n callback: (id: number) => Promise<boolean | void> = () => Promise.resolve(),\n onEnd: (id: number) => void = null,\n prepend = false,\n attachListenerTo = elem\n) {\n // return;\n if(elem.querySelector('.c-ripple')) return;\n elem.classList.add('rp');\n\n const r = document.createElement('div');\n r.classList.add('c-ripple');\n\n const isSquare = elem.classList.contains('rp-square');\n if(isSquare) {\n r.classList.add('is-square');\n }\n\n elem[prepend ? 'prepend' : 'append'](r);\n\n let handler: () => void;\n // let animationEndPromise: Promise<number>;\n const drawRipple = (clientX: number, clientY: number) => {\n const startTime = Date.now();\n const circle = document.createElement('div');\n\n const clickId = rippleClickId++;\n\n // console.log('ripple drawRipple');\n\n // const auto = elem.classList.contains('row-sortable') && !elem.classList.contains('cant-sort');\n const auto = false;\n const duration = (auto ? .3 : +window.getComputedStyle(r).getPropertyValue('--ripple-duration').replace('s', '')) * 1000;\n // console.log('ripple duration', duration);\n\n const _handler = handler = () => {\n // handler = () => animationEndPromise.then((duration) => {\n // console.log('ripple animation was:', duration);\n\n // const duration = isSquare || mediaSizes.isMobile ? 200 : 700;\n // return;\n const elapsedTime = Date.now() - startTime;\n const cb = () => {\n // console.log('ripple elapsedTime total pre-remove:', Date.now() - startTime);\n sequentialDom.mutate(() => {\n circle.remove();\n });\n\n onEnd?.(clickId);\n };\n if(elapsedTime < duration) {\n const delay = Math.max(duration - elapsedTime, duration / 2);\n setTimeout(() => circle.classList.add('hiding'), Math.max(delay - duration / 2, 0));\n\n setTimeout(cb, delay);\n } else {\n circle.classList.add('hiding');\n setTimeout(cb, duration / 2);\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n window.removeEventListener('contextmenu', handler);\n window.removeEventListener('mousemove', handler);\n }\n\n handler = null;\n touchStartFired = false;\n };\n // });\n\n callback?.(clickId);\n\n /* callback().then((bad) => {\n if(bad) {\n span.remove();\n return;\n } */\n\n // console.log('ripple after promise', Date.now() - startTime);\n // console.log('ripple tooSlow:', tooSlow);\n /* if(tooSlow) {\n span.remove();\n return;\n } */\n\n fastRaf(() => {\n if(_handler !== handler) {\n return;\n }\n\n const rect = r.getBoundingClientRect();\n circle.classList.add('c-ripple__circle');\n\n const clickX = clientX - rect.left;\n const clickY = clientY - rect.top;\n\n const radius = Math.sqrt((Math.abs(clickY - rect.height / 2) + rect.height / 2) ** 2 + (Math.abs(clickX - rect.width / 2) + rect.width / 2) ** 2);\n const size = radius;\n\n // center of circle\n const x = clickX - size / 2;\n const y = clickY - size / 2;\n\n // console.log('ripple click', offsetFromCenter, size, clickX, clickY);\n\n circle.style.width = circle.style.height = size + 'px';\n circle.style.left = x + 'px';\n circle.style.top = y + 'px';\n circle.style.opacity = '0';\n\n // нижний код выполняется с задержкой\n /* animationEndPromise = new Promise((resolve) => {\n span.addEventListener('animationend', () => {\n // 713 -> 700\n resolve(((Date.now() - startTime) / 100 | 0) * 100);\n }, {once: true});\n }); */\n\n // нижний код не всегда включает анимацию ПРИ КЛИКЕ НА ТАЧПАД БЕЗ ТАПТИК ЭНЖИНА\n /* span.style.display = 'none';\n r.append(span);\n duration = +window.getComputedStyle(span).getPropertyValue('animation-duration').replace('s', '') * 1000;\n span.style.display = ''; */\n\n r.append(circle);\n\n void circle.offsetWidth; // force reflow\n circle.style.opacity = '';\n\n if(auto) {\n // window.addEventListener('mousemove', handler, {once: true, passive: true});\n handler();\n }\n\n // r.classList.add('active');\n // handler();\n });\n // });\n };\n\n const isRippleUnneeded = (e: Event) => {\n return e.target !== elem && (\n ['BUTTON', 'A'].includes((e.target as HTMLElement).tagName) ||\n findUpClassName(e.target as HTMLElement, 'c-ripple') !== r\n ) && (\n attachListenerTo === elem ||\n !findUpAsChild(e.target as HTMLElement, attachListenerTo)\n ) && !findUpClassName(e.target, 'checkbox-field');\n };\n\n // TODO: rename this variable\n let touchStartFired = false;\n if(IS_TOUCH_SUPPORTED) {\n const touchEnd = () => {\n handler?.();\n };\n\n const onTouchStart = (e: TouchEvent) => {\n if(!liteMode.isAvailable('animations')) {\n return;\n }\n\n // console.log('ripple touchstart', e);\n if(e.touches.length > 1 || touchStartFired || isRippleUnneeded(e)) {\n return;\n }\n\n // console.log('touchstart', e);\n touchStartFired = true;\n\n const {clientX, clientY} = e.touches[0];\n drawRipple(clientX, clientY);\n attachListenerTo.addEventListener('touchend', touchEnd, {once: true});\n\n window.addEventListener('touchmove', (e) => {\n e.cancelBubble = true;\n e.stopPropagation();\n touchEnd();\n attachListenerTo.removeEventListener('touchend', touchEnd);\n }, {once: true});\n };\n\n attachListenerTo.addEventListener('touchstart', onTouchStart, {passive: true});\n return {\n dispose: () => attachListenerTo.removeEventListener('touchstart', onTouchStart),\n element: r\n };\n } else {\n const onMouseDown = (e: MouseEvent) => {\n if(![0, 2].includes(e.button)) { // only left and right buttons\n return;\n }\n\n if(!liteMode.isAvailable('animations')) {\n return;\n }\n // console.log('ripple mousedown', e, e.target, findUpClassName(e.target as HTMLElement, 'c-ripple') === r);\n\n if(attachListenerTo.dataset.ripple === '0' || isRippleUnneeded(e)) {\n return;\n } else if(touchStartFired) {\n touchStartFired = false;\n return;\n }\n\n const {clientX, clientY} = e;\n drawRipple(clientX, clientY);\n window.addEventListener('mouseup', handler, {once: true, passive: true});\n window.addEventListener('contextmenu', handler, {once: true, passive: true});\n };\n\n attachListenerTo.addEventListener('mousedown', onMouseDown, {passive: true});\n return {\n dispose: () => attachListenerTo.removeEventListener('mousedown', onMouseDown),\n element: r\n };\n }\n}\n","const Icons = {\n check: 'e900',\n checks: 'e901',\n activesessions: 'e902',\n add: 'e903',\n add_reaction: 'e904',\n addboost: 'e905',\n addmember_filled: 'e906',\n adduser: 'e907',\n admin: 'e908',\n ads: 'e909',\n animals: 'e90a',\n animations: 'e90b',\n archive: 'e90c',\n arrow_down: 'e90d',\n arrow_next: 'e90e',\n arrow_prev: 'e90f',\n arrowcircle: 'e910',\n arrowhead: 'e911',\n attach: 'e912',\n audio_repeat: 'e913',\n audio_repeat_single: 'e914',\n author_hidden: 'e915',\n avatarnext: 'e916',\n avatarprevious: 'e917',\n binfilled: 'e918',\n bold: 'e919',\n bomb: 'e91a',\n boost: 'e91b',\n boostcircle: 'e91c',\n botcom: 'e91d',\n bots: 'e91e',\n bubblereply: 'e91f',\n bug: 'e920',\n calendar: 'e921',\n calendarfilter: 'e922',\n camera: 'e923',\n cameraadd: 'e924',\n captiondown: 'e925',\n captionup: 'e926',\n car: 'e927',\n card: 'e928',\n card_outline: 'e929',\n cash_circle: 'e92a',\n channel: 'e92b',\n channelviews: 'e92c',\n chatspinned: 'e92d',\n chatsplaceholder: 'e92e',\n check1: 'e92f',\n checkbox: 'e930',\n checkboxblock: 'e931',\n checkboxempty: 'e932',\n checkboxon: 'e933',\n checkretract: 'e934',\n checkround: 'e935',\n checkround_filled: 'e936',\n clock: 'e937',\n close: 'e938',\n clouddownload: 'e939',\n collapse: 'e93a',\n colorize: 'e93b',\n comments: 'e93c',\n commentssticker: 'e93d',\n copy: 'e93e',\n crossgif: 'e93f',\n crossround: 'e940',\n crossstar: 'e941',\n darkmode: 'e942',\n data: 'e943',\n delete: 'e944',\n delete_filled: 'e945',\n deletedaccount: 'e946',\n deleteleft: 'e947',\n deleteuser: 'e948',\n devices: 'e949',\n document: 'e94a',\n down: 'e94b',\n download: 'e94c',\n dragfiles: 'e94d',\n dragmedia: 'e94e',\n eats: 'e94f',\n edit: 'e950',\n email: 'e951',\n endcall_filled: 'e952',\n enter: 'e953',\n expand: 'e954',\n eye: 'e955',\n eye1: 'e956',\n eye2: 'e957',\n eyecross_outline: 'e958',\n factcheck: 'e959',\n fast_forward: 'e95a',\n fast_rewind: 'e95b',\n favourites: 'e95c',\n flag: 'e95d',\n flip: 'e95e',\n folder: 'e95f',\n fontsize: 'e960',\n forward: 'e961',\n forward_filled: 'e962',\n fullscreen: 'e963',\n gc_microphone: 'e964',\n gc_microphoneoff: 'e965',\n gifs: 'e966',\n gift: 'e967',\n gift_premium: 'e968',\n group: 'e969',\n group_filled: 'e96a',\n groupmedia: 'e96b',\n groupmediaoff: 'e96c',\n hand: 'e96d',\n help: 'e96e',\n hide: 'e96f',\n image: 'e970',\n info: 'e971',\n info2: 'e972',\n italic: 'e973',\n keyboard: 'e974',\n lamp: 'e975',\n language: 'e976',\n largepause: 'e977',\n largeplay: 'e978',\n left: 'e979',\n limit_chat: 'e97a',\n limit_chats: 'e97b',\n limit_file: 'e97c',\n limit_folders: 'e97d',\n limit_link: 'e97e',\n limit_pin: 'e97f',\n link: 'e980',\n list: 'e981',\n listscreenshare: 'e982',\n livelocation: 'e983',\n location: 'e984',\n lock: 'e985',\n lockoff: 'e986',\n loginlogodesktop: 'e987',\n loginlogomobile: 'e988',\n logout: 'e989',\n mediaspoiler: 'e98a',\n mediaspoileroff: 'e98b',\n mention: 'e98c',\n menu: 'e98d',\n message: 'e98e',\n message_jump: 'e98f',\n message_quote: 'e990',\n messageunread: 'e991',\n microphone: 'e992',\n microphone_crossed: 'e993',\n microphone_crossed_filled: 'e994',\n microphone_filled: 'e995',\n minus: 'e996',\n monospace: 'e997',\n more: 'e998',\n multistories: 'e999',\n mute: 'e99a',\n muted: 'e99b',\n mynotes: 'e99c',\n newchannel: 'e99d',\n newchannel_filled: 'e99e',\n newchat_filled: 'e99f',\n newgroup: 'e9a0',\n newgroup_filled: 'e9a1',\n newprivate: 'e9a2',\n newprivate_filled: 'e9a3',\n newtab: 'e9a4',\n next: 'e9a5',\n nochannel: 'e9a6',\n noncontacts: 'e9a7',\n nosound: 'e9a8',\n online: 'e9a9',\n passwordoff: 'e9aa',\n pause: 'e9ab',\n permissions: 'e9ac',\n phone: 'e9ad',\n phone_filled: 'e9ae',\n pin: 'e9af',\n pin2: 'e9b0',\n pinlist: 'e9b1',\n pinned_filled: 'e9b2',\n pinnedchat: 'e9b3',\n pip: 'e9b4',\n play: 'e9b5',\n playback_05: 'e9b6',\n playback_15: 'e9b7',\n playback_1x: 'e9b8',\n playback_2x: 'e9b9',\n plus: 'e9ba',\n plusround: 'e9bb',\n poll: 'e9bc',\n premium_addone: 'e9bd',\n premium_avatars: 'e9be',\n premium_badge: 'e9bf',\n premium_colors: 'e9c0',\n premium_double: 'e9c1',\n premium_emoji: 'e9c2',\n premium_filesize: 'e9c3',\n premium_lastseen: 'e9c4',\n premium_limits: 'e9c5',\n premium_lock: 'e9c6',\n premium_management: 'e9c7',\n premium_noads: 'e9c8',\n premium_privacy: 'e9c9',\n premium_reactions: 'e9ca',\n premium_restrict: 'e9cb',\n premium_speed: 'e9cc',\n premium_status: 'e9cd',\n premium_stickers: 'e9ce',\n premium_tags: 'e9cf',\n premium_transcription: 'e9d0',\n premium_translate: 'e9d1',\n premium_unlock: 'e9d2',\n premium_wallpaper: 'e9d3',\n previous: 'e9d4',\n promote: 'e9d5',\n quote: 'e9d6',\n quote_outline: 'e9d7',\n radiooff: 'e9d8',\n radioon: 'e9d9',\n reactions: 'e9da',\n reactions_filled: 'e9db',\n readchats: 'e9dc',\n recent: 'e9dd',\n replace: 'e9de',\n reply: 'e9df',\n reply_filled: 'e9e0',\n restrict: 'e9e1',\n revenue: 'e9e2',\n rightpanel: 'e9e3',\n rotate_left: 'e9e4',\n rotate_right: 'e9e5',\n saved: 'e9e6',\n savedmessages: 'e9e7',\n schedule: 'e9e8',\n scheduled: 'e9e9',\n search: 'e9ea',\n select: 'e9eb',\n send: 'e9ec',\n send2: 'e9ed',\n sending: 'e9ee',\n sendingerror: 'e9ef',\n settings: 'e9f0',\n settings_filled: 'e9f1',\n sharescreen_filled: 'e9f2',\n shipping: 'e9f3',\n shuffle: 'e9f4',\n smallscreen: 'e9f5',\n smile: 'e9f6',\n speaker: 'e9f7',\n speakerfilled: 'e9f8',\n speakeroff: 'e9f9',\n speakerofffilled: 'e9fa',\n spoiler: 'e9fb',\n sport: 'e9fc',\n star: 'e9fd',\n star_filled: 'e9fe',\n statistics: 'e9ff',\n stickers: 'ea00',\n stickers_face: 'ea01',\n stop: 'ea02',\n stories: 'ea03',\n storyreply: 'ea04',\n storyrepost: 'ea05',\n strikethrough: 'ea06',\n tag: 'ea07',\n tag_add: 'ea08',\n tag_crossed: 'ea09',\n tag_filter: 'ea0a',\n tag_name: 'ea0b',\n textedit: 'ea0c',\n timer: 'ea0d',\n tip: 'ea0e',\n tools: 'ea0f',\n topics: 'ea10',\n transcribe: 'ea11',\n unarchive: 'ea12',\n unclaimed: 'ea13',\n underline: 'ea14',\n unmute: 'ea15',\n unpin: 'ea16',\n unread: 'ea17',\n up: 'ea18',\n user: 'ea19',\n username: 'ea1a',\n videocamera: 'ea1b',\n videocamera_crossed_filled: 'ea1c',\n videocamera_filled: 'ea1d',\n videochat: 'ea1e',\n volume_down: 'ea1f',\n volume_mute: 'ea20',\n volume_off: 'ea21',\n volume_up: 'ea22',\n webview: 'ea23',\n zoomin: 'ea24',\n zoomout: 'ea25'\n};\n\nexport default Icons;\n","const IconsReverse = new Set<Icon>([\n 'avatarnext',\n 'avatarprevious',\n 'arrow_next',\n 'channel',\n 'chatspinned',\n 'fast_forward',\n 'fast_rewind',\n 'forward',\n 'forward_filled',\n 'group',\n 'group_filled',\n 'left',\n 'listscreenshare',\n 'logout',\n 'muted',\n 'newchannel_filled',\n 'newchannel',\n 'newgroup',\n 'newgroup_filled',\n 'next',\n 'nosound',\n 'previous',\n 'send',\n 'send2',\n 'reply',\n 'reply_filled',\n 'sharescreen_filled',\n 'transcribe',\n 'storyreply',\n 'premium_noads',\n 'topics',\n 'pinlist',\n 'deleteleft'\n]);\n\nexport default IconsReverse;\n","import {TGICO_CLASS} from '../helpers/tgico';\nimport Icons from '../icons';\nimport IconsReverse from '../iconsReverse';\nimport I18n from '../lib/langPack';\n\nexport function getIconContent(icon: Icon) {\n return String.fromCharCode(parseInt(Icons[icon], 16));\n}\n\nexport default function Icon(icon: Icon, ...classes: string[]) {\n const span = document.createElement('span');\n if(I18n.isRTL && IconsReverse.has(icon)) {\n classes.push('icon-reflect');\n }\n\n span.classList.add(TGICO_CLASS/* ...tgico(icon) */, ...classes);\n span.textContent = getIconContent(icon);\n return span;\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 {FormatterArguments, i18n, LangPackKey} from '../lib/langPack';\nimport Icon from './icon';\nimport ripple from './ripple';\n\nexport type ButtonOptions = Partial<{\n noRipple: true,\n onlyMobile: true,\n icon: Icon,\n rippleSquare: true,\n text: LangPackKey,\n textArgs?: FormatterArguments,\n disabled: boolean,\n asDiv: boolean,\n asLink: boolean\n}>;\n\nexport default function Button<T extends ButtonOptions>(className: string, options: T = {} as T): T['asLink'] extends true ? HTMLAnchorElement : HTMLButtonElement {\n const button = document.createElement(options.asLink ? 'a' : (options.asDiv ? 'div' : 'button'));\n button.className = className;\n\n if(!options.noRipple) {\n if(options.rippleSquare) {\n button.classList.add('rp-square');\n }\n\n ripple(button);\n }\n\n if(options.icon) {\n replaceButtonIcon(button, options.icon, false);\n }\n\n if(options.onlyMobile) {\n button.classList.add('only-handhelds');\n }\n\n if(options.disabled) {\n button.setAttribute('disabled', 'true');\n }\n\n if(options.text) {\n button.append(i18n(options.text, options.textArgs));\n }\n\n return button as any;\n}\n\nexport function replaceButtonIcon(element: HTMLElement, icon: Icon, oldIcon: Element | false = element.querySelector('.button-icon')) {\n const newIcon = Icon(icon, 'button-icon');\n if(oldIcon) oldIcon.replaceWith(newIcon);\n else element.append(newIcon);\n return newIcon;\n}\n"],"names":["SequentialDom","fastRaf","kind","callback","promise","deferredPromise","element","isConnected","isInDOM","sequentialDom","MOUNT_CLASS_TO","rippleClickId","ripple","elem","onEnd","prepend","attachListenerTo","r","handler","drawRipple","clientX","clientY","startTime","circle","clickId","duration","_handler","elapsedTime","cb","delay","IS_TOUCH_SUPPORTED","touchStartFired","rect","clickX","clickY","size","x","y","isRippleUnneeded","e","findUpClassName","findUpAsChild","touchEnd","onTouchStart","liteMode","onMouseDown","Icons","IconsReverse","getIconContent","icon","Icon","classes","span","I18n","TGICO_CLASS","Button","className","options","button","replaceButtonIcon","i18n","oldIcon","newIcon"],"mappings":"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"} |