stream-chat-angular 2.5.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"stream-chat-angular.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/stream-chat-angular/src/assets/version.ts","../../../projects/stream-chat-angular/src/lib/notification.service.ts","../../../projects/stream-chat-angular/src/lib/chat-client.service.ts","../../../projects/stream-chat-angular/src/lib/message-preview.ts","../../../projects/stream-chat-angular/src/lib/read-by.ts","../../../projects/stream-chat-angular/src/lib/channel.service.ts","../../../projects/stream-chat-angular/src/lib/theme.service.ts","../../../projects/stream-chat-angular/src/lib/is-image-attachment.ts","../../../projects/stream-chat-angular/src/lib/attachment.service.ts","../../../projects/stream-chat-angular/src/assets/i18n/en.ts","../../../projects/stream-chat-angular/src/lib/stream-i18n.service.ts","../../../projects/stream-chat-angular/src/lib/avatar/avatar.component.ts","../../../projects/stream-chat-angular/src/lib/avatar/avatar.component.html","../../../projects/stream-chat-angular/src/lib/icon/icon.component.ts","../../../projects/stream-chat-angular/src/lib/icon/icon.component.html","../../../projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.ts","../../../projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.html","../../../projects/stream-chat-angular/src/lib/injection-tokens.ts","../../../projects/stream-chat-angular/src/lib/message-input/textarea.directive.ts","../../../projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts","../../../projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts","../../../projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.html","../../../projects/stream-chat-angular/src/lib/message-input/message-input.component.ts","../../../projects/stream-chat-angular/src/lib/message-input/message-input.component.html","../../../projects/stream-chat-angular/src/lib/modal/modal.component.ts","../../../projects/stream-chat-angular/src/lib/modal/modal.component.html","../../../projects/stream-chat-angular/src/lib/notification/notification.component.ts","../../../projects/stream-chat-angular/src/lib/notification/notification.component.html","../../../projects/stream-chat-angular/src/lib/notification-list/notification-list.component.ts","../../../projects/stream-chat-angular/src/lib/notification-list/notification-list.component.html","../../../projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts","../../../projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.html","../../../projects/stream-chat-angular/src/lib/channel/channel.component.ts","../../../projects/stream-chat-angular/src/lib/channel/channel.component.html","../../../projects/stream-chat-angular/src/lib/device-width.ts","../../../projects/stream-chat-angular/src/lib/channel-list/channel-list-toggle.service.ts","../../../projects/stream-chat-angular/src/lib/channel-header/channel-header.component.ts","../../../projects/stream-chat-angular/src/lib/channel-header/channel-header.component.html","../../../projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts","../../../projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.html","../../../projects/stream-chat-angular/src/lib/channel-list/channel-list.component.ts","../../../projects/stream-chat-angular/src/lib/channel-list/channel-list.component.html","../../../projects/stream-chat-angular/src/lib/message/parse-date.ts","../../../projects/stream-chat-angular/src/lib/message/read-by-text.ts","../../../projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts","../../../projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.html","../../../projects/stream-chat-angular/src/lib/message-list/image-load.service.ts","../../../projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts","../../../projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.html","../../../projects/stream-chat-angular/src/lib/message/message.component.ts","../../../projects/stream-chat-angular/src/lib/message/message.component.html","../../../projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts","../../../projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.html","../../../projects/stream-chat-angular/src/lib/transliteration.service.ts","../../../projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts","../../../projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.html","../../../projects/stream-chat-angular/src/lib/message-list/group-styles.ts","../../../projects/stream-chat-angular/src/lib/message-list/message-list.component.ts","../../../projects/stream-chat-angular/src/lib/message-list/message-list.component.html","../../../projects/stream-chat-angular/src/lib/stream-avatar.module.ts","../../../projects/stream-chat-angular/src/lib/stream-chat.module.ts","../../../projects/stream-chat-angular/src/lib/stream-autocomplete-textarea.module.ts","../../../projects/stream-chat-angular/src/lib/stream-textarea.module.ts","../../../projects/stream-chat-angular/src/public-api.ts","../../../projects/stream-chat-angular/src/stream-chat-angular.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export const version = '2.5.1';\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport type NotificationType = 'success' | 'error';\n\nexport type NotificationPayload = {\n type: NotificationType;\n text: string;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n notifications$: Observable<NotificationPayload[]>;\n private notificationsSubject = new BehaviorSubject<NotificationPayload[]>([]);\n\n constructor() {\n this.notifications$ = this.notificationsSubject.asObservable();\n }\n\n addTemporaryNotification(\n text: string,\n type: NotificationType = 'error',\n timeout: number = 5000\n ) {\n this.addNotification(text, type);\n const id = setTimeout(() => this.removeNotification(text), timeout);\n\n return () => {\n clearTimeout(id);\n this.removeNotification(text);\n };\n }\n\n addPermanentNotification(text: string, type: NotificationType = 'error') {\n this.addNotification(text, type);\n\n return () => this.removeNotification(text);\n }\n\n private addNotification(text: string, type: NotificationType) {\n this.notificationsSubject.next([\n ...this.notificationsSubject.getValue(),\n { text, type },\n ]);\n }\n\n private removeNotification(text: string) {\n const notifications = this.notificationsSubject.getValue();\n const index = notifications.findIndex((n) => n.text === text);\n if (index === -1) {\n return;\n }\n notifications.splice(index, 1);\n this.notificationsSubject.next([...notifications]);\n }\n}\n","import { ApplicationRef, Injectable, NgZone } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { Event, StreamChat } from 'stream-chat';\nimport { version } from '../assets/version';\nimport { NotificationService } from './notification.service';\n\nexport type Notification = {\n eventType:\n | 'notification.added_to_channel'\n | 'notification.message_new'\n | 'notification.removed_from_channel';\n event: Event;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChatClientService {\n chatClient!: StreamChat;\n notification$: Observable<Notification>;\n connectionState$: Observable<'offline' | 'online'>;\n private notificationSubject = new ReplaySubject<Notification>(1);\n private connectionStateSubject = new ReplaySubject<'offline' | 'online'>(1);\n\n constructor(\n private ngZone: NgZone,\n private appRef: ApplicationRef,\n private notificationService: NotificationService\n ) {\n this.notification$ = this.notificationSubject.asObservable();\n this.connectionState$ = this.connectionStateSubject.asObservable();\n }\n\n async init(apiKey: string, userId: string, userToken: string) {\n this.chatClient = StreamChat.getInstance(apiKey);\n await this.ngZone.runOutsideAngular(async () => {\n await this.chatClient.connectUser({ id: userId }, userToken);\n this.chatClient.setUserAgent(\n `stream-chat-angular-${version}-${this.chatClient.getUserAgent()}`\n );\n });\n this.chatClient.on('notification.added_to_channel', (e) => {\n this.notificationSubject.next({\n eventType: 'notification.added_to_channel',\n event: e,\n });\n this.appRef.tick();\n });\n this.chatClient.on('notification.message_new', (e) => {\n this.notificationSubject.next({\n eventType: 'notification.message_new',\n event: e,\n });\n this.appRef.tick();\n });\n this.chatClient.on('notification.removed_from_channel', (e) => {\n this.notificationSubject.next({\n eventType: 'notification.removed_from_channel',\n event: e,\n });\n this.appRef.tick();\n });\n let removeNotification: undefined | Function;\n this.chatClient.on('connection.changed', (e) => {\n const isOnline = e.online;\n if (isOnline) {\n if (removeNotification) {\n removeNotification();\n }\n } else {\n removeNotification = this.notificationService.addPermanentNotification(\n 'streamChat.Connection failure, reconnecting now...'\n );\n }\n this.connectionStateSubject.next(isOnline ? 'online' : 'offline');\n this.appRef.tick();\n });\n }\n\n async flagMessage(messageId: string) {\n await this.chatClient.flagMessage(messageId);\n }\n\n async autocompleteUsers(searchTerm: string) {\n if (!searchTerm) {\n return [];\n }\n const result = await this.chatClient.queryUsers({\n $or: [\n { id: { $autocomplete: searchTerm } },\n { name: { $autocomplete: searchTerm } },\n ],\n id: { $ne: this.chatClient.userID! },\n });\n return result.users;\n }\n}\n","import { Attachment, MessageResponse, UserResponse } from 'stream-chat';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport const createMessagePreview = (\n user: UserResponse,\n text: string,\n attachments: Attachment[],\n mentionedUsers: UserResponse[]\n) => {\n const clientSideId = `${user.id}-${uuidv4()}`;\n\n return {\n __html: text,\n created_at: new Date(),\n html: text,\n id: clientSideId,\n reactions: [],\n status: 'sending',\n text,\n type: 'regular',\n user,\n attachments,\n mentioned_users: mentionedUsers,\n } as unknown as MessageResponse;\n};\n","import { Channel, FormatMessageResponse, UserResponse } from 'stream-chat';\n\nexport const getReadBy = (message: FormatMessageResponse, channel: Channel) => {\n const readBy: UserResponse[] = [];\n Object.keys(channel.state.read).forEach((key) => {\n if (\n channel.state.read[key].last_read.getTime() >=\n message.updated_at.getTime() &&\n message.user?.id !== key\n ) {\n readBy.push(channel.state.read[key].user);\n }\n });\n\n return readBy;\n};\n","import { ApplicationRef, Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport {\n Attachment,\n Channel,\n ChannelFilters,\n ChannelOptions,\n ChannelSort,\n Event,\n FormatMessageResponse,\n MessageResponse,\n UpdatedMessage,\n UserResponse,\n} from 'stream-chat';\nimport { ChatClientService, Notification } from './chat-client.service';\nimport { createMessagePreview } from './message-preview';\nimport { MessageReactionType } from './message-reactions/message-reactions.component';\nimport { getReadBy } from './read-by';\nimport { AttachmentUpload, StreamMessage } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChannelService {\n hasMoreChannels$: Observable<boolean>;\n channels$: Observable<Channel[] | undefined>;\n activeChannel$: Observable<Channel | undefined>;\n activeChannelMessages$: Observable<StreamMessage[]>;\n customNewMessageNotificationHandler?: (\n notification: Notification,\n channelListSetter: (channels: Channel[]) => void\n ) => void;\n customAddedToChannelNotificationHandler?: (\n notification: Notification,\n channelListSetter: (channels: Channel[]) => void\n ) => void;\n customRemovedFromChannelNotificationHandler?: (\n notification: Notification,\n channelListSetter: (channels: Channel[]) => void\n ) => void;\n customChannelDeletedHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelUpdatedHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelTruncatedHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelHiddenHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelVisibleHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customNewMessageHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n private channelsSubject = new BehaviorSubject<Channel[] | undefined>(\n undefined\n );\n private activeChannelSubject = new BehaviorSubject<Channel | undefined>(\n undefined\n );\n private activeChannelMessagesSubject = new BehaviorSubject<\n (StreamMessage | MessageResponse | FormatMessageResponse)[]\n >([]);\n private hasMoreChannelsSubject = new ReplaySubject<boolean>(1);\n private activeChannelSubscriptions: { unsubscribe: () => void }[] = [];\n private filters: ChannelFilters | undefined;\n private sort: ChannelSort | undefined;\n private options: ChannelOptions | undefined;\n\n private channelListSetter = (channels: Channel[]) => {\n this.channelsSubject.next(channels);\n };\n\n private messageListSetter = (messages: StreamMessage[]) => {\n this.activeChannelMessagesSubject.next(messages);\n };\n\n constructor(\n private chatClientService: ChatClientService,\n private appRef: ApplicationRef,\n private ngZone: NgZone\n ) {\n this.channels$ = this.channelsSubject.asObservable();\n this.activeChannel$ = this.activeChannelSubject.asObservable();\n this.activeChannelMessages$ = this.activeChannelMessagesSubject.pipe(\n map((messages) => {\n const channel = this.activeChannelSubject.getValue()!;\n return messages.map((message) => {\n if (\n this.isStreamMessage(message) &&\n this.isFormatMessageResponse(message)\n ) {\n return message;\n } else if (this.isFormatMessageResponse(message)) {\n return { ...message, readBy: getReadBy(message, channel) };\n } else {\n const formatMessage = this.formatMessage(message);\n return {\n ...formatMessage,\n readBy: getReadBy(formatMessage, channel),\n };\n }\n });\n })\n );\n this.hasMoreChannels$ = this.hasMoreChannelsSubject.asObservable();\n }\n\n setAsActiveChannel(channel: Channel) {\n const prevActiveChannel = this.activeChannelSubject.getValue();\n this.stopWatchForActiveChannelEvents(prevActiveChannel);\n this.watchForActiveChannelEvents(channel);\n this.activeChannelSubject.next(channel);\n channel.state.messages.forEach((m) => {\n m.readBy = getReadBy(m, channel);\n });\n if (this.canSendReadEvents) {\n void channel.markRead();\n }\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n }\n\n async loadMoreMessages() {\n const activeChnannel = this.activeChannelSubject.getValue();\n const lastMessageId = this.activeChannelMessagesSubject.getValue()[0]?.id;\n await activeChnannel?.query({\n messages: { limit: 25, id_lt: lastMessageId },\n members: { limit: 0 },\n watchers: { limit: 0 },\n });\n if (\n activeChnannel?.data?.id ===\n this.activeChannelSubject.getValue()?.data?.id\n ) {\n this.activeChannelMessagesSubject.next([\n ...activeChnannel!.state.messages,\n ]);\n }\n }\n\n async init(\n filters: ChannelFilters,\n sort?: ChannelSort,\n options?: ChannelOptions\n ) {\n this.filters = filters;\n this.options = options || {\n offset: 0,\n limit: 25,\n state: true,\n presence: true,\n watch: true,\n message_limit: 25,\n };\n this.sort = sort || { last_message_at: -1, updated_at: -1 };\n await this.queryChannels();\n this.chatClientService.notification$.subscribe(\n (notification) => void this.handleNotification(notification)\n );\n }\n\n async loadMoreChannels() {\n this.options!.offset = this.channels.length!;\n await this.queryChannels();\n }\n\n async addReaction(messageId: string, reactionType: MessageReactionType) {\n await this.activeChannelSubject.getValue()?.sendReaction(messageId, {\n type: reactionType,\n });\n }\n\n async removeReaction(messageId: string, reactionType: MessageReactionType) {\n await this.activeChannelSubject\n .getValue()\n ?.deleteReaction(messageId, reactionType);\n }\n\n async sendMessage(\n text: string,\n attachments: Attachment[] = [],\n mentionedUsers: UserResponse[] = []\n ) {\n const preview = createMessagePreview(\n this.chatClientService.chatClient.user!,\n text,\n attachments,\n mentionedUsers\n );\n const channel = this.activeChannelSubject.getValue()!;\n preview.readBy = [];\n channel.state.addMessageSorted(preview, true);\n await this.sendMessageRequest(preview);\n }\n\n async resendMessage(message: StreamMessage) {\n const channel = this.activeChannelSubject.getValue()!;\n channel.state.addMessageSorted(\n {\n ...(message as any as MessageResponse),\n errorStatusCode: undefined,\n status: 'sending',\n },\n true\n );\n await this.sendMessageRequest(message);\n }\n\n async updateMessage(message: StreamMessage) {\n await this.chatClientService.chatClient.updateMessage(\n message as UpdatedMessage\n );\n }\n\n async deleteMessage(message: StreamMessage) {\n await this.chatClientService.chatClient.deleteMessage(message.id);\n }\n\n async uploadAttachments(\n uploads: AttachmentUpload[]\n ): Promise<AttachmentUpload[]> {\n const result: AttachmentUpload[] = [];\n const channel = this.activeChannelSubject.getValue()!;\n const uploadResults = await Promise.allSettled(\n uploads.map((upload) =>\n upload.type === 'image'\n ? channel.sendImage(upload.file)\n : channel.sendFile(upload.file)\n )\n );\n uploadResults.forEach((uploadResult, i) => {\n const file = uploads[i].file;\n const type = uploads[i].type;\n if (uploadResult.status === 'fulfilled') {\n result.push({\n file,\n type,\n state: 'success',\n url: uploadResult.value.file,\n });\n } else {\n result.push({ file, type, state: 'error' });\n }\n });\n\n return result;\n }\n\n async deleteAttachment(attachmentUpload: AttachmentUpload) {\n const channel = this.activeChannelSubject.getValue()!;\n await (attachmentUpload.type === 'image'\n ? channel.deleteImage(attachmentUpload.url!)\n : channel.deleteFile(attachmentUpload.url!));\n }\n\n async autocompleteMembers(searchTerm: string) {\n const activeChannel = this.activeChannelSubject.getValue();\n if (!activeChannel) {\n return [];\n }\n if (Object.keys(activeChannel.state.members).length <= 100) {\n return Object.values(activeChannel.state.members).filter(\n (m) => m.user?.id !== this.chatClientService.chatClient.userID!\n );\n } else {\n if (!searchTerm) {\n return [];\n }\n const result = await activeChannel.queryMembers({\n $or: [\n { id: { $autocomplete: searchTerm } },\n { name: { $autocomplete: searchTerm } },\n ],\n id: { $ne: this.chatClientService.chatClient.userID! },\n });\n return Object.values(result.members);\n }\n }\n\n private async sendMessageRequest(preview: MessageResponse | StreamMessage) {\n const channel = this.activeChannelSubject.getValue()!;\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n try {\n await channel.sendMessage({\n text: preview.text,\n attachments: preview.attachments,\n mentioned_users: preview.mentioned_users?.map((u) => u.id),\n id: preview.id,\n });\n } catch (error) {\n const stringError = JSON.stringify(error);\n const parsedError: { status?: number } = stringError\n ? (JSON.parse(stringError) as { status?: number })\n : {};\n\n channel.state.addMessageSorted(\n {\n ...(preview as MessageResponse),\n errorStatusCode: parsedError.status || undefined,\n status: 'failed',\n },\n true\n );\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n }\n }\n\n private async handleNotification(notification: Notification) {\n switch (notification.eventType) {\n case 'notification.message_new': {\n if (this.customNewMessageNotificationHandler) {\n this.customNewMessageNotificationHandler(\n notification,\n this.channelListSetter\n );\n } else {\n await this.handleNewMessageNotification(notification);\n }\n break;\n }\n case 'notification.added_to_channel': {\n if (this.customAddedToChannelNotificationHandler) {\n this.customAddedToChannelNotificationHandler(\n notification,\n this.channelListSetter\n );\n } else {\n await this.handleAddedToChannelNotification(notification);\n }\n break;\n }\n case 'notification.removed_from_channel': {\n if (this.customRemovedFromChannelNotificationHandler) {\n this.customRemovedFromChannelNotificationHandler(\n notification,\n this.channelListSetter\n );\n } else {\n this.handleRemovedFromChannelNotification(notification);\n }\n }\n }\n }\n\n private handleRemovedFromChannelNotification(notification: Notification) {\n this.ngZone.run(() => {\n const channelIdToBeRemoved = notification.event.channel!.cid;\n this.removeFromChannelList(channelIdToBeRemoved);\n });\n }\n\n private async handleNewMessageNotification(notification: Notification) {\n await this.addChannelFromNotification(notification);\n }\n\n private async handleAddedToChannelNotification(notification: Notification) {\n await this.addChannelFromNotification(notification);\n }\n\n private async addChannelFromNotification(notification: Notification) {\n const channel = this.chatClientService.chatClient.channel(\n notification.event.channel?.type!,\n notification.event.channel?.id\n );\n await channel.watch();\n this.watchForChannelEvents(channel);\n this.ngZone.run(() => {\n this.channelsSubject.next([\n channel,\n ...(this.channelsSubject.getValue() || []),\n ]);\n });\n }\n\n private removeFromChannelList(cid: string) {\n const channels = this.channels.filter((c) => c.cid !== cid);\n if (channels.length < this.channels.length) {\n this.channelsSubject.next(channels);\n if (this.activeChannelSubject.getValue()!.cid === cid) {\n this.setAsActiveChannel(channels[0]);\n }\n }\n }\n\n private watchForActiveChannelEvents(channel: Channel) {\n this.activeChannelSubscriptions.push(\n channel.on('message.new', () => {\n this.ngZone.run(() => {\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n this.activeChannel$.pipe(first()).subscribe((c) => {\n if (this.canSendReadEvents) {\n void c?.markRead();\n }\n });\n });\n })\n );\n this.activeChannelSubscriptions.push(\n channel.on('message.updated', (event) => this.messageUpdated(event))\n );\n this.activeChannelSubscriptions.push(\n channel.on('message.deleted', (event) => this.messageUpdated(event))\n );\n this.activeChannelSubscriptions.push(\n channel.on('reaction.new', (e) => this.messageReactionEventReceived(e))\n );\n this.activeChannelSubscriptions.push(\n channel.on('reaction.deleted', (e) =>\n this.messageReactionEventReceived(e)\n )\n );\n this.activeChannelSubscriptions.push(\n channel.on('reaction.updated', (e) =>\n this.messageReactionEventReceived(e)\n )\n );\n this.activeChannelSubscriptions.push(\n channel.on('message.read', (e) => {\n let latestMessage!: StreamMessage;\n this.activeChannelMessages$.pipe(first()).subscribe((messages) => {\n latestMessage = messages[messages.length - 1];\n });\n if (!latestMessage || !e.user) {\n return;\n }\n latestMessage.readBy = getReadBy(latestMessage, channel);\n\n this.activeChannelMessagesSubject.next(\n this.activeChannelMessagesSubject.getValue()\n );\n })\n );\n }\n\n private messageUpdated(event: Event) {\n this.ngZone.run(() => {\n const messages = this.activeChannelMessagesSubject.getValue();\n const messageIndex = messages.findIndex(\n (m) => m.id === event.message?.id\n );\n if (messageIndex !== -1 && event.message) {\n messages[messageIndex] = event.message;\n this.activeChannelMessagesSubject.next([...messages]);\n }\n });\n }\n\n private messageReactionEventReceived(e: Event) {\n this.ngZone.run(() => {\n let messages!: StreamMessage[];\n this.activeChannelMessages$\n .pipe(first())\n .subscribe((m) => (messages = m));\n const message = messages.find((m) => m.id === e?.message?.id);\n if (!message) {\n return;\n }\n message.reaction_counts = { ...e.message?.reaction_counts };\n message.reaction_scores = { ...e.message?.reaction_scores };\n message.latest_reactions = [...(e.message?.latest_reactions || [])];\n message.own_reactions = [...(e.message?.own_reactions || [])];\n this.activeChannelMessagesSubject.next([...messages]);\n });\n }\n\n private formatMessage(message: MessageResponse) {\n return {\n ...message,\n // parse the date..\n pinned_at: message.pinned_at ? new Date(message.pinned_at) : null,\n created_at: message.created_at\n ? new Date(message.created_at)\n : new Date(),\n updated_at: message.updated_at\n ? new Date(message.updated_at)\n : new Date(),\n status: message.status || 'received',\n };\n }\n\n private isStreamMessage(\n message: StreamMessage | FormatMessageResponse | MessageResponse\n ): message is StreamMessage {\n return !!message.readBy;\n }\n\n private isFormatMessageResponse(\n message: StreamMessage | FormatMessageResponse | MessageResponse\n ): message is FormatMessageResponse {\n return message.created_at instanceof Date;\n }\n\n private stopWatchForActiveChannelEvents(channel: Channel | undefined) {\n if (!channel) {\n return;\n }\n this.activeChannelSubscriptions.forEach((s) => s.unsubscribe());\n this.activeChannelSubscriptions = [];\n }\n\n private async queryChannels() {\n try {\n const channels = await this.chatClientService.chatClient.queryChannels(\n this.filters!,\n this.sort,\n this.options\n );\n channels.forEach((c) => this.watchForChannelEvents(c));\n const prevChannels = this.channelsSubject.getValue() || [];\n this.channelsSubject.next([...prevChannels, ...channels]);\n if (channels.length > 0 && !this.activeChannelSubject.getValue()) {\n this.setAsActiveChannel(channels[0]);\n }\n this.hasMoreChannelsSubject.next(channels.length >= this.options!.limit!);\n } catch (error) {\n this.channelsSubject.error(error);\n }\n }\n\n private watchForChannelEvents(channel: Channel) {\n channel.on((event: Event) => {\n switch (event.type) {\n case 'message.new': {\n if (this.customNewMessageHandler) {\n this.customNewMessageHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleNewMessage(event, channel);\n }\n break;\n }\n case 'channel.hidden': {\n if (this.customChannelHiddenHandler) {\n this.customChannelHiddenHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelHidden(event);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.deleted': {\n if (this.customChannelDeletedHandler) {\n this.customChannelDeletedHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelDeleted(event);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.visible': {\n if (this.customChannelVisibleHandler) {\n this.customChannelVisibleHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelVisible(event, channel);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.updated': {\n if (this.customChannelUpdatedHandler) {\n this.customChannelUpdatedHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelUpdate(event);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.truncated': {\n if (this.customChannelTruncatedHandler) {\n this.customChannelTruncatedHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelTruncate(event);\n }\n this.appRef.tick();\n break;\n }\n }\n setTimeout(() => this.appRef.tick(), 0);\n });\n }\n\n private handleNewMessage(_: Event, channel: Channel) {\n const channelIndex = this.channels.findIndex((c) => c.cid === channel.cid);\n this.channels.splice(channelIndex, 1);\n this.channelsSubject.next([channel, ...this.channels]);\n }\n\n private handleChannelHidden(event: Event) {\n this.removeFromChannelList(event.channel!.cid);\n }\n\n private handleChannelDeleted(event: Event) {\n this.removeFromChannelList(event.channel!.cid);\n }\n\n private handleChannelVisible(event: Event, channel: Channel) {\n if (!this.channels.find((c) => c.cid === event.cid)) {\n this.ngZone.run(() =>\n this.channelsSubject.next([...this.channels, channel])\n );\n }\n }\n\n private handleChannelUpdate(event: Event) {\n const channelIndex = this.channels.findIndex(\n (c) => c.cid === event.channel!.cid\n );\n if (channelIndex !== -1) {\n this.channels[channelIndex].data = event.channel;\n this.channelsSubject.next([...this.channels]);\n if (event.channel?.cid === this.activeChannelSubject.getValue()?.cid) {\n const channel = this.activeChannelSubject.getValue()!;\n channel.data = event.channel;\n this.activeChannelSubject.next(channel);\n }\n }\n }\n\n private handleChannelTruncate(event: Event) {\n const channelIndex = this.channels.findIndex(\n (c) => c.cid === event.channel!.cid\n );\n if (channelIndex !== -1) {\n this.channels[channelIndex].state.messages = [];\n this.channelsSubject.next([...this.channels]);\n if (event.channel?.cid === this.activeChannelSubject.getValue()?.cid) {\n const channel = this.activeChannelSubject.getValue()!;\n channel.state.messages = [];\n this.activeChannelSubject.next(channel);\n this.activeChannelMessagesSubject.next([]);\n }\n }\n }\n\n private get channels() {\n return this.channelsSubject.getValue() || [];\n }\n\n private get canSendReadEvents() {\n const channel = this.activeChannelSubject.getValue();\n if (!channel) {\n return false;\n }\n const capabilites = channel.data?.own_capabilities as string[];\n return capabilites.indexOf('read-events') !== -1;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport type Theme = 'light' | 'dark';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n theme$ = new BehaviorSubject<Theme>('light');\n private _customLightThemeVariables: { [key: string]: string } | undefined;\n private _customDarkThemeVariables: { [key: string]: string } | undefined;\n private defaultDarkModeVariables = {\n '--bg-gradient-end': '#101214',\n '--bg-gradient-start': '#070a0d',\n '--black': '#ffffff',\n '--blue-alice': '#00193d',\n '--border': '#141924',\n '--button-background': '#ffffff',\n '--button-text': '#005fff',\n '--grey': '#7a7a7a',\n '--grey-gainsboro': '#2d2f2f',\n '--grey-whisper': '#1c1e22',\n '--modal-shadow': '#000000',\n '--overlay': '#00000066', // 66 = 40% opacity\n '--overlay-dark': '#ffffffcc', // CC = 80% opacity\n '--shadow-icon': '#00000080', // 80 = 50% opacity\n '--targetedMessageBackground': '#302d22',\n '--transparent': 'transparent',\n '--white': '#101418',\n '--white-smoke': '#13151b',\n '--white-snow': '#070a0d',\n };\n\n constructor() {\n this.theme$.subscribe((theme) => {\n const darkVariables = this.customDarkThemeVariables\n ? { ...this.defaultDarkModeVariables, ...this.customDarkThemeVariables }\n : this.defaultDarkModeVariables;\n const lightVariables = this.customLightThemeVariables\n ? this.customLightThemeVariables\n : {};\n if (theme === 'dark') {\n this.deleteVariables(lightVariables);\n this.setVariables(darkVariables);\n } else {\n this.deleteVariables(darkVariables);\n this.setVariables(lightVariables);\n }\n });\n }\n\n get customLightThemeVariables() {\n return this._customLightThemeVariables;\n }\n\n set customLightThemeVariables(\n variables: { [key: string]: string } | undefined\n ) {\n const prevVariables = this.customLightThemeVariables;\n this.deleteVariables(prevVariables);\n this._customLightThemeVariables = variables;\n }\n\n get customDarkThemeVariables() {\n return this._customDarkThemeVariables;\n }\n\n set customDarkThemeVariables(\n variables: { [key: string]: string } | undefined\n ) {\n const prevVariables = this.customDarkThemeVariables;\n this.deleteVariables(prevVariables);\n this._customDarkThemeVariables = variables;\n }\n\n private deleteVariables(variables: { [key: string]: string } | undefined) {\n if (!variables) {\n return;\n }\n Object.keys(variables).forEach((key) =>\n document.documentElement.style.setProperty(key, null)\n );\n }\n\n private setVariables(variables: { [key: string]: string } | undefined) {\n if (!variables) {\n return;\n }\n Object.keys(variables).forEach((key) =>\n document.documentElement.style.setProperty(key, variables[key])\n );\n }\n}\n","import { Attachment } from 'stream-chat';\n\nexport const isImageAttachment = (attachment: Attachment) => {\n return (\n attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url\n );\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Attachment } from 'stream-chat';\nimport { ChannelService } from './channel.service';\nimport { isImageAttachment } from './is-image-attachment';\nimport { NotificationService } from './notification.service';\nimport { AttachmentUpload } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AttachmentService {\n attachmentUploadInProgressCounter$: Observable<number>;\n attachmentUploads$: Observable<AttachmentUpload[]>;\n private attachmentUploadInProgressCounterSubject =\n new BehaviorSubject<number>(0);\n private attachmentUploadsSubject = new BehaviorSubject<AttachmentUpload[]>(\n []\n );\n\n constructor(\n private channelService: ChannelService,\n private notificationService: NotificationService\n ) {\n this.attachmentUploadInProgressCounter$ =\n this.attachmentUploadInProgressCounterSubject.asObservable();\n this.attachmentUploads$ = this.attachmentUploadsSubject.asObservable();\n }\n\n resetAttachmentUploads() {\n this.attachmentUploadsSubject.next([]);\n }\n\n async filesSelected(fileList: FileList | null) {\n if (!fileList) {\n return;\n }\n const imageFiles: File[] = [];\n const dataFiles: File[] = [];\n\n Array.from(fileList).forEach((file) => {\n if (file.type.startsWith('image/') && !file.type.endsWith('.photoshop')) {\n // photoshop files begin with 'image/'\n imageFiles.push(file);\n } else {\n dataFiles.push(file);\n }\n });\n imageFiles.forEach((f) => this.createPreview(f));\n const newUploads = [\n ...imageFiles.map((file) => ({\n file,\n state: 'uploading' as 'uploading',\n type: 'image' as 'image',\n })),\n ...dataFiles.map((file) => ({\n file,\n state: 'uploading' as 'uploading',\n type: 'file' as 'file',\n })),\n ];\n this.attachmentUploadsSubject.next([\n ...this.attachmentUploadsSubject.getValue(),\n ...newUploads,\n ]);\n await this.uploadAttachments(newUploads);\n }\n\n async retryAttachmentUpload(file: File) {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n const upload = attachmentUploads.find((u) => u.file === file);\n if (!upload) {\n return;\n }\n upload.state = 'uploading';\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n await this.uploadAttachments([upload]);\n }\n\n async deleteAttachment(upload: AttachmentUpload) {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n if (upload.state === 'success') {\n try {\n await this.channelService.deleteAttachment(upload);\n attachmentUploads.splice(attachmentUploads.indexOf(upload), 1);\n } catch (error) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Error deleting attachment'\n );\n }\n } else {\n attachmentUploads.splice(attachmentUploads.indexOf(upload), 1);\n }\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n }\n\n mapToAttachments() {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n return attachmentUploads\n .filter((r) => r.state === 'success')\n .map((r) => {\n const attachment: Attachment = {\n type: r.type,\n };\n if (r.type === 'image') {\n attachment.fallback = r.file?.name;\n attachment.image_url = r.url;\n } else {\n attachment.asset_url = r.url;\n attachment.title = r.file?.name;\n attachment.file_size = r.file?.size;\n }\n\n return attachment;\n });\n }\n\n createFromAttachments(attachments: Attachment[]) {\n const attachmentUploads: AttachmentUpload[] = [];\n attachments.forEach((attachment) => {\n if (isImageAttachment(attachment)) {\n attachmentUploads.push({\n url: (attachment.img_url ||\n attachment.thumb_url ||\n attachment.image_url) as string,\n state: 'success',\n type: 'image',\n file: {\n name: attachment.fallback,\n } as File,\n });\n } else if (attachment.type === 'file') {\n attachmentUploads.push({\n url: attachment.asset_url,\n state: 'success',\n file: {\n name: attachment.title,\n size: attachment.file_size,\n } as File,\n type: 'file',\n });\n }\n });\n\n if (attachmentUploads.length > 0) {\n this.attachmentUploadsSubject.next([\n ...this.attachmentUploadsSubject.getValue(),\n ...attachmentUploads,\n ]);\n }\n }\n\n private createPreview(file: File) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n const upload = attachmentUploads.find((upload) => upload.file === file);\n if (!upload) {\n return;\n }\n upload.previewUri = event.target?.result || undefined;\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n };\n reader.readAsDataURL(file as Blob);\n }\n\n private async uploadAttachments(uploads: AttachmentUpload[]) {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n this.attachmentUploadInProgressCounterSubject.next(\n this.attachmentUploadInProgressCounterSubject.getValue() + 1\n );\n const result = await this.channelService.uploadAttachments(uploads);\n result.forEach((r) => {\n const upload = attachmentUploads.find((upload) => upload.file === r.file);\n if (!upload) {\n if (r.url) {\n void this.channelService.deleteAttachment(r);\n }\n return;\n }\n upload.state = r.state;\n upload.url = r.url;\n if (upload.state === 'error') {\n this.notificationService.addTemporaryNotification(\n upload.type === 'image'\n ? 'streamChat.Error uploading image'\n : 'streamChat.Error uploading file'\n );\n }\n });\n this.attachmentUploadInProgressCounterSubject.next(\n this.attachmentUploadInProgressCounterSubject.getValue() - 1\n );\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n }\n}\n","export const en = {\n streamChat: {\n '1 reply': '1 reply',\n 'Attach files': 'Attach files',\n Cancel: 'Cancel',\n 'Channel Missing': 'Channel Missing',\n Close: 'Close',\n 'Close emoji picker': 'Close emoji picker',\n 'Commands matching': 'Commands matching',\n 'Connection failure, reconnecting now...':\n 'Connection failure, reconnecting now...',\n Delete: 'Delete',\n Delivered: 'Delivered',\n 'Edit Message': 'Edit Message',\n 'Edit message request failed': 'Edit message request failed',\n 'Emoji matching': 'Emoji matching',\n 'Empty message...': 'Empty message...',\n 'Error adding flag': 'Error adding flag',\n 'Error connecting to chat, refresh the page to try again.':\n 'Error connecting to chat, refresh the page to try again.',\n 'Error deleting message': 'Error deleting message',\n 'Error muting a user ...': 'Error muting a user ...',\n 'Error pinning message': 'Error pinning message',\n 'Error removing message pin': 'Error removing message pin',\n 'Error unmuting a user ...': 'Error unmuting a user ...',\n 'Error uploading file': 'Error uploading file',\n 'Error uploading image': 'Error uploading image',\n 'Error deleting attachment': 'Error deleting attachment',\n 'Error · Unsent': 'Error · Unsent',\n 'Error: {{ errorMessage }}': 'Error: {{ errorMessage }}',\n Flag: 'Flag',\n 'Message Failed': 'Message Failed',\n 'Message Failed · Unauthorized': 'Message Failed · Unauthorized',\n 'Message deleted': 'Message deleted',\n 'Message has been successfully flagged':\n 'Message has been successfully flagged',\n 'Message pinned': 'Message pinned',\n Mute: 'Mute',\n New: 'New',\n 'New Messages!': 'New Messages!',\n 'No results found': 'No results found',\n 'Nothing yet...': 'Nothing yet...',\n 'Only visible to you': 'Only visible to you',\n 'Open emoji picker': 'Open emoji picker',\n 'People matching': 'People matching',\n 'Pick your emoji': 'Pick your emoji',\n Pin: 'Pin',\n 'Pinned by': 'Pinned by',\n Reply: 'Reply',\n 'Reply to Message': 'Reply to Message',\n Search: 'Search',\n 'Searching...': 'Searching...',\n Send: 'Send',\n 'Send message request failed': 'Send message request failed',\n 'Sending...': 'Sending...',\n 'Slow Mode ON': 'Slow Mode ON',\n 'Start of a new thread': 'Start of a new thread',\n 'This message was deleted...': 'This message was deleted...',\n Thread: 'Thread',\n 'Type your message': 'Type your message',\n Unmute: 'Unmute',\n Unpin: 'Unpin',\n 'Wait until all attachments have uploaded':\n 'Wait until all attachments have uploaded',\n 'You have no channels currently': 'You have no channels currently',\n \"You've reached the maximum number of files\":\n \"You've reached the maximum number of files\",\n live: 'live',\n 'this content could not be displayed':\n 'this content could not be displayed',\n '{{ commaSeparatedUsers }} and {{ moreCount }} more':\n '{{ commaSeparatedUsers }} and {{ moreCount }} more',\n '{{ commaSeparatedUsers }}, and {{ lastUser }}':\n '{{ commaSeparatedUsers }}, and {{ lastUser }}',\n '{{ firstUser }} and {{ secondUser }}':\n '{{ firstUser }} and {{ secondUser }}',\n '{{ imageCount }} more': '{{ imageCount }} more',\n '{{ memberCount }} members': '{{ memberCount }} members',\n '{{ replyCount }} replies': '{{ replyCount }} replies',\n '{{ user }} has been muted': '{{ user }} has been muted',\n '{{ user }} has been unmuted': '{{ user }} has been unmuted',\n '{{ watcherCount }} online': '{{ watcherCount }} online',\n '🏙 Attachment...': '🏙 Attachment...',\n 'Connection error': 'Connection error',\n 'Load more': 'Load more',\n failed: 'failed',\n retry: 'retry',\n test: 'success',\n 'Sending links is not allowed in this conversation':\n 'Sending links is not allowed in this conversation',\n \"You can't send messages in this channel\":\n \"You can't send messages in this channel\",\n },\n};\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { en } from '../assets/i18n/en';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StreamI18nService {\n constructor(private translteService: TranslateService) {}\n\n setTranslation(lang = 'en', overrides?: { [key: string]: string }) {\n if (!this.translteService.defaultLang) {\n this.translteService.defaultLang = lang;\n }\n this.translteService.setTranslation(\n lang,\n { streamChat: { ...en.streamChat, ...overrides } },\n true\n );\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'stream-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n})\nexport class AvatarComponent {\n @Input() name: string | undefined;\n @Input() imageUrl: string | undefined;\n @Input() size = 32;\n isLoaded = false;\n isError = false;\n\n constructor() {}\n\n get initials() {\n return (this.name?.toString() || '').charAt(0);\n }\n}\n","<div\n class=\"str-chat__avatar str-chat__avatar--circle\"\n title=\"{{ name }}\"\n [style]=\"{\n flexBasis: size + 'px',\n fontSize: size / 2 + 'px',\n height: size + 'px',\n lineHeight: size + 'px',\n width: size + 'px'\n }\"\n>\n <img\n *ngIf=\"imageUrl && !isError; else fallback\"\n class=\"str-chat__avatar-image str-chat__avatar-image{{\n isLoaded ? ' str-chat__avatar-image--loaded' : ''\n }}\"\n src=\"{{ imageUrl }}\"\n alt=\"{{ initials }}\"\n data-testid=\"avatar-img\"\n (load)=\"isLoaded = true\"\n (error)=\"isError = true\"\n [style]=\"{\n flexBasis: size + 'px',\n height: size + 'px',\n objectFit: 'cover',\n width: size + 'px'\n }\"\n />\n <ng-template #fallback>\n <div data-testid=\"fallback-img\" class=\"str-chat__avatar-fallback\">\n {{ initials }}\n </div>\n </ng-template>\n</div>\n","import { Component, Input } from '@angular/core';\n\nexport type Icon =\n | 'action-icon'\n | 'delivered-icon'\n | 'reaction-icon'\n | 'connection-error'\n | 'send'\n | 'file-upload'\n | 'retry'\n | 'close'\n | 'file';\n\n@Component({\n selector: 'stream-icon',\n templateUrl: './icon.component.html',\n styles: [],\n})\nexport class IconComponent {\n @Input() icon: Icon | undefined;\n @Input() size: number | undefined;\n constructor() {}\n}\n","<svg\n data-testid=\"action-icon\"\n *ngIf=\"icon === 'action-icon'\"\n height=\"4\"\n viewBox=\"0 0 11 4\"\n width=\"11\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z\"\n fillRule=\"nonzero\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'delivered-icon'\"\n height=\"16\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"delivered-icon\"\n>\n <path\n d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zm3.72 6.633a.955.955 0 1 0-1.352-1.352L6.986 8.663 5.633 7.31A.956.956 0 1 0 4.28 8.663l2.029 2.028a.956.956 0 0 0 1.353 0l4.058-4.058z\"\n fill=\"#006CFF\"\n fillRule=\"evenodd\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'reaction-icon'\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n width=\"12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"reaction-icon\"\n>\n <g clipRule=\"evenodd\" fillRule=\"evenodd\">\n <path\n d=\"M6 1.2C3.3 1.2 1.2 3.3 1.2 6c0 2.7 2.1 4.8 4.8 4.8 2.7 0 4.8-2.1 4.8-4.8 0-2.7-2.1-4.8-4.8-4.8zM0 6c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z\"\n ></path>\n <path\n d=\"M5.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM8.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM3.3 6.7c.3-.2.6-.1.8.1.3.4.8.9 1.5 1 .6.2 1.4.1 2.4-1 .2-.2.6-.3.8 0 .2.2.3.6 0 .8-1.1 1.3-2.4 1.7-3.5 1.5-1-.2-1.8-.9-2.2-1.5-.2-.3-.1-.7.2-.9z\"\n ></path>\n </g>\n</svg>\n<svg\n data-testid=\"connection-error\"\n *ngIf=\"icon === 'connection-error'\"\n width=\"78px\"\n height=\"78px\"\n viewBox=\"0 0 78 78\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n>\n <!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->\n <title>Combined Shape</title>\n <desc>Created with Sketch.</desc>\n <g\n id=\"Interactions\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n >\n <g\n id=\"Connection-Error-_-Connectivity\"\n transform=\"translate(-270.000000, -30.000000)\"\n fill=\"#CF1F25\"\n >\n <g\n id=\"109-network-connection\"\n transform=\"translate(270.000000, 30.000000)\"\n >\n <path\n d=\"M66.4609744,11.414231 C81.6225232,26.5757798 81.6225232,51.157545 66.4609744,66.3188467 C51.2994256,81.4803954 26.7176604,81.4803954 11.5563587,66.3188467 C-3.60519004,51.1572979 -3.60519004,26.5755327 11.5563587,11.414231 C26.7179075,-3.74731776 51.2996727,-3.74731776 66.4609744,11.414231 Z M54.7853215,45.8823776 L54.7853215,40.5882574 C54.7853215,39.613638 53.9952341,38.8235506 53.0206147,38.8235506 L44.9576695,38.8235506 L41.428256,42.3529641 L51.255555,42.3529641 L51.255555,45.8823776 L54.7853215,45.8823776 Z M40.6659027,43.1153174 L37.8988425,45.8823776 L40.6659027,45.8823776 L40.6659027,43.1153174 Z M51.1764962,56.4702653 L58.2353232,56.4702653 C59.2099355,56.4702653 60.00003,55.6801708 60.00003,54.7055585 L60.00003,51.176145 C60.00003,50.2015327 59.2099355,49.4114382 58.2353232,49.4114382 L51.1764962,49.4114382 C50.2018839,49.4114382 49.4117894,50.2015327 49.4117894,51.176145 L49.4117894,54.7055585 C49.4117894,55.6801708 50.2018839,56.4702653 51.1764962,56.4702653 Z M35.2941353,56.4702653 L42.3529624,56.4702653 C43.3275746,56.4702653 44.1176691,55.6801708 44.1176691,54.7055585 L44.1176691,51.176145 C44.1176691,50.2015327 43.3275746,49.4114382 42.3529624,49.4114382 L35.2941353,49.4114382 C34.319523,49.4114382 33.5294285,50.2015327 33.5294285,51.176145 L33.5294285,54.7055585 C33.5294285,55.6801708 34.319523,56.4702653 35.2941353,56.4702653 Z M56.6964989,19.0874231 C56.007381,18.3985134 54.8903216,18.3985134 54.2012036,19.087423 L45.882376,27.4062507 L45.882376,19.4117761 C45.882376,18.4371568 45.0922885,17.6470693 44.1176692,17.6470693 L33.5294286,17.6470693 C32.5548092,17.6470694 31.7647218,18.4371568 31.7647218,19.4117761 L31.7647218,30.0000167 C31.7647219,30.9746363 32.5548092,31.7647237 33.5294285,31.7647237 L41.5239031,31.7647237 L34.4650761,38.8235508 L24.7058947,38.8235508 C23.7312753,38.8235508 22.9411879,39.6136382 22.9411879,40.5882575 L22.9411879,45.8823778 L26.4706014,45.8823778 L26.4706014,42.3529643 L30.9356624,42.3529643 L23.8768354,49.4117914 L19.4117743,49.4117914 C18.4371549,49.4117914 17.6470675,50.2018788 17.6470675,51.1764981 L17.6470675,54.7059117 C17.6504049,54.9674302 17.7129076,55.2248042 17.8298886,55.4587302 L16.4456526,56.8429662 C15.7446193,57.5200453 15.7252005,58.6372282 16.4022825,59.3382615 C17.0793616,60.0392948 18.1965445,60.0587136 18.8975778,59.3816316 C18.9122847,59.3674273 18.9267436,59.3529684 18.940948,59.3382615 L56.6964963,21.5830662 C57.3856425,20.8939094 57.3856425,19.7765747 56.6964963,19.0874179 Z\"\n id=\"Combined-Shape\"\n ></path>\n </g>\n </g>\n </g>\n</svg>\n<svg\n *ngIf=\"icon === 'send'\"\n data-testid=\"send\"\n height=\"17\"\n viewBox=\"0 0 18 17\"\n width=\"18\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <title translate>streamChat.Send</title>\n <path\n d=\"M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z\"\n fill=\"#006cff\"\n fillRule=\"evenodd\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'file-upload'\"\n data-testid=\"file-upload\"\n height=\"14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <title translate>streamChat.Attach files</title>\n <path\n d=\"M1.667.333h10.666c.737 0 1.334.597 1.334 1.334v10.666c0 .737-.597 1.334-1.334 1.334H1.667a1.333 1.333 0 0 1-1.334-1.334V1.667C.333.93.93.333 1.667.333zm2 1.334a1.667 1.667 0 1 0 0 3.333 1.667 1.667 0 0 0 0-3.333zm-2 9.333v1.333h10.666v-4l-2-2-4 4-2-2L1.667 11z\"\n fillRule=\"nonzero\"\n />\n</svg>\n<svg\n data-testid=\"retry\"\n *ngIf=\"icon === 'retry'\"\n width=\"22\"\n height=\"20\"\n viewBox=\"0 0 22 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M20 5.535V2a1 1 0 0 1 2 0v6a1 1 0 0 1-1 1h-6a1 1 0 0 1 0-2h3.638l-2.975-2.653a8 8 0 1 0 1.884 8.32 1 1 0 1 1 1.886.666A10 10 0 1 1 5.175 1.245c3.901-2.15 8.754-1.462 11.88 1.667L20 5.535z\"\n fill=\"#FFF\"\n fill-rule=\"nonzero\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'close'\"\n data-testid=\"close\"\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 28 28\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n>\n <defs>\n <path\n d=\"M465 5c5.53 0 10 4.47 10 10s-4.47 10-10 10-10-4.47-10-10 4.47-10 10-10zm3.59 5L465 13.59 461.41 10 460 11.41l3.59 3.59-3.59 3.59 1.41 1.41 3.59-3.59 3.59 3.59 1.41-1.41-3.59-3.59 3.59-3.59-1.41-1.41z\"\n id=\"b\"\n />\n <filter\n x=\"-30%\"\n y=\"-30%\"\n width=\"160%\"\n height=\"160%\"\n filterUnits=\"objectBoundingBox\"\n id=\"a\"\n >\n <feOffset in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n <feGaussianBlur\n stdDeviation=\"2\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n />\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\"\n in=\"shadowBlurOuter1\"\n />\n </filter>\n </defs>\n <g transform=\"translate(-451 -1)\" fill-rule=\"nonzero\" fill=\"none\">\n <use fill=\"#000\" filter=\"url(#a)\" xlink:href=\"#b\" />\n <use fill=\"#FFF\" fill-rule=\"evenodd\" xlink:href=\"#b\" />\n </g>\n</svg>\n<svg\n *ngIf=\"icon === 'file'\"\n data-testid=\"file\"\n className=\"rfu-file-icon--small fa-file-fallback\"\n [attr.height]=\"size || 20\"\n [attr.width]=\"size || 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 512\"\n>\n <path\n d=\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z\"\n fill=\"#414D54\"\n />\n</svg>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'stream-loading-indicator',\n templateUrl: './loading-indicator.component.html',\n styles: [],\n})\nexport class LoadingIndicatorComponent {\n @Input() size = 15;\n @Input() color = '#006CFF';\n\n constructor() {}\n}\n","<div class=\"str-chat__loading-indicator\">\n <svg\n [attr.height]=\"size\"\n viewBox=\"0 0 30 30\"\n [attr.width]=\"size\"\n data-testid=\"loading-indicator\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <linearGradient id=\"a\" x1=\"50%\" x2=\"50%\" y1=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"#FFF\" stop-opacity=\"0\" />\n <stop\n data-testid=\"stop-color\"\n offset=\"100%\"\n [attr.stop-color]=\"color\"\n stop-opacity=\"1\"\n [ngStyle]=\"{ stopColor: color }\"\n />\n </linearGradient>\n </defs>\n <path\n d=\"M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z\"\n fill=\"url(#a)\"\n fillRule=\"evenodd\"\n />\n </svg>\n</div>\n","import { InjectionToken, Type } from '@angular/core';\nimport { TextareaInterface } from './message-input/textarea.interface';\n\nexport const textareaInjectionToken = new InjectionToken<\n Type<TextareaInterface>\n>('textareaInjectionToken');\n","import {\n ComponentRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Directive } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { UserResponse } from 'stream-chat';\nimport { MentionAutcompleteListItemContext } from '../types';\nimport { TextareaInterface } from './textarea.interface';\n\n@Directive({\n selector: '[streamTextarea]',\n})\nexport class TextareaDirective implements OnChanges {\n @Input() componentRef: ComponentRef<TextareaInterface> | undefined;\n @Input() areMentionsEnabled: boolean | undefined;\n @Input() mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n @Input() mentionScope?: 'channel' | 'application';\n @Input() value = '';\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly send = new EventEmitter<void>();\n @Output() readonly userMentions = new EventEmitter<UserResponse[]>();\n private subscriptions: Subscription[] = [];\n private unpropagatedChanges: SimpleChanges[] = [];\n constructor(public viewContainerRef: ViewContainerRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.unpropagatedChanges.push(changes);\n if (!this.componentRef) {\n return;\n }\n if (changes.componentRef) {\n this.subscriptions.forEach((s) => s.unsubscribe());\n if (this.componentRef) {\n this.subscriptions.push(\n this.componentRef.instance.valueChange.subscribe((value) =>\n this.valueChange.next(value)\n )\n );\n this.subscriptions.push(\n this.componentRef.instance.send.subscribe((value) =>\n this.send.next(value)\n )\n );\n if (this.componentRef.instance.userMentions) {\n this.subscriptions.push(\n this.componentRef.instance.userMentions.subscribe((value) =>\n this.userMentions.next(value)\n )\n );\n }\n this.componentRef.instance.areMentionsEnabled = this.areMentionsEnabled;\n this.componentRef.instance.mentionAutocompleteItemTemplate =\n this.mentionAutocompleteItemTemplate;\n this.componentRef.instance.mentionScope = this.mentionScope;\n this.componentRef.instance.value = this.value;\n }\n }\n if (changes.areMentionsEnabled) {\n this.componentRef.instance.areMentionsEnabled = this.areMentionsEnabled;\n }\n if (changes.mentionAutocompleteItemTemplate) {\n this.componentRef.instance.mentionAutocompleteItemTemplate =\n this.mentionAutocompleteItemTemplate;\n }\n if (changes.mentionScope) {\n this.componentRef.instance.mentionScope = this.mentionScope;\n }\n if (changes.value) {\n this.componentRef.instance.value = this.value;\n }\n // ngOnChanges not called for dynamic components since we don't use template binding\n let changesToPropagate = {};\n this.unpropagatedChanges.forEach(\n (c) => (changesToPropagate = { ...changesToPropagate, ...c })\n );\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.componentRef.instance.ngOnChanges(changesToPropagate);\n this.unpropagatedChanges = [];\n }\n}\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { MentionAutcompleteListItemContext } from '../types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MessageInputConfigService {\n isFileUploadEnabled: boolean | undefined = true;\n areMentionsEnabled: boolean | undefined = true;\n mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n acceptedFileTypes: string[] | undefined;\n isMultipleFileUploadEnabled: boolean | undefined = true;\n mentionScope: 'channel' | 'application' | undefined = 'channel';\n\n constructor() {}\n}\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AttachmentService } from '../attachment.service';\nimport { AttachmentUpload } from '../types';\n\n@Component({\n selector: 'stream-attachment-preview-list',\n templateUrl: './attachment-preview-list.component.html',\n styles: [],\n})\nexport class AttachmentPreviewListComponent {\n attachmentUploads$: Observable<AttachmentUpload[]>;\n\n constructor(private attachmentService: AttachmentService) {\n this.attachmentUploads$ = this.attachmentService.attachmentUploads$;\n }\n\n async retryAttachmentUpload(file: File) {\n await this.attachmentService.retryAttachmentUpload(file);\n }\n\n async deleteAttachment(upload: AttachmentUpload) {\n await this.attachmentService.deleteAttachment(upload);\n }\n\n trackByFile(_: number, item: AttachmentUpload) {\n return item.file;\n }\n}\n","<div class=\"rfu-image-previewer\">\n <ng-container\n *ngFor=\"\n let attachmentUpload of attachmentUploads$ | async;\n trackBy: trackByFile\n \"\n >\n <div\n *ngIf=\"attachmentUpload.type === 'image'\"\n class=\"rfu-image-previewer__image\"\n [class.rfu-image-previewer__image--loaded]=\"\n attachmentUpload.state === 'success'\n \"\n data-testclass=\"attachment-image-preview\"\n >\n <div\n *ngIf=\"attachmentUpload.state === 'error'\"\n class=\"rfu-image-previewer__retry\"\n (click)=\"retryAttachmentUpload(attachmentUpload.file)\"\n (keyup.enter)=\"retryAttachmentUpload(attachmentUpload.file)\"\n data-testclass=\"upload-error\"\n >\n <stream-icon icon=\"retry\"></stream-icon>\n </div>\n <div class=\"rfu-thumbnail__wrapper\" style=\"width: 100; height: 100\">\n <div class=\"rfu-thumbnail__overlay\">\n <div\n class=\"rfu-icon-button\"\n data-testclass=\"delete-attachment\"\n role=\"button\"\n (click)=\"deleteAttachment(attachmentUpload)\"\n (keyup.enter)=\"deleteAttachment(attachmentUpload)\"\n >\n <stream-icon icon=\"close\"></stream-icon>\n </div>\n </div>\n <img\n *ngIf=\"attachmentUpload.url || attachmentUpload.previewUri\"\n src=\"{{\n attachmentUpload.url\n ? attachmentUpload.url\n : attachmentUpload.previewUri\n }}\"\n alt=\"attachmentUpload.file.name\"\n class=\"rfu-thumbnail__image\"\n data-testclass=\"attachment-image\"\n />\n </div>\n <stream-loading-indicator\n data-testclass=\"loading-indicator\"\n color=\"rgba(255,255,255,0.7)\"\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n ></stream-loading-indicator>\n </div>\n <div\n class=\"rfu-file-previewer\"\n *ngIf=\"attachmentUpload.type === 'file'\"\n data-testclass=\"attachment-file-preview\"\n >\n <ol>\n <li\n class=\"rfu-file-previewer__file\"\n [class.rfu-file-previewer__file--uploading]=\"\n attachmentUpload.state === 'uploading'\n \"\n [class.rfu-file-previewer__file--failed]=\"\n attachmentUpload.state === 'error'\n \"\n >\n <stream-icon icon=\"file\"></stream-icon>\n\n <a\n data-testclass=\"file-download-link\"\n href=\"{{ attachmentUpload.url }}\"\n (click)=\"attachmentUpload.url ? null : $event.preventDefault()\"\n (keyup.enter)=\"\n attachmentUpload.url ? null : $event.preventDefault()\n \"\n download\n >\n {{ attachmentUpload.file.name }}\n <ng-container *ngIf=\"attachmentUpload.state === 'error'\">\n <div\n data-testclass=\"file-upload-retry\"\n class=\"rfu-file-previewer__failed\"\n (click)=\"retryAttachmentUpload(attachmentUpload.file)\"\n (keyup.enter)=\"retryAttachmentUpload(attachmentUpload.file)\"\n translate\n >\n streamChat.failed\n </div>\n <div\n class=\"rfu-file-previewer__retry\"\n (click)=\"retryAttachmentUpload(attachmentUpload.file)\"\n (keyup.enter)=\"retryAttachmentUpload(attachmentUpload.file)\"\n translate\n >\n streamChat.retry\n </div>\n </ng-container>\n </a>\n\n <span\n data-testclass=\"file-delete\"\n class=\"rfu-file-previewer__close-button\"\n (click)=\"deleteAttachment(attachmentUpload)\"\n (keyup.enter)=\"deleteAttachment(attachmentUpload)\"\n >\n ✘\n </span>\n <div\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n class=\"rfu-file-previewer__loading-indicator\"\n >\n <stream-loading-indicator></stream-loading-indicator>\n </div>\n </li>\n </ol>\n </div>\n </ng-container>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewChild,\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { UserResponse } from 'stream-chat';\nimport { AttachmentService } from '../attachment.service';\nimport { ChannelService } from '../channel.service';\nimport { textareaInjectionToken } from '../injection-tokens';\nimport { NotificationService } from '../notification.service';\nimport {\n AttachmentUpload,\n MentionAutcompleteListItemContext,\n StreamMessage,\n} from '../types';\nimport { MessageInputConfigService } from './message-input-config.service';\nimport { TextareaDirective } from './textarea.directive';\nimport { TextareaInterface } from './textarea.interface';\n\n@Component({\n selector: 'stream-message-input',\n templateUrl: './message-input.component.html',\n styles: [],\n providers: [AttachmentService],\n})\nexport class MessageInputComponent\n implements OnChanges, OnDestroy, AfterViewInit\n{\n @Input() isFileUploadEnabled: boolean | undefined;\n @Input() areMentionsEnabled: boolean | undefined;\n @Input() mentionScope: 'channel' | 'application' | undefined;\n @Input() mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n @Input() acceptedFileTypes: string[] | undefined;\n @Input() isMultipleFileUploadEnabled: boolean | undefined;\n @Input() message: StreamMessage | undefined;\n @Output() readonly messageUpdate = new EventEmitter<void>();\n isFileUploadAuthorized: boolean | undefined;\n canSendLinks: boolean | undefined;\n canSendMessages: boolean | undefined;\n attachmentUploads$: Observable<AttachmentUpload[]>;\n textareaValue = '';\n textareaRef: ComponentRef<TextareaInterface> | undefined;\n mentionedUsers: UserResponse[] = [];\n @ViewChild('fileInput') private fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild(TextareaDirective, { static: false })\n private textareaAnchor!: TextareaDirective;\n private subscriptions: Subscription[] = [];\n private hideNotification: Function | undefined;\n private isViewInited = false;\n\n constructor(\n private channelService: ChannelService,\n private notificationService: NotificationService,\n private attachmentService: AttachmentService,\n private configService: MessageInputConfigService,\n @Inject(textareaInjectionToken)\n private textareaType: Type<TextareaInterface>,\n private componentFactoryResolver: ComponentFactoryResolver,\n private cdRef: ChangeDetectorRef\n ) {\n this.subscriptions.push(\n this.attachmentService.attachmentUploadInProgressCounter$.subscribe(\n (counter) => {\n if (counter === 0 && this.hideNotification) {\n this.hideNotification();\n this.hideNotification = undefined;\n }\n }\n )\n );\n this.subscriptions.push(\n this.channelService.activeChannel$.subscribe((channel) => {\n this.textareaValue = '';\n this.attachmentService.resetAttachmentUploads();\n const capabilities = channel?.data?.own_capabilities as string[];\n if (capabilities) {\n this.isFileUploadAuthorized =\n capabilities.indexOf('upload-file') !== -1;\n this.canSendLinks = capabilities.indexOf('send-links') !== -1;\n this.canSendMessages = capabilities.indexOf('send-message') !== -1;\n if (this.isViewInited) {\n this.cdRef.detectChanges();\n this.initTextarea();\n }\n }\n })\n );\n this.attachmentUploads$ = this.attachmentService.attachmentUploads$;\n this.isFileUploadEnabled = this.configService.isFileUploadEnabled;\n this.acceptedFileTypes = this.configService.acceptedFileTypes;\n this.isMultipleFileUploadEnabled =\n this.configService.isMultipleFileUploadEnabled;\n this.areMentionsEnabled = this.configService.areMentionsEnabled;\n this.mentionAutocompleteItemTemplate =\n this.configService.mentionAutocompleteItemTemplate;\n this.mentionScope = this.configService.mentionScope;\n }\n\n ngAfterViewInit(): void {\n this.isViewInited = true;\n this.initTextarea();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.message) {\n this.attachmentService.resetAttachmentUploads();\n if (this.isUpdate) {\n this.attachmentService.createFromAttachments(\n this.message!.attachments || []\n );\n this.textareaValue = this.message!.text || '';\n }\n }\n if (changes.isFileUploadEnabled) {\n this.configService.isFileUploadEnabled = this.isFileUploadEnabled;\n }\n if (changes.acceptedFileTypes) {\n this.configService.acceptedFileTypes = this.acceptedFileTypes;\n }\n if (changes.isMultipleFileUploadEnabled) {\n this.configService.isMultipleFileUploadEnabled =\n this.isMultipleFileUploadEnabled;\n }\n if (changes.areMentionsEnabled) {\n this.configService.areMentionsEnabled = this.areMentionsEnabled;\n }\n if (changes.mentionAutocompleteItemTemplate) {\n this.configService.mentionAutocompleteItemTemplate =\n this.mentionAutocompleteItemTemplate;\n }\n if (changes.mentionScope) {\n this.configService.mentionScope = this.mentionScope;\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n async messageSent() {\n let attachmentUploadInProgressCounter!: number;\n this.attachmentService.attachmentUploadInProgressCounter$\n .pipe(first())\n .subscribe((counter) => (attachmentUploadInProgressCounter = counter));\n if (attachmentUploadInProgressCounter > 0) {\n if (!this.hideNotification) {\n this.hideNotification =\n this.notificationService.addPermanentNotification(\n 'streamChat.Wait until all attachments have uploaded'\n );\n }\n return;\n }\n const attachments = this.attachmentService.mapToAttachments();\n const text = this.textareaValue;\n if (!text && (!attachments || attachments.length === 0)) {\n return;\n }\n if (this.containsLinks && !this.canSendLinks) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Sending links is not allowed in this conversation'\n );\n return;\n }\n if (!this.isUpdate) {\n this.textareaValue = '';\n }\n try {\n await (this.isUpdate\n ? this.channelService.updateMessage({\n ...this.message!,\n text: text,\n attachments: attachments,\n })\n : this.channelService.sendMessage(\n text,\n attachments,\n this.mentionedUsers\n ));\n this.messageUpdate.emit();\n if (!this.isUpdate) {\n this.attachmentService.resetAttachmentUploads();\n }\n } catch (error) {\n if (this.isUpdate) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Edit message request failed'\n );\n }\n }\n }\n\n get containsLinks() {\n return /(?:(?:https?|ftp):\\/\\/)?[\\w/\\-?=%.]+\\.[\\w/\\-&?=%.]+/.test(\n this.textareaValue\n );\n }\n\n get accept() {\n return this.acceptedFileTypes ? this.acceptedFileTypes?.join(',') : '';\n }\n\n async filesSelected(fileList: FileList | null) {\n await this.attachmentService.filesSelected(fileList);\n this.clearFileInput();\n }\n\n private clearFileInput() {\n this.fileInput.nativeElement.value = '';\n }\n\n private get isUpdate() {\n return !!this.message;\n }\n\n private initTextarea() {\n if (!this.canSendMessages || this.textareaRef || !this.textareaAnchor) {\n return;\n }\n const componentFactory =\n this.componentFactoryResolver.resolveComponentFactory(this.textareaType);\n this.textareaRef =\n this.textareaAnchor.viewContainerRef.createComponent<any>(\n componentFactory\n );\n this.cdRef.detectChanges();\n }\n}\n","<div\n class=\"str-chat__input-flat\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n>\n <div class=\"str-chat__input-flat-wrapper\">\n <div class=\"str-chat__input-flat--textarea-wrapper\">\n <stream-attachment-preview-list\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n <div class=\"rta str-chat__textarea\">\n <ng-template\n *ngIf=\"canSendMessages; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionAutocompleteItemTemplate]=\"mentionAutocompleteItemTemplate\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"\n 'streamChat.You can\\'t send messages in this channel' | translate\n \"\n class=\"rta__textarea str-chat__textarea__textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"isFileUploadEnabled && isFileUploadAuthorized && canSendMessages\"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [accept]=\"accept\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon icon=\"file-upload\"></stream-icon>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon icon=\"send\"></stream-icon>\n </button>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\n@Component({\n selector: 'stream-modal',\n templateUrl: './modal.component.html',\n styles: [],\n})\nexport class ModalComponent implements OnChanges {\n @Input() isOpen = false;\n @Output() readonly isOpenChange = new EventEmitter<boolean>();\n @ViewChild('content') private content: ElementRef<HTMLElement> | undefined;\n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isOpen) {\n if (this.isOpen) {\n window.addEventListener('keyup', this.watchForEscPress);\n setTimeout(\n () => window.addEventListener('click', this.watchForOutsideClicks),\n 0\n );\n } else {\n this.stopWatchForOutsideClicks();\n this.stopWatchForEscPress();\n }\n }\n }\n\n close() {\n this.isOpen = false;\n this.isOpenChange.emit(false);\n this.stopWatchForOutsideClicks();\n this.stopWatchForEscPress();\n }\n\n private watchForEscPress = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.close();\n }\n };\n\n private stopWatchForEscPress = () => {\n window.removeEventListener('keyup', this.watchForEscPress);\n };\n\n private watchForOutsideClicks = (event: Event) => {\n if (!this.content?.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n };\n\n private stopWatchForOutsideClicks() {\n window.removeEventListener('click', this.watchForOutsideClicks);\n }\n}\n","<div\n data-testid=\"modal\"\n class=\"str-chat__modal str-chat__modal--{{ isOpen ? 'open' : 'close' }}\"\n>\n <div\n data-testid=\"close\"\n class=\"str-chat__modal__close-button\"\n (click)=\"close()\"\n (keyup.enter)=\"close()\"\n translate\n >\n streamChat.Close\n <stream-icon icon=\"close\"></stream-icon>\n </div>\n <div class=\"str-chat__modal__inner\" #content>\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { NotificationType } from '../notification.service';\n\n@Component({\n selector: 'stream-notification',\n templateUrl: './notification.component.html',\n styles: [],\n})\nexport class NotificationComponent {\n @Input() type: NotificationType | undefined;\n\n constructor() {}\n}\n","<div\n class=\"str-chat__custom-notification notification-{{ type }}\"\n data-testid=\"custom-notification\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n NotificationPayload,\n NotificationService,\n} from '../notification.service';\n\n@Component({\n selector: 'stream-notification-list',\n templateUrl: './notification-list.component.html',\n styles: [],\n})\nexport class NotificationListComponent {\n notifications$: Observable<NotificationPayload[]>;\n\n constructor(private notificationService: NotificationService) {\n this.notifications$ = this.notificationService.notifications$;\n }\n\n trackByItem(_: number, item: NotificationPayload) {\n return item;\n }\n}\n","<div class=\"str-chat__list-notifications\">\n <stream-notification\n *ngFor=\"let notification of notifications$ | async; trackBy: trackByItem\"\n [type]=\"notification.type\"\n ><div data-testclass=\"notification-content\" translate>\n {{ notification.text }}\n </div></stream-notification\n >\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { ChannelService } from '../channel.service';\nimport { ChatClientService } from '../chat-client.service';\nimport { MessageInputComponent } from '../message-input/message-input.component';\nimport { NotificationService } from '../notification.service';\nimport { StreamMessage } from '../types';\n\nexport type MessageActions =\n | 'edit'\n | 'delete'\n | 'edit-any'\n | 'delete-any'\n | 'pin'\n | 'quote'\n | 'flag'\n | 'mute';\n\n@Component({\n selector: 'stream-message-actions-box',\n templateUrl: './message-actions-box.component.html',\n styles: [],\n})\nexport class MessageActionsBoxComponent implements OnChanges {\n @Input() messageInputTemplate: TemplateRef<any> | undefined;\n @Input() isOpen = false;\n @Input() isMine = false;\n @Input() message: StreamMessage | undefined;\n @Input() enabledActions: MessageActions[] = [];\n @Output() readonly displayedActionsCount = new EventEmitter<number>();\n @Output() readonly isEditing = new EventEmitter<boolean>();\n isEditModalOpen = false;\n @ViewChild(MessageInputComponent) private messageInput:\n | MessageInputComponent\n | undefined;\n\n constructor(\n private chatClientService: ChatClientService,\n private notificationService: NotificationService,\n private channelService: ChannelService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isMine || changes.enabledActions) {\n let displayedActionsCount = 0;\n if (this.isQuoteVisible) {\n displayedActionsCount++;\n }\n if (this.isEditVisible) {\n displayedActionsCount++;\n }\n if (this.isDeleteVisible) {\n displayedActionsCount++;\n }\n if (this.isMuteVisible) {\n displayedActionsCount++;\n }\n if (this.isFlagVisible) {\n displayedActionsCount++;\n }\n if (this.isPinVisible) {\n displayedActionsCount++;\n }\n this.displayedActionsCount.next(displayedActionsCount);\n }\n }\n\n get isQuoteVisible() {\n return this.enabledActions.indexOf('quote') !== -1;\n }\n\n get isEditVisible() {\n return (\n (this.enabledActions.indexOf('edit') !== -1 && this.isMine) ||\n this.enabledActions.indexOf('edit-any') !== -1\n );\n }\n\n get isDeleteVisible() {\n return (\n (this.enabledActions.indexOf('delete') !== -1 && this.isMine) ||\n this.enabledActions.indexOf('delete-any') !== -1\n );\n }\n\n get isMuteVisible() {\n return this.enabledActions.indexOf('mute') !== -1;\n }\n\n get isFlagVisible() {\n return this.enabledActions.indexOf('flag') !== -1 && !this.isMine;\n }\n\n get isPinVisible() {\n return this.enabledActions.indexOf('pin') !== -1;\n }\n\n pinClicked() {\n alert('Feature not yet implemented');\n }\n\n async flagClicked() {\n try {\n await this.chatClientService.flagMessage(this.message!.id);\n this.notificationService.addTemporaryNotification(\n 'streamChat.Message has been successfully flagged',\n 'success'\n );\n } catch (err) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Error adding flag'\n );\n }\n }\n\n muteClicked() {\n alert('Feature not yet implemented');\n }\n\n quoteClicked() {\n alert('Feature not yet implemented');\n }\n\n editClicked() {\n this.isEditing.emit(true);\n this.isEditModalOpen = true;\n }\n\n sendClicked() {\n this.messageInput?.messageSent();\n }\n\n modalClosed = () => {\n this.isEditModalOpen = false;\n this.isEditing.emit(false);\n };\n\n async deleteClicked() {\n try {\n await this.channelService.deleteMessage(this.message!);\n } catch (error) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Error deleting message'\n );\n }\n }\n}\n","<div\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box\"\n [class.str-chat__message-actions-box--open]=\"isOpen\"\n [class.str-chat__message-actions-box--mine]=\"isMine\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <button\n data-testid=\"quote-action\"\n *ngIf=\"isQuoteVisible\"\n (click)=\"quoteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Reply\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"pin-action\"\n *ngIf=\"isPinVisible\"\n (click)=\"pinClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{\n (message?.pinned ? \"streamChat.Unpin\" : \"streamChat.Pin\") | translate\n }}\n </li>\n </button>\n <button\n data-testid=\"flag-action\"\n *ngIf=\"isFlagVisible\"\n (click)=\"flagClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Flag\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"mute-action\"\n *ngIf=\"isMuteVisible\"\n (click)=\"muteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Mute\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"edit-action\"\n *ngIf=\"isEditVisible\"\n (click)=\"editClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Edit Message\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"delete-action\"\n *ngIf=\"isDeleteVisible\"\n (click)=\"deleteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Delete\" | translate }}\n </li>\n </button>\n </ul>\n</div>\n\n<stream-modal\n [isOpen]=\"isEditModalOpen\"\n (isOpenChange)=\"\n isEditModalOpen = $event; isEditModalOpen ? '' : modalClosed()\n \"\n>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-container *ngIf=\"messageInputTemplate; else defaultInput\">\n <ng-container\n *ngTemplateOutlet=\"\n messageInputTemplate;\n context: {\n message: message,\n messageUpdateHandler: modalClosed\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultInput>\n <stream-message-input\n [message]=\"message\"\n (messageUpdate)=\"modalClosed()\"\n ></stream-message-input>\n </ng-template>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__message-team-form-footer\">\n <div></div>\n <div>\n <button translate data-testid=\"cancel-button\" (click)=\"modalClosed()\">\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</stream-modal>\n","import { Component } from '@angular/core';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { catchError, map, startWith } from 'rxjs/operators';\nimport { ChannelService } from '../channel.service';\n\n@Component({\n selector: 'stream-channel',\n templateUrl: './channel.component.html',\n styles: [],\n})\nexport class ChannelComponent {\n isError$: Observable<boolean>;\n isInitializing$: Observable<boolean>;\n subscriptions: Subscription[] = [];\n\n constructor(private channelService: ChannelService) {\n this.isError$ = this.channelService.channels$.pipe(\n map(() => false),\n catchError(() => of(true)),\n startWith(false)\n );\n this.isInitializing$ = this.channelService.channels$.pipe(\n map((channels) => !channels),\n catchError(() => of(false))\n );\n }\n}\n","<div\n *ngIf=\"(isError$ | async) === false && (isInitializing$ | async) === false\"\n class=\"str-chat str-chat-channel messaging\"\n>\n <div class=\"str-chat__container\">\n <div class=\"str-chat__main-panel\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","export type DeviceWidth = {\n device: 'mobile' | 'tablet' | 'full';\n width: number;\n};\n\nexport const getDeviceWidth = (): DeviceWidth => {\n const width = window.innerWidth;\n if (width < 768) return { device: 'mobile', width };\n if (width < 1024) return { device: 'tablet', width };\n return { device: 'full', width };\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, first } from 'rxjs/operators';\nimport { getDeviceWidth } from '../device-width';\n\n@Injectable({ providedIn: 'root' })\nexport class ChannelListToggleService {\n isOpen$: Observable<boolean>;\n private isOpenSubject = new BehaviorSubject<boolean>(false);\n private menuElement: HTMLElement | undefined;\n\n constructor() {\n this.isOpen$ = this.isOpenSubject\n .asObservable()\n .pipe(distinctUntilChanged());\n this.isOpen$.pipe(filter((s) => s)).subscribe(() => {\n if (getDeviceWidth().device === 'mobile') {\n this.watchForOutsideClicks();\n }\n });\n }\n\n open() {\n this.isOpenSubject.next(true);\n }\n\n close() {\n this.isOpenSubject.next(false);\n }\n\n toggle() {\n this.isOpenSubject.getValue() ? this.close() : this.open();\n }\n\n setMenuElement(element: HTMLElement | undefined) {\n this.menuElement = element;\n }\n\n channelSelected() {\n if (getDeviceWidth().device === 'mobile') {\n this.close();\n }\n }\n\n private watchForOutsideClicks() {\n if (!this.menuElement) {\n return;\n }\n const eventHandler = (event: Event) => {\n if (!this.menuElement!.contains(event.target as Node)) {\n this.close();\n window.removeEventListener('click', eventHandler);\n }\n };\n window.addEventListener('click', eventHandler);\n this.isOpen$\n .pipe(\n filter((s) => !s),\n first()\n )\n .subscribe(() => window.removeEventListener('click', eventHandler));\n }\n}\n","import { Component } from '@angular/core';\nimport { Channel } from 'stream-chat';\nimport { ChannelListToggleService } from '../channel-list/channel-list-toggle.service';\nimport { ChannelService } from '../channel.service';\n\n@Component({\n selector: 'stream-channel-header',\n templateUrl: './channel-header.component.html',\n styles: [],\n})\nexport class ChannelHeaderComponent {\n activeChannel: Channel | undefined;\n canReceiveConnectEvents: boolean | undefined;\n\n constructor(\n private channelService: ChannelService,\n private channelListToggleService: ChannelListToggleService\n ) {\n this.channelService.activeChannel$.subscribe((c) => {\n this.activeChannel = c;\n const capabilities = this.activeChannel?.data\n ?.own_capabilities as string[];\n if (!capabilities) {\n return;\n }\n this.canReceiveConnectEvents =\n capabilities.indexOf('connect-events') !== -1;\n });\n }\n\n toggleMenu(event: Event) {\n event.stopPropagation();\n this.channelListToggleService.toggle();\n }\n\n get memberCountParam() {\n return { memberCount: this.activeChannel?.data?.member_count || 0 };\n }\n\n get watcherCountParam() {\n return { watcherCount: this.activeChannel?.state?.watcher_count || 0 };\n }\n}\n","<div class=\"str-chat__header-livestream\">\n <div\n class=\"str-chat__header-hamburger\"\n (click)=\"toggleMenu($event)\"\n (keyup.enter)=\"toggleMenu($event)\"\n >\n <span class=\"str-chat__header-hamburger--line\"></span>\n <span class=\"str-chat__header-hamburger--line\"></span>\n <span class=\"str-chat__header-hamburger--line\"></span>\n </div>\n <stream-avatar\n imageUrl=\"{{ activeChannel?.data?.image }}\"\n name=\"{{ activeChannel?.data?.name }}\"\n ></stream-avatar>\n <div class=\"str-chat__header-livestream-left\">\n <p data-testid=\"name\" class=\"str-chat__header-livestream-left--title\">\n {{ activeChannel?.data?.name }}\n </p>\n <p data-testid=\"info\" class=\"str-chat__header-livestream-left--members\">\n {{'streamChat.{{ memberCount }} members' | translate:memberCountParam}}\n {{canReceiveConnectEvents ? ('streamChat.{{ watcherCount }} online' |\n translate:watcherCountParam) : ''}}\n </p>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport {\n Channel,\n Event,\n FormatMessageResponse,\n MessageResponse,\n} from 'stream-chat';\nimport { ChannelService } from '../channel.service';\n\n@Component({\n selector: 'stream-channel-preview',\n templateUrl: './channel-preview.component.html',\n styles: [],\n})\nexport class ChannelPreviewComponent implements OnInit, OnDestroy {\n @Input() channel: Channel | undefined;\n isActive = false;\n isUnread = false;\n latestMessage: string = 'Nothing yet...';\n private subscriptions: (Subscription | { unsubscribe: () => void })[] = [];\n private canSendReadEvents = true;\n\n constructor(private channelService: ChannelService) {}\n\n ngOnInit(): void {\n this.subscriptions.push(\n this.channelService.activeChannel$.subscribe(\n (activeChannel) =>\n (this.isActive = activeChannel?.id === this.channel?.id)\n )\n );\n const messages = this.channel?.state?.messages;\n if (messages && messages.length > 0) {\n this.setLatestMessage(messages[messages.length - 1]);\n }\n this.isUnread = !!this.channel!.countUnread() && this.canSendReadEvents;\n const capabilities =\n (this.channel?.data?.own_capabilities as string[]) || [];\n this.canSendReadEvents = capabilities.indexOf('read-events') !== -1;\n this.subscriptions.push(\n this.channel!.on('message.new', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on('message.updated', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on('message.deleted', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on('channel.truncated', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on(\n 'message.read',\n () =>\n (this.isUnread =\n !!this.channel!.countUnread() && this.canSendReadEvents)\n )\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n get avatarImage() {\n return this.channel?.data?.image;\n }\n\n get avatarName() {\n return this.channel?.data?.name;\n }\n\n get title() {\n return this.channel?.data?.name;\n }\n\n setAsActiveChannel(): void {\n void this.channelService.setAsActiveChannel(this.channel!);\n }\n\n private handleMessageEvent(event: Event) {\n if (this.channel?.state.messages.length === 0) {\n this.latestMessage = 'Nothing yet...';\n return;\n }\n if (\n !event.message ||\n this.channel?.state.messages[this.channel?.state.messages.length - 1]\n .id !== event.message.id\n ) {\n return;\n }\n this.setLatestMessage(event.message);\n this.isUnread = !!this.channel.countUnread() && this.canSendReadEvents;\n }\n\n private setLatestMessage(message?: FormatMessageResponse | MessageResponse) {\n if (message?.deleted_at) {\n this.latestMessage = 'streamChat.Message deleted';\n } else if (message?.text) {\n this.latestMessage = message.text;\n } else if (message?.attachments && message.attachments.length) {\n this.latestMessage = 'streamChat.🏙 Attachment...';\n }\n }\n}\n","<button\n class=\"str-chat__channel-preview-messenger\"\n [class.str-chat__channel-preview-messenger--active]=\"isActive\"\n [class.str-chat__channel-preview-messenger--unread]=\"isUnread\"\n (click)=\"setAsActiveChannel()\"\n data-testid=\"channel-preview-container\"\n>\n <div class=\"str-chat__channel-preview-messenger--left\">\n <stream-avatar\n imageUrl=\"{{ avatarImage }}\"\n name=\"{{ avatarName }}\"\n [size]=\"40\"\n ></stream-avatar>\n </div>\n <div class=\"str-chat__channel-preview-messenger--right\">\n <div class=\"str-chat__channel-preview-messenger--name\">\n <span data-testid=\"channel-preview-title\">{{ title }}</span>\n </div>\n <div\n data-testid=\"latest-message\"\n class=\"str-chat__channel-preview-messenger--last-message\"\n >\n {{ latestMessage | translate }}\n </div>\n </div>\n</button>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, startWith } from 'rxjs/operators';\nimport { Channel } from 'stream-chat';\nimport { ChannelService } from '../channel.service';\nimport { ChannelListToggleService } from './channel-list-toggle.service';\n\n@Component({\n selector: 'stream-channel-list',\n templateUrl: './channel-list.component.html',\n styles: [],\n})\nexport class ChannelListComponent implements AfterViewInit {\n @Input() customChannelPreviewTemplate: TemplateRef<any> | undefined;\n channels$: Observable<Channel[] | undefined>;\n isError$: Observable<boolean>;\n isInitializing$: Observable<boolean>;\n isLoadingMoreChannels = false;\n isOpen$: Observable<boolean>;\n hasMoreChannels$: Observable<boolean>;\n @ViewChild('container') private container!: ElementRef<HTMLElement>;\n\n constructor(\n private channelService: ChannelService,\n private channelListToggleService: ChannelListToggleService\n ) {\n this.isOpen$ = this.channelListToggleService.isOpen$;\n this.channels$ = this.channelService.channels$;\n this.hasMoreChannels$ = this.channelService.hasMoreChannels$;\n this.isError$ = this.channels$.pipe(\n map(() => false),\n catchError(() => of(true)),\n startWith(false)\n );\n this.isInitializing$ = this.channels$.pipe(\n map((channels) => !channels),\n catchError(() => of(false))\n );\n }\n ngAfterViewInit(): void {\n this.channelListToggleService.setMenuElement(this.container.nativeElement);\n }\n\n async loadMoreChannels() {\n this.isLoadingMoreChannels = true;\n await this.channelService.loadMoreChannels();\n this.isLoadingMoreChannels = false;\n }\n\n trackByChannelId(index: number, item: Channel) {\n return item.cid;\n }\n\n channelSelected() {\n this.channelListToggleService.channelSelected();\n }\n}\n","<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-channel-list messaging\"\n [class.str-chat-channel-list--open]=\"(isOpen$ | async) === true\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div class=\"str-chat__channel-list-messenger__main\">\n <p\n data-testid=\"empty-channel-list-indicator\"\n *ngIf=\"!(channels$ | async)?.length\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <ng-container\n *ngFor=\"let channel of channels$ | async; trackBy: trackByChannelId\"\n >\n <ng-container\n *ngIf=\"customChannelPreviewTemplate; else defaultTemplate\"\n >\n <div (click)=\"channelSelected()\" (keyup.enter)=\"channelSelected()\">\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate;\n context: { channel: channel }\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-template #defaultTemplate>\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channel\"\n (click)=\"channelSelected()\"\n (keyup.enter)=\"channelSelected()\"\n ></stream-channel-preview>\n </ng-template>\n </ng-container>\n <div\n *ngIf=\"hasMoreChannels$ | async\"\n class=\"str-chat__load-more-button\"\n (click)=\"loadMoreChannels()\"\n (keyup.enter)=\"loadMoreChannels()\"\n data-testid=\"load-more\"\n >\n <button\n class=\"str-chat__load-more-button__button\"\n data-testid=\"load-more-button\"\n [disabled]=\"isLoadingMoreChannels\"\n >\n <span *ngIf=\"!isLoadingMoreChannels; else loadingIndicator\">{{\n \"Load more\" | translate\n }}</span>\n <ng-template #loadingIndicator\n ><stream-loading-indicator></stream-loading-indicator\n ></ng-template>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n <div class=\"str-chat__down-main\">\n <stream-icon icon=\"connection-error\"></stream-icon>\n <h1>{{ \"streamChat.Connection error\" | translate }}</h1>\n <h3>\n {{\n \"streamChat.Error connecting to chat, refresh the page to try again.\"\n | translate\n }}\n </h3>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div data-testid=\"loading-indicator\" class=\"str-chat__loading-channels\">\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div class=\"str-chat__loading-channels-item\">\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div class=\"str-chat__loading-channels-meta\">\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n","import Dayjs from 'dayjs';\nimport calendar from 'dayjs/plugin/calendar';\n\nDayjs.extend(calendar);\n\nexport const parseDate = (date: Date) => {\n const parsedTime = Dayjs(date);\n\n return parsedTime.calendar();\n};\n","import { UserResponse } from 'stream-chat';\n\nexport const getReadByText = (users: UserResponse[]) => {\n let outStr = '';\n\n const slicedArr = users.map((item) => item.name || item.id).slice(0, 5);\n const restLength = users.length - slicedArr.length;\n\n if (slicedArr.length === 1) {\n outStr = `${slicedArr[0]} `;\n } else if (slicedArr.length === 2) {\n // joins all with \"and\" but =no commas\n // example: \"bob and sam\"\n outStr = `${slicedArr[0]} and ${slicedArr[1]}`;\n } else if (slicedArr.length > 2) {\n // joins all with commas, but last one gets \", and\" (oxford comma!)\n // example: \"bob, joe, sam and 4 more\"\n if (restLength === 0) {\n // mutate slicedArr to remove last user to display it separately\n const lastUser = slicedArr.splice(slicedArr.length - 2, 1)[0];\n const commaSeparatedUsers = slicedArr.join(', ');\n outStr = `${commaSeparatedUsers}, and ${lastUser}`;\n } else {\n const commaSeparatedUsers = slicedArr.join(', ');\n outStr = `${commaSeparatedUsers} and ${restLength} more`;\n }\n }\n\n return outStr;\n};\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ReactionResponse } from 'stream-chat';\nimport { ChannelService } from '../channel.service';\nimport { DefaultReactionType, DefaultUserType } from '../types';\n\nexport type MessageReactionType =\n | 'angry'\n | 'haha'\n | 'like'\n | 'love'\n | 'sad'\n | 'wow';\n\nconst emojiReactionsMapping: { [key in MessageReactionType]: string } = {\n like: '👍',\n angry: '😠',\n love: '❤️',\n haha: '😂',\n wow: '😮',\n sad: '😞',\n};\n@Component({\n selector: 'stream-message-reactions',\n templateUrl: './message-reactions.component.html',\n styles: ['.emoji {position: relative; display: inline-block; }'],\n})\nexport class MessageReactionsComponent implements AfterViewChecked, OnChanges {\n @Input() messageId: string | undefined;\n @Input() messageReactionCounts: { [key in MessageReactionType]?: number } =\n {};\n @Input() isSelectorOpen: boolean = false;\n @Output() readonly isSelectorOpenChange = new EventEmitter<boolean>();\n @Input() latestReactions: ReactionResponse<\n DefaultReactionType,\n DefaultUserType\n >[] = [];\n @Input() ownReactions: ReactionResponse<\n DefaultReactionType,\n DefaultUserType\n >[] = [];\n tooltipPositions: { arrow: number; tooltip: number } | undefined;\n tooltipText: string | undefined;\n @ViewChild('selectorContainer') private selectorContainer:\n | ElementRef<HTMLElement>\n | undefined;\n @ViewChild('selectorTooltip') private selectorTooltip:\n | ElementRef<HTMLElement>\n | undefined;\n currentTooltipTarget: HTMLElement | undefined;\n\n constructor(\n private cdRef: ChangeDetectorRef,\n private channelService: ChannelService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isSelectorOpen) {\n this.isSelectorOpen\n ? setTimeout(() => this.watchForOutsideClicks()) // setTimeout: wait for current click to bubble up, and only watch for clicks after that\n : this.stopWatchForOutsideClicks();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.tooltipText && !this.tooltipPositions) {\n this.setTooltipPosition();\n this.cdRef.detectChanges();\n }\n }\n\n get existingReactions(): MessageReactionType[] {\n return Object.keys(this.messageReactionCounts).filter(\n (k) => this.messageReactionCounts[k as MessageReactionType]! > 0\n ) as MessageReactionType[];\n }\n\n get reactionsCount() {\n return Object.values(this.messageReactionCounts).reduce(\n (total, count) => total + count,\n 0\n );\n }\n\n get reactionOptions(): MessageReactionType[] {\n return ['like', 'love', 'haha', 'wow', 'sad', 'angry'];\n }\n\n getLatestUserByReaction(reactionType: MessageReactionType) {\n return this.latestReactions.find((r) => r.type === reactionType && r.user)\n ?.user;\n }\n\n getEmojiByReaction(reactionType: MessageReactionType) {\n return emojiReactionsMapping[reactionType];\n }\n\n getUsersByReaction(reactionType: MessageReactionType) {\n return this.latestReactions\n .filter((r) => r.type === reactionType)\n .map((r) => r.user?.name || r.user?.id)\n .filter((i) => !!i)\n .join(', ');\n }\n\n showTooltip(event: Event, reactionType: MessageReactionType) {\n this.currentTooltipTarget = event.target as HTMLElement;\n this.tooltipText = this.getUsersByReaction(reactionType);\n }\n\n hideTooltip() {\n this.tooltipText = undefined;\n this.currentTooltipTarget = undefined;\n this.tooltipPositions = undefined;\n }\n\n trackByMessageReaction(index: number, item: MessageReactionType) {\n return item;\n }\n\n react(type: MessageReactionType) {\n this.ownReactions.find((r) => r.type === type)\n ? void this.channelService.removeReaction(this.messageId!, type)\n : void this.channelService.addReaction(this.messageId!, type);\n }\n\n private eventHandler = (event: Event) => {\n if (!this.selectorContainer?.nativeElement.contains(event.target as Node)) {\n this.isSelectorOpenChange.emit(false);\n }\n };\n\n private watchForOutsideClicks() {\n window.addEventListener('click', this.eventHandler);\n }\n\n private stopWatchForOutsideClicks() {\n window.removeEventListener('click', this.eventHandler);\n }\n\n private setTooltipPosition() {\n const tooltip = this.selectorTooltip?.nativeElement.getBoundingClientRect();\n const target = this.currentTooltipTarget?.getBoundingClientRect();\n\n const container =\n this.selectorContainer?.nativeElement.getBoundingClientRect();\n\n if (!tooltip || !target || !container) return;\n\n const tooltipPosition =\n tooltip.width === container.width || tooltip.x < container.x\n ? 0\n : target.left + target.width / 2 - container.left - tooltip.width / 2;\n\n const arrowPosition =\n target.x - tooltip.x + target.width / 2 - tooltipPosition;\n\n this.tooltipPositions = {\n tooltip: tooltipPosition,\n arrow: arrowPosition,\n };\n }\n}\n","<div\n *ngIf=\"existingReactions.length > 0 && !isSelectorOpen\"\n class=\"str-chat__reaction-list\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n data-testid=\"reaction-list\"\n>\n <ul>\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji\"\n >\n <span class=\"emoji\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n &nbsp;\n </li>\n <li>\n <span\n data-testid=\"reactions-count\"\n class=\"str-chat__reaction-list--counter\"\n >{{ reactionsCount }}</span\n >\n </li>\n </ul>\n</div>\n\n<div\n #selectorContainer\n class=\"str-chat__reaction-selector\"\n *ngIf=\"isSelectorOpen\"\n data-testid=\"reaction-selector\"\n>\n <div\n *ngIf=\"tooltipText\"\n data-testid=\"tooltip\"\n #selectorTooltip\n class=\"str-chat__reaction-selector-tooltip\"\n [ngStyle]=\"{\n left: tooltipPositions?.tooltip + 'px',\n visibility: tooltipPositions ? 'visible' : 'hidden'\n }\"\n >\n <div\n class=\"arrow\"\n [ngStyle]=\"{ left: tooltipPositions?.arrow + 'px' }\"\n ></div>\n <span class=\"latest-user-username\">\n {{ tooltipText }}\n </span>\n </div>\n <ul class=\"str-chat__message-reactions-list\">\n <li\n class=\"str-chat__message-reactions-list-item\"\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji-option\"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <div\n *ngIf=\"getLatestUserByReaction(reactionType) as user\"\n class=\"latest-user\"\n (click)=\"hideTooltip()\"\n (keyup.enter)=\"hideTooltip()\"\n (mouseenter)=\"showTooltip($event, reactionType)\"\n (mouseleave)=\"hideTooltip()\"\n attr.data-testid=\"{{ reactionType }}-last-user\"\n >\n <stream-avatar\n attr.data-testid=\"{{ reactionType }}-avatar\"\n [imageUrl]=\"user.image\"\n [name]=\"user.name || user.id\"\n [size]=\"20\"\n ></stream-avatar>\n </div>\n <span class=\"emoji\" style=\"width: 20px; height: 20px; top: 10px\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n <span\n *ngIf=\"\n messageReactionCounts[reactionType] &&\n messageReactionCounts[reactionType]! > 0\n \"\n class=\"str-chat__message-reactions-list-item__count\"\n attr.data-testid=\"{{ reactionType }}-reaction-count\"\n >\n {{ messageReactionCounts[reactionType] }}\n </span>\n </li>\n </ul>\n</div>\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ImageLoadService {\n imageLoad$ = new Subject<void>();\n\n constructor() {}\n}\n","import { Component, Input, OnChanges } from '@angular/core';\nimport { Attachment } from 'stream-chat';\nimport { ImageLoadService } from '../message-list/image-load.service';\nimport { DefaultAttachmentType } from '../types';\nimport prettybytes from 'pretty-bytes';\nimport { isImageAttachment } from '../is-image-attachment';\n\n@Component({\n selector: 'stream-attachment-list',\n templateUrl: './attachment-list.component.html',\n styles: [],\n})\nexport class AttachmentListComponent implements OnChanges {\n @Input() attachments: Attachment<DefaultAttachmentType>[] = [];\n orderedAttachments: Attachment<DefaultAttachmentType>[] = [];\n\n constructor(private imageLoadService: ImageLoadService) {}\n\n ngOnChanges(): void {\n this.orderedAttachments = [\n ...this.attachments.filter((a) => this.isImage(a)),\n ...this.attachments.filter((a) => this.isFile(a)),\n ...this.attachments.filter((a) => this.isCard(a)),\n ];\n }\n\n trackById(index: number) {\n return index;\n }\n\n isImage(attachment: Attachment) {\n return isImageAttachment(attachment);\n }\n\n isFile(attachment: Attachment) {\n return attachment.type === 'file';\n }\n\n isCard(attachment: Attachment) {\n return (\n !attachment.type ||\n (attachment.type === 'image' && !this.isImage(attachment))\n );\n }\n\n imageLoaded() {\n this.imageLoadService.imageLoad$.next();\n }\n\n hasFileSize(attachment: Attachment<DefaultAttachmentType>) {\n return (\n attachment.file_size && Number.isFinite(Number(attachment.file_size))\n );\n }\n\n getFileSize(attachment: Attachment<DefaultAttachmentType>) {\n return prettybytes(attachment.file_size!);\n }\n\n trimUrl(url?: string | null) {\n if (url !== undefined && url !== null) {\n const [trimmedUrl] = url\n .replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, '')\n .split('/');\n\n return trimmedUrl;\n }\n return null;\n }\n}\n","<ng-container *ngFor=\"let attachment of orderedAttachments; trackBy: trackById\">\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }}\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n >\n <img\n *ngIf=\"isImage(attachment)\"\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"attachment.img_url || attachment.thumb_url || attachment.image_url\"\n [alt]=\"attachment?.fallback\"\n (load)=\"imageLoaded()\"\n />\n <div\n *ngIf=\"isFile(attachment)\"\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n >\n <stream-icon icon=\"file\" [size]=\"30\"></stream-icon>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <a\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n {{ attachment.title }}\n </a>\n <span data-testclass=\"size\" *ngIf=\"hasFileSize(attachment)\">{{\n getFileSize(attachment)\n }}</span>\n </div>\n </div>\n <div\n *ngIf=\"isCard(attachment)\"\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachment.type\n }}\"\n >\n <div\n *ngIf=\"attachment.image_url || attachment.thumb_url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachment.image_url || attachment.thumb_url }}\"\n src=\"{{ attachment.image_url || attachment.thumb_url }}\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachment.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachment.title }}\n </div>\n <div\n *ngIf=\"attachment.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachment.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"attachment.title_link || attachment.og_scrape_url\"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{ attachment.title_link || attachment.og_scrape_url }}\"\n target=\"_blank\"\n >\n {{ trimUrl(attachment.title_link || attachment.og_scrape_url) }}\n </a>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Input,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { UserResponse } from 'stream-chat';\nimport { ChannelService } from '../channel.service';\nimport { ChatClientService } from '../chat-client.service';\nimport { getDeviceWidth } from '../device-width';\nimport { MessageActions } from '../message-actions-box/message-actions-box.component';\nimport { DefaultUserType, StreamMessage } from '../types';\nimport { parseDate } from './parse-date';\nimport { getReadByText } from './read-by-text';\n\n@Component({\n selector: 'stream-message',\n templateUrl: './message.component.html',\n styles: [],\n})\nexport class MessageComponent implements OnChanges {\n @Input() messageInputTemplate: TemplateRef<any> | undefined;\n @Input() mentionTemplate: TemplateRef<any> | undefined;\n @Input() message: StreamMessage | undefined;\n @Input() enabledMessageActions: MessageActions[] = [];\n @Input() areReactionsEnabled: boolean | undefined;\n @Input() canReactToMessage: boolean | undefined;\n @Input() isLastSentMessage: boolean | undefined;\n @Input() canReceiveReadEvents: boolean | undefined;\n isEditing: boolean | undefined;\n isActionBoxOpen = false;\n isReactionSelectorOpen = false;\n isPressedOnMobile = false;\n visibleMessageActionsCount = 0;\n messageTextParts: {\n content: string;\n type: 'text' | 'mention';\n user?: UserResponse;\n }[] = [];\n private user: UserResponse<DefaultUserType> | undefined;\n @ViewChild('container') private container:\n | ElementRef<HTMLElement>\n | undefined;\n\n constructor(\n private chatClientService: ChatClientService,\n private channelService: ChannelService\n ) {\n this.user = this.chatClientService.chatClient.user;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.message) {\n let content = this.message?.html || this.message?.text;\n if (!content) {\n this.messageTextParts = [];\n } else {\n // Backend will wrap HTML content with <p></p>\\n\n if (content.startsWith('<p>')) {\n content = content.replace('<p>', '');\n }\n if (content.endsWith('</p>\\n')) {\n content = content.replace('</p>\\n', '');\n }\n if (\n !this.message!.mentioned_users ||\n this.message!.mentioned_users.length === 0\n ) {\n this.messageTextParts = [{ content, type: 'text' }];\n } else {\n this.messageTextParts = [];\n let text = content;\n this.message!.mentioned_users.forEach((user) => {\n const mention = `@${user.name || user.id}`;\n const precedingText = text.substring(0, text.indexOf(mention));\n this.messageTextParts.push({\n content: precedingText,\n type: 'text',\n });\n this.messageTextParts.push({\n content: mention,\n type: 'mention',\n user,\n });\n text = text.replace(precedingText + mention, '');\n });\n if (text) {\n this.messageTextParts.push({ content: text, type: 'text' });\n }\n }\n }\n }\n }\n\n get isSentByCurrentUser() {\n return this.message?.user?.id === this.user?.id;\n }\n\n get readByText() {\n return getReadByText(this.message!.readBy);\n }\n\n get lastReadUser() {\n return this.message?.readBy.filter((u) => u.id !== this.user?.id)[0];\n }\n\n get isOnlyReadByMe() {\n return this.message && this.message.readBy.length === 0;\n }\n\n get isReadByMultipleUsers() {\n return this.message && this.message.readBy.length > 1;\n }\n\n get isMessageDeliveredAndRead() {\n return (\n this.message &&\n this.message.readBy &&\n this.message.status === 'received' &&\n this.message.readBy.length > 0\n );\n }\n\n get parsedDate() {\n if (!this.message || !this.message?.created_at) {\n return;\n }\n return parseDate(this.message.created_at);\n }\n\n get areOptionsVisible() {\n if (!this.message) {\n return false;\n }\n return !(\n !this.message.type ||\n this.message.type === 'error' ||\n this.message.type === 'system' ||\n this.message.type === 'ephemeral' ||\n this.message.status === 'failed' ||\n this.message.status === 'sending'\n );\n }\n\n get hasAttachment() {\n return !!this.message?.attachments && !!this.message.attachments.length;\n }\n\n get hasReactions() {\n return (\n !!this.message?.reaction_counts &&\n Object.keys(this.message.reaction_counts).length > 0\n );\n }\n\n resendMessage() {\n void this.channelService.resendMessage(this.message!);\n }\n\n textClicked() {\n if (getDeviceWidth().device !== 'mobile') {\n this.isPressedOnMobile = false;\n return;\n }\n if (this.isPressedOnMobile) {\n return;\n }\n this.isPressedOnMobile = true;\n const eventHandler = (event: Event) => {\n if (!this.container?.nativeElement.contains(event.target as Node)) {\n this.isPressedOnMobile = false;\n window.removeEventListener('click', eventHandler);\n }\n };\n window.addEventListener('click', eventHandler);\n }\n}\n","<div\n #container\n class=\"str-chat__message-simple str-chat__message str-chat__message--{{\n message?.type\n }} str-chat__message--{{ message?.status }} {{\n message?.text ? 'str-chat__message--has-text' : 'has-no-text'\n }}\"\n [class.str-chat__message--me]=\"isSentByCurrentUser\"\n [class.str-chat__message-simple--me]=\"isSentByCurrentUser\"\n [class.mobile-press]=\"isPressedOnMobile\"\n [class.str-chat__message--has-attachment]=\"hasAttachment\"\n [class.str-chat__message--with-reactions]=\"\n areReactionsEnabled && hasReactions\n \"\n data-testid=\"message-container\"\n>\n <ng-container *ngIf=\"!message?.deleted_at; else deletedMessage\">\n <ng-container *ngIf=\"message?.type !== 'system'; else systemMessage\">\n <ng-container\n *ngIf=\"\n isSentByCurrentUser &&\n ((isLastSentMessage && message?.status === 'received') ||\n message?.status === 'sending')\n \"\n >\n <ng-container *ngIf=\"message?.status === 'sending'; else sentStatus\">\n <ng-container *ngTemplateOutlet=\"sendingStatus\"></ng-container>\n </ng-container>\n <ng-template #sentStatus>\n <ng-container\n *ngIf=\"\n isMessageDeliveredAndRead && canReceiveReadEvents;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <stream-avatar\n data-testid=\"avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"message?.user?.image\"\n [name]=\"message?.user?.name || message?.user?.id\"\n ></stream-avatar>\n <div class=\"str-chat__message-inner\">\n <div\n class=\"str-chat__message-simple__actions\"\n data-testid=\"message-options\"\n *ngIf=\"areOptionsVisible\"\n >\n <div\n data-testid=\"message-actions-container\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--options\n \"\n [class.str-chat-angular__message-simple__actions__action--options--editing]=\"\n isEditing\n \"\n >\n <stream-message-actions-box\n [isOpen]=\"isActionBoxOpen\"\n [isMine]=\"isSentByCurrentUser\"\n [enabledActions]=\"enabledMessageActions\"\n [message]=\"message\"\n (displayedActionsCount)=\"visibleMessageActionsCount = $event\"\n (isEditing)=\"isEditing = $event; isActionBoxOpen = !isEditing\"\n [messageInputTemplate]=\"messageInputTemplate\"\n ></stream-message-actions-box>\n <stream-icon\n *ngIf=\"visibleMessageActionsCount > 0\"\n data-testid=\"action-icon\"\n icon=\"action-icon\"\n (keyup.enter)=\"isActionBoxOpen = !isActionBoxOpen\"\n (click)=\"isActionBoxOpen = !isActionBoxOpen\"\n ></stream-icon>\n </div>\n <div\n *ngIf=\"areReactionsEnabled && canReactToMessage\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--reactions\n \"\n data-testid=\"reaction-icon\"\n (click)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n (keyup.enter)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n >\n <stream-icon icon=\"reaction-icon\"></stream-icon>\n </div>\n </div>\n <stream-message-reactions\n *ngIf=\"areReactionsEnabled\"\n [messageReactionCounts]=\"message?.reaction_counts || {}\"\n [latestReactions]=\"message?.latest_reactions || []\"\n [(isSelectorOpen)]=\"isReactionSelectorOpen\"\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n ></stream-message-reactions>\n <stream-attachment-list\n *ngIf=\"hasAttachment\"\n [attachments]=\"message!.attachments!\"\n ></stream-attachment-list>\n <div class=\"str-chat__message-text\" *ngIf=\"message?.text\">\n <div\n data-testid=\"inner-message\"\n class=\"\n str-chat__message-text-inner str-chat__message-simple-text-inner\n \"\n [class.str-chat__message-light-text-inner--has-attachment]=\"\n hasAttachment\n \"\n (click)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n (keyup.enter)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n >\n <div\n data-testid=\"client-error-message\"\n *ngIf=\"message?.type === 'error'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{ \"streamChat.Error · Unsent\" | translate }}\n </div>\n <div\n data-testid=\"error-message\"\n *ngIf=\"message?.status === 'failed'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{\n (message?.errorStatusCode === 403\n ? \"streamChat.Message Failed · Unauthorized\"\n : \"streamChat.Message Failed · Click to try again\"\n ) | translate\n }}\n </div>\n <div\n (click)=\"textClicked()\"\n (keyup.enter)=\"textClicked()\"\n data-testid=\"text\"\n >\n <p>\n <!-- eslint-disable-next-line @angular-eslint/template/use-track-by-function -->\n <ng-container *ngFor=\"let part of messageTextParts\">\n <span\n *ngIf=\"part.type === 'text'; else mention\"\n [innerHTML]=\"part.content\"\n ></span>\n <ng-template #mention>\n <ng-container *ngIf=\"mentionTemplate; else defaultMention\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionTemplate;\n context: { user: part.user! }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultMention>\n <b>{{ part.content }}</b>\n </ng-template>\n </ng-template>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"str-chat__message-data str-chat__message-simple-data\">\n <span\n data-testid=\"sender\"\n *ngIf=\"!isSentByCurrentUser\"\n class=\"str-chat__message-simple-name\"\n >\n {{ message?.user?.name ? message?.user?.name : message?.user?.id }}\n </span>\n <span data-testid=\"date\" class=\"str-chat__message-simple-timestamp\">\n {{ parsedDate }}\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #sendingStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"sending-indicator\">\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n <stream-loading-indicator\n data-testid=\"loading-indicator\"\n ></stream-loading-indicator>\n </span>\n</ng-template>\n<ng-template #readStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"read-indicator\">\n <div class=\"str-chat__tooltip\" data-testid=\"read-by-tooltip\">\n {{ readByText }}\n </div>\n <stream-avatar\n class=\"str-chat-angular__avatar-host\"\n data-test-id=\"last-read-user-avatar\"\n [size]=\"15\"\n [imageUrl]=\"lastReadUser?.image\"\n [name]=\"lastReadUser?.name || lastReadUser?.id\"\n ></stream-avatar>\n <span\n data-test-id=\"read-by-length\"\n *ngIf=\"isReadByMultipleUsers\"\n class=\"str-chat__message-simple-status-number\"\n >\n {{ (message?.readBy)!.length }}\n </span>\n </span>\n</ng-template>\n<ng-template #deliveredStatus>\n <span\n class=\"str-chat__message-simple-status\"\n data-testid=\"delivered-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n <stream-icon\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon>\n </span>\n</ng-template>\n\n<ng-template #deletedMessage>\n <div data-testid=\"message-deleted-component\">\n <div class=\"str-chat__message--deleted-inner\" translate>\n streamChat.This message was deleted...\n </div>\n </div>\n</ng-template>\n\n<ng-template #systemMessage>\n <div data-testid=\"system-message\" class=\"str-chat__message--system\">\n <div class=\"str-chat__message--system__text\">\n <div class=\"str-chat__message--system__line\"></div>\n <p>{{ message?.text }}</p>\n <div class=\"str-chat__message--system__line\"></div>\n </div>\n <div class=\"str-chat__message--system__date\">\n {{ parsedDate }}\n </div>\n </div>\n</ng-template>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { TextareaInterface } from '../textarea.interface';\n\n@Component({\n selector: 'stream-textarea',\n templateUrl: './textarea.component.html',\n styles: [],\n})\nexport class TextareaComponent implements TextareaInterface, OnChanges {\n @HostBinding() class = 'str-chat__textarea';\n @Input() value = '';\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly send = new EventEmitter<void>();\n @ViewChild('input') private messageInput!: ElementRef<HTMLInputElement>;\n\n constructor() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n ngOnChanges(): void {}\n\n inputChanged() {\n this.valueChange.emit(this.messageInput.nativeElement.value);\n }\n\n sent(event: Event) {\n event.preventDefault();\n this.send.next();\n }\n}\n","<textarea\n [value]=\"value || ''\"\n autofocus\n data-testid=\"textarea\"\n #input\n placeholder=\"{{ 'streamChat.Type your message' | translate }}\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n rows=\"1\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"sent($event)\"\n></textarea>\n","import { Injectable } from '@angular/core';\nimport transliterate from '@stream-io/transliterate';\n\n@Injectable({ providedIn: 'root' })\nexport class TransliterationService {\n constructor() {}\n\n transliterate(s: string) {\n return transliterate(s);\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { MentionConfig, Mentions } from 'angular-mentions';\nimport {\n MentionAutcompleteListItemContext,\n MentionAutcompleteListItem,\n} from '../../types';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { UserResponse } from 'stream-chat';\nimport { ChannelService } from '../../channel.service';\nimport { TextareaInterface } from '../textarea.interface';\nimport { ChatClientService } from '../../chat-client.service';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { TransliterationService } from '../../transliteration.service';\n\n@Component({\n selector: 'stream-autocomplete-textarea',\n templateUrl: './autocomplete-textarea.component.html',\n styles: [],\n})\nexport class AutocompleteTextareaComponent\n implements TextareaInterface, OnChanges\n{\n @HostBinding() class = 'str-chat__textarea';\n @Input() value = '';\n @Input() areMentionsEnabled: boolean | undefined = true;\n @Input() mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n @Input() mentionScope: 'channel' | 'application' = 'channel';\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly send = new EventEmitter<void>();\n @Output() readonly userMentions = new EventEmitter<UserResponse[]>();\n private readonly labelKey = 'autocompleteLabel';\n private readonly triggerChar = '@';\n autocompleteConfig: MentionConfig = {\n mentions: [],\n };\n @ViewChild('input') private messageInput!: ElementRef<HTMLInputElement>;\n private subscriptions: Subscription[] = [];\n private mentionedUsers: UserResponse[] = [];\n private userMentionConfig: Mentions = {\n triggerChar: this.triggerChar,\n dropUp: true,\n labelKey: this.labelKey,\n returnTrigger: true,\n mentionFilter: (\n searchString: string,\n items: { autocompleteLabel: string }[]\n ) => this.filter(searchString, items),\n mentionSelect: (item, triggerChar) => this.mentioned(item, triggerChar),\n };\n private searchTerm$ = new BehaviorSubject<string>('');\n\n constructor(\n private channelService: ChannelService,\n private chatClientService: ChatClientService,\n private transliterationService: TransliterationService\n ) {\n this.searchTerm$\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((searchTerm) => void this.updateMentionOptions(searchTerm));\n this.subscriptions.push(\n this.channelService.activeChannel$.subscribe(() => {\n this.mentionedUsers = [];\n this.userMentions.next([...this.mentionedUsers]);\n void this.updateMentionOptions(this.searchTerm$.getValue());\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.areMentionsEnabled) {\n if (this.areMentionsEnabled) {\n this.autocompleteConfig.mentions = [this.userMentionConfig];\n this.autocompleteConfig = { ...this.autocompleteConfig };\n } else {\n this.autocompleteConfig.mentions = [];\n this.autocompleteConfig = { ...this.autocompleteConfig };\n }\n }\n if (changes.mentionScope) {\n void this.updateMentionOptions(this.searchTerm$.getValue());\n }\n }\n\n filter(searchString: string, items: { autocompleteLabel: string }[]) {\n return items.filter((item) =>\n this.transliterate(item.autocompleteLabel.toLowerCase()).includes(\n this.transliterate(searchString.toLowerCase())\n )\n );\n }\n\n mentioned(item: MentionAutcompleteListItem, triggerChar = '') {\n this.mentionedUsers.push((item.user ? item.user : item) as UserResponse);\n this.userMentions.next([...this.mentionedUsers]);\n return triggerChar + item.autocompleteLabel;\n }\n\n autcompleteSearchTermChanged(searchTerm: string) {\n if (searchTerm === this.triggerChar) {\n void this.updateMentionOptions();\n } else {\n this.searchTerm$.next(searchTerm.replace(this.triggerChar, ''));\n }\n }\n\n inputChanged() {\n this.valueChange.emit(this.messageInput.nativeElement.value);\n }\n\n inputLeft() {\n this.updateMentionedUsersFromText();\n }\n\n sent(event: Event) {\n event.preventDefault();\n this.updateMentionedUsersFromText();\n this.send.next();\n }\n\n private transliterate(s: string) {\n if (this.transliterationService) {\n return this.transliterationService.transliterate(s);\n } else {\n return s;\n }\n }\n\n private async updateMentionOptions(searchTerm?: string) {\n if (!this.areMentionsEnabled) {\n return;\n }\n const request =\n this.mentionScope === 'application'\n ? (s: string) => this.chatClientService.autocompleteUsers(s)\n : (s: string) => this.channelService.autocompleteMembers(s);\n const result = await request(searchTerm || '');\n const items = this.filter(\n searchTerm || '',\n result.map((i) => {\n const user = (i.user ? i.user : i) as UserResponse;\n return {\n ...i,\n autocompleteLabel: user.name || user.id,\n type: 'mention',\n };\n })\n );\n this.userMentionConfig.items = items;\n this.autocompleteConfig.mentions = [this.userMentionConfig];\n this.autocompleteConfig = { ...this.autocompleteConfig };\n }\n\n private updateMentionedUsersFromText() {\n const updatedMentionedUsers: UserResponse[] = [];\n this.mentionedUsers.forEach((u) => {\n const key = u.name || u.id;\n if (this.value.includes(`${this.triggerChar}${key}`)) {\n updatedMentionedUsers.push(u);\n }\n });\n if (updatedMentionedUsers.length !== this.mentionedUsers.length) {\n this.userMentions.next([...updatedMentionedUsers]);\n this.mentionedUsers = updatedMentionedUsers;\n }\n }\n}\n","<textarea\n [value]=\"value || ''\"\n autofocus\n data-testid=\"textarea\"\n #input\n placeholder=\"{{ 'streamChat.Type your message' | translate }}\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n rows=\"1\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"sent($event)\"\n [mentionConfig]=\"autocompleteConfig\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n [mentionListTemplate]=\"autocompleteItem\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div class=\"rta__entity\" *ngSwitchCase=\"'mention'\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n style=\"height: 20px\"\n [size]=\"20\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n ></stream-avatar>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n","import { StreamMessage } from '../types';\n\nexport type GroupStyle = '' | 'middle' | 'top' | 'bottom' | 'single';\n\nexport const getGroupStyles = (\n message: StreamMessage,\n previousMessage?: StreamMessage,\n nextMessage?: StreamMessage,\n noGroupByUser = false\n): GroupStyle => {\n if (\n noGroupByUser ||\n (message.attachments && message.attachments.length !== 0)\n )\n return 'single';\n\n const isTopMessage =\n !previousMessage ||\n !isOnSameDay(previousMessage.created_at, message.created_at) ||\n previousMessage.type === 'system' ||\n (previousMessage.attachments &&\n previousMessage.attachments?.length !== 0) ||\n message.user?.id !== previousMessage.user?.id ||\n previousMessage.type === 'error' ||\n previousMessage.deleted_at;\n\n const isBottomMessage =\n !nextMessage ||\n !isOnSameDay(message.created_at, nextMessage.created_at) ||\n nextMessage.type === 'system' ||\n (nextMessage.attachments && nextMessage.attachments?.length !== 0) ||\n message.user?.id !== nextMessage.user?.id ||\n nextMessage.type === 'error' ||\n nextMessage.deleted_at;\n\n if (!isTopMessage && !isBottomMessage) {\n if (message.deleted_at || message.type === 'error') return 'single';\n return 'middle';\n }\n\n if (isBottomMessage) {\n if (isTopMessage || message.deleted_at || message.type === 'error')\n return 'single';\n return 'bottom';\n }\n\n if (isTopMessage) return 'top';\n\n return '';\n};\n\nconst isOnSameDay = (date1: Date, date2: Date) => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n};\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { ChannelService } from '../channel.service';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { StreamMessage } from '../types';\nimport { ChatClientService } from '../chat-client.service';\nimport { getGroupStyles, GroupStyle } from './group-styles';\nimport { ImageLoadService } from './image-load.service';\nimport { MessageActions } from '../message-actions-box/message-actions-box.component';\n@Component({\n selector: 'stream-message-list',\n templateUrl: './message-list.component.html',\n styles: [],\n})\nexport class MessageListComponent implements AfterViewChecked, OnChanges {\n @Input() messageTemplate: TemplateRef<any> | undefined;\n @Input() messageInputTemplate: TemplateRef<any> | undefined;\n @Input() mentionTemplate: TemplateRef<any> | undefined;\n @Input() areReactionsEnabled = true;\n /* eslint-disable-next-line @angular-eslint/no-input-rename */\n @Input('enabledMessageActions') enabledMessageActionsInput: MessageActions[] =\n ['flag', 'edit', 'edit-any', 'delete', 'delete-any'];\n messages$!: Observable<StreamMessage[]>;\n canReactToMessage: boolean | undefined;\n canReceiveReadEvents: boolean | undefined;\n enabledMessageActions: MessageActions[] = [];\n @HostBinding('class') private class =\n 'str-chat-angular__main-panel-inner str-chat-angular__message-list-host';\n unreadMessageCount = 0;\n isUserScrolledUp: boolean | undefined;\n groupStyles: GroupStyle[] = [];\n lastSentMessageId: string | undefined;\n @ViewChild('scrollContainer')\n private scrollContainer!: ElementRef<HTMLElement>;\n private latestMessageDate: Date | undefined;\n private hasNewMessages: boolean | undefined;\n private containerHeight: number | undefined;\n private oldestMessageDate: Date | undefined;\n private olderMassagesLoaded: boolean | undefined;\n private isNewMessageSentByUser: boolean | undefined;\n private authorizedMessageActions: MessageActions[] = ['flag'];\n private readonly isUserScrolledUpThreshold = 300;\n\n constructor(\n private channelService: ChannelService,\n private chatClientService: ChatClientService,\n private imageLoadService: ImageLoadService\n ) {\n this.channelService.activeChannel$.subscribe((channel) => {\n this.latestMessageDate = undefined;\n this.hasNewMessages = true;\n this.isUserScrolledUp = false;\n this.containerHeight = undefined;\n this.olderMassagesLoaded = false;\n this.oldestMessageDate = undefined;\n this.unreadMessageCount = 0;\n this.isNewMessageSentByUser = undefined;\n const capabilites = channel?.data?.own_capabilities as string[];\n if (capabilites) {\n this.canReactToMessage = capabilites.indexOf('send-reaction') !== -1;\n this.canReceiveReadEvents = capabilites.indexOf('read-events') !== -1;\n this.authorizedMessageActions = [];\n if (capabilites.indexOf('flag-message') !== -1) {\n this.authorizedMessageActions.push('flag');\n }\n if (capabilites.indexOf('update-own-message') !== -1) {\n this.authorizedMessageActions.push('edit');\n }\n if (capabilites.indexOf('update-any-message') !== -1) {\n this.authorizedMessageActions.push('edit');\n this.authorizedMessageActions.push('edit-any');\n }\n if (capabilites.indexOf('delete-own-message') !== -1) {\n this.authorizedMessageActions.push('delete');\n }\n if (capabilites.indexOf('delete-any-message') !== -1) {\n this.authorizedMessageActions.push('delete');\n this.authorizedMessageActions.push('delete-any');\n }\n this.setEnabledActions();\n }\n });\n this.messages$ = this.channelService.activeChannelMessages$.pipe(\n tap((messages) => {\n if (messages.length === 0) {\n return;\n }\n const currentLatestMessageDate =\n messages[messages.length - 1].created_at;\n if (\n !this.latestMessageDate ||\n this.latestMessageDate?.getTime() < currentLatestMessageDate.getTime()\n ) {\n this.latestMessageDate = currentLatestMessageDate;\n this.hasNewMessages = true;\n this.isNewMessageSentByUser =\n messages[messages.length - 1].user?.id ===\n this.chatClientService.chatClient?.user?.id;\n if (this.isUserScrolledUp) {\n this.unreadMessageCount++;\n }\n }\n const currentOldestMessageDate = messages[0].created_at;\n if (!this.oldestMessageDate) {\n this.oldestMessageDate = currentOldestMessageDate;\n } else if (\n this.oldestMessageDate?.getTime() > currentOldestMessageDate.getTime()\n ) {\n this.oldestMessageDate = currentOldestMessageDate;\n this.olderMassagesLoaded = true;\n }\n }),\n tap((messages) => {\n this.groupStyles = messages.map((m, i) =>\n getGroupStyles(m, messages[i - 1], messages[i + 1])\n );\n }),\n tap(\n (messages) =>\n (this.lastSentMessageId = [...messages]\n .reverse()\n .find(\n (m) =>\n m.user?.id === this.chatClientService.chatClient?.user?.id &&\n m.status !== 'sending'\n )?.id)\n )\n );\n this.imageLoadService.imageLoad$.subscribe(() => {\n if (!this.isUserScrolledUp) {\n this.scrollToBottom();\n // Hacky and unreliable workaround to scroll down after loaded images move the scrollbar\n setTimeout(() => {\n this.scrollToBottom();\n }, 300);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.enabledMessageActionsInput) {\n this.setEnabledActions();\n }\n }\n\n ngAfterViewChecked() {\n if (this.hasNewMessages) {\n if (!this.isUserScrolledUp || this.isNewMessageSentByUser) {\n this.scrollToBottom();\n // Hacky and unreliable workaround to scroll down after loaded images move the scrollbar\n setTimeout(() => {\n this.scrollToBottom();\n }, 300);\n }\n this.hasNewMessages = false;\n this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;\n } else if (this.olderMassagesLoaded) {\n this.preserveScrollbarPosition();\n this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;\n this.olderMassagesLoaded = false;\n }\n }\n\n trackByMessageId(index: number, item: StreamMessage) {\n return item.id;\n }\n\n scrollToBottom(): void {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight;\n }\n\n scrolled() {\n this.isUserScrolledUp =\n this.scrollContainer.nativeElement.scrollHeight -\n (this.scrollContainer.nativeElement.scrollTop +\n this.scrollContainer.nativeElement.clientHeight) >\n this.isUserScrolledUpThreshold;\n if (!this.isUserScrolledUp) {\n this.unreadMessageCount = 0;\n }\n if (this.scrollContainer.nativeElement.scrollTop === 0) {\n this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;\n void this.channelService.loadMoreMessages();\n }\n }\n\n private preserveScrollbarPosition() {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight - this.containerHeight!;\n }\n\n private setEnabledActions() {\n this.enabledMessageActions = [];\n if (!this.enabledMessageActionsInput) {\n return;\n }\n this.enabledMessageActionsInput.forEach((action) => {\n const isAuthorized = this.authorizedMessageActions.indexOf(action) !== -1;\n if (isAuthorized) {\n this.enabledMessageActions.push(action);\n }\n });\n }\n}\n","<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll\">\n <ul class=\"str-chat__ul\">\n <li\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n >\n <ng-container *ngIf=\"messageTemplate; else defaultMessageTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate;\n context: {\n message: message,\n areReactionsEnabled: areReactionsEnabled,\n canReactToMessage: canReactToMessage,\n lastSentMessageId: !!(\n lastSentMessageId && message?.id === lastSentMessageId\n ),\n canReceiveReadEvents: canReceiveReadEvents,\n messageInputTemplate: messageInputTemplate,\n mentionTemplate: mentionTemplate\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultMessageTemplate>\n <stream-message\n [message]=\"message\"\n [areReactionsEnabled]=\"areReactionsEnabled\"\n [canReactToMessage]=\"canReactToMessage\"\n [isLastSentMessage]=\"\n !!(lastSentMessageId && message?.id === lastSentMessageId)\n \"\n [enabledMessageActions]=\"enabledMessageActions\"\n [canReceiveReadEvents]=\"canReceiveReadEvents\"\n [messageInputTemplate]=\"messageInputTemplate\"\n [mentionTemplate]=\"mentionTemplate\"\n ></stream-message>\n </ng-template>\n </li>\n </ul>\n </div>\n</div>\n<div class=\"str-chat__list-notifications\">\n <button\n data-testid=\"scroll-to-bottom\"\n *ngIf=\"isUserScrolledUp\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-right\n str-chat__message-notification-scroll-down\n \"\n (keyup.enter)=\"scrollToBottom()\"\n (click)=\"scrollToBottom()\"\n >\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-down-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AvatarComponent } from './avatar/avatar.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n declarations: [AvatarComponent],\n imports: [CommonModule, TranslateModule],\n exports: [AvatarComponent],\n})\nexport class StreamAvatarModule {}\n","import { NgModule } from '@angular/core';\nimport { ChannelComponent } from './channel/channel.component';\nimport { ChannelHeaderComponent } from './channel-header/channel-header.component';\nimport { ChannelListComponent } from './channel-list/channel-list.component';\nimport { ChannelPreviewComponent } from './channel-preview/channel-preview.component';\nimport { MessageComponent } from './message/message.component';\nimport { MessageInputComponent } from './message-input/message-input.component';\nimport { MessageListComponent } from './message-list/message-list.component';\nimport { CommonModule } from '@angular/common';\nimport { LoadingIndicatorComponent } from './loading-indicator/loading-indicator.component';\nimport { IconComponent } from './icon/icon.component';\nimport { MessageActionsBoxComponent } from './message-actions-box/message-actions-box.component';\nimport { AttachmentListComponent } from './attachment-list/attachment-list.component';\nimport { MessageReactionsComponent } from './message-reactions/message-reactions.component';\nimport { NotificationComponent } from './notification/notification.component';\nimport { NotificationListComponent } from './notification-list/notification-list.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AttachmentPreviewListComponent } from './attachment-preview-list/attachment-preview-list.component';\nimport { ModalComponent } from './modal/modal.component';\nimport { TextareaDirective } from './message-input/textarea.directive';\nimport { StreamAvatarModule } from './stream-avatar.module';\n\n@NgModule({\n declarations: [\n ChannelComponent,\n ChannelHeaderComponent,\n ChannelListComponent,\n ChannelPreviewComponent,\n MessageComponent,\n MessageInputComponent,\n MessageListComponent,\n LoadingIndicatorComponent,\n IconComponent,\n MessageActionsBoxComponent,\n AttachmentListComponent,\n MessageReactionsComponent,\n NotificationComponent,\n NotificationListComponent,\n AttachmentPreviewListComponent,\n ModalComponent,\n TextareaDirective,\n ],\n imports: [CommonModule, TranslateModule, StreamAvatarModule],\n exports: [\n ChannelComponent,\n ChannelHeaderComponent,\n ChannelListComponent,\n ChannelPreviewComponent,\n MessageComponent,\n MessageInputComponent,\n MessageListComponent,\n LoadingIndicatorComponent,\n IconComponent,\n MessageActionsBoxComponent,\n AttachmentListComponent,\n MessageReactionsComponent,\n NotificationComponent,\n NotificationListComponent,\n AttachmentPreviewListComponent,\n ModalComponent,\n StreamAvatarModule,\n ],\n})\nexport class StreamChatModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AutocompleteTextareaComponent } from './message-input/autocomplete-textarea/autocomplete-textarea.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MentionModule } from 'angular-mentions';\nimport { StreamAvatarModule } from './stream-avatar.module';\nimport { textareaInjectionToken } from './injection-tokens';\n\n@NgModule({\n declarations: [AutocompleteTextareaComponent],\n imports: [CommonModule, TranslateModule, MentionModule, StreamAvatarModule],\n exports: [AutocompleteTextareaComponent],\n providers: [\n {\n provide: textareaInjectionToken,\n useValue: AutocompleteTextareaComponent,\n },\n ],\n})\nexport class StreamAutocompleteTextareaModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TextareaComponent } from './message-input/textarea/textarea.component';\nimport { textareaInjectionToken } from './injection-tokens';\n\n@NgModule({\n declarations: [TextareaComponent],\n imports: [CommonModule, TranslateModule],\n exports: [TextareaComponent],\n providers: [\n {\n provide: textareaInjectionToken,\n useValue: TextareaComponent,\n },\n ],\n})\nexport class StreamTextareaModule {}\n","/*\n * Public API Surface of stream-chat-angular\n */\n\nexport * from './lib/chat-client.service';\nexport * from './lib/channel.service';\nexport * from './lib/theme.service';\nexport * from './lib/attachment.service';\nexport * from './lib/stream-i18n.service';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/icon/icon.component';\nexport * from './lib/loading-indicator/loading-indicator.component';\nexport * from './lib/message-actions-box/message-actions-box.component';\nexport * from './lib/channel/channel.component';\nexport * from './lib/channel-header/channel-header.component';\nexport * from './lib/channel-preview/channel-preview.component';\nexport * from './lib/channel-list/channel-list.component';\nexport * from './lib/channel-list/channel-list-toggle.service';\nexport * from './lib/message/message.component';\nexport * from './lib/message/parse-date';\nexport * from './lib/message/read-by-text';\nexport * from './lib/message-input/message-input.component';\nexport * from './lib/message-input/textarea/textarea.component';\nexport * from './lib/message-input/autocomplete-textarea/autocomplete-textarea.component';\nexport * from './lib/message-input/message-input-config.service';\nexport * from './lib/message-input/textarea.directive';\nexport * from './lib/message-input/textarea.interface';\nexport * from './lib/message-list/message-list.component';\nexport * from './lib/message-list/image-load.service';\nexport * from './lib/message-list/group-styles';\nexport * from './lib/attachment-list/attachment-list.component';\nexport * from './lib/attachment-preview-list/attachment-preview-list.component';\nexport * from './lib/message-reactions/message-reactions.component';\nexport * from './lib/notification/notification.component';\nexport * from './lib/notification-list/notification-list.component';\nexport * from './lib/modal/modal.component';\nexport * from './lib/read-by';\nexport * from './lib/is-image-attachment';\nexport * from './lib/device-width';\nexport * from './lib/message-preview';\nexport * from './lib/notification.service';\nexport * from './lib/transliteration.service';\nexport * from './lib/stream-chat.module';\nexport * from './lib/stream-avatar.module';\nexport * from './lib/stream-autocomplete-textarea.module';\nexport * from './lib/stream-textarea.module';\nexport * from './lib/injection-tokens';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BehaviorSubject","Injectable","ReplaySubject","StreamChat","uuidv4","map","first","Component","Input","InjectionToken","EventEmitter","Directive","Output","Inject","ViewChild","catchError","of","startWith","distinctUntilChanged","filter","Dayjs","calendar","Subject","prettybytes","HostBinding","transliterate","debounceTime","tap","CommonModule","TranslateModule","NgModule","MentionModule"],"mappings":"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"}
1
+ {"version":3,"file":"stream-chat-angular.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/stream-chat-angular/src/assets/version.ts","../../../projects/stream-chat-angular/src/lib/notification.service.ts","../../../projects/stream-chat-angular/src/lib/chat-client.service.ts","../../../projects/stream-chat-angular/src/lib/message-preview.ts","../../../projects/stream-chat-angular/src/lib/read-by.ts","../../../projects/stream-chat-angular/src/lib/channel.service.ts","../../../projects/stream-chat-angular/src/lib/theme.service.ts","../../../projects/stream-chat-angular/src/lib/is-image-file.ts","../../../projects/stream-chat-angular/src/lib/is-image-attachment.ts","../../../projects/stream-chat-angular/src/lib/attachment.service.ts","../../../projects/stream-chat-angular/src/assets/i18n/en.ts","../../../projects/stream-chat-angular/src/lib/stream-i18n.service.ts","../../../projects/stream-chat-angular/src/lib/avatar/avatar.component.ts","../../../projects/stream-chat-angular/src/lib/avatar/avatar.component.html","../../../projects/stream-chat-angular/src/lib/icon/icon.component.ts","../../../projects/stream-chat-angular/src/lib/icon/icon.component.html","../../../projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.ts","../../../projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.html","../../../projects/stream-chat-angular/src/lib/injection-tokens.ts","../../../projects/stream-chat-angular/src/lib/message-input/textarea.directive.ts","../../../projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts","../../../projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts","../../../projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.html","../../../projects/stream-chat-angular/src/lib/message-input/message-input.component.ts","../../../projects/stream-chat-angular/src/lib/message-input/message-input.component.html","../../../projects/stream-chat-angular/src/lib/modal/modal.component.ts","../../../projects/stream-chat-angular/src/lib/modal/modal.component.html","../../../projects/stream-chat-angular/src/lib/notification/notification.component.ts","../../../projects/stream-chat-angular/src/lib/notification/notification.component.html","../../../projects/stream-chat-angular/src/lib/notification-list/notification-list.component.ts","../../../projects/stream-chat-angular/src/lib/notification-list/notification-list.component.html","../../../projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts","../../../projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.html","../../../projects/stream-chat-angular/src/lib/channel/channel.component.ts","../../../projects/stream-chat-angular/src/lib/channel/channel.component.html","../../../projects/stream-chat-angular/src/lib/device-width.ts","../../../projects/stream-chat-angular/src/lib/channel-list/channel-list-toggle.service.ts","../../../projects/stream-chat-angular/src/lib/channel-header/channel-header.component.ts","../../../projects/stream-chat-angular/src/lib/channel-header/channel-header.component.html","../../../projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts","../../../projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.html","../../../projects/stream-chat-angular/src/lib/channel-list/channel-list.component.ts","../../../projects/stream-chat-angular/src/lib/channel-list/channel-list.component.html","../../../projects/stream-chat-angular/src/lib/message/parse-date.ts","../../../projects/stream-chat-angular/src/lib/message/read-by-text.ts","../../../projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts","../../../projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.html","../../../projects/stream-chat-angular/src/lib/message-list/image-load.service.ts","../../../projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts","../../../projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.html","../../../projects/stream-chat-angular/src/lib/message/message.component.ts","../../../projects/stream-chat-angular/src/lib/message/message.component.html","../../../projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts","../../../projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.html","../../../projects/stream-chat-angular/src/lib/transliteration.service.ts","../../../projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts","../../../projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.html","../../../projects/stream-chat-angular/src/lib/message-list/group-styles.ts","../../../projects/stream-chat-angular/src/lib/message-list/message-list.component.ts","../../../projects/stream-chat-angular/src/lib/message-list/message-list.component.html","../../../projects/stream-chat-angular/src/lib/stream-avatar.module.ts","../../../projects/stream-chat-angular/src/lib/stream-chat.module.ts","../../../projects/stream-chat-angular/src/lib/stream-autocomplete-textarea.module.ts","../../../projects/stream-chat-angular/src/lib/stream-textarea.module.ts","../../../projects/stream-chat-angular/src/public-api.ts","../../../projects/stream-chat-angular/src/stream-chat-angular.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export const version = '2.6.0';\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport type NotificationType = 'success' | 'error';\n\nexport type NotificationPayload = {\n type: NotificationType;\n text: string;\n translateParams?: Object;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n notifications$: Observable<NotificationPayload[]>;\n private notificationsSubject = new BehaviorSubject<NotificationPayload[]>([]);\n\n constructor() {\n this.notifications$ = this.notificationsSubject.asObservable();\n }\n\n addTemporaryNotification(\n text: string,\n type: NotificationType = 'error',\n timeout: number = 5000,\n translateParams?: Object\n ) {\n this.addNotification(text, type, translateParams);\n const id = setTimeout(() => this.removeNotification(text), timeout);\n\n return () => {\n clearTimeout(id);\n this.removeNotification(text);\n };\n }\n\n addPermanentNotification(\n text: string,\n type: NotificationType = 'error',\n translateParams?: Object\n ) {\n this.addNotification(text, type, translateParams);\n\n return () => this.removeNotification(text);\n }\n\n private addNotification(\n text: string,\n type: NotificationType,\n translateParams?: Object\n ) {\n this.notificationsSubject.next([\n ...this.notificationsSubject.getValue(),\n { text, type, translateParams },\n ]);\n }\n\n private removeNotification(text: string) {\n const notifications = this.notificationsSubject.getValue();\n const index = notifications.findIndex((n) => n.text === text);\n if (index === -1) {\n return;\n }\n notifications.splice(index, 1);\n this.notificationsSubject.next([...notifications]);\n }\n}\n","import { ApplicationRef, Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';\nimport { AppSettings, Event, StreamChat } from 'stream-chat';\nimport { version } from '../assets/version';\nimport { NotificationService } from './notification.service';\n\nexport type Notification = {\n eventType:\n | 'notification.added_to_channel'\n | 'notification.message_new'\n | 'notification.removed_from_channel';\n event: Event;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChatClientService {\n chatClient!: StreamChat;\n notification$: Observable<Notification>;\n appSettings$: Observable<AppSettings | undefined>;\n connectionState$: Observable<'offline' | 'online'>;\n private notificationSubject = new ReplaySubject<Notification>(1);\n private connectionStateSubject = new ReplaySubject<'offline' | 'online'>(1);\n private appSettingsSubject = new BehaviorSubject<AppSettings | undefined>(\n undefined\n );\n\n constructor(\n private ngZone: NgZone,\n private appRef: ApplicationRef,\n private notificationService: NotificationService\n ) {\n this.notification$ = this.notificationSubject.asObservable();\n this.connectionState$ = this.connectionStateSubject.asObservable();\n this.appSettings$ = this.appSettingsSubject.asObservable();\n }\n\n async init(apiKey: string, userId: string, userToken: string) {\n this.chatClient = StreamChat.getInstance(apiKey);\n await this.ngZone.runOutsideAngular(async () => {\n await this.chatClient.connectUser({ id: userId }, userToken);\n this.chatClient.setUserAgent(\n `stream-chat-angular-${version}-${this.chatClient.getUserAgent()}`\n );\n });\n this.appSettingsSubject.next(undefined);\n this.chatClient.on('notification.added_to_channel', (e) => {\n this.notificationSubject.next({\n eventType: 'notification.added_to_channel',\n event: e,\n });\n this.appRef.tick();\n });\n this.chatClient.on('notification.message_new', (e) => {\n this.notificationSubject.next({\n eventType: 'notification.message_new',\n event: e,\n });\n this.appRef.tick();\n });\n this.chatClient.on('notification.removed_from_channel', (e) => {\n this.notificationSubject.next({\n eventType: 'notification.removed_from_channel',\n event: e,\n });\n this.appRef.tick();\n });\n let removeNotification: undefined | Function;\n this.chatClient.on('connection.changed', (e) => {\n const isOnline = e.online;\n if (isOnline) {\n if (removeNotification) {\n removeNotification();\n }\n } else {\n removeNotification = this.notificationService.addPermanentNotification(\n 'streamChat.Connection failure, reconnecting now...'\n );\n }\n this.connectionStateSubject.next(isOnline ? 'online' : 'offline');\n this.appRef.tick();\n });\n }\n\n async getAppSettings() {\n if (this.appSettingsSubject.getValue()) {\n return;\n }\n const settings = await this.chatClient.getAppSettings();\n this.appSettingsSubject.next(settings.app || {});\n }\n\n async flagMessage(messageId: string) {\n await this.chatClient.flagMessage(messageId);\n }\n\n async autocompleteUsers(searchTerm: string) {\n if (!searchTerm) {\n return [];\n }\n const result = await this.chatClient.queryUsers({\n $or: [\n { id: { $autocomplete: searchTerm } },\n { name: { $autocomplete: searchTerm } },\n ],\n id: { $ne: this.chatClient.userID! },\n });\n return result.users;\n }\n}\n","import { Attachment, MessageResponse, UserResponse } from 'stream-chat';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport const createMessagePreview = (\n user: UserResponse,\n text: string,\n attachments: Attachment[],\n mentionedUsers: UserResponse[]\n) => {\n const clientSideId = `${user.id}-${uuidv4()}`;\n\n return {\n __html: text,\n created_at: new Date(),\n html: text,\n id: clientSideId,\n reactions: [],\n status: 'sending',\n text,\n type: 'regular',\n user,\n attachments,\n mentioned_users: mentionedUsers,\n } as unknown as MessageResponse;\n};\n","import { Channel, FormatMessageResponse, UserResponse } from 'stream-chat';\n\nexport const getReadBy = (message: FormatMessageResponse, channel: Channel) => {\n const readBy: UserResponse[] = [];\n Object.keys(channel.state.read).forEach((key) => {\n if (\n channel.state.read[key].last_read.getTime() >=\n message.updated_at.getTime() &&\n message.user?.id !== key\n ) {\n readBy.push(channel.state.read[key].user);\n }\n });\n\n return readBy;\n};\n","import { ApplicationRef, Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport {\n Attachment,\n Channel,\n ChannelFilters,\n ChannelOptions,\n ChannelSort,\n Event,\n FormatMessageResponse,\n MessageResponse,\n UpdatedMessage,\n UserResponse,\n} from 'stream-chat';\nimport { ChatClientService, Notification } from './chat-client.service';\nimport { createMessagePreview } from './message-preview';\nimport { MessageReactionType } from './message-reactions/message-reactions.component';\nimport { getReadBy } from './read-by';\nimport { AttachmentUpload, StreamMessage } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChannelService {\n hasMoreChannels$: Observable<boolean>;\n channels$: Observable<Channel[] | undefined>;\n activeChannel$: Observable<Channel | undefined>;\n activeChannelMessages$: Observable<StreamMessage[]>;\n customNewMessageNotificationHandler?: (\n notification: Notification,\n channelListSetter: (channels: Channel[]) => void\n ) => void;\n customAddedToChannelNotificationHandler?: (\n notification: Notification,\n channelListSetter: (channels: Channel[]) => void\n ) => void;\n customRemovedFromChannelNotificationHandler?: (\n notification: Notification,\n channelListSetter: (channels: Channel[]) => void\n ) => void;\n customChannelDeletedHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelUpdatedHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelTruncatedHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelHiddenHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customChannelVisibleHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n customNewMessageHandler?: (\n event: Event,\n channel: Channel,\n channelListSetter: (channels: Channel[]) => void,\n messageListSetter: (messages: StreamMessage[]) => void\n ) => void;\n private channelsSubject = new BehaviorSubject<Channel[] | undefined>(\n undefined\n );\n private activeChannelSubject = new BehaviorSubject<Channel | undefined>(\n undefined\n );\n private activeChannelMessagesSubject = new BehaviorSubject<\n (StreamMessage | MessageResponse | FormatMessageResponse)[]\n >([]);\n private hasMoreChannelsSubject = new ReplaySubject<boolean>(1);\n private activeChannelSubscriptions: { unsubscribe: () => void }[] = [];\n private filters: ChannelFilters | undefined;\n private sort: ChannelSort | undefined;\n private options: ChannelOptions | undefined;\n\n private channelListSetter = (channels: Channel[]) => {\n this.channelsSubject.next(channels);\n };\n\n private messageListSetter = (messages: StreamMessage[]) => {\n this.activeChannelMessagesSubject.next(messages);\n };\n\n constructor(\n private chatClientService: ChatClientService,\n private appRef: ApplicationRef,\n private ngZone: NgZone\n ) {\n this.channels$ = this.channelsSubject.asObservable();\n this.activeChannel$ = this.activeChannelSubject.asObservable();\n this.activeChannelMessages$ = this.activeChannelMessagesSubject.pipe(\n map((messages) => {\n const channel = this.activeChannelSubject.getValue()!;\n return messages.map((message) => {\n if (\n this.isStreamMessage(message) &&\n this.isFormatMessageResponse(message)\n ) {\n return message;\n } else if (this.isFormatMessageResponse(message)) {\n return { ...message, readBy: getReadBy(message, channel) };\n } else {\n const formatMessage = this.formatMessage(message);\n return {\n ...formatMessage,\n readBy: getReadBy(formatMessage, channel),\n };\n }\n });\n })\n );\n this.hasMoreChannels$ = this.hasMoreChannelsSubject.asObservable();\n }\n\n setAsActiveChannel(channel: Channel) {\n const prevActiveChannel = this.activeChannelSubject.getValue();\n this.stopWatchForActiveChannelEvents(prevActiveChannel);\n this.watchForActiveChannelEvents(channel);\n this.activeChannelSubject.next(channel);\n channel.state.messages.forEach((m) => {\n m.readBy = getReadBy(m, channel);\n });\n if (this.canSendReadEvents) {\n void channel.markRead();\n }\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n }\n\n async loadMoreMessages() {\n const activeChnannel = this.activeChannelSubject.getValue();\n const lastMessageId = this.activeChannelMessagesSubject.getValue()[0]?.id;\n await activeChnannel?.query({\n messages: { limit: 25, id_lt: lastMessageId },\n members: { limit: 0 },\n watchers: { limit: 0 },\n });\n if (\n activeChnannel?.data?.id ===\n this.activeChannelSubject.getValue()?.data?.id\n ) {\n this.activeChannelMessagesSubject.next([\n ...activeChnannel!.state.messages,\n ]);\n }\n }\n\n async init(\n filters: ChannelFilters,\n sort?: ChannelSort,\n options?: ChannelOptions\n ) {\n this.filters = filters;\n this.options = options || {\n offset: 0,\n limit: 25,\n state: true,\n presence: true,\n watch: true,\n message_limit: 25,\n };\n this.sort = sort || { last_message_at: -1, updated_at: -1 };\n await this.queryChannels();\n this.chatClientService.notification$.subscribe(\n (notification) => void this.handleNotification(notification)\n );\n }\n\n async loadMoreChannels() {\n this.options!.offset = this.channels.length!;\n await this.queryChannels();\n }\n\n async addReaction(messageId: string, reactionType: MessageReactionType) {\n await this.activeChannelSubject.getValue()?.sendReaction(messageId, {\n type: reactionType,\n });\n }\n\n async removeReaction(messageId: string, reactionType: MessageReactionType) {\n await this.activeChannelSubject\n .getValue()\n ?.deleteReaction(messageId, reactionType);\n }\n\n async sendMessage(\n text: string,\n attachments: Attachment[] = [],\n mentionedUsers: UserResponse[] = []\n ) {\n const preview = createMessagePreview(\n this.chatClientService.chatClient.user!,\n text,\n attachments,\n mentionedUsers\n );\n const channel = this.activeChannelSubject.getValue()!;\n preview.readBy = [];\n channel.state.addMessageSorted(preview, true);\n await this.sendMessageRequest(preview);\n }\n\n async resendMessage(message: StreamMessage) {\n const channel = this.activeChannelSubject.getValue()!;\n channel.state.addMessageSorted(\n {\n ...(message as any as MessageResponse),\n errorStatusCode: undefined,\n status: 'sending',\n },\n true\n );\n await this.sendMessageRequest(message);\n }\n\n async updateMessage(message: StreamMessage) {\n await this.chatClientService.chatClient.updateMessage(\n message as UpdatedMessage\n );\n }\n\n async deleteMessage(message: StreamMessage) {\n await this.chatClientService.chatClient.deleteMessage(message.id);\n }\n\n async uploadAttachments(\n uploads: AttachmentUpload[]\n ): Promise<AttachmentUpload[]> {\n const result: AttachmentUpload[] = [];\n const channel = this.activeChannelSubject.getValue()!;\n const uploadResults = await Promise.allSettled(\n uploads.map((upload) =>\n upload.type === 'image'\n ? channel.sendImage(upload.file)\n : channel.sendFile(upload.file)\n )\n );\n uploadResults.forEach((uploadResult, i) => {\n const file = uploads[i].file;\n const type = uploads[i].type;\n if (uploadResult.status === 'fulfilled') {\n result.push({\n file,\n type,\n state: 'success',\n url: uploadResult.value.file,\n });\n } else {\n result.push({ file, type, state: 'error' });\n }\n });\n\n return result;\n }\n\n async deleteAttachment(attachmentUpload: AttachmentUpload) {\n const channel = this.activeChannelSubject.getValue()!;\n await (attachmentUpload.type === 'image'\n ? channel.deleteImage(attachmentUpload.url!)\n : channel.deleteFile(attachmentUpload.url!));\n }\n\n async autocompleteMembers(searchTerm: string) {\n const activeChannel = this.activeChannelSubject.getValue();\n if (!activeChannel) {\n return [];\n }\n if (Object.keys(activeChannel.state.members).length <= 100) {\n return Object.values(activeChannel.state.members).filter(\n (m) => m.user?.id !== this.chatClientService.chatClient.userID!\n );\n } else {\n if (!searchTerm) {\n return [];\n }\n const result = await activeChannel.queryMembers({\n $or: [\n { id: { $autocomplete: searchTerm } },\n { name: { $autocomplete: searchTerm } },\n ],\n id: { $ne: this.chatClientService.chatClient.userID! },\n });\n return Object.values(result.members);\n }\n }\n\n private async sendMessageRequest(preview: MessageResponse | StreamMessage) {\n const channel = this.activeChannelSubject.getValue()!;\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n try {\n await channel.sendMessage({\n text: preview.text,\n attachments: preview.attachments,\n mentioned_users: preview.mentioned_users?.map((u) => u.id),\n id: preview.id,\n });\n } catch (error) {\n const stringError = JSON.stringify(error);\n const parsedError: { status?: number } = stringError\n ? (JSON.parse(stringError) as { status?: number })\n : {};\n\n channel.state.addMessageSorted(\n {\n ...(preview as MessageResponse),\n errorStatusCode: parsedError.status || undefined,\n status: 'failed',\n },\n true\n );\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n }\n }\n\n private async handleNotification(notification: Notification) {\n switch (notification.eventType) {\n case 'notification.message_new': {\n if (this.customNewMessageNotificationHandler) {\n this.customNewMessageNotificationHandler(\n notification,\n this.channelListSetter\n );\n } else {\n await this.handleNewMessageNotification(notification);\n }\n break;\n }\n case 'notification.added_to_channel': {\n if (this.customAddedToChannelNotificationHandler) {\n this.customAddedToChannelNotificationHandler(\n notification,\n this.channelListSetter\n );\n } else {\n await this.handleAddedToChannelNotification(notification);\n }\n break;\n }\n case 'notification.removed_from_channel': {\n if (this.customRemovedFromChannelNotificationHandler) {\n this.customRemovedFromChannelNotificationHandler(\n notification,\n this.channelListSetter\n );\n } else {\n this.handleRemovedFromChannelNotification(notification);\n }\n }\n }\n }\n\n private handleRemovedFromChannelNotification(notification: Notification) {\n this.ngZone.run(() => {\n const channelIdToBeRemoved = notification.event.channel!.cid;\n this.removeFromChannelList(channelIdToBeRemoved);\n });\n }\n\n private async handleNewMessageNotification(notification: Notification) {\n await this.addChannelFromNotification(notification);\n }\n\n private async handleAddedToChannelNotification(notification: Notification) {\n await this.addChannelFromNotification(notification);\n }\n\n private async addChannelFromNotification(notification: Notification) {\n const channel = this.chatClientService.chatClient.channel(\n notification.event.channel?.type!,\n notification.event.channel?.id\n );\n await channel.watch();\n this.watchForChannelEvents(channel);\n this.ngZone.run(() => {\n this.channelsSubject.next([\n channel,\n ...(this.channelsSubject.getValue() || []),\n ]);\n });\n }\n\n private removeFromChannelList(cid: string) {\n const channels = this.channels.filter((c) => c.cid !== cid);\n if (channels.length < this.channels.length) {\n this.channelsSubject.next(channels);\n if (this.activeChannelSubject.getValue()!.cid === cid) {\n this.setAsActiveChannel(channels[0]);\n }\n }\n }\n\n private watchForActiveChannelEvents(channel: Channel) {\n this.activeChannelSubscriptions.push(\n channel.on('message.new', () => {\n this.ngZone.run(() => {\n this.activeChannelMessagesSubject.next([...channel.state.messages]);\n this.activeChannel$.pipe(first()).subscribe((c) => {\n if (this.canSendReadEvents) {\n void c?.markRead();\n }\n });\n });\n })\n );\n this.activeChannelSubscriptions.push(\n channel.on('message.updated', (event) => this.messageUpdated(event))\n );\n this.activeChannelSubscriptions.push(\n channel.on('message.deleted', (event) => this.messageUpdated(event))\n );\n this.activeChannelSubscriptions.push(\n channel.on('reaction.new', (e) => this.messageReactionEventReceived(e))\n );\n this.activeChannelSubscriptions.push(\n channel.on('reaction.deleted', (e) =>\n this.messageReactionEventReceived(e)\n )\n );\n this.activeChannelSubscriptions.push(\n channel.on('reaction.updated', (e) =>\n this.messageReactionEventReceived(e)\n )\n );\n this.activeChannelSubscriptions.push(\n channel.on('message.read', (e) => {\n let latestMessage!: StreamMessage;\n this.activeChannelMessages$.pipe(first()).subscribe((messages) => {\n latestMessage = messages[messages.length - 1];\n });\n if (!latestMessage || !e.user) {\n return;\n }\n latestMessage.readBy = getReadBy(latestMessage, channel);\n\n this.activeChannelMessagesSubject.next(\n this.activeChannelMessagesSubject.getValue()\n );\n })\n );\n }\n\n private messageUpdated(event: Event) {\n this.ngZone.run(() => {\n const messages = this.activeChannelMessagesSubject.getValue();\n const messageIndex = messages.findIndex(\n (m) => m.id === event.message?.id\n );\n if (messageIndex !== -1 && event.message) {\n messages[messageIndex] = event.message;\n this.activeChannelMessagesSubject.next([...messages]);\n }\n });\n }\n\n private messageReactionEventReceived(e: Event) {\n this.ngZone.run(() => {\n let messages!: StreamMessage[];\n this.activeChannelMessages$\n .pipe(first())\n .subscribe((m) => (messages = m));\n const message = messages.find((m) => m.id === e?.message?.id);\n if (!message) {\n return;\n }\n message.reaction_counts = { ...e.message?.reaction_counts };\n message.reaction_scores = { ...e.message?.reaction_scores };\n message.latest_reactions = [...(e.message?.latest_reactions || [])];\n message.own_reactions = [...(e.message?.own_reactions || [])];\n this.activeChannelMessagesSubject.next([...messages]);\n });\n }\n\n private formatMessage(message: MessageResponse) {\n return {\n ...message,\n // parse the date..\n pinned_at: message.pinned_at ? new Date(message.pinned_at) : null,\n created_at: message.created_at\n ? new Date(message.created_at)\n : new Date(),\n updated_at: message.updated_at\n ? new Date(message.updated_at)\n : new Date(),\n status: message.status || 'received',\n };\n }\n\n private isStreamMessage(\n message: StreamMessage | FormatMessageResponse | MessageResponse\n ): message is StreamMessage {\n return !!message.readBy;\n }\n\n private isFormatMessageResponse(\n message: StreamMessage | FormatMessageResponse | MessageResponse\n ): message is FormatMessageResponse {\n return message.created_at instanceof Date;\n }\n\n private stopWatchForActiveChannelEvents(channel: Channel | undefined) {\n if (!channel) {\n return;\n }\n this.activeChannelSubscriptions.forEach((s) => s.unsubscribe());\n this.activeChannelSubscriptions = [];\n }\n\n private async queryChannels() {\n try {\n const channels = await this.chatClientService.chatClient.queryChannels(\n this.filters!,\n this.sort,\n this.options\n );\n channels.forEach((c) => this.watchForChannelEvents(c));\n const prevChannels = this.channelsSubject.getValue() || [];\n this.channelsSubject.next([...prevChannels, ...channels]);\n if (channels.length > 0 && !this.activeChannelSubject.getValue()) {\n this.setAsActiveChannel(channels[0]);\n }\n this.hasMoreChannelsSubject.next(channels.length >= this.options!.limit!);\n } catch (error) {\n this.channelsSubject.error(error);\n }\n }\n\n private watchForChannelEvents(channel: Channel) {\n channel.on((event: Event) => {\n switch (event.type) {\n case 'message.new': {\n if (this.customNewMessageHandler) {\n this.customNewMessageHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleNewMessage(event, channel);\n }\n break;\n }\n case 'channel.hidden': {\n if (this.customChannelHiddenHandler) {\n this.customChannelHiddenHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelHidden(event);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.deleted': {\n if (this.customChannelDeletedHandler) {\n this.customChannelDeletedHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelDeleted(event);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.visible': {\n if (this.customChannelVisibleHandler) {\n this.customChannelVisibleHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelVisible(event, channel);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.updated': {\n if (this.customChannelUpdatedHandler) {\n this.customChannelUpdatedHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelUpdate(event);\n }\n this.appRef.tick();\n break;\n }\n case 'channel.truncated': {\n if (this.customChannelTruncatedHandler) {\n this.customChannelTruncatedHandler(\n event,\n channel,\n this.channelListSetter,\n this.messageListSetter\n );\n } else {\n this.handleChannelTruncate(event);\n }\n this.appRef.tick();\n break;\n }\n }\n setTimeout(() => this.appRef.tick(), 0);\n });\n }\n\n private handleNewMessage(_: Event, channel: Channel) {\n const channelIndex = this.channels.findIndex((c) => c.cid === channel.cid);\n this.channels.splice(channelIndex, 1);\n this.channelsSubject.next([channel, ...this.channels]);\n }\n\n private handleChannelHidden(event: Event) {\n this.removeFromChannelList(event.channel!.cid);\n }\n\n private handleChannelDeleted(event: Event) {\n this.removeFromChannelList(event.channel!.cid);\n }\n\n private handleChannelVisible(event: Event, channel: Channel) {\n if (!this.channels.find((c) => c.cid === event.cid)) {\n this.ngZone.run(() =>\n this.channelsSubject.next([...this.channels, channel])\n );\n }\n }\n\n private handleChannelUpdate(event: Event) {\n const channelIndex = this.channels.findIndex(\n (c) => c.cid === event.channel!.cid\n );\n if (channelIndex !== -1) {\n this.channels[channelIndex].data = event.channel;\n this.channelsSubject.next([...this.channels]);\n if (event.channel?.cid === this.activeChannelSubject.getValue()?.cid) {\n const channel = this.activeChannelSubject.getValue()!;\n channel.data = event.channel;\n this.activeChannelSubject.next(channel);\n }\n }\n }\n\n private handleChannelTruncate(event: Event) {\n const channelIndex = this.channels.findIndex(\n (c) => c.cid === event.channel!.cid\n );\n if (channelIndex !== -1) {\n this.channels[channelIndex].state.messages = [];\n this.channelsSubject.next([...this.channels]);\n if (event.channel?.cid === this.activeChannelSubject.getValue()?.cid) {\n const channel = this.activeChannelSubject.getValue()!;\n channel.state.messages = [];\n this.activeChannelSubject.next(channel);\n this.activeChannelMessagesSubject.next([]);\n }\n }\n }\n\n private get channels() {\n return this.channelsSubject.getValue() || [];\n }\n\n private get canSendReadEvents() {\n const channel = this.activeChannelSubject.getValue();\n if (!channel) {\n return false;\n }\n const capabilites = channel.data?.own_capabilities as string[];\n return capabilites.indexOf('read-events') !== -1;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport type Theme = 'light' | 'dark';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n theme$ = new BehaviorSubject<Theme>('light');\n private _customLightThemeVariables: { [key: string]: string } | undefined;\n private _customDarkThemeVariables: { [key: string]: string } | undefined;\n private defaultDarkModeVariables = {\n '--bg-gradient-end': '#101214',\n '--bg-gradient-start': '#070a0d',\n '--black': '#ffffff',\n '--blue-alice': '#00193d',\n '--border': '#141924',\n '--button-background': '#ffffff',\n '--button-text': '#005fff',\n '--grey': '#7a7a7a',\n '--grey-gainsboro': '#2d2f2f',\n '--grey-whisper': '#1c1e22',\n '--modal-shadow': '#000000',\n '--overlay': '#00000066', // 66 = 40% opacity\n '--overlay-dark': '#ffffffcc', // CC = 80% opacity\n '--shadow-icon': '#00000080', // 80 = 50% opacity\n '--targetedMessageBackground': '#302d22',\n '--transparent': 'transparent',\n '--white': '#101418',\n '--white-smoke': '#13151b',\n '--white-snow': '#070a0d',\n };\n\n constructor() {\n this.theme$.subscribe((theme) => {\n const darkVariables = this.customDarkThemeVariables\n ? { ...this.defaultDarkModeVariables, ...this.customDarkThemeVariables }\n : this.defaultDarkModeVariables;\n const lightVariables = this.customLightThemeVariables\n ? this.customLightThemeVariables\n : {};\n if (theme === 'dark') {\n this.deleteVariables(lightVariables);\n this.setVariables(darkVariables);\n } else {\n this.deleteVariables(darkVariables);\n this.setVariables(lightVariables);\n }\n });\n }\n\n get customLightThemeVariables() {\n return this._customLightThemeVariables;\n }\n\n set customLightThemeVariables(\n variables: { [key: string]: string } | undefined\n ) {\n const prevVariables = this.customLightThemeVariables;\n this.deleteVariables(prevVariables);\n this._customLightThemeVariables = variables;\n }\n\n get customDarkThemeVariables() {\n return this._customDarkThemeVariables;\n }\n\n set customDarkThemeVariables(\n variables: { [key: string]: string } | undefined\n ) {\n const prevVariables = this.customDarkThemeVariables;\n this.deleteVariables(prevVariables);\n this._customDarkThemeVariables = variables;\n }\n\n private deleteVariables(variables: { [key: string]: string } | undefined) {\n if (!variables) {\n return;\n }\n Object.keys(variables).forEach((key) =>\n document.documentElement.style.setProperty(key, null)\n );\n }\n\n private setVariables(variables: { [key: string]: string } | undefined) {\n if (!variables) {\n return;\n }\n Object.keys(variables).forEach((key) =>\n document.documentElement.style.setProperty(key, variables[key])\n );\n }\n}\n","export const isImageFile = (file: File) => {\n // photoshop files begin with 'image/'\n return file.type.startsWith('image/') && !file.type.endsWith('.photoshop');\n};\n","import { Attachment } from 'stream-chat';\n\nexport const isImageAttachment = (attachment: Attachment) => {\n return (\n attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url\n );\n};\n","import { Injectable } from '@angular/core';\nimport { isImageFile } from './is-image-file';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Attachment } from 'stream-chat';\nimport { ChannelService } from './channel.service';\nimport { isImageAttachment } from './is-image-attachment';\nimport { NotificationService } from './notification.service';\nimport { AttachmentUpload } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AttachmentService {\n attachmentUploadInProgressCounter$: Observable<number>;\n attachmentUploads$: Observable<AttachmentUpload[]>;\n private attachmentUploadInProgressCounterSubject =\n new BehaviorSubject<number>(0);\n private attachmentUploadsSubject = new BehaviorSubject<AttachmentUpload[]>(\n []\n );\n\n constructor(\n private channelService: ChannelService,\n private notificationService: NotificationService\n ) {\n this.attachmentUploadInProgressCounter$ =\n this.attachmentUploadInProgressCounterSubject.asObservable();\n this.attachmentUploads$ = this.attachmentUploadsSubject.asObservable();\n }\n\n resetAttachmentUploads() {\n this.attachmentUploadsSubject.next([]);\n }\n\n async filesSelected(fileList: FileList | null) {\n if (!fileList) {\n return;\n }\n const imageFiles: File[] = [];\n const dataFiles: File[] = [];\n\n Array.from(fileList).forEach((file) => {\n if (isImageFile(file)) {\n imageFiles.push(file);\n } else {\n dataFiles.push(file);\n }\n });\n imageFiles.forEach((f) => this.createPreview(f));\n const newUploads = [\n ...imageFiles.map((file) => ({\n file,\n state: 'uploading' as 'uploading',\n type: 'image' as 'image',\n })),\n ...dataFiles.map((file) => ({\n file,\n state: 'uploading' as 'uploading',\n type: 'file' as 'file',\n })),\n ];\n this.attachmentUploadsSubject.next([\n ...this.attachmentUploadsSubject.getValue(),\n ...newUploads,\n ]);\n await this.uploadAttachments(newUploads);\n }\n\n async retryAttachmentUpload(file: File) {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n const upload = attachmentUploads.find((u) => u.file === file);\n if (!upload) {\n return;\n }\n upload.state = 'uploading';\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n await this.uploadAttachments([upload]);\n }\n\n async deleteAttachment(upload: AttachmentUpload) {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n if (upload.state === 'success') {\n try {\n await this.channelService.deleteAttachment(upload);\n attachmentUploads.splice(attachmentUploads.indexOf(upload), 1);\n } catch (error) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Error deleting attachment'\n );\n }\n } else {\n attachmentUploads.splice(attachmentUploads.indexOf(upload), 1);\n }\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n }\n\n mapToAttachments() {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n return attachmentUploads\n .filter((r) => r.state === 'success')\n .map((r) => {\n const attachment: Attachment = {\n type: r.type,\n };\n if (r.type === 'image') {\n attachment.fallback = r.file?.name;\n attachment.image_url = r.url;\n } else {\n attachment.asset_url = r.url;\n attachment.title = r.file?.name;\n attachment.file_size = r.file?.size;\n }\n\n return attachment;\n });\n }\n\n createFromAttachments(attachments: Attachment[]) {\n const attachmentUploads: AttachmentUpload[] = [];\n attachments.forEach((attachment) => {\n if (isImageAttachment(attachment)) {\n attachmentUploads.push({\n url: (attachment.img_url ||\n attachment.thumb_url ||\n attachment.image_url) as string,\n state: 'success',\n type: 'image',\n file: {\n name: attachment.fallback,\n } as File,\n });\n } else if (attachment.type === 'file') {\n attachmentUploads.push({\n url: attachment.asset_url,\n state: 'success',\n file: {\n name: attachment.title,\n size: attachment.file_size,\n } as File,\n type: 'file',\n });\n }\n });\n\n if (attachmentUploads.length > 0) {\n this.attachmentUploadsSubject.next([\n ...this.attachmentUploadsSubject.getValue(),\n ...attachmentUploads,\n ]);\n }\n }\n\n private createPreview(file: File) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n const upload = attachmentUploads.find((upload) => upload.file === file);\n if (!upload) {\n return;\n }\n upload.previewUri = event.target?.result || undefined;\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n };\n reader.readAsDataURL(file as Blob);\n }\n\n private async uploadAttachments(uploads: AttachmentUpload[]) {\n const attachmentUploads = this.attachmentUploadsSubject.getValue();\n this.attachmentUploadInProgressCounterSubject.next(\n this.attachmentUploadInProgressCounterSubject.getValue() + 1\n );\n const result = await this.channelService.uploadAttachments(uploads);\n result.forEach((r) => {\n const upload = attachmentUploads.find((upload) => upload.file === r.file);\n if (!upload) {\n if (r.url) {\n void this.channelService.deleteAttachment(r);\n }\n return;\n }\n upload.state = r.state;\n upload.url = r.url;\n if (upload.state === 'error') {\n this.notificationService.addTemporaryNotification(\n upload.type === 'image'\n ? 'streamChat.Error uploading image'\n : 'streamChat.Error uploading file'\n );\n }\n });\n this.attachmentUploadInProgressCounterSubject.next(\n this.attachmentUploadInProgressCounterSubject.getValue() - 1\n );\n this.attachmentUploadsSubject.next([...attachmentUploads]);\n }\n}\n","export const en = {\n streamChat: {\n '1 reply': '1 reply',\n 'Attach files': 'Attach files',\n Cancel: 'Cancel',\n 'Channel Missing': 'Channel Missing',\n Close: 'Close',\n 'Close emoji picker': 'Close emoji picker',\n 'Commands matching': 'Commands matching',\n 'Connection failure, reconnecting now...':\n 'Connection failure, reconnecting now...',\n Delete: 'Delete',\n Delivered: 'Delivered',\n 'Edit Message': 'Edit Message',\n 'Edit message request failed': 'Edit message request failed',\n 'Emoji matching': 'Emoji matching',\n 'Empty message...': 'Empty message...',\n 'Error adding flag': 'Error adding flag',\n 'Error connecting to chat, refresh the page to try again.':\n 'Error connecting to chat, refresh the page to try again.',\n 'Error deleting message': 'Error deleting message',\n 'Error muting a user ...': 'Error muting a user ...',\n 'Error pinning message': 'Error pinning message',\n 'Error removing message pin': 'Error removing message pin',\n 'Error unmuting a user ...': 'Error unmuting a user ...',\n 'Error uploading file': 'Error uploading file',\n 'Error uploading image': 'Error uploading image',\n 'Error deleting attachment': 'Error deleting attachment',\n 'Error · Unsent': 'Error · Unsent',\n 'Error: {{ errorMessage }}': 'Error: {{ errorMessage }}',\n Flag: 'Flag',\n 'Message Failed': 'Message Failed',\n 'Message Failed · Unauthorized': 'Message Failed · Unauthorized',\n 'Message deleted': 'Message deleted',\n 'Message has been successfully flagged':\n 'Message has been successfully flagged',\n 'Message pinned': 'Message pinned',\n Mute: 'Mute',\n New: 'New',\n 'New Messages!': 'New Messages!',\n 'No results found': 'No results found',\n 'Nothing yet...': 'Nothing yet...',\n 'Only visible to you': 'Only visible to you',\n 'Open emoji picker': 'Open emoji picker',\n 'People matching': 'People matching',\n 'Pick your emoji': 'Pick your emoji',\n Pin: 'Pin',\n 'Pinned by': 'Pinned by',\n Reply: 'Reply',\n 'Reply to Message': 'Reply to Message',\n Search: 'Search',\n 'Searching...': 'Searching...',\n Send: 'Send',\n 'Send message request failed': 'Send message request failed',\n 'Sending...': 'Sending...',\n 'Slow Mode ON': 'Slow Mode ON',\n 'Start of a new thread': 'Start of a new thread',\n 'This message was deleted...': 'This message was deleted...',\n Thread: 'Thread',\n 'Type your message': 'Type your message',\n Unmute: 'Unmute',\n Unpin: 'Unpin',\n 'Wait until all attachments have uploaded':\n 'Wait until all attachments have uploaded',\n 'You have no channels currently': 'You have no channels currently',\n \"You've reached the maximum number of files\":\n \"You've reached the maximum number of files\",\n live: 'live',\n 'this content could not be displayed':\n 'this content could not be displayed',\n '{{ commaSeparatedUsers }} and {{ moreCount }} more':\n '{{ commaSeparatedUsers }} and {{ moreCount }} more',\n '{{ commaSeparatedUsers }}, and {{ lastUser }}':\n '{{ commaSeparatedUsers }}, and {{ lastUser }}',\n '{{ firstUser }} and {{ secondUser }}':\n '{{ firstUser }} and {{ secondUser }}',\n '{{ imageCount }} more': '{{ imageCount }} more',\n '{{ memberCount }} members': '{{ memberCount }} members',\n '{{ replyCount }} replies': '{{ replyCount }} replies',\n '{{ user }} has been muted': '{{ user }} has been muted',\n '{{ user }} has been unmuted': '{{ user }} has been unmuted',\n '{{ watcherCount }} online': '{{ watcherCount }} online',\n '🏙 Attachment...': '🏙 Attachment...',\n 'Connection error': 'Connection error',\n 'Load more': 'Load more',\n failed: 'failed',\n retry: 'retry',\n test: 'success',\n 'Sending links is not allowed in this conversation':\n 'Sending links is not allowed in this conversation',\n \"You can't send messages in this channel\":\n \"You can't send messages in this channel\",\n 'Unsupported file type: {{type}}': 'Unsupported file type: {{type}}',\n },\n};\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { en } from '../assets/i18n/en';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StreamI18nService {\n constructor(private translteService: TranslateService) {}\n\n setTranslation(lang = 'en', overrides?: { [key: string]: string }) {\n if (!this.translteService.defaultLang) {\n this.translteService.defaultLang = lang;\n }\n this.translteService.setTranslation(\n lang,\n { streamChat: { ...en.streamChat, ...overrides } },\n true\n );\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'stream-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n})\nexport class AvatarComponent {\n @Input() name: string | undefined;\n @Input() imageUrl: string | undefined;\n @Input() size = 32;\n isLoaded = false;\n isError = false;\n\n constructor() {}\n\n get initials() {\n return (this.name?.toString() || '').charAt(0);\n }\n}\n","<div\n class=\"str-chat__avatar str-chat__avatar--circle\"\n title=\"{{ name }}\"\n [style]=\"{\n flexBasis: size + 'px',\n fontSize: size / 2 + 'px',\n height: size + 'px',\n lineHeight: size + 'px',\n width: size + 'px'\n }\"\n>\n <img\n *ngIf=\"imageUrl && !isError; else fallback\"\n class=\"str-chat__avatar-image str-chat__avatar-image{{\n isLoaded ? ' str-chat__avatar-image--loaded' : ''\n }}\"\n src=\"{{ imageUrl }}\"\n alt=\"{{ initials }}\"\n data-testid=\"avatar-img\"\n (load)=\"isLoaded = true\"\n (error)=\"isError = true\"\n [style]=\"{\n flexBasis: size + 'px',\n height: size + 'px',\n objectFit: 'cover',\n width: size + 'px'\n }\"\n />\n <ng-template #fallback>\n <div data-testid=\"fallback-img\" class=\"str-chat__avatar-fallback\">\n {{ initials }}\n </div>\n </ng-template>\n</div>\n","import { Component, Input } from '@angular/core';\n\nexport type Icon =\n | 'action-icon'\n | 'delivered-icon'\n | 'reaction-icon'\n | 'connection-error'\n | 'send'\n | 'file-upload'\n | 'retry'\n | 'close'\n | 'file';\n\n@Component({\n selector: 'stream-icon',\n templateUrl: './icon.component.html',\n styles: [],\n})\nexport class IconComponent {\n @Input() icon: Icon | undefined;\n @Input() size: number | undefined;\n constructor() {}\n}\n","<svg\n data-testid=\"action-icon\"\n *ngIf=\"icon === 'action-icon'\"\n height=\"4\"\n viewBox=\"0 0 11 4\"\n width=\"11\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z\"\n fillRule=\"nonzero\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'delivered-icon'\"\n height=\"16\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"delivered-icon\"\n>\n <path\n d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zm3.72 6.633a.955.955 0 1 0-1.352-1.352L6.986 8.663 5.633 7.31A.956.956 0 1 0 4.28 8.663l2.029 2.028a.956.956 0 0 0 1.353 0l4.058-4.058z\"\n fill=\"#006CFF\"\n fillRule=\"evenodd\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'reaction-icon'\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n width=\"12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"reaction-icon\"\n>\n <g clipRule=\"evenodd\" fillRule=\"evenodd\">\n <path\n d=\"M6 1.2C3.3 1.2 1.2 3.3 1.2 6c0 2.7 2.1 4.8 4.8 4.8 2.7 0 4.8-2.1 4.8-4.8 0-2.7-2.1-4.8-4.8-4.8zM0 6c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z\"\n ></path>\n <path\n d=\"M5.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM8.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM3.3 6.7c.3-.2.6-.1.8.1.3.4.8.9 1.5 1 .6.2 1.4.1 2.4-1 .2-.2.6-.3.8 0 .2.2.3.6 0 .8-1.1 1.3-2.4 1.7-3.5 1.5-1-.2-1.8-.9-2.2-1.5-.2-.3-.1-.7.2-.9z\"\n ></path>\n </g>\n</svg>\n<svg\n data-testid=\"connection-error\"\n *ngIf=\"icon === 'connection-error'\"\n width=\"78px\"\n height=\"78px\"\n viewBox=\"0 0 78 78\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n>\n <!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->\n <title>Combined Shape</title>\n <desc>Created with Sketch.</desc>\n <g\n id=\"Interactions\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n >\n <g\n id=\"Connection-Error-_-Connectivity\"\n transform=\"translate(-270.000000, -30.000000)\"\n fill=\"#CF1F25\"\n >\n <g\n id=\"109-network-connection\"\n transform=\"translate(270.000000, 30.000000)\"\n >\n <path\n d=\"M66.4609744,11.414231 C81.6225232,26.5757798 81.6225232,51.157545 66.4609744,66.3188467 C51.2994256,81.4803954 26.7176604,81.4803954 11.5563587,66.3188467 C-3.60519004,51.1572979 -3.60519004,26.5755327 11.5563587,11.414231 C26.7179075,-3.74731776 51.2996727,-3.74731776 66.4609744,11.414231 Z M54.7853215,45.8823776 L54.7853215,40.5882574 C54.7853215,39.613638 53.9952341,38.8235506 53.0206147,38.8235506 L44.9576695,38.8235506 L41.428256,42.3529641 L51.255555,42.3529641 L51.255555,45.8823776 L54.7853215,45.8823776 Z M40.6659027,43.1153174 L37.8988425,45.8823776 L40.6659027,45.8823776 L40.6659027,43.1153174 Z M51.1764962,56.4702653 L58.2353232,56.4702653 C59.2099355,56.4702653 60.00003,55.6801708 60.00003,54.7055585 L60.00003,51.176145 C60.00003,50.2015327 59.2099355,49.4114382 58.2353232,49.4114382 L51.1764962,49.4114382 C50.2018839,49.4114382 49.4117894,50.2015327 49.4117894,51.176145 L49.4117894,54.7055585 C49.4117894,55.6801708 50.2018839,56.4702653 51.1764962,56.4702653 Z M35.2941353,56.4702653 L42.3529624,56.4702653 C43.3275746,56.4702653 44.1176691,55.6801708 44.1176691,54.7055585 L44.1176691,51.176145 C44.1176691,50.2015327 43.3275746,49.4114382 42.3529624,49.4114382 L35.2941353,49.4114382 C34.319523,49.4114382 33.5294285,50.2015327 33.5294285,51.176145 L33.5294285,54.7055585 C33.5294285,55.6801708 34.319523,56.4702653 35.2941353,56.4702653 Z M56.6964989,19.0874231 C56.007381,18.3985134 54.8903216,18.3985134 54.2012036,19.087423 L45.882376,27.4062507 L45.882376,19.4117761 C45.882376,18.4371568 45.0922885,17.6470693 44.1176692,17.6470693 L33.5294286,17.6470693 C32.5548092,17.6470694 31.7647218,18.4371568 31.7647218,19.4117761 L31.7647218,30.0000167 C31.7647219,30.9746363 32.5548092,31.7647237 33.5294285,31.7647237 L41.5239031,31.7647237 L34.4650761,38.8235508 L24.7058947,38.8235508 C23.7312753,38.8235508 22.9411879,39.6136382 22.9411879,40.5882575 L22.9411879,45.8823778 L26.4706014,45.8823778 L26.4706014,42.3529643 L30.9356624,42.3529643 L23.8768354,49.4117914 L19.4117743,49.4117914 C18.4371549,49.4117914 17.6470675,50.2018788 17.6470675,51.1764981 L17.6470675,54.7059117 C17.6504049,54.9674302 17.7129076,55.2248042 17.8298886,55.4587302 L16.4456526,56.8429662 C15.7446193,57.5200453 15.7252005,58.6372282 16.4022825,59.3382615 C17.0793616,60.0392948 18.1965445,60.0587136 18.8975778,59.3816316 C18.9122847,59.3674273 18.9267436,59.3529684 18.940948,59.3382615 L56.6964963,21.5830662 C57.3856425,20.8939094 57.3856425,19.7765747 56.6964963,19.0874179 Z\"\n id=\"Combined-Shape\"\n ></path>\n </g>\n </g>\n </g>\n</svg>\n<svg\n *ngIf=\"icon === 'send'\"\n data-testid=\"send\"\n height=\"17\"\n viewBox=\"0 0 18 17\"\n width=\"18\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <title translate>streamChat.Send</title>\n <path\n d=\"M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z\"\n fill=\"#006cff\"\n fillRule=\"evenodd\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'file-upload'\"\n data-testid=\"file-upload\"\n height=\"14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <title translate>streamChat.Attach files</title>\n <path\n d=\"M1.667.333h10.666c.737 0 1.334.597 1.334 1.334v10.666c0 .737-.597 1.334-1.334 1.334H1.667a1.333 1.333 0 0 1-1.334-1.334V1.667C.333.93.93.333 1.667.333zm2 1.334a1.667 1.667 0 1 0 0 3.333 1.667 1.667 0 0 0 0-3.333zm-2 9.333v1.333h10.666v-4l-2-2-4 4-2-2L1.667 11z\"\n fillRule=\"nonzero\"\n />\n</svg>\n<svg\n data-testid=\"retry\"\n *ngIf=\"icon === 'retry'\"\n width=\"22\"\n height=\"20\"\n viewBox=\"0 0 22 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M20 5.535V2a1 1 0 0 1 2 0v6a1 1 0 0 1-1 1h-6a1 1 0 0 1 0-2h3.638l-2.975-2.653a8 8 0 1 0 1.884 8.32 1 1 0 1 1 1.886.666A10 10 0 1 1 5.175 1.245c3.901-2.15 8.754-1.462 11.88 1.667L20 5.535z\"\n fill=\"#FFF\"\n fill-rule=\"nonzero\"\n />\n</svg>\n<svg\n *ngIf=\"icon === 'close'\"\n data-testid=\"close\"\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 28 28\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n>\n <defs>\n <path\n d=\"M465 5c5.53 0 10 4.47 10 10s-4.47 10-10 10-10-4.47-10-10 4.47-10 10-10zm3.59 5L465 13.59 461.41 10 460 11.41l3.59 3.59-3.59 3.59 1.41 1.41 3.59-3.59 3.59 3.59 1.41-1.41-3.59-3.59 3.59-3.59-1.41-1.41z\"\n id=\"b\"\n />\n <filter\n x=\"-30%\"\n y=\"-30%\"\n width=\"160%\"\n height=\"160%\"\n filterUnits=\"objectBoundingBox\"\n id=\"a\"\n >\n <feOffset in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n <feGaussianBlur\n stdDeviation=\"2\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n />\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\"\n in=\"shadowBlurOuter1\"\n />\n </filter>\n </defs>\n <g transform=\"translate(-451 -1)\" fill-rule=\"nonzero\" fill=\"none\">\n <use fill=\"#000\" filter=\"url(#a)\" xlink:href=\"#b\" />\n <use fill=\"#FFF\" fill-rule=\"evenodd\" xlink:href=\"#b\" />\n </g>\n</svg>\n<svg\n *ngIf=\"icon === 'file'\"\n data-testid=\"file\"\n className=\"rfu-file-icon--small fa-file-fallback\"\n [attr.height]=\"size || 20\"\n [attr.width]=\"size || 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 512\"\n>\n <path\n d=\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z\"\n fill=\"#414D54\"\n />\n</svg>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'stream-loading-indicator',\n templateUrl: './loading-indicator.component.html',\n styles: [],\n})\nexport class LoadingIndicatorComponent {\n @Input() size = 15;\n @Input() color = '#006CFF';\n\n constructor() {}\n}\n","<div class=\"str-chat__loading-indicator\">\n <svg\n [attr.height]=\"size\"\n viewBox=\"0 0 30 30\"\n [attr.width]=\"size\"\n data-testid=\"loading-indicator\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <linearGradient id=\"a\" x1=\"50%\" x2=\"50%\" y1=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"#FFF\" stop-opacity=\"0\" />\n <stop\n data-testid=\"stop-color\"\n offset=\"100%\"\n [attr.stop-color]=\"color\"\n stop-opacity=\"1\"\n [ngStyle]=\"{ stopColor: color }\"\n />\n </linearGradient>\n </defs>\n <path\n d=\"M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z\"\n fill=\"url(#a)\"\n fillRule=\"evenodd\"\n />\n </svg>\n</div>\n","import { InjectionToken, Type } from '@angular/core';\nimport { TextareaInterface } from './message-input/textarea.interface';\n\nexport const textareaInjectionToken = new InjectionToken<\n Type<TextareaInterface>\n>('textareaInjectionToken');\n","import {\n ComponentRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Directive } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { UserResponse } from 'stream-chat';\nimport { MentionAutcompleteListItemContext } from '../types';\nimport { TextareaInterface } from './textarea.interface';\n\n@Directive({\n selector: '[streamTextarea]',\n})\nexport class TextareaDirective implements OnChanges {\n @Input() componentRef: ComponentRef<TextareaInterface> | undefined;\n @Input() areMentionsEnabled: boolean | undefined;\n @Input() mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n @Input() mentionScope?: 'channel' | 'application';\n @Input() value = '';\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly send = new EventEmitter<void>();\n @Output() readonly userMentions = new EventEmitter<UserResponse[]>();\n private subscriptions: Subscription[] = [];\n private unpropagatedChanges: SimpleChanges[] = [];\n constructor(public viewContainerRef: ViewContainerRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.unpropagatedChanges.push(changes);\n if (!this.componentRef) {\n return;\n }\n if (changes.componentRef) {\n this.subscriptions.forEach((s) => s.unsubscribe());\n if (this.componentRef) {\n this.subscriptions.push(\n this.componentRef.instance.valueChange.subscribe((value) =>\n this.valueChange.next(value)\n )\n );\n this.subscriptions.push(\n this.componentRef.instance.send.subscribe((value) =>\n this.send.next(value)\n )\n );\n if (this.componentRef.instance.userMentions) {\n this.subscriptions.push(\n this.componentRef.instance.userMentions.subscribe((value) =>\n this.userMentions.next(value)\n )\n );\n }\n this.componentRef.instance.areMentionsEnabled = this.areMentionsEnabled;\n this.componentRef.instance.mentionAutocompleteItemTemplate =\n this.mentionAutocompleteItemTemplate;\n this.componentRef.instance.mentionScope = this.mentionScope;\n this.componentRef.instance.value = this.value;\n }\n }\n if (changes.areMentionsEnabled) {\n this.componentRef.instance.areMentionsEnabled = this.areMentionsEnabled;\n }\n if (changes.mentionAutocompleteItemTemplate) {\n this.componentRef.instance.mentionAutocompleteItemTemplate =\n this.mentionAutocompleteItemTemplate;\n }\n if (changes.mentionScope) {\n this.componentRef.instance.mentionScope = this.mentionScope;\n }\n if (changes.value) {\n this.componentRef.instance.value = this.value;\n }\n // ngOnChanges not called for dynamic components since we don't use template binding\n let changesToPropagate = {};\n this.unpropagatedChanges.forEach(\n (c) => (changesToPropagate = { ...changesToPropagate, ...c })\n );\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.componentRef.instance.ngOnChanges(changesToPropagate);\n this.unpropagatedChanges = [];\n }\n}\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { MentionAutcompleteListItemContext } from '../types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MessageInputConfigService {\n isFileUploadEnabled: boolean | undefined = true;\n areMentionsEnabled: boolean | undefined = true;\n mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n /**\n * @deprecated https://getstream.io/chat/docs/sdk/angular/services/message-input-config/#overview\n */\n acceptedFileTypes: string[] | undefined;\n isMultipleFileUploadEnabled: boolean | undefined = true;\n mentionScope: 'channel' | 'application' | undefined = 'channel';\n\n constructor() {}\n}\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AttachmentService } from '../attachment.service';\nimport { AttachmentUpload } from '../types';\n\n@Component({\n selector: 'stream-attachment-preview-list',\n templateUrl: './attachment-preview-list.component.html',\n styles: [],\n})\nexport class AttachmentPreviewListComponent {\n attachmentUploads$: Observable<AttachmentUpload[]>;\n\n constructor(private attachmentService: AttachmentService) {\n this.attachmentUploads$ = this.attachmentService.attachmentUploads$;\n }\n\n async retryAttachmentUpload(file: File) {\n await this.attachmentService.retryAttachmentUpload(file);\n }\n\n async deleteAttachment(upload: AttachmentUpload) {\n await this.attachmentService.deleteAttachment(upload);\n }\n\n trackByFile(_: number, item: AttachmentUpload) {\n return item.file;\n }\n}\n","<div class=\"rfu-image-previewer\">\n <ng-container\n *ngFor=\"\n let attachmentUpload of attachmentUploads$ | async;\n trackBy: trackByFile\n \"\n >\n <div\n *ngIf=\"attachmentUpload.type === 'image'\"\n class=\"rfu-image-previewer__image\"\n [class.rfu-image-previewer__image--loaded]=\"\n attachmentUpload.state === 'success'\n \"\n data-testclass=\"attachment-image-preview\"\n >\n <div\n *ngIf=\"attachmentUpload.state === 'error'\"\n class=\"rfu-image-previewer__retry\"\n (click)=\"retryAttachmentUpload(attachmentUpload.file)\"\n (keyup.enter)=\"retryAttachmentUpload(attachmentUpload.file)\"\n data-testclass=\"upload-error\"\n >\n <stream-icon icon=\"retry\"></stream-icon>\n </div>\n <div class=\"rfu-thumbnail__wrapper\" style=\"width: 100; height: 100\">\n <div class=\"rfu-thumbnail__overlay\">\n <div\n class=\"rfu-icon-button\"\n data-testclass=\"delete-attachment\"\n role=\"button\"\n (click)=\"deleteAttachment(attachmentUpload)\"\n (keyup.enter)=\"deleteAttachment(attachmentUpload)\"\n >\n <stream-icon icon=\"close\"></stream-icon>\n </div>\n </div>\n <img\n *ngIf=\"attachmentUpload.url || attachmentUpload.previewUri\"\n src=\"{{\n attachmentUpload.url\n ? attachmentUpload.url\n : attachmentUpload.previewUri\n }}\"\n alt=\"attachmentUpload.file.name\"\n class=\"rfu-thumbnail__image\"\n data-testclass=\"attachment-image\"\n />\n </div>\n <stream-loading-indicator\n data-testclass=\"loading-indicator\"\n color=\"rgba(255,255,255,0.7)\"\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n ></stream-loading-indicator>\n </div>\n <div\n class=\"rfu-file-previewer\"\n *ngIf=\"attachmentUpload.type === 'file'\"\n data-testclass=\"attachment-file-preview\"\n >\n <ol>\n <li\n class=\"rfu-file-previewer__file\"\n [class.rfu-file-previewer__file--uploading]=\"\n attachmentUpload.state === 'uploading'\n \"\n [class.rfu-file-previewer__file--failed]=\"\n attachmentUpload.state === 'error'\n \"\n >\n <stream-icon icon=\"file\"></stream-icon>\n\n <a\n data-testclass=\"file-download-link\"\n href=\"{{ attachmentUpload.url }}\"\n (click)=\"attachmentUpload.url ? null : $event.preventDefault()\"\n (keyup.enter)=\"\n attachmentUpload.url ? null : $event.preventDefault()\n \"\n download\n >\n {{ attachmentUpload.file.name }}\n <ng-container *ngIf=\"attachmentUpload.state === 'error'\">\n <div\n data-testclass=\"file-upload-retry\"\n class=\"rfu-file-previewer__failed\"\n (click)=\"retryAttachmentUpload(attachmentUpload.file)\"\n (keyup.enter)=\"retryAttachmentUpload(attachmentUpload.file)\"\n translate\n >\n streamChat.failed\n </div>\n <div\n class=\"rfu-file-previewer__retry\"\n (click)=\"retryAttachmentUpload(attachmentUpload.file)\"\n (keyup.enter)=\"retryAttachmentUpload(attachmentUpload.file)\"\n translate\n >\n streamChat.retry\n </div>\n </ng-container>\n </a>\n\n <span\n data-testclass=\"file-delete\"\n class=\"rfu-file-previewer__close-button\"\n (click)=\"deleteAttachment(attachmentUpload)\"\n (keyup.enter)=\"deleteAttachment(attachmentUpload)\"\n >\n ✘\n </span>\n <div\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n class=\"rfu-file-previewer__loading-indicator\"\n >\n <stream-loading-indicator></stream-loading-indicator>\n </div>\n </li>\n </ol>\n </div>\n </ng-container>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewChild,\n} from '@angular/core';\nimport { ChatClientService } from '../chat-client.service';\nimport { Observable, Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { AppSettings, UserResponse } from 'stream-chat';\nimport { AttachmentService } from '../attachment.service';\nimport { ChannelService } from '../channel.service';\nimport { textareaInjectionToken } from '../injection-tokens';\nimport { NotificationService } from '../notification.service';\nimport {\n AttachmentUpload,\n MentionAutcompleteListItemContext,\n StreamMessage,\n} from '../types';\nimport { MessageInputConfigService } from './message-input-config.service';\nimport { TextareaDirective } from './textarea.directive';\nimport { TextareaInterface } from './textarea.interface';\nimport { isImageFile } from '../is-image-file';\n\n@Component({\n selector: 'stream-message-input',\n templateUrl: './message-input.component.html',\n styles: [],\n providers: [AttachmentService],\n})\nexport class MessageInputComponent\n implements OnChanges, OnDestroy, AfterViewInit\n{\n @Input() isFileUploadEnabled: boolean | undefined;\n @Input() areMentionsEnabled: boolean | undefined;\n @Input() mentionScope: 'channel' | 'application' | undefined;\n @Input() mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n /**\n * @deprecated https://getstream.io/chat/docs/sdk/angular/components/message-input/#caution-acceptedfiletypes\n */\n @Input() acceptedFileTypes: string[] | undefined;\n @Input() isMultipleFileUploadEnabled: boolean | undefined;\n @Input() message: StreamMessage | undefined;\n @Output() readonly messageUpdate = new EventEmitter<void>();\n isFileUploadAuthorized: boolean | undefined;\n canSendLinks: boolean | undefined;\n canSendMessages: boolean | undefined;\n attachmentUploads$: Observable<AttachmentUpload[]>;\n textareaValue = '';\n textareaRef: ComponentRef<TextareaInterface> | undefined;\n mentionedUsers: UserResponse[] = [];\n @ViewChild('fileInput') private fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild(TextareaDirective, { static: false })\n private textareaAnchor!: TextareaDirective;\n private subscriptions: Subscription[] = [];\n private hideNotification: Function | undefined;\n private isViewInited = false;\n private appSettings: AppSettings | undefined;\n\n constructor(\n private channelService: ChannelService,\n private notificationService: NotificationService,\n private attachmentService: AttachmentService,\n private configService: MessageInputConfigService,\n @Inject(textareaInjectionToken)\n private textareaType: Type<TextareaInterface>,\n private componentFactoryResolver: ComponentFactoryResolver,\n private cdRef: ChangeDetectorRef,\n private chatClient: ChatClientService\n ) {\n this.subscriptions.push(\n this.attachmentService.attachmentUploadInProgressCounter$.subscribe(\n (counter) => {\n if (counter === 0 && this.hideNotification) {\n this.hideNotification();\n this.hideNotification = undefined;\n }\n }\n )\n );\n this.subscriptions.push(\n this.channelService.activeChannel$.subscribe((channel) => {\n this.textareaValue = '';\n this.attachmentService.resetAttachmentUploads();\n const capabilities = channel?.data?.own_capabilities as string[];\n if (capabilities) {\n this.isFileUploadAuthorized =\n capabilities.indexOf('upload-file') !== -1;\n this.canSendLinks = capabilities.indexOf('send-links') !== -1;\n this.canSendMessages = capabilities.indexOf('send-message') !== -1;\n if (this.isViewInited) {\n this.cdRef.detectChanges();\n this.initTextarea();\n }\n }\n })\n );\n this.subscriptions.push(\n this.chatClient.appSettings$.subscribe(\n (appSettings) => (this.appSettings = appSettings)\n )\n );\n this.attachmentUploads$ = this.attachmentService.attachmentUploads$;\n this.isFileUploadEnabled = this.configService.isFileUploadEnabled;\n this.acceptedFileTypes = this.configService.acceptedFileTypes;\n this.isMultipleFileUploadEnabled =\n this.configService.isMultipleFileUploadEnabled;\n this.areMentionsEnabled = this.configService.areMentionsEnabled;\n this.mentionAutocompleteItemTemplate =\n this.configService.mentionAutocompleteItemTemplate;\n this.mentionScope = this.configService.mentionScope;\n }\n\n ngAfterViewInit(): void {\n this.isViewInited = true;\n this.initTextarea();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.message) {\n this.attachmentService.resetAttachmentUploads();\n if (this.isUpdate) {\n this.attachmentService.createFromAttachments(\n this.message!.attachments || []\n );\n this.textareaValue = this.message!.text || '';\n }\n }\n if (changes.isFileUploadEnabled) {\n this.configService.isFileUploadEnabled = this.isFileUploadEnabled;\n }\n if (changes.acceptedFileTypes) {\n this.configService.acceptedFileTypes = this.acceptedFileTypes;\n }\n if (changes.isMultipleFileUploadEnabled) {\n this.configService.isMultipleFileUploadEnabled =\n this.isMultipleFileUploadEnabled;\n }\n if (changes.areMentionsEnabled) {\n this.configService.areMentionsEnabled = this.areMentionsEnabled;\n }\n if (changes.mentionAutocompleteItemTemplate) {\n this.configService.mentionAutocompleteItemTemplate =\n this.mentionAutocompleteItemTemplate;\n }\n if (changes.mentionScope) {\n this.configService.mentionScope = this.mentionScope;\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n async messageSent() {\n let attachmentUploadInProgressCounter!: number;\n this.attachmentService.attachmentUploadInProgressCounter$\n .pipe(first())\n .subscribe((counter) => (attachmentUploadInProgressCounter = counter));\n if (attachmentUploadInProgressCounter > 0) {\n if (!this.hideNotification) {\n this.hideNotification =\n this.notificationService.addPermanentNotification(\n 'streamChat.Wait until all attachments have uploaded'\n );\n }\n return;\n }\n const attachments = this.attachmentService.mapToAttachments();\n const text = this.textareaValue;\n if (!text && (!attachments || attachments.length === 0)) {\n return;\n }\n if (this.containsLinks && !this.canSendLinks) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Sending links is not allowed in this conversation'\n );\n return;\n }\n if (!this.isUpdate) {\n this.textareaValue = '';\n }\n try {\n await (this.isUpdate\n ? this.channelService.updateMessage({\n ...this.message!,\n text: text,\n attachments: attachments,\n })\n : this.channelService.sendMessage(\n text,\n attachments,\n this.mentionedUsers\n ));\n this.messageUpdate.emit();\n if (!this.isUpdate) {\n this.attachmentService.resetAttachmentUploads();\n }\n } catch (error) {\n if (this.isUpdate) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Edit message request failed'\n );\n }\n }\n }\n\n get containsLinks() {\n return /(?:(?:https?|ftp):\\/\\/)?[\\w/\\-?=%.]+\\.[\\w/\\-&?=%.]+/.test(\n this.textareaValue\n );\n }\n\n get accept() {\n return this.acceptedFileTypes ? this.acceptedFileTypes?.join(',') : '';\n }\n\n async filesSelected(fileList: FileList | null) {\n if (!(await this.areAttachemntsValid(fileList))) {\n return;\n }\n await this.attachmentService.filesSelected(fileList);\n this.clearFileInput();\n }\n\n private clearFileInput() {\n this.fileInput.nativeElement.value = '';\n }\n\n private get isUpdate() {\n return !!this.message;\n }\n\n private initTextarea() {\n if (!this.canSendMessages || this.textareaRef || !this.textareaAnchor) {\n return;\n }\n const componentFactory =\n this.componentFactoryResolver.resolveComponentFactory(this.textareaType);\n this.textareaRef =\n this.textareaAnchor.viewContainerRef.createComponent<any>(\n componentFactory\n );\n this.cdRef.detectChanges();\n }\n\n private async areAttachemntsValid(fileList: FileList | null) {\n if (!fileList || this.acceptedFileTypes) {\n return true;\n }\n if (!this.appSettings) {\n await this.chatClient.getAppSettings();\n }\n let isValid = true;\n Array.from(fileList).forEach((f) => {\n let hasBlockedExtension: boolean;\n let hasBlockedMimeType: boolean;\n let hasNotAllowedExtension: boolean;\n let hasNotAllowedMimeType: boolean;\n if (isImageFile(f)) {\n hasBlockedExtension =\n !!this.appSettings?.image_upload_config?.blocked_file_extensions?.find(\n (ext) => f.name.endsWith(ext)\n );\n hasBlockedMimeType =\n !!this.appSettings?.image_upload_config?.blocked_mime_types?.find(\n (type) => f.type === type\n );\n hasNotAllowedExtension =\n !!this.appSettings?.image_upload_config?.allowed_file_extensions\n ?.length &&\n !this.appSettings?.image_upload_config?.allowed_file_extensions?.find(\n (ext) => f.name.endsWith(ext)\n );\n hasNotAllowedMimeType =\n !!this.appSettings?.image_upload_config?.allowed_mime_types?.length &&\n !this.appSettings?.image_upload_config?.allowed_mime_types?.find(\n (type) => f.type === type\n );\n } else {\n hasBlockedExtension =\n !!this.appSettings?.file_upload_config?.blocked_file_extensions?.find(\n (ext) => f.name.endsWith(ext)\n );\n hasBlockedMimeType =\n !!this.appSettings?.file_upload_config?.blocked_mime_types?.find(\n (type) => f.type === type\n );\n hasNotAllowedExtension =\n !!this.appSettings?.file_upload_config?.allowed_file_extensions\n ?.length &&\n !this.appSettings?.file_upload_config?.allowed_file_extensions?.find(\n (ext) => f.name.endsWith(ext)\n );\n hasNotAllowedMimeType =\n !!this.appSettings?.file_upload_config?.allowed_mime_types?.length &&\n !this.appSettings?.file_upload_config?.allowed_mime_types?.find(\n (type) => f.type === type\n );\n }\n if (\n hasBlockedExtension ||\n hasBlockedMimeType ||\n hasNotAllowedExtension ||\n hasNotAllowedMimeType\n ) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Unsupported file type: {{type}}',\n undefined,\n undefined,\n { type: f.type }\n );\n isValid = false;\n }\n });\n return isValid;\n }\n}\n","<div\n class=\"str-chat__input-flat\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n>\n <div class=\"str-chat__input-flat-wrapper\">\n <div class=\"str-chat__input-flat--textarea-wrapper\">\n <stream-attachment-preview-list\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n <div class=\"rta str-chat__textarea\">\n <ng-template\n *ngIf=\"canSendMessages; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionAutocompleteItemTemplate]=\"mentionAutocompleteItemTemplate\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"\n 'streamChat.You can\\'t send messages in this channel' | translate\n \"\n class=\"rta__textarea str-chat__textarea__textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"isFileUploadEnabled && isFileUploadAuthorized && canSendMessages\"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [accept]=\"accept\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon icon=\"file-upload\"></stream-icon>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon icon=\"send\"></stream-icon>\n </button>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\n@Component({\n selector: 'stream-modal',\n templateUrl: './modal.component.html',\n styles: [],\n})\nexport class ModalComponent implements OnChanges {\n @Input() isOpen = false;\n @Output() readonly isOpenChange = new EventEmitter<boolean>();\n @ViewChild('content') private content: ElementRef<HTMLElement> | undefined;\n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isOpen) {\n if (this.isOpen) {\n window.addEventListener('keyup', this.watchForEscPress);\n setTimeout(\n () => window.addEventListener('click', this.watchForOutsideClicks),\n 0\n );\n } else {\n this.stopWatchForOutsideClicks();\n this.stopWatchForEscPress();\n }\n }\n }\n\n close() {\n this.isOpen = false;\n this.isOpenChange.emit(false);\n this.stopWatchForOutsideClicks();\n this.stopWatchForEscPress();\n }\n\n private watchForEscPress = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.close();\n }\n };\n\n private stopWatchForEscPress = () => {\n window.removeEventListener('keyup', this.watchForEscPress);\n };\n\n private watchForOutsideClicks = (event: Event) => {\n if (!this.content?.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n };\n\n private stopWatchForOutsideClicks() {\n window.removeEventListener('click', this.watchForOutsideClicks);\n }\n}\n","<div\n data-testid=\"modal\"\n class=\"str-chat__modal str-chat__modal--{{ isOpen ? 'open' : 'close' }}\"\n>\n <div\n data-testid=\"close\"\n class=\"str-chat__modal__close-button\"\n (click)=\"close()\"\n (keyup.enter)=\"close()\"\n translate\n >\n streamChat.Close\n <stream-icon icon=\"close\"></stream-icon>\n </div>\n <div class=\"str-chat__modal__inner\" #content>\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { NotificationType } from '../notification.service';\n\n@Component({\n selector: 'stream-notification',\n templateUrl: './notification.component.html',\n styles: [],\n})\nexport class NotificationComponent {\n @Input() type: NotificationType | undefined;\n\n constructor() {}\n}\n","<div\n class=\"str-chat__custom-notification notification-{{ type }}\"\n data-testid=\"custom-notification\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n NotificationPayload,\n NotificationService,\n} from '../notification.service';\n\n@Component({\n selector: 'stream-notification-list',\n templateUrl: './notification-list.component.html',\n styles: [],\n})\nexport class NotificationListComponent {\n notifications$: Observable<NotificationPayload[]>;\n\n constructor(private notificationService: NotificationService) {\n this.notifications$ = this.notificationService.notifications$;\n }\n\n trackByItem(_: number, item: NotificationPayload) {\n return item;\n }\n}\n","<div class=\"str-chat__list-notifications\">\n <stream-notification\n *ngFor=\"let notification of notifications$ | async; trackBy: trackByItem\"\n [type]=\"notification.type\"\n ><div data-testclass=\"notification-content\">\n {{ notification.text | translate: notification.translateParams }}\n </div></stream-notification\n >\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { ChannelService } from '../channel.service';\nimport { ChatClientService } from '../chat-client.service';\nimport { MessageInputComponent } from '../message-input/message-input.component';\nimport { NotificationService } from '../notification.service';\nimport { StreamMessage } from '../types';\n\nexport type MessageActions =\n | 'edit'\n | 'delete'\n | 'edit-any'\n | 'delete-any'\n | 'pin'\n | 'quote'\n | 'flag'\n | 'mute';\n\n@Component({\n selector: 'stream-message-actions-box',\n templateUrl: './message-actions-box.component.html',\n styles: [],\n})\nexport class MessageActionsBoxComponent implements OnChanges {\n @Input() messageInputTemplate: TemplateRef<any> | undefined;\n @Input() isOpen = false;\n @Input() isMine = false;\n @Input() message: StreamMessage | undefined;\n @Input() enabledActions: MessageActions[] = [];\n @Output() readonly displayedActionsCount = new EventEmitter<number>();\n @Output() readonly isEditing = new EventEmitter<boolean>();\n isEditModalOpen = false;\n @ViewChild(MessageInputComponent) private messageInput:\n | MessageInputComponent\n | undefined;\n\n constructor(\n private chatClientService: ChatClientService,\n private notificationService: NotificationService,\n private channelService: ChannelService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isMine || changes.enabledActions) {\n let displayedActionsCount = 0;\n if (this.isQuoteVisible) {\n displayedActionsCount++;\n }\n if (this.isEditVisible) {\n displayedActionsCount++;\n }\n if (this.isDeleteVisible) {\n displayedActionsCount++;\n }\n if (this.isMuteVisible) {\n displayedActionsCount++;\n }\n if (this.isFlagVisible) {\n displayedActionsCount++;\n }\n if (this.isPinVisible) {\n displayedActionsCount++;\n }\n this.displayedActionsCount.next(displayedActionsCount);\n }\n }\n\n get isQuoteVisible() {\n return this.enabledActions.indexOf('quote') !== -1;\n }\n\n get isEditVisible() {\n return (\n (this.enabledActions.indexOf('edit') !== -1 && this.isMine) ||\n this.enabledActions.indexOf('edit-any') !== -1\n );\n }\n\n get isDeleteVisible() {\n return (\n (this.enabledActions.indexOf('delete') !== -1 && this.isMine) ||\n this.enabledActions.indexOf('delete-any') !== -1\n );\n }\n\n get isMuteVisible() {\n return this.enabledActions.indexOf('mute') !== -1;\n }\n\n get isFlagVisible() {\n return this.enabledActions.indexOf('flag') !== -1 && !this.isMine;\n }\n\n get isPinVisible() {\n return this.enabledActions.indexOf('pin') !== -1;\n }\n\n pinClicked() {\n alert('Feature not yet implemented');\n }\n\n async flagClicked() {\n try {\n await this.chatClientService.flagMessage(this.message!.id);\n this.notificationService.addTemporaryNotification(\n 'streamChat.Message has been successfully flagged',\n 'success'\n );\n } catch (err) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Error adding flag'\n );\n }\n }\n\n muteClicked() {\n alert('Feature not yet implemented');\n }\n\n quoteClicked() {\n alert('Feature not yet implemented');\n }\n\n editClicked() {\n this.isEditing.emit(true);\n this.isEditModalOpen = true;\n }\n\n sendClicked() {\n this.messageInput?.messageSent();\n }\n\n modalClosed = () => {\n this.isEditModalOpen = false;\n this.isEditing.emit(false);\n };\n\n async deleteClicked() {\n try {\n await this.channelService.deleteMessage(this.message!);\n } catch (error) {\n this.notificationService.addTemporaryNotification(\n 'streamChat.Error deleting message'\n );\n }\n }\n}\n","<div\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box\"\n [class.str-chat__message-actions-box--open]=\"isOpen\"\n [class.str-chat__message-actions-box--mine]=\"isMine\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <button\n data-testid=\"quote-action\"\n *ngIf=\"isQuoteVisible\"\n (click)=\"quoteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Reply\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"pin-action\"\n *ngIf=\"isPinVisible\"\n (click)=\"pinClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{\n (message?.pinned ? \"streamChat.Unpin\" : \"streamChat.Pin\") | translate\n }}\n </li>\n </button>\n <button\n data-testid=\"flag-action\"\n *ngIf=\"isFlagVisible\"\n (click)=\"flagClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Flag\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"mute-action\"\n *ngIf=\"isMuteVisible\"\n (click)=\"muteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Mute\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"edit-action\"\n *ngIf=\"isEditVisible\"\n (click)=\"editClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Edit Message\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"delete-action\"\n *ngIf=\"isDeleteVisible\"\n (click)=\"deleteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Delete\" | translate }}\n </li>\n </button>\n </ul>\n</div>\n\n<stream-modal\n [isOpen]=\"isEditModalOpen\"\n (isOpenChange)=\"\n isEditModalOpen = $event; isEditModalOpen ? '' : modalClosed()\n \"\n>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-container *ngIf=\"messageInputTemplate; else defaultInput\">\n <ng-container\n *ngTemplateOutlet=\"\n messageInputTemplate;\n context: {\n message: message,\n messageUpdateHandler: modalClosed\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultInput>\n <stream-message-input\n [message]=\"message\"\n (messageUpdate)=\"modalClosed()\"\n ></stream-message-input>\n </ng-template>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__message-team-form-footer\">\n <div></div>\n <div>\n <button translate data-testid=\"cancel-button\" (click)=\"modalClosed()\">\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</stream-modal>\n","import { Component } from '@angular/core';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { catchError, map, startWith } from 'rxjs/operators';\nimport { ChannelService } from '../channel.service';\n\n@Component({\n selector: 'stream-channel',\n templateUrl: './channel.component.html',\n styles: [],\n})\nexport class ChannelComponent {\n isError$: Observable<boolean>;\n isInitializing$: Observable<boolean>;\n subscriptions: Subscription[] = [];\n\n constructor(private channelService: ChannelService) {\n this.isError$ = this.channelService.channels$.pipe(\n map(() => false),\n catchError(() => of(true)),\n startWith(false)\n );\n this.isInitializing$ = this.channelService.channels$.pipe(\n map((channels) => !channels),\n catchError(() => of(false))\n );\n }\n}\n","<div\n *ngIf=\"(isError$ | async) === false && (isInitializing$ | async) === false\"\n class=\"str-chat str-chat-channel messaging\"\n>\n <div class=\"str-chat__container\">\n <div class=\"str-chat__main-panel\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","export type DeviceWidth = {\n device: 'mobile' | 'tablet' | 'full';\n width: number;\n};\n\nexport const getDeviceWidth = (): DeviceWidth => {\n const width = window.innerWidth;\n if (width < 768) return { device: 'mobile', width };\n if (width < 1024) return { device: 'tablet', width };\n return { device: 'full', width };\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, first } from 'rxjs/operators';\nimport { getDeviceWidth } from '../device-width';\n\n@Injectable({ providedIn: 'root' })\nexport class ChannelListToggleService {\n isOpen$: Observable<boolean>;\n private isOpenSubject = new BehaviorSubject<boolean>(false);\n private menuElement: HTMLElement | undefined;\n\n constructor() {\n this.isOpen$ = this.isOpenSubject\n .asObservable()\n .pipe(distinctUntilChanged());\n this.isOpen$.pipe(filter((s) => s)).subscribe(() => {\n if (getDeviceWidth().device === 'mobile') {\n this.watchForOutsideClicks();\n }\n });\n }\n\n open() {\n this.isOpenSubject.next(true);\n }\n\n close() {\n this.isOpenSubject.next(false);\n }\n\n toggle() {\n this.isOpenSubject.getValue() ? this.close() : this.open();\n }\n\n setMenuElement(element: HTMLElement | undefined) {\n this.menuElement = element;\n }\n\n channelSelected() {\n if (getDeviceWidth().device === 'mobile') {\n this.close();\n }\n }\n\n private watchForOutsideClicks() {\n if (!this.menuElement) {\n return;\n }\n const eventHandler = (event: Event) => {\n if (!this.menuElement!.contains(event.target as Node)) {\n this.close();\n window.removeEventListener('click', eventHandler);\n }\n };\n window.addEventListener('click', eventHandler);\n this.isOpen$\n .pipe(\n filter((s) => !s),\n first()\n )\n .subscribe(() => window.removeEventListener('click', eventHandler));\n }\n}\n","import { Component } from '@angular/core';\nimport { Channel } from 'stream-chat';\nimport { ChannelListToggleService } from '../channel-list/channel-list-toggle.service';\nimport { ChannelService } from '../channel.service';\n\n@Component({\n selector: 'stream-channel-header',\n templateUrl: './channel-header.component.html',\n styles: [],\n})\nexport class ChannelHeaderComponent {\n activeChannel: Channel | undefined;\n canReceiveConnectEvents: boolean | undefined;\n\n constructor(\n private channelService: ChannelService,\n private channelListToggleService: ChannelListToggleService\n ) {\n this.channelService.activeChannel$.subscribe((c) => {\n this.activeChannel = c;\n const capabilities = this.activeChannel?.data\n ?.own_capabilities as string[];\n if (!capabilities) {\n return;\n }\n this.canReceiveConnectEvents =\n capabilities.indexOf('connect-events') !== -1;\n });\n }\n\n toggleMenu(event: Event) {\n event.stopPropagation();\n this.channelListToggleService.toggle();\n }\n\n get memberCountParam() {\n return { memberCount: this.activeChannel?.data?.member_count || 0 };\n }\n\n get watcherCountParam() {\n return { watcherCount: this.activeChannel?.state?.watcher_count || 0 };\n }\n}\n","<div class=\"str-chat__header-livestream\">\n <div\n class=\"str-chat__header-hamburger\"\n (click)=\"toggleMenu($event)\"\n (keyup.enter)=\"toggleMenu($event)\"\n >\n <span class=\"str-chat__header-hamburger--line\"></span>\n <span class=\"str-chat__header-hamburger--line\"></span>\n <span class=\"str-chat__header-hamburger--line\"></span>\n </div>\n <stream-avatar\n imageUrl=\"{{ activeChannel?.data?.image }}\"\n name=\"{{ activeChannel?.data?.name }}\"\n ></stream-avatar>\n <div class=\"str-chat__header-livestream-left\">\n <p data-testid=\"name\" class=\"str-chat__header-livestream-left--title\">\n {{ activeChannel?.data?.name }}\n </p>\n <p data-testid=\"info\" class=\"str-chat__header-livestream-left--members\">\n {{'streamChat.{{ memberCount }} members' | translate:memberCountParam}}\n {{canReceiveConnectEvents ? ('streamChat.{{ watcherCount }} online' |\n translate:watcherCountParam) : ''}}\n </p>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport {\n Channel,\n Event,\n FormatMessageResponse,\n MessageResponse,\n} from 'stream-chat';\nimport { ChannelService } from '../channel.service';\n\n@Component({\n selector: 'stream-channel-preview',\n templateUrl: './channel-preview.component.html',\n styles: [],\n})\nexport class ChannelPreviewComponent implements OnInit, OnDestroy {\n @Input() channel: Channel | undefined;\n isActive = false;\n isUnread = false;\n latestMessage: string = 'Nothing yet...';\n private subscriptions: (Subscription | { unsubscribe: () => void })[] = [];\n private canSendReadEvents = true;\n\n constructor(private channelService: ChannelService) {}\n\n ngOnInit(): void {\n this.subscriptions.push(\n this.channelService.activeChannel$.subscribe(\n (activeChannel) =>\n (this.isActive = activeChannel?.id === this.channel?.id)\n )\n );\n const messages = this.channel?.state?.messages;\n if (messages && messages.length > 0) {\n this.setLatestMessage(messages[messages.length - 1]);\n }\n this.isUnread = !!this.channel!.countUnread() && this.canSendReadEvents;\n const capabilities =\n (this.channel?.data?.own_capabilities as string[]) || [];\n this.canSendReadEvents = capabilities.indexOf('read-events') !== -1;\n this.subscriptions.push(\n this.channel!.on('message.new', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on('message.updated', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on('message.deleted', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on('channel.truncated', this.handleMessageEvent.bind(this))\n );\n this.subscriptions.push(\n this.channel!.on(\n 'message.read',\n () =>\n (this.isUnread =\n !!this.channel!.countUnread() && this.canSendReadEvents)\n )\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n get avatarImage() {\n return this.channel?.data?.image;\n }\n\n get avatarName() {\n return this.channel?.data?.name;\n }\n\n get title() {\n return this.channel?.data?.name;\n }\n\n setAsActiveChannel(): void {\n void this.channelService.setAsActiveChannel(this.channel!);\n }\n\n private handleMessageEvent(event: Event) {\n if (this.channel?.state.messages.length === 0) {\n this.latestMessage = 'Nothing yet...';\n return;\n }\n if (\n !event.message ||\n this.channel?.state.messages[this.channel?.state.messages.length - 1]\n .id !== event.message.id\n ) {\n return;\n }\n this.setLatestMessage(event.message);\n this.isUnread = !!this.channel.countUnread() && this.canSendReadEvents;\n }\n\n private setLatestMessage(message?: FormatMessageResponse | MessageResponse) {\n if (message?.deleted_at) {\n this.latestMessage = 'streamChat.Message deleted';\n } else if (message?.text) {\n this.latestMessage = message.text;\n } else if (message?.attachments && message.attachments.length) {\n this.latestMessage = 'streamChat.🏙 Attachment...';\n }\n }\n}\n","<button\n class=\"str-chat__channel-preview-messenger\"\n [class.str-chat__channel-preview-messenger--active]=\"isActive\"\n [class.str-chat__channel-preview-messenger--unread]=\"isUnread\"\n (click)=\"setAsActiveChannel()\"\n data-testid=\"channel-preview-container\"\n>\n <div class=\"str-chat__channel-preview-messenger--left\">\n <stream-avatar\n imageUrl=\"{{ avatarImage }}\"\n name=\"{{ avatarName }}\"\n [size]=\"40\"\n ></stream-avatar>\n </div>\n <div class=\"str-chat__channel-preview-messenger--right\">\n <div class=\"str-chat__channel-preview-messenger--name\">\n <span data-testid=\"channel-preview-title\">{{ title }}</span>\n </div>\n <div\n data-testid=\"latest-message\"\n class=\"str-chat__channel-preview-messenger--last-message\"\n >\n {{ latestMessage | translate }}\n </div>\n </div>\n</button>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, startWith } from 'rxjs/operators';\nimport { Channel } from 'stream-chat';\nimport { ChannelService } from '../channel.service';\nimport { ChannelListToggleService } from './channel-list-toggle.service';\n\n@Component({\n selector: 'stream-channel-list',\n templateUrl: './channel-list.component.html',\n styles: [],\n})\nexport class ChannelListComponent implements AfterViewInit {\n @Input() customChannelPreviewTemplate: TemplateRef<any> | undefined;\n channels$: Observable<Channel[] | undefined>;\n isError$: Observable<boolean>;\n isInitializing$: Observable<boolean>;\n isLoadingMoreChannels = false;\n isOpen$: Observable<boolean>;\n hasMoreChannels$: Observable<boolean>;\n @ViewChild('container') private container!: ElementRef<HTMLElement>;\n\n constructor(\n private channelService: ChannelService,\n private channelListToggleService: ChannelListToggleService\n ) {\n this.isOpen$ = this.channelListToggleService.isOpen$;\n this.channels$ = this.channelService.channels$;\n this.hasMoreChannels$ = this.channelService.hasMoreChannels$;\n this.isError$ = this.channels$.pipe(\n map(() => false),\n catchError(() => of(true)),\n startWith(false)\n );\n this.isInitializing$ = this.channels$.pipe(\n map((channels) => !channels),\n catchError(() => of(false))\n );\n }\n ngAfterViewInit(): void {\n this.channelListToggleService.setMenuElement(this.container.nativeElement);\n }\n\n async loadMoreChannels() {\n this.isLoadingMoreChannels = true;\n await this.channelService.loadMoreChannels();\n this.isLoadingMoreChannels = false;\n }\n\n trackByChannelId(index: number, item: Channel) {\n return item.cid;\n }\n\n channelSelected() {\n this.channelListToggleService.channelSelected();\n }\n}\n","<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-channel-list messaging\"\n [class.str-chat-channel-list--open]=\"(isOpen$ | async) === true\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div class=\"str-chat__channel-list-messenger__main\">\n <p\n data-testid=\"empty-channel-list-indicator\"\n *ngIf=\"!(channels$ | async)?.length\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <ng-container\n *ngFor=\"let channel of channels$ | async; trackBy: trackByChannelId\"\n >\n <ng-container\n *ngIf=\"customChannelPreviewTemplate; else defaultTemplate\"\n >\n <div (click)=\"channelSelected()\" (keyup.enter)=\"channelSelected()\">\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate;\n context: { channel: channel }\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-template #defaultTemplate>\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channel\"\n (click)=\"channelSelected()\"\n (keyup.enter)=\"channelSelected()\"\n ></stream-channel-preview>\n </ng-template>\n </ng-container>\n <div\n *ngIf=\"hasMoreChannels$ | async\"\n class=\"str-chat__load-more-button\"\n (click)=\"loadMoreChannels()\"\n (keyup.enter)=\"loadMoreChannels()\"\n data-testid=\"load-more\"\n >\n <button\n class=\"str-chat__load-more-button__button\"\n data-testid=\"load-more-button\"\n [disabled]=\"isLoadingMoreChannels\"\n >\n <span *ngIf=\"!isLoadingMoreChannels; else loadingIndicator\">{{\n \"Load more\" | translate\n }}</span>\n <ng-template #loadingIndicator\n ><stream-loading-indicator></stream-loading-indicator\n ></ng-template>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n <div class=\"str-chat__down-main\">\n <stream-icon icon=\"connection-error\"></stream-icon>\n <h1>{{ \"streamChat.Connection error\" | translate }}</h1>\n <h3>\n {{\n \"streamChat.Error connecting to chat, refresh the page to try again.\"\n | translate\n }}\n </h3>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div data-testid=\"loading-indicator\" class=\"str-chat__loading-channels\">\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div class=\"str-chat__loading-channels-item\">\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div class=\"str-chat__loading-channels-meta\">\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n","import Dayjs from 'dayjs';\nimport calendar from 'dayjs/plugin/calendar';\n\nDayjs.extend(calendar);\n\nexport const parseDate = (date: Date) => {\n const parsedTime = Dayjs(date);\n\n return parsedTime.calendar();\n};\n","import { UserResponse } from 'stream-chat';\n\nexport const getReadByText = (users: UserResponse[]) => {\n let outStr = '';\n\n const slicedArr = users.map((item) => item.name || item.id).slice(0, 5);\n const restLength = users.length - slicedArr.length;\n\n if (slicedArr.length === 1) {\n outStr = `${slicedArr[0]} `;\n } else if (slicedArr.length === 2) {\n // joins all with \"and\" but =no commas\n // example: \"bob and sam\"\n outStr = `${slicedArr[0]} and ${slicedArr[1]}`;\n } else if (slicedArr.length > 2) {\n // joins all with commas, but last one gets \", and\" (oxford comma!)\n // example: \"bob, joe, sam and 4 more\"\n if (restLength === 0) {\n // mutate slicedArr to remove last user to display it separately\n const lastUser = slicedArr.splice(slicedArr.length - 2, 1)[0];\n const commaSeparatedUsers = slicedArr.join(', ');\n outStr = `${commaSeparatedUsers}, and ${lastUser}`;\n } else {\n const commaSeparatedUsers = slicedArr.join(', ');\n outStr = `${commaSeparatedUsers} and ${restLength} more`;\n }\n }\n\n return outStr;\n};\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ReactionResponse } from 'stream-chat';\nimport { ChannelService } from '../channel.service';\nimport { DefaultReactionType, DefaultUserType } from '../types';\n\nexport type MessageReactionType =\n | 'angry'\n | 'haha'\n | 'like'\n | 'love'\n | 'sad'\n | 'wow';\n\nconst emojiReactionsMapping: { [key in MessageReactionType]: string } = {\n like: '👍',\n angry: '😠',\n love: '❤️',\n haha: '😂',\n wow: '😮',\n sad: '😞',\n};\n@Component({\n selector: 'stream-message-reactions',\n templateUrl: './message-reactions.component.html',\n styles: ['.emoji {position: relative; display: inline-block; }'],\n})\nexport class MessageReactionsComponent implements AfterViewChecked, OnChanges {\n @Input() messageId: string | undefined;\n @Input() messageReactionCounts: { [key in MessageReactionType]?: number } =\n {};\n @Input() isSelectorOpen: boolean = false;\n @Output() readonly isSelectorOpenChange = new EventEmitter<boolean>();\n @Input() latestReactions: ReactionResponse<\n DefaultReactionType,\n DefaultUserType\n >[] = [];\n @Input() ownReactions: ReactionResponse<\n DefaultReactionType,\n DefaultUserType\n >[] = [];\n tooltipPositions: { arrow: number; tooltip: number } | undefined;\n tooltipText: string | undefined;\n @ViewChild('selectorContainer') private selectorContainer:\n | ElementRef<HTMLElement>\n | undefined;\n @ViewChild('selectorTooltip') private selectorTooltip:\n | ElementRef<HTMLElement>\n | undefined;\n currentTooltipTarget: HTMLElement | undefined;\n\n constructor(\n private cdRef: ChangeDetectorRef,\n private channelService: ChannelService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isSelectorOpen) {\n this.isSelectorOpen\n ? setTimeout(() => this.watchForOutsideClicks()) // setTimeout: wait for current click to bubble up, and only watch for clicks after that\n : this.stopWatchForOutsideClicks();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.tooltipText && !this.tooltipPositions) {\n this.setTooltipPosition();\n this.cdRef.detectChanges();\n }\n }\n\n get existingReactions(): MessageReactionType[] {\n return Object.keys(this.messageReactionCounts).filter(\n (k) => this.messageReactionCounts[k as MessageReactionType]! > 0\n ) as MessageReactionType[];\n }\n\n get reactionsCount() {\n return Object.values(this.messageReactionCounts).reduce(\n (total, count) => total + count,\n 0\n );\n }\n\n get reactionOptions(): MessageReactionType[] {\n return ['like', 'love', 'haha', 'wow', 'sad', 'angry'];\n }\n\n getLatestUserByReaction(reactionType: MessageReactionType) {\n return this.latestReactions.find((r) => r.type === reactionType && r.user)\n ?.user;\n }\n\n getEmojiByReaction(reactionType: MessageReactionType) {\n return emojiReactionsMapping[reactionType];\n }\n\n getUsersByReaction(reactionType: MessageReactionType) {\n return this.latestReactions\n .filter((r) => r.type === reactionType)\n .map((r) => r.user?.name || r.user?.id)\n .filter((i) => !!i)\n .join(', ');\n }\n\n showTooltip(event: Event, reactionType: MessageReactionType) {\n this.currentTooltipTarget = event.target as HTMLElement;\n this.tooltipText = this.getUsersByReaction(reactionType);\n }\n\n hideTooltip() {\n this.tooltipText = undefined;\n this.currentTooltipTarget = undefined;\n this.tooltipPositions = undefined;\n }\n\n trackByMessageReaction(index: number, item: MessageReactionType) {\n return item;\n }\n\n react(type: MessageReactionType) {\n this.ownReactions.find((r) => r.type === type)\n ? void this.channelService.removeReaction(this.messageId!, type)\n : void this.channelService.addReaction(this.messageId!, type);\n }\n\n private eventHandler = (event: Event) => {\n if (!this.selectorContainer?.nativeElement.contains(event.target as Node)) {\n this.isSelectorOpenChange.emit(false);\n }\n };\n\n private watchForOutsideClicks() {\n window.addEventListener('click', this.eventHandler);\n }\n\n private stopWatchForOutsideClicks() {\n window.removeEventListener('click', this.eventHandler);\n }\n\n private setTooltipPosition() {\n const tooltip = this.selectorTooltip?.nativeElement.getBoundingClientRect();\n const target = this.currentTooltipTarget?.getBoundingClientRect();\n\n const container =\n this.selectorContainer?.nativeElement.getBoundingClientRect();\n\n if (!tooltip || !target || !container) return;\n\n const tooltipPosition =\n tooltip.width === container.width || tooltip.x < container.x\n ? 0\n : target.left + target.width / 2 - container.left - tooltip.width / 2;\n\n const arrowPosition =\n target.x - tooltip.x + target.width / 2 - tooltipPosition;\n\n this.tooltipPositions = {\n tooltip: tooltipPosition,\n arrow: arrowPosition,\n };\n }\n}\n","<div\n *ngIf=\"existingReactions.length > 0 && !isSelectorOpen\"\n class=\"str-chat__reaction-list\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n data-testid=\"reaction-list\"\n>\n <ul>\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji\"\n >\n <span class=\"emoji\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n &nbsp;\n </li>\n <li>\n <span\n data-testid=\"reactions-count\"\n class=\"str-chat__reaction-list--counter\"\n >{{ reactionsCount }}</span\n >\n </li>\n </ul>\n</div>\n\n<div\n #selectorContainer\n class=\"str-chat__reaction-selector\"\n *ngIf=\"isSelectorOpen\"\n data-testid=\"reaction-selector\"\n>\n <div\n *ngIf=\"tooltipText\"\n data-testid=\"tooltip\"\n #selectorTooltip\n class=\"str-chat__reaction-selector-tooltip\"\n [ngStyle]=\"{\n left: tooltipPositions?.tooltip + 'px',\n visibility: tooltipPositions ? 'visible' : 'hidden'\n }\"\n >\n <div\n class=\"arrow\"\n [ngStyle]=\"{ left: tooltipPositions?.arrow + 'px' }\"\n ></div>\n <span class=\"latest-user-username\">\n {{ tooltipText }}\n </span>\n </div>\n <ul class=\"str-chat__message-reactions-list\">\n <li\n class=\"str-chat__message-reactions-list-item\"\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji-option\"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <div\n *ngIf=\"getLatestUserByReaction(reactionType) as user\"\n class=\"latest-user\"\n (click)=\"hideTooltip()\"\n (keyup.enter)=\"hideTooltip()\"\n (mouseenter)=\"showTooltip($event, reactionType)\"\n (mouseleave)=\"hideTooltip()\"\n attr.data-testid=\"{{ reactionType }}-last-user\"\n >\n <stream-avatar\n attr.data-testid=\"{{ reactionType }}-avatar\"\n [imageUrl]=\"user.image\"\n [name]=\"user.name || user.id\"\n [size]=\"20\"\n ></stream-avatar>\n </div>\n <span class=\"emoji\" style=\"width: 20px; height: 20px; top: 10px\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n <span\n *ngIf=\"\n messageReactionCounts[reactionType] &&\n messageReactionCounts[reactionType]! > 0\n \"\n class=\"str-chat__message-reactions-list-item__count\"\n attr.data-testid=\"{{ reactionType }}-reaction-count\"\n >\n {{ messageReactionCounts[reactionType] }}\n </span>\n </li>\n </ul>\n</div>\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ImageLoadService {\n imageLoad$ = new Subject<void>();\n\n constructor() {}\n}\n","import { Component, Input, OnChanges } from '@angular/core';\nimport { Attachment } from 'stream-chat';\nimport { ImageLoadService } from '../message-list/image-load.service';\nimport { DefaultAttachmentType } from '../types';\nimport prettybytes from 'pretty-bytes';\nimport { isImageAttachment } from '../is-image-attachment';\n\n@Component({\n selector: 'stream-attachment-list',\n templateUrl: './attachment-list.component.html',\n styles: [],\n})\nexport class AttachmentListComponent implements OnChanges {\n @Input() attachments: Attachment<DefaultAttachmentType>[] = [];\n orderedAttachments: Attachment<DefaultAttachmentType>[] = [];\n\n constructor(private imageLoadService: ImageLoadService) {}\n\n ngOnChanges(): void {\n this.orderedAttachments = [\n ...this.attachments.filter((a) => this.isImage(a)),\n ...this.attachments.filter((a) => this.isFile(a)),\n ...this.attachments.filter((a) => this.isCard(a)),\n ];\n }\n\n trackById(index: number) {\n return index;\n }\n\n isImage(attachment: Attachment) {\n return isImageAttachment(attachment);\n }\n\n isFile(attachment: Attachment) {\n return attachment.type === 'file';\n }\n\n isCard(attachment: Attachment) {\n return (\n !attachment.type ||\n (attachment.type === 'image' && !this.isImage(attachment))\n );\n }\n\n imageLoaded() {\n this.imageLoadService.imageLoad$.next();\n }\n\n hasFileSize(attachment: Attachment<DefaultAttachmentType>) {\n return (\n attachment.file_size && Number.isFinite(Number(attachment.file_size))\n );\n }\n\n getFileSize(attachment: Attachment<DefaultAttachmentType>) {\n return prettybytes(attachment.file_size!);\n }\n\n trimUrl(url?: string | null) {\n if (url !== undefined && url !== null) {\n const [trimmedUrl] = url\n .replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, '')\n .split('/');\n\n return trimmedUrl;\n }\n return null;\n }\n}\n","<ng-container *ngFor=\"let attachment of orderedAttachments; trackBy: trackById\">\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }}\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n >\n <img\n *ngIf=\"isImage(attachment)\"\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"attachment.img_url || attachment.thumb_url || attachment.image_url\"\n [alt]=\"attachment?.fallback\"\n (load)=\"imageLoaded()\"\n />\n <div\n *ngIf=\"isFile(attachment)\"\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n >\n <stream-icon icon=\"file\" [size]=\"30\"></stream-icon>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <a\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n {{ attachment.title }}\n </a>\n <span data-testclass=\"size\" *ngIf=\"hasFileSize(attachment)\">{{\n getFileSize(attachment)\n }}</span>\n </div>\n </div>\n <div\n *ngIf=\"isCard(attachment)\"\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachment.type\n }}\"\n >\n <div\n *ngIf=\"attachment.image_url || attachment.thumb_url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachment.image_url || attachment.thumb_url }}\"\n src=\"{{ attachment.image_url || attachment.thumb_url }}\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachment.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachment.title }}\n </div>\n <div\n *ngIf=\"attachment.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachment.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"attachment.title_link || attachment.og_scrape_url\"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{ attachment.title_link || attachment.og_scrape_url }}\"\n target=\"_blank\"\n >\n {{ trimUrl(attachment.title_link || attachment.og_scrape_url) }}\n </a>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Input,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { UserResponse } from 'stream-chat';\nimport { ChannelService } from '../channel.service';\nimport { ChatClientService } from '../chat-client.service';\nimport { getDeviceWidth } from '../device-width';\nimport { MessageActions } from '../message-actions-box/message-actions-box.component';\nimport { DefaultUserType, StreamMessage } from '../types';\nimport { parseDate } from './parse-date';\nimport { getReadByText } from './read-by-text';\n\n@Component({\n selector: 'stream-message',\n templateUrl: './message.component.html',\n styles: [],\n})\nexport class MessageComponent implements OnChanges {\n @Input() messageInputTemplate: TemplateRef<any> | undefined;\n @Input() mentionTemplate: TemplateRef<any> | undefined;\n @Input() message: StreamMessage | undefined;\n @Input() enabledMessageActions: MessageActions[] = [];\n @Input() areReactionsEnabled: boolean | undefined;\n @Input() canReactToMessage: boolean | undefined;\n @Input() isLastSentMessage: boolean | undefined;\n @Input() canReceiveReadEvents: boolean | undefined;\n isEditing: boolean | undefined;\n isActionBoxOpen = false;\n isReactionSelectorOpen = false;\n isPressedOnMobile = false;\n visibleMessageActionsCount = 0;\n messageTextParts: {\n content: string;\n type: 'text' | 'mention';\n user?: UserResponse;\n }[] = [];\n private user: UserResponse<DefaultUserType> | undefined;\n @ViewChild('container') private container:\n | ElementRef<HTMLElement>\n | undefined;\n\n constructor(\n private chatClientService: ChatClientService,\n private channelService: ChannelService\n ) {\n this.user = this.chatClientService.chatClient.user;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.message) {\n let content = this.message?.html || this.message?.text;\n if (!content) {\n this.messageTextParts = [];\n } else {\n // Backend will wrap HTML content with <p></p>\\n\n if (content.startsWith('<p>')) {\n content = content.replace('<p>', '');\n }\n if (content.endsWith('</p>\\n')) {\n content = content.replace('</p>\\n', '');\n }\n if (\n !this.message!.mentioned_users ||\n this.message!.mentioned_users.length === 0\n ) {\n this.messageTextParts = [{ content, type: 'text' }];\n } else {\n this.messageTextParts = [];\n let text = content;\n this.message!.mentioned_users.forEach((user) => {\n const mention = `@${user.name || user.id}`;\n const precedingText = text.substring(0, text.indexOf(mention));\n this.messageTextParts.push({\n content: precedingText,\n type: 'text',\n });\n this.messageTextParts.push({\n content: mention,\n type: 'mention',\n user,\n });\n text = text.replace(precedingText + mention, '');\n });\n if (text) {\n this.messageTextParts.push({ content: text, type: 'text' });\n }\n }\n }\n }\n }\n\n get isSentByCurrentUser() {\n return this.message?.user?.id === this.user?.id;\n }\n\n get readByText() {\n return getReadByText(this.message!.readBy);\n }\n\n get lastReadUser() {\n return this.message?.readBy.filter((u) => u.id !== this.user?.id)[0];\n }\n\n get isOnlyReadByMe() {\n return this.message && this.message.readBy.length === 0;\n }\n\n get isReadByMultipleUsers() {\n return this.message && this.message.readBy.length > 1;\n }\n\n get isMessageDeliveredAndRead() {\n return (\n this.message &&\n this.message.readBy &&\n this.message.status === 'received' &&\n this.message.readBy.length > 0\n );\n }\n\n get parsedDate() {\n if (!this.message || !this.message?.created_at) {\n return;\n }\n return parseDate(this.message.created_at);\n }\n\n get areOptionsVisible() {\n if (!this.message) {\n return false;\n }\n return !(\n !this.message.type ||\n this.message.type === 'error' ||\n this.message.type === 'system' ||\n this.message.type === 'ephemeral' ||\n this.message.status === 'failed' ||\n this.message.status === 'sending'\n );\n }\n\n get hasAttachment() {\n return !!this.message?.attachments && !!this.message.attachments.length;\n }\n\n get hasReactions() {\n return (\n !!this.message?.reaction_counts &&\n Object.keys(this.message.reaction_counts).length > 0\n );\n }\n\n resendMessage() {\n void this.channelService.resendMessage(this.message!);\n }\n\n textClicked() {\n if (getDeviceWidth().device !== 'mobile') {\n this.isPressedOnMobile = false;\n return;\n }\n if (this.isPressedOnMobile) {\n return;\n }\n this.isPressedOnMobile = true;\n const eventHandler = (event: Event) => {\n if (!this.container?.nativeElement.contains(event.target as Node)) {\n this.isPressedOnMobile = false;\n window.removeEventListener('click', eventHandler);\n }\n };\n window.addEventListener('click', eventHandler);\n }\n}\n","<div\n #container\n class=\"str-chat__message-simple str-chat__message str-chat__message--{{\n message?.type\n }} str-chat__message--{{ message?.status }} {{\n message?.text ? 'str-chat__message--has-text' : 'has-no-text'\n }}\"\n [class.str-chat__message--me]=\"isSentByCurrentUser\"\n [class.str-chat__message-simple--me]=\"isSentByCurrentUser\"\n [class.mobile-press]=\"isPressedOnMobile\"\n [class.str-chat__message--has-attachment]=\"hasAttachment\"\n [class.str-chat__message--with-reactions]=\"\n areReactionsEnabled && hasReactions\n \"\n data-testid=\"message-container\"\n>\n <ng-container *ngIf=\"!message?.deleted_at; else deletedMessage\">\n <ng-container *ngIf=\"message?.type !== 'system'; else systemMessage\">\n <ng-container\n *ngIf=\"\n isSentByCurrentUser &&\n ((isLastSentMessage && message?.status === 'received') ||\n message?.status === 'sending')\n \"\n >\n <ng-container *ngIf=\"message?.status === 'sending'; else sentStatus\">\n <ng-container *ngTemplateOutlet=\"sendingStatus\"></ng-container>\n </ng-container>\n <ng-template #sentStatus>\n <ng-container\n *ngIf=\"\n isMessageDeliveredAndRead && canReceiveReadEvents;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <stream-avatar\n data-testid=\"avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"message?.user?.image\"\n [name]=\"message?.user?.name || message?.user?.id\"\n ></stream-avatar>\n <div class=\"str-chat__message-inner\">\n <div\n class=\"str-chat__message-simple__actions\"\n data-testid=\"message-options\"\n *ngIf=\"areOptionsVisible\"\n >\n <div\n data-testid=\"message-actions-container\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--options\n \"\n [class.str-chat-angular__message-simple__actions__action--options--editing]=\"\n isEditing\n \"\n >\n <stream-message-actions-box\n [isOpen]=\"isActionBoxOpen\"\n [isMine]=\"isSentByCurrentUser\"\n [enabledActions]=\"enabledMessageActions\"\n [message]=\"message\"\n (displayedActionsCount)=\"visibleMessageActionsCount = $event\"\n (isEditing)=\"isEditing = $event; isActionBoxOpen = !isEditing\"\n [messageInputTemplate]=\"messageInputTemplate\"\n ></stream-message-actions-box>\n <stream-icon\n *ngIf=\"visibleMessageActionsCount > 0\"\n data-testid=\"action-icon\"\n icon=\"action-icon\"\n (keyup.enter)=\"isActionBoxOpen = !isActionBoxOpen\"\n (click)=\"isActionBoxOpen = !isActionBoxOpen\"\n ></stream-icon>\n </div>\n <div\n *ngIf=\"areReactionsEnabled && canReactToMessage\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--reactions\n \"\n data-testid=\"reaction-icon\"\n (click)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n (keyup.enter)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n >\n <stream-icon icon=\"reaction-icon\"></stream-icon>\n </div>\n </div>\n <stream-message-reactions\n *ngIf=\"areReactionsEnabled\"\n [messageReactionCounts]=\"message?.reaction_counts || {}\"\n [latestReactions]=\"message?.latest_reactions || []\"\n [(isSelectorOpen)]=\"isReactionSelectorOpen\"\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n ></stream-message-reactions>\n <stream-attachment-list\n *ngIf=\"hasAttachment\"\n [attachments]=\"message!.attachments!\"\n ></stream-attachment-list>\n <div class=\"str-chat__message-text\" *ngIf=\"message?.text\">\n <div\n data-testid=\"inner-message\"\n class=\"\n str-chat__message-text-inner str-chat__message-simple-text-inner\n \"\n [class.str-chat__message-light-text-inner--has-attachment]=\"\n hasAttachment\n \"\n (click)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n (keyup.enter)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n >\n <div\n data-testid=\"client-error-message\"\n *ngIf=\"message?.type === 'error'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{ \"streamChat.Error · Unsent\" | translate }}\n </div>\n <div\n data-testid=\"error-message\"\n *ngIf=\"message?.status === 'failed'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{\n (message?.errorStatusCode === 403\n ? \"streamChat.Message Failed · Unauthorized\"\n : \"streamChat.Message Failed · Click to try again\"\n ) | translate\n }}\n </div>\n <div\n (click)=\"textClicked()\"\n (keyup.enter)=\"textClicked()\"\n data-testid=\"text\"\n >\n <p>\n <!-- eslint-disable-next-line @angular-eslint/template/use-track-by-function -->\n <ng-container *ngFor=\"let part of messageTextParts\">\n <span\n *ngIf=\"part.type === 'text'; else mention\"\n [innerHTML]=\"part.content\"\n ></span>\n <ng-template #mention>\n <ng-container *ngIf=\"mentionTemplate; else defaultMention\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionTemplate;\n context: { user: part.user! }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultMention>\n <b>{{ part.content }}</b>\n </ng-template>\n </ng-template>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"str-chat__message-data str-chat__message-simple-data\">\n <span\n data-testid=\"sender\"\n *ngIf=\"!isSentByCurrentUser\"\n class=\"str-chat__message-simple-name\"\n >\n {{ message?.user?.name ? message?.user?.name : message?.user?.id }}\n </span>\n <span data-testid=\"date\" class=\"str-chat__message-simple-timestamp\">\n {{ parsedDate }}\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #sendingStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"sending-indicator\">\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n <stream-loading-indicator\n data-testid=\"loading-indicator\"\n ></stream-loading-indicator>\n </span>\n</ng-template>\n<ng-template #readStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"read-indicator\">\n <div class=\"str-chat__tooltip\" data-testid=\"read-by-tooltip\">\n {{ readByText }}\n </div>\n <stream-avatar\n class=\"str-chat-angular__avatar-host\"\n data-test-id=\"last-read-user-avatar\"\n [size]=\"15\"\n [imageUrl]=\"lastReadUser?.image\"\n [name]=\"lastReadUser?.name || lastReadUser?.id\"\n ></stream-avatar>\n <span\n data-test-id=\"read-by-length\"\n *ngIf=\"isReadByMultipleUsers\"\n class=\"str-chat__message-simple-status-number\"\n >\n {{ (message?.readBy)!.length }}\n </span>\n </span>\n</ng-template>\n<ng-template #deliveredStatus>\n <span\n class=\"str-chat__message-simple-status\"\n data-testid=\"delivered-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n <stream-icon\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon>\n </span>\n</ng-template>\n\n<ng-template #deletedMessage>\n <div data-testid=\"message-deleted-component\">\n <div class=\"str-chat__message--deleted-inner\" translate>\n streamChat.This message was deleted...\n </div>\n </div>\n</ng-template>\n\n<ng-template #systemMessage>\n <div data-testid=\"system-message\" class=\"str-chat__message--system\">\n <div class=\"str-chat__message--system__text\">\n <div class=\"str-chat__message--system__line\"></div>\n <p>{{ message?.text }}</p>\n <div class=\"str-chat__message--system__line\"></div>\n </div>\n <div class=\"str-chat__message--system__date\">\n {{ parsedDate }}\n </div>\n </div>\n</ng-template>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { TextareaInterface } from '../textarea.interface';\n\n@Component({\n selector: 'stream-textarea',\n templateUrl: './textarea.component.html',\n styles: [],\n})\nexport class TextareaComponent implements TextareaInterface, OnChanges {\n @HostBinding() class = 'str-chat__textarea';\n @Input() value = '';\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly send = new EventEmitter<void>();\n @ViewChild('input') private messageInput!: ElementRef<HTMLInputElement>;\n\n constructor() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n ngOnChanges(): void {}\n\n inputChanged() {\n this.valueChange.emit(this.messageInput.nativeElement.value);\n }\n\n sent(event: Event) {\n event.preventDefault();\n this.send.next();\n }\n}\n","<textarea\n [value]=\"value || ''\"\n autofocus\n data-testid=\"textarea\"\n #input\n placeholder=\"{{ 'streamChat.Type your message' | translate }}\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n rows=\"1\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"sent($event)\"\n></textarea>\n","import { Injectable } from '@angular/core';\nimport transliterate from '@stream-io/transliterate';\n\n@Injectable({ providedIn: 'root' })\nexport class TransliterationService {\n constructor() {}\n\n transliterate(s: string) {\n return transliterate(s);\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { MentionConfig, Mentions } from 'angular-mentions';\nimport {\n MentionAutcompleteListItemContext,\n MentionAutcompleteListItem,\n} from '../../types';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { UserResponse } from 'stream-chat';\nimport { ChannelService } from '../../channel.service';\nimport { TextareaInterface } from '../textarea.interface';\nimport { ChatClientService } from '../../chat-client.service';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { TransliterationService } from '../../transliteration.service';\n\n@Component({\n selector: 'stream-autocomplete-textarea',\n templateUrl: './autocomplete-textarea.component.html',\n styles: [],\n})\nexport class AutocompleteTextareaComponent\n implements TextareaInterface, OnChanges\n{\n @HostBinding() class = 'str-chat__textarea';\n @Input() value = '';\n @Input() areMentionsEnabled: boolean | undefined = true;\n @Input() mentionAutocompleteItemTemplate:\n | TemplateRef<MentionAutcompleteListItemContext>\n | undefined;\n @Input() mentionScope: 'channel' | 'application' = 'channel';\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly send = new EventEmitter<void>();\n @Output() readonly userMentions = new EventEmitter<UserResponse[]>();\n private readonly labelKey = 'autocompleteLabel';\n private readonly triggerChar = '@';\n autocompleteConfig: MentionConfig = {\n mentions: [],\n };\n @ViewChild('input') private messageInput!: ElementRef<HTMLInputElement>;\n private subscriptions: Subscription[] = [];\n private mentionedUsers: UserResponse[] = [];\n private userMentionConfig: Mentions = {\n triggerChar: this.triggerChar,\n dropUp: true,\n labelKey: this.labelKey,\n returnTrigger: true,\n mentionFilter: (\n searchString: string,\n items: { autocompleteLabel: string }[]\n ) => this.filter(searchString, items),\n mentionSelect: (item, triggerChar) => this.mentioned(item, triggerChar),\n };\n private searchTerm$ = new BehaviorSubject<string>('');\n\n constructor(\n private channelService: ChannelService,\n private chatClientService: ChatClientService,\n private transliterationService: TransliterationService\n ) {\n this.searchTerm$\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((searchTerm) => void this.updateMentionOptions(searchTerm));\n this.subscriptions.push(\n this.channelService.activeChannel$.subscribe(() => {\n this.mentionedUsers = [];\n this.userMentions.next([...this.mentionedUsers]);\n void this.updateMentionOptions(this.searchTerm$.getValue());\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.areMentionsEnabled) {\n if (this.areMentionsEnabled) {\n this.autocompleteConfig.mentions = [this.userMentionConfig];\n this.autocompleteConfig = { ...this.autocompleteConfig };\n } else {\n this.autocompleteConfig.mentions = [];\n this.autocompleteConfig = { ...this.autocompleteConfig };\n }\n }\n if (changes.mentionScope) {\n void this.updateMentionOptions(this.searchTerm$.getValue());\n }\n }\n\n filter(searchString: string, items: { autocompleteLabel: string }[]) {\n return items.filter((item) =>\n this.transliterate(item.autocompleteLabel.toLowerCase()).includes(\n this.transliterate(searchString.toLowerCase())\n )\n );\n }\n\n mentioned(item: MentionAutcompleteListItem, triggerChar = '') {\n this.mentionedUsers.push((item.user ? item.user : item) as UserResponse);\n this.userMentions.next([...this.mentionedUsers]);\n return triggerChar + item.autocompleteLabel;\n }\n\n autcompleteSearchTermChanged(searchTerm: string) {\n if (searchTerm === this.triggerChar) {\n void this.updateMentionOptions();\n } else {\n this.searchTerm$.next(searchTerm.replace(this.triggerChar, ''));\n }\n }\n\n inputChanged() {\n this.valueChange.emit(this.messageInput.nativeElement.value);\n }\n\n inputLeft() {\n this.updateMentionedUsersFromText();\n }\n\n sent(event: Event) {\n event.preventDefault();\n this.updateMentionedUsersFromText();\n this.send.next();\n }\n\n private transliterate(s: string) {\n if (this.transliterationService) {\n return this.transliterationService.transliterate(s);\n } else {\n return s;\n }\n }\n\n private async updateMentionOptions(searchTerm?: string) {\n if (!this.areMentionsEnabled) {\n return;\n }\n const request =\n this.mentionScope === 'application'\n ? (s: string) => this.chatClientService.autocompleteUsers(s)\n : (s: string) => this.channelService.autocompleteMembers(s);\n const result = await request(searchTerm || '');\n const items = this.filter(\n searchTerm || '',\n result.map((i) => {\n const user = (i.user ? i.user : i) as UserResponse;\n return {\n ...i,\n autocompleteLabel: user.name || user.id,\n type: 'mention',\n };\n })\n );\n this.userMentionConfig.items = items;\n this.autocompleteConfig.mentions = [this.userMentionConfig];\n this.autocompleteConfig = { ...this.autocompleteConfig };\n }\n\n private updateMentionedUsersFromText() {\n const updatedMentionedUsers: UserResponse[] = [];\n this.mentionedUsers.forEach((u) => {\n const key = u.name || u.id;\n if (this.value.includes(`${this.triggerChar}${key}`)) {\n updatedMentionedUsers.push(u);\n }\n });\n if (updatedMentionedUsers.length !== this.mentionedUsers.length) {\n this.userMentions.next([...updatedMentionedUsers]);\n this.mentionedUsers = updatedMentionedUsers;\n }\n }\n}\n","<textarea\n [value]=\"value || ''\"\n autofocus\n data-testid=\"textarea\"\n #input\n placeholder=\"{{ 'streamChat.Type your message' | translate }}\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n rows=\"1\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"sent($event)\"\n [mentionConfig]=\"autocompleteConfig\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n [mentionListTemplate]=\"autocompleteItem\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div class=\"rta__entity\" *ngSwitchCase=\"'mention'\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n style=\"height: 20px\"\n [size]=\"20\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n ></stream-avatar>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n","import { StreamMessage } from '../types';\n\nexport type GroupStyle = '' | 'middle' | 'top' | 'bottom' | 'single';\n\nexport const getGroupStyles = (\n message: StreamMessage,\n previousMessage?: StreamMessage,\n nextMessage?: StreamMessage,\n noGroupByUser = false\n): GroupStyle => {\n if (\n noGroupByUser ||\n (message.attachments && message.attachments.length !== 0)\n )\n return 'single';\n\n const isTopMessage =\n !previousMessage ||\n !isOnSameDay(previousMessage.created_at, message.created_at) ||\n previousMessage.type === 'system' ||\n (previousMessage.attachments &&\n previousMessage.attachments?.length !== 0) ||\n message.user?.id !== previousMessage.user?.id ||\n previousMessage.type === 'error' ||\n previousMessage.deleted_at;\n\n const isBottomMessage =\n !nextMessage ||\n !isOnSameDay(message.created_at, nextMessage.created_at) ||\n nextMessage.type === 'system' ||\n (nextMessage.attachments && nextMessage.attachments?.length !== 0) ||\n message.user?.id !== nextMessage.user?.id ||\n nextMessage.type === 'error' ||\n nextMessage.deleted_at;\n\n if (!isTopMessage && !isBottomMessage) {\n if (message.deleted_at || message.type === 'error') return 'single';\n return 'middle';\n }\n\n if (isBottomMessage) {\n if (isTopMessage || message.deleted_at || message.type === 'error')\n return 'single';\n return 'bottom';\n }\n\n if (isTopMessage) return 'top';\n\n return '';\n};\n\nconst isOnSameDay = (date1: Date, date2: Date) => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n};\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { ChannelService } from '../channel.service';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { StreamMessage } from '../types';\nimport { ChatClientService } from '../chat-client.service';\nimport { getGroupStyles, GroupStyle } from './group-styles';\nimport { ImageLoadService } from './image-load.service';\nimport { MessageActions } from '../message-actions-box/message-actions-box.component';\n@Component({\n selector: 'stream-message-list',\n templateUrl: './message-list.component.html',\n styles: [],\n})\nexport class MessageListComponent implements AfterViewChecked, OnChanges {\n @Input() messageTemplate: TemplateRef<any> | undefined;\n @Input() messageInputTemplate: TemplateRef<any> | undefined;\n @Input() mentionTemplate: TemplateRef<any> | undefined;\n @Input() areReactionsEnabled = true;\n /* eslint-disable-next-line @angular-eslint/no-input-rename */\n @Input('enabledMessageActions') enabledMessageActionsInput: MessageActions[] =\n ['flag', 'edit', 'edit-any', 'delete', 'delete-any'];\n messages$!: Observable<StreamMessage[]>;\n canReactToMessage: boolean | undefined;\n canReceiveReadEvents: boolean | undefined;\n enabledMessageActions: MessageActions[] = [];\n @HostBinding('class') private class =\n 'str-chat-angular__main-panel-inner str-chat-angular__message-list-host';\n unreadMessageCount = 0;\n isUserScrolledUp: boolean | undefined;\n groupStyles: GroupStyle[] = [];\n lastSentMessageId: string | undefined;\n @ViewChild('scrollContainer')\n private scrollContainer!: ElementRef<HTMLElement>;\n private latestMessageDate: Date | undefined;\n private hasNewMessages: boolean | undefined;\n private containerHeight: number | undefined;\n private oldestMessageDate: Date | undefined;\n private olderMassagesLoaded: boolean | undefined;\n private isNewMessageSentByUser: boolean | undefined;\n private authorizedMessageActions: MessageActions[] = ['flag'];\n private readonly isUserScrolledUpThreshold = 300;\n\n constructor(\n private channelService: ChannelService,\n private chatClientService: ChatClientService,\n private imageLoadService: ImageLoadService\n ) {\n this.channelService.activeChannel$.subscribe((channel) => {\n this.latestMessageDate = undefined;\n this.hasNewMessages = true;\n this.isUserScrolledUp = false;\n this.containerHeight = undefined;\n this.olderMassagesLoaded = false;\n this.oldestMessageDate = undefined;\n this.unreadMessageCount = 0;\n this.isNewMessageSentByUser = undefined;\n const capabilites = channel?.data?.own_capabilities as string[];\n if (capabilites) {\n this.canReactToMessage = capabilites.indexOf('send-reaction') !== -1;\n this.canReceiveReadEvents = capabilites.indexOf('read-events') !== -1;\n this.authorizedMessageActions = [];\n if (capabilites.indexOf('flag-message') !== -1) {\n this.authorizedMessageActions.push('flag');\n }\n if (capabilites.indexOf('update-own-message') !== -1) {\n this.authorizedMessageActions.push('edit');\n }\n if (capabilites.indexOf('update-any-message') !== -1) {\n this.authorizedMessageActions.push('edit');\n this.authorizedMessageActions.push('edit-any');\n }\n if (capabilites.indexOf('delete-own-message') !== -1) {\n this.authorizedMessageActions.push('delete');\n }\n if (capabilites.indexOf('delete-any-message') !== -1) {\n this.authorizedMessageActions.push('delete');\n this.authorizedMessageActions.push('delete-any');\n }\n this.setEnabledActions();\n }\n });\n this.messages$ = this.channelService.activeChannelMessages$.pipe(\n tap((messages) => {\n if (messages.length === 0) {\n return;\n }\n const currentLatestMessageDate =\n messages[messages.length - 1].created_at;\n if (\n !this.latestMessageDate ||\n this.latestMessageDate?.getTime() < currentLatestMessageDate.getTime()\n ) {\n this.latestMessageDate = currentLatestMessageDate;\n this.hasNewMessages = true;\n this.isNewMessageSentByUser =\n messages[messages.length - 1].user?.id ===\n this.chatClientService.chatClient?.user?.id;\n if (this.isUserScrolledUp) {\n this.unreadMessageCount++;\n }\n }\n const currentOldestMessageDate = messages[0].created_at;\n if (!this.oldestMessageDate) {\n this.oldestMessageDate = currentOldestMessageDate;\n } else if (\n this.oldestMessageDate?.getTime() > currentOldestMessageDate.getTime()\n ) {\n this.oldestMessageDate = currentOldestMessageDate;\n this.olderMassagesLoaded = true;\n }\n }),\n tap((messages) => {\n this.groupStyles = messages.map((m, i) =>\n getGroupStyles(m, messages[i - 1], messages[i + 1])\n );\n }),\n tap(\n (messages) =>\n (this.lastSentMessageId = [...messages]\n .reverse()\n .find(\n (m) =>\n m.user?.id === this.chatClientService.chatClient?.user?.id &&\n m.status !== 'sending'\n )?.id)\n )\n );\n this.imageLoadService.imageLoad$.subscribe(() => {\n if (!this.isUserScrolledUp) {\n this.scrollToBottom();\n // Hacky and unreliable workaround to scroll down after loaded images move the scrollbar\n setTimeout(() => {\n this.scrollToBottom();\n }, 300);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.enabledMessageActionsInput) {\n this.setEnabledActions();\n }\n }\n\n ngAfterViewChecked() {\n if (this.hasNewMessages) {\n if (!this.isUserScrolledUp || this.isNewMessageSentByUser) {\n this.scrollToBottom();\n // Hacky and unreliable workaround to scroll down after loaded images move the scrollbar\n setTimeout(() => {\n this.scrollToBottom();\n }, 300);\n }\n this.hasNewMessages = false;\n this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;\n } else if (this.olderMassagesLoaded) {\n this.preserveScrollbarPosition();\n this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;\n this.olderMassagesLoaded = false;\n }\n }\n\n trackByMessageId(index: number, item: StreamMessage) {\n return item.id;\n }\n\n scrollToBottom(): void {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight;\n }\n\n scrolled() {\n this.isUserScrolledUp =\n this.scrollContainer.nativeElement.scrollHeight -\n (this.scrollContainer.nativeElement.scrollTop +\n this.scrollContainer.nativeElement.clientHeight) >\n this.isUserScrolledUpThreshold;\n if (!this.isUserScrolledUp) {\n this.unreadMessageCount = 0;\n }\n if (this.scrollContainer.nativeElement.scrollTop === 0) {\n this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;\n void this.channelService.loadMoreMessages();\n }\n }\n\n private preserveScrollbarPosition() {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight - this.containerHeight!;\n }\n\n private setEnabledActions() {\n this.enabledMessageActions = [];\n if (!this.enabledMessageActionsInput) {\n return;\n }\n this.enabledMessageActionsInput.forEach((action) => {\n const isAuthorized = this.authorizedMessageActions.indexOf(action) !== -1;\n if (isAuthorized) {\n this.enabledMessageActions.push(action);\n }\n });\n }\n}\n","<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll\">\n <ul class=\"str-chat__ul\">\n <li\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n >\n <ng-container *ngIf=\"messageTemplate; else defaultMessageTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate;\n context: {\n message: message,\n areReactionsEnabled: areReactionsEnabled,\n canReactToMessage: canReactToMessage,\n lastSentMessageId: !!(\n lastSentMessageId && message?.id === lastSentMessageId\n ),\n canReceiveReadEvents: canReceiveReadEvents,\n messageInputTemplate: messageInputTemplate,\n mentionTemplate: mentionTemplate\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultMessageTemplate>\n <stream-message\n [message]=\"message\"\n [areReactionsEnabled]=\"areReactionsEnabled\"\n [canReactToMessage]=\"canReactToMessage\"\n [isLastSentMessage]=\"\n !!(lastSentMessageId && message?.id === lastSentMessageId)\n \"\n [enabledMessageActions]=\"enabledMessageActions\"\n [canReceiveReadEvents]=\"canReceiveReadEvents\"\n [messageInputTemplate]=\"messageInputTemplate\"\n [mentionTemplate]=\"mentionTemplate\"\n ></stream-message>\n </ng-template>\n </li>\n </ul>\n </div>\n</div>\n<div class=\"str-chat__list-notifications\">\n <button\n data-testid=\"scroll-to-bottom\"\n *ngIf=\"isUserScrolledUp\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-right\n str-chat__message-notification-scroll-down\n \"\n (keyup.enter)=\"scrollToBottom()\"\n (click)=\"scrollToBottom()\"\n >\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-down-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AvatarComponent } from './avatar/avatar.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n declarations: [AvatarComponent],\n imports: [CommonModule, TranslateModule],\n exports: [AvatarComponent],\n})\nexport class StreamAvatarModule {}\n","import { NgModule } from '@angular/core';\nimport { ChannelComponent } from './channel/channel.component';\nimport { ChannelHeaderComponent } from './channel-header/channel-header.component';\nimport { ChannelListComponent } from './channel-list/channel-list.component';\nimport { ChannelPreviewComponent } from './channel-preview/channel-preview.component';\nimport { MessageComponent } from './message/message.component';\nimport { MessageInputComponent } from './message-input/message-input.component';\nimport { MessageListComponent } from './message-list/message-list.component';\nimport { CommonModule } from '@angular/common';\nimport { LoadingIndicatorComponent } from './loading-indicator/loading-indicator.component';\nimport { IconComponent } from './icon/icon.component';\nimport { MessageActionsBoxComponent } from './message-actions-box/message-actions-box.component';\nimport { AttachmentListComponent } from './attachment-list/attachment-list.component';\nimport { MessageReactionsComponent } from './message-reactions/message-reactions.component';\nimport { NotificationComponent } from './notification/notification.component';\nimport { NotificationListComponent } from './notification-list/notification-list.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AttachmentPreviewListComponent } from './attachment-preview-list/attachment-preview-list.component';\nimport { ModalComponent } from './modal/modal.component';\nimport { TextareaDirective } from './message-input/textarea.directive';\nimport { StreamAvatarModule } from './stream-avatar.module';\n\n@NgModule({\n declarations: [\n ChannelComponent,\n ChannelHeaderComponent,\n ChannelListComponent,\n ChannelPreviewComponent,\n MessageComponent,\n MessageInputComponent,\n MessageListComponent,\n LoadingIndicatorComponent,\n IconComponent,\n MessageActionsBoxComponent,\n AttachmentListComponent,\n MessageReactionsComponent,\n NotificationComponent,\n NotificationListComponent,\n AttachmentPreviewListComponent,\n ModalComponent,\n TextareaDirective,\n ],\n imports: [CommonModule, TranslateModule, StreamAvatarModule],\n exports: [\n ChannelComponent,\n ChannelHeaderComponent,\n ChannelListComponent,\n ChannelPreviewComponent,\n MessageComponent,\n MessageInputComponent,\n MessageListComponent,\n LoadingIndicatorComponent,\n IconComponent,\n MessageActionsBoxComponent,\n AttachmentListComponent,\n MessageReactionsComponent,\n NotificationComponent,\n NotificationListComponent,\n AttachmentPreviewListComponent,\n ModalComponent,\n StreamAvatarModule,\n ],\n})\nexport class StreamChatModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AutocompleteTextareaComponent } from './message-input/autocomplete-textarea/autocomplete-textarea.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MentionModule } from 'angular-mentions';\nimport { StreamAvatarModule } from './stream-avatar.module';\nimport { textareaInjectionToken } from './injection-tokens';\n\n@NgModule({\n declarations: [AutocompleteTextareaComponent],\n imports: [CommonModule, TranslateModule, MentionModule, StreamAvatarModule],\n exports: [AutocompleteTextareaComponent],\n providers: [\n {\n provide: textareaInjectionToken,\n useValue: AutocompleteTextareaComponent,\n },\n ],\n})\nexport class StreamAutocompleteTextareaModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TextareaComponent } from './message-input/textarea/textarea.component';\nimport { textareaInjectionToken } from './injection-tokens';\n\n@NgModule({\n declarations: [TextareaComponent],\n imports: [CommonModule, TranslateModule],\n exports: [TextareaComponent],\n providers: [\n {\n provide: textareaInjectionToken,\n useValue: TextareaComponent,\n },\n ],\n})\nexport class StreamTextareaModule {}\n","/*\n * Public API Surface of stream-chat-angular\n */\n\nexport * from './lib/chat-client.service';\nexport * from './lib/channel.service';\nexport * from './lib/theme.service';\nexport * from './lib/attachment.service';\nexport * from './lib/stream-i18n.service';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/icon/icon.component';\nexport * from './lib/loading-indicator/loading-indicator.component';\nexport * from './lib/message-actions-box/message-actions-box.component';\nexport * from './lib/channel/channel.component';\nexport * from './lib/channel-header/channel-header.component';\nexport * from './lib/channel-preview/channel-preview.component';\nexport * from './lib/channel-list/channel-list.component';\nexport * from './lib/channel-list/channel-list-toggle.service';\nexport * from './lib/message/message.component';\nexport * from './lib/message/parse-date';\nexport * from './lib/message/read-by-text';\nexport * from './lib/message-input/message-input.component';\nexport * from './lib/message-input/textarea/textarea.component';\nexport * from './lib/message-input/autocomplete-textarea/autocomplete-textarea.component';\nexport * from './lib/message-input/message-input-config.service';\nexport * from './lib/message-input/textarea.directive';\nexport * from './lib/message-input/textarea.interface';\nexport * from './lib/message-list/message-list.component';\nexport * from './lib/message-list/image-load.service';\nexport * from './lib/message-list/group-styles';\nexport * from './lib/attachment-list/attachment-list.component';\nexport * from './lib/attachment-preview-list/attachment-preview-list.component';\nexport * from './lib/message-reactions/message-reactions.component';\nexport * from './lib/notification/notification.component';\nexport * from './lib/notification-list/notification-list.component';\nexport * from './lib/modal/modal.component';\nexport * from './lib/read-by';\nexport * from './lib/is-image-attachment';\nexport * from './lib/is-image-file';\nexport * from './lib/device-width';\nexport * from './lib/message-preview';\nexport * from './lib/notification.service';\nexport * from './lib/transliteration.service';\nexport * from './lib/stream-chat.module';\nexport * from './lib/stream-avatar.module';\nexport * from './lib/stream-autocomplete-textarea.module';\nexport * from './lib/stream-textarea.module';\nexport * from './lib/injection-tokens';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BehaviorSubject","Injectable","ReplaySubject","StreamChat","uuidv4","map","first","Component","Input","InjectionToken","EventEmitter","Directive","Output","Inject","ViewChild","catchError","of","startWith","distinctUntilChanged","filter","Dayjs","calendar","Subject","prettybytes","HostBinding","transliterate","debounceTime","tap","CommonModule","TranslateModule","NgModule","MentionModule"],"mappings":"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"}