@progress/kendo-angular-conversational-ui 21.1.1-develop.1 → 21.2.0-develop.1

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.
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgZone, Output, Renderer2, ViewChild, ViewContainerRef, Optional, SkipSelf, inject, TemplateRef } from '@angular/core';
6
- import { NgIf, NgClass, NgTemplateOutlet, NgFor } from '@angular/common';
6
+ import { NgClass, NgTemplateOutlet } from '@angular/common';
7
7
  import { Subscription } from 'rxjs';
8
8
  import { menuIcon, paperPlaneIcon, stopSmIcon } from '@progress/kendo-svg-icons';
9
9
  import { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
@@ -246,7 +246,7 @@ export class InlineAIPromptContentComponent {
246
246
  }
247
247
  }
248
248
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineAIPromptContentComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.LocalizationService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
249
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InlineAIPromptContentComponent, isStandalone: true, selector: "kendo-inlineaiprompt-content", inputs: { popupElement: "popupElement", promptValue: "promptValue", placeholder: "placeholder", promptOutput: "promptOutput", enableSpeechToText: "enableSpeechToText", streaming: "streaming", width: "width", maxHeight: "maxHeight", appendTo: "appendTo", outputActions: "outputActions", promptCommands: "promptCommands", outputTemplate: "outputTemplate" }, outputs: { promptRequest: "promptRequest", commandExecute: "commandExecute", outputActionClick: "outputActionClick", promptRequestCancel: "promptRequestCancel", close: "close", promptValueChange: "promptValueChange" }, host: { listeners: { "keydown": "onEscapeKey($event)" }, properties: { "class.k-prompt": "this.className", "attr.dir": "this.dirAttr", "style.max-height": "this.maxHeightStyle", "style.width": "this.widthStyle" } }, providers: [
249
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InlineAIPromptContentComponent, isStandalone: true, selector: "kendo-inlineaiprompt-content", inputs: { popupElement: "popupElement", promptValue: "promptValue", placeholder: "placeholder", promptOutput: "promptOutput", enableSpeechToText: "enableSpeechToText", streaming: "streaming", width: "width", maxHeight: "maxHeight", appendTo: "appendTo", outputActions: "outputActions", promptCommands: "promptCommands", outputTemplate: "outputTemplate" }, outputs: { promptRequest: "promptRequest", commandExecute: "commandExecute", outputActionClick: "outputActionClick", promptRequestCancel: "promptRequestCancel", close: "close", promptValueChange: "promptValueChange" }, host: { listeners: { "keydown": "onEscapeKey($event)" }, properties: { "class.k-prompt": "this.className", "attr.dir": "this.dirAttr", "style.max-height": "this.maxHeightStyle", "style.width": "this.widthStyle" } }, providers: [
250
250
  LocalizationService,
251
251
  {
252
252
  provide: L10N_PREFIX,
@@ -254,99 +254,112 @@ export class InlineAIPromptContentComponent {
254
254
  },
255
255
  ], viewQueries: [{ propertyName: "textArea", first: true, predicate: TextAreaComponent, descendants: true }, { propertyName: "contextMenu", first: true, predicate: ["kendoContextMenu"], descendants: true }], exportAs: ["kendoInlineAIPromptContent"], ngImport: i0, template: `
256
256
  <ng-container kendoInlineAIPromptLocalizedMessages
257
- i18n-commandsButtonTitle="kendo.inlineaiprompt.commandsButtonTitle|Sets the Commands button title."
258
- commandsButtonTitle="Command Menu"
259
- i18n-generateButtonTitle="kendo.inlineaiprompt.generateButtonTitle|Sets the Generate button title."
260
- generateButtonTitle="Generate"
261
- i18n-speechToTextButtonTitle="kendo.inlineaiprompt.speechToTextButtonTitle|Sets the Speech to Text button title."
262
- speechToTextButtonTitle="Speech to Text"
263
- >
257
+ i18n-commandsButtonTitle="kendo.inlineaiprompt.commandsButtonTitle|Sets the Commands button title."
258
+ commandsButtonTitle="Command Menu"
259
+ i18n-generateButtonTitle="kendo.inlineaiprompt.generateButtonTitle|Sets the Generate button title."
260
+ generateButtonTitle="Generate"
261
+ i18n-speechToTextButtonTitle="kendo.inlineaiprompt.speechToTextButtonTitle|Sets the Speech to Text button title."
262
+ speechToTextButtonTitle="Speech to Text"
263
+ >
264
264
  </ng-container>
265
265
  <div class="k-prompt-content">
266
- <div class="k-prompt-view">
267
- <kendo-card *ngIf="promptOutput" width="100%">
268
- <kendo-card-body>
269
- <ng-container
270
- *ngIf="outputTemplate"
271
- [ngTemplateOutlet]="outputTemplate"
272
- [ngTemplateOutletContext]="{ $implicit: promptOutput }"
273
- >
274
- </ng-container>
275
- <ng-container *ngIf="!outputTemplate">{{promptOutput.output}}</ng-container>
276
- </kendo-card-body>
277
- <kendo-card-actions *ngIf="outputActions && outputActions.length > 0">
278
- <ng-container *ngFor="let action of outputActions">
279
- <button kendoButton *ngIf="action.type === 'button'"
280
- [attr.title]="action?.title"
281
- [fillMode]="action?.fillMode"
282
- [themeColor]="action?.themeColor"
283
- [rounded]="action?.rounded"
284
- [icon]="action?.icon"
285
- [svgIcon]="action?.svgIcon"
286
- (click)="onActionClick(action)"
287
- >{{action?.text}}</button>
288
- <div *ngIf="action.type === 'spacer'" class="k-spacer"></div>
289
- </ng-container>
290
- </kendo-card-actions>
291
- </kendo-card>
292
- <kendo-textarea
293
- [value]="promptValue ? promptValue : null"
294
- (valueChange)="handlePromptValueChange($event)"
295
- [rows]="initialRows"
296
- resizable="auto"
297
- flow="horizontal"
298
- [placeholder]="placeholder"
299
- [showPrefixSeparator]="true"
300
- [selectOnFocus]="true"
301
- [maxResizableRows]="maxRows"
302
- (keydown)="handleTextAreaKeydown($event)"
303
- >
304
- <kendo-textarea-prefix>
305
- <button
306
- kendoButton
307
- #commandMenuButton
308
- *ngIf="promptCommands && promptCommands.length > 0"
309
- [attr.title]="messageFor('commandsButtonTitle')"
310
- fillMode="flat"
311
- icon="menu"
312
- [svgIcon]="commandMenuIcon"
313
- (click)="onCommandButtonClick($event)"
314
- ></button>
315
- <button
316
- kendoSpeechToTextButton
317
- *ngIf="enableSpeechToText"
318
- [attr.title]="messageFor('speechToTextButtonTitle')"
319
- fillMode="flat"
320
- (result)="handleSpeechResult($event)"
321
- (start)="isListening = true"
322
- (end)="isListening = false"
323
- ></button>
324
- </kendo-textarea-prefix>
325
- <kendo-textarea-suffix>
326
- <button
327
- kendoButton
328
- [attr.title]="messageFor('generateButtonTitle')"
329
- fillMode="flat"
330
- class="k-prompt-send"
331
- [ngClass]="{ 'k-generating': streaming, 'k-active': streaming }"
332
- (click)="handlePromptRequest()"
333
- [disabled]="!streaming && (!promptValue?.trim() || isListening)"
334
- [svgIcon]="streaming ? stopGenerationIcon : sendIcon"
335
- [icon]="streaming ? 'stop-sm' : 'paper-plane'"
336
- ></button>
337
- </kendo-textarea-suffix>
338
- </kendo-textarea>
339
- </div>
266
+ <div class="k-prompt-view">
267
+ @if (promptOutput) {
268
+ <kendo-card width="100%">
269
+ <kendo-card-body>
270
+ @if (outputTemplate) {
271
+ <ng-container
272
+ [ngTemplateOutlet]="outputTemplate"
273
+ [ngTemplateOutletContext]="{ $implicit: promptOutput }"
274
+ >
275
+ </ng-container>
276
+ }
277
+ @if (!outputTemplate) {
278
+ {{promptOutput.output}}
279
+ }
280
+ </kendo-card-body>
281
+ @if (outputActions && outputActions.length > 0) {
282
+ <kendo-card-actions>
283
+ @for (action of outputActions; track action) {
284
+ @if (action.type === 'button') {
285
+ <button kendoButton
286
+ [attr.title]="action?.title"
287
+ [fillMode]="action?.fillMode"
288
+ [themeColor]="action?.themeColor"
289
+ [rounded]="action?.rounded"
290
+ [icon]="action?.icon"
291
+ [svgIcon]="action?.svgIcon"
292
+ (click)="onActionClick(action)"
293
+ >{{action?.text}}</button>
294
+ }
295
+ @if (action.type === 'spacer') {
296
+ <div class="k-spacer"></div>
297
+ }
298
+ }
299
+ </kendo-card-actions>
300
+ }
301
+ </kendo-card>
302
+ }
303
+ <kendo-textarea
304
+ [value]="promptValue ? promptValue : null"
305
+ (valueChange)="handlePromptValueChange($event)"
306
+ [rows]="initialRows"
307
+ resizable="auto"
308
+ flow="horizontal"
309
+ [placeholder]="placeholder"
310
+ [showPrefixSeparator]="true"
311
+ [selectOnFocus]="true"
312
+ [maxResizableRows]="maxRows"
313
+ (keydown)="handleTextAreaKeydown($event)"
314
+ >
315
+ <kendo-textarea-prefix>
316
+ @if (promptCommands && promptCommands.length > 0) {
317
+ <button
318
+ kendoButton
319
+ #commandMenuButton
320
+ [attr.title]="messageFor('commandsButtonTitle')"
321
+ fillMode="flat"
322
+ icon="menu"
323
+ [svgIcon]="commandMenuIcon"
324
+ (click)="onCommandButtonClick($event)"
325
+ ></button>
326
+ }
327
+ @if (enableSpeechToText) {
328
+ <button
329
+ kendoSpeechToTextButton
330
+ [attr.title]="messageFor('speechToTextButtonTitle')"
331
+ fillMode="flat"
332
+ (result)="handleSpeechResult($event)"
333
+ (start)="isListening = true"
334
+ (end)="isListening = false"
335
+ ></button>
336
+ }
337
+ </kendo-textarea-prefix>
338
+ <kendo-textarea-suffix>
339
+ <button
340
+ kendoButton
341
+ [attr.title]="messageFor('generateButtonTitle')"
342
+ fillMode="flat"
343
+ class="k-prompt-send"
344
+ [ngClass]="{ 'k-generating': streaming, 'k-active': streaming }"
345
+ (click)="handlePromptRequest()"
346
+ [disabled]="!streaming && (!promptValue?.trim() || isListening)"
347
+ [svgIcon]="streaming ? stopGenerationIcon : sendIcon"
348
+ [icon]="streaming ? 'stop-sm' : 'paper-plane'"
349
+ ></button>
350
+ </kendo-textarea-suffix>
351
+ </kendo-textarea>
352
+ </div>
340
353
  </div>
341
354
  <kendo-contextmenu
342
- #kendoContextMenu
343
- [alignToAnchor]="true"
344
- [items]="commandMenuItems"
345
- [appendTo]="appendTo"
346
- class="k-hidden"
347
- (select)="onCommandClick($event)">
355
+ #kendoContextMenu
356
+ [alignToAnchor]="true"
357
+ [items]="commandMenuItems"
358
+ [appendTo]="appendTo"
359
+ class="k-hidden"
360
+ (select)="onCommandClick($event)">
348
361
  </kendo-contextmenu>
349
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoInlineAIPromptLocalizedMessages]" }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2.SpeechToTextButtonComponent, selector: "button[kendoSpeechToTextButton]", inputs: ["disabled", "size", "rounded", "fillMode", "themeColor", "integrationMode", "lang", "continuous", "interimResults", "maxAlternatives"], outputs: ["start", "end", "result", "error", "click"], exportAs: ["kendoSpeechToTextButton"] }, { kind: "component", type: i3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "component", type: i3.TextAreaPrefixComponent, selector: "kendo-textarea-prefix", inputs: ["flow", "orientation"], exportAs: ["kendoTextAreaPrefix"] }, { kind: "component", type: i3.TextAreaSuffixComponent, selector: "kendo-textarea-suffix", inputs: ["flow", "orientation"], exportAs: ["kendoTextAreaSuffix"] }, { kind: "component", type: i4.ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }, { kind: "component", type: i5.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i5.CardActionsComponent, selector: "kendo-card-actions", inputs: ["orientation", "layout", "actions"], outputs: ["action"] }, { kind: "component", type: i5.CardBodyComponent, selector: "kendo-card-body" }] });
362
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoInlineAIPromptLocalizedMessages]" }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2.SpeechToTextButtonComponent, selector: "button[kendoSpeechToTextButton]", inputs: ["disabled", "size", "rounded", "fillMode", "themeColor", "integrationMode", "lang", "continuous", "interimResults", "maxAlternatives"], outputs: ["start", "end", "result", "error", "click"], exportAs: ["kendoSpeechToTextButton"] }, { kind: "component", type: i3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "component", type: i3.TextAreaPrefixComponent, selector: "kendo-textarea-prefix", inputs: ["flow", "orientation"], exportAs: ["kendoTextAreaPrefix"] }, { kind: "component", type: i3.TextAreaSuffixComponent, selector: "kendo-textarea-suffix", inputs: ["flow", "orientation"], exportAs: ["kendoTextAreaSuffix"] }, { kind: "component", type: i4.ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }, { kind: "component", type: i5.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i5.CardActionsComponent, selector: "kendo-card-actions", inputs: ["orientation", "layout", "actions"], outputs: ["action"] }, { kind: "component", type: i5.CardBodyComponent, selector: "kendo-card-body" }] });
350
363
  }
351
364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineAIPromptContentComponent, decorators: [{
352
365
  type: Component,
@@ -362,101 +375,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
362
375
  ],
363
376
  template: `
364
377
  <ng-container kendoInlineAIPromptLocalizedMessages
365
- i18n-commandsButtonTitle="kendo.inlineaiprompt.commandsButtonTitle|Sets the Commands button title."
366
- commandsButtonTitle="Command Menu"
367
- i18n-generateButtonTitle="kendo.inlineaiprompt.generateButtonTitle|Sets the Generate button title."
368
- generateButtonTitle="Generate"
369
- i18n-speechToTextButtonTitle="kendo.inlineaiprompt.speechToTextButtonTitle|Sets the Speech to Text button title."
370
- speechToTextButtonTitle="Speech to Text"
371
- >
378
+ i18n-commandsButtonTitle="kendo.inlineaiprompt.commandsButtonTitle|Sets the Commands button title."
379
+ commandsButtonTitle="Command Menu"
380
+ i18n-generateButtonTitle="kendo.inlineaiprompt.generateButtonTitle|Sets the Generate button title."
381
+ generateButtonTitle="Generate"
382
+ i18n-speechToTextButtonTitle="kendo.inlineaiprompt.speechToTextButtonTitle|Sets the Speech to Text button title."
383
+ speechToTextButtonTitle="Speech to Text"
384
+ >
372
385
  </ng-container>
373
386
  <div class="k-prompt-content">
374
- <div class="k-prompt-view">
375
- <kendo-card *ngIf="promptOutput" width="100%">
376
- <kendo-card-body>
377
- <ng-container
378
- *ngIf="outputTemplate"
379
- [ngTemplateOutlet]="outputTemplate"
380
- [ngTemplateOutletContext]="{ $implicit: promptOutput }"
381
- >
382
- </ng-container>
383
- <ng-container *ngIf="!outputTemplate">{{promptOutput.output}}</ng-container>
384
- </kendo-card-body>
385
- <kendo-card-actions *ngIf="outputActions && outputActions.length > 0">
386
- <ng-container *ngFor="let action of outputActions">
387
- <button kendoButton *ngIf="action.type === 'button'"
388
- [attr.title]="action?.title"
389
- [fillMode]="action?.fillMode"
390
- [themeColor]="action?.themeColor"
391
- [rounded]="action?.rounded"
392
- [icon]="action?.icon"
393
- [svgIcon]="action?.svgIcon"
394
- (click)="onActionClick(action)"
395
- >{{action?.text}}</button>
396
- <div *ngIf="action.type === 'spacer'" class="k-spacer"></div>
397
- </ng-container>
398
- </kendo-card-actions>
399
- </kendo-card>
400
- <kendo-textarea
401
- [value]="promptValue ? promptValue : null"
402
- (valueChange)="handlePromptValueChange($event)"
403
- [rows]="initialRows"
404
- resizable="auto"
405
- flow="horizontal"
406
- [placeholder]="placeholder"
407
- [showPrefixSeparator]="true"
408
- [selectOnFocus]="true"
409
- [maxResizableRows]="maxRows"
410
- (keydown)="handleTextAreaKeydown($event)"
411
- >
412
- <kendo-textarea-prefix>
413
- <button
414
- kendoButton
415
- #commandMenuButton
416
- *ngIf="promptCommands && promptCommands.length > 0"
417
- [attr.title]="messageFor('commandsButtonTitle')"
418
- fillMode="flat"
419
- icon="menu"
420
- [svgIcon]="commandMenuIcon"
421
- (click)="onCommandButtonClick($event)"
422
- ></button>
423
- <button
424
- kendoSpeechToTextButton
425
- *ngIf="enableSpeechToText"
426
- [attr.title]="messageFor('speechToTextButtonTitle')"
427
- fillMode="flat"
428
- (result)="handleSpeechResult($event)"
429
- (start)="isListening = true"
430
- (end)="isListening = false"
431
- ></button>
432
- </kendo-textarea-prefix>
433
- <kendo-textarea-suffix>
434
- <button
435
- kendoButton
436
- [attr.title]="messageFor('generateButtonTitle')"
437
- fillMode="flat"
438
- class="k-prompt-send"
439
- [ngClass]="{ 'k-generating': streaming, 'k-active': streaming }"
440
- (click)="handlePromptRequest()"
441
- [disabled]="!streaming && (!promptValue?.trim() || isListening)"
442
- [svgIcon]="streaming ? stopGenerationIcon : sendIcon"
443
- [icon]="streaming ? 'stop-sm' : 'paper-plane'"
444
- ></button>
445
- </kendo-textarea-suffix>
446
- </kendo-textarea>
447
- </div>
387
+ <div class="k-prompt-view">
388
+ @if (promptOutput) {
389
+ <kendo-card width="100%">
390
+ <kendo-card-body>
391
+ @if (outputTemplate) {
392
+ <ng-container
393
+ [ngTemplateOutlet]="outputTemplate"
394
+ [ngTemplateOutletContext]="{ $implicit: promptOutput }"
395
+ >
396
+ </ng-container>
397
+ }
398
+ @if (!outputTemplate) {
399
+ {{promptOutput.output}}
400
+ }
401
+ </kendo-card-body>
402
+ @if (outputActions && outputActions.length > 0) {
403
+ <kendo-card-actions>
404
+ @for (action of outputActions; track action) {
405
+ @if (action.type === 'button') {
406
+ <button kendoButton
407
+ [attr.title]="action?.title"
408
+ [fillMode]="action?.fillMode"
409
+ [themeColor]="action?.themeColor"
410
+ [rounded]="action?.rounded"
411
+ [icon]="action?.icon"
412
+ [svgIcon]="action?.svgIcon"
413
+ (click)="onActionClick(action)"
414
+ >{{action?.text}}</button>
415
+ }
416
+ @if (action.type === 'spacer') {
417
+ <div class="k-spacer"></div>
418
+ }
419
+ }
420
+ </kendo-card-actions>
421
+ }
422
+ </kendo-card>
423
+ }
424
+ <kendo-textarea
425
+ [value]="promptValue ? promptValue : null"
426
+ (valueChange)="handlePromptValueChange($event)"
427
+ [rows]="initialRows"
428
+ resizable="auto"
429
+ flow="horizontal"
430
+ [placeholder]="placeholder"
431
+ [showPrefixSeparator]="true"
432
+ [selectOnFocus]="true"
433
+ [maxResizableRows]="maxRows"
434
+ (keydown)="handleTextAreaKeydown($event)"
435
+ >
436
+ <kendo-textarea-prefix>
437
+ @if (promptCommands && promptCommands.length > 0) {
438
+ <button
439
+ kendoButton
440
+ #commandMenuButton
441
+ [attr.title]="messageFor('commandsButtonTitle')"
442
+ fillMode="flat"
443
+ icon="menu"
444
+ [svgIcon]="commandMenuIcon"
445
+ (click)="onCommandButtonClick($event)"
446
+ ></button>
447
+ }
448
+ @if (enableSpeechToText) {
449
+ <button
450
+ kendoSpeechToTextButton
451
+ [attr.title]="messageFor('speechToTextButtonTitle')"
452
+ fillMode="flat"
453
+ (result)="handleSpeechResult($event)"
454
+ (start)="isListening = true"
455
+ (end)="isListening = false"
456
+ ></button>
457
+ }
458
+ </kendo-textarea-prefix>
459
+ <kendo-textarea-suffix>
460
+ <button
461
+ kendoButton
462
+ [attr.title]="messageFor('generateButtonTitle')"
463
+ fillMode="flat"
464
+ class="k-prompt-send"
465
+ [ngClass]="{ 'k-generating': streaming, 'k-active': streaming }"
466
+ (click)="handlePromptRequest()"
467
+ [disabled]="!streaming && (!promptValue?.trim() || isListening)"
468
+ [svgIcon]="streaming ? stopGenerationIcon : sendIcon"
469
+ [icon]="streaming ? 'stop-sm' : 'paper-plane'"
470
+ ></button>
471
+ </kendo-textarea-suffix>
472
+ </kendo-textarea>
473
+ </div>
448
474
  </div>
449
475
  <kendo-contextmenu
450
- #kendoContextMenu
451
- [alignToAnchor]="true"
452
- [items]="commandMenuItems"
453
- [appendTo]="appendTo"
454
- class="k-hidden"
455
- (select)="onCommandClick($event)">
476
+ #kendoContextMenu
477
+ [alignToAnchor]="true"
478
+ [items]="commandMenuItems"
479
+ [appendTo]="appendTo"
480
+ class="k-hidden"
481
+ (select)="onCommandClick($event)">
456
482
  </kendo-contextmenu>
457
- `,
483
+ `,
458
484
  standalone: true,
459
- imports: [NgClass, NgIf, NgFor, NgTemplateOutlet, LocalizedMessagesDirective, KENDO_BUTTONS, KENDO_TEXTAREA, KENDO_CONTEXTMENU, KENDO_CARD],
485
+ imports: [NgClass, NgTemplateOutlet, LocalizedMessagesDirective, KENDO_BUTTONS, KENDO_TEXTAREA, KENDO_CONTEXTMENU, KENDO_CARD],
460
486
  }]
461
487
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.LocalizationService, decorators: [{
462
488
  type: Optional
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1763645647,
14
- version: '21.1.1-develop.1',
13
+ publishDate: 1763998286,
14
+ version: '21.2.0-develop.1',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };