@progress/kendo-angular-grid 19.3.0-develop.30 → 19.3.0-develop.32

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.
@@ -1546,6 +1546,7 @@ export class GridComponent {
1546
1546
  */
1547
1547
  closeRow(index) {
1548
1548
  this.editService.close(index);
1549
+ this.isStacked && (this.navigationService.stackedCellEntered = false);
1549
1550
  }
1550
1551
  /**
1551
1552
  * Creates a new row editor ([see example]({% slug inline_editing_grid %}#toc-adding-records-1)).
@@ -15,7 +15,6 @@ const isNavigable = element => !element.disabled && (isButton(element) || isNavi
15
15
  */
16
16
  export class DefaultFocusableElement {
17
17
  renderer;
18
- ctx;
19
18
  get enabled() {
20
19
  return this.focusable && !this.focusable.disabled;
21
20
  }
@@ -24,9 +23,8 @@ export class DefaultFocusableElement {
24
23
  }
25
24
  element;
26
25
  focusable;
27
- constructor(host, renderer, ctx) {
26
+ constructor(host, renderer) {
28
27
  this.renderer = renderer;
29
- this.ctx = ctx;
30
28
  this.element = host.nativeElement;
31
29
  this.focusable = findFocusable(this.element, false) || this.element;
32
30
  }
@@ -34,17 +32,7 @@ export class DefaultFocusableElement {
34
32
  return this.canFocus() && isNavigable(this.element);
35
33
  }
36
34
  toggle(active) {
37
- if (this.ctx.grid?.isStacked) {
38
- if (active) {
39
- this.renderer.setAttribute(this.focusable, 'tabindex', '0');
40
- }
41
- else {
42
- this.renderer.removeAttribute(this.focusable, 'tabindex');
43
- }
44
- }
45
- else {
46
- this.renderer.setAttribute(this.focusable, 'tabindex', active ? '0' : '-1');
47
- }
35
+ this.renderer.setAttribute(this.focusable, 'tabIndex', active ? '0' : '-1');
48
36
  }
49
37
  focus() {
50
38
  if (this.focusable) {
@@ -70,7 +70,7 @@ export class FocusableDirective {
70
70
  }
71
71
  ngAfterViewInit() {
72
72
  if (!this.element && this.ctx.navigable) {
73
- this.element = new DefaultFocusableElement(this.hostElement, this.renderer, this.ctx);
73
+ this.element = new DefaultFocusableElement(this.hostElement, this.renderer);
74
74
  }
75
75
  if (this.group && this.element) {
76
76
  this.toggle(this.group.isActive);
@@ -230,6 +230,14 @@ export class NavigationService {
230
230
  // Timeout if focusOut doesn't fire very soon
231
231
  interval(0).pipe(take(1))))))
232
232
  .subscribe(() => this.onTabout()));
233
+ this.subs.add(this.domEvents.cellClick
234
+ .subscribe(() => {
235
+ if (this.isStackedMode) {
236
+ const stackedCells = this.activeCell.focusGroup.focusableChildren;
237
+ const currFocusedIndex = stackedCells.findIndex(el => el.hasFocus() || el.hostElement?.nativeElement === document.activeElement);
238
+ currFocusedIndex > -1 && (this.stackedFocusedCellIndex = currFocusedIndex);
239
+ }
240
+ }));
233
241
  if (this.focusableParent) {
234
242
  const element = new GridFocusableElement(this);
235
243
  this.focusableParent.registerElement(element);
@@ -678,6 +686,9 @@ export class NavigationService {
678
686
  const confirm = !args.defaultPrevented && args.keyCode === Keys.Enter && isTextInput(args.target);
679
687
  if (args.keyCode === Keys.Escape || args.keyCode === Keys.F2 || confirm) {
680
688
  if (this.tableCellEntered && args.keyCode === Keys.F2 && this.activeRow.dataRowIndex > -1) {
689
+ if (this.editService.isEditingCell()) {
690
+ return;
691
+ }
681
692
  this.zone.run(() => {
682
693
  this.editService.beginEdit(this.activeRow.dataRowIndex);
683
694
  });
@@ -854,6 +865,7 @@ export class NavigationService {
854
865
  const stackedCell = closest(target, (el) => hasClasses(el, 'k-grid-stack-cell'));
855
866
  const tableCell = closest(target, (el) => hasClasses(el, 'k-table-td'));
856
867
  const isInStackedCell = closest(target, (el) => hasClasses(el, 'k-grid-stack-content'));
868
+ const isInCommandCell = closest(target, (el) => hasClasses(el, 'k-command-cell'));
857
869
  if (!stackedCell || !tableCell) {
858
870
  return;
859
871
  }
@@ -875,7 +887,9 @@ export class NavigationService {
875
887
  this.editService.closeCell(args);
876
888
  this.activeCell.focusGroup.activate();
877
889
  this.activeCell.focusGroup.focusableChildren[this.stackedFocusedCellIndex]?.focus();
878
- args.preventDefault();
890
+ if (!isInCommandCell) {
891
+ args.preventDefault();
892
+ }
879
893
  }
880
894
  }
881
895
  stackedFocusedCellIndex = -1;
@@ -889,29 +903,24 @@ export class NavigationService {
889
903
  return;
890
904
  }
891
905
  const stackedCells = this.activeCell.focusGroup.focusableChildren;
892
- let nextIndex;
906
+ const currFocusedIndex = stackedCells.findIndex(el => el.hasFocus() || el.hostElement?.nativeElement === document.activeElement);
893
907
  if (args.shiftKey) {
894
- nextIndex = this.stackedFocusedCellIndex - 1;
895
- if (nextIndex < 0) {
896
- nextIndex = stackedCells.length - 1;
908
+ if (currFocusedIndex === 0) {
909
+ args.stopImmediatePropagation();
910
+ args.preventDefault();
911
+ }
912
+ else {
913
+ this.stackedFocusedCellIndex = currFocusedIndex - 1;
897
914
  }
898
915
  }
899
916
  else {
900
- nextIndex = this.stackedFocusedCellIndex + 1;
901
- if (nextIndex >= stackedCells.length) {
902
- nextIndex = 0;
917
+ if (currFocusedIndex === stackedCells.length - 1) {
918
+ args.stopImmediatePropagation();
919
+ args.preventDefault();
903
920
  }
904
- }
905
- let nextStackedCell = stackedCells[nextIndex];
906
- if (nextStackedCell) {
907
- if (nextStackedCell.hasFocus() || (isDocumentAvailable() && document.activeElement === nextStackedCell.hostElement.nativeElement)) {
908
- // next cell is already focused (as a focusable child of the previous one), skip to the next one
909
- nextIndex = args.shiftKey ? this.stackedFocusedCellIndex - 2 : this.stackedFocusedCellIndex + 2;
910
- nextStackedCell = stackedCells[nextIndex];
921
+ else {
922
+ this.stackedFocusedCellIndex = currFocusedIndex + 1;
911
923
  }
912
- nextStackedCell.focus();
913
- this.stackedFocusedCellIndex = nextIndex;
914
- args.preventDefault();
915
924
  }
916
925
  }
917
926
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: i1.DomEventsService }, { token: i2.PagerContextService }, { token: i3.ScrollRequestService }, { token: i4.GroupsService }, { token: i5.DetailsService }, { token: i6.FocusRoot }, { token: i7.EditService }, { token: i0.ChangeDetectorRef }, { token: i8.ContextService }, { token: i9.ColumnResizingService }, { token: i10.FocusableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1754574222,
14
- version: '19.3.0-develop.30',
13
+ publishDate: 1754579625,
14
+ version: '19.3.0-develop.32',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -223,7 +223,7 @@ export class CellComponent {
223
223
  [class.k-grid-stack-edit-cell]="isEdited(col)"
224
224
  [class.k-drag-cell]="isRowReorderColumn(col) && !isNew"
225
225
  [class.k-command-cell]="isCommand(col)"
226
- kendoGridFocusable>
226
+ [kendoGridFocusable]="!isCommand(col)">
227
227
  <div class="k-grid-stack-header">
228
228
  <ng-container *ngIf="!col.headerTemplateRef; else headerTemplate">
229
229
  {{col.displayTitle}}
@@ -431,7 +431,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
431
431
  [class.k-grid-stack-edit-cell]="isEdited(col)"
432
432
  [class.k-drag-cell]="isRowReorderColumn(col) && !isNew"
433
433
  [class.k-command-cell]="isCommand(col)"
434
- kendoGridFocusable>
434
+ [kendoGridFocusable]="!isCommand(col)">
435
435
  <div class="k-grid-stack-header">
436
436
  <ng-container *ngIf="!col.headerTemplateRef; else headerTemplate">
437
437
  {{col.displayTitle}}
@@ -7,7 +7,7 @@ import { AIPromptComponent, OutputViewComponent, PromptViewComponent, AIPromptCu
7
7
  import { HttpClient, HttpRequest } from '@angular/common/http';
8
8
  import { ContextService } from './../../../../common/provider.service';
9
9
  import { ColumnInfoService } from './../../../../common/column-info.service';
10
- import { convertDateStringsInFilter } from './utils';
10
+ import { convertDateStringsInFilter, GridToolbarAIResponseSuccessEvent, GridToolbarAIResponseErrorEvent } from './utils';
11
11
  import { NgIf } from '@angular/common';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@angular/common/http";
@@ -110,6 +110,12 @@ export class AiAssistantComponent {
110
110
  }
111
111
  processResponse(response) {
112
112
  const responseBody = response.body;
113
+ const responseSuccessEvent = new GridToolbarAIResponseSuccessEvent(response);
114
+ this.aiToolDirective.responseSuccess.emit(responseSuccessEvent);
115
+ if (responseSuccessEvent.isDefaultPrevented()) {
116
+ this.deleteLoadingOutput();
117
+ return;
118
+ }
113
119
  const isFilterable = Boolean(this.ctx.grid.filterable);
114
120
  const isSortable = Boolean(this.ctx.grid.sortable);
115
121
  const isGroupable = Boolean(this.ctx.grid.groupable);
@@ -132,21 +138,25 @@ export class AiAssistantComponent {
132
138
  prompt: this.lastMessage,
133
139
  output: responseContentStart.concat(responseContentBody).join(''),
134
140
  };
135
- this.deleteDummyLoadingOutput();
141
+ this.deleteLoadingOutput();
136
142
  this.promptOutputs.unshift(output);
137
- this.aiToolDirective.responseSuccess.emit(response);
138
143
  }
139
144
  handleError(error) {
145
+ const responseErrorEvent = new GridToolbarAIResponseErrorEvent(error);
146
+ this.aiToolDirective.responseError.emit(responseErrorEvent);
147
+ if (responseErrorEvent.isDefaultPrevented()) {
148
+ this.deleteLoadingOutput();
149
+ return;
150
+ }
140
151
  const output = {
141
152
  id: this.idCounter++,
142
153
  prompt: this.lastMessage,
143
154
  output: error.message
144
155
  };
145
- this.deleteDummyLoadingOutput();
156
+ this.deleteLoadingOutput();
146
157
  this.promptOutputs.unshift(output);
147
- this.aiToolDirective.responseError.emit(error);
148
158
  }
149
- deleteDummyLoadingOutput() {
159
+ deleteLoadingOutput() {
150
160
  if (this.promptOutputs[0].id === this.loadingOutput.id) {
151
161
  this.promptOutputs.splice(0, 1);
152
162
  }
@@ -80,12 +80,12 @@ export class AIAssistantToolbarDirective extends ToolbarToolBase {
80
80
  cancelRequest = new EventEmitter();
81
81
  /**
82
82
  * Emits an event when the AI Assistant tool completes the AI request successfully.
83
- * The event contains the response from the AI service.
83
+ * The event contains the response from the AI service and is preventable to allow stopping the default response handling.
84
84
  */
85
85
  responseSuccess = new EventEmitter();
86
86
  /**
87
87
  * Emits an event when the AI Assistant tool completes the AI request with an error.
88
- * The event contains the response from the AI service.
88
+ * The event contains the error response from the AI service and is preventable to allow stopping the default error handling.
89
89
  */
90
90
  responseError = new EventEmitter();
91
91
  /**
@@ -3,6 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { HttpHeaders } from "@angular/common/http";
6
+ import { PreventableEvent } from "@progress/kendo-angular-common";
6
7
  /**
7
8
  * @hidden
8
9
  */
@@ -45,3 +46,29 @@ export const isDateField = (fieldName, columns) => {
45
46
  const column = columns.find((col) => col.field === fieldName);
46
47
  return column?.filter === 'date' || column?.editor === 'date';
47
48
  };
49
+ /**
50
+ * Represents the event data when the AI Assistant request completes successfully.
51
+ */
52
+ export class GridToolbarAIResponseSuccessEvent extends PreventableEvent {
53
+ /**
54
+ * The HTTP response from the AI service.
55
+ */
56
+ response;
57
+ constructor(response) {
58
+ super();
59
+ this.response = response;
60
+ }
61
+ }
62
+ /**
63
+ * Represents the event data when the AI Assistant request completes with an error.
64
+ */
65
+ export class GridToolbarAIResponseErrorEvent extends PreventableEvent {
66
+ /**
67
+ * The HTTP error response from the AI service.
68
+ */
69
+ error;
70
+ constructor(error) {
71
+ super();
72
+ this.error = error;
73
+ }
74
+ }
@@ -6,7 +6,7 @@ import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Injectable, SecurityContext, InjectionToken, Optional, Inject, Directive, SkipSelf, Input, isDevMode, QueryList, Component, ContentChildren, ContentChild, forwardRef, Host, Output, HostBinding, Pipe, TemplateRef, ChangeDetectionStrategy, ViewChildren, ViewChild, Self, NgZone, HostListener, ElementRef, ViewContainerRef, ViewEncapsulation, inject, Injector, NgModule } from '@angular/core';
7
7
  import { merge, of, Subject, zip as zip$1, from, Subscription, interval, fromEvent, Observable, BehaviorSubject } from 'rxjs';
8
8
  import * as i1$3 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, closestInScope as closestInScope$1, isFocusable as isFocusable$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, PreventableEvent as PreventableEvent$1, ResizeBatchService } from '@progress/kendo-angular-common';
9
+ import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, closestInScope as closestInScope$1, isFocusable as isFocusable$1, PreventableEvent as PreventableEvent$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, ResizeBatchService } from '@progress/kendo-angular-common';
10
10
  import * as i1 from '@angular/platform-browser';
11
11
  import * as i1$1 from '@progress/kendo-angular-icons';
12
12
  import { IconWrapperComponent, IconsService, KENDO_ICONS } from '@progress/kendo-angular-icons';
@@ -758,7 +758,6 @@ const isNavigable = element => !element.disabled && (isButton(element) || isNavi
758
758
  */
759
759
  class DefaultFocusableElement {
760
760
  renderer;
761
- ctx;
762
761
  get enabled() {
763
762
  return this.focusable && !this.focusable.disabled;
764
763
  }
@@ -767,9 +766,8 @@ class DefaultFocusableElement {
767
766
  }
768
767
  element;
769
768
  focusable;
770
- constructor(host, renderer, ctx) {
769
+ constructor(host, renderer) {
771
770
  this.renderer = renderer;
772
- this.ctx = ctx;
773
771
  this.element = host.nativeElement;
774
772
  this.focusable = findFocusable(this.element, false) || this.element;
775
773
  }
@@ -777,17 +775,7 @@ class DefaultFocusableElement {
777
775
  return this.canFocus() && isNavigable(this.element);
778
776
  }
779
777
  toggle(active) {
780
- if (this.ctx.grid?.isStacked) {
781
- if (active) {
782
- this.renderer.setAttribute(this.focusable, 'tabindex', '0');
783
- }
784
- else {
785
- this.renderer.removeAttribute(this.focusable, 'tabindex');
786
- }
787
- }
788
- else {
789
- this.renderer.setAttribute(this.focusable, 'tabindex', active ? '0' : '-1');
790
- }
778
+ this.renderer.setAttribute(this.focusable, 'tabIndex', active ? '0' : '-1');
791
779
  }
792
780
  focus() {
793
781
  if (this.focusable) {
@@ -956,7 +944,7 @@ class FocusableDirective {
956
944
  }
957
945
  ngAfterViewInit() {
958
946
  if (!this.element && this.ctx.navigable) {
959
- this.element = new DefaultFocusableElement(this.hostElement, this.renderer, this.ctx);
947
+ this.element = new DefaultFocusableElement(this.hostElement, this.renderer);
960
948
  }
961
949
  if (this.group && this.element) {
962
950
  this.toggle(this.group.isActive);
@@ -3590,6 +3578,14 @@ class NavigationService {
3590
3578
  // Timeout if focusOut doesn't fire very soon
3591
3579
  interval(0).pipe(take(1))))))
3592
3580
  .subscribe(() => this.onTabout()));
3581
+ this.subs.add(this.domEvents.cellClick
3582
+ .subscribe(() => {
3583
+ if (this.isStackedMode) {
3584
+ const stackedCells = this.activeCell.focusGroup.focusableChildren;
3585
+ const currFocusedIndex = stackedCells.findIndex(el => el.hasFocus() || el.hostElement?.nativeElement === document.activeElement);
3586
+ currFocusedIndex > -1 && (this.stackedFocusedCellIndex = currFocusedIndex);
3587
+ }
3588
+ }));
3593
3589
  if (this.focusableParent) {
3594
3590
  const element = new GridFocusableElement(this);
3595
3591
  this.focusableParent.registerElement(element);
@@ -4038,6 +4034,9 @@ class NavigationService {
4038
4034
  const confirm = !args.defaultPrevented && args.keyCode === Keys.Enter && isTextInput(args.target);
4039
4035
  if (args.keyCode === Keys.Escape || args.keyCode === Keys.F2 || confirm) {
4040
4036
  if (this.tableCellEntered && args.keyCode === Keys.F2 && this.activeRow.dataRowIndex > -1) {
4037
+ if (this.editService.isEditingCell()) {
4038
+ return;
4039
+ }
4041
4040
  this.zone.run(() => {
4042
4041
  this.editService.beginEdit(this.activeRow.dataRowIndex);
4043
4042
  });
@@ -4214,6 +4213,7 @@ class NavigationService {
4214
4213
  const stackedCell = closest(target, (el) => hasClasses$1(el, 'k-grid-stack-cell'));
4215
4214
  const tableCell = closest(target, (el) => hasClasses$1(el, 'k-table-td'));
4216
4215
  const isInStackedCell = closest(target, (el) => hasClasses$1(el, 'k-grid-stack-content'));
4216
+ const isInCommandCell = closest(target, (el) => hasClasses$1(el, 'k-command-cell'));
4217
4217
  if (!stackedCell || !tableCell) {
4218
4218
  return;
4219
4219
  }
@@ -4235,7 +4235,9 @@ class NavigationService {
4235
4235
  this.editService.closeCell(args);
4236
4236
  this.activeCell.focusGroup.activate();
4237
4237
  this.activeCell.focusGroup.focusableChildren[this.stackedFocusedCellIndex]?.focus();
4238
- args.preventDefault();
4238
+ if (!isInCommandCell) {
4239
+ args.preventDefault();
4240
+ }
4239
4241
  }
4240
4242
  }
4241
4243
  stackedFocusedCellIndex = -1;
@@ -4249,29 +4251,24 @@ class NavigationService {
4249
4251
  return;
4250
4252
  }
4251
4253
  const stackedCells = this.activeCell.focusGroup.focusableChildren;
4252
- let nextIndex;
4254
+ const currFocusedIndex = stackedCells.findIndex(el => el.hasFocus() || el.hostElement?.nativeElement === document.activeElement);
4253
4255
  if (args.shiftKey) {
4254
- nextIndex = this.stackedFocusedCellIndex - 1;
4255
- if (nextIndex < 0) {
4256
- nextIndex = stackedCells.length - 1;
4256
+ if (currFocusedIndex === 0) {
4257
+ args.stopImmediatePropagation();
4258
+ args.preventDefault();
4259
+ }
4260
+ else {
4261
+ this.stackedFocusedCellIndex = currFocusedIndex - 1;
4257
4262
  }
4258
4263
  }
4259
4264
  else {
4260
- nextIndex = this.stackedFocusedCellIndex + 1;
4261
- if (nextIndex >= stackedCells.length) {
4262
- nextIndex = 0;
4265
+ if (currFocusedIndex === stackedCells.length - 1) {
4266
+ args.stopImmediatePropagation();
4267
+ args.preventDefault();
4263
4268
  }
4264
- }
4265
- let nextStackedCell = stackedCells[nextIndex];
4266
- if (nextStackedCell) {
4267
- if (nextStackedCell.hasFocus() || (isDocumentAvailable() && document.activeElement === nextStackedCell.hostElement.nativeElement)) {
4268
- // next cell is already focused (as a focusable child of the previous one), skip to the next one
4269
- nextIndex = args.shiftKey ? this.stackedFocusedCellIndex - 2 : this.stackedFocusedCellIndex + 2;
4270
- nextStackedCell = stackedCells[nextIndex];
4269
+ else {
4270
+ this.stackedFocusedCellIndex = currFocusedIndex + 1;
4271
4271
  }
4272
- nextStackedCell.focus();
4273
- this.stackedFocusedCellIndex = nextIndex;
4274
- args.preventDefault();
4275
4272
  }
4276
4273
  }
4277
4274
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: DomEventsService }, { token: i53.PagerContextService }, { token: ScrollRequestService }, { token: GroupsService }, { token: DetailsService }, { token: FocusRoot }, { token: EditService }, { token: i0.ChangeDetectorRef }, { token: ContextService }, { token: ColumnResizingService }, { token: FocusableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -19716,7 +19713,7 @@ class CellComponent {
19716
19713
  [class.k-grid-stack-edit-cell]="isEdited(col)"
19717
19714
  [class.k-drag-cell]="isRowReorderColumn(col) && !isNew"
19718
19715
  [class.k-command-cell]="isCommand(col)"
19719
- kendoGridFocusable>
19716
+ [kendoGridFocusable]="!isCommand(col)">
19720
19717
  <div class="k-grid-stack-header">
19721
19718
  <ng-container *ngIf="!col.headerTemplateRef; else headerTemplate">
19722
19719
  {{col.displayTitle}}
@@ -19924,7 +19921,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19924
19921
  [class.k-grid-stack-edit-cell]="isEdited(col)"
19925
19922
  [class.k-drag-cell]="isRowReorderColumn(col) && !isNew"
19926
19923
  [class.k-command-cell]="isCommand(col)"
19927
- kendoGridFocusable>
19924
+ [kendoGridFocusable]="!isCommand(col)">
19928
19925
  <div class="k-grid-stack-header">
19929
19926
  <ng-container *ngIf="!col.headerTemplateRef; else headerTemplate">
19930
19927
  {{col.displayTitle}}
@@ -21998,8 +21995,8 @@ const packageMetadata = {
21998
21995
  productName: 'Kendo UI for Angular',
21999
21996
  productCode: 'KENDOUIANGULAR',
22000
21997
  productCodes: ['KENDOUIANGULAR'],
22001
- publishDate: 1754574222,
22002
- version: '19.3.0-develop.30',
21998
+ publishDate: 1754579625,
21999
+ version: '19.3.0-develop.32',
22003
22000
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
22004
22001
  };
22005
22002
 
@@ -28621,6 +28618,32 @@ const isDateField = (fieldName, columns) => {
28621
28618
  const column = columns.find((col) => col.field === fieldName);
28622
28619
  return column?.filter === 'date' || column?.editor === 'date';
28623
28620
  };
28621
+ /**
28622
+ * Represents the event data when the AI Assistant request completes successfully.
28623
+ */
28624
+ class GridToolbarAIResponseSuccessEvent extends PreventableEvent$1 {
28625
+ /**
28626
+ * The HTTP response from the AI service.
28627
+ */
28628
+ response;
28629
+ constructor(response) {
28630
+ super();
28631
+ this.response = response;
28632
+ }
28633
+ }
28634
+ /**
28635
+ * Represents the event data when the AI Assistant request completes with an error.
28636
+ */
28637
+ class GridToolbarAIResponseErrorEvent extends PreventableEvent$1 {
28638
+ /**
28639
+ * The HTTP error response from the AI service.
28640
+ */
28641
+ error;
28642
+ constructor(error) {
28643
+ super();
28644
+ this.error = error;
28645
+ }
28646
+ }
28624
28647
 
28625
28648
  /**
28626
28649
  * @hidden
@@ -28719,6 +28742,12 @@ class AiAssistantComponent {
28719
28742
  }
28720
28743
  processResponse(response) {
28721
28744
  const responseBody = response.body;
28745
+ const responseSuccessEvent = new GridToolbarAIResponseSuccessEvent(response);
28746
+ this.aiToolDirective.responseSuccess.emit(responseSuccessEvent);
28747
+ if (responseSuccessEvent.isDefaultPrevented()) {
28748
+ this.deleteLoadingOutput();
28749
+ return;
28750
+ }
28722
28751
  const isFilterable = Boolean(this.ctx.grid.filterable);
28723
28752
  const isSortable = Boolean(this.ctx.grid.sortable);
28724
28753
  const isGroupable = Boolean(this.ctx.grid.groupable);
@@ -28741,21 +28770,25 @@ class AiAssistantComponent {
28741
28770
  prompt: this.lastMessage,
28742
28771
  output: responseContentStart.concat(responseContentBody).join(''),
28743
28772
  };
28744
- this.deleteDummyLoadingOutput();
28773
+ this.deleteLoadingOutput();
28745
28774
  this.promptOutputs.unshift(output);
28746
- this.aiToolDirective.responseSuccess.emit(response);
28747
28775
  }
28748
28776
  handleError(error) {
28777
+ const responseErrorEvent = new GridToolbarAIResponseErrorEvent(error);
28778
+ this.aiToolDirective.responseError.emit(responseErrorEvent);
28779
+ if (responseErrorEvent.isDefaultPrevented()) {
28780
+ this.deleteLoadingOutput();
28781
+ return;
28782
+ }
28749
28783
  const output = {
28750
28784
  id: this.idCounter++,
28751
28785
  prompt: this.lastMessage,
28752
28786
  output: error.message
28753
28787
  };
28754
- this.deleteDummyLoadingOutput();
28788
+ this.deleteLoadingOutput();
28755
28789
  this.promptOutputs.unshift(output);
28756
- this.aiToolDirective.responseError.emit(error);
28757
28790
  }
28758
- deleteDummyLoadingOutput() {
28791
+ deleteLoadingOutput() {
28759
28792
  if (this.promptOutputs[0].id === this.loadingOutput.id) {
28760
28793
  this.promptOutputs.splice(0, 1);
28761
28794
  }
@@ -28960,12 +28993,12 @@ class AIAssistantToolbarDirective extends ToolbarToolBase {
28960
28993
  cancelRequest = new EventEmitter();
28961
28994
  /**
28962
28995
  * Emits an event when the AI Assistant tool completes the AI request successfully.
28963
- * The event contains the response from the AI service.
28996
+ * The event contains the response from the AI service and is preventable to allow stopping the default response handling.
28964
28997
  */
28965
28998
  responseSuccess = new EventEmitter();
28966
28999
  /**
28967
29000
  * Emits an event when the AI Assistant tool completes the AI request with an error.
28968
- * The event contains the response from the AI service.
29001
+ * The event contains the error response from the AI service and is preventable to allow stopping the default error handling.
28969
29002
  */
28970
29003
  responseError = new EventEmitter();
28971
29004
  /**
@@ -30564,6 +30597,7 @@ class GridComponent {
30564
30597
  */
30565
30598
  closeRow(index) {
30566
30599
  this.editService.close(index);
30600
+ this.isStacked && (this.navigationService.stackedCellEntered = false);
30567
30601
  }
30568
30602
  /**
30569
30603
  * Creates a new row editor ([see example]({% slug inline_editing_grid %}#toc-adding-records-1)).
@@ -37636,5 +37670,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
37636
37670
  * Generated bundle index. Do not edit.
37637
37671
  */
37638
37672
 
37639
- export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupBindingDirective, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, convertDateStringsInFilter, count, defaultTrackBy, hasFilterMenu, hasFilterRow, isDateField, isFilterable, slice };
37673
+ export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarAIResponseErrorEvent, GridToolbarAIResponseSuccessEvent, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupBindingDirective, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, convertDateStringsInFilter, count, defaultTrackBy, hasFilterMenu, hasFilterRow, isDateField, isFilterable, slice };
37640
37674
 
@@ -4,18 +4,16 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { ElementRef, Renderer2 } from '@angular/core';
6
6
  import { FocusableElement } from './focusable-element.interface';
7
- import { ContextService } from '../common/provider.service';
8
7
  /**
9
8
  * @hidden
10
9
  */
11
10
  export declare class DefaultFocusableElement implements FocusableElement {
12
11
  private renderer;
13
- private ctx;
14
12
  private get enabled();
15
13
  private get visible();
16
14
  private element;
17
15
  private focusable;
18
- constructor(host: ElementRef, renderer: Renderer2, ctx: ContextService);
16
+ constructor(host: ElementRef, renderer: Renderer2);
19
17
  isNavigable(): boolean;
20
18
  toggle(active: boolean): void;
21
19
  focus(): void;
@@ -126,7 +126,7 @@ export declare class NavigationService implements OnDestroy {
126
126
  private calculateRowspanOffset;
127
127
  private get isStackedMode();
128
128
  private handleStackedKeydown;
129
- private stackedFocusedCellIndex;
129
+ stackedFocusedCellIndex: number;
130
130
  tableCellEntered: boolean;
131
131
  stackedCellEntered: boolean;
132
132
  private handleStackedTabNavigation;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-grid",
3
- "version": "19.3.0-develop.30",
3
+ "version": "19.3.0-develop.32",
4
4
  "description": "Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -26,7 +26,7 @@
26
26
  "package": {
27
27
  "productName": "Kendo UI for Angular",
28
28
  "productCode": "KENDOUIANGULAR",
29
- "publishDate": 1754574222,
29
+ "publishDate": 1754579625,
30
30
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
31
31
  }
32
32
  },
@@ -39,29 +39,29 @@
39
39
  "@progress/kendo-data-query": "^1.0.0",
40
40
  "@progress/kendo-drawing": "^1.21.0",
41
41
  "@progress/kendo-licensing": "^1.7.0",
42
- "@progress/kendo-angular-buttons": "19.3.0-develop.30",
43
- "@progress/kendo-angular-common": "19.3.0-develop.30",
44
- "@progress/kendo-angular-dateinputs": "19.3.0-develop.30",
45
- "@progress/kendo-angular-layout": "19.3.0-develop.30",
46
- "@progress/kendo-angular-navigation": "19.3.0-develop.30",
47
- "@progress/kendo-angular-dropdowns": "19.3.0-develop.30",
48
- "@progress/kendo-angular-excel-export": "19.3.0-develop.30",
49
- "@progress/kendo-angular-icons": "19.3.0-develop.30",
50
- "@progress/kendo-angular-inputs": "19.3.0-develop.30",
51
- "@progress/kendo-angular-conversational-ui": "19.3.0-develop.30",
52
- "@progress/kendo-angular-intl": "19.3.0-develop.30",
53
- "@progress/kendo-angular-l10n": "19.3.0-develop.30",
54
- "@progress/kendo-angular-label": "19.3.0-develop.30",
55
- "@progress/kendo-angular-pager": "19.3.0-develop.30",
56
- "@progress/kendo-angular-pdf-export": "19.3.0-develop.30",
57
- "@progress/kendo-angular-popup": "19.3.0-develop.30",
58
- "@progress/kendo-angular-toolbar": "19.3.0-develop.30",
59
- "@progress/kendo-angular-utils": "19.3.0-develop.30",
42
+ "@progress/kendo-angular-buttons": "19.3.0-develop.32",
43
+ "@progress/kendo-angular-common": "19.3.0-develop.32",
44
+ "@progress/kendo-angular-dateinputs": "19.3.0-develop.32",
45
+ "@progress/kendo-angular-layout": "19.3.0-develop.32",
46
+ "@progress/kendo-angular-navigation": "19.3.0-develop.32",
47
+ "@progress/kendo-angular-dropdowns": "19.3.0-develop.32",
48
+ "@progress/kendo-angular-excel-export": "19.3.0-develop.32",
49
+ "@progress/kendo-angular-icons": "19.3.0-develop.32",
50
+ "@progress/kendo-angular-inputs": "19.3.0-develop.32",
51
+ "@progress/kendo-angular-conversational-ui": "19.3.0-develop.32",
52
+ "@progress/kendo-angular-intl": "19.3.0-develop.32",
53
+ "@progress/kendo-angular-l10n": "19.3.0-develop.32",
54
+ "@progress/kendo-angular-label": "19.3.0-develop.32",
55
+ "@progress/kendo-angular-pager": "19.3.0-develop.32",
56
+ "@progress/kendo-angular-pdf-export": "19.3.0-develop.32",
57
+ "@progress/kendo-angular-popup": "19.3.0-develop.32",
58
+ "@progress/kendo-angular-toolbar": "19.3.0-develop.32",
59
+ "@progress/kendo-angular-utils": "19.3.0-develop.32",
60
60
  "rxjs": "^6.5.3 || ^7.0.0"
61
61
  },
62
62
  "dependencies": {
63
63
  "tslib": "^2.3.1",
64
- "@progress/kendo-angular-schematics": "19.3.0-develop.30",
64
+ "@progress/kendo-angular-schematics": "19.3.0-develop.32",
65
65
  "@progress/kendo-common": "^1.0.1",
66
66
  "@progress/kendo-file-saver": "^1.0.0"
67
67
  },
@@ -41,7 +41,7 @@ export declare class AiAssistantComponent implements OnDestroy, AfterViewInit {
41
41
  private sendPromptRequest;
42
42
  private processResponse;
43
43
  private handleError;
44
- private deleteDummyLoadingOutput;
44
+ private deleteLoadingOutput;
45
45
  private unsubscribeCurrentRequest;
46
46
  private processArrayResponse;
47
47
  private processFilterResponse;
@@ -8,8 +8,7 @@ import { SVGIcon } from '@progress/kendo-svg-icons';
8
8
  import { ContextService } from '../../../../common/provider.service';
9
9
  import { ToolbarToolBase } from '../../../../common/toolbar-tool-base.directive';
10
10
  import { WindowService } from '@progress/kendo-angular-dialog';
11
- import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
12
- import { GridToolbarAIOpenEvent, GridToolbarAIPromptSettings, GridToolbarAIWindowSettings, GridToolbarAIRequestData, GridToolbarAIRequestResponse, GridToolbarAIRequestOptions } from './utils';
11
+ import { GridToolbarAIOpenEvent, GridToolbarAIPromptSettings, GridToolbarAIWindowSettings, GridToolbarAIRequestData, GridToolbarAIRequestOptions, GridToolbarAIResponseSuccessEvent, GridToolbarAIResponseErrorEvent } from './utils';
13
12
  import * as i0 from "@angular/core";
14
13
  /**
15
14
  * Represents an AI Assistant tool of the Grid.
@@ -76,14 +75,14 @@ export declare class AIAssistantToolbarDirective extends ToolbarToolBase impleme
76
75
  cancelRequest: EventEmitter<undefined>;
77
76
  /**
78
77
  * Emits an event when the AI Assistant tool completes the AI request successfully.
79
- * The event contains the response from the AI service.
78
+ * The event contains the response from the AI service and is preventable to allow stopping the default response handling.
80
79
  */
81
- responseSuccess: EventEmitter<HttpResponse<GridToolbarAIRequestResponse>>;
80
+ responseSuccess: EventEmitter<GridToolbarAIResponseSuccessEvent>;
82
81
  /**
83
82
  * Emits an event when the AI Assistant tool completes the AI request with an error.
84
- * The event contains the response from the AI service.
83
+ * The event contains the error response from the AI service and is preventable to allow stopping the default error handling.
85
84
  */
86
- responseError: EventEmitter<HttpErrorResponse>;
85
+ responseError: EventEmitter<GridToolbarAIResponseErrorEvent>;
87
86
  /**
88
87
  * Emits an event when the AI Assistant tool closes.
89
88
  */
@@ -2,7 +2,8 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { HttpHeaders } from "@angular/common/http";
5
+ import { HttpHeaders, HttpResponse, HttpErrorResponse } from "@angular/common/http";
6
+ import { PreventableEvent } from "@progress/kendo-angular-common";
6
7
  import { AIPromptComponent, AIPromptSettings } from "@progress/kendo-angular-conversational-ui";
7
8
  import { WindowComponent, WindowSettings } from "@progress/kendo-angular-dialog";
8
9
  import { CompositeFilterDescriptor, FilterDescriptor, GroupDescriptor, SortDescriptor } from "@progress/kendo-data-query";
@@ -108,3 +109,23 @@ export declare const convertDateStringsInFilter: (filter: any, columns: any[]) =
108
109
  * @hidden
109
110
  */
110
111
  export declare const isDateField: (fieldName: string, columns: any[]) => boolean;
112
+ /**
113
+ * Represents the event data when the AI Assistant request completes successfully.
114
+ */
115
+ export declare class GridToolbarAIResponseSuccessEvent extends PreventableEvent {
116
+ /**
117
+ * The HTTP response from the AI service.
118
+ */
119
+ response: HttpResponse<GridToolbarAIRequestResponse>;
120
+ constructor(response: HttpResponse<GridToolbarAIRequestResponse>);
121
+ }
122
+ /**
123
+ * Represents the event data when the AI Assistant request completes with an error.
124
+ */
125
+ export declare class GridToolbarAIResponseErrorEvent extends PreventableEvent {
126
+ /**
127
+ * The HTTP error response from the AI service.
128
+ */
129
+ error: HttpErrorResponse;
130
+ constructor(error: HttpErrorResponse);
131
+ }
@@ -4,14 +4,14 @@ const schematics_1 = require("@angular-devkit/schematics");
4
4
  function default_1(options) {
5
5
  const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'GridModule', package: 'grid', peerDependencies: {
6
6
  // peer deps of the dropdowns
7
- '@progress/kendo-angular-treeview': '19.3.0-develop.30',
8
- '@progress/kendo-angular-navigation': '19.3.0-develop.30',
7
+ '@progress/kendo-angular-treeview': '19.3.0-develop.32',
8
+ '@progress/kendo-angular-navigation': '19.3.0-develop.32',
9
9
  // peer dependency of kendo-angular-inputs
10
- '@progress/kendo-angular-dialog': '19.3.0-develop.30',
10
+ '@progress/kendo-angular-dialog': '19.3.0-develop.32',
11
11
  // peer dependency of kendo-angular-icons
12
12
  '@progress/kendo-svg-icons': '^4.0.0',
13
13
  // peer dependency of kendo-angular-layout
14
- '@progress/kendo-angular-progressbar': '19.3.0-develop.30'
14
+ '@progress/kendo-angular-progressbar': '19.3.0-develop.32'
15
15
  } });
16
16
  return (0, schematics_1.externalSchematic)('@progress/kendo-angular-schematics', 'ng-add', finalOptions);
17
17
  }