@progress/kendo-angular-conversational-ui 20.1.2-develop.2 → 21.0.0-develop.11
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.
- package/chat/api/files-layout.d.ts +12 -0
- package/chat/api/index.d.ts +3 -1
- package/chat/api/message-settings.interface.d.ts +33 -0
- package/chat/api/message.interface.d.ts +5 -1
- package/chat/api/suggestions-layout.d.ts +20 -0
- package/chat/chat.component.d.ts +92 -34
- package/chat/chat.directives.d.ts +18 -0
- package/chat/chat.module.d.ts +15 -8
- package/chat/common/chat.service.d.ts +32 -3
- package/chat/common/models/model-fields.d.ts +0 -6
- package/chat/common/scroll-button.component.d.ts +32 -0
- package/chat/common/scroll.service.d.ts +39 -0
- package/chat/common/utils.d.ts +13 -1
- package/chat/l10n/messages.d.ts +9 -1
- package/chat/message-list.component.d.ts +20 -3
- package/chat/message.component.d.ts +40 -16
- package/chat/suggested-actions.component.d.ts +30 -5
- package/chat/templates/author-message-content-template.directive.d.ts +28 -0
- package/chat/templates/author-message-template.directive.d.ts +28 -0
- package/chat/templates/message-content-template.directive.d.ts +28 -0
- package/chat/templates/message-template.directive.d.ts +1 -1
- package/chat/templates/no-data-template.directive.d.ts +27 -0
- package/chat/templates/receiver-message-content-template.directive.d.ts +28 -0
- package/chat/templates/receiver-message-template.directive.d.ts +28 -0
- package/chat/templates/user-status-template.directive.d.ts +27 -0
- package/codemods/template-transformer/index.js +1 -2
- package/codemods/utils.js +2 -2
- package/codemods/v20/chat-user.js +1 -1
- package/conversational-ui.module.d.ts +18 -11
- package/directives.d.ts +9 -2
- package/esm2022/ai-prompt/aiprompt.component.mjs +13 -11
- package/esm2022/ai-prompt/aiprompt.module.mjs +4 -4
- package/esm2022/ai-prompt/common/aiprompt.service.mjs +3 -3
- package/esm2022/ai-prompt/common/output-card.component.mjs +4 -4
- package/esm2022/ai-prompt/common/toolbar-focusable.directive.mjs +4 -4
- package/esm2022/ai-prompt/common/toolbar-navigation.service.mjs +4 -4
- package/esm2022/ai-prompt/localization/custom-messages.component.mjs +4 -4
- package/esm2022/ai-prompt/localization/localized-messages.directive.mjs +4 -4
- package/esm2022/ai-prompt/localization/messages.mjs +3 -3
- package/esm2022/ai-prompt/templates/aiprompt-output-body-template.directive.mjs +4 -4
- package/esm2022/ai-prompt/templates/aiprompt-output-template.directive.mjs +4 -4
- package/esm2022/ai-prompt/templates/toolbar-actions.template.mjs +5 -5
- package/esm2022/ai-prompt/views/base-view.mjs +5 -5
- package/esm2022/ai-prompt/views/command-view.component.mjs +4 -4
- package/esm2022/ai-prompt/views/custom-view.component.mjs +4 -4
- package/esm2022/ai-prompt/views/output-view.component.mjs +4 -4
- package/esm2022/ai-prompt/views/prompt-view.component.mjs +4 -4
- package/esm2022/chat/api/index.mjs +3 -1
- package/{chat/api/message-toolbar-visibility.d.ts → esm2022/chat/api/message-settings.interface.mjs} +1 -4
- package/esm2022/chat/api/suggestions-layout.mjs +5 -0
- package/esm2022/chat/attachment.component.mjs +3 -3
- package/esm2022/chat/builtin-actions.mjs +2 -0
- package/esm2022/chat/cards/hero-card.component.mjs +3 -3
- package/esm2022/chat/chat-file.component.mjs +6 -6
- package/esm2022/chat/chat.component.mjs +268 -74
- package/esm2022/chat/chat.directives.mjs +18 -0
- package/esm2022/chat/chat.module.mjs +18 -11
- package/esm2022/chat/common/chat.service.mjs +86 -7
- package/esm2022/chat/common/models/default-model-fields.mjs +0 -1
- package/esm2022/chat/common/scroll-anchor.directive.mjs +4 -4
- package/esm2022/chat/common/scroll-button.component.mjs +81 -0
- package/esm2022/chat/common/scroll.service.mjs +110 -0
- package/esm2022/chat/common/utils.mjs +22 -3
- package/esm2022/chat/l10n/custom-messages.component.mjs +4 -4
- package/esm2022/chat/l10n/localized-messages.directive.mjs +4 -4
- package/esm2022/chat/l10n/messages.mjs +15 -3
- package/esm2022/chat/message-attachments.component.mjs +6 -6
- package/esm2022/chat/message-box.component.mjs +12 -7
- package/esm2022/chat/message-list.component.mjs +168 -22
- package/esm2022/chat/message-reference-content.component.mjs +4 -4
- package/esm2022/chat/message.component.mjs +491 -328
- package/esm2022/chat/suggested-actions.component.mjs +299 -81
- package/esm2022/chat/templates/attachment-template.directive.mjs +5 -5
- package/esm2022/chat/templates/author-message-content-template.directive.mjs +39 -0
- package/esm2022/chat/templates/author-message-template.directive.mjs +39 -0
- package/esm2022/chat/templates/header-template.directive.mjs +4 -4
- package/esm2022/chat/templates/message-box.directive.mjs +4 -4
- package/esm2022/chat/templates/message-content-template.directive.mjs +39 -0
- package/esm2022/chat/templates/message-template.directive.mjs +6 -6
- package/esm2022/chat/templates/no-data-template.directive.mjs +38 -0
- package/esm2022/chat/templates/receiver-message-content-template.directive.mjs +39 -0
- package/esm2022/chat/templates/receiver-message-template.directive.mjs +39 -0
- package/esm2022/chat/templates/status-template.directive.mjs +4 -4
- package/esm2022/chat/templates/suggestion-template.directive.mjs +4 -4
- package/esm2022/chat/templates/timestamp-template.directive.mjs +5 -5
- package/esm2022/chat/templates/user-status-template.directive.mjs +38 -0
- package/esm2022/conversational-ui.module.mjs +21 -14
- package/esm2022/directives.mjs +15 -1
- package/esm2022/index.mjs +7 -0
- package/esm2022/inline-ai-prompt/inlineaiprompt-content.component.mjs +5 -5
- package/esm2022/inline-ai-prompt/inlineaiprompt.component.mjs +4 -4
- package/esm2022/inline-ai-prompt/inlineaiprompt.module.mjs +4 -4
- package/esm2022/inline-ai-prompt/inlineaiprompt.service.mjs +4 -4
- package/esm2022/inline-ai-prompt/localization/custom-messages.component.mjs +4 -4
- package/esm2022/inline-ai-prompt/localization/localized-messages.directive.mjs +4 -4
- package/esm2022/inline-ai-prompt/localization/messages.mjs +3 -3
- package/esm2022/inline-ai-prompt/output-template.directive.mjs +5 -5
- package/esm2022/package-metadata.mjs +2 -2
- package/fesm2022/progress-kendo-angular-conversational-ui.mjs +1969 -739
- package/index.d.ts +7 -0
- package/package.json +18 -18
- package/schematics/ngAdd/index.js +1 -1
- /package/esm2022/chat/api/{message-toolbar-visibility.mjs → files-layout.mjs} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
export { ChatComponent } from './chat.component';
|
|
6
|
+
export { AttachmentTemplateDirective } from './templates/attachment-template.directive';
|
|
7
|
+
export { MessageContentTemplateDirective } from './templates/message-content-template.directive';
|
|
8
|
+
export { MessageTemplateDirective } from './templates/message-template.directive';
|
|
9
|
+
export { ChatUserStatusTemplateDirective } from './templates/user-status-template.directive';
|
|
10
|
+
export { ChatMessageBoxTemplateDirective } from './templates/message-box.directive';
|
|
11
|
+
export { ChatHeaderTemplateDirective } from './templates/header-template.directive';
|
|
12
|
+
export { NoDataTemplateDirective } from './templates/no-data-template.directive';
|
|
13
|
+
export { ChatTimestampTemplateDirective } from './templates/timestamp-template.directive';
|
|
14
|
+
export { ChatStatusTemplateDirective } from './templates/status-template.directive';
|
|
15
|
+
export { AuthorMessageContentTemplateDirective } from './templates/author-message-content-template.directive';
|
|
16
|
+
export { ReceiverMessageContentTemplateDirective } from './templates/receiver-message-content-template.directive';
|
|
17
|
+
export { ReceiverMessageTemplateDirective } from './templates/receiver-message-template.directive';
|
|
18
|
+
export { AuthorMessageTemplateDirective } from './templates/author-message-template.directive';
|
|
@@ -10,13 +10,20 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
import * as i1 from "./chat.component";
|
|
11
11
|
import * as i2 from "./l10n/custom-messages.component";
|
|
12
12
|
import * as i3 from "./templates/attachment-template.directive";
|
|
13
|
-
import * as i4 from "./templates/message-template.directive";
|
|
14
|
-
import * as i5 from "./
|
|
15
|
-
import * as i6 from "./templates/message-
|
|
16
|
-
import * as i7 from "./templates/
|
|
17
|
-
import * as i8 from "./templates/
|
|
18
|
-
import * as i9 from "./templates/
|
|
19
|
-
import * as i10 from "./
|
|
13
|
+
import * as i4 from "./templates/author-message-content-template.directive";
|
|
14
|
+
import * as i5 from "./templates/receiver-message-content-template.directive";
|
|
15
|
+
import * as i6 from "./templates/message-content-template.directive";
|
|
16
|
+
import * as i7 from "./templates/author-message-template.directive";
|
|
17
|
+
import * as i8 from "./templates/receiver-message-template.directive";
|
|
18
|
+
import * as i9 from "./templates/message-template.directive";
|
|
19
|
+
import * as i10 from "./cards/hero-card.component";
|
|
20
|
+
import * as i11 from "./templates/message-box.directive";
|
|
21
|
+
import * as i12 from "./templates/header-template.directive";
|
|
22
|
+
import * as i13 from "./templates/no-data-template.directive";
|
|
23
|
+
import * as i14 from "./templates/timestamp-template.directive";
|
|
24
|
+
import * as i15 from "./templates/status-template.directive";
|
|
25
|
+
import * as i16 from "./templates/suggestion-template.directive";
|
|
26
|
+
import * as i17 from "./templates/user-status-template.directive";
|
|
20
27
|
// IMPORTANT: NgModule export kept for backwards compatibility
|
|
21
28
|
/**
|
|
22
29
|
* Represents the [`NgModule`](link:site.data.urls.angular['ngmodules']) for the Chat component.
|
|
@@ -40,11 +47,11 @@ import * as i10 from "./templates/suggestion-template.directive";
|
|
|
40
47
|
* ```
|
|
41
48
|
*/
|
|
42
49
|
export class ChatModule {
|
|
43
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
44
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
45
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
50
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
51
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ChatModule, imports: [i1.ChatComponent, i2.CustomMessagesComponent, i3.AttachmentTemplateDirective, i4.AuthorMessageContentTemplateDirective, i5.ReceiverMessageContentTemplateDirective, i6.MessageContentTemplateDirective, i7.AuthorMessageTemplateDirective, i8.ReceiverMessageTemplateDirective, i9.MessageTemplateDirective, i10.HeroCardComponent, i11.ChatMessageBoxTemplateDirective, i12.ChatHeaderTemplateDirective, i13.NoDataTemplateDirective, i14.ChatTimestampTemplateDirective, i15.ChatStatusTemplateDirective, i16.ChatSuggestionTemplateDirective, i17.ChatUserStatusTemplateDirective], exports: [i1.ChatComponent, i2.CustomMessagesComponent, i3.AttachmentTemplateDirective, i4.AuthorMessageContentTemplateDirective, i5.ReceiverMessageContentTemplateDirective, i6.MessageContentTemplateDirective, i7.AuthorMessageTemplateDirective, i8.ReceiverMessageTemplateDirective, i9.MessageTemplateDirective, i10.HeroCardComponent, i11.ChatMessageBoxTemplateDirective, i12.ChatHeaderTemplateDirective, i13.NoDataTemplateDirective, i14.ChatTimestampTemplateDirective, i15.ChatStatusTemplateDirective, i16.ChatSuggestionTemplateDirective, i17.ChatUserStatusTemplateDirective] });
|
|
52
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatModule, providers: [IconsService, ResizeBatchService], imports: [i1.ChatComponent, i10.HeroCardComponent] });
|
|
46
53
|
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatModule, decorators: [{
|
|
48
55
|
type: NgModule,
|
|
49
56
|
args: [{
|
|
50
57
|
exports: [...KENDO_CHAT],
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Injectable } from '@angular/core';
|
|
6
6
|
import { Subject } from 'rxjs';
|
|
7
|
-
import { STB_DEFAULT_SETTINGS, SEND_BTN_DEFAULT_SETTINGS, FILESELECT_DEFAULT_SETTINGS } from './utils';
|
|
7
|
+
import { STB_DEFAULT_SETTINGS, SEND_BTN_DEFAULT_SETTINGS, FILESELECT_DEFAULT_SETTINGS, SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS } from './utils';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
/**
|
|
10
10
|
* @hidden
|
|
@@ -12,26 +12,42 @@ import * as i0 from "@angular/core";
|
|
|
12
12
|
export class ChatService {
|
|
13
13
|
authorId;
|
|
14
14
|
messageWidthMode;
|
|
15
|
-
allowMessageCollapse;
|
|
16
15
|
messageToolbarActions = [];
|
|
17
16
|
messageContextMenuActions = [];
|
|
17
|
+
calculatedContextMenuActions = [];
|
|
18
18
|
fileActions = [];
|
|
19
|
-
messageToolbarVisibility = 'hidden';
|
|
20
19
|
toggleMessageState = false;
|
|
21
20
|
reply;
|
|
22
21
|
messages = [];
|
|
23
22
|
chatElement;
|
|
24
23
|
messageElementsMap = new Map();
|
|
24
|
+
messagesContextMenu;
|
|
25
|
+
activeMessage;
|
|
26
|
+
activeMessageElement;
|
|
27
|
+
selectOnMenuClose = false;
|
|
28
|
+
active = false;
|
|
29
|
+
messageFilesLayout = 'vertical';
|
|
25
30
|
_enableSpeechToText = STB_DEFAULT_SETTINGS;
|
|
26
31
|
_enableFileSelect = FILESELECT_DEFAULT_SETTINGS;
|
|
27
32
|
_sendButtonSettings = SEND_BTN_DEFAULT_SETTINGS;
|
|
33
|
+
_suggestionsLayout = SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS;
|
|
34
|
+
_quickActionsLayout = SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS;
|
|
35
|
+
_authorMessageSettings;
|
|
36
|
+
_receiverMessageSettings;
|
|
37
|
+
_allowMessageCollapse;
|
|
28
38
|
subjects = {
|
|
29
39
|
toolbarAction: new Subject(),
|
|
30
40
|
contextMenuAction: new Subject(),
|
|
31
41
|
fileAction: new Subject(),
|
|
32
42
|
fileDownload: new Subject(),
|
|
33
43
|
replyReferenceClick: new Subject(),
|
|
34
|
-
inputValueChange: new Subject()
|
|
44
|
+
inputValueChange: new Subject(),
|
|
45
|
+
contextMenuVisibilityChange: new Subject(),
|
|
46
|
+
suggestionsLayoutChange: new Subject(),
|
|
47
|
+
quickActionsLayoutChange: new Subject(),
|
|
48
|
+
authorMessageSettingsChange: new Subject(),
|
|
49
|
+
receiverMessageSettingsChange: new Subject(),
|
|
50
|
+
allowMessageCollapseChange: new Subject(),
|
|
35
51
|
};
|
|
36
52
|
toolbarAction$ = this.subjects.toolbarAction.asObservable();
|
|
37
53
|
contextMenuAction$ = this.subjects.contextMenuAction.asObservable();
|
|
@@ -39,6 +55,32 @@ export class ChatService {
|
|
|
39
55
|
fileDownload$ = this.subjects.fileDownload.asObservable();
|
|
40
56
|
replyReferenceClick$ = this.subjects.replyReferenceClick.asObservable();
|
|
41
57
|
inputValueChange$ = this.subjects.inputValueChange.asObservable();
|
|
58
|
+
contextMenuVisibilityChange$ = this.subjects.contextMenuVisibilityChange.asObservable();
|
|
59
|
+
suggestionsLayoutChange$ = this.subjects.suggestionsLayoutChange.asObservable();
|
|
60
|
+
quickActionsLayoutChange$ = this.subjects.quickActionsLayoutChange.asObservable();
|
|
61
|
+
authorMessageSettingsChange$ = this.subjects.authorMessageSettingsChange.asObservable();
|
|
62
|
+
receiverMessageSettingsChange$ = this.subjects.receiverMessageSettingsChange.asObservable();
|
|
63
|
+
allowMessageCollapseChange$ = this.subjects.allowMessageCollapseChange.asObservable();
|
|
64
|
+
set authorMessageSettings(settings) {
|
|
65
|
+
const previousSettings = this._authorMessageSettings;
|
|
66
|
+
if (JSON.stringify(previousSettings) !== JSON.stringify(settings)) {
|
|
67
|
+
this.updateComponentSettings('_authorMessageSettings', settings, null);
|
|
68
|
+
this.emit('authorMessageSettingsChange', this._authorMessageSettings);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
get authorMessageSettings() {
|
|
72
|
+
return this._authorMessageSettings;
|
|
73
|
+
}
|
|
74
|
+
set receiverMessageSettings(settings) {
|
|
75
|
+
const previousSettings = this._receiverMessageSettings;
|
|
76
|
+
if (JSON.stringify(previousSettings) !== JSON.stringify(settings)) {
|
|
77
|
+
this.updateComponentSettings('_receiverMessageSettings', settings, null);
|
|
78
|
+
this.emit('receiverMessageSettingsChange', this._receiverMessageSettings);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
get receiverMessageSettings() {
|
|
82
|
+
return this._receiverMessageSettings;
|
|
83
|
+
}
|
|
42
84
|
set enableSpeechToText(settings) {
|
|
43
85
|
this.updateComponentSettings('_enableSpeechToText', settings, STB_DEFAULT_SETTINGS);
|
|
44
86
|
}
|
|
@@ -57,6 +99,38 @@ export class ChatService {
|
|
|
57
99
|
get sendButtonSettings() {
|
|
58
100
|
return this._sendButtonSettings;
|
|
59
101
|
}
|
|
102
|
+
set suggestionsLayout(layoutMode) {
|
|
103
|
+
this._suggestionsLayout = layoutMode;
|
|
104
|
+
this.emit('suggestionsLayoutChange', this._suggestionsLayout);
|
|
105
|
+
}
|
|
106
|
+
get suggestionsLayout() {
|
|
107
|
+
return this._suggestionsLayout;
|
|
108
|
+
}
|
|
109
|
+
set quickActionsLayout(layoutMode) {
|
|
110
|
+
this._quickActionsLayout = layoutMode;
|
|
111
|
+
this.emit('quickActionsLayoutChange', this._quickActionsLayout);
|
|
112
|
+
}
|
|
113
|
+
get quickActionsLayout() {
|
|
114
|
+
return this._quickActionsLayout;
|
|
115
|
+
}
|
|
116
|
+
set allowMessageCollapse(value) {
|
|
117
|
+
const previousValue = this._allowMessageCollapse;
|
|
118
|
+
if (previousValue !== value) {
|
|
119
|
+
this._allowMessageCollapse = value;
|
|
120
|
+
this.emit('allowMessageCollapseChange', this._allowMessageCollapse);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
get allowMessageCollapse() {
|
|
124
|
+
return this._allowMessageCollapse;
|
|
125
|
+
}
|
|
126
|
+
calculateContextMenuActions(isOwn) {
|
|
127
|
+
const settings = isOwn ? this.authorMessageSettings : this.receiverMessageSettings;
|
|
128
|
+
if (settings?.messageContextMenuActions) {
|
|
129
|
+
this.calculatedContextMenuActions = settings.messageContextMenuActions;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.calculatedContextMenuActions = this.messageContextMenuActions || [];
|
|
133
|
+
}
|
|
60
134
|
emit(subjectKey, value) {
|
|
61
135
|
(this.subjects[subjectKey]).next(value);
|
|
62
136
|
}
|
|
@@ -78,6 +152,11 @@ export class ChatService {
|
|
|
78
152
|
elementRef.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
79
153
|
}
|
|
80
154
|
}
|
|
155
|
+
focusActiveMessageElement() {
|
|
156
|
+
if (this.activeMessageElement) {
|
|
157
|
+
this.activeMessageElement.element?.nativeElement?.focus();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
81
160
|
updateComponentSettings(property, settings, defaultSettings) {
|
|
82
161
|
if (settings === true) {
|
|
83
162
|
this[property] = defaultSettings;
|
|
@@ -89,9 +168,9 @@ export class ChatService {
|
|
|
89
168
|
this[property] = { ...defaultSettings, ...settings };
|
|
90
169
|
}
|
|
91
170
|
}
|
|
92
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
93
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
171
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
172
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatService });
|
|
94
173
|
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatService, decorators: [{
|
|
96
175
|
type: Injectable
|
|
97
176
|
}] });
|
|
@@ -19,7 +19,6 @@ export const defaultModelFields = {
|
|
|
19
19
|
attachmentLayoutField: 'attachmentLayout',
|
|
20
20
|
suggestedActionsField: 'suggestedActions',
|
|
21
21
|
isPinnedField: 'isPinned',
|
|
22
|
-
pinnedByField: 'pinnedBy',
|
|
23
22
|
replyToIdField: 'replyToId',
|
|
24
23
|
isDeletedField: 'isDeleted',
|
|
25
24
|
typingField: 'typing'
|
|
@@ -60,17 +60,17 @@ export class ScrollAnchorDirective {
|
|
|
60
60
|
this.scrolling = true;
|
|
61
61
|
this.zone.runOutsideAngular(() => setTimeout(() => this.scrolling = false, 1000));
|
|
62
62
|
}
|
|
63
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
64
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollAnchorDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
64
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ScrollAnchorDirective, isStandalone: true, selector: "[kendoChatScrollAnchor]", inputs: { autoScroll: "autoScroll" }, outputs: { autoScrollChange: "autoScrollChange" }, host: { properties: { "style.overflow-anchor": "this.overflowAnchor" } }, exportAs: ["scrollAnchor"], ngImport: i0 });
|
|
65
65
|
}
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollAnchorDirective, decorators: [{
|
|
67
67
|
type: Directive,
|
|
68
68
|
args: [{
|
|
69
69
|
selector: '[kendoChatScrollAnchor]',
|
|
70
70
|
exportAs: 'scrollAnchor',
|
|
71
71
|
standalone: true
|
|
72
72
|
}]
|
|
73
|
-
}], ctorParameters:
|
|
73
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }], propDecorators: { autoScroll: [{
|
|
74
74
|
type: Input
|
|
75
75
|
}], autoScrollChange: [{
|
|
76
76
|
type: Output
|
|
@@ -0,0 +1,81 @@
|
|
|
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 { Component, ElementRef, HostBinding, Input, Renderer2, NgZone, Output, EventEmitter, } from '@angular/core';
|
|
6
|
+
import { Subscription } from 'rxjs';
|
|
7
|
+
import { chevronLeftIcon, chevronRightIcon } from '@progress/kendo-svg-icons';
|
|
8
|
+
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
9
|
+
import { IconWrapperComponent } from '@progress/kendo-angular-icons';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@progress/kendo-angular-l10n";
|
|
12
|
+
const DIRECTION_CLASSES = {
|
|
13
|
+
left: 'chevron-left',
|
|
14
|
+
right: 'chevron-right',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* @hidden
|
|
18
|
+
*/
|
|
19
|
+
export class ChatScrollableButtonComponent {
|
|
20
|
+
host;
|
|
21
|
+
renderer;
|
|
22
|
+
ngZone;
|
|
23
|
+
localization;
|
|
24
|
+
role = 'button';
|
|
25
|
+
prev = false;
|
|
26
|
+
onClick = new EventEmitter();
|
|
27
|
+
get scrollButtonIconClass() {
|
|
28
|
+
const defaultPrevIcon = !this.localization.rtl ? DIRECTION_CLASSES.left : DIRECTION_CLASSES.right;
|
|
29
|
+
const defaultNextIcon = !this.localization.rtl ? DIRECTION_CLASSES.right : DIRECTION_CLASSES.left;
|
|
30
|
+
return this.prev ? defaultPrevIcon : defaultNextIcon;
|
|
31
|
+
}
|
|
32
|
+
get scrollButtonSVGIcon() {
|
|
33
|
+
const defaultPrevSVGIcon = !this.localization.rtl ? this.chevronLeftIcon : this.chevronRightIcon;
|
|
34
|
+
const defaultNextSVGIcon = !this.localization.rtl ? this.chevronRightIcon : this.chevronLeftIcon;
|
|
35
|
+
return this.prev ? defaultPrevSVGIcon : defaultNextSVGIcon;
|
|
36
|
+
}
|
|
37
|
+
chevronLeftIcon = chevronLeftIcon;
|
|
38
|
+
chevronRightIcon = chevronRightIcon;
|
|
39
|
+
subs = new Subscription();
|
|
40
|
+
constructor(host, renderer, ngZone, localization) {
|
|
41
|
+
this.host = host;
|
|
42
|
+
this.renderer = renderer;
|
|
43
|
+
this.ngZone = ngZone;
|
|
44
|
+
this.localization = localization;
|
|
45
|
+
}
|
|
46
|
+
ngAfterViewInit() {
|
|
47
|
+
this.ngZone.runOutsideAngular(() => {
|
|
48
|
+
this.subs.add(this.renderer.listen(this.host.nativeElement, 'click', () => this.clickHandler()));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
ngOnDestroy() {
|
|
52
|
+
this.subs.unsubscribe();
|
|
53
|
+
}
|
|
54
|
+
clickHandler() {
|
|
55
|
+
const buttonType = this.prev ? 'prev' : 'next';
|
|
56
|
+
this.onClick.emit(buttonType);
|
|
57
|
+
}
|
|
58
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatScrollableButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
59
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ChatScrollableButtonComponent, isStandalone: true, selector: "[kendoChatScrollableButton]", inputs: { prev: "prev" }, outputs: { onClick: "onClick" }, host: { properties: { "attr.role": "this.role" } }, ngImport: i0, template: `
|
|
60
|
+
<kendo-icon-wrapper [name]="scrollButtonIconClass" [svgIcon]="scrollButtonSVGIcon" innerCssClass="k-button-icon"> </kendo-icon-wrapper>
|
|
61
|
+
`, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatScrollableButtonComponent, decorators: [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{
|
|
66
|
+
template: `
|
|
67
|
+
<kendo-icon-wrapper [name]="scrollButtonIconClass" [svgIcon]="scrollButtonSVGIcon" innerCssClass="k-button-icon"> </kendo-icon-wrapper>
|
|
68
|
+
`,
|
|
69
|
+
// eslint-disable-next-line @angular-eslint/component-selector
|
|
70
|
+
selector: '[kendoChatScrollableButton]',
|
|
71
|
+
standalone: true,
|
|
72
|
+
imports: [IconWrapperComponent],
|
|
73
|
+
}]
|
|
74
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.LocalizationService }], propDecorators: { role: [{
|
|
75
|
+
type: HostBinding,
|
|
76
|
+
args: ['attr.role']
|
|
77
|
+
}], prev: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], onClick: [{
|
|
80
|
+
type: Output
|
|
81
|
+
}] } });
|
|
@@ -0,0 +1,110 @@
|
|
|
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 { Injectable, NgZone } from '@angular/core';
|
|
6
|
+
import { isDocumentAvailable } from '@progress/kendo-angular-common';
|
|
7
|
+
import { Subject } from 'rxjs';
|
|
8
|
+
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@progress/kendo-angular-l10n";
|
|
11
|
+
const DEFAULT_SCROLL_BEHAVIOR = 'smooth';
|
|
12
|
+
const DEFAULT_SCROLL_SPEED = 100;
|
|
13
|
+
/**
|
|
14
|
+
* @hidden
|
|
15
|
+
*/
|
|
16
|
+
export class SuggestionsScrollService {
|
|
17
|
+
ngZone;
|
|
18
|
+
localization;
|
|
19
|
+
owner;
|
|
20
|
+
position = 0;
|
|
21
|
+
scrollButtonActiveStateChange = new Subject();
|
|
22
|
+
get scrollElement() {
|
|
23
|
+
return this.owner.suggestionsContainer?.nativeElement;
|
|
24
|
+
}
|
|
25
|
+
get scrollContainerOverflowSize() {
|
|
26
|
+
if (!isDocumentAvailable()) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
if (!this.scrollElement) {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
const overflowSize = Math.floor(this.scrollElement.scrollWidth - this.scrollElement.offsetWidth);
|
|
33
|
+
return overflowSize < 0 ? 0 : overflowSize;
|
|
34
|
+
}
|
|
35
|
+
get suggestionsOverflow() {
|
|
36
|
+
return this.scrollContainerOverflowSize > 0;
|
|
37
|
+
}
|
|
38
|
+
constructor(ngZone, localization) {
|
|
39
|
+
this.ngZone = ngZone;
|
|
40
|
+
this.localization = localization;
|
|
41
|
+
}
|
|
42
|
+
toggleScrollButtonsState() {
|
|
43
|
+
const suggestedActions = this.owner;
|
|
44
|
+
if (!suggestedActions?.hasScrollButtons) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const currentPrevButtonActive = !this.isDisabled('prev');
|
|
48
|
+
const currentNextButtonActive = !this.isDisabled('next');
|
|
49
|
+
const defaultOffset = 1;
|
|
50
|
+
const rtlDelta = this.localization.rtl ? -1 : 1;
|
|
51
|
+
const calculatedPrevButtonActive = (this.position * rtlDelta) > 0 && this.scrollContainerOverflowSize > 0;
|
|
52
|
+
const calculatedNextButtonActive = (this.position * rtlDelta) < this.scrollContainerOverflowSize - defaultOffset && this.scrollContainerOverflowSize > 0;
|
|
53
|
+
if (calculatedPrevButtonActive !== currentPrevButtonActive) {
|
|
54
|
+
this.ngZone.run(() => this.toggleButtonActiveState('prev', calculatedPrevButtonActive));
|
|
55
|
+
}
|
|
56
|
+
if (calculatedNextButtonActive !== currentNextButtonActive) {
|
|
57
|
+
this.ngZone.run(() => this.toggleButtonActiveState('next', calculatedNextButtonActive));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
onScroll(e) {
|
|
61
|
+
this.position = e.target.scrollLeft;
|
|
62
|
+
this.toggleScrollButtonsState();
|
|
63
|
+
}
|
|
64
|
+
scrollSuggestions(direction) {
|
|
65
|
+
this.calculateListPosition(direction, DEFAULT_SCROLL_SPEED);
|
|
66
|
+
if (this.scrollElement) {
|
|
67
|
+
this.scrollElement.scrollTo({ left: this.position, behavior: DEFAULT_SCROLL_BEHAVIOR });
|
|
68
|
+
}
|
|
69
|
+
this.toggleScrollButtonsState();
|
|
70
|
+
}
|
|
71
|
+
updateScrollPosition(element) {
|
|
72
|
+
this.position = element.scrollLeft;
|
|
73
|
+
}
|
|
74
|
+
calculateListPosition(direction, scrollSpeed) {
|
|
75
|
+
if (direction === 'prev') {
|
|
76
|
+
if (!this.localization.rtl) {
|
|
77
|
+
this.position = this.position - scrollSpeed <= 0 ? 0 : this.position - scrollSpeed;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.position = this.position + scrollSpeed >= 0 ? 0 : this.position + scrollSpeed;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (direction === 'next' && this.position < this.scrollContainerOverflowSize) {
|
|
84
|
+
if (this.position + scrollSpeed > this.scrollContainerOverflowSize) {
|
|
85
|
+
if (this.localization.rtl) {
|
|
86
|
+
this.position = -this.scrollContainerOverflowSize;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.position = this.scrollContainerOverflowSize;
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (this.localization.rtl) {
|
|
94
|
+
this.position -= scrollSpeed;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.position += scrollSpeed;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
toggleButtonActiveState(buttonType, active) {
|
|
102
|
+
this.scrollButtonActiveStateChange.next({ buttonType, active });
|
|
103
|
+
}
|
|
104
|
+
isDisabled = (buttonType) => this.owner[`${buttonType}ScrollButton`]?.nativeElement.classList.contains('k-disabled');
|
|
105
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SuggestionsScrollService, deps: [{ token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
106
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SuggestionsScrollService });
|
|
107
|
+
}
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SuggestionsScrollService, decorators: [{
|
|
109
|
+
type: Injectable
|
|
110
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.LocalizationService }] });
|
|
@@ -67,6 +67,10 @@ export const FILESELECT_DEFAULT_SETTINGS = {
|
|
|
67
67
|
multiple: true,
|
|
68
68
|
disabled: false
|
|
69
69
|
};
|
|
70
|
+
/**
|
|
71
|
+
* @hidden
|
|
72
|
+
*/
|
|
73
|
+
export const SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS = 'scroll';
|
|
70
74
|
/**
|
|
71
75
|
* @hidden
|
|
72
76
|
*/
|
|
@@ -119,14 +123,16 @@ export const parseMessage = (message, fields) => {
|
|
|
119
123
|
id: authorId,
|
|
120
124
|
...(authorName && { name: authorName }),
|
|
121
125
|
...(authorImageUrl && { avatarUrl: authorImageUrl }),
|
|
122
|
-
...(authorImageAltText && { avatarAltText: authorImageAltText })
|
|
126
|
+
...(authorImageAltText && { avatarAltText: authorImageAltText }),
|
|
123
127
|
};
|
|
124
128
|
}
|
|
129
|
+
const timestampValue = getter(modelFields.timestampField)(message);
|
|
130
|
+
const timestamp = timestampValue instanceof Date ? timestampValue : new Date(timestampValue);
|
|
125
131
|
return {
|
|
126
132
|
id: getter(modelFields.idField)(message),
|
|
127
133
|
text: getter(modelFields.textField)(message),
|
|
128
134
|
author: author,
|
|
129
|
-
timestamp:
|
|
135
|
+
timestamp: timestamp,
|
|
130
136
|
status: getter(modelFields.statusField)(message),
|
|
131
137
|
files: getter(modelFields.filesField)(message),
|
|
132
138
|
attachments: getter(modelFields.attachmentsField)(message),
|
|
@@ -135,6 +141,19 @@ export const parseMessage = (message, fields) => {
|
|
|
135
141
|
isPinned: getter(modelFields.isPinnedField)(message),
|
|
136
142
|
replyToId: getter(modelFields.replyToIdField)(message),
|
|
137
143
|
isDeleted: getter(modelFields.isDeletedField)(message),
|
|
138
|
-
typing: getter(modelFields.typingField)(message)
|
|
144
|
+
typing: getter(modelFields.typingField)(message),
|
|
145
|
+
dataItem: message
|
|
139
146
|
};
|
|
140
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* @hidden
|
|
150
|
+
*/
|
|
151
|
+
export const transformActions = (actions) => {
|
|
152
|
+
return actions.map(action => ({
|
|
153
|
+
text: action.label,
|
|
154
|
+
icon: action.icon,
|
|
155
|
+
svgIcon: action.svgIcon,
|
|
156
|
+
disabled: action.disabled,
|
|
157
|
+
originalAction: action
|
|
158
|
+
}));
|
|
159
|
+
};
|
|
@@ -31,15 +31,15 @@ export class CustomMessagesComponent extends Messages {
|
|
|
31
31
|
get override() {
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
35
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
34
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-chat-messages", providers: [
|
|
36
36
|
{
|
|
37
37
|
provide: Messages,
|
|
38
38
|
useExisting: forwardRef(() => CustomMessagesComponent)
|
|
39
39
|
}
|
|
40
40
|
], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
|
|
41
41
|
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomMessagesComponent, decorators: [{
|
|
43
43
|
type: Component,
|
|
44
44
|
args: [{
|
|
45
45
|
providers: [
|
|
@@ -52,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
52
52
|
template: ``,
|
|
53
53
|
standalone: true
|
|
54
54
|
}]
|
|
55
|
-
}], ctorParameters:
|
|
55
|
+
}], ctorParameters: () => [{ type: i1.LocalizationService }] });
|
|
@@ -17,15 +17,15 @@ export class LocalizedMessagesDirective extends Messages {
|
|
|
17
17
|
super();
|
|
18
18
|
this.service = service;
|
|
19
19
|
}
|
|
20
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
21
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
20
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
21
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: LocalizedMessagesDirective, isStandalone: true, selector: "[kendoChatLocalizedMessages]", providers: [
|
|
22
22
|
{
|
|
23
23
|
provide: Messages,
|
|
24
24
|
useExisting: forwardRef(() => LocalizedMessagesDirective)
|
|
25
25
|
}
|
|
26
26
|
], usesInheritance: true, ngImport: i0 });
|
|
27
27
|
}
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{
|
|
29
29
|
type: Directive,
|
|
30
30
|
args: [{
|
|
31
31
|
providers: [
|
|
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
37
37
|
selector: '[kendoChatLocalizedMessages]',
|
|
38
38
|
standalone: true
|
|
39
39
|
}]
|
|
40
|
-
}], ctorParameters:
|
|
40
|
+
}], ctorParameters: () => [{ type: i1.LocalizationService }] });
|
|
@@ -74,10 +74,18 @@ export class Messages extends ComponentMessages {
|
|
|
74
74
|
* Sets the title of the DropDownButton that opens the File actions.
|
|
75
75
|
*/
|
|
76
76
|
fileActionsTitle;
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Sets the title of the button that shows the **Scroll right** when the suggestions list is scrollable with buttons.
|
|
79
|
+
*/
|
|
80
|
+
nextSuggestionsButtonTitle;
|
|
81
|
+
/**
|
|
82
|
+
* Sets the title of the button that shows the **Scroll left** when the suggestions list is scrollable with buttons.
|
|
83
|
+
*/
|
|
84
|
+
previousSuggestionsButtonTitle;
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
86
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: Messages, selector: "kendoConversationalUIMessages", inputs: { deletedMessageSenderText: "deletedMessageSenderText", deletedMessageReceiverText: "deletedMessageReceiverText", downloadAllFilesText: "downloadAllFilesText", messagePlaceholder: "messagePlaceholder", send: "send", messageListLabel: "messageListLabel", messageBoxInputLabel: "messageBoxInputLabel", messageAttachmentLeftArrow: "messageAttachmentLeftArrow", messageAttachmentRightArrow: "messageAttachmentRightArrow", speechToTextButtonTitle: "speechToTextButtonTitle", fileSelectButtonTitle: "fileSelectButtonTitle", removeReplyTitle: "removeReplyTitle", removeFileTitle: "removeFileTitle", expandTitle: "expandTitle", collapseTitle: "collapseTitle", fileActionsTitle: "fileActionsTitle", nextSuggestionsButtonTitle: "nextSuggestionsButtonTitle", previousSuggestionsButtonTitle: "previousSuggestionsButtonTitle" }, usesInheritance: true, ngImport: i0 });
|
|
79
87
|
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: Messages, decorators: [{
|
|
81
89
|
type: Directive,
|
|
82
90
|
args: [{
|
|
83
91
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -115,4 +123,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
115
123
|
type: Input
|
|
116
124
|
}], fileActionsTitle: [{
|
|
117
125
|
type: Input
|
|
126
|
+
}], nextSuggestionsButtonTitle: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], previousSuggestionsButtonTitle: [{
|
|
129
|
+
type: Input
|
|
118
130
|
}] } });
|
|
@@ -46,10 +46,10 @@ export class MessageAttachmentsComponent extends ChatItem {
|
|
|
46
46
|
scrollSubscription;
|
|
47
47
|
direction;
|
|
48
48
|
get showLeftArrow() {
|
|
49
|
-
return this.carousel && this.direction === 'rtl' ? this.scrollPosition > -1 : this.scrollPosition > 0;
|
|
49
|
+
return this.carousel && (this.direction === 'rtl' ? this.scrollPosition > -1 : this.scrollPosition > 0);
|
|
50
50
|
}
|
|
51
51
|
get showRightArrow() {
|
|
52
|
-
return this.carousel && this.direction === 'rtl' ? this.scrollPosition < 0 : this.scrollPosition < 1;
|
|
52
|
+
return this.carousel && (this.direction === 'rtl' ? this.scrollPosition < 0 : this.scrollPosition < 1);
|
|
53
53
|
}
|
|
54
54
|
carouselKeyHandlers = {
|
|
55
55
|
[Keys.ArrowLeft]: (e) => this.navigateTo(e, this.direction === 'rtl' ? 1 : -1),
|
|
@@ -131,8 +131,8 @@ export class MessageAttachmentsComponent extends ChatItem {
|
|
|
131
131
|
textFor(key) {
|
|
132
132
|
return this.localization.get(key);
|
|
133
133
|
}
|
|
134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
135
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MessageAttachmentsComponent, deps: [{ token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
135
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MessageAttachmentsComponent, isStandalone: true, selector: "kendo-chat-message-attachments", inputs: { attachments: "attachments", layout: "layout", tabbable: "tabbable", template: "template", localization: "localization" }, host: { properties: { "class.k-card-deck-scrollwrap": "this.carousel" } }, providers: [{
|
|
136
136
|
provide: ChatItem,
|
|
137
137
|
useExisting: forwardRef(() => MessageAttachmentsComponent)
|
|
138
138
|
}], viewQueries: [{ propertyName: "deck", first: true, predicate: ["deck"], descendants: true, read: ElementRef, static: true }, { propertyName: "items", predicate: ["item"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
|
|
@@ -178,7 +178,7 @@ export class MessageAttachmentsComponent extends ChatItem {
|
|
|
178
178
|
</button>
|
|
179
179
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: 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: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: AttachmentComponent, selector: "kendo-chat-attachment", inputs: ["attachment", "template"] }] });
|
|
180
180
|
}
|
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MessageAttachmentsComponent, decorators: [{
|
|
182
182
|
type: Component,
|
|
183
183
|
args: [{
|
|
184
184
|
providers: [{
|
|
@@ -231,7 +231,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
231
231
|
standalone: true,
|
|
232
232
|
imports: [NgIf, ButtonComponent, NgFor, AttachmentComponent]
|
|
233
233
|
}]
|
|
234
|
-
}], ctorParameters:
|
|
234
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.LocalizationService }], propDecorators: { attachments: [{
|
|
235
235
|
type: Input
|
|
236
236
|
}], layout: [{
|
|
237
237
|
type: Input
|