@progress/kendo-angular-conversational-ui 21.0.0-develop.2 → 21.0.0-develop.20

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.
Files changed (69) hide show
  1. package/chat/api/files-layout.d.ts +12 -0
  2. package/chat/api/index.d.ts +4 -1
  3. package/chat/api/message-settings.interface.d.ts +41 -0
  4. package/chat/api/message-width-mode.d.ts +1 -1
  5. package/chat/api/message.interface.d.ts +5 -1
  6. package/chat/api/suggestions-layout.d.ts +20 -0
  7. package/chat/api/timestamp-visibility.d.ts +10 -0
  8. package/chat/chat.component.d.ts +111 -34
  9. package/chat/chat.directives.d.ts +18 -0
  10. package/chat/chat.module.d.ts +15 -8
  11. package/chat/common/chat.service.d.ts +36 -3
  12. package/chat/common/models/model-fields.d.ts +0 -6
  13. package/chat/common/scroll-button.component.d.ts +32 -0
  14. package/chat/common/scroll.service.d.ts +39 -0
  15. package/chat/common/utils.d.ts +13 -1
  16. package/chat/l10n/messages.d.ts +9 -1
  17. package/chat/message-list.component.d.ts +22 -3
  18. package/chat/message.component.d.ts +40 -16
  19. package/chat/suggested-actions.component.d.ts +30 -5
  20. package/chat/templates/author-message-content-template.directive.d.ts +28 -0
  21. package/chat/templates/author-message-template.directive.d.ts +28 -0
  22. package/chat/templates/message-content-template.directive.d.ts +28 -0
  23. package/chat/templates/message-template.directive.d.ts +1 -1
  24. package/chat/templates/no-data-template.directive.d.ts +27 -0
  25. package/chat/templates/receiver-message-content-template.directive.d.ts +28 -0
  26. package/chat/templates/receiver-message-template.directive.d.ts +28 -0
  27. package/chat/templates/user-status-template.directive.d.ts +27 -0
  28. package/codemods/utils.js +477 -375
  29. package/codemods/v20/chat-user.js +7 -5
  30. package/codemods/v21/chat-messagetoolbarvisibility.js +53 -0
  31. package/codemods/v21/chat-pinnedbyfield.js +19 -0
  32. package/conversational-ui.module.d.ts +18 -11
  33. package/directives.d.ts +9 -2
  34. package/esm2022/chat/api/index.mjs +4 -1
  35. package/{chat/api/message-toolbar-visibility.d.ts → esm2022/chat/api/message-settings.interface.mjs} +1 -4
  36. package/esm2022/chat/api/suggestions-layout.mjs +5 -0
  37. package/esm2022/chat/api/timestamp-visibility.mjs +5 -0
  38. package/esm2022/chat/builtin-actions.mjs +2 -0
  39. package/esm2022/chat/chat-file.component.mjs +2 -2
  40. package/esm2022/chat/chat.component.mjs +295 -71
  41. package/esm2022/chat/chat.directives.mjs +18 -0
  42. package/esm2022/chat/chat.module.mjs +16 -9
  43. package/esm2022/chat/common/chat.service.mjs +86 -4
  44. package/esm2022/chat/common/models/default-model-fields.mjs +0 -1
  45. package/esm2022/chat/common/scroll-button.component.mjs +81 -0
  46. package/esm2022/chat/common/scroll.service.mjs +110 -0
  47. package/esm2022/chat/common/utils.mjs +22 -3
  48. package/esm2022/chat/l10n/messages.mjs +13 -1
  49. package/esm2022/chat/message-attachments.component.mjs +2 -2
  50. package/esm2022/chat/message-box.component.mjs +5 -2
  51. package/esm2022/chat/message-list.component.mjs +184 -40
  52. package/esm2022/chat/message.component.mjs +487 -326
  53. package/esm2022/chat/suggested-actions.component.mjs +298 -80
  54. package/esm2022/chat/templates/author-message-content-template.directive.mjs +39 -0
  55. package/esm2022/chat/templates/author-message-template.directive.mjs +39 -0
  56. package/esm2022/chat/templates/message-content-template.directive.mjs +39 -0
  57. package/esm2022/chat/templates/message-template.directive.mjs +1 -1
  58. package/esm2022/chat/templates/no-data-template.directive.mjs +38 -0
  59. package/esm2022/chat/templates/receiver-message-content-template.directive.mjs +39 -0
  60. package/esm2022/chat/templates/receiver-message-template.directive.mjs +39 -0
  61. package/esm2022/chat/templates/user-status-template.directive.mjs +38 -0
  62. package/esm2022/conversational-ui.module.mjs +19 -12
  63. package/esm2022/directives.mjs +15 -1
  64. package/esm2022/index.mjs +7 -0
  65. package/esm2022/package-metadata.mjs +2 -2
  66. package/fesm2022/progress-kendo-angular-conversational-ui.mjs +1822 -567
  67. package/index.d.ts +7 -0
  68. package/package.json +26 -14
  69. /package/esm2022/chat/api/{message-toolbar-visibility.mjs → files-layout.mjs} +0 -0
@@ -6,7 +6,6 @@ import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Input,
6
6
  import { AttachmentTemplateDirective } from './templates/attachment-template.directive';
7
7
  import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
8
8
  import { makeHandler } from './builtin-actions';
9
- import { MessageTemplateDirective } from './templates/message-template.directive';
10
9
  import { Subscription } from 'rxjs';
11
10
  import { validatePackage } from '@progress/kendo-licensing';
12
11
  import { packageMetadata } from '../package-metadata';
@@ -24,11 +23,15 @@ import { KENDO_BUTTON } from '@progress/kendo-angular-buttons';
24
23
  import { pinIcon, xIcon } from '@progress/kendo-svg-icons';
25
24
  import { IconWrapperComponent } from '@progress/kendo-angular-icons';
26
25
  import { defaultModelFields } from './common/models/default-model-fields';
27
- import { processMessages, SEND_BTN_DEFAULT_SETTINGS, FILE_ACTIONS, CONTEXT_MENU_ACTIONS } from './common/utils';
26
+ import { processMessages, SEND_BTN_DEFAULT_SETTINGS, FILE_ACTIONS, CONTEXT_MENU_ACTIONS, transformActions, MENU_ITEM_SELECTOR } from './common/utils';
28
27
  import { ChatTimestampTemplateDirective } from './templates/timestamp-template.directive';
29
28
  import { MessageReferenceComponent } from './message-reference-content.component';
30
29
  import { ChatStatusTemplateDirective } from './templates/status-template.directive';
31
30
  import { ChatSuggestionTemplateDirective } from './templates/suggestion-template.directive';
31
+ import { ContextMenuComponent } from '@progress/kendo-angular-menu';
32
+ import { NoDataTemplateDirective, MessageTemplateDirective, AuthorMessageContentTemplateDirective, ReceiverMessageContentTemplateDirective, ReceiverMessageTemplateDirective, AuthorMessageTemplateDirective, MessageContentTemplateDirective } from './chat.directives';
33
+ import { ChatUserStatusTemplateDirective } from './templates/user-status-template.directive';
34
+ import { SuggestionsScrollService } from './common/scroll.service';
32
35
  import * as i0 from "@angular/core";
33
36
  import * as i1 from "@progress/kendo-angular-l10n";
34
37
  import * as i2 from "./common/chat.service";
@@ -50,7 +53,7 @@ import * as i3 from "@progress/kendo-angular-buttons";
50
53
  * ```
51
54
  *
52
55
  * @remarks
53
- * Supported children components are: {@link CustomMessagesComponent}, {@link HeroCardComponent}, {@link AttachmentTemplateDirective}, {@link ChatHeaderTemplateDirective}, {@link ChatMessageBoxTemplateDirective}, {@link MessageTemplateDirective}, {@link ChatStatusTemplateDirective}, {@link ChatSuggestionTemplateDirective}, {@link ChatTimestampTemplateDirective}.
56
+ * Supported children components are: {@link CustomMessagesComponent}, {@link HeroCardComponent}, {@link AttachmentTemplateDirective}, {@link ChatHeaderTemplateDirective}, {@link ChatMessageBoxTemplateDirective}, {@link MessageContentTemplateDirective}, {@link MessageTemplateDirective},{@link ChatStatusTemplateDirective}, {@link ChatSuggestionTemplateDirective}, {@link ChatTimestampTemplateDirective}, {@link ChatNoDataTemplateDirective}, {@link ChatUserStatusTemplateDirective}, {@link AuthorMessageContentTemplateDirective}, {@link ReceiverMessageContentTemplateDirective}, {@link ReceiverMessageTemplateDirective}, {@link AuthorMessageTemplateDirective}.
54
57
  */
55
58
  export class ChatComponent {
56
59
  localization;
@@ -59,13 +62,13 @@ export class ChatComponent {
59
62
  element;
60
63
  chatService;
61
64
  /**
62
- * Defines the array of messages displayed in the Chat.
63
- * Each message can include a timestamp for unique identification.
64
- * For more information, see [ngFor - Change Tracking](link:site.data.urls.angular['ngforof']#change-propagation).
65
+ * Sets the Chat messages.
66
+ * Accepts an array of `Message` objects, but can also accept custom data structures.
67
+ * For more information, check [Data Binding](slug:databinding_chat) section in the documentation.
65
68
  */
66
69
  messages;
67
70
  /**
68
- * Specifies the id representing the local user.
71
+ * Sets the ID that represents the local user.
69
72
  */
70
73
  authorId;
71
74
  /**
@@ -93,13 +96,32 @@ export class ChatComponent {
93
96
  */
94
97
  placeholder;
95
98
  /**
96
- * Switches the width of the message between the predefined options.
99
+ * Controls the width of the message between the predefined options.
97
100
  *
98
101
  * @default 'standard'
99
102
  */
100
103
  messageWidthMode = 'standard';
104
+ /**
105
+ * Controls the visibility of timestamps in messages.
106
+ *
107
+ * @default 'focus'
108
+ */
109
+ timestampVisibility = 'focus';
110
+ /**
111
+ * Controls the visibility of the author's avatar for the message group.
112
+ *
113
+ * @default true
114
+ */
115
+ showUsername = true;
116
+ /**
117
+ * Controls the visibility of the author's username for the message group.
118
+ *
119
+ * @default true
120
+ */
121
+ showAvatar = true;
101
122
  /**
102
123
  * Enables the expand or collapse functionality for messages.
124
+ *
103
125
  * @default false
104
126
  */
105
127
  allowMessageCollapse = false;
@@ -116,24 +138,34 @@ export class ChatComponent {
116
138
  */
117
139
  enableFileSelect = true;
118
140
  /**
119
- * Specifies the actions available in the message toolbar.
141
+ * Sets the actions of the message toolbar.
120
142
  * These actions display in the message toolbar and let you perform specific operations on the message.
143
+ *
121
144
  * @default []
122
145
  */
123
146
  messageToolbarActions = [];
124
147
  /**
125
148
  * Sets the value of the Message Box.
149
+ *
126
150
  * @default ''
127
151
  */
128
152
  inputValue = '';
129
153
  /**
130
- * Specifies the default actions available in the message context menu.
154
+ * Sets the settings for the author's messages.
155
+ */
156
+ authorMessageSettings;
157
+ /**
158
+ * Sets the settings for the receivers' messages.
159
+ */
160
+ receiverMessageSettings;
161
+ /**
162
+ * Sets the default actions that display in the message context menu.
131
163
  *
132
164
  * @default [{ id: 'copy', label: 'Copy', icon: 'copy', svgIcon: copyIcon, disabled: false }, { id: 'reply', label: 'Reply', icon: 'undo', svgIcon: undoIcon, disabled: false }]
133
165
  */
134
166
  defaultContextMenuActions = CONTEXT_MENU_ACTIONS;
135
167
  /**
136
- * Specifies the actions available in the message as a context menu.
168
+ * Sets the actions that display in the message as a context menu.
137
169
  * These actions display as menu items and let you perform specific operations on the message.
138
170
  * The default actions are `copy` and `reply` and are defined by their `id`.
139
171
  */
@@ -144,11 +176,13 @@ export class ChatComponent {
144
176
  return this._messageContextMenuActions;
145
177
  }
146
178
  /**
147
- * Specifies the default actions available in the file actions DropDownButton.
179
+ * Sets the default actions that display in the file actions DropDownButton.
180
+ *
181
+ * @default [{ id: 'download', label: 'Download', icon: 'download', svgIcon: downloadIcon, disabled: false }]
148
182
  */
149
183
  defaultFileActions = FILE_ACTIONS;
150
184
  /**
151
- * Specifies the actions available in the file as items of a DropDownButton.
185
+ * Sets the actions that display in the file as items of a DropDownButton.
152
186
  * These actions display when you click the file DropDownButton and let you perform specific operations on the file.
153
187
  * The default action is `download` and is defined by its `id`.
154
188
  *
@@ -161,17 +195,40 @@ export class ChatComponent {
161
195
  return this._fileActions;
162
196
  }
163
197
  /**
164
- * Sets the suggestions to display in the message input box.
165
- * Suggestions display as a list of clickable items that let you quickly insert predefined text into the message input.
166
- * @default []
198
+ * Sets the layout of the files in the message bubble.
199
+ *
200
+ * @default 'vertical'
167
201
  */
168
- suggestions = [];
202
+ set messageFilesLayout(layout) {
203
+ this.chatService.messageFilesLayout = layout;
204
+ }
205
+ /**
206
+ * Sets the layout of the suggestions above the message input box.
207
+ *
208
+ * @default 'scroll'
209
+ */
210
+ set suggestionsLayout(layoutMode) {
211
+ if (layoutMode) {
212
+ this.chatService.suggestionsLayout = layoutMode;
213
+ }
214
+ }
215
+ /**
216
+ * Sets the layout of the quick actions suggested below the messages.
217
+ *
218
+ * @default 'scroll'
219
+ */
220
+ set quickActionsLayout(layoutMode) {
221
+ if (layoutMode) {
222
+ this.chatService.quickActionsLayout = layoutMode;
223
+ }
224
+ }
169
225
  /**
170
- * Sets the visibility of the message toolbar.
226
+ * Sets the suggestions that display in the message input box.
227
+ * Suggestions display as a list of clickable items that let you quickly insert predefined text into the message input.
171
228
  *
172
- * @default 'hidden'
229
+ * @default []
173
230
  */
174
- messageToolbarVisibility = 'hidden';
231
+ suggestions = [];
175
232
  /**
176
233
  * Sets the send button settings for the Chat component.
177
234
  * Allows customization of the send button appearance, icons and disabled state.
@@ -190,53 +247,53 @@ export class ChatComponent {
190
247
  return this._modelFields;
191
248
  }
192
249
  /**
193
- * Emits when the user sends a message by clicking the **Send** button or pressing **Enter**.
250
+ * Fires when the user sends a message by clicking the **Send** button or pressing **Enter**.
194
251
  *
195
252
  * The message is not automatically added to the `messages` array.
196
253
  */
197
254
  sendMessage = new EventEmitter();
198
255
  /**
199
- * Emits when the user clicks a quick action button in the message toolbar.
256
+ * Fires when the user clicks a quick action button in the message toolbar.
200
257
  */
201
258
  toolbarActionClick = new EventEmitter();
202
259
  /**
203
- * Emits when the user clicks an action in the message context menu.
260
+ * Fires when the user clicks an action in the message context menu.
204
261
  */
205
262
  contextMenuActionClick = new EventEmitter();
206
263
  /**
207
- * Emits when the user clicks an action in the file context menu.
264
+ * Fires when the user clicks an action in the file context menu.
208
265
  */
209
266
  fileActionClick = new EventEmitter();
210
267
  /**
211
- * Emits when the user clicks an action in the file context menu.
268
+ * Fires when the user clicks an action in the file context menu.
212
269
  */
213
270
  download = new EventEmitter();
214
271
  /**
215
- * Emits when the user clicks a quick action button.
272
+ * Fires when the user clicks a quick action button.
216
273
  * The Chat internally handles [known actions](slug:api_conversational-ui_actiontype) such as `reply`, `openUrl`, and `call`.
217
274
  *
218
275
  * The event is preventable. Calling [`preventDefault`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault) suppresses the built-in action.
219
276
  */
220
277
  executeAction = new EventEmitter();
221
278
  /**
222
- * Emits when the user clicks a suggestion in the message input box.
279
+ * Fires when the user clicks a suggestion in the message input box.
223
280
  */
224
281
  suggestionExecute = new EventEmitter();
225
282
  /**
226
- * Emits when the user selects a file in the message input box.
283
+ * Fires when the user selects a file in the message input box.
227
284
  */
228
285
  fileSelect = new EventEmitter();
229
286
  /**
230
- * Emits when the user removes a file from the message input box.
287
+ * Fires when the user removes a file from the message input box.
231
288
  */
232
289
  fileRemove = new EventEmitter();
233
290
  /**
234
- * Emits when the user unpins the pinned message.
291
+ * Fires when the user unpins the pinned message.
235
292
  * This event triggers when the user clicks the delete button on the pinned message.
236
293
  */
237
294
  unpin = new EventEmitter();
238
295
  /**
239
- * Emits when the user types in the message input box.
296
+ * Fires when the user types in the message input box.
240
297
  */
241
298
  inputValueChange = new EventEmitter();
242
299
  get className() {
@@ -245,13 +302,23 @@ export class ChatComponent {
245
302
  get dirAttr() {
246
303
  return this.direction;
247
304
  }
305
+ set messagesContextMenu(contextMenu) {
306
+ this.chatService.messagesContextMenu = contextMenu;
307
+ }
248
308
  attachmentTemplate;
249
309
  chatHeaderTemplate;
310
+ chatNoDataTemplate;
311
+ authorMessageContentTemplate;
312
+ receiverMessageContentTemplate;
313
+ messageContentTemplate;
314
+ authorMessageTemplate;
315
+ receiverMessageTemplate;
250
316
  messageTemplate;
251
317
  timestampTemplate;
252
318
  suggestionTemplate;
253
319
  statusTemplate;
254
320
  messageBoxTemplate;
321
+ userStatusTemplate;
255
322
  messageBox;
256
323
  /**
257
324
  * @hidden
@@ -259,17 +326,30 @@ export class ChatComponent {
259
326
  messageList;
260
327
  /**
261
328
  * @hidden
262
- * Returns processed messages when model fields are used, otherwise returns original messages
329
+ * Returns processed messages when model fields are used, otherwise returns original messages.
263
330
  */
264
331
  get processedMessages() {
265
332
  if (!this.messages || this.messages.length === 0) {
266
333
  return [];
267
334
  }
268
335
  if (this._modelFields && Object.keys(this._modelFields).some(key => this._modelFields[key] !== defaultModelFields[key])) {
269
- return processMessages(this.messages, this._modelFields);
336
+ if (this.messages !== this._lastMessagesReference || this._modelFields !== this._lastModelFields) {
337
+ this._cachedProcessedMessages = processMessages(this.messages, this._modelFields);
338
+ this._lastMessagesReference = this.messages;
339
+ this._lastModelFields = this._modelFields;
340
+ }
341
+ return this._cachedProcessedMessages;
270
342
  }
271
343
  return this.messages;
272
344
  }
345
+ /**
346
+ * Gets the actions available in the message context menu.
347
+ *
348
+ * @hidden
349
+ */
350
+ get contextMenuActions() {
351
+ return transformActions(this.chatService.calculatedContextMenuActions);
352
+ }
273
353
  /**
274
354
  * @hidden
275
355
  */
@@ -297,6 +377,9 @@ export class ChatComponent {
297
377
  _modelFields = defaultModelFields;
298
378
  _messageContextMenuActions = CONTEXT_MENU_ACTIONS;
299
379
  _fileActions = FILE_ACTIONS;
380
+ _cachedProcessedMessages = [];
381
+ _lastMessagesReference = null;
382
+ _lastModelFields = null;
300
383
  constructor(localization, zone, renderer, element, chatService) {
301
384
  this.localization = localization;
302
385
  this.zone = zone;
@@ -314,6 +397,9 @@ export class ChatComponent {
314
397
  */
315
398
  ngOnInit() {
316
399
  this.chatService.messageWidthMode = this.messageWidthMode;
400
+ this.chatService.timestampVisibility = this.timestampVisibility;
401
+ this.chatService.showUsername = this.showUsername;
402
+ this.chatService.showAvatar = this.showAvatar;
317
403
  this.chatService.allowMessageCollapse = this.allowMessageCollapse;
318
404
  this.chatService.enableSpeechToText = this.enableSpeechToText;
319
405
  this.chatService.sendButtonSettings = this.sendButtonSettings;
@@ -321,7 +407,8 @@ export class ChatComponent {
321
407
  this.chatService.messageToolbarActions = this.messageToolbarActions;
322
408
  this.chatService.messageContextMenuActions = this.messageContextMenuActions;
323
409
  this.chatService.fileActions = this.fileActions;
324
- this.chatService.messageToolbarVisibility = this.messageToolbarVisibility;
410
+ this.chatService.authorMessageSettings = this.authorMessageSettings;
411
+ this.chatService.receiverMessageSettings = this.receiverMessageSettings;
325
412
  this.chatService.messages = this.processedMessages || [];
326
413
  this.chatService.chatElement = this.messageList;
327
414
  this.subs.add(this.chatService.toolbarAction$.subscribe((actionEvent) => {
@@ -362,6 +449,9 @@ export class ChatComponent {
362
449
  this.updateChatServiceProperties([
363
450
  'authorId',
364
451
  'messageWidthMode',
452
+ 'timestampVisibility',
453
+ 'showUsername',
454
+ 'showAvatar',
365
455
  'allowMessageCollapse',
366
456
  'enableSpeechToText',
367
457
  'sendButtonSettings',
@@ -369,7 +459,8 @@ export class ChatComponent {
369
459
  'messageToolbarActions',
370
460
  'messageContextMenuActions',
371
461
  'fileActions',
372
- 'messageToolbarVisibility'
462
+ 'authorMessageSettings',
463
+ 'receiverMessageSettings'
373
464
  ], changes);
374
465
  }
375
466
  /**
@@ -418,6 +509,43 @@ export class ChatComponent {
418
509
  this.chatService.scrollToMessage(this.pinnedMessage?.id);
419
510
  }
420
511
  }
512
+ /**
513
+ * @hidden
514
+ */
515
+ onContextMenuAction(action) {
516
+ if (action.id === 'reply') {
517
+ this.chatService.reply = this.chatService.activeMessage;
518
+ }
519
+ if (action.id === 'copy') {
520
+ navigator.clipboard.writeText(this.chatService.activeMessage.text);
521
+ }
522
+ this.chatService.emit('contextMenuAction', { action, message: this.chatService.activeMessage });
523
+ }
524
+ /**
525
+ * @hidden
526
+ */
527
+ handleMenuClose(event) {
528
+ if (event) {
529
+ const originalEvent = event.originalEvent;
530
+ originalEvent && this.onActionButtonClick(originalEvent);
531
+ }
532
+ this.chatService.activeMessage = null;
533
+ this.chatService.emit('contextMenuVisibilityChange', false);
534
+ if (this.chatService.selectOnMenuClose) {
535
+ this.chatService.activeMessageElement.selected = true;
536
+ this.chatService.focusActiveMessageElement();
537
+ }
538
+ }
539
+ /**
540
+ * @hidden
541
+ */
542
+ onActionButtonClick(event) {
543
+ const clickOutsideMessage = event instanceof MouseEvent && !event.target?.closest('.k-chat-bubble');
544
+ const menuItemClick = event instanceof MouseEvent && event.target?.closest(MENU_ITEM_SELECTOR);
545
+ if (clickOutsideMessage && !menuItemClick) {
546
+ this.chatService.selectOnMenuClose = false;
547
+ }
548
+ }
421
549
  findLastPinnedMessage() {
422
550
  return [...this.processedMessages].reverse().find((message) => message.isPinned);
423
551
  }
@@ -441,14 +569,15 @@ export class ChatComponent {
441
569
  });
442
570
  }
443
571
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatComponent, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.ChatService }], target: i0.ɵɵFactoryTarget.Component });
444
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ChatComponent, isStandalone: true, selector: "kendo-chat", inputs: { messages: "messages", authorId: "authorId", messageBoxType: "messageBoxType", height: "height", width: "width", placeholder: "placeholder", messageWidthMode: "messageWidthMode", allowMessageCollapse: "allowMessageCollapse", enableSpeechToText: "enableSpeechToText", enableFileSelect: "enableFileSelect", messageToolbarActions: "messageToolbarActions", inputValue: "inputValue", messageContextMenuActions: "messageContextMenuActions", fileActions: "fileActions", suggestions: "suggestions", messageToolbarVisibility: "messageToolbarVisibility", sendButtonSettings: "sendButtonSettings", modelFields: "modelFields" }, outputs: { sendMessage: "sendMessage", toolbarActionClick: "toolbarActionClick", contextMenuActionClick: "contextMenuActionClick", fileActionClick: "fileActionClick", download: "download", executeAction: "executeAction", suggestionExecute: "suggestionExecute", fileSelect: "fileSelect", fileRemove: "fileRemove", unpin: "unpin", inputValueChange: "inputValueChange" }, host: { properties: { "class": "this.className", "attr.dir": "this.dirAttr" } }, providers: [
572
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ChatComponent, isStandalone: true, selector: "kendo-chat", inputs: { messages: "messages", authorId: "authorId", messageBoxType: "messageBoxType", height: "height", width: "width", placeholder: "placeholder", messageWidthMode: "messageWidthMode", timestampVisibility: "timestampVisibility", showUsername: "showUsername", showAvatar: "showAvatar", allowMessageCollapse: "allowMessageCollapse", enableSpeechToText: "enableSpeechToText", enableFileSelect: "enableFileSelect", messageToolbarActions: "messageToolbarActions", inputValue: "inputValue", authorMessageSettings: "authorMessageSettings", receiverMessageSettings: "receiverMessageSettings", messageContextMenuActions: "messageContextMenuActions", fileActions: "fileActions", messageFilesLayout: "messageFilesLayout", suggestionsLayout: "suggestionsLayout", quickActionsLayout: "quickActionsLayout", suggestions: "suggestions", sendButtonSettings: "sendButtonSettings", modelFields: "modelFields" }, outputs: { sendMessage: "sendMessage", toolbarActionClick: "toolbarActionClick", contextMenuActionClick: "contextMenuActionClick", fileActionClick: "fileActionClick", download: "download", executeAction: "executeAction", suggestionExecute: "suggestionExecute", fileSelect: "fileSelect", fileRemove: "fileRemove", unpin: "unpin", inputValueChange: "inputValueChange" }, host: { properties: { "class": "this.className", "attr.dir": "this.dirAttr" } }, providers: [
445
573
  LocalizationService,
446
574
  ChatService,
575
+ SuggestionsScrollService,
447
576
  {
448
577
  provide: L10N_PREFIX,
449
578
  useValue: 'kendo.chat'
450
579
  }
451
- ], queries: [{ propertyName: "attachmentTemplate", first: true, predicate: AttachmentTemplateDirective, descendants: true }, { propertyName: "chatHeaderTemplate", first: true, predicate: ChatHeaderTemplateDirective, descendants: true }, { propertyName: "messageTemplate", first: true, predicate: MessageTemplateDirective, descendants: true }, { propertyName: "timestampTemplate", first: true, predicate: ChatTimestampTemplateDirective, descendants: true }, { propertyName: "suggestionTemplate", first: true, predicate: ChatSuggestionTemplateDirective, descendants: true }, { propertyName: "statusTemplate", first: true, predicate: ChatStatusTemplateDirective, descendants: true }, { propertyName: "messageBoxTemplate", first: true, predicate: ChatMessageBoxTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "messageBox", first: true, predicate: ["messageBox"], descendants: true }, { propertyName: "messageList", first: true, predicate: ["messageList"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
580
+ ], queries: [{ propertyName: "attachmentTemplate", first: true, predicate: AttachmentTemplateDirective, descendants: true }, { propertyName: "chatHeaderTemplate", first: true, predicate: ChatHeaderTemplateDirective, descendants: true }, { propertyName: "chatNoDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "authorMessageContentTemplate", first: true, predicate: AuthorMessageContentTemplateDirective, descendants: true }, { propertyName: "receiverMessageContentTemplate", first: true, predicate: ReceiverMessageContentTemplateDirective, descendants: true }, { propertyName: "messageContentTemplate", first: true, predicate: MessageContentTemplateDirective, descendants: true }, { propertyName: "authorMessageTemplate", first: true, predicate: AuthorMessageTemplateDirective, descendants: true }, { propertyName: "receiverMessageTemplate", first: true, predicate: ReceiverMessageTemplateDirective, descendants: true }, { propertyName: "messageTemplate", first: true, predicate: MessageTemplateDirective, descendants: true }, { propertyName: "timestampTemplate", first: true, predicate: ChatTimestampTemplateDirective, descendants: true }, { propertyName: "suggestionTemplate", first: true, predicate: ChatSuggestionTemplateDirective, descendants: true }, { propertyName: "statusTemplate", first: true, predicate: ChatStatusTemplateDirective, descendants: true }, { propertyName: "messageBoxTemplate", first: true, predicate: ChatMessageBoxTemplateDirective, descendants: true }, { propertyName: "userStatusTemplate", first: true, predicate: ChatUserStatusTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "messagesContextMenu", first: true, predicate: ["messagesContextMenu"], descendants: true }, { propertyName: "messageBox", first: true, predicate: ["messageBox"], descendants: true }, { propertyName: "messageList", first: true, predicate: ["messageList"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
452
581
  <ng-container kendoChatLocalizedMessages
453
582
  i18n-deletedMessageSenderText="kendo.chat.deletedMessageSenderText|The text that is displayed when the sender deletes a message"
454
583
  deletedMessageSenderText="You removed this message."
@@ -497,10 +626,16 @@ export class ChatComponent {
497
626
 
498
627
  i18n-downloadAllFilesText="kendo.chat.downloadAllFilesText|Sets the text that is displayed in the download section of the message."
499
628
  downloadAllFilesText="Download all"
629
+
630
+ i18n-previousSuggestionsButtonTitle="kendo.chat.previousSuggestionsButtonTitle|The title of the button that scrolls to the previous suggestions"
631
+ previousSuggestionsButtonTitle="Scroll left"
632
+
633
+ i18n-nextSuggestionsButtonTitle="kendo.chat.nextSuggestionsButtonTitle|The title of the button that scrolls to the next suggestions"
634
+ nextSuggestionsButtonTitle="Scroll right"
500
635
  >
501
636
  </ng-container>
502
637
 
503
- <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky">
638
+ <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky" themeColor="inherit">
504
639
  <ng-container *ngTemplateOutlet="chatHeaderTemplate.templateRef"></ng-container>
505
640
  </kendo-appbar>
506
641
  <div class="k-message-reference k-message-reference-receiver k-message-pinned" *ngIf="pinnedMessage" (click)="scrollToPinnedMessage()">
@@ -516,7 +651,7 @@ export class ChatComponent {
516
651
  </div>
517
652
  <div
518
653
  #messageList
519
- class="k-message-list k-avatars"
654
+ class="k-message-list"
520
655
  aria-live="polite"
521
656
  role="log"
522
657
  kendoChatScrollAnchor
@@ -524,19 +659,32 @@ export class ChatComponent {
524
659
  #anchor="scrollAnchor"
525
660
  [(autoScroll)]="autoScroll"
526
661
  >
527
- <kendo-chat-message-list
528
- [messages]="processedMessages"
529
- [messageTemplate]="messageTemplate"
530
- [timestampTemplate]="timestampTemplate"
531
- [statusTemplate]="statusTemplate"
532
- [localization]="localizationText"
533
- [attachmentTemplate]="attachmentTemplate"
534
- [authorId]="authorId"
535
- (executeAction)="dispatchAction($event)"
536
- (resize)="anchor.scrollToBottom()"
537
- (navigate)="this.autoScroll = false"
538
- >
539
- </kendo-chat-message-list>
662
+ <div *ngIf="processedMessages && processedMessages.length === 0; else chatMessageList" class="k-message-list-content k-message-list-content-empty">
663
+ <ng-template
664
+ [ngTemplateOutlet]="chatNoDataTemplate?.templateRef">
665
+ </ng-template>
666
+ </div>
667
+ <ng-template #chatMessageList>
668
+ <kendo-chat-message-list
669
+ [messages]="processedMessages"
670
+ [authorMessageContentTemplate]="authorMessageContentTemplate"
671
+ [receiverMessageContentTemplate]="receiverMessageContentTemplate"
672
+ [messageContentTemplate]="messageContentTemplate"
673
+ [authorMessageTemplate]="authorMessageTemplate"
674
+ [receiverMessageTemplate]="receiverMessageTemplate"
675
+ [messageTemplate]="messageTemplate"
676
+ [timestampTemplate]="timestampTemplate"
677
+ [statusTemplate]="statusTemplate"
678
+ [userStatusTemplate]="userStatusTemplate"
679
+ [localization]="localizationText"
680
+ [attachmentTemplate]="attachmentTemplate"
681
+ [authorId]="authorId"
682
+ (executeAction)="dispatchAction($event)"
683
+ (resize)="anchor.scrollToBottom()"
684
+ (navigate)="this.autoScroll = false"
685
+ >
686
+ </kendo-chat-message-list>
687
+ </ng-template>
540
688
  </div>
541
689
  <kendo-message-box
542
690
  #messageBox
@@ -554,7 +702,16 @@ export class ChatComponent {
554
702
  (fileRemove)="fileRemove.emit($event)"
555
703
  >
556
704
  </kendo-message-box>
557
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoChatLocalizedMessages]" }, { kind: "directive", type: ScrollAnchorDirective, selector: "[kendoChatScrollAnchor]", inputs: ["autoScroll"], outputs: ["autoScrollChange"], exportAs: ["scrollAnchor"] }, { kind: "component", type: MessageListComponent, selector: "kendo-chat-message-list", inputs: ["messages", "attachmentTemplate", "messageTemplate", "timestampTemplate", "statusTemplate", "localization", "authorId"], outputs: ["executeAction", "navigate", "resize"] }, { kind: "component", type: MessageBoxComponent, selector: "kendo-message-box", inputs: ["authorId", "autoScroll", "suggestions", "placeholder", "inputValue", "localization", "messageBoxTemplate", "suggestionTemplate"], outputs: ["sendMessage", "executeSuggestion", "fileSelect", "fileRemove"] }, { kind: "component", type: MessageReferenceComponent, selector: "chat-message-reference-content", inputs: ["message"] }, { kind: "component", type: AppBarComponent, selector: "kendo-appbar", inputs: ["position", "positionMode", "themeColor"], exportAs: ["kendoAppBar"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
705
+
706
+ <kendo-contextmenu
707
+ #messagesContextMenu
708
+ [items]="contextMenuActions"
709
+ [popupAlign]="{ horizontal: 'right', vertical: 'top' }"
710
+ [collision]="{ horizontal: 'flip', vertical: 'flip'}"
711
+ (popupClose)="handleMenuClose($event)"
712
+ (select)="onContextMenuAction($event.item.originalAction)"
713
+ ></kendo-contextmenu>
714
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoChatLocalizedMessages]" }, { kind: "directive", type: ScrollAnchorDirective, selector: "[kendoChatScrollAnchor]", inputs: ["autoScroll"], outputs: ["autoScrollChange"], exportAs: ["scrollAnchor"] }, { kind: "component", type: MessageListComponent, selector: "kendo-chat-message-list", inputs: ["messages", "attachmentTemplate", "authorMessageContentTemplate", "receiverMessageContentTemplate", "messageContentTemplate", "authorMessageTemplate", "receiverMessageTemplate", "messageTemplate", "timestampTemplate", "statusTemplate", "userStatusTemplate", "localization", "authorId"], outputs: ["executeAction", "navigate", "resize"] }, { kind: "component", type: MessageBoxComponent, selector: "kendo-message-box", inputs: ["authorId", "autoScroll", "suggestions", "placeholder", "inputValue", "localization", "messageBoxTemplate", "suggestionTemplate"], outputs: ["sendMessage", "executeSuggestion", "fileSelect", "fileRemove"] }, { kind: "component", type: MessageReferenceComponent, selector: "chat-message-reference-content", inputs: ["message"] }, { kind: "component", type: AppBarComponent, selector: "kendo-appbar", inputs: ["position", "positionMode", "themeColor"], exportAs: ["kendoAppBar"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }] });
558
715
  }
559
716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatComponent, decorators: [{
560
717
  type: Component,
@@ -562,6 +719,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
562
719
  providers: [
563
720
  LocalizationService,
564
721
  ChatService,
722
+ SuggestionsScrollService,
565
723
  {
566
724
  provide: L10N_PREFIX,
567
725
  useValue: 'kendo.chat'
@@ -617,10 +775,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
617
775
 
618
776
  i18n-downloadAllFilesText="kendo.chat.downloadAllFilesText|Sets the text that is displayed in the download section of the message."
619
777
  downloadAllFilesText="Download all"
778
+
779
+ i18n-previousSuggestionsButtonTitle="kendo.chat.previousSuggestionsButtonTitle|The title of the button that scrolls to the previous suggestions"
780
+ previousSuggestionsButtonTitle="Scroll left"
781
+
782
+ i18n-nextSuggestionsButtonTitle="kendo.chat.nextSuggestionsButtonTitle|The title of the button that scrolls to the next suggestions"
783
+ nextSuggestionsButtonTitle="Scroll right"
620
784
  >
621
785
  </ng-container>
622
786
 
623
- <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky">
787
+ <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky" themeColor="inherit">
624
788
  <ng-container *ngTemplateOutlet="chatHeaderTemplate.templateRef"></ng-container>
625
789
  </kendo-appbar>
626
790
  <div class="k-message-reference k-message-reference-receiver k-message-pinned" *ngIf="pinnedMessage" (click)="scrollToPinnedMessage()">
@@ -636,7 +800,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
636
800
  </div>
637
801
  <div
638
802
  #messageList
639
- class="k-message-list k-avatars"
803
+ class="k-message-list"
640
804
  aria-live="polite"
641
805
  role="log"
642
806
  kendoChatScrollAnchor
@@ -644,19 +808,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
644
808
  #anchor="scrollAnchor"
645
809
  [(autoScroll)]="autoScroll"
646
810
  >
647
- <kendo-chat-message-list
648
- [messages]="processedMessages"
649
- [messageTemplate]="messageTemplate"
650
- [timestampTemplate]="timestampTemplate"
651
- [statusTemplate]="statusTemplate"
652
- [localization]="localizationText"
653
- [attachmentTemplate]="attachmentTemplate"
654
- [authorId]="authorId"
655
- (executeAction)="dispatchAction($event)"
656
- (resize)="anchor.scrollToBottom()"
657
- (navigate)="this.autoScroll = false"
658
- >
659
- </kendo-chat-message-list>
811
+ <div *ngIf="processedMessages && processedMessages.length === 0; else chatMessageList" class="k-message-list-content k-message-list-content-empty">
812
+ <ng-template
813
+ [ngTemplateOutlet]="chatNoDataTemplate?.templateRef">
814
+ </ng-template>
815
+ </div>
816
+ <ng-template #chatMessageList>
817
+ <kendo-chat-message-list
818
+ [messages]="processedMessages"
819
+ [authorMessageContentTemplate]="authorMessageContentTemplate"
820
+ [receiverMessageContentTemplate]="receiverMessageContentTemplate"
821
+ [messageContentTemplate]="messageContentTemplate"
822
+ [authorMessageTemplate]="authorMessageTemplate"
823
+ [receiverMessageTemplate]="receiverMessageTemplate"
824
+ [messageTemplate]="messageTemplate"
825
+ [timestampTemplate]="timestampTemplate"
826
+ [statusTemplate]="statusTemplate"
827
+ [userStatusTemplate]="userStatusTemplate"
828
+ [localization]="localizationText"
829
+ [attachmentTemplate]="attachmentTemplate"
830
+ [authorId]="authorId"
831
+ (executeAction)="dispatchAction($event)"
832
+ (resize)="anchor.scrollToBottom()"
833
+ (navigate)="this.autoScroll = false"
834
+ >
835
+ </kendo-chat-message-list>
836
+ </ng-template>
660
837
  </div>
661
838
  <kendo-message-box
662
839
  #messageBox
@@ -674,9 +851,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
674
851
  (fileRemove)="fileRemove.emit($event)"
675
852
  >
676
853
  </kendo-message-box>
854
+
855
+ <kendo-contextmenu
856
+ #messagesContextMenu
857
+ [items]="contextMenuActions"
858
+ [popupAlign]="{ horizontal: 'right', vertical: 'top' }"
859
+ [collision]="{ horizontal: 'flip', vertical: 'flip'}"
860
+ (popupClose)="handleMenuClose($event)"
861
+ (select)="onContextMenuAction($event.item.originalAction)"
862
+ ></kendo-contextmenu>
677
863
  `,
678
864
  standalone: true,
679
- imports: [LocalizedMessagesDirective, ScrollAnchorDirective, MessageListComponent, MessageBoxComponent, MessageReferenceComponent, AppBarComponent, NgTemplateOutlet, NgIf, IconWrapperComponent, KENDO_BUTTON]
865
+ imports: [LocalizedMessagesDirective, ScrollAnchorDirective, MessageListComponent, MessageBoxComponent, MessageReferenceComponent, AppBarComponent, NgTemplateOutlet, NgIf, IconWrapperComponent, KENDO_BUTTON, ContextMenuComponent]
680
866
  }]
681
867
  }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.ChatService }], propDecorators: { messages: [{
682
868
  type: Input
@@ -692,6 +878,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
692
878
  type: Input
693
879
  }], messageWidthMode: [{
694
880
  type: Input
881
+ }], timestampVisibility: [{
882
+ type: Input
883
+ }], showUsername: [{
884
+ type: Input
885
+ }], showAvatar: [{
886
+ type: Input
695
887
  }], allowMessageCollapse: [{
696
888
  type: Input
697
889
  }], enableSpeechToText: [{
@@ -702,13 +894,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
702
894
  type: Input
703
895
  }], inputValue: [{
704
896
  type: Input
897
+ }], authorMessageSettings: [{
898
+ type: Input
899
+ }], receiverMessageSettings: [{
900
+ type: Input
705
901
  }], messageContextMenuActions: [{
706
902
  type: Input
707
903
  }], fileActions: [{
708
904
  type: Input
709
- }], suggestions: [{
905
+ }], messageFilesLayout: [{
906
+ type: Input
907
+ }], suggestionsLayout: [{
710
908
  type: Input
711
- }], messageToolbarVisibility: [{
909
+ }], quickActionsLayout: [{
910
+ type: Input
911
+ }], suggestions: [{
712
912
  type: Input
713
913
  }], sendButtonSettings: [{
714
914
  type: Input
@@ -742,12 +942,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
742
942
  }], dirAttr: [{
743
943
  type: HostBinding,
744
944
  args: ['attr.dir']
945
+ }], messagesContextMenu: [{
946
+ type: ViewChild,
947
+ args: ['messagesContextMenu']
745
948
  }], attachmentTemplate: [{
746
949
  type: ContentChild,
747
950
  args: [AttachmentTemplateDirective]
748
951
  }], chatHeaderTemplate: [{
749
952
  type: ContentChild,
750
953
  args: [ChatHeaderTemplateDirective]
954
+ }], chatNoDataTemplate: [{
955
+ type: ContentChild,
956
+ args: [NoDataTemplateDirective]
957
+ }], authorMessageContentTemplate: [{
958
+ type: ContentChild,
959
+ args: [AuthorMessageContentTemplateDirective]
960
+ }], receiverMessageContentTemplate: [{
961
+ type: ContentChild,
962
+ args: [ReceiverMessageContentTemplateDirective]
963
+ }], messageContentTemplate: [{
964
+ type: ContentChild,
965
+ args: [MessageContentTemplateDirective]
966
+ }], authorMessageTemplate: [{
967
+ type: ContentChild,
968
+ args: [AuthorMessageTemplateDirective]
969
+ }], receiverMessageTemplate: [{
970
+ type: ContentChild,
971
+ args: [ReceiverMessageTemplateDirective]
751
972
  }], messageTemplate: [{
752
973
  type: ContentChild,
753
974
  args: [MessageTemplateDirective]
@@ -763,6 +984,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
763
984
  }], messageBoxTemplate: [{
764
985
  type: ContentChild,
765
986
  args: [ChatMessageBoxTemplateDirective]
987
+ }], userStatusTemplate: [{
988
+ type: ContentChild,
989
+ args: [ChatUserStatusTemplateDirective]
766
990
  }], messageBox: [{
767
991
  type: ViewChild,
768
992
  args: ['messageBox']