@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
@@ -0,0 +1,39 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { NgZone } from '@angular/core';
6
+ import { Subject } from 'rxjs';
7
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
8
+ import { SuggestedActionsComponent } from '../suggested-actions.component';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * @hidden
12
+ */
13
+ export type ScrollButtonActiveStateChange = {
14
+ buttonType: string;
15
+ active: boolean;
16
+ };
17
+ /**
18
+ * @hidden
19
+ */
20
+ export declare class SuggestionsScrollService {
21
+ private ngZone;
22
+ private localization;
23
+ owner: SuggestedActionsComponent;
24
+ position: number;
25
+ scrollButtonActiveStateChange: Subject<ScrollButtonActiveStateChange>;
26
+ get scrollElement(): HTMLElement;
27
+ get scrollContainerOverflowSize(): number;
28
+ get suggestionsOverflow(): boolean;
29
+ constructor(ngZone: NgZone, localization: LocalizationService);
30
+ toggleScrollButtonsState(): void;
31
+ onScroll(e: Event): void;
32
+ scrollSuggestions(direction: string): void;
33
+ updateScrollPosition(element: HTMLElement): void;
34
+ calculateListPosition(direction: string, scrollSpeed: number): void;
35
+ private toggleButtonActiveState;
36
+ private isDisabled;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<SuggestionsScrollService, never>;
38
+ static ɵprov: i0.ɵɵInjectableDeclaration<SuggestionsScrollService>;
39
+ }
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Message, SendButtonSettings, MessageAction, FileAction } from "../api";
5
+ import { Message, SendButtonSettings, MessageAction, FileAction, SuggestionsLayoutMode } from "../api";
6
6
  import { ConversationalUIModelFields } from "./models/model-fields";
7
7
  import { FileSelectSettings } from '@progress/kendo-angular-upload';
8
8
  import { SpeechToTextButtonSettings } from "@progress/kendo-angular-buttons";
@@ -40,6 +40,14 @@ export declare const SEND_BTN_DEFAULT_SETTINGS: SendButtonSettings;
40
40
  * @hidden
41
41
  */
42
42
  export declare const FILESELECT_DEFAULT_SETTINGS: FileSelectSettings;
43
+ /**
44
+ * @hidden
45
+ */
46
+ export declare const SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS: SuggestionsLayoutMode;
47
+ /**
48
+ * @hidden
49
+ */
50
+ export type ScrollButtonType = 'prev' | 'next';
43
51
  /**
44
52
  * @hidden
45
53
  */
@@ -56,3 +64,7 @@ export declare const processMessages: (messages: any[], fields?: ConversationalU
56
64
  * @hidden
57
65
  */
58
66
  export declare const parseMessage: (message: any, fields?: ConversationalUIModelFields) => Message;
67
+ /**
68
+ * @hidden
69
+ */
70
+ export declare const transformActions: (actions: MessageAction[]) => any[];
@@ -73,6 +73,14 @@ export declare class Messages extends ComponentMessages {
73
73
  * Sets the title of the DropDownButton that opens the File actions.
74
74
  */
75
75
  fileActionsTitle: string;
76
+ /**
77
+ * Sets the title of the button that shows the **Scroll right** when the suggestions list is scrollable with buttons.
78
+ */
79
+ nextSuggestionsButtonTitle: string;
80
+ /**
81
+ * Sets the title of the button that shows the **Scroll left** when the suggestions list is scrollable with buttons.
82
+ */
83
+ previousSuggestionsButtonTitle: string;
76
84
  static ɵfac: i0.ɵɵFactoryDeclaration<Messages, never>;
77
- static ɵdir: i0.ɵɵDirectiveDeclaration<Messages, "kendoConversationalUIMessages", never, { "deletedMessageSenderText": { "alias": "deletedMessageSenderText"; "required": false; }; "deletedMessageReceiverText": { "alias": "deletedMessageReceiverText"; "required": false; }; "downloadAllFilesText": { "alias": "downloadAllFilesText"; "required": false; }; "messagePlaceholder": { "alias": "messagePlaceholder"; "required": false; }; "send": { "alias": "send"; "required": false; }; "messageListLabel": { "alias": "messageListLabel"; "required": false; }; "messageBoxInputLabel": { "alias": "messageBoxInputLabel"; "required": false; }; "messageAttachmentLeftArrow": { "alias": "messageAttachmentLeftArrow"; "required": false; }; "messageAttachmentRightArrow": { "alias": "messageAttachmentRightArrow"; "required": false; }; "speechToTextButtonTitle": { "alias": "speechToTextButtonTitle"; "required": false; }; "fileSelectButtonTitle": { "alias": "fileSelectButtonTitle"; "required": false; }; "removeReplyTitle": { "alias": "removeReplyTitle"; "required": false; }; "removeFileTitle": { "alias": "removeFileTitle"; "required": false; }; "expandTitle": { "alias": "expandTitle"; "required": false; }; "collapseTitle": { "alias": "collapseTitle"; "required": false; }; "fileActionsTitle": { "alias": "fileActionsTitle"; "required": false; }; }, {}, never, never, false, never>;
85
+ static ɵdir: i0.ɵɵDirectiveDeclaration<Messages, "kendoConversationalUIMessages", never, { "deletedMessageSenderText": { "alias": "deletedMessageSenderText"; "required": false; }; "deletedMessageReceiverText": { "alias": "deletedMessageReceiverText"; "required": false; }; "downloadAllFilesText": { "alias": "downloadAllFilesText"; "required": false; }; "messagePlaceholder": { "alias": "messagePlaceholder"; "required": false; }; "send": { "alias": "send"; "required": false; }; "messageListLabel": { "alias": "messageListLabel"; "required": false; }; "messageBoxInputLabel": { "alias": "messageBoxInputLabel"; "required": false; }; "messageAttachmentLeftArrow": { "alias": "messageAttachmentLeftArrow"; "required": false; }; "messageAttachmentRightArrow": { "alias": "messageAttachmentRightArrow"; "required": false; }; "speechToTextButtonTitle": { "alias": "speechToTextButtonTitle"; "required": false; }; "fileSelectButtonTitle": { "alias": "fileSelectButtonTitle"; "required": false; }; "removeReplyTitle": { "alias": "removeReplyTitle"; "required": false; }; "removeFileTitle": { "alias": "removeFileTitle"; "required": false; }; "expandTitle": { "alias": "expandTitle"; "required": false; }; "collapseTitle": { "alias": "collapseTitle"; "required": false; }; "fileActionsTitle": { "alias": "fileActionsTitle"; "required": false; }; "nextSuggestionsButtonTitle": { "alias": "nextSuggestionsButtonTitle"; "required": false; }; "previousSuggestionsButtonTitle": { "alias": "previousSuggestionsButtonTitle"; "required": false; }; }, {}, never, never, false, never>;
78
86
  }
@@ -9,10 +9,16 @@ import { LocalizationService } from '@progress/kendo-angular-l10n';
9
9
  import { ChatItem } from './chat-item';
10
10
  import { ViewItem } from './chat-view';
11
11
  import { AttachmentTemplateDirective } from './templates/attachment-template.directive';
12
- import { MessageTemplateDirective } from './templates/message-template.directive';
12
+ import { MessageContentTemplateDirective } from './templates/message-content-template.directive';
13
13
  import { ChatTimestampTemplateDirective } from './templates/timestamp-template.directive';
14
14
  import { ChatService } from './common/chat.service';
15
15
  import { ChatStatusTemplateDirective } from './templates/status-template.directive';
16
+ import { ChatUserStatusTemplateDirective } from './templates/user-status-template.directive';
17
+ import { MessageTemplateDirective } from './templates/message-template.directive';
18
+ import { AuthorMessageContentTemplateDirective } from './templates/author-message-content-template.directive';
19
+ import { ReceiverMessageContentTemplateDirective } from './templates/receiver-message-content-template.directive';
20
+ import { AuthorMessageTemplateDirective } from './templates/author-message-template.directive';
21
+ import { ReceiverMessageTemplateDirective } from './templates/receiver-message-template.directive';
16
22
  import * as i0 from "@angular/core";
17
23
  /**
18
24
  * @hidden
@@ -26,9 +32,15 @@ export declare class MessageListComponent implements OnInit, AfterViewInit, OnDe
26
32
  set messages(value: Message[]);
27
33
  get messages(): Message[];
28
34
  attachmentTemplate: AttachmentTemplateDirective;
35
+ authorMessageContentTemplate: AuthorMessageContentTemplateDirective;
36
+ receiverMessageContentTemplate: ReceiverMessageContentTemplateDirective;
37
+ messageContentTemplate: MessageContentTemplateDirective;
38
+ authorMessageTemplate: AuthorMessageTemplateDirective;
39
+ receiverMessageTemplate: ReceiverMessageTemplateDirective;
29
40
  messageTemplate: MessageTemplateDirective;
30
41
  timestampTemplate: ChatTimestampTemplateDirective;
31
42
  statusTemplate: ChatStatusTemplateDirective;
43
+ userStatusTemplate: ChatUserStatusTemplateDirective;
32
44
  localization: LocalizationService;
33
45
  authorId: string | number;
34
46
  executeAction: EventEmitter<ExecuteActionEvent>;
@@ -47,7 +59,11 @@ export declare class MessageListComponent implements OnInit, AfterViewInit, OnDe
47
59
  ngOnDestroy(): void;
48
60
  onResize(): void;
49
61
  onClick(message: any, event: any): void;
62
+ showGroupAuthor(group: any): boolean;
63
+ showGroupAvatar(group: any): boolean;
64
+ onContextMenuClick(message: Message, event: MouseEvent, messageElement?: any): void;
50
65
  formatTimeStamp(date: any): string;
66
+ calculateMessageWidthMode(message: any): boolean;
51
67
  onKeydown(e: any): void;
52
68
  onBlur(args: any): void;
53
69
  isOwnMessage(msg: Message): boolean;
@@ -56,11 +72,14 @@ export declare class MessageListComponent implements OnInit, AfterViewInit, OnDe
56
72
  select(item: ChatItem, event?: Event): void;
57
73
  last(items: any): any;
58
74
  handleMenuClose(state: boolean): void;
75
+ textFor(key: string): string;
59
76
  private onHomeOrEndKeyDown;
60
77
  private onTabKeyDown;
61
78
  private navigateTo;
62
79
  private scrollToAndSelectMessage;
63
- textFor(key: string): string;
80
+ private openContextMenu;
81
+ private findMessageComponentFromActiveElement;
82
+ private findMessageComponentFromEvent;
64
83
  static ɵfac: i0.ɵɵFactoryDeclaration<MessageListComponent, never>;
65
- static ɵcmp: i0.ɵɵComponentDeclaration<MessageListComponent, "kendo-chat-message-list", never, { "messages": { "alias": "messages"; "required": false; }; "attachmentTemplate": { "alias": "attachmentTemplate"; "required": false; }; "messageTemplate": { "alias": "messageTemplate"; "required": false; }; "timestampTemplate": { "alias": "timestampTemplate"; "required": false; }; "statusTemplate": { "alias": "statusTemplate"; "required": false; }; "localization": { "alias": "localization"; "required": false; }; "authorId": { "alias": "authorId"; "required": false; }; }, { "executeAction": "executeAction"; "navigate": "navigate"; "resize": "resize"; }, never, never, true, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<MessageListComponent, "kendo-chat-message-list", never, { "messages": { "alias": "messages"; "required": false; }; "attachmentTemplate": { "alias": "attachmentTemplate"; "required": false; }; "authorMessageContentTemplate": { "alias": "authorMessageContentTemplate"; "required": false; }; "receiverMessageContentTemplate": { "alias": "receiverMessageContentTemplate"; "required": false; }; "messageContentTemplate": { "alias": "messageContentTemplate"; "required": false; }; "authorMessageTemplate": { "alias": "authorMessageTemplate"; "required": false; }; "receiverMessageTemplate": { "alias": "receiverMessageTemplate"; "required": false; }; "messageTemplate": { "alias": "messageTemplate"; "required": false; }; "timestampTemplate": { "alias": "timestampTemplate"; "required": false; }; "statusTemplate": { "alias": "statusTemplate"; "required": false; }; "userStatusTemplate": { "alias": "userStatusTemplate"; "required": false; }; "localization": { "alias": "localization"; "required": false; }; "authorId": { "alias": "authorId"; "required": false; }; }, { "executeAction": "executeAction"; "navigate": "navigate"; "resize": "resize"; }, never, never, true, never>;
66
85
  }
@@ -2,10 +2,10 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { ElementRef, EventEmitter, OnDestroy } from '@angular/core';
5
+ import { ChangeDetectorRef, ElementRef, OnDestroy, OnInit } from '@angular/core';
6
6
  import { Message } from './api/message.interface';
7
7
  import { ChatItem } from './chat-item';
8
- import { MessageTemplateDirective } from './templates/message-template.directive';
8
+ import { MessageContentTemplateDirective } from './templates/message-content-template.directive';
9
9
  import { IntlService } from '@progress/kendo-angular-intl';
10
10
  import { ChatFile } from './api/chat-file-interface';
11
11
  import { ContextMenuPopupEvent } from '@progress/kendo-angular-menu';
@@ -15,59 +15,83 @@ import { MessageAction } from './api';
15
15
  import { LocalizationService } from '@progress/kendo-angular-l10n';
16
16
  import { ChatStatusTemplateDirective } from './templates/status-template.directive';
17
17
  import { FormattedTextPart } from './common/models/formatted-text-parts';
18
+ import { MessageTemplateDirective } from './templates/message-template.directive';
19
+ import { AuthorMessageContentTemplateDirective } from './templates/author-message-content-template.directive';
20
+ import { ReceiverMessageContentTemplateDirective } from './templates/receiver-message-content-template.directive';
21
+ import { ReceiverMessageTemplateDirective } from './templates/receiver-message-template.directive';
22
+ import { AuthorMessageTemplateDirective } from './templates/author-message-template.directive';
18
23
  import * as i0 from "@angular/core";
19
24
  /**
20
25
  * @hidden
21
26
  */
22
- export declare class MessageComponent extends ChatItem implements OnDestroy {
27
+ export declare class MessageComponent extends ChatItem implements OnInit, OnDestroy {
23
28
  element: ElementRef;
24
29
  private intl;
25
30
  chatService: ChatService;
26
31
  private localization;
27
- message: Message;
32
+ private cdr;
33
+ set message(value: Message);
34
+ get message(): Message;
28
35
  tabbable: boolean;
29
- template: MessageTemplateDirective;
36
+ authorMessageContentTemplate: AuthorMessageContentTemplateDirective;
37
+ receiverMessageContentTemplate: ReceiverMessageContentTemplateDirective;
38
+ messageContentTemplate: MessageContentTemplateDirective;
39
+ authorMessageTemplate: AuthorMessageTemplateDirective;
40
+ receiverMessageTemplate: ReceiverMessageTemplateDirective;
41
+ messageTemplate: MessageTemplateDirective;
30
42
  statusTemplate: ChatStatusTemplateDirective;
31
43
  showMessageTime: boolean;
32
44
  authorId: string | number;
33
- contextMenuVisibilityChange: EventEmitter<boolean>;
34
45
  cssClass: boolean;
35
46
  get removedClass(): boolean;
36
47
  onKeyDown(event: KeyboardEvent): void;
37
48
  selected: boolean;
38
- active: boolean;
39
- selectOnMenuClose: boolean;
40
49
  get tabIndex(): string;
41
- onContextMenu(event: MouseEvent): void;
42
50
  expandIcon: SVGIcon;
43
51
  collapseIcon: SVGIcon;
44
52
  downloadIcon: SVGIcon;
45
53
  isMessageExpanded: boolean;
46
- contextMenuActions: any;
54
+ showExpandCollapseIcon: boolean;
47
55
  fileActions: any;
56
+ toolbarActions: MessageAction[];
48
57
  parts: FormattedTextPart[];
49
- constructor(element: ElementRef, intl: IntlService, chatService: ChatService, localization: LocalizationService);
58
+ get useCustomBubbleTemplate(): boolean;
59
+ get useCustomContentTemplate(): boolean;
60
+ get hasMessageContent(): boolean;
61
+ get hasFiles(): boolean;
62
+ get hasMultipleFiles(): boolean;
63
+ get isActiveMessage(): boolean;
64
+ get isMessageExpandable(): boolean;
65
+ get showToolbar(): boolean;
66
+ private subs;
67
+ private _message;
68
+ constructor(element: ElementRef, intl: IntlService, chatService: ChatService, localization: LocalizationService, cdr: ChangeDetectorRef);
50
69
  ngOnInit(): void;
70
+ ngAfterViewInit(): void;
51
71
  ngOnDestroy(): void;
72
+ calculateExpandCollapseIconVisibility(): boolean;
73
+ getActiveBubbleTemplate(): MessageTemplateDirective | AuthorMessageTemplateDirective | ReceiverMessageTemplateDirective | null;
74
+ getActiveContentTemplate(): MessageContentTemplateDirective | AuthorMessageContentTemplateDirective | ReceiverMessageContentTemplateDirective | null;
75
+ getDeletedMessageText(): string;
52
76
  textFor(key: string): string;
53
77
  formatTimeStamp(date: any): string;
54
78
  focus(): void;
55
79
  onDownloadAll(): void;
56
80
  toggleMessageState(event: Event): void;
57
81
  onExpandableKeydown(event: KeyboardEvent): void;
58
- isToolbarVisible(): boolean;
59
82
  onToolbarAction(event: Event, action: MessageAction, message: Message): void;
60
- onContextMenuAction(action: MessageAction): void;
61
83
  onFileAction(action: any, file: ChatFile): void;
62
- private transformActions;
63
84
  getMessageById(id: string | number): Message | undefined;
64
- private getFormattedTextParts;
65
85
  onReplyReferenceClick(event: Event, replyToId: string | number): void;
66
86
  handleMenuClose(event?: ContextMenuPopupEvent): void;
67
87
  onActionButtonClick(event: MouseEvent): void;
68
88
  handleMenuOpen(): void;
69
89
  onActionPopupChange(expanded: boolean): void;
70
90
  isOwnMessage(msg: Message): boolean;
91
+ private getFormattedTextParts;
92
+ private getMessageSettings;
93
+ private getToolbarActions;
94
+ private getFileActions;
71
95
  static ɵfac: i0.ɵɵFactoryDeclaration<MessageComponent, never>;
72
- static ɵcmp: i0.ɵɵComponentDeclaration<MessageComponent, "kendo-chat-message", never, { "message": { "alias": "message"; "required": false; }; "tabbable": { "alias": "tabbable"; "required": false; }; "template": { "alias": "template"; "required": false; }; "statusTemplate": { "alias": "statusTemplate"; "required": false; }; "showMessageTime": { "alias": "showMessageTime"; "required": false; }; "authorId": { "alias": "authorId"; "required": false; }; }, { "contextMenuVisibilityChange": "contextMenuVisibilityChange"; }, never, never, true, never>;
96
+ static ɵcmp: i0.ɵɵComponentDeclaration<MessageComponent, "kendo-chat-message", never, { "message": { "alias": "message"; "required": false; }; "tabbable": { "alias": "tabbable"; "required": false; }; "authorMessageContentTemplate": { "alias": "authorMessageContentTemplate"; "required": false; }; "receiverMessageContentTemplate": { "alias": "receiverMessageContentTemplate"; "required": false; }; "messageContentTemplate": { "alias": "messageContentTemplate"; "required": false; }; "authorMessageTemplate": { "alias": "authorMessageTemplate"; "required": false; }; "receiverMessageTemplate": { "alias": "receiverMessageTemplate"; "required": false; }; "messageTemplate": { "alias": "messageTemplate"; "required": false; }; "statusTemplate": { "alias": "statusTemplate"; "required": false; }; "showMessageTime": { "alias": "showMessageTime"; "required": false; }; "authorId": { "alias": "authorId"; "required": false; }; }, {}, never, never, true, never>;
73
97
  }
@@ -2,30 +2,51 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { ElementRef, EventEmitter, QueryList } from '@angular/core';
5
+ import { ElementRef, EventEmitter, QueryList, AfterViewInit, OnDestroy, NgZone, Renderer2 } from '@angular/core';
6
6
  import { Action } from './api/action.interface';
7
7
  import { ChatItem } from './chat-item';
8
8
  import { ChatSuggestion } from './api/chat-suggestion.interface';
9
9
  import { ChatSuggestionTemplateDirective } from './templates/suggestion-template.directive';
10
+ import { ChatService } from './common/chat.service';
11
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
12
+ import { SuggestionsScrollService } from './common/scroll.service';
13
+ import { ScrollButtonType } from './common/utils';
10
14
  import * as i0 from "@angular/core";
11
15
  /**
12
16
  * @hidden
13
17
  */
14
- export declare class SuggestedActionsComponent extends ChatItem {
18
+ export declare class SuggestedActionsComponent extends ChatItem implements AfterViewInit, OnDestroy {
19
+ private chatService;
20
+ private localization;
21
+ private scrollService;
22
+ private ngZone;
23
+ private renderer;
24
+ get defaultClass(): boolean;
25
+ get scrollableClass(): boolean;
26
+ get scrollButtonsClass(): boolean;
27
+ get role(): string;
15
28
  actions: Action[];
16
29
  suggestions: ChatSuggestion[];
17
30
  tabbable: boolean;
31
+ type: 'action' | 'suggestion';
18
32
  suggestionTemplate: ChatSuggestionTemplateDirective;
19
33
  dispatchAction: EventEmitter<Action>;
20
34
  dispatchSuggestion: EventEmitter<ChatSuggestion>;
21
- defaultClass: boolean;
22
- role: string;
23
35
  items: QueryList<ElementRef>;
36
+ suggestionsContainer: ElementRef;
37
+ prevScrollButton: ElementRef;
38
+ nextScrollButton: ElementRef;
24
39
  selectedIndex: number;
25
40
  activeIndex: number;
26
41
  active: boolean;
42
+ get hasScrollButtons(): boolean;
43
+ private subscriptions;
44
+ private resizeObserver;
27
45
  private actionKeyHandlers;
28
46
  private suggestionKeyHandlers;
47
+ constructor(chatService: ChatService, localization: LocalizationService, scrollService: SuggestionsScrollService, ngZone: NgZone, renderer: Renderer2);
48
+ ngAfterViewInit(): void;
49
+ ngOnDestroy(): void;
29
50
  isSelected(index: number): boolean;
30
51
  isActive(index: number): boolean;
31
52
  actionClick(action: Action, index?: number): void;
@@ -33,8 +54,12 @@ export declare class SuggestedActionsComponent extends ChatItem {
33
54
  toggleActiveState(apply: boolean, index: number): void;
34
55
  actionKeydown(e: any, action: Action): void;
35
56
  suggestionKeydown(e: any, suggestion: ChatSuggestion): void;
57
+ getScrollButtonTitle(direction: string): string;
58
+ onScroll(event: Event): void;
59
+ scrollSuggestions(direction: ScrollButtonType): void;
36
60
  focus(): void;
61
+ private toggleScrollButtonState;
37
62
  private changeSelectedIndex;
38
63
  static ɵfac: i0.ɵɵFactoryDeclaration<SuggestedActionsComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<SuggestedActionsComponent, "kendo-chat-suggested-actions", never, { "actions": { "alias": "actions"; "required": false; }; "suggestions": { "alias": "suggestions"; "required": false; }; "tabbable": { "alias": "tabbable"; "required": false; }; "suggestionTemplate": { "alias": "suggestionTemplate"; "required": false; }; }, { "dispatchAction": "dispatchAction"; "dispatchSuggestion": "dispatchSuggestion"; }, never, never, true, never>;
64
+ static ɵcmp: i0.ɵɵComponentDeclaration<SuggestedActionsComponent, "kendo-chat-suggested-actions", never, { "actions": { "alias": "actions"; "required": false; }; "suggestions": { "alias": "suggestions"; "required": false; }; "tabbable": { "alias": "tabbable"; "required": false; }; "type": { "alias": "type"; "required": false; }; "suggestionTemplate": { "alias": "suggestionTemplate"; "required": false; }; }, { "dispatchAction": "dispatchAction"; "dispatchSuggestion": "dispatchSuggestion"; }, never, never, true, never>;
40
65
  }
@@ -0,0 +1,28 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying custom content inside the current user's messages in the Chat.
9
+ *
10
+ * To define a message template, nest an `<ng-template>` tag with the `kendoChatAuthorMessageContentTemplate` directive inside the `<kendo-chat>` component.
11
+ * The template context is set to the `message` instance.
12
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <kendo-chat>
17
+ * <ng-template kendoChatAuthorMessageContentTemplate let-message>
18
+ * <div>Message: {{ message.text }}</div>
19
+ * </ng-template>
20
+ * </kendo-chat>
21
+ * ```
22
+ */
23
+ export declare class AuthorMessageContentTemplateDirective {
24
+ templateRef: TemplateRef<any>;
25
+ constructor(templateRef: TemplateRef<any>);
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthorMessageContentTemplateDirective, [{ optional: true; }]>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AuthorMessageContentTemplateDirective, "[kendoChatAuthorMessageContentTemplate]", never, {}, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,28 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying fully custom Chat message bubbles for the current user.
9
+ *
10
+ * To define a message template, nest an `<ng-template>` tag with the `kendoChatAuthorMessageTemplate` directive inside the `<kendo-chat>` component.
11
+ * The template context is set to the `message` instance.
12
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <kendo-chat>
17
+ * <ng-template kendoChatAuthorMessageTemplate let-message>
18
+ * <div>Message: {{ message.text }}</div>
19
+ * </ng-template>
20
+ * </kendo-chat>
21
+ * ```
22
+ */
23
+ export declare class AuthorMessageTemplateDirective {
24
+ templateRef: TemplateRef<any>;
25
+ constructor(templateRef: TemplateRef<any>);
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthorMessageTemplateDirective, [{ optional: true; }]>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AuthorMessageTemplateDirective, "[kendoChatAuthorMessageTemplate]", never, {}, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,28 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying custom content inside the Chat messages.
9
+ *
10
+ * To define a message template, nest an `<ng-template>` tag with the `kendoChatMessageContentTemplate` directive inside the `<kendo-chat>` component.
11
+ * The template context is set to the `message` instance.
12
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <kendo-chat>
17
+ * <ng-template kendoChatMessageContentTemplate let-message>
18
+ * <div>Message: {{ message.text }}</div>
19
+ * </ng-template>
20
+ * </kendo-chat>
21
+ * ```
22
+ */
23
+ export declare class MessageContentTemplateDirective {
24
+ templateRef: TemplateRef<any>;
25
+ constructor(templateRef: TemplateRef<any>);
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<MessageContentTemplateDirective, [{ optional: true; }]>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<MessageContentTemplateDirective, "[kendoChatMessageContentTemplate]", never, {}, {}, never, never, true, never>;
28
+ }
@@ -5,7 +5,7 @@
5
5
  import { TemplateRef } from "@angular/core";
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
- * Defines a template for displaying Chat messages.
8
+ * Defines a template for displaying fully custom Chat message bubbles.
9
9
  *
10
10
  * To define a message template, nest an `<ng-template>` tag with the `kendoChatMessageTemplate` directive inside the `<kendo-chat>` component.
11
11
  * The template context is set to the `message` instance.
@@ -0,0 +1,27 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying custom content when there are no messages in the Chat.
9
+ *
10
+ * To define an empty Chat template, nest an `<ng-template>` tag with the `kendoChatNoDataTemplate` directive inside the `<kendo-chat>` component.
11
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
12
+ *
13
+ * @example
14
+ * ```html
15
+ * <kendo-chat>
16
+ * <ng-template kendoChatNoDataTemplate>
17
+ * <div>No messages.</div>
18
+ * </ng-template>
19
+ * </kendo-chat>
20
+ * ```
21
+ */
22
+ export declare class NoDataTemplateDirective {
23
+ templateRef: TemplateRef<any>;
24
+ constructor(templateRef: TemplateRef<any>);
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<NoDataTemplateDirective, [{ optional: true; }]>;
26
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NoDataTemplateDirective, "[kendoChatNoDataTemplate]", never, {}, {}, never, never, true, never>;
27
+ }
@@ -0,0 +1,28 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying custom content inside the other users' messages in the Chat.
9
+ *
10
+ * To define a message template, nest an `<ng-template>` tag with the `kendoChatReceiverMessageContentTemplate` directive inside the `<kendo-chat>` component.
11
+ * The template context is set to the `message` instance.
12
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <kendo-chat>
17
+ * <ng-template kendoChatReceiverMessageContentTemplate let-message>
18
+ * <div>Message: {{ message.text }}</div>
19
+ * </ng-template>
20
+ * </kendo-chat>
21
+ * ```
22
+ */
23
+ export declare class ReceiverMessageContentTemplateDirective {
24
+ templateRef: TemplateRef<any>;
25
+ constructor(templateRef: TemplateRef<any>);
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReceiverMessageContentTemplateDirective, [{ optional: true; }]>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ReceiverMessageContentTemplateDirective, "[kendoChatReceiverMessageContentTemplate]", never, {}, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,28 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying fully custom Chat message bubbles for the other users.
9
+ *
10
+ * To define a message template, nest an `<ng-template>` tag with the `kendoChatReceiverMessageTemplate` directive inside the `<kendo-chat>` component.
11
+ * The template context is set to the `message` instance.
12
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <kendo-chat>
17
+ * <ng-template kendoChatReceiverMessageTemplate let-message>
18
+ * <div>Message: {{ message.text }}</div>
19
+ * </ng-template>
20
+ * </kendo-chat>
21
+ * ```
22
+ */
23
+ export declare class ReceiverMessageTemplateDirective {
24
+ templateRef: TemplateRef<any>;
25
+ constructor(templateRef: TemplateRef<any>);
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReceiverMessageTemplateDirective, [{ optional: true; }]>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ReceiverMessageTemplateDirective, "[kendoChatReceiverMessageTemplate]", never, {}, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,27 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { TemplateRef } from "@angular/core";
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Defines a template for displaying user status in the Chat.
9
+ *
10
+ * To define a user status template, nest an `<ng-template>` tag with the `kendoChatUserStatusTemplate` directive inside the `<kendo-chat>` component.
11
+ * For more information, refer to the article on [message templates](slug:message_templates_chat).
12
+ *
13
+ * @example
14
+ * ```html
15
+ * <kendo-chat>
16
+ * <ng-template kendoChatUserStatusTemplate let-status>
17
+ * <div>{{ status }}</div>
18
+ * </ng-template>
19
+ * </kendo-chat>
20
+ * ```
21
+ */
22
+ export declare class ChatUserStatusTemplateDirective {
23
+ templateRef: TemplateRef<any>;
24
+ constructor(templateRef: TemplateRef<any>);
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChatUserStatusTemplateDirective, [{ optional: true; }]>;
26
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ChatUserStatusTemplateDirective, "[kendoChatUserStatusTemplate]", never, {}, {}, never, never, true, never>;
27
+ }