@progress/kendo-angular-conversational-ui 21.0.0-develop.8 → 21.0.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.
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 +114 -35
  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 +298 -72
  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 +1825 -568
  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 types.
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,34 @@ 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 usernames in messages.
112
+ * When set to `true`, the username displays above each message bubble.
113
+ *
114
+ * @default true
115
+ */
116
+ showUsername = true;
117
+ /**
118
+ * Controls the avatar visibility for the messages.
119
+ * When set to `true`, the user avatar displays next to each message bubble.
120
+ *
121
+ * @default true
122
+ */
123
+ showAvatar = true;
101
124
  /**
102
125
  * Enables the expand or collapse functionality for messages.
126
+ *
103
127
  * @default false
104
128
  */
105
129
  allowMessageCollapse = false;
@@ -116,24 +140,34 @@ export class ChatComponent {
116
140
  */
117
141
  enableFileSelect = true;
118
142
  /**
119
- * Specifies the actions available in the message toolbar.
143
+ * Sets the actions of the message toolbar.
120
144
  * These actions display in the message toolbar and let you perform specific operations on the message.
145
+ *
121
146
  * @default []
122
147
  */
123
148
  messageToolbarActions = [];
124
149
  /**
125
150
  * Sets the value of the Message Box.
151
+ *
126
152
  * @default ''
127
153
  */
128
154
  inputValue = '';
129
155
  /**
130
- * Specifies the default actions available in the message context menu.
156
+ * Sets the settings for the author's messages.
157
+ */
158
+ authorMessageSettings;
159
+ /**
160
+ * Sets the settings for the receivers' messages.
161
+ */
162
+ receiverMessageSettings;
163
+ /**
164
+ * Sets the default actions that display in the message context menu.
131
165
  *
132
166
  * @default [{ id: 'copy', label: 'Copy', icon: 'copy', svgIcon: copyIcon, disabled: false }, { id: 'reply', label: 'Reply', icon: 'undo', svgIcon: undoIcon, disabled: false }]
133
167
  */
134
168
  defaultContextMenuActions = CONTEXT_MENU_ACTIONS;
135
169
  /**
136
- * Specifies the actions available in the message as a context menu.
170
+ * Sets the actions that display in the message as a context menu.
137
171
  * These actions display as menu items and let you perform specific operations on the message.
138
172
  * The default actions are `copy` and `reply` and are defined by their `id`.
139
173
  */
@@ -144,11 +178,13 @@ export class ChatComponent {
144
178
  return this._messageContextMenuActions;
145
179
  }
146
180
  /**
147
- * Specifies the default actions available in the file actions DropDownButton.
181
+ * Sets the default actions that display in the file actions DropDownButton.
182
+ *
183
+ * @default [{ id: 'download', label: 'Download', icon: 'download', svgIcon: downloadIcon, disabled: false }]
148
184
  */
149
185
  defaultFileActions = FILE_ACTIONS;
150
186
  /**
151
- * Specifies the actions available in the file as items of a DropDownButton.
187
+ * Sets the actions that display in the file as items of a DropDownButton.
152
188
  * These actions display when you click the file DropDownButton and let you perform specific operations on the file.
153
189
  * The default action is `download` and is defined by its `id`.
154
190
  *
@@ -161,17 +197,40 @@ export class ChatComponent {
161
197
  return this._fileActions;
162
198
  }
163
199
  /**
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 []
200
+ * Sets the layout of the files in the message bubble.
201
+ *
202
+ * @default 'vertical'
167
203
  */
168
- suggestions = [];
204
+ set messageFilesLayout(layout) {
205
+ this.chatService.messageFilesLayout = layout;
206
+ }
207
+ /**
208
+ * Sets the layout of the suggestions above the message input box.
209
+ *
210
+ * @default 'scroll'
211
+ */
212
+ set suggestionsLayout(layoutMode) {
213
+ if (layoutMode) {
214
+ this.chatService.suggestionsLayout = layoutMode;
215
+ }
216
+ }
217
+ /**
218
+ * Sets the layout of the quick actions suggested below the messages.
219
+ *
220
+ * @default 'scroll'
221
+ */
222
+ set quickActionsLayout(layoutMode) {
223
+ if (layoutMode) {
224
+ this.chatService.quickActionsLayout = layoutMode;
225
+ }
226
+ }
169
227
  /**
170
- * Sets the visibility of the message toolbar.
228
+ * Sets the suggestions that display in the message input box.
229
+ * Suggestions display as a list of clickable items that let you quickly insert predefined text into the message input.
171
230
  *
172
- * @default 'hidden'
231
+ * @default []
173
232
  */
174
- messageToolbarVisibility = 'hidden';
233
+ suggestions = [];
175
234
  /**
176
235
  * Sets the send button settings for the Chat component.
177
236
  * Allows customization of the send button appearance, icons and disabled state.
@@ -181,7 +240,7 @@ export class ChatComponent {
181
240
  sendButtonSettings = SEND_BTN_DEFAULT_SETTINGS;
182
241
  /**
183
242
  * Sets the names of the model fields from which the Chat reads its data.
184
- * Lets you map custom data structures to the expected `Message` format.
243
+ * Lets you map custom data types to the expected `Message` format.
185
244
  */
186
245
  set modelFields(value) {
187
246
  this._modelFields = { ...defaultModelFields, ...value };
@@ -190,53 +249,53 @@ export class ChatComponent {
190
249
  return this._modelFields;
191
250
  }
192
251
  /**
193
- * Emits when the user sends a message by clicking the **Send** button or pressing **Enter**.
252
+ * Fires when the user sends a message by clicking the **Send** button or pressing **Enter**.
194
253
  *
195
254
  * The message is not automatically added to the `messages` array.
196
255
  */
197
256
  sendMessage = new EventEmitter();
198
257
  /**
199
- * Emits when the user clicks a quick action button in the message toolbar.
258
+ * Fires when the user clicks a quick action button in the message toolbar.
200
259
  */
201
260
  toolbarActionClick = new EventEmitter();
202
261
  /**
203
- * Emits when the user clicks an action in the message context menu.
262
+ * Fires when the user clicks an action in the message context menu.
204
263
  */
205
264
  contextMenuActionClick = new EventEmitter();
206
265
  /**
207
- * Emits when the user clicks an action in the file context menu.
266
+ * Fires when the user clicks an action in the file context menu.
208
267
  */
209
268
  fileActionClick = new EventEmitter();
210
269
  /**
211
- * Emits when the user clicks an action in the file context menu.
270
+ * Fires when the user clicks an action in the file context menu.
212
271
  */
213
272
  download = new EventEmitter();
214
273
  /**
215
- * Emits when the user clicks a quick action button.
274
+ * Fires when the user clicks a quick action button.
216
275
  * The Chat internally handles [known actions](slug:api_conversational-ui_actiontype) such as `reply`, `openUrl`, and `call`.
217
276
  *
218
277
  * The event is preventable. Calling [`preventDefault`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault) suppresses the built-in action.
219
278
  */
220
279
  executeAction = new EventEmitter();
221
280
  /**
222
- * Emits when the user clicks a suggestion in the message input box.
281
+ * Fires when the user clicks a suggestion in the message input box.
223
282
  */
224
283
  suggestionExecute = new EventEmitter();
225
284
  /**
226
- * Emits when the user selects a file in the message input box.
285
+ * Fires when the user selects a file in the message input box.
227
286
  */
228
287
  fileSelect = new EventEmitter();
229
288
  /**
230
- * Emits when the user removes a file from the message input box.
289
+ * Fires when the user removes a file from the message input box.
231
290
  */
232
291
  fileRemove = new EventEmitter();
233
292
  /**
234
- * Emits when the user unpins the pinned message.
293
+ * Fires when the user unpins the pinned message.
235
294
  * This event triggers when the user clicks the delete button on the pinned message.
236
295
  */
237
296
  unpin = new EventEmitter();
238
297
  /**
239
- * Emits when the user types in the message input box.
298
+ * Fires when the user types in the message input box.
240
299
  */
241
300
  inputValueChange = new EventEmitter();
242
301
  get className() {
@@ -245,13 +304,23 @@ export class ChatComponent {
245
304
  get dirAttr() {
246
305
  return this.direction;
247
306
  }
307
+ set messagesContextMenu(contextMenu) {
308
+ this.chatService.messagesContextMenu = contextMenu;
309
+ }
248
310
  attachmentTemplate;
249
311
  chatHeaderTemplate;
312
+ chatNoDataTemplate;
313
+ authorMessageContentTemplate;
314
+ receiverMessageContentTemplate;
315
+ messageContentTemplate;
316
+ authorMessageTemplate;
317
+ receiverMessageTemplate;
250
318
  messageTemplate;
251
319
  timestampTemplate;
252
320
  suggestionTemplate;
253
321
  statusTemplate;
254
322
  messageBoxTemplate;
323
+ userStatusTemplate;
255
324
  messageBox;
256
325
  /**
257
326
  * @hidden
@@ -259,17 +328,30 @@ export class ChatComponent {
259
328
  messageList;
260
329
  /**
261
330
  * @hidden
262
- * Returns processed messages when model fields are used, otherwise returns original messages
331
+ * Returns processed messages when model fields are used, otherwise returns original messages.
263
332
  */
264
333
  get processedMessages() {
265
334
  if (!this.messages || this.messages.length === 0) {
266
335
  return [];
267
336
  }
268
337
  if (this._modelFields && Object.keys(this._modelFields).some(key => this._modelFields[key] !== defaultModelFields[key])) {
269
- return processMessages(this.messages, this._modelFields);
338
+ if (this.messages !== this._lastMessagesReference || this._modelFields !== this._lastModelFields) {
339
+ this._cachedProcessedMessages = processMessages(this.messages, this._modelFields);
340
+ this._lastMessagesReference = this.messages;
341
+ this._lastModelFields = this._modelFields;
342
+ }
343
+ return this._cachedProcessedMessages;
270
344
  }
271
345
  return this.messages;
272
346
  }
347
+ /**
348
+ * Gets the actions available in the message context menu.
349
+ *
350
+ * @hidden
351
+ */
352
+ get contextMenuActions() {
353
+ return transformActions(this.chatService.calculatedContextMenuActions);
354
+ }
273
355
  /**
274
356
  * @hidden
275
357
  */
@@ -297,6 +379,9 @@ export class ChatComponent {
297
379
  _modelFields = defaultModelFields;
298
380
  _messageContextMenuActions = CONTEXT_MENU_ACTIONS;
299
381
  _fileActions = FILE_ACTIONS;
382
+ _cachedProcessedMessages = [];
383
+ _lastMessagesReference = null;
384
+ _lastModelFields = null;
300
385
  constructor(localization, zone, renderer, element, chatService) {
301
386
  this.localization = localization;
302
387
  this.zone = zone;
@@ -314,6 +399,9 @@ export class ChatComponent {
314
399
  */
315
400
  ngOnInit() {
316
401
  this.chatService.messageWidthMode = this.messageWidthMode;
402
+ this.chatService.timestampVisibility = this.timestampVisibility;
403
+ this.chatService.showUsername = this.showUsername;
404
+ this.chatService.showAvatar = this.showAvatar;
317
405
  this.chatService.allowMessageCollapse = this.allowMessageCollapse;
318
406
  this.chatService.enableSpeechToText = this.enableSpeechToText;
319
407
  this.chatService.sendButtonSettings = this.sendButtonSettings;
@@ -321,7 +409,8 @@ export class ChatComponent {
321
409
  this.chatService.messageToolbarActions = this.messageToolbarActions;
322
410
  this.chatService.messageContextMenuActions = this.messageContextMenuActions;
323
411
  this.chatService.fileActions = this.fileActions;
324
- this.chatService.messageToolbarVisibility = this.messageToolbarVisibility;
412
+ this.chatService.authorMessageSettings = this.authorMessageSettings;
413
+ this.chatService.receiverMessageSettings = this.receiverMessageSettings;
325
414
  this.chatService.messages = this.processedMessages || [];
326
415
  this.chatService.chatElement = this.messageList;
327
416
  this.subs.add(this.chatService.toolbarAction$.subscribe((actionEvent) => {
@@ -362,6 +451,9 @@ export class ChatComponent {
362
451
  this.updateChatServiceProperties([
363
452
  'authorId',
364
453
  'messageWidthMode',
454
+ 'timestampVisibility',
455
+ 'showUsername',
456
+ 'showAvatar',
365
457
  'allowMessageCollapse',
366
458
  'enableSpeechToText',
367
459
  'sendButtonSettings',
@@ -369,7 +461,8 @@ export class ChatComponent {
369
461
  'messageToolbarActions',
370
462
  'messageContextMenuActions',
371
463
  'fileActions',
372
- 'messageToolbarVisibility'
464
+ 'authorMessageSettings',
465
+ 'receiverMessageSettings'
373
466
  ], changes);
374
467
  }
375
468
  /**
@@ -418,6 +511,43 @@ export class ChatComponent {
418
511
  this.chatService.scrollToMessage(this.pinnedMessage?.id);
419
512
  }
420
513
  }
514
+ /**
515
+ * @hidden
516
+ */
517
+ onContextMenuAction(action) {
518
+ if (action.id === 'reply') {
519
+ this.chatService.reply = this.chatService.activeMessage;
520
+ }
521
+ if (action.id === 'copy') {
522
+ navigator.clipboard.writeText(this.chatService.activeMessage.text);
523
+ }
524
+ this.chatService.emit('contextMenuAction', { action, message: this.chatService.activeMessage });
525
+ }
526
+ /**
527
+ * @hidden
528
+ */
529
+ handleMenuClose(event) {
530
+ if (event) {
531
+ const originalEvent = event.originalEvent;
532
+ originalEvent && this.onActionButtonClick(originalEvent);
533
+ }
534
+ this.chatService.activeMessage = null;
535
+ this.chatService.emit('contextMenuVisibilityChange', false);
536
+ if (this.chatService.selectOnMenuClose) {
537
+ this.chatService.activeMessageElement.selected = true;
538
+ this.chatService.focusActiveMessageElement();
539
+ }
540
+ }
541
+ /**
542
+ * @hidden
543
+ */
544
+ onActionButtonClick(event) {
545
+ const clickOutsideMessage = event instanceof MouseEvent && !event.target?.closest('.k-chat-bubble');
546
+ const menuItemClick = event instanceof MouseEvent && event.target?.closest(MENU_ITEM_SELECTOR);
547
+ if (clickOutsideMessage && !menuItemClick) {
548
+ this.chatService.selectOnMenuClose = false;
549
+ }
550
+ }
421
551
  findLastPinnedMessage() {
422
552
  return [...this.processedMessages].reverse().find((message) => message.isPinned);
423
553
  }
@@ -441,14 +571,15 @@ export class ChatComponent {
441
571
  });
442
572
  }
443
573
  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: [
574
+ 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
575
  LocalizationService,
446
576
  ChatService,
577
+ SuggestionsScrollService,
447
578
  {
448
579
  provide: L10N_PREFIX,
449
580
  useValue: 'kendo.chat'
450
581
  }
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: `
582
+ ], 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
583
  <ng-container kendoChatLocalizedMessages
453
584
  i18n-deletedMessageSenderText="kendo.chat.deletedMessageSenderText|The text that is displayed when the sender deletes a message"
454
585
  deletedMessageSenderText="You removed this message."
@@ -497,10 +628,16 @@ export class ChatComponent {
497
628
 
498
629
  i18n-downloadAllFilesText="kendo.chat.downloadAllFilesText|Sets the text that is displayed in the download section of the message."
499
630
  downloadAllFilesText="Download all"
631
+
632
+ i18n-previousSuggestionsButtonTitle="kendo.chat.previousSuggestionsButtonTitle|The title of the button that scrolls to the previous suggestions"
633
+ previousSuggestionsButtonTitle="Scroll left"
634
+
635
+ i18n-nextSuggestionsButtonTitle="kendo.chat.nextSuggestionsButtonTitle|The title of the button that scrolls to the next suggestions"
636
+ nextSuggestionsButtonTitle="Scroll right"
500
637
  >
501
638
  </ng-container>
502
639
 
503
- <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky">
640
+ <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky" themeColor="inherit">
504
641
  <ng-container *ngTemplateOutlet="chatHeaderTemplate.templateRef"></ng-container>
505
642
  </kendo-appbar>
506
643
  <div class="k-message-reference k-message-reference-receiver k-message-pinned" *ngIf="pinnedMessage" (click)="scrollToPinnedMessage()">
@@ -516,7 +653,7 @@ export class ChatComponent {
516
653
  </div>
517
654
  <div
518
655
  #messageList
519
- class="k-message-list k-avatars"
656
+ class="k-message-list"
520
657
  aria-live="polite"
521
658
  role="log"
522
659
  kendoChatScrollAnchor
@@ -524,19 +661,32 @@ export class ChatComponent {
524
661
  #anchor="scrollAnchor"
525
662
  [(autoScroll)]="autoScroll"
526
663
  >
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>
664
+ <div *ngIf="processedMessages && processedMessages.length === 0; else chatMessageList" class="k-message-list-content k-message-list-content-empty">
665
+ <ng-template
666
+ [ngTemplateOutlet]="chatNoDataTemplate?.templateRef">
667
+ </ng-template>
668
+ </div>
669
+ <ng-template #chatMessageList>
670
+ <kendo-chat-message-list
671
+ [messages]="processedMessages"
672
+ [authorMessageContentTemplate]="authorMessageContentTemplate"
673
+ [receiverMessageContentTemplate]="receiverMessageContentTemplate"
674
+ [messageContentTemplate]="messageContentTemplate"
675
+ [authorMessageTemplate]="authorMessageTemplate"
676
+ [receiverMessageTemplate]="receiverMessageTemplate"
677
+ [messageTemplate]="messageTemplate"
678
+ [timestampTemplate]="timestampTemplate"
679
+ [statusTemplate]="statusTemplate"
680
+ [userStatusTemplate]="userStatusTemplate"
681
+ [localization]="localizationText"
682
+ [attachmentTemplate]="attachmentTemplate"
683
+ [authorId]="authorId"
684
+ (executeAction)="dispatchAction($event)"
685
+ (resize)="anchor.scrollToBottom()"
686
+ (navigate)="this.autoScroll = false"
687
+ >
688
+ </kendo-chat-message-list>
689
+ </ng-template>
540
690
  </div>
541
691
  <kendo-message-box
542
692
  #messageBox
@@ -554,7 +704,16 @@ export class ChatComponent {
554
704
  (fileRemove)="fileRemove.emit($event)"
555
705
  >
556
706
  </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"] }] });
707
+
708
+ <kendo-contextmenu
709
+ #messagesContextMenu
710
+ [items]="contextMenuActions"
711
+ [popupAlign]="{ horizontal: 'right', vertical: 'top' }"
712
+ [collision]="{ horizontal: 'flip', vertical: 'flip'}"
713
+ (popupClose)="handleMenuClose($event)"
714
+ (select)="onContextMenuAction($event.item.originalAction)"
715
+ ></kendo-contextmenu>
716
+ `, 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
717
  }
559
718
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatComponent, decorators: [{
560
719
  type: Component,
@@ -562,6 +721,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
562
721
  providers: [
563
722
  LocalizationService,
564
723
  ChatService,
724
+ SuggestionsScrollService,
565
725
  {
566
726
  provide: L10N_PREFIX,
567
727
  useValue: 'kendo.chat'
@@ -617,10 +777,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
617
777
 
618
778
  i18n-downloadAllFilesText="kendo.chat.downloadAllFilesText|Sets the text that is displayed in the download section of the message."
619
779
  downloadAllFilesText="Download all"
780
+
781
+ i18n-previousSuggestionsButtonTitle="kendo.chat.previousSuggestionsButtonTitle|The title of the button that scrolls to the previous suggestions"
782
+ previousSuggestionsButtonTitle="Scroll left"
783
+
784
+ i18n-nextSuggestionsButtonTitle="kendo.chat.nextSuggestionsButtonTitle|The title of the button that scrolls to the next suggestions"
785
+ nextSuggestionsButtonTitle="Scroll right"
620
786
  >
621
787
  </ng-container>
622
788
 
623
- <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky">
789
+ <kendo-appbar *ngIf="chatHeaderTemplate" class="k-chat-header" positionMode="sticky" themeColor="inherit">
624
790
  <ng-container *ngTemplateOutlet="chatHeaderTemplate.templateRef"></ng-container>
625
791
  </kendo-appbar>
626
792
  <div class="k-message-reference k-message-reference-receiver k-message-pinned" *ngIf="pinnedMessage" (click)="scrollToPinnedMessage()">
@@ -636,7 +802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
636
802
  </div>
637
803
  <div
638
804
  #messageList
639
- class="k-message-list k-avatars"
805
+ class="k-message-list"
640
806
  aria-live="polite"
641
807
  role="log"
642
808
  kendoChatScrollAnchor
@@ -644,19 +810,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
644
810
  #anchor="scrollAnchor"
645
811
  [(autoScroll)]="autoScroll"
646
812
  >
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>
813
+ <div *ngIf="processedMessages && processedMessages.length === 0; else chatMessageList" class="k-message-list-content k-message-list-content-empty">
814
+ <ng-template
815
+ [ngTemplateOutlet]="chatNoDataTemplate?.templateRef">
816
+ </ng-template>
817
+ </div>
818
+ <ng-template #chatMessageList>
819
+ <kendo-chat-message-list
820
+ [messages]="processedMessages"
821
+ [authorMessageContentTemplate]="authorMessageContentTemplate"
822
+ [receiverMessageContentTemplate]="receiverMessageContentTemplate"
823
+ [messageContentTemplate]="messageContentTemplate"
824
+ [authorMessageTemplate]="authorMessageTemplate"
825
+ [receiverMessageTemplate]="receiverMessageTemplate"
826
+ [messageTemplate]="messageTemplate"
827
+ [timestampTemplate]="timestampTemplate"
828
+ [statusTemplate]="statusTemplate"
829
+ [userStatusTemplate]="userStatusTemplate"
830
+ [localization]="localizationText"
831
+ [attachmentTemplate]="attachmentTemplate"
832
+ [authorId]="authorId"
833
+ (executeAction)="dispatchAction($event)"
834
+ (resize)="anchor.scrollToBottom()"
835
+ (navigate)="this.autoScroll = false"
836
+ >
837
+ </kendo-chat-message-list>
838
+ </ng-template>
660
839
  </div>
661
840
  <kendo-message-box
662
841
  #messageBox
@@ -674,9 +853,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
674
853
  (fileRemove)="fileRemove.emit($event)"
675
854
  >
676
855
  </kendo-message-box>
856
+
857
+ <kendo-contextmenu
858
+ #messagesContextMenu
859
+ [items]="contextMenuActions"
860
+ [popupAlign]="{ horizontal: 'right', vertical: 'top' }"
861
+ [collision]="{ horizontal: 'flip', vertical: 'flip'}"
862
+ (popupClose)="handleMenuClose($event)"
863
+ (select)="onContextMenuAction($event.item.originalAction)"
864
+ ></kendo-contextmenu>
677
865
  `,
678
866
  standalone: true,
679
- imports: [LocalizedMessagesDirective, ScrollAnchorDirective, MessageListComponent, MessageBoxComponent, MessageReferenceComponent, AppBarComponent, NgTemplateOutlet, NgIf, IconWrapperComponent, KENDO_BUTTON]
867
+ imports: [LocalizedMessagesDirective, ScrollAnchorDirective, MessageListComponent, MessageBoxComponent, MessageReferenceComponent, AppBarComponent, NgTemplateOutlet, NgIf, IconWrapperComponent, KENDO_BUTTON, ContextMenuComponent]
680
868
  }]
681
869
  }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.ChatService }], propDecorators: { messages: [{
682
870
  type: Input
@@ -692,6 +880,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
692
880
  type: Input
693
881
  }], messageWidthMode: [{
694
882
  type: Input
883
+ }], timestampVisibility: [{
884
+ type: Input
885
+ }], showUsername: [{
886
+ type: Input
887
+ }], showAvatar: [{
888
+ type: Input
695
889
  }], allowMessageCollapse: [{
696
890
  type: Input
697
891
  }], enableSpeechToText: [{
@@ -702,13 +896,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
702
896
  type: Input
703
897
  }], inputValue: [{
704
898
  type: Input
899
+ }], authorMessageSettings: [{
900
+ type: Input
901
+ }], receiverMessageSettings: [{
902
+ type: Input
705
903
  }], messageContextMenuActions: [{
706
904
  type: Input
707
905
  }], fileActions: [{
708
906
  type: Input
709
- }], suggestions: [{
907
+ }], messageFilesLayout: [{
908
+ type: Input
909
+ }], suggestionsLayout: [{
710
910
  type: Input
711
- }], messageToolbarVisibility: [{
911
+ }], quickActionsLayout: [{
912
+ type: Input
913
+ }], suggestions: [{
712
914
  type: Input
713
915
  }], sendButtonSettings: [{
714
916
  type: Input
@@ -742,12 +944,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
742
944
  }], dirAttr: [{
743
945
  type: HostBinding,
744
946
  args: ['attr.dir']
947
+ }], messagesContextMenu: [{
948
+ type: ViewChild,
949
+ args: ['messagesContextMenu']
745
950
  }], attachmentTemplate: [{
746
951
  type: ContentChild,
747
952
  args: [AttachmentTemplateDirective]
748
953
  }], chatHeaderTemplate: [{
749
954
  type: ContentChild,
750
955
  args: [ChatHeaderTemplateDirective]
956
+ }], chatNoDataTemplate: [{
957
+ type: ContentChild,
958
+ args: [NoDataTemplateDirective]
959
+ }], authorMessageContentTemplate: [{
960
+ type: ContentChild,
961
+ args: [AuthorMessageContentTemplateDirective]
962
+ }], receiverMessageContentTemplate: [{
963
+ type: ContentChild,
964
+ args: [ReceiverMessageContentTemplateDirective]
965
+ }], messageContentTemplate: [{
966
+ type: ContentChild,
967
+ args: [MessageContentTemplateDirective]
968
+ }], authorMessageTemplate: [{
969
+ type: ContentChild,
970
+ args: [AuthorMessageTemplateDirective]
971
+ }], receiverMessageTemplate: [{
972
+ type: ContentChild,
973
+ args: [ReceiverMessageTemplateDirective]
751
974
  }], messageTemplate: [{
752
975
  type: ContentChild,
753
976
  args: [MessageTemplateDirective]
@@ -763,6 +986,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
763
986
  }], messageBoxTemplate: [{
764
987
  type: ContentChild,
765
988
  args: [ChatMessageBoxTemplateDirective]
989
+ }], userStatusTemplate: [{
990
+ type: ContentChild,
991
+ args: [ChatUserStatusTemplateDirective]
766
992
  }], messageBox: [{
767
993
  type: ViewChild,
768
994
  args: ['messageBox']