Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/dialog/chat/dist/ |
Upload File : |
{"version":3,"file":"chat-dialog.bundle.js","sources":["../src/classes/anchor-service.js","../src/classes/scroll-manager.js","../src/classes/pull-watch-manager.js","../src/classes/visible-messages-manager.js","../src/helpers/find-unique-numbers.js","../src/helpers/sequentialize.js","../src/components/pinned/pinned-message.js","../src/components/pinned/header/title.js","../src/components/pinned/header/counter-control.js","../src/components/pinned/header/header-pin.js","../src/components/pinned/header/header.js","../src/components/pinned/pinned-messages.js","../src/components/quote-button.js","../src/components/float-button.js","../src/components/scroll-button.js","../src/components/reactions-button.js","../src/components/mentions-button.js","../src/components/float-buttons.js","../src/chat-dialog.js"],"sourcesContent":["import { Core } from 'im.v2.application.core';\nimport { runAction } from 'im.v2.lib.rest';\nimport { RestMethod } from 'im.v2.const';\n\nconst DEBOUNCE_TIME = 50;\n\nexport class AnchorService\n{\n\t#store: Store;\n\tmessagesToRead: Set<number> = new Set();\n\t#timerBeforeSendRequest = null;\n\n\tconstructor() {\n\t\tthis.#store = Core.getStore();\n\t}\n\n\treadChatAnchors(chatId: number): void\n\t{\n\t\trunAction(RestMethod.imV2ChatAnchorRead, {\n\t\t\tdata: {\n\t\t\t\tchatId,\n\t\t\t},\n\t\t})\n\t\t\t.then(() => {\n\t\t\t\tconst userId = Core.getUserId();\n\n\t\t\t\tthis.#store.dispatch('messages/anchors/removeChatAnchors', { userId, chatId });\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error('AnchorService: read chat anchors error', error);\n\t\t\t})\n\t\t;\n\t}\n\n\tdebouncedReadMessageAnchors(messageId: number): void\n\t{\n\t\tconst userId = Core.getUserId();\n\n\t\tthis.messagesToRead.add(messageId);\n\t\tthis.#store.dispatch('messages/anchors/removeUserAnchorsFromMessage', { userId, messageId });\n\n\t\tif (this.#timerBeforeSendRequest)\n\t\t{\n\t\t\tclearTimeout(this.#timerBeforeSendRequest);\n\t\t\tthis.#timerBeforeSendRequest = null;\n\t\t}\n\n\t\tthis.#timerBeforeSendRequest = setTimeout(() => {\n\t\t\treturn this.#batchReadMessageAnchors();\n\t\t}, DEBOUNCE_TIME);\n\n\t\treturn Promise.resolve();\n\t}\n\n\t#batchReadMessageAnchors(): void\n\t{\n\t\tif (this.messagesToRead.size === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\trunAction(RestMethod.imV2AnchorRead, {\n\t\t\tdata: {\n\t\t\t\tmessageIds: [...this.messagesToRead],\n\t\t\t},\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error('AnchorService: read anchor error', error);\n\t\t\t})\n\t\t;\n\n\t\tthis.messagesToRead.clear();\n\t}\n}\n","import { EventEmitter } from 'main.core.events';\n\nimport { Logger } from 'im.v2.lib.logger';\nimport { Animation } from 'im.v2.lib.animation';\n\nconst EVENT_NAMESPACE = 'BX.Messenger.v2.Dialog.ScrollManager';\n\nexport class ScrollManager extends EventEmitter\n{\n\tcontainer: HTMLElement;\n\tisScrolling: boolean = false;\n\tcurrentScroll: number = 0;\n\tlastScroll: number = 0;\n\tchatIsScrolledUp: boolean = false;\n\tscrollButtonClicked: boolean = false;\n\tstartScrollNeeded: boolean = true;\n\n\tstatic events = {\n\t\tonScrollTriggerUp: 'onScrollTriggerUp',\n\t\tonScrollTriggerDown: 'onScrollTriggerDown',\n\t\tonScrollThresholdPass: 'onScrollThresholdPass',\n\t};\n\n\tstatic scrollPosition = {\n\t\tmessageTop: 'messageTop',\n\t\tmessageBottom: 'messageBottom',\n\t\tmessageCenter: 'messageCenter',\n\t};\n\n\tconstructor(): ScrollManager\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace(EVENT_NAMESPACE);\n\t}\n\n\tsetContainer(container: HTMLElement)\n\t{\n\t\tthis.container = container;\n\t}\n\n\tonScroll(event: Event)\n\t{\n\t\tif (this.isScrolling || !event.target)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentScroll = event.target.scrollTop;\n\t\tconst isScrollingDown = this.lastScroll < this.currentScroll;\n\t\tconst isScrollingUp = !isScrollingDown;\n\t\tif (isScrollingUp)\n\t\t{\n\t\t\tthis.scrollButtonClicked = false;\n\t\t}\n\n\t\tconst SCROLLING_THRESHOLD = 1500;\n\t\tconst leftSpaceBottom = event.target.scrollHeight - event.target.scrollTop - event.target.clientHeight;\n\t\tif (isScrollingDown && this.isStartScrollCompleted() && leftSpaceBottom < SCROLLING_THRESHOLD)\n\t\t{\n\t\t\tthis.emit(ScrollManager.events.onScrollTriggerDown);\n\t\t}\n\t\telse if (isScrollingUp && this.currentScroll <= SCROLLING_THRESHOLD)\n\t\t{\n\t\t\tthis.emit(ScrollManager.events.onScrollTriggerUp);\n\t\t}\n\n\t\tthis.lastScroll = this.currentScroll;\n\n\t\tthis.checkIfChatIsScrolledUp();\n\t}\n\n\tcheckIfChatIsScrolledUp()\n\t{\n\t\tconst SCROLLED_UP_THRESHOLD = 400;\n\n\t\tconst availableScrollHeight = this.container.scrollHeight - this.container.clientHeight;\n\t\tconst newFlag = this.currentScroll + SCROLLED_UP_THRESHOLD < availableScrollHeight;\n\t\tif (newFlag !== this.chatIsScrolledUp)\n\t\t{\n\t\t\tthis.emit(ScrollManager.events.onScrollThresholdPass, newFlag);\n\t\t}\n\t\tthis.chatIsScrolledUp = newFlag;\n\t}\n\n\tscrollToBottom()\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: scroll to bottom');\n\t\tthis.forceScrollTo(this.container.scrollHeight - this.container.clientHeight);\n\t}\n\n\tanimatedScrollToBottom()\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: animated scroll to bottom');\n\t\tthis.animatedScrollTo(this.container.scrollHeight - this.container.clientHeight);\n\t}\n\n\tscrollToMessage(messageId: number, params: { withDateOffset: boolean, position: string } = {})\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: scroll to message - ', messageId);\n\t\tconst element = this.getDomElementById(messageId);\n\t\tif (!element)\n\t\t{\n\t\t\tLogger.warn('Dialog: ScrollManager: message not found - ', messageId);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrollPosition = this.#getScrollPosition(element, params);\n\t\tthis.forceScrollTo(scrollPosition);\n\t}\n\n\tsetStartScrollNeeded(flag: boolean): void\n\t{\n\t\tthis.startScrollNeeded = flag;\n\t}\n\n\tisStartScrollCompleted(): boolean\n\t{\n\t\tif (!this.startScrollNeeded)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.lastScroll > 0;\n\t}\n\n\tanimatedScrollToMessage(messageId: number, params: { withDateOffset: boolean, position: string } = {}): Promise\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: animated scroll to message - ', messageId);\n\t\tconst element = this.getDomElementById(messageId);\n\t\tif (!element)\n\t\t{\n\t\t\tLogger.warn('Dialog: ScrollManager: message not found - ', messageId);\n\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst scrollPosition = this.#getScrollPosition(element, params);\n\n\t\treturn this.animatedScrollTo(scrollPosition);\n\t}\n\n\tforceScrollTo(position: number)\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: Force scroll to - ', position);\n\t\tthis.cancelAnimatedScroll();\n\t\tthis.container.scroll({ top: position, behavior: 'instant' });\n\t}\n\n\tadjustScrollOnHistoryAddition(oldContainerHeight: number)\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: Adjusting scroll after history addition');\n\t\tconst newContainerHeight = this.container.scrollHeight - this.container.clientHeight;\n\t\tconst newScrollPosition = this.container.scrollTop + newContainerHeight - oldContainerHeight;\n\t\tthis.forceScrollTo(newScrollPosition);\n\t}\n\n\tanimatedScrollTo(position: number): Promise\n\t{\n\t\tLogger.warn('Dialog: ScrollManager: Animated scroll to - ', position);\n\n\t\treturn new Promise((resolve) => {\n\t\t\tAnimation.start({\n\t\t\t\tstart: this.container.scrollTop,\n\t\t\t\tend: position,\n\t\t\t\telement: this.container,\n\t\t\t\telementProperty: 'scrollTop',\n\t\t\t\tcallback: () => {\n\t\t\t\t\tthis.checkIfChatIsScrolledUp();\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tcancelAnimatedScroll()\n\t{\n\t\tif (!this.isScrolling)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tAnimation.cancel();\n\t\tthis.isScrolling = false;\n\t}\n\n\tisAtTheTop(): boolean\n\t{\n\t\treturn this.container.scrollTop === 0;\n\t}\n\n\tisAtTheBottom(): boolean\n\t{\n\t\treturn this.container.scrollTop + this.container.clientHeight >= this.container.scrollHeight;\n\t}\n\n\tisAroundBottom(): boolean\n\t{\n\t\tconst POSITION_THRESHOLD = 40;\n\n\t\treturn this.container.scrollHeight - this.container.scrollTop - this.container.clientHeight < POSITION_THRESHOLD;\n\t}\n\n\tgetDomElementById(id: number | string): ?HTMLElement\n\t{\n\t\treturn this.container.querySelector(`[data-id=\"${id}\"]`);\n\t}\n\n\t#getScrollPosition(element: HTMLElement, params: { withDateOffset: boolean, position: string } = {}): number\n\t{\n\t\tconst FLOATING_DATE_OFFSET = 52;\n\t\tconst MESSAGE_BOTTOM_OFFSET = 100;\n\n\t\tconst { withDateOffset = true, position = ScrollManager.scrollPosition.messageTop } = params;\n\t\tconst offset = withDateOffset ? -FLOATING_DATE_OFFSET : -10;\n\n\t\tlet scrollPosition = element.offsetTop + offset;\n\t\tif (position === ScrollManager.scrollPosition.messageBottom)\n\t\t{\n\t\t\tscrollPosition += element.clientHeight - MESSAGE_BOTTOM_OFFSET;\n\t\t}\n\t\telse if (position === ScrollManager.scrollPosition.messageCenter\n\t\t\t&& this.container.clientHeight > element.clientHeight\n\t\t)\n\t\t{\n\t\t\tscrollPosition = scrollPosition - (this.container.clientHeight / 2) + (element.clientHeight / 2);\n\t\t}\n\n\t\treturn scrollPosition;\n\t}\n}\n","import { Core } from 'im.v2.application.core';\nimport { UserRole, RestMethod, ChatType } from 'im.v2.const';\nimport { runAction } from 'im.v2.lib.rest';\nimport { ChannelManager } from 'im.v2.lib.channel';\nimport { DemoChatBuilder } from 'im.v2.lib.demo';\n\nimport type { ImModelChat } from 'im.v2.model';\nimport type { PULL as Pull } from 'pull.client';\n\nconst MESSAGES_TAG_PREFIX = 'IM_PUBLIC_';\nconst COMMENTS_TAG_PREFIX = 'IM_PUBLIC_COMMENT_';\n\nexport class PullWatchManager\n{\n\t#dialog: ImModelChat;\n\t#pullClient: Pull;\n\n\tconstructor(dialogId: string)\n\t{\n\t\tthis.#dialog = Core.getStore().getters['chats/get'](dialogId, true);\n\t\tthis.#pullClient = Core.getPullClient();\n\t}\n\n\tsubscribe()\n\t{\n\t\tif (this.#isChannel())\n\t\t{\n\t\t\tthis.#subscribeChannel();\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.#isGuest() || this.#isCommentsChat() || this.#isDemoChat())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#subscribeOpenChat();\n\t}\n\n\tunsubscribe()\n\t{\n\t\tthis.#pullClient.clearWatch(`${MESSAGES_TAG_PREFIX}${this.#dialog.chatId}`);\n\t\tthis.#pullClient.clearWatch(`${COMMENTS_TAG_PREFIX}${this.#dialog.chatId}`);\n\t}\n\n\t#subscribeChannel()\n\t{\n\t\tthis.#requestWatchStart();\n\t\tthis.#pullClient.extendWatch(`${MESSAGES_TAG_PREFIX}${this.#dialog.chatId}`);\n\t\tthis.#pullClient.extendWatch(`${COMMENTS_TAG_PREFIX}${this.#dialog.chatId}`);\n\t}\n\n\t#subscribeOpenChat()\n\t{\n\t\tthis.#requestWatchStart();\n\t\tthis.#pullClient.extendWatch(`${MESSAGES_TAG_PREFIX}${this.#dialog.chatId}`);\n\t}\n\n\t#requestWatchStart()\n\t{\n\t\trunAction(RestMethod.imV2ChatExtendPullWatch, {\n\t\t\tdata: {\n\t\t\t\tdialogId: this.#dialog.dialogId,\n\t\t\t},\n\t\t});\n\t}\n\n\t#isGuest(): boolean\n\t{\n\t\treturn this.#dialog?.role === UserRole.guest;\n\t}\n\n\t#isDemoChat(): boolean\n\t{\n\t\treturn DemoChatBuilder.isDemoDialogId(this.#dialog?.dialogId);\n\t}\n\n\t#isChannel(): boolean\n\t{\n\t\treturn ChannelManager.isChannel(this.#dialog?.dialogId);\n\t}\n\n\t#isCommentsChat(): boolean\n\t{\n\t\treturn this.#dialog?.type === ChatType.comment;\n\t}\n}\n","export class VisibleMessagesManager\n{\n\t#visibleMessages: Set = new Set();\n\n\tsetMessageAsVisible(messageId: number): void\n\t{\n\t\tthis.#visibleMessages.add(messageId);\n\t}\n\n\tsetMessageAsNotVisible(messageId: number): void\n\t{\n\t\tthis.#visibleMessages.delete(messageId);\n\t}\n\n\tgetVisibleMessages(): number[]\n\t{\n\t\treturn [...this.#visibleMessages];\n\t}\n\n\tgetFirstMessageId(): number\n\t{\n\t\tif (this.#visibleMessages.size === 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst [firstVisibleMessage] = [...this.#visibleMessages].sort((a, b) => a - b);\n\n\t\treturn firstVisibleMessage;\n\t}\n}\n","export function findUniqueNumbers(arr1: number[], arr2: number[]): number[]\n{\n\tconst set1 = new Set(arr1);\n\tconst set2 = new Set(arr2);\n\n\treturn [\n\t\t...arr1.filter((num) => !set2.has(num)),\n\t\t...arr2.filter((num) => !set1.has(num)),\n\t];\n}\n","type Task = {\n\targs: Array<any>,\n\tresolve: (result: any) => void,\n};\n\nconst sharedQueues: Map<string, (...args: any[]) => Promise<any>> = new Map();\n\n/**\n * @description\n * Adds a delay between calls to the fn function.\n * Calls with the same function execute this function in the same sequence\n * @param fn\n * @param delay\n * @param context\n * @returns Function\n */\nfunction sequentializeShared(\n\tfn: (...args: any[]) => any,\n\tdelay: number,\n\tcontext: any = null,\n): (...args: any[]) => Promise<any>\n{\n\tif (sharedQueues.has(fn))\n\t{\n\t\treturn sharedQueues.get(fn);\n\t}\n\n\tconst wrapped = sequentialize(fn, delay, context);\n\tsharedQueues.set(fn, wrapped);\n\n\treturn wrapped;\n}\n\nfunction sequentialize(\n\tfn: (...args: any[]) => any,\n\tdelay: number,\n\tcontext: any = null,\n): (...args: any[]) => Promise<any>\n{\n\tconst queue: Array<Task> = [];\n\tlet isRunning = false;\n\n\tasync function run(): Promise<void>\n\t{\n\t\tif (isRunning)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tisRunning = true;\n\n\t\tconst task = queue.shift();\n\n\t\tif (!task)\n\t\t{\n\t\t\tisRunning = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = fn.apply(context, task.args);\n\t\tawait wait(delay);\n\t\ttask.resolve(result);\n\n\t\tisRunning = false;\n\n\t\trun();\n\t}\n\n\treturn (...args: any[]): Promise<any> => {\n\t\treturn new Promise((resolve) => {\n\t\t\tqueue.push({ args, resolve });\n\t\t\trun();\n\t\t});\n\t};\n}\n\nfunction wait(ms: number): Promise<void>\n{\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\nexport { sequentializeShared as sequentialize };\n","import { Parser } from 'im.v2.lib.parser';\nimport { MessageAvatar, AvatarSize } from 'im.v2.component.elements.avatar';\n\nimport type { ImModelUser, ImModelMessage } from 'im.v2.model';\n\n// @vue/component\nexport const PinnedMessage = {\n\tcomponents: { MessageAvatar },\n\tprops:\n\t{\n\t\tmessage: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowUnpinIcon: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['messageUnpin'],\n\tcomputed:\n\t{\n\t\tAvatarSize: () => AvatarSize,\n\t\ttypedMessage(): ImModelMessage\n\t\t{\n\t\t\treturn this.message;\n\t\t},\n\t\ttext(): string\n\t\t{\n\t\t\treturn Parser.purifyMessage(this.typedMessage);\n\t\t},\n\t\tauthorId(): number\n\t\t{\n\t\t\treturn this.typedMessage.authorId;\n\t\t},\n\t\tauthor(): ImModelUser\n\t\t{\n\t\t\treturn this.$store.getters['users/get'](this.authorId);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog-chat__pinned_item\">\n\t\t\t<MessageAvatar\n\t\t\t\tv-if=\"typedMessage.authorId\"\n\t\t\t\t:messageId=\"typedMessage.id\"\n\t\t\t\t:authorId=\"typedMessage.authorId\"\n\t\t\t\t:size=\"AvatarSize.M\"\n\t\t\t/>\n\t\t\t<div class=\"bx-im-dialog-chat__pinned_item_content\">\n\t\t\t\t<div v-if=\"author\" class=\"bx-im-dialog-chat__pinned_item_user\">\n\t\t\t\t\t{{ author.name }}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"bx-im-dialog-chat__pinned_item_text --ellipsis\">\n\t\t\t\t\t{{ text }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\tv-if=\"showUnpinIcon\"\n\t\t\t\tclass=\"bx-im-dialog-chat__pinned_icon-item-unpin\"\n\t\t\t\t@click.stop=\"$emit('messageUnpin', typedMessage.id)\"\n\t\t\t></button>\n\t\t</div>\n\t`,\n};\n","import './css/title.css';\n\n// @vue/component\nexport const HeaderTitle = {\n\tname: 'HeaderTitle',\n\tprops:\n\t{\n\t\ttotalPinCounter: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['toggleList'],\n\tcomputed:\n\t{\n\t\ttitle(): string\n\t\t{\n\t\t\treturn this.loc(\n\t\t\t\t'IM_DIALOG_CHAT_PINNED_TITLE_MULTIPLE_COUNTER',\n\t\t\t\t{\n\t\t\t\t\t'#PINS_COUNT#': `\n\t\t\t\t\t\t<span class=\"bx-im-dialog-chat__pin-header_counter-total\">\n\t\t\t\t\t\t\t${this.totalPinCounter}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t`,\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\tloc(phraseCode: string, replacements: {[string]: string} = {}): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(phraseCode, replacements);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog-chat__pin-header_opened\">\n\t\t <div v-html=\"title\"></div>\n\t\t\t<button\n\t\t\t\tclass=\"bx-im-messenger__cross-icon\"\n\t\t\t\t@click=\"$emit('toggleList')\"\n\t\t\t></button>\n\t\t</div>\n\t`,\n};\n","import './css/counter-control.css';\n\n// @vue/component\nexport const CounterControl = {\n\tname: 'CounterControl',\n\tprops:\n\t{\n\t\tmessagePosition: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\ttotalPinCounter: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['toggleList'],\n\ttemplate: `\n\t\t<button\n\t\t\t@click=\"$emit('toggleList')\"\n\t\t\tclass=\"bx-im-dialog-chat__pinned_counter_control\"\n\t\t>\n\t\t\t<span class=\"bx-im-dialog-chat__pinned_icon-dropdown\"></span>\n\t\t\t<span>\n\t\t\t\t{{ messagePosition }}\n\t\t\t\t<span class=\"bx-im-dialog-chat__pinned_counter_control-total\">\n\t\t\t\t\t/ {{ totalPinCounter }}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</button>\n\t`,\n};\n","import { Parser } from 'im.v2.lib.parser';\n\nimport { CounterControl } from './counter-control';\n\nimport './css/header-pin.css';\n\nimport type { ImModelMessage, ImModelUser } from 'im.v2.model';\n\n// @vue/component\nexport const HeaderPin = {\n\tname: 'HeaderPin',\n\tcomponents:\n\t{\n\t\tCounterControl,\n\t},\n\tprops:\n\t{\n\t\tmessage: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tmessagePosition: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tshowUnpinIcon: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\ttotalPinCounter: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['toggleList', 'messageUnpin', 'messageClick'],\n\tcomputed:\n\t{\n\t\ttypedMessage(): ImModelMessage\n\t\t{\n\t\t\treturn this.message;\n\t\t},\n\t\tisSinglePin(): boolean\n\t\t{\n\t\t\treturn this.totalPinCounter === 1;\n\t\t},\n\t\tauthorId(): number\n\t\t{\n\t\t\treturn this.typedMessage.authorId;\n\t\t},\n\t\tauthor(): ImModelUser\n\t\t{\n\t\t\treturn this.$store.getters['users/get'](this.authorId);\n\t\t},\n\t\ttext(): string\n\t\t{\n\t\t\treturn Parser.purifyMessage(this.typedMessage);\n\t\t},\n\t\ttitle(): string\n\t\t{\n\t\t\treturn this.loc(\n\t\t\t\tthis.isSinglePin\n\t\t\t\t\t? 'IM_DIALOG_CHAT_PINNED_TITLE'\n\t\t\t\t\t: 'IM_DIALOG_CHAT_PINNED_TITLE_MULTIPLE',\n\t\t\t);\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\tloc(phraseCode: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(phraseCode);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog-chat__pin-header\">\n\t\t\t<div\n\t\t\t\tclass=\"bx-im-dialog-chat__pin-header_wrapper\"\n\t\t\t\t@click=\"$emit('messageClick', typedMessage.id)\"\n\t\t\t>\n\t\t\t\t<div class=\"bx-im-dialog-chat__pin-header_title\">\n\t\t\t\t\t{{ title }}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"bx-im-dialog-chat__pin-header_content\">\n\t\t\t\t\t<div v-if=\"author\" class=\"bx-im-dialog-chat__pin-header_user\">\n\t\t\t\t\t\t{{ author.name + ':' }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"bx-im-dialog-chat__pin-header_text --ellipsis\">\n\t\t\t\t\t\t{{ text }}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"bx-im-dialog-chat__pin-header_controls\">\n\t\t\t\t<button\n\t\t\t\t\tv-if=\"showUnpinIcon && isSinglePin\"\n\t\t\t\t\tclass=\"bx-im-dialog-chat__pinned_icon-header-unpin\"\n\t\t\t\t\t@click=\"$emit('messageUnpin', typedMessage.id)\"\n\t\t\t\t></button>\n\t\t\t\t<CounterControl\n\t\t\t\t\tv-else-if=\"!isSinglePin\"\n\t\t\t\t\t:messagePosition=\"messagePosition\"\n\t\t\t\t\t:totalPinCounter=\"totalPinCounter\"\n\t\t\t\t\t@toggleList=\"$emit('toggleList')\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { HeaderTitle } from './title';\nimport { HeaderPin } from './header-pin';\n\nimport './css/header.css';\n\nimport type { ImModelMessage } from 'im.v2.model';\n\n// @vue/component\nexport const PinnedHeader = {\n\tname: 'PinnedHeader',\n\tcomponents:\n\t{\n\t\tHeaderTitle,\n\t\tHeaderPin,\n\t},\n\tprops:\n\t{\n\t\tmessage: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tmessagePosition: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tshowUnpinIcon: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\ttotalPinCounter: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tisListOpened: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['toggleList', 'messageUnpin', 'messageClick'],\n\tcomputed:\n\t{\n\t\ttypedMessage(): ImModelMessage\n\t\t{\n\t\t\treturn this.message;\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog-chat__pinned_header\">\n\t\t\t<HeaderTitle\n\t\t\t\tv-if=\"isListOpened\"\n\t\t\t\t:totalPinCounter=\"totalPinCounter\"\n\t\t\t\t@toggleList=\"$emit('toggleList')\"\n\t\t\t/>\n\t\t\t<HeaderPin\n\t\t\t\tv-else\n\t\t\t\t:message=\"typedMessage\"\n\t\t\t\t:messagePosition=\"messagePosition\"\n\t\t\t\t:totalPinCounter=\"totalPinCounter\"\n\t\t\t\t:showUnpinIcon=\"showUnpinIcon\"\n\t\t\t\t@toggleList=\"$emit('toggleList')\"\n\t\t\t\t@messageUnpin=\"$emit('messageUnpin', typedMessage.id)\"\n\t\t\t\t@messageClick=\"$emit('messageClick', typedMessage.id)\"\n\t\t\t/>\n\t\t</div>\n\t`,\n};\n","import { Type } from 'main.core';\n\nimport { ActionByRole, ChatType } from 'im.v2.const';\nimport { PermissionManager } from 'im.v2.lib.permission';\n\nimport { PinnedMessage } from './pinned-message';\nimport { PinnedHeader } from './header/header';\n\nimport './css/pinned-messages.css';\nimport './css/list.css';\n\nimport type { ImModelChat, ImModelMessage } from 'im.v2.model';\nimport type { JsonObject } from 'main.core';\n\n// @vue/component\nexport const PinnedMessages = {\n\tname: 'PinnedMessages',\n\tcomponents:\n\t{\n\t\tPinnedMessage,\n\t\tPinnedHeader,\n\t},\n\tprops:\n\t{\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tmessages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['messageClick', 'messageUnpin'],\n\tdata(): JsonObject\n\t{\n\t\treturn {\n\t\t\tisListOpened: false,\n\t\t\tupcomingMessageIndex: 0,\n\t\t};\n\t},\n\tcomputed:\n\t{\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tsortedPinnedMessages(): ImModelMessage[]\n\t\t{\n\t\t\treturn [...this.messages].sort((a, b) => b.id - a.id);\n\t\t},\n\t\ttotalPinCounter(): number\n\t\t{\n\t\t\treturn this.messages.length;\n\t\t},\n\t\tcanUnpin(): boolean\n\t\t{\n\t\t\treturn PermissionManager.getInstance().canPerformActionByRole(ActionByRole.pinMessage, this.dialogId);\n\t\t},\n\t\tshowUnpinIcon(): boolean\n\t\t{\n\t\t\treturn !this.isCommentChat && this.canUnpin;\n\t\t},\n\t\tisCommentChat(): boolean\n\t\t{\n\t\t\treturn this.dialog.type === ChatType.comment;\n\t\t},\n\t\tupcomingMessage(): ImModelMessage\n\t\t{\n\t\t\treturn this.sortedPinnedMessages[this.upcomingMessageIndex];\n\t\t},\n\t\tupcomingMessageDisplayPosition(): number\n\t\t{\n\t\t\treturn this.upcomingMessageIndex + 1;\n\t\t},\n\t},\n\twatch:\n\t{\n\t\tmessages(newValue: Array<ImModelMessage>): void\n\t\t{\n\t\t\tif (newValue.length === 1)\n\t\t\t{\n\t\t\t\tthis.toggleList(false);\n\t\t\t}\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\ttoggleList(flag: boolean | undefined): void\n\t\t{\n\t\t\tthis.isListOpened = Type.isUndefined(flag) ? !this.isListOpened : flag;\n\t\t},\n\n\t\tincrementHeaderIndex(): void\n\t\t{\n\t\t\tconst nextIndex = this.upcomingMessageIndex + 1;\n\n\t\t\tif (this.shouldResetIndex(nextIndex))\n\t\t\t{\n\t\t\t\tthis.resetHeaderIndex();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.upcomingMessageIndex = nextIndex;\n\t\t\t}\n\t\t},\n\n\t\tresetHeaderIndex(): void\n\t\t{\n\t\t\tthis.upcomingMessageIndex = 0;\n\t\t},\n\n\t\tshouldResetIndex(index: number): boolean\n\t\t{\n\t\t\treturn index >= this.totalPinCounter;\n\t\t},\n\n\t\tclickOnHeaderMessage(): void\n\t\t{\n\t\t\tthis.emitMessageClick(this.sortedPinnedMessages[this.upcomingMessageIndex].id);\n\t\t\tthis.incrementHeaderIndex();\n\t\t},\n\n\t\tclickOnHeaderMessageFromList(index: number): void\n\t\t{\n\t\t\t// установка следующего индкеса вручную, т.к. выбор напрямую из списка\n\t\t\tconst nextIndex = index + 1;\n\t\t\tthis.upcomingMessageIndex = this.shouldResetIndex(nextIndex) ? 0 : nextIndex;\n\t\t\tthis.emitMessageClick(this.sortedPinnedMessages[index].id);\n\t\t},\n\n\t\temitMessageClick(messageId: number): void\n\t\t{\n\t\t\tthis.$emit('messageClick', messageId);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog-chat__pinned_container\">\n\t\t\t<PinnedHeader\n\t\t\t\t:message=\"upcomingMessage\"\n\t\t\t\t:messagePosition=\"upcomingMessageDisplayPosition\"\n\t\t\t\t:showUnpinIcon=\"showUnpinIcon\"\n\t\t\t\t:totalPinCounter=\"totalPinCounter\"\n\t\t\t\t:isListOpened=\"isListOpened\"\n\t\t\t\t@toggleList=\"toggleList\"\n\t\t\t\t@messageUnpin=\"$emit('messageUnpin', upcomingMessage.id)\"\n\t\t\t\t@messageClick=\"clickOnHeaderMessage\"\n\t\t\t/>\n\t\t\t<transition name=\"pinned-list\">\n\t\t\t\t<div v-if=\"isListOpened\" class=\"bx-im-dialog-chat__pinned_list\">\n\t\t\t\t\t<PinnedMessage\n\t\t\t\t\t\tv-for=\"(message, index) in sortedPinnedMessages\"\n\t\t\t\t\t\t:key=\"message.id\"\n\t\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t\t:showUnpinIcon=\"showUnpinIcon\"\n\t\t\t\t\t\t@messageUnpin=\"$emit('messageUnpin', message.id)\"\n\t\t\t\t\t\t@click=\"clickOnHeaderMessageFromList(index)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t`,\n};\n","import { Event } from 'main.core';\n\nimport { Quote } from 'im.v2.lib.quote';\nimport { Utils } from 'im.v2.lib.utils';\nimport { MessengerSlider } from 'im.v2.lib.slider';\n\nimport '../css/quote-button.css';\n\nimport type { JsonObject } from 'main.core';\nimport type { ImModelMessage } from 'im.v2.model';\n\nconst CONTAINER_HEIGHT = 44;\nconst CONTAINER_WIDTH = 60;\nconst CONTAINER_OFFSET = 10;\nconst slider = MessengerSlider.getInstance().getCurrent();\nconst sliderRect = slider?.layout.container.getBoundingClientRect();\nconst offsetY = sliderRect?.top ?? 0;\n\nconst MESSAGE_TEXT_NODE_CLASS = '.bx-im-message-default-content__text';\n\n// @vue/component\nexport const QuoteButton = {\n\tname: 'QuoteButton',\n\tprops: {\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata(): JsonObject\n\t{\n\t\treturn {\n\t\t\ttext: '',\n\t\t\tmessage: null,\n\t\t\tmouseX: 0,\n\t\t\tmouseY: 0,\n\t\t};\n\t},\n\tcomputed:\n\t{\n\t\tcontainerStyle(): {top: string, left: string, width: string, height: string}\n\t\t{\n\t\t\treturn {\n\t\t\t\ttop: `${this.mouseY - CONTAINER_HEIGHT - CONTAINER_OFFSET - offsetY}px`,\n\t\t\t\tleft: `${this.mouseX - CONTAINER_WIDTH / 2}px`,\n\t\t\t\twidth: `${CONTAINER_WIDTH}px`,\n\t\t\t\theight: `${CONTAINER_HEIGHT}px`,\n\t\t\t};\n\t\t},\n\t},\n\tmounted()\n\t{\n\t\tEvent.bind(window, 'mousedown', this.onMouseDown);\n\t},\n\tmethods:\n\t{\n\t\tonMessageMouseUp(message: ImModelMessage, event: MouseEvent)\n\t\t{\n\t\t\tif (event.button === 2)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.prepareSelectedText();\n\t\t\tthis.message = message;\n\t\t\tthis.mouseX = event.clientX;\n\t\t\tthis.mouseY = event.clientY;\n\t\t},\n\t\tonMouseDown(event: MouseEvent)\n\t\t{\n\t\t\tconst container = this.$refs.container;\n\t\t\tif (!container || container.contains(event.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$emit('close');\n\t\t},\n\t\tprepareSelectedText(): string\n\t\t{\n\t\t\tif (Utils.browser.isFirefox())\n\t\t\t{\n\t\t\t\tthis.text = window.getSelection().toString();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst range = window.getSelection().getRangeAt(0);\n\t\t\tconst rangeContents = range.cloneContents();\n\t\t\tlet nodesToIterate = rangeContents.childNodes;\n\n\t\t\tconst messageNode = rangeContents.querySelector(MESSAGE_TEXT_NODE_CLASS);\n\t\t\tif (messageNode)\n\t\t\t{\n\t\t\t\tnodesToIterate = messageNode.childNodes;\n\t\t\t}\n\n\t\t\tfor (const node of nodesToIterate)\n\t\t\t{\n\t\t\t\tif (this.isImage(node))\n\t\t\t\t{\n\t\t\t\t\tthis.text += node.getAttribute('data-code') ?? node.getAttribute('alt');\n\t\t\t\t}\n\t\t\t\telse if (this.isLineBreak(node))\n\t\t\t\t{\n\t\t\t\t\tthis.text += '\\n';\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.text += node.textContent;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tisImage(node: HTMLElement): boolean\n\t\t{\n\t\t\tif (!(node instanceof HTMLElement))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn node.tagName.toLowerCase() === 'img';\n\t\t},\n\t\tisLineBreak(node: HTMLElement): boolean\n\t\t{\n\t\t\treturn node.nodeName.toLowerCase() === 'br';\n\t\t},\n\t\tisText(node: HTMLElement): boolean\n\t\t{\n\t\t\treturn node.nodeName === '#text';\n\t\t},\n\t\tisMessageTextNode(node: HTMLElement): boolean\n\t\t{\n\t\t\tif (!(node instanceof HTMLElement))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst textNode = node.matches(MESSAGE_TEXT_NODE_CLASS);\n\n\t\t\treturn Boolean(textNode);\n\t\t},\n\t\textractTextFromMessageNode(node: HTMLElement): string\n\t\t{\n\t\t\tconst textNode = node.querySelector(MESSAGE_TEXT_NODE_CLASS);\n\t\t\tif (!textNode)\n\t\t\t{\n\t\t\t\treturn node.textContent;\n\t\t\t}\n\n\t\t\treturn textNode.textContent;\n\t\t},\n\t\tonQuoteClick()\n\t\t{\n\t\t\tQuote.sendQuoteEvent(this.message, this.text, this.dialogId);\n\t\t\tthis.$emit('close');\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div ref=\"container\" @click=\"onQuoteClick\" :style=\"containerStyle\" class=\"bx-im-dialog-chat__quote-button\">\n\t\t\t<div class=\"bx-im-dialog-chat__quote-icon\"></div>\n\t\t\t<div class=\"bx-im-dialog-chat__quote-icon --hover\"></div>\n\t\t</div>\n\t`,\n};\n","export const FloatButtonColor = Object.freeze({\n\taccent: 'accent',\n\talert: 'alert',\n\tsuccess: 'success',\n});\n\nexport const FloatButtonIcon = Object.freeze({\n\tchevronDown: 'chevron-down',\n\theart: 'heart',\n\tatSymbol: 'at-symbol',\n\tcomment: 'comment',\n});\n\n// @vue/component\nexport const FloatButton = {\n\tname: 'FloatButton',\n\tprops:\n\t{\n\t\tcounter: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: FloatButtonColor.accent,\n\t\t\tvalidator: (value) => {\n\t\t\t\treturn Object.values(FloatButtonColor).includes(value);\n\t\t\t},\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tvalidator: (value) => {\n\t\t\t\treturn Object.values(FloatButtonIcon).includes(value);\n\t\t\t},\n\t\t},\n\t},\n\tcomputed:\n\t{\n\t\tbuttonClassname(): string[]\n\t\t{\n\t\t\treturn [\n\t\t\t\t'bx-im-dialog-chat__float-button',\n\t\t\t\t`--color-${this.color}`,\n\t\t\t\t`--icon-${this.icon}`,\n\t\t\t];\n\t\t},\n\t\tformattedCounter(): string\n\t\t{\n\t\t\tif (this.counter === 0)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this.counter > 99)\n\t\t\t{\n\t\t\t\treturn '99+';\n\t\t\t}\n\n\t\t\treturn String(this.counter);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div :class=\"buttonClassname\">\n\t\t\t<div class=\"bx-im-dialog-chat__float-button_icon\"></div>\n\t\t\t<div v-if=\"counter\" class=\"bx-im-dialog-chat__float-button_counter\">\n\t\t\t\t{{ formattedCounter }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import type { ImModelChat } from 'im.v2.model';\nimport type { JsonObject } from 'main.core';\nimport { FloatButton, FloatButtonColor, FloatButtonIcon } from './float-button';\n\n// @vue/component\nexport const ScrollButton = {\n\tname: 'ScrollButton',\n\tcomponents: {\n\t\tFloatButton,\n\t},\n\tprops:\n\t{\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata(): JsonObject\n\t{\n\t\treturn {};\n\t},\n\tcomputed:\n\t{\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tfloatButtonProps(): { color: string, icon: string, counter: number }\n\t\t{\n\t\t\treturn {\n\t\t\t\tcolor: FloatButtonColor.accent,\n\t\t\t\ticon: FloatButtonIcon.chevronDown,\n\t\t\t\tcounter: this.dialog.counter,\n\t\t\t};\n\t\t},\n\t},\n\ttemplate: `\n\t\t<FloatButton v-bind=\"floatButtonProps\" />\n\t`,\n};\n","import type { ImModelChat } from 'im.v2.model';\nimport { AnchorType } from 'im.v2.const';\n\nimport { FloatButton, FloatButtonColor, FloatButtonIcon } from './float-button';\n\nexport const ReactionsButton = {\n\tname: 'ReactionsButton',\n\tcomponents: {\n\t\tFloatButton,\n\t},\n\tprops:\n\t{\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed:\n\t{\n\t\treactionCounter(): number\n\t\t{\n\t\t\treturn this.$store.getters['messages/anchors/getCounterInChatByType'](this.dialog.chatId, AnchorType.reaction);\n\t\t},\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tfloatButtonProps(): { color: string, icon: string, counter: number }\n\t\t{\n\t\t\treturn {\n\t\t\t\tcolor: FloatButtonColor.alert,\n\t\t\t\ticon: FloatButtonIcon.heart,\n\t\t\t\tcounter: this.reactionCounter,\n\t\t\t};\n\t\t},\n\t},\n\ttemplate: `\n\t\t<FloatButton v-bind=\"floatButtonProps\" />\n\t`,\n};\n","import type { ImModelChat } from 'im.v2.model';\nimport { FloatButton, FloatButtonIcon, FloatButtonColor } from './float-button';\nimport { AnchorType } from 'im.v2.const';\n\n// @vue/component\nexport const MentionsButton = {\n\tname: 'MentionsButton',\n\tcomponents: {\n\t\tFloatButton,\n\t},\n\tprops:\n\t{\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed:\n\t{\n\t\tmentionCounter(): number\n\t\t{\n\t\t\treturn this.$store.getters['messages/anchors/getCounterInChatByType'](this.dialog.chatId, AnchorType.mention);\n\t\t},\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tfloatButtonProps(): {color: string, icon: string, counter: number}\n\t\t{\n\t\t\treturn {\n\t\t\t\tcolor: FloatButtonColor.accent,\n\t\t\t\ticon: FloatButtonIcon.atSymbol,\n\t\t\t\tcounter: this.mentionCounter,\n\t\t\t};\n\t\t},\n\t},\n\ttemplate: `\n\t\t<FloatButton v-bind=\"floatButtonProps\" />\n\t`,\n};\n","import { AnchorType } from 'im.v2.const';\nimport type { ImModelChat } from 'im.v2.model';\n\nimport { ScrollButton } from './scroll-button';\nimport { ReactionsButton } from './reactions-button';\nimport { MentionsButton } from './mentions-button';\n\n// @vue/component\nexport const FloatButtons = {\n\tcomponents:\n\t{\n\t\tScrollButton,\n\t\tReactionsButton,\n\t\tMentionsButton,\n\t},\n\tprops: {\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tisScrolledUp: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: ['scrollButtonClick', 'reactionsButtonClick', 'mentionsButtonClick'],\n\tcomputed:\n\t{\n\t\tdialogInited(): boolean\n\t\t{\n\t\t\treturn this.dialog.inited;\n\t\t},\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tshowScrollButton(): boolean\n\t\t{\n\t\t\treturn this.isScrolledUp || this.dialog.hasNextPage;\n\t\t},\n\t\tshowMentionsButton(): boolean\n\t\t{\n\t\t\treturn this.dialogInited && this.$store.getters['messages/anchors/getCounterInChatByType'](this.dialog.chatId, AnchorType.mention);\n\t\t},\n\t\tshowReactionsButton(): boolean\n\t\t{\n\t\t\treturn this.dialogInited && this.$store.getters['messages/anchors/getCounterInChatByType'](this.dialog.chatId, AnchorType.reaction);\n\t\t},\n\t\thasAdditionalButtonSlot(): boolean\n\t\t{\n\t\t\tconst slot = this.$slots['additional-float-button'];\n\n\t\t\tif (!slot)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst slotChildren = slot();\n\n\t\t\t/**\n\t\t\t * Check that slot has empty content.\n\t\t\t * Used for case when parent component passes a slot to this slot\n\t\t\t * This is important for the animation to work correctly\n\t\t\t */\n\t\t\treturn slotChildren[0]?.children.length > 0;\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\tonReactionsButtonClick(): void\n\t\t{\n\t\t\tthis.$emit('reactionsButtonClick');\n\t\t},\n\t\tonMentionsButtonClick(): void\n\t\t{\n\t\t\tthis.$emit('mentionsButtonClick');\n\t\t},\n\t\tonScrollButtonClick(): void\n\t\t{\n\t\t\tthis.$emit('scrollButtonClick');\n\t\t},\n\t},\n\ttemplate: `\n\t\t<TransitionGroup\n\t\t\tname=\"float-button-transition\"\n\t\t\ttag=\"div\"\n\t\t\tclass=\"bx-im-dialog-chat__float-buttons\"\n\t\t>\n\t\t\t<div\n\t\t\t\tv-if=\"showReactionsButton\"\n\t\t\t\tkey=\"reaction\"\n\t\t\t\tclass=\"bx-im-dialog-chat__float-buttons_button\"\n\t\t\t>\n\t\t\t\t<ReactionsButton :dialogId=\"dialogId\" @click=\"onReactionsButtonClick\" />\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"showMentionsButton\"\n\t\t\t\tkey=\"mention\"\n\t\t\t\tclass=\"bx-im-dialog-chat__float-buttons_button\"\n\t\t\t>\n\t\t\t\t<MentionsButton :dialogId=\"dialogId\" @click=\"onMentionsButtonClick\" />\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"hasAdditionalButtonSlot\"\n\t\t\t\tkey=\"additionalButton\"\n\t\t\t\tclass=\"bx-im-dialog-chat__float-buttons_button\"\n\t\t\t>\n\t\t\t\t<slot name=\"additional-float-button\"></slot>\n\t\t\t</div>\n\t\t</TransitionGroup>\n\t\t<Transition name=\"scroll-button-transition\">\n\t\t\t<div v-if=\"showScrollButton\" class=\"bx-im-dialog-chat__scroll-button-wrapper\">\n\t\t\t\t<ScrollButton :dialogId=\"dialogId\" @click=\"onScrollButtonClick\" />\n\t\t\t</div>\n\t\t</Transition>\n\t`,\n};\n","import { Runtime, Event, Dom } from 'main.core';\nimport { BaseEvent, EventEmitter } from 'main.core.events';\nimport { PopupManager } from 'main.popup';\nimport { PullStatus } from 'pull.vue3.status';\n\nimport { Analytics } from 'im.v2.lib.analytics';\nimport { MessageList } from 'im.v2.component.message-list';\nimport { ForwardPopup } from 'im.v2.component.entity-selector';\nimport { Logger } from 'im.v2.lib.logger';\nimport { CallManager } from 'im.v2.lib.call';\nimport { LayoutManager } from 'im.v2.lib.layout';\nimport { PermissionManager } from 'im.v2.lib.permission';\nimport { AccessManager } from 'im.v2.lib.access';\nimport { FeatureManager } from 'im.v2.lib.feature';\nimport { MessageService } from 'im.v2.provider.service.message';\nimport { ChatService } from 'im.v2.provider.service.chat';\nimport {\n\tDialogBlockType as BlockType,\n\tEventType,\n\tPopupType,\n\tDialogScrollThreshold,\n\tUserRole,\n\tActionByRole,\n\tErrorCode,\n\tAnchorType,\n} from 'im.v2.const';\n\nimport { AnchorService } from './classes/anchor-service';\nimport { ScrollManager } from './classes/scroll-manager';\nimport { PullWatchManager } from './classes/pull-watch-manager';\nimport { VisibleMessagesManager } from './classes/visible-messages-manager';\nimport { findUniqueNumbers } from './helpers/find-unique-numbers';\nimport { sequentialize } from './helpers/sequentialize';\n\nimport { PinnedMessages } from './components/pinned/pinned-messages';\nimport { QuoteButton } from './components/quote-button';\nimport { FloatButtons } from './components/float-buttons';\n\nimport './css/chat-dialog.css';\nimport './css/float-button.css';\n\nimport type { ImModelMessage, ImModelChat, ImModelLayout } from 'im.v2.model';\nimport type { ScrollToBottomEvent } from 'im.v2.const';\n\nexport { ScrollManager } from './classes/scroll-manager';\nexport { PinnedMessages } from './components/pinned/pinned-messages';\nexport { FloatButton, FloatButtonIcon, FloatButtonColor } from './components/float-button';\n\n// @vue/component\nexport const ChatDialog = {\n\tname: 'ChatDialog',\n\tcomponents: {\n\t\tMessageList,\n\t\tPinnedMessages,\n\t\tQuoteButton,\n\t\tFloatButtons,\n\t\tPullStatus,\n\t\tForwardPopup,\n\t},\n\tprops: {\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tsaveScrollOnExit: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tresetOnExit: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata(): Object\n\t{\n\t\treturn {\n\t\t\tforwardPopup: {\n\t\t\t\tshow: false,\n\t\t\t\tmessagesIds: [],\n\t\t\t},\n\t\t\tcontextMode: {\n\t\t\t\tactive: false,\n\t\t\t\tmessageIsLoaded: false,\n\t\t\t},\n\t\t\tisScrolledUp: false,\n\t\t\twindowFocused: false,\n\t\t\tshowQuoteButton: false,\n\t\t\tisJumpingToAnchor: false,\n\t\t\tmessagesToRead: new Set(),\n\t\t};\n\t},\n\tcomputed:\n\t{\n\t\tlayout(): ImModelLayout\n\t\t{\n\t\t\treturn this.$store.getters['application/getLayout'];\n\t\t},\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tdialogInited(): boolean\n\t\t{\n\t\t\treturn this.dialog.inited;\n\t\t},\n\t\tmessageCollection(): ImModelMessage[]\n\t\t{\n\t\t\treturn this.$store.getters['messages/getByChatId'](this.dialog.chatId);\n\t\t},\n\t\tpinnedMessages(): ImModelMessage[]\n\t\t{\n\t\t\treturn this.$store.getters['messages/pin/getPinned'](this.dialog.chatId);\n\t\t},\n\t\tisOpened(): boolean\n\t\t{\n\t\t\tconst openedDialogId = this.$store.getters['application/getLayout'].entityId;\n\n\t\t\treturn this.dialogId === openedDialogId;\n\t\t},\n\t\tisGuest(): boolean\n\t\t{\n\t\t\treturn this.dialog.role === UserRole.guest;\n\t\t},\n\t\tdebouncedScrollHandler(): Function\n\t\t{\n\t\t\tconst SCROLLING_DEBOUNCE_DELAY = 100;\n\n\t\t\treturn Runtime.debounce(this.getScrollManager().onScroll, SCROLLING_DEBOUNCE_DELAY, this.getScrollManager());\n\t\t},\n\t\tdebouncedReadHandler(): Function\n\t\t{\n\t\t\tconst READING_DEBOUNCE_DELAY = 50;\n\n\t\t\treturn Runtime.debounce(this.readQueuedMessages, READING_DEBOUNCE_DELAY, this);\n\t\t},\n\t\tsequentiallyHighlightMessageHandler(): Function\n\t\t{\n\t\t\treturn sequentialize(this.highlightMessage, 300, this);\n\t\t},\n\t\tshowScrollButton(): boolean\n\t\t{\n\t\t\treturn this.isScrolledUp || this.dialog.hasNextPage;\n\t\t},\n\t\tanchorMessages(): number[]\n\t\t{\n\t\t\treturn this.$store.getters['messages/anchors/getChatMessageIdsWithAnchors'](this.dialog.chatId);\n\t\t},\n\t\thasCommentsOnTop(): boolean\n\t\t{\n\t\t\treturn this.$store.getters['messages/comments/areOpenedForChannel'](this.dialogId);\n\t\t},\n\t},\n\twatch:\n\t{\n\t\tanchorMessages(newValue: number[], oldValue: number[])\n\t\t{\n\t\t\tconst newMessageIdsWithAnchor = findUniqueNumbers(newValue, oldValue);\n\t\t\tconst visibleMessageIds = this.getVisibleMessagesManager().getVisibleMessages();\n\n\t\t\tnewMessageIdsWithAnchor.forEach((messageId) => {\n\t\t\t\tif (visibleMessageIds.includes(messageId))\n\t\t\t\t{\n\t\t\t\t\tthis.getAnchorService().debouncedReadMessageAnchors(messageId);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tdialogInited(newValue: boolean, oldValue: boolean)\n\t\t{\n\t\t\tif (!newValue || oldValue)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// first opening\n\t\t\tthis.getPullWatchManager().subscribe();\n\t\t\tthis.onChatInited();\n\t\t},\n\t\thasCommentsOnTop: {\n\t\t\thandler(newValue: boolean)\n\t\t\t{\n\t\t\t\tconst commentsWereClosed = newValue === false;\n\t\t\t\tif (!commentsWereClosed)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.readVisibleMessages();\n\t\t\t},\n\t\t\tflush: 'post',\n\t\t},\n\t},\n\tcreated()\n\t{\n\t\tLogger.warn('Dialog: Chat created', this.dialogId);\n\t\tthis.initContextMode();\n\t},\n\tmounted()\n\t{\n\t\tthis.getScrollManager().setContainer(this.getContainer());\n\t\tif (this.dialogInited)\n\t\t{\n\t\t\t// second+ opening\n\t\t\tthis.getPullWatchManager().subscribe();\n\t\t\tthis.onChatInited();\n\t\t}\n\t\t// there are P&P messages\n\t\telse if (!this.dialogInited && this.messageCollection.length > 0)\n\t\t{\n\t\t\tthis.scrollOnStart();\n\t\t}\n\n\t\tthis.windowFocused = document.hasFocus();\n\n\t\tthis.subscribeToEvents();\n\t},\n\tbeforeUnmount()\n\t{\n\t\tthis.unsubscribeFromEvents();\n\t\tif (this.dialogInited)\n\t\t{\n\t\t\tthis.saveScrollPosition();\n\t\t\tvoid this.handleMessagesOnExit();\n\t\t}\n\t\tthis.getPullWatchManager().unsubscribe();\n\t\tthis.closeDialogPopups();\n\t\tthis.forwardPopup.show = false;\n\t\tthis.readAllAnchors();\n\t},\n\tmethods:\n\t{\n\t\tasync scrollOnStart(): void\n\t\t{\n\t\t\tawait this.$nextTick();\n\n\t\t\t// we loaded chat with context\n\t\t\tif (this.contextMode.active && this.contextMode.messageIsLoaded)\n\t\t\t{\n\t\t\t\tthis.getScrollManager().scrollToMessage(this.layout.contextId);\n\t\t\t\tvoid this.$nextTick(() => {\n\t\t\t\t\tthis.highlightMessage(this.layout.contextId);\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// chat was loaded before\n\t\t\tif (this.contextMode.active && !this.contextMode.messageIsLoaded)\n\t\t\t{\n\t\t\t\tthis.goToMessageContext(this.layout.contextId);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// marked message\n\t\t\tif (this.dialog.markedId)\n\t\t\t{\n\t\t\t\tthis.getScrollManager().scrollToMessage(BlockType.newMessages);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// saved position\n\t\t\tif (this.dialog.savedPositionMessageId && !this.isGuest)\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog: saved scroll position, scrolling to', this.dialog.savedPositionMessageId);\n\t\t\t\tthis.getScrollManager().scrollToMessage(this.dialog.savedPositionMessageId, { withDateOffset: false });\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lastReadId = this.$store.getters['chats/getLastReadId'](this.dialogId);\n\t\t\tconst isLastMessageId = lastReadId === this.dialog.lastMessageId;\n\t\t\t// unread messages and read messages before them\n\t\t\tif (lastReadId > 0 && !isLastMessageId)\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog: scroll to \"New messages\" mark, lastReadId -', lastReadId, 'lastMessageId', this.dialog.lastMessageId);\n\t\t\t\tthis.getScrollManager().scrollToMessage(BlockType.newMessages);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// new chat, unread messages without read messages before them\n\t\t\tconst hasUnread = this.$store.getters['messages/getFirstUnread'](this.dialog.chatId);\n\t\t\tif (lastReadId === 0 || hasUnread)\n\t\t\t{\n\t\t\t\tthis.getScrollManager().setStartScrollNeeded(false);\n\t\t\t\tLogger.warn('Dialog: dont scroll, hasUnread -', hasUnread, 'lastReadId', lastReadId);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// no unread messages\n\t\t\tthis.getScrollManager().scrollToBottom();\n\t\t},\n\t\tshowLoadingBar(): void\n\t\t{\n\t\t\tEventEmitter.emit(EventType.dialog.showLoadingBar, { dialogId: this.dialogId });\n\t\t},\n\t\thideLoadingBar(): void\n\t\t{\n\t\t\tEventEmitter.emit(EventType.dialog.hideLoadingBar, { dialogId: this.dialogId });\n\t\t},\n\t\tasync goToMessageContext(messageId: number, params: { position: string } = {}): void\n\t\t{\n\t\t\tconst { position = ScrollManager.scrollPosition.messageTop } = params;\n\t\t\tconst hasMessage = this.$store.getters['messages/hasMessage']({\n\t\t\t\tchatId: this.dialog.chatId,\n\t\t\t\tmessageId,\n\t\t\t});\n\t\t\tif (hasMessage)\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog: we have this message, scrolling to it', messageId);\n\n\t\t\t\tawait this.getScrollManager().animatedScrollToMessage(messageId, { position });\n\t\t\t\tthis.highlightMessage(messageId);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { hasAccess, errorCode } = await AccessManager.checkMessageAccess(messageId);\n\t\t\tif (!hasAccess && errorCode === ErrorCode.message.accessDeniedByTariff)\n\t\t\t{\n\t\t\t\tAnalytics.getInstance().historyLimit.onGoToContextLimitExceeded({ dialogId: this.dialogId });\n\t\t\t\tFeatureManager.chatHistory.openFeatureSlider();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showLoadingBar();\n\t\t\tawait this.getMessageService().loadContext(messageId);\n\t\t\tawait this.$nextTick();\n\t\t\tthis.hideLoadingBar();\n\t\t\tthis.getScrollManager().scrollToMessage(messageId, { position });\n\t\t\tawait this.$nextTick();\n\t\t\tthis.highlightMessage(messageId);\n\t\t},\n\t\thighlightMessage(messageId: number)\n\t\t{\n\t\t\tconst HIGHLIGHT_CLASS = 'bx-im-dialog-chat__highlighted-message';\n\t\t\tconst HIGHLIGHT_DURATION = 2000;\n\n\t\t\tconst message = this.getScrollManager().getDomElementById(messageId);\n\t\t\tif (!message)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tDom.addClass(message, HIGHLIGHT_CLASS);\n\t\t\tsetTimeout(() => {\n\t\t\t\tDom.removeClass(message, HIGHLIGHT_CLASS);\n\t\t\t}, HIGHLIGHT_DURATION);\n\t\t},\n\t\tsaveScrollPosition()\n\t\t{\n\t\t\tif (!this.saveScrollOnExit)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet savedPositionMessageId = this.getVisibleMessagesManager().getFirstMessageId();\n\t\t\tif (this.getScrollManager().isAroundBottom())\n\t\t\t{\n\t\t\t\tsavedPositionMessageId = 0;\n\t\t\t}\n\t\t\tthis.$store.dispatch('chats/update', {\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tfields: { savedPositionMessageId },\n\t\t\t});\n\t\t},\n\t\tasync handleMessagesOnExit()\n\t\t{\n\t\t\tif (this.resetOnExit)\n\t\t\t{\n\t\t\t\tvoid this.getChatService().resetChat(this.dialogId);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.getChatService().readChatQueuedMessages(this.dialog.chatId);\n\n\t\t\tconst LOAD_MESSAGES_ON_EXIT_DELAY = 200;\n\t\t\tsetTimeout(async () => {\n\t\t\t\tthis.getMessageService().reloadMessageList();\n\t\t\t}, LOAD_MESSAGES_ON_EXIT_DELAY);\n\t\t},\n\t\t/* region Reading */\n\t\treadQueuedMessages(): void\n\t\t{\n\t\t\tif (!this.messagesCanBeRead())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t[...this.messagesToRead].forEach((messageId) => {\n\t\t\t\tthis.getChatService().readMessage(this.dialog.chatId, messageId);\n\t\t\t\tthis.messagesToRead.delete(messageId);\n\t\t\t});\n\t\t},\n\t\treadVisibleMessages(): void\n\t\t{\n\t\t\tif (!this.messagesCanBeRead())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst visibleMessages = this.getVisibleMessagesManager().getVisibleMessages();\n\t\t\tvisibleMessages.forEach((messageId) => {\n\t\t\t\tconst message: ImModelMessage = this.$store.getters['messages/getById'](messageId);\n\t\t\t\tif (!message || message.viewed)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.getChatService().readMessage(this.dialog.chatId, messageId);\n\t\t\t});\n\t\t},\n\t\treadAllAnchors(): void\n\t\t{\n\t\t\tif (this.$store.getters['messages/anchors/isChatHasAnchors'](this.dialog.chatId))\n\t\t\t{\n\t\t\t\tthis.getAnchorService().readChatAnchors(this.dialog.chatId);\n\t\t\t}\n\t\t},\n\t\tmessagesCanBeRead(): boolean\n\t\t{\n\t\t\tif (!this.dialogInited || !this.isChatVisible())\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst permissionManager = PermissionManager.getInstance();\n\n\t\t\treturn permissionManager.canPerformActionByRole(ActionByRole.readMessage, this.dialogId);\n\t\t},\n\t\t/* endregion Reading */\n\t\t/* region Event handlers */\n\t\tonChatInited()\n\t\t{\n\t\t\tthis.scrollOnStart();\n\t\t\tthis.readVisibleMessages();\n\n\t\t\tvoid this.$nextTick(() => {\n\t\t\t\tthis.getChatService().clearDialogMark(this.dialogId);\n\t\t\t});\n\n\t\t\tEventEmitter.emit(EventType.dialog.onDialogInited, { dialogId: this.dialogId });\n\t\t},\n\t\tasync onScrollTriggerUp()\n\t\t{\n\t\t\tif (!this.dialogInited || !this.getContainer())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tLogger.warn('Dialog: scroll triggered UP');\n\t\t\tconst container = this.getContainer();\n\t\t\tconst oldHeight = container.scrollHeight - container.clientHeight;\n\n\t\t\t// Insert messages if there are some\n\t\t\tif (this.getMessageService().hasPreparedHistoryMessages())\n\t\t\t{\n\t\t\t\tawait this.getMessageService().drawPreparedHistoryMessages();\n\t\t\t\tthis.getScrollManager().adjustScrollOnHistoryAddition(oldHeight);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// check if already loading or no more history\n\t\t\tif (this.getMessageService().isLoading() || !this.dialog.hasPrevPage)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Load messages and save them\n\t\t\tthis.showLoadingBar();\n\t\t\tawait this.getMessageService().loadHistory();\n\t\t\tthis.hideLoadingBar();\n\t\t\t// Messages loaded and we are at the top\n\t\t\tif (this.getScrollManager().isAtTheTop())\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog: we are at the top after history request, inserting messages');\n\t\t\t\tawait this.getMessageService().drawPreparedHistoryMessages();\n\t\t\t\tthis.getScrollManager().adjustScrollOnHistoryAddition(oldHeight);\n\t\t\t}\n\t\t},\n\t\tasync onScrollTriggerDown()\n\t\t{\n\t\t\tif (!this.dialogInited || !this.getContainer())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tLogger.warn('Dialog: scroll triggered DOWN');\n\t\t\t// Insert messages if there are some\n\t\t\tif (this.getMessageService().hasPreparedUnreadMessages())\n\t\t\t{\n\t\t\t\tawait this.getMessageService().drawPreparedUnreadMessages();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// check if already loading or no more history\n\t\t\tif (this.getMessageService().isLoading() || !this.dialog.hasNextPage)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Load messages and save them\n\t\t\tthis.showLoadingBar();\n\t\t\tawait this.getMessageService().loadUnread();\n\t\t\tthis.hideLoadingBar();\n\t\t\t// Messages loaded and we are at the bottom\n\t\t\tif (this.getScrollManager().isAroundBottom())\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog: we are at the bottom after unread request, inserting messages');\n\t\t\t\tawait this.getMessageService().drawPreparedUnreadMessages();\n\t\t\t\tthis.getScrollManager().checkIfChatIsScrolledUp();\n\t\t\t}\n\t\t},\n\t\tasync onScrollToBottom(event: BaseEvent<ScrollToBottomEvent>)\n\t\t{\n\t\t\tconst { chatId, threshold = DialogScrollThreshold.halfScreenUp, animation = true } = event.getData();\n\t\t\tif (this.dialog.chatId !== chatId)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.windowFocused || this.hasVisibleCall())\n\t\t\t{\n\t\t\t\tconst firstUnreadId = this.$store.getters['messages/getFirstUnread'](this.dialog.chatId);\n\t\t\t\tif (firstUnreadId)\n\t\t\t\t{\n\t\t\t\t\tawait this.$nextTick();\n\t\t\t\t\tthis.getScrollManager().scrollToMessage(firstUnreadId);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tLogger.warn('Dialog: scroll to bottom', chatId, threshold);\n\t\t\tif (threshold === DialogScrollThreshold.halfScreenUp && this.isScrolledUp)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (threshold === DialogScrollThreshold.nearTheBottom && !this.getScrollManager().isAroundBottom())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.$nextTick();\n\t\t\tif (animation)\n\t\t\t{\n\t\t\t\tthis.getScrollManager().animatedScrollToBottom();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.getScrollManager().scrollToBottom();\n\t\t},\n\t\tonGoToMessageContext(event: BaseEvent)\n\t\t{\n\t\t\tconst { dialogId, messageId } = event.getData();\n\t\t\tif (this.dialog.dialogId !== dialogId)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.goToMessageContext(messageId);\n\t\t},\n\t\tonPinnedMessageClick(messageId: number)\n\t\t{\n\t\t\tthis.goToMessageContext(messageId);\n\t\t},\n\t\tonPinnedMessageUnpin(messageId: number)\n\t\t{\n\t\t\tthis.getMessageService().unpinMessage(this.dialog.chatId, messageId);\n\t\t\tAnalytics.getInstance().messagePins.onUnpin(this.dialog.chatId);\n\t\t},\n\t\tonScroll(event: Event)\n\t\t{\n\t\t\tthis.closeDialogPopups();\n\t\t\tthis.debouncedScrollHandler(event);\n\t\t},\n\t\tasync onScrollButtonClick()\n\t\t{\n\t\t\tif (this.getScrollManager().scrollButtonClicked)\n\t\t\t{\n\t\t\t\tvoid this.handleSecondScrollButtonClick();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.getScrollManager().scrollButtonClicked = true;\n\t\t\tif (this.dialog.counter === 0)\n\t\t\t{\n\t\t\t\tthis.showLoadingBar();\n\t\t\t\tawait this.getMessageService().loadInitialMessages();\n\t\t\t\tthis.hideLoadingBar();\n\t\t\t\tthis.getScrollManager().scrollToBottom();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst firstUnreadId = this.$store.getters['messages/getFirstUnread'](this.dialog.chatId);\n\t\t\tif (!firstUnreadId)\n\t\t\t{\n\t\t\t\tthis.showLoadingBar();\n\t\t\t\tawait this.getMessageService().loadInitialMessages();\n\t\t\t\tthis.hideLoadingBar();\n\t\t\t\tawait this.getScrollManager().animatedScrollToMessage(firstUnreadId);\n\t\t\t}\n\n\t\t\tawait this.getScrollManager().animatedScrollToMessage(firstUnreadId);\n\t\t},\n\t\tasync onMentionsButtonClick(): void\n\t\t{\n\t\t\tif (this.isJumpingToAnchor)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isJumpingToAnchor = true;\n\t\t\tawait this.goToNearestMessageWithAnchor(AnchorType.mention);\n\t\t\tthis.isJumpingToAnchor = false;\n\t\t},\n\t\tasync onReactionsButtonClick(): void\n\t\t{\n\t\t\tif (this.isJumpingToAnchor)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isJumpingToAnchor = true;\n\t\t\tawait this.goToNearestMessageWithAnchor(AnchorType.reaction);\n\t\t\tthis.isJumpingToAnchor = false;\n\t\t},\n\t\tasync goToNearestMessageWithAnchor(anchorType: string)\n\t\t{\n\t\t\tconst nextMessage: ?number = this.$store.getters['messages/anchors/getNextMessageIdWithAnchorType'](\n\t\t\t\tthis.dialog.chatId,\n\t\t\t\tanchorType,\n\t\t\t);\n\n\t\t\tif (nextMessage)\n\t\t\t{\n\t\t\t\tawait this.goToMessageContext(nextMessage, { position: ScrollManager.scrollPosition.messageTop });\n\t\t\t}\n\t\t},\n\t\tonWindowFocus()\n\t\t{\n\t\t\tthis.windowFocused = true;\n\t\t\tthis.readVisibleMessages();\n\t\t},\n\t\tonWindowBlur()\n\t\t{\n\t\t\tthis.windowFocused = false;\n\t\t},\n\t\tonCallFold()\n\t\t{\n\t\t\tconst callDialogId = CallManager.getInstance().getCurrentCallDialogId();\n\t\t\tif (callDialogId !== this.dialogId)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.readVisibleMessages();\n\t\t},\n\t\tasync onShowQuoteButton(event: BaseEvent<{ message: ImModelMessage, event: MouseEvent }>)\n\t\t{\n\t\t\tconst { message, event: $event } = event.getData();\n\t\t\tconst permissionManager = PermissionManager.getInstance();\n\t\t\tif (!permissionManager.canPerformActionByRole(ActionByRole.send, this.dialogId))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showQuoteButton = true;\n\t\t\tawait this.$nextTick();\n\t\t\tthis.$refs.quoteButton.onMessageMouseUp(message, $event);\n\t\t},\n\t\tasync handleSecondScrollButtonClick()\n\t\t{\n\t\t\tthis.getScrollManager().scrollButtonClicked = false;\n\t\t\tif (this.dialog.hasNextPage)\n\t\t\t{\n\t\t\t\tthis.showLoadingBar();\n\t\t\t\tawait this.getMessageService().loadContext(this.dialog.lastMessageId);\n\t\t\t\tthis.hideLoadingBar();\n\n\t\t\t\tEventEmitter.emit(EventType.dialog.scrollToBottom, {\n\t\t\t\t\tchatId: this.dialog.chatId,\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid this.getScrollManager().animatedScrollToMessage(this.dialog.lastMessageId, { withDateOffset: false });\n\t\t},\n\t\tonShowForwardPopup(event: BaseEvent)\n\t\t{\n\t\t\tconst { messagesIds } = event.getData();\n\t\t\tthis.forwardPopup.messagesIds = messagesIds;\n\t\t\tthis.forwardPopup.show = true;\n\t\t},\n\t\tonCloseForwardPopup()\n\t\t{\n\t\t\tthis.forwardPopup.messagesIds = [];\n\t\t\tthis.forwardPopup.show = false;\n\t\t},\n\t\tonMessageIsVisible(event: BaseEvent<{ messageId: number, dialogId: string }>)\n\t\t{\n\t\t\tconst { messageId, dialogId } = event.getData();\n\t\t\tif (dialogId !== this.dialogId)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.getVisibleMessagesManager().setMessageAsVisible(messageId);\n\n\t\t\tif (this.isChatVisible() === false)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.$store.getters['messages/anchors/isMessageHasAnchors'](messageId))\n\t\t\t{\n\t\t\t\tthis.readAnchorsIfMessageVisibleLongEnough(messageId);\n\t\t\t}\n\n\t\t\tconst message: ImModelMessage = this.$store.getters['messages/getById'](messageId);\n\t\t\tif (!message.viewed)\n\t\t\t{\n\t\t\t\tthis.messagesToRead.add(messageId);\n\t\t\t\tthis.debouncedReadHandler();\n\t\t\t}\n\t\t},\n\t\treadAnchorsIfMessageVisibleLongEnough(messageId: number)\n\t\t{\n\t\t\tconst messageVisibilityTimeThreshold = 200;\n\n\t\t\tif (this.getScrollManager().isScrolling)\n\t\t\t{\n\t\t\t\tthis.readMessageAnchorsAfterVisibilityThreshold(messageId, messageVisibilityTimeThreshold);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.getAnchorService().debouncedReadMessageAnchors(messageId);\n\t\t\t}\n\t\t},\n\t\treadMessageAnchorsAfterVisibilityThreshold(messageId: number, messageVisibilityTimeThreshold: number)\n\t\t{\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (this.getVisibleMessagesManager().getVisibleMessages().includes(messageId))\n\t\t\t\t{\n\t\t\t\t\tthis.sequentiallyHighlightMessageHandler(messageId);\n\t\t\t\t\tthis.getAnchorService().debouncedReadMessageAnchors(messageId);\n\t\t\t\t}\n\t\t\t}, messageVisibilityTimeThreshold);\n\t\t},\n\t\tonMessageIsNotVisible(event: BaseEvent<{ messageId: number, dialogId: string }>)\n\t\t{\n\t\t\tconst { messageId, dialogId } = event.getData();\n\t\t\tif (dialogId !== this.dialogId)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.getVisibleMessagesManager().setMessageAsNotVisible(messageId);\n\t\t},\n\t\t/* endregion Event handlers */\n\t\t/* region Init methods */\n\t\tinitContextMode()\n\t\t{\n\t\t\tconst layoutManager = LayoutManager.getInstance();\n\t\t\tif (!layoutManager.isChatContextAvailable(this.dialogId))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.contextMode.active = true;\n\t\t\t// chat was loaded before, we didn't load context specifically\n\t\t\t// if chat wasn't loaded before - we load it with context\n\t\t\tthis.contextMode.messageIsLoaded = !this.dialogInited;\n\t\t},\n\t\tgetMessageService(): MessageService\n\t\t{\n\t\t\tif (!this.messageService)\n\t\t\t{\n\t\t\t\tthis.messageService = new MessageService({ chatId: this.dialog.chatId });\n\t\t\t}\n\n\t\t\treturn this.messageService;\n\t\t},\n\t\tgetChatService(): ChatService\n\t\t{\n\t\t\tif (!this.chatService)\n\t\t\t{\n\t\t\t\tthis.chatService = new ChatService();\n\t\t\t}\n\n\t\t\treturn this.chatService;\n\t\t},\n\t\tgetAnchorService(): AnchorService\n\t\t{\n\t\t\tif (!this.anchorService)\n\t\t\t{\n\t\t\t\tthis.anchorService = new AnchorService();\n\t\t\t}\n\n\t\t\treturn this.anchorService;\n\t\t},\n\t\tgetScrollManager(): ScrollManager\n\t\t{\n\t\t\tif (!this.scrollManager)\n\t\t\t{\n\t\t\t\tthis.scrollManager = new ScrollManager();\n\t\t\t\tthis.scrollManager.subscribe(ScrollManager.events.onScrollTriggerUp, this.onScrollTriggerUp);\n\t\t\t\tthis.scrollManager.subscribe(ScrollManager.events.onScrollTriggerDown, this.onScrollTriggerDown);\n\t\t\t\tthis.scrollManager.subscribe(ScrollManager.events.onScrollThresholdPass, (event: BaseEvent<boolean>) => {\n\t\t\t\t\tthis.isScrolledUp = event.getData();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.scrollManager;\n\t\t},\n\t\tgetPullWatchManager(): PullWatchManager\n\t\t{\n\t\t\tif (!this.pullWatchManager)\n\t\t\t{\n\t\t\t\tthis.pullWatchManager = new PullWatchManager(this.dialogId);\n\t\t\t}\n\n\t\t\treturn this.pullWatchManager;\n\t\t},\n\t\tgetVisibleMessagesManager(): VisibleMessagesManager\n\t\t{\n\t\t\tif (!this.visibleMessagesManager)\n\t\t\t{\n\t\t\t\tthis.visibleMessagesManager = new VisibleMessagesManager();\n\t\t\t}\n\n\t\t\treturn this.visibleMessagesManager;\n\t\t},\n\t\t/* endregion Init methods */\n\t\tisChatVisible(): boolean\n\t\t{\n\t\t\treturn this.windowFocused && !this.hasVisibleCall() && !this.hasCommentsOnTop;\n\t\t},\n\t\thasVisibleCall(): boolean\n\t\t{\n\t\t\treturn CallManager.getInstance().hasVisibleCall();\n\t\t},\n\t\tcloseDialogPopups()\n\t\t{\n\t\t\tthis.showQuoteButton = false;\n\t\t\tPopupManager.getPopupById(PopupType.dialogAvatarMenu)?.close();\n\t\t\tPopupManager.getPopupById(PopupType.dialogMessageMenu)?.close();\n\t\t\tPopupManager.getPopupById(PopupType.dialogReactionUsers)?.close();\n\t\t\tPopupManager.getPopupById(PopupType.dialogReadUsers)?.close();\n\t\t\tPopupManager.getPopupById(PopupType.messageBaseFileMenu)?.close();\n\t\t},\n\t\tsubscribeToEvents()\n\t\t{\n\t\t\tEventEmitter.subscribe(EventType.dialog.scrollToBottom, this.onScrollToBottom);\n\t\t\tEventEmitter.subscribe(EventType.dialog.goToMessageContext, this.onGoToMessageContext);\n\t\t\tEventEmitter.subscribe(EventType.call.onFold, this.onCallFold);\n\t\t\tEventEmitter.subscribe(EventType.dialog.showForwardPopup, this.onShowForwardPopup);\n\t\t\tEventEmitter.subscribe(EventType.dialog.showQuoteButton, this.onShowQuoteButton);\n\t\t\tEventEmitter.subscribe(EventType.dialog.onMessageIsVisible, this.onMessageIsVisible);\n\t\t\tEventEmitter.subscribe(EventType.dialog.onMessageIsNotVisible, this.onMessageIsNotVisible);\n\n\t\t\tEvent.bind(window, 'focus', this.onWindowFocus);\n\t\t\tEvent.bind(window, 'blur', this.onWindowBlur);\n\t\t},\n\t\tunsubscribeFromEvents()\n\t\t{\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.scrollToBottom, this.onScrollToBottom);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.goToMessageContext, this.onGoToMessageContext);\n\t\t\tEventEmitter.unsubscribe(EventType.call.onFold, this.onCallFold);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.showForwardPopup, this.onShowForwardPopup);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.showQuoteButton, this.onShowQuoteButton);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.onMessageIsVisible, this.onMessageIsVisible);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.onMessageIsNotVisible, this.onMessageIsNotVisible);\n\n\t\t\tEvent.unbind(window, 'focus', this.onWindowFocus);\n\t\t\tEvent.unbind(window, 'blur', this.onWindowBlur);\n\t\t},\n\t\tgetContainer(): ?HTMLElement\n\t\t{\n\t\t\treturn this.$refs.container;\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog-chat__block bx-im-dialog-chat__scope\">\n\t\t\t<!-- Top -->\n\t\t\t<slot name=\"pinned-panel\">\n\t\t\t\t<PinnedMessages\n\t\t\t\t\tv-if=\"pinnedMessages.length > 0\"\n\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t:messages=\"pinnedMessages\"\n\t\t\t\t\t@messageClick=\"onPinnedMessageClick\"\n\t\t\t\t\t@messageUnpin=\"onPinnedMessageUnpin\"\n\t\t\t\t/>\n\t\t\t</slot>\n\t\t\t<PullStatus/>\n\t\t\t<!-- Message list -->\n\t\t\t<div @scroll=\"onScroll\" class=\"bx-im-dialog-chat__scroll-container\" ref=\"container\">\n\t\t\t\t<slot name=\"message-list\">\n\t\t\t\t\t<MessageList :dialogId=\"dialogId\" />\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<FloatButtons\n\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t:isScrolledUp=\"isScrolledUp\"\n\t\t\t\t@scrollButtonClick=\"onScrollButtonClick\"\n\t\t\t\t@reactionsButtonClick=\"onReactionsButtonClick\"\n\t\t\t\t@mentionsButtonClick=\"onMentionsButtonClick\"\n\t\t\t>\n\t\t\t\t<template #additional-float-button><slot name=\"additional-float-button\" /></template>\n\t\t\t</FloatButtons>\n\t\t\t<!-- Absolute elements -->\n\t\t\t<ForwardPopup\n\t\t\t\tv-if=\"forwardPopup.show\"\n\t\t\t\t:messagesIds=\"forwardPopup.messagesIds\"\n\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t@close=\"onCloseForwardPopup\"\n\t\t\t/>\n\t\t\t<Transition name=\"fade-up\">\n\t\t\t\t<QuoteButton\n\t\t\t\t\tv-if=\"showQuoteButton\"\n\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t@close=\"showQuoteButton = false\" \n\t\t\t\t\tclass=\"bx-im-message-base__quote-button\"\n\t\t\t\t\tref=\"quoteButton\"\n\t\t\t\t/>\n\t\t\t</Transition>\n\t\t</div>\n\t`,\n};\n"],"names":["DEBOUNCE_TIME","AnchorService","constructor","messagesToRead","Set","Core","getStore","readChatAnchors","chatId","runAction","RestMethod","imV2ChatAnchorRead","data","then","userId","getUserId","dispatch","catch","error","console","debouncedReadMessageAnchors","messageId","add","clearTimeout","setTimeout","Promise","resolve","size","imV2AnchorRead","messageIds","clear","EVENT_NAMESPACE","ScrollManager","EventEmitter","isScrolling","currentScroll","lastScroll","chatIsScrolledUp","scrollButtonClicked","startScrollNeeded","setEventNamespace","setContainer","container","onScroll","event","target","scrollTop","isScrollingDown","isScrollingUp","SCROLLING_THRESHOLD","leftSpaceBottom","scrollHeight","clientHeight","isStartScrollCompleted","emit","events","onScrollTriggerDown","onScrollTriggerUp","checkIfChatIsScrolledUp","SCROLLED_UP_THRESHOLD","availableScrollHeight","newFlag","onScrollThresholdPass","scrollToBottom","Logger","warn","forceScrollTo","animatedScrollToBottom","animatedScrollTo","scrollToMessage","params","element","getDomElementById","scrollPosition","setStartScrollNeeded","flag","animatedScrollToMessage","position","cancelAnimatedScroll","scroll","top","behavior","adjustScrollOnHistoryAddition","oldContainerHeight","newContainerHeight","newScrollPosition","Animation","start","end","elementProperty","callback","cancel","isAtTheTop","isAtTheBottom","isAroundBottom","POSITION_THRESHOLD","id","querySelector","FLOATING_DATE_OFFSET","MESSAGE_BOTTOM_OFFSET","withDateOffset","messageTop","offset","offsetTop","messageBottom","messageCenter","MESSAGES_TAG_PREFIX","COMMENTS_TAG_PREFIX","PullWatchManager","dialogId","getters","getPullClient","subscribe","unsubscribe","clearWatch","extendWatch","imV2ChatExtendPullWatch","role","UserRole","guest","DemoChatBuilder","isDemoDialogId","ChannelManager","isChannel","type","ChatType","comment","VisibleMessagesManager","setMessageAsVisible","setMessageAsNotVisible","delete","getVisibleMessages","getFirstMessageId","firstVisibleMessage","sort","a","b","findUniqueNumbers","arr1","arr2","set1","set2","filter","num","has","sharedQueues","Map","sequentializeShared","fn","delay","context","get","wrapped","sequentialize","set","queue","isRunning","run","task","shift","result","apply","args","wait","push","ms","PinnedMessage","components","MessageAvatar","props","message","Object","required","showUnpinIcon","Boolean","emits","computed","AvatarSize","typedMessage","text","Parser","purifyMessage","authorId","author","$store","template","HeaderTitle","name","totalPinCounter","Number","title","loc","methods","phraseCode","replacements","$Bitrix","Loc","getMessage","CounterControl","messagePosition","HeaderPin","isSinglePin","PinnedHeader","isListOpened","PinnedMessages","String","default","messages","Array","upcomingMessageIndex","dialog","sortedPinnedMessages","length","canUnpin","PermissionManager","getInstance","canPerformActionByRole","ActionByRole","pinMessage","isCommentChat","upcomingMessage","upcomingMessageDisplayPosition","watch","newValue","toggleList","Type","isUndefined","incrementHeaderIndex","nextIndex","shouldResetIndex","resetHeaderIndex","index","clickOnHeaderMessage","emitMessageClick","clickOnHeaderMessageFromList","$emit","CONTAINER_HEIGHT","CONTAINER_WIDTH","CONTAINER_OFFSET","slider","MessengerSlider","getCurrent","sliderRect","layout","getBoundingClientRect","offsetY","MESSAGE_TEXT_NODE_CLASS","QuoteButton","mouseX","mouseY","containerStyle","left","width","height","mounted","Event","bind","window","onMouseDown","onMessageMouseUp","button","prepareSelectedText","clientX","clientY","$refs","contains","Utils","browser","isFirefox","getSelection","toString","range","getRangeAt","rangeContents","cloneContents","nodesToIterate","childNodes","messageNode","node","isImage","getAttribute","isLineBreak","textContent","HTMLElement","tagName","toLowerCase","nodeName","isText","isMessageTextNode","textNode","matches","extractTextFromMessageNode","onQuoteClick","Quote","sendQuoteEvent","FloatButtonColor","freeze","accent","alert","success","FloatButtonIcon","chevronDown","heart","atSymbol","FloatButton","counter","color","validator","value","values","includes","icon","buttonClassname","formattedCounter","ScrollButton","floatButtonProps","ReactionsButton","reactionCounter","AnchorType","reaction","MentionsButton","mentionCounter","mention","FloatButtons","isScrolledUp","dialogInited","inited","showScrollButton","hasNextPage","showMentionsButton","showReactionsButton","hasAdditionalButtonSlot","slot","$slots","slotChildren","children","onReactionsButtonClick","onMentionsButtonClick","onScrollButtonClick","ChatDialog","MessageList","PullStatus","ForwardPopup","saveScrollOnExit","resetOnExit","forwardPopup","show","messagesIds","contextMode","active","messageIsLoaded","windowFocused","showQuoteButton","isJumpingToAnchor","messageCollection","pinnedMessages","isOpened","openedDialogId","entityId","isGuest","debouncedScrollHandler","SCROLLING_DEBOUNCE_DELAY","Runtime","debounce","getScrollManager","debouncedReadHandler","READING_DEBOUNCE_DELAY","readQueuedMessages","sequentiallyHighlightMessageHandler","highlightMessage","anchorMessages","hasCommentsOnTop","oldValue","newMessageIdsWithAnchor","visibleMessageIds","getVisibleMessagesManager","forEach","getAnchorService","getPullWatchManager","onChatInited","handler","commentsWereClosed","readVisibleMessages","flush","created","initContextMode","getContainer","scrollOnStart","document","hasFocus","subscribeToEvents","beforeUnmount","unsubscribeFromEvents","saveScrollPosition","handleMessagesOnExit","closeDialogPopups","readAllAnchors","$nextTick","contextId","goToMessageContext","markedId","BlockType","newMessages","savedPositionMessageId","lastReadId","isLastMessageId","lastMessageId","hasUnread","showLoadingBar","EventType","hideLoadingBar","hasMessage","hasAccess","errorCode","AccessManager","checkMessageAccess","ErrorCode","accessDeniedByTariff","Analytics","historyLimit","onGoToContextLimitExceeded","FeatureManager","chatHistory","openFeatureSlider","getMessageService","loadContext","HIGHLIGHT_CLASS","HIGHLIGHT_DURATION","Dom","addClass","removeClass","fields","getChatService","resetChat","readChatQueuedMessages","LOAD_MESSAGES_ON_EXIT_DELAY","reloadMessageList","messagesCanBeRead","readMessage","visibleMessages","viewed","isChatVisible","permissionManager","clearDialogMark","onDialogInited","oldHeight","hasPreparedHistoryMessages","drawPreparedHistoryMessages","isLoading","hasPrevPage","loadHistory","hasPreparedUnreadMessages","drawPreparedUnreadMessages","loadUnread","onScrollToBottom","threshold","DialogScrollThreshold","halfScreenUp","animation","getData","hasVisibleCall","firstUnreadId","nearTheBottom","onGoToMessageContext","onPinnedMessageClick","onPinnedMessageUnpin","unpinMessage","messagePins","onUnpin","handleSecondScrollButtonClick","loadInitialMessages","goToNearestMessageWithAnchor","anchorType","nextMessage","onWindowFocus","onWindowBlur","onCallFold","callDialogId","CallManager","getCurrentCallDialogId","onShowQuoteButton","$event","send","quoteButton","onShowForwardPopup","onCloseForwardPopup","onMessageIsVisible","readAnchorsIfMessageVisibleLongEnough","messageVisibilityTimeThreshold","readMessageAnchorsAfterVisibilityThreshold","onMessageIsNotVisible","layoutManager","LayoutManager","isChatContextAvailable","messageService","MessageService","chatService","ChatService","anchorService","scrollManager","pullWatchManager","visibleMessagesManager","PopupManager","getPopupById","PopupType","dialogAvatarMenu","close","dialogMessageMenu","dialogReactionUsers","dialogReadUsers","messageBaseFileMenu","call","onFold","showForwardPopup","unbind"],"mappings":"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"}