@progress/kendo-angular-conversational-ui 13.3.1-develop.1 → 13.4.0-develop.10

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.
@@ -7,6 +7,7 @@ import { User } from '../api/user.interface';
7
7
  import { MessageBoxType } from '../common/models/message-box-options';
8
8
  import { LocalizationService } from '@progress/kendo-angular-l10n';
9
9
  import { ChatMessageBoxTemplateDirective } from './message-box.directive';
10
+ import { SVGIcon } from '@progress/kendo-svg-icons';
10
11
  import * as i0 from "@angular/core";
11
12
  /**
12
13
  * @hidden
@@ -21,6 +22,10 @@ export declare class MessageBoxComponent {
21
22
  localization: LocalizationService;
22
23
  messageBoxTemplate: ChatMessageBoxTemplateDirective;
23
24
  sendMessage: EventEmitter<any>;
25
+ /**
26
+ * @hidden
27
+ */
28
+ sendIcon: SVGIcon;
24
29
  /**
25
30
  * @hidden
26
31
  */
@@ -129,21 +129,25 @@ MessageAttachmentsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.
129
129
  icon="chevron-left"
130
130
  >
131
131
  </button>
132
- <div #deck [class.k-card-deck]="carousel">
133
- <kendo-chat-attachment #item
134
- *ngFor="let att of attachments; index as index; first as first; last as last"
135
- [attachment]="att"
136
- [template]="template"
137
- [class.k-selected]="isSelected(index)"
138
- [class.k-focus]="isSelected(index)"
139
- [class.k-card-wrap]="true"
140
- [class.k-first]="first"
141
- [class.k-last]="last"
142
- [attr.tabindex]="tabbable && isSelected(index) ? '0' : '-1'"
143
- (click)="itemClick(index)"
144
- (keydown)="itemKeydown($event, att)"
132
+ <div
133
+ #deck
134
+ [class.k-card-deck]="carousel"
135
+ [class.k-card-list]="!carousel"
145
136
  >
146
- </kendo-chat-attachment>
137
+ <kendo-chat-attachment #item
138
+ *ngFor="let att of attachments; index as index; first as first; last as last"
139
+ [attachment]="att"
140
+ [template]="template"
141
+ [class.k-selected]="isSelected(index)"
142
+ [class.k-focus]="isSelected(index)"
143
+ [class.k-card-wrap]="true"
144
+ [class.k-first]="first"
145
+ [class.k-last]="last"
146
+ [attr.tabindex]="tabbable && isSelected(index) ? '0' : '-1'"
147
+ (click)="itemClick(index)"
148
+ (keydown)="itemKeydown($event, att)"
149
+ >
150
+ </kendo-chat-attachment>
147
151
  </div>
148
152
  <button
149
153
  *ngIf="carousel && scrollPosition < 1"
@@ -175,21 +179,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
175
179
  icon="chevron-left"
176
180
  >
177
181
  </button>
178
- <div #deck [class.k-card-deck]="carousel">
179
- <kendo-chat-attachment #item
180
- *ngFor="let att of attachments; index as index; first as first; last as last"
181
- [attachment]="att"
182
- [template]="template"
183
- [class.k-selected]="isSelected(index)"
184
- [class.k-focus]="isSelected(index)"
185
- [class.k-card-wrap]="true"
186
- [class.k-first]="first"
187
- [class.k-last]="last"
188
- [attr.tabindex]="tabbable && isSelected(index) ? '0' : '-1'"
189
- (click)="itemClick(index)"
190
- (keydown)="itemKeydown($event, att)"
182
+ <div
183
+ #deck
184
+ [class.k-card-deck]="carousel"
185
+ [class.k-card-list]="!carousel"
191
186
  >
192
- </kendo-chat-attachment>
187
+ <kendo-chat-attachment #item
188
+ *ngFor="let att of attachments; index as index; first as first; last as last"
189
+ [attachment]="att"
190
+ [template]="template"
191
+ [class.k-selected]="isSelected(index)"
192
+ [class.k-focus]="isSelected(index)"
193
+ [class.k-card-wrap]="true"
194
+ [class.k-first]="first"
195
+ [class.k-last]="last"
196
+ [attr.tabindex]="tabbable && isSelected(index) ? '0' : '-1'"
197
+ (click)="itemClick(index)"
198
+ (keydown)="itemKeydown($event, att)"
199
+ >
200
+ </kendo-chat-attachment>
193
201
  </div>
194
202
  <button
195
203
  *ngIf="carousel && scrollPosition < 1"
@@ -7,12 +7,11 @@ import { SendMessageEvent } from '../api/post-message-event';
7
7
  import { LocalizationService } from '@progress/kendo-angular-l10n';
8
8
  import { Keys } from '@progress/kendo-angular-common';
9
9
  import { ChatMessageBoxTemplateDirective } from './message-box.directive';
10
+ import { paperPlaneIcon } from '@progress/kendo-svg-icons';
10
11
  import * as i0 from "@angular/core";
11
12
  import * as i1 from "@progress/kendo-angular-buttons";
12
13
  import * as i2 from "@angular/common";
13
14
  import * as i3 from "../common/focused-state.directive";
14
- // tslint:disable-next-line:max-line-length
15
- const sendIcon = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 16 16"><path d="M0,14.3c-0.1,0.6,0.3,0.8,0.8,0.6l14.8-6.5c0.5-0.2,0.5-0.6,0-0.8L0.8,1.1C0.3,0.9-0.1,1.1,0,1.7l0.7,4.2C0.8,6.5,1.4,7,1.9,7.1l8.8,0.8c0.6,0.1,0.6,0.1,0,0.2L1.9,8.9C1.4,9,0.8,9.5,0.7,10.1L0,14.3z"/></svg>';
16
15
  /**
17
16
  * @hidden
18
17
  */
@@ -20,6 +19,10 @@ export class MessageBoxComponent {
20
19
  constructor() {
21
20
  this.hostClasses = 'k-message-box k-input k-input-md k-rounded-md k-input-solid';
22
21
  this.sendMessage = new EventEmitter();
22
+ /**
23
+ * @hidden
24
+ */
25
+ this.sendIcon = paperPlaneIcon;
23
26
  }
24
27
  get messageBoxValue() {
25
28
  return this.type === 'textarea';
@@ -77,7 +80,47 @@ export class MessageBoxComponent {
77
80
  }
78
81
  }
79
82
  MessageBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
80
- MessageBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MessageBoxComponent, selector: "kendo-message-box", inputs: { user: "user", autoScroll: "autoScroll", type: "type", localization: "localization", messageBoxTemplate: "messageBoxTemplate" }, outputs: { sendMessage: "sendMessage" }, host: { properties: { "class": "this.hostClasses", "class.!k-align-items-end": "this.messageBoxValue" } }, viewQueries: [{ propertyName: "messageBoxInput", first: true, predicate: ["messageBoxInput"], descendants: true }], ngImport: i0, template: "\n <ng-container *ngIf=\"!messageBoxTemplate\">\n <input\n *ngIf=\"type === 'textbox'\"\n #messageBoxInput\n [attr.role]=\"'textbox'\"\n kendoChatFocusedState\n type=\"text\"\n class=\"k-textbox k-input k-input-md k-input-solid\"\n [attr.aria-label]=\"textFor('messageBoxInputLabel')\"\n [placeholder]=\"textFor('messagePlaceholder')\"\n (keydown)=\"inputKeydown($event)\"\n />\n\n <textarea\n *ngIf=\"type === 'textarea'\"\n #messageBoxInput\n [attr.role]=\"'textbox'\"\n kendoChatFocusedState\n [rows]=\"3\"\n class=\"k-textarea k-input k-input-md k-input-solid !k-overflow-y-auto k-resize-none\"\n [attr.aria-label]=\"textFor('messageBoxInputLabel')\"\n [placeholder]=\"textFor('messagePlaceholder')\"\n (keydown)=\"textAreaKeydown($event)\"\n ></textarea>\n\n <button\n kendoButton\n fillMode=\"flat\"\n class=\"k-button-send\"\n [tabindex]=\"0\"\n [attr.title]=\"textFor('send')\"\n (click)=\"sendClick()\"\n >\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 16 16\"><path d=\"M0,14.3c-0.1,0.6,0.3,0.8,0.8,0.6l14.8-6.5c0.5-0.2,0.5-0.6,0-0.8L0.8,1.1C0.3,0.9-0.1,1.1,0,1.7l0.7,4.2C0.8,6.5,1.4,7,1.9,7.1l8.8,0.8c0.6,0.1,0.6,0.1,0,0.2L1.9,8.9C1.4,9,0.8,9.5,0.7,10.1L0,14.3z\"/></svg>\n </button>\n </ng-container>\n\n <ng-template *ngIf=\"messageBoxTemplate\" [ngTemplateOutlet]=\"messageBoxTemplate?.templateRef\"></ng-template>\n", isInline: true, components: [{ type: i1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.FocusedStateDirective, selector: "[kendoChatFocusedState]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
83
+ MessageBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MessageBoxComponent, selector: "kendo-message-box", inputs: { user: "user", autoScroll: "autoScroll", type: "type", localization: "localization", messageBoxTemplate: "messageBoxTemplate" }, outputs: { sendMessage: "sendMessage" }, host: { properties: { "class": "this.hostClasses", "class.!k-align-items-end": "this.messageBoxValue" } }, viewQueries: [{ propertyName: "messageBoxInput", first: true, predicate: ["messageBoxInput"], descendants: true }], ngImport: i0, template: `
84
+ <ng-container *ngIf="!messageBoxTemplate">
85
+ <input
86
+ *ngIf="type === 'textbox'"
87
+ #messageBoxInput
88
+ [attr.role]="'textbox'"
89
+ kendoChatFocusedState
90
+ type="text"
91
+ class="k-textbox k-input k-input-md k-input-solid"
92
+ [attr.aria-label]="textFor('messageBoxInputLabel')"
93
+ [placeholder]="textFor('messagePlaceholder')"
94
+ (keydown)="inputKeydown($event)"
95
+ />
96
+
97
+ <textarea
98
+ *ngIf="type === 'textarea'"
99
+ #messageBoxInput
100
+ [attr.role]="'textbox'"
101
+ kendoChatFocusedState
102
+ [rows]="3"
103
+ class="k-textarea k-input k-input-md k-input-solid !k-overflow-y-auto k-resize-none"
104
+ [attr.aria-label]="textFor('messageBoxInputLabel')"
105
+ [placeholder]="textFor('messagePlaceholder')"
106
+ (keydown)="textAreaKeydown($event)"
107
+ ></textarea>
108
+
109
+ <button
110
+ kendoButton
111
+ fillMode="flat"
112
+ class="k-chat-send"
113
+ icon="paper-plane"
114
+ [svgIcon]="sendIcon"
115
+ [tabindex]="0"
116
+ [attr.title]="textFor('send')"
117
+ (click)="sendClick()"
118
+ >
119
+ </button>
120
+ </ng-container>
121
+
122
+ <ng-template *ngIf="messageBoxTemplate" [ngTemplateOutlet]="messageBoxTemplate?.templateRef"></ng-template>
123
+ `, isInline: true, components: [{ type: i1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.FocusedStateDirective, selector: "[kendoChatFocusedState]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
81
124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessageBoxComponent, decorators: [{
82
125
  type: Component,
83
126
  args: [{
@@ -111,12 +154,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
111
154
  <button
112
155
  kendoButton
113
156
  fillMode="flat"
114
- class="k-button-send"
157
+ class="k-chat-send"
158
+ icon="paper-plane"
159
+ [svgIcon]="sendIcon"
115
160
  [tabindex]="0"
116
161
  [attr.title]="textFor('send')"
117
162
  (click)="sendClick()"
118
163
  >
119
- ${sendIcon}
120
164
  </button>
121
165
  </ng-container>
122
166
 
@@ -158,73 +158,84 @@ export class MessageListComponent {
158
158
  MessageListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessageListComponent, deps: [{ token: i0.ElementRef }, { token: i1.IntlService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
159
159
  MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MessageListComponent, selector: "kendo-chat-message-list", inputs: { messages: "messages", attachmentTemplate: "attachmentTemplate", messageTemplate: "messageTemplate", localization: "localization", user: "user" }, outputs: { executeAction: "executeAction", navigate: "navigate", resize: "resize" }, host: { properties: { "class.k-message-list-content": "this.cssClass" } }, viewQueries: [{ propertyName: "items", predicate: ChatItem, descendants: true }], ngImport: i0, template: `
160
160
  <ng-container *ngFor="let group of view; last as lastGroup; trackBy: trackGroup">
161
- <ng-container [ngSwitch]="group.type">
162
- <div
163
- *ngSwitchCase="'date-marker'"
164
- class="k-timestamp"
165
- >
166
- {{ formatTimeStamp(group.timestamp) }}
167
- </div>
168
- <div
169
- *ngSwitchCase="'message-group'"
170
- class="k-message-group"
171
- [class.k-alt]="isOwnMessage(group.messages[0])"
172
- [class.k-no-avatar]="!group.author.avatarUrl"
173
- >
174
- <img
175
- *ngIf="group.author.avatarUrl"
176
- [attr.src]="group.author.avatarUrl"
177
- [alt]="textFor('messageAvatarAlt')"
178
- class="k-avatar"
179
- />
180
- <p *ngIf="group.author.name" class="k-author">{{ group.author.name }}</p>
181
- <ng-container
182
- *ngFor="let msg of group.messages; first as firstMessage; last as lastMessage"
183
- >
184
- <img *ngIf="msg.user?.avatarUrl" [src]="msg.user?.avatarUrl" class="k-avatar">
185
- <kendo-chat-message #message
186
- [message]="msg"
187
- [tabbable]="lastGroup && lastMessage"
188
- [template]="messageTemplate"
189
- (click)="select(message)"
190
- (focus)="select(message)"
191
- [class.k-only]="group.messages.length === 1"
192
- [class.k-first]="group.messages.length > 1 && firstMessage"
193
- [class.k-last]="group.messages.length > 1 && lastMessage"
161
+ <ng-container [ngSwitch]="group.type">
162
+ <div
163
+ *ngSwitchCase="'date-marker'"
164
+ class="k-timestamp"
194
165
  >
195
- </kendo-chat-message>
196
-
197
- <kendo-chat-attachment
198
- *ngIf="msg.attachments && msg.attachments.length === 1"
199
- [attachment]="msg.attachments[0]"
200
- [template]="attachmentTemplate"
166
+ {{ formatTimeStamp(group.timestamp) }}
167
+ </div>
168
+ <div
169
+ *ngSwitchCase="'message-group'"
170
+ class="k-message-group"
171
+ [class.k-alt]="isOwnMessage(group.messages[0])"
172
+ [class.k-no-avatar]="!group.author.avatarUrl"
201
173
  >
202
- </kendo-chat-attachment>
203
- </ng-container>
204
- </div>
174
+ <div
175
+ *ngIf="group.author.avatarUrl"
176
+ class="k-avatar k-avatar-md k-avatar-solid k-avatar-solid-primary k-rounded-full"
177
+ >
178
+ <span class="k-avatar-image">
179
+ <img
180
+ [attr.src]="group.author.avatarUrl"
181
+ [alt]="textFor('messageAvatarAlt')"
182
+ />
183
+ </span>
184
+ </div>
185
+ <ng-container
186
+ *ngFor="let msg of group.messages; first as firstMessage; last as lastMessage"
187
+ >
188
+ <div
189
+ *ngIf="msg.user?.avatarUrl"
190
+ class="k-avatar k-avatar-md k-avatar-solid k-avatar-solid-primary k-rounded-full"
191
+ >
192
+ <span class="k-avatar-image">
193
+ <img [src]="msg.user?.avatarUrl">
194
+ </span>
195
+ </div>
196
+ <kendo-chat-message #message
197
+ [message]="msg"
198
+ [tabbable]="lastGroup && lastMessage"
199
+ [template]="messageTemplate"
200
+ (click)="select(message)"
201
+ (focus)="select(message)"
202
+ [class.k-only]="group.messages.length === 1"
203
+ [class.k-first]="group.messages.length > 1 && firstMessage"
204
+ [class.k-last]="group.messages.length > 1 && lastMessage"
205
+ >
206
+ </kendo-chat-message>
205
207
 
206
- <kendo-chat-message-attachments #attachments
207
- *ngSwitchCase="'attachment-group'"
208
- [attachments]="group.attachments"
209
- [layout]="group.attachmentLayout"
210
- [localization]="localization"
211
- [tabbable]="lastGroup"
212
- [template]="attachmentTemplate"
213
- (click)="select(attachments)"
214
- (focus)="select(attachments)"
215
- >
216
- </kendo-chat-message-attachments>
208
+ <kendo-chat-attachment
209
+ *ngIf="msg.attachments && msg.attachments.length === 1"
210
+ [attachment]="msg.attachments[0]"
211
+ [template]="attachmentTemplate"
212
+ >
213
+ </kendo-chat-attachment>
214
+ </ng-container>
215
+ </div>
217
216
 
218
- <kendo-chat-suggested-actions #actions
219
- *ngSwitchCase="'action-group'"
220
- [actions]="group.actions"
221
- [tabbable]="lastGroup"
222
- (dispatch)="dispatchAction($event, last(group.messages))"
223
- (click)="select(actions)"
224
- (focus)="select(actions)"
225
- >
226
- </kendo-chat-suggested-actions>
227
- </ng-container>
217
+ <kendo-chat-message-attachments #attachments
218
+ *ngSwitchCase="'attachment-group'"
219
+ [attachments]="group.attachments"
220
+ [layout]="group.attachmentLayout"
221
+ [localization]="localization"
222
+ [tabbable]="lastGroup"
223
+ [template]="attachmentTemplate"
224
+ (click)="select(attachments)"
225
+ (focus)="select(attachments)"
226
+ >
227
+ </kendo-chat-message-attachments>
228
+
229
+ <kendo-chat-suggested-actions #actions
230
+ *ngSwitchCase="'action-group'"
231
+ [actions]="group.actions"
232
+ [tabbable]="lastGroup"
233
+ (dispatch)="dispatchAction($event, last(group.messages))"
234
+ (click)="select(actions)"
235
+ (focus)="select(actions)"
236
+ >
237
+ </kendo-chat-suggested-actions>
238
+ </ng-container>
228
239
  </ng-container>
229
240
  <kendo-resize-sensor (resize)="onResize()">
230
241
  </kendo-resize-sensor>
@@ -235,73 +246,84 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
235
246
  selector: 'kendo-chat-message-list',
236
247
  template: `
237
248
  <ng-container *ngFor="let group of view; last as lastGroup; trackBy: trackGroup">
238
- <ng-container [ngSwitch]="group.type">
239
- <div
240
- *ngSwitchCase="'date-marker'"
241
- class="k-timestamp"
242
- >
243
- {{ formatTimeStamp(group.timestamp) }}
244
- </div>
245
- <div
246
- *ngSwitchCase="'message-group'"
247
- class="k-message-group"
248
- [class.k-alt]="isOwnMessage(group.messages[0])"
249
- [class.k-no-avatar]="!group.author.avatarUrl"
250
- >
251
- <img
252
- *ngIf="group.author.avatarUrl"
253
- [attr.src]="group.author.avatarUrl"
254
- [alt]="textFor('messageAvatarAlt')"
255
- class="k-avatar"
256
- />
257
- <p *ngIf="group.author.name" class="k-author">{{ group.author.name }}</p>
258
- <ng-container
259
- *ngFor="let msg of group.messages; first as firstMessage; last as lastMessage"
260
- >
261
- <img *ngIf="msg.user?.avatarUrl" [src]="msg.user?.avatarUrl" class="k-avatar">
262
- <kendo-chat-message #message
263
- [message]="msg"
264
- [tabbable]="lastGroup && lastMessage"
265
- [template]="messageTemplate"
266
- (click)="select(message)"
267
- (focus)="select(message)"
268
- [class.k-only]="group.messages.length === 1"
269
- [class.k-first]="group.messages.length > 1 && firstMessage"
270
- [class.k-last]="group.messages.length > 1 && lastMessage"
249
+ <ng-container [ngSwitch]="group.type">
250
+ <div
251
+ *ngSwitchCase="'date-marker'"
252
+ class="k-timestamp"
271
253
  >
272
- </kendo-chat-message>
273
-
274
- <kendo-chat-attachment
275
- *ngIf="msg.attachments && msg.attachments.length === 1"
276
- [attachment]="msg.attachments[0]"
277
- [template]="attachmentTemplate"
254
+ {{ formatTimeStamp(group.timestamp) }}
255
+ </div>
256
+ <div
257
+ *ngSwitchCase="'message-group'"
258
+ class="k-message-group"
259
+ [class.k-alt]="isOwnMessage(group.messages[0])"
260
+ [class.k-no-avatar]="!group.author.avatarUrl"
278
261
  >
279
- </kendo-chat-attachment>
280
- </ng-container>
281
- </div>
262
+ <div
263
+ *ngIf="group.author.avatarUrl"
264
+ class="k-avatar k-avatar-md k-avatar-solid k-avatar-solid-primary k-rounded-full"
265
+ >
266
+ <span class="k-avatar-image">
267
+ <img
268
+ [attr.src]="group.author.avatarUrl"
269
+ [alt]="textFor('messageAvatarAlt')"
270
+ />
271
+ </span>
272
+ </div>
273
+ <ng-container
274
+ *ngFor="let msg of group.messages; first as firstMessage; last as lastMessage"
275
+ >
276
+ <div
277
+ *ngIf="msg.user?.avatarUrl"
278
+ class="k-avatar k-avatar-md k-avatar-solid k-avatar-solid-primary k-rounded-full"
279
+ >
280
+ <span class="k-avatar-image">
281
+ <img [src]="msg.user?.avatarUrl">
282
+ </span>
283
+ </div>
284
+ <kendo-chat-message #message
285
+ [message]="msg"
286
+ [tabbable]="lastGroup && lastMessage"
287
+ [template]="messageTemplate"
288
+ (click)="select(message)"
289
+ (focus)="select(message)"
290
+ [class.k-only]="group.messages.length === 1"
291
+ [class.k-first]="group.messages.length > 1 && firstMessage"
292
+ [class.k-last]="group.messages.length > 1 && lastMessage"
293
+ >
294
+ </kendo-chat-message>
282
295
 
283
- <kendo-chat-message-attachments #attachments
284
- *ngSwitchCase="'attachment-group'"
285
- [attachments]="group.attachments"
286
- [layout]="group.attachmentLayout"
287
- [localization]="localization"
288
- [tabbable]="lastGroup"
289
- [template]="attachmentTemplate"
290
- (click)="select(attachments)"
291
- (focus)="select(attachments)"
292
- >
293
- </kendo-chat-message-attachments>
296
+ <kendo-chat-attachment
297
+ *ngIf="msg.attachments && msg.attachments.length === 1"
298
+ [attachment]="msg.attachments[0]"
299
+ [template]="attachmentTemplate"
300
+ >
301
+ </kendo-chat-attachment>
302
+ </ng-container>
303
+ </div>
294
304
 
295
- <kendo-chat-suggested-actions #actions
296
- *ngSwitchCase="'action-group'"
297
- [actions]="group.actions"
298
- [tabbable]="lastGroup"
299
- (dispatch)="dispatchAction($event, last(group.messages))"
300
- (click)="select(actions)"
301
- (focus)="select(actions)"
302
- >
303
- </kendo-chat-suggested-actions>
304
- </ng-container>
305
+ <kendo-chat-message-attachments #attachments
306
+ *ngSwitchCase="'attachment-group'"
307
+ [attachments]="group.attachments"
308
+ [layout]="group.attachmentLayout"
309
+ [localization]="localization"
310
+ [tabbable]="lastGroup"
311
+ [template]="attachmentTemplate"
312
+ (click)="select(attachments)"
313
+ (focus)="select(attachments)"
314
+ >
315
+ </kendo-chat-message-attachments>
316
+
317
+ <kendo-chat-suggested-actions #actions
318
+ *ngSwitchCase="'action-group'"
319
+ [actions]="group.actions"
320
+ [tabbable]="lastGroup"
321
+ (dispatch)="dispatchAction($event, last(group.messages))"
322
+ (click)="select(actions)"
323
+ (focus)="select(actions)"
324
+ >
325
+ </kendo-chat-suggested-actions>
326
+ </ng-container>
305
327
  </ng-container>
306
328
  <kendo-resize-sensor (resize)="onResize()">
307
329
  </kendo-resize-sensor>
@@ -36,41 +36,41 @@ MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
36
36
  useExisting: forwardRef(() => MessageComponent)
37
37
  }], usesInheritance: true, ngImport: i0, template: `
38
38
  <time
39
- [attr.aria-hidden]="!selected"
40
- class="k-message-time"
41
- *ngIf="message.timestamp"
39
+ [attr.aria-hidden]="!selected"
40
+ class="k-message-time"
41
+ *ngIf="message.timestamp"
42
42
  >
43
- {{ formatTimeStamp(message.timestamp) }}
43
+ {{ formatTimeStamp(message.timestamp) }}
44
44
  </time>
45
45
 
46
46
  <ng-container *ngIf="!message.typing; else typing">
47
- <div class="k-bubble" *ngIf="template">
48
- <ng-container
49
- *ngTemplateOutlet="template.templateRef; context: { $implicit: message };"
50
- >
51
- </ng-container>
52
- </div>
47
+ <div class="k-chat-bubble" *ngIf="template">
48
+ <ng-container
49
+ *ngTemplateOutlet="template.templateRef; context: { $implicit: message };"
50
+ >
51
+ </ng-container>
52
+ </div>
53
53
 
54
- <div class="k-bubble" *ngIf="!template && message.text">
55
- {{message.text}}
56
- </div>
54
+ <div class="k-chat-bubble" *ngIf="!template && message.text">
55
+ {{message.text}}
56
+ </div>
57
57
  </ng-container>
58
58
 
59
59
  <span
60
- class="k-message-status"
61
- *ngIf="message.status"
60
+ class="k-message-status"
61
+ *ngIf="message.status"
62
62
  >
63
- {{ message.status }}
63
+ {{ message.status }}
64
64
  </span>
65
65
 
66
66
  <ng-template #typing>
67
- <div class="k-bubble">
68
- <div class="k-typing-indicator">
69
- <span></span>
70
- <span></span>
71
- <span></span>
67
+ <div class="k-chat-bubble">
68
+ <div class="k-typing-indicator">
69
+ <span></span>
70
+ <span></span>
71
+ <span></span>
72
+ </div>
72
73
  </div>
73
- </div>
74
74
  </ng-template>
75
75
  `, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
76
76
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessageComponent, decorators: [{
@@ -83,41 +83,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
83
83
  }],
84
84
  template: `
85
85
  <time
86
- [attr.aria-hidden]="!selected"
87
- class="k-message-time"
88
- *ngIf="message.timestamp"
86
+ [attr.aria-hidden]="!selected"
87
+ class="k-message-time"
88
+ *ngIf="message.timestamp"
89
89
  >
90
- {{ formatTimeStamp(message.timestamp) }}
90
+ {{ formatTimeStamp(message.timestamp) }}
91
91
  </time>
92
92
 
93
93
  <ng-container *ngIf="!message.typing; else typing">
94
- <div class="k-bubble" *ngIf="template">
95
- <ng-container
96
- *ngTemplateOutlet="template.templateRef; context: { $implicit: message };"
97
- >
98
- </ng-container>
99
- </div>
94
+ <div class="k-chat-bubble" *ngIf="template">
95
+ <ng-container
96
+ *ngTemplateOutlet="template.templateRef; context: { $implicit: message };"
97
+ >
98
+ </ng-container>
99
+ </div>
100
100
 
101
- <div class="k-bubble" *ngIf="!template && message.text">
102
- {{message.text}}
103
- </div>
101
+ <div class="k-chat-bubble" *ngIf="!template && message.text">
102
+ {{message.text}}
103
+ </div>
104
104
  </ng-container>
105
105
 
106
106
  <span
107
- class="k-message-status"
108
- *ngIf="message.status"
107
+ class="k-message-status"
108
+ *ngIf="message.status"
109
109
  >
110
- {{ message.status }}
110
+ {{ message.status }}
111
111
  </span>
112
112
 
113
113
  <ng-template #typing>
114
- <div class="k-bubble">
115
- <div class="k-typing-indicator">
116
- <span></span>
117
- <span></span>
118
- <span></span>
114
+ <div class="k-chat-bubble">
115
+ <div class="k-typing-indicator">
116
+ <span></span>
117
+ <span></span>
118
+ <span></span>
119
+ </div>
119
120
  </div>
120
- </div>
121
121
  </ng-template>
122
122
  `
123
123
  }]
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-conversational-ui',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1692174935,
13
- version: '13.3.1-develop.1',
12
+ publishDate: 1692971795,
13
+ version: '13.4.0-develop.10',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };