@progress/kendo-angular-grid 20.1.0-develop.5 → 20.1.0-develop.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/column-menu/column-list.component.d.ts +0 -2
  2. package/columns/command-column.component.d.ts +1 -1
  3. package/columns/span-column.component.d.ts +1 -1
  4. package/editing/cancel-command.directive.d.ts +1 -1
  5. package/editing/edit-row-options.interface.d.ts +1 -1
  6. package/editing/edit-template.directive.d.ts +1 -1
  7. package/editing/remove-command.directive.d.ts +1 -1
  8. package/editing/save-command.directive.d.ts +1 -1
  9. package/editing-directives/edit-service.interface.d.ts +2 -2
  10. package/editing-directives/external-editing.directive.d.ts +1 -1
  11. package/editing-directives/in-cell-editing.directive.d.ts +1 -1
  12. package/editing-directives/reactive-editing.directive.d.ts +1 -1
  13. package/editing-directives/template-editing.directive.d.ts +1 -1
  14. package/esm2022/column-menu/column-list-kb-nav.service.mjs +1 -1
  15. package/esm2022/column-menu/column-list.component.mjs +7 -43
  16. package/esm2022/column-menu/column-menu-container.component.mjs +10 -1
  17. package/esm2022/column-menu/column-menu.component.mjs +7 -1
  18. package/esm2022/columns/command-column.component.mjs +1 -1
  19. package/esm2022/columns/span-column.component.mjs +1 -1
  20. package/esm2022/editing/cancel-command.directive.mjs +1 -1
  21. package/esm2022/editing/edit-template.directive.mjs +1 -1
  22. package/esm2022/editing/remove-command.directive.mjs +1 -1
  23. package/esm2022/editing/save-command.directive.mjs +1 -1
  24. package/esm2022/editing-directives/external-editing.directive.mjs +1 -1
  25. package/esm2022/editing-directives/in-cell-editing.directive.mjs +1 -1
  26. package/esm2022/editing-directives/reactive-editing.directive.mjs +1 -1
  27. package/esm2022/editing-directives/template-editing.directive.mjs +1 -1
  28. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +2 -2
  29. package/esm2022/filtering/menu/filter-menu.component.mjs +7 -1
  30. package/esm2022/navigation/logical-cell.directive.mjs +8 -2
  31. package/esm2022/navigation/navigation.service.mjs +1 -0
  32. package/esm2022/package-metadata.mjs +2 -2
  33. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +1 -1
  34. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +1 -1
  35. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +2 -2
  36. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +1 -1
  37. package/fesm2022/progress-kendo-angular-grid.mjs +58 -67
  38. package/navigation/navigation.service.d.ts +1 -0
  39. package/package.json +21 -21
  40. package/schematics/ngAdd/index.js +4 -4
@@ -58,7 +58,6 @@ export declare class ColumnListComponent implements OnInit, OnDestroy {
58
58
  ngOnInit(): void;
59
59
  ngAfterViewInit(): void;
60
60
  ngOnChanges(changes: SimpleChanges): void;
61
- onSelectAllClick(e: any): void;
62
61
  onSelectAllCheckboxChange(checkedState: any): void;
63
62
  ngOnDestroy(): void;
64
63
  cancelChanges(): void;
@@ -70,7 +69,6 @@ export declare class ColumnListComponent implements OnInit, OnDestroy {
70
69
  private disableFirstUnlockedCheckedCheckbox;
71
70
  private enableLastDisabledColumn;
72
71
  private setDisabledState;
73
- checkBoxClick(e: any): void;
74
72
  onCheckboxChange(checkedState: any, column: any, _index: number): void;
75
73
  private setTabindex;
76
74
  static ɵfac: i0.ɵɵFactoryDeclaration<ColumnListComponent, [null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
@@ -10,7 +10,7 @@ import { CellRowspanFn } from './cell-rowspan';
10
10
  import * as i0 from "@angular/core";
11
11
  /**
12
12
  * Represents the command columns of the Grid. Define the content of the column inside an `<ng-template>` tag.
13
- * For more information and examples, see the [Command Column Directives](slug:editing_directives_grid#toc-command-column-directives) article.
13
+ * For more information and examples, see the [Editing Action Buttons](slug:basics_editing_grid#editing-action-buttons) article.
14
14
  *
15
15
  * @example
16
16
  * ```html
@@ -74,7 +74,7 @@ export declare class SpanColumnComponent extends ColumnBase {
74
74
  includeInChooser: boolean;
75
75
  /**
76
76
  * Sets whether the edit template of the column is rendered.
77
- * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_reactive_editing_grid)).
77
+ * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
78
78
  * @default false
79
79
  */
80
80
  set editable(value: boolean);
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  /**
12
12
  * Represents the `cancel` command of the Grid. Apply this directive to any `button`
13
13
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
14
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
14
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
15
15
  *
16
16
  * When a button with this directive is clicked, the
17
17
  * [`cancel`]({% slug api_grid_gridcomponent %}#toc-cancel) event
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  /**
6
- * Provides additional options for the [`editRow`]({% slug api_grid_gridcomponent %}#toc-editrow) method. [See example]({% slug editing_rowclick_grid %}#toc-managing-focus).
6
+ * Provides additional options for the [`editRow`]({% slug api_grid_gridcomponent %}#toc-editrow) method. [See example](slug:inline_editing_grid#managing-focus).
7
7
  *
8
8
  * @example
9
9
  * ```typescript
@@ -5,7 +5,7 @@
5
5
  import { TemplateRef } from '@angular/core';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
- * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_reactive_editing_grid#toc-setting-up-custom-inputs)).
8
+ * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
9
9
  * Place an `<ng-template>` tag with the `kendoGridEditTemplate` directive inside a `<kendo-grid-column>` tag to define the template.
10
10
  *
11
11
  * The template context includes:
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  /**
12
12
  * Represents the `remove` command of the Grid. Apply this directive to any `button` element
13
13
  * inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
14
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
14
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
15
15
  * When you click the button with this directive, the
16
16
  * [`remove`]({% slug api_grid_gridcomponent %}#toc-remove) event fires.
17
17
  * The button with `kendoGridRemoveCommand` is automatically hidden when the row is in edit mode.
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  /**
12
12
  * Represents the `save` command of the Grid. Apply this directive to any `button`
13
13
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
14
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
14
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
15
15
  * When you click the button with this directive, the
16
16
  * [`save`]({% slug api_grid_gridcomponent %}#toc-save) event fires.
17
17
  * The button with `kendoGridSaveCommand` is automatically hidden when the row is not in edit mode.
@@ -5,8 +5,8 @@
5
5
  /**
6
6
  * The interface which must be extended when creating custom edit service.
7
7
  * This interface defines the methods that a custom editing service should implement to handle create, update, and remove operations on grid items.
8
- * Set the custom edit service to the `editService` input of the respective editing directive.
9
- * [See exampe](slug:editing_directives_grid#toc-custom-editing-service).
8
+ * Set the custom edit service to the `editService` input of the respective editing directive
9
+ * [See example](slug:custom_editing_service_grid).
10
10
  */
11
11
  export interface EditService {
12
12
  /**
@@ -13,7 +13,7 @@ import { AdaptiveGridService } from '../common/adaptiveness.service';
13
13
  import * as i0 from "@angular/core";
14
14
  /**
15
15
  * Represents the Kendo UI Grid external editing directive. The directive manages editing operations in the Grid when using the
16
- * External Form ([see example](slug:editing_directives_grid#external-editing)).
16
+ * External Form ([see example](slug:external_editing_grid#quick-setup)).
17
17
  *
18
18
  * @example
19
19
  * ```typescript
@@ -9,7 +9,7 @@ import { LocalDataChangesService } from '../editing/local-data-changes.service';
9
9
  import { CreateFormGroup } from '../common/create-form-group';
10
10
  import * as i0 from "@angular/core";
11
11
  /**
12
- * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-in-cell-editing)).
12
+ * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example](slug:editing_incell_grid#quick-setup)).
13
13
  *
14
14
  * @example
15
15
  * ```html
@@ -8,7 +8,7 @@ import { LocalDataChangesService } from '../editing/local-data-changes.service';
8
8
  import { CreateFormGroup } from '../common/create-form-group';
9
9
  import * as i0 from "@angular/core";
10
10
  /**
11
- * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:editing_directives_grid#toc-reactive-editing-directive)).
11
+ * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:inline_editing_grid#using-reactive-forms)).
12
12
  *
13
13
  * @example
14
14
  * ```html
@@ -7,7 +7,7 @@ import { GridComponent } from '../grid.component';
7
7
  import { LocalDataChangesService } from '../editing/local-data-changes.service';
8
8
  import * as i0 from "@angular/core";
9
9
  /**
10
- * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example]({% slug editing_directives_grid %}#toc-template-editing-directive)).
10
+ * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example](slug:inline_editing_grid#using-template-driven-forms)).
11
11
  *
12
12
  * @example
13
13
  * ```html
@@ -27,7 +27,7 @@ export class ColumnListKeyboardNavigation {
27
27
  toggle(index, active) {
28
28
  const element = this.items[index]?.hostElement.nativeElement.closest('.k-column-list-item');
29
29
  element && this.renderer.setAttribute(element, 'tabindex', active ? '0' : '-1');
30
- active && element?.focus();
30
+ active && element?.focus({ preventScroll: true });
31
31
  }
32
32
  toggleCheckedState() {
33
33
  this.items[this.activeIndex].hostElement.nativeElement.closest('.k-column-list-item').firstElementChild.click();
@@ -5,7 +5,7 @@
5
5
  import { Component, HostBinding, Input, ElementRef, NgZone, Renderer2, Output, EventEmitter, ViewChildren, QueryList, Optional, ChangeDetectorRef } from '@angular/core';
6
6
  import { ColumnMenuService } from './column-menu.service';
7
7
  import { ColumnListKeyboardNavigation } from './column-list-kb-nav.service';
8
- import { EventsOutsideAngularDirective, Keys, normalizeNumpadKeys } from '@progress/kendo-angular-common';
8
+ import { Keys, normalizeNumpadKeys } from '@progress/kendo-angular-common';
9
9
  import { Subscription } from 'rxjs';
10
10
  import { NgFor, NgIf } from '@angular/common';
11
11
  import { CheckBoxComponent } from '@progress/kendo-angular-inputs';
@@ -136,15 +136,6 @@ export class ColumnListComponent {
136
136
  this.service.menuTabbingService.lastFocusable = this.applyButton.nativeElement;
137
137
  }
138
138
  }
139
- onSelectAllClick(e) {
140
- if (e.target.classList.contains('k-checkbox')) {
141
- return;
142
- }
143
- e.preventDefault();
144
- const label = e.target.closest('.k-column-list-item');
145
- const input = label?.querySelector('input');
146
- input.click();
147
- }
148
139
  onSelectAllCheckboxChange(checkedState) {
149
140
  if (!checkedState && !this.allowHideAll) {
150
141
  const columnsToKeep = [];
@@ -326,25 +317,6 @@ export class ColumnListComponent {
326
317
  });
327
318
  }
328
319
  }
329
- checkBoxClick(e) {
330
- const closestItem = e.target.closest('.k-column-list-item');
331
- if (!closestItem)
332
- return;
333
- const checkboxElement = closestItem.querySelector('.k-checkbox-wrap');
334
- const input = checkboxElement?.querySelector('input');
335
- if (e.target === input) {
336
- return;
337
- }
338
- e.preventDefault();
339
- if (input) {
340
- const index = parseInt(input.getAttribute('data-index'), 10);
341
- const column = this.filteredColumns[index];
342
- const isDisabled = checkboxElement.classList.contains('k-disabled');
343
- if (column && !isDisabled) {
344
- input.click();
345
- }
346
- }
347
- }
348
320
  onCheckboxChange(checkedState, column, _index) {
349
321
  column.currentlyChecked = checkedState;
350
322
  if (this.autoSync) {
@@ -378,9 +350,7 @@ export class ColumnListComponent {
378
350
  <label
379
351
  *ngIf="showSelectAll"
380
352
  class='k-column-list-item'
381
- role="option"
382
- [kendoEventsOutsideAngular]="{click: onSelectAllClick}"
383
- [scope]="this">
353
+ role="option">
384
354
  <kendo-checkbox
385
355
  #checkbox
386
356
  [inputAttributes]="{'data-index': '0'}"
@@ -393,9 +363,7 @@ export class ColumnListComponent {
393
363
  <label
394
364
  *ngFor="let column of filteredColumns; let index = index;"
395
365
  class='k-column-list-item'
396
- role="option"
397
- [kendoEventsOutsideAngular]="{click: checkBoxClick}"
398
- [scope]="this">
366
+ role="option">
399
367
  <kendo-checkbox
400
368
  #checkbox
401
369
  [inputAttributes]="{'data-index': index.toString()}"
@@ -406,7 +374,7 @@ export class ColumnListComponent {
406
374
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
407
375
  </label>
408
376
  </div>
409
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
377
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }] });
410
378
  }
411
379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, decorators: [{
412
380
  type: Component,
@@ -422,9 +390,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
422
390
  <label
423
391
  *ngIf="showSelectAll"
424
392
  class='k-column-list-item'
425
- role="option"
426
- [kendoEventsOutsideAngular]="{click: onSelectAllClick}"
427
- [scope]="this">
393
+ role="option">
428
394
  <kendo-checkbox
429
395
  #checkbox
430
396
  [inputAttributes]="{'data-index': '0'}"
@@ -437,9 +403,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
437
403
  <label
438
404
  *ngFor="let column of filteredColumns; let index = index;"
439
405
  class='k-column-list-item'
440
- role="option"
441
- [kendoEventsOutsideAngular]="{click: checkBoxClick}"
442
- [scope]="this">
406
+ role="option">
443
407
  <kendo-checkbox
444
408
  #checkbox
445
409
  [inputAttributes]="{'data-index': index.toString()}"
@@ -452,7 +416,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
452
416
  </div>
453
417
  `,
454
418
  standalone: true,
455
- imports: [NgFor, NgIf, CheckBoxComponent, EventsOutsideAngularDirective]
419
+ imports: [NgFor, NgIf, CheckBoxComponent]
456
420
  }]
457
421
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ColumnListKeyboardNavigation }, { type: i0.ChangeDetectorRef }, { type: i2.ColumnInfoService, decorators: [{
458
422
  type: Optional
@@ -6,6 +6,7 @@ import { ColumnMenuItemDirective } from './column-menu-item.directive';
6
6
  import { Component, ContentChildren, Inject, NgZone, QueryList } from '@angular/core';
7
7
  import { take } from 'rxjs/operators';
8
8
  import { ColumnMenuService } from './column-menu.service';
9
+ import { DropDownListComponent } from '@progress/kendo-angular-dropdowns';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "./column-menu.service";
11
12
  /**
@@ -33,7 +34,15 @@ export class ColumnMenuContainerComponent {
33
34
  else {
34
35
  return;
35
36
  }
36
- this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable?.focus());
37
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
38
+ const firstFocusable = this.service.menuTabbingService.firstFocusable;
39
+ if (firstFocusable instanceof DropDownListComponent) {
40
+ firstFocusable.wrapper.nativeElement.focus({ preventScroll: true });
41
+ }
42
+ else {
43
+ firstFocusable?.focus({ preventScroll: true });
44
+ }
45
+ });
37
46
  }
38
47
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuContainerComponent, deps: [{ token: i1.ColumnMenuService }, { token: NgZone }], target: i0.ɵɵFactoryTarget.Component });
39
48
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuContainerComponent, isStandalone: true, selector: "kendo-grid-columnmenu-container", queries: [{ propertyName: "columnMenuItems", predicate: ColumnMenuItemDirective, descendants: true }], ngImport: i0, template: `
@@ -353,7 +353,13 @@ export class ColumnMenuComponent {
353
353
  ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
354
354
  }
355
355
  focusRoot() {
356
- this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
356
+ if (this.isNavigable) {
357
+ this.navigationService.preventScroll = true;
358
+ this.navigationService.focusCell(0, this.column.leafIndex);
359
+ }
360
+ else {
361
+ this.anchor.nativeElement.focus({ preventScroll: true });
362
+ }
357
363
  }
358
364
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: i1.NavigationService }, { token: i2.SinglePopupService }, { token: i3.ColumnMenuService }, { token: i4.ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.ColumnInfoService }, { token: i6.IdService, optional: true }, { token: i7.AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
359
365
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuComponent, isStandalone: true, selector: "kendo-grid-column-menu", inputs: { standalone: "standalone", column: "column", settings: "settings", sort: "sort", filter: "filter", sortable: "sortable", columnMenuTemplate: "columnMenuTemplate", tabIndex: "tabIndex" }, host: { properties: { "class.k-grid-column-menu-standalone": "this.standalone" } }, providers: [
@@ -11,7 +11,7 @@ import * as i1 from "./column-base";
11
11
  import * as i2 from "../common/id.service";
12
12
  /**
13
13
  * Represents the command columns of the Grid. Define the content of the column inside an `<ng-template>` tag.
14
- * For more information and examples, see the [Command Column Directives](slug:editing_directives_grid#toc-command-column-directives) article.
14
+ * For more information and examples, see the [Editing Action Buttons](slug:basics_editing_grid#editing-action-buttons) article.
15
15
  *
16
16
  * @example
17
17
  * ```html
@@ -75,7 +75,7 @@ export class SpanColumnComponent extends ColumnBase {
75
75
  includeInChooser = false;
76
76
  /**
77
77
  * Sets whether the edit template of the column is rendered.
78
- * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_reactive_editing_grid)).
78
+ * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
79
79
  * @default false
80
80
  */
81
81
  set editable(value) {
@@ -15,7 +15,7 @@ import * as i2 from "../common/provider.service";
15
15
  /**
16
16
  * Represents the `cancel` command of the Grid. Apply this directive to any `button`
17
17
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
18
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
18
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
19
19
  *
20
20
  * When a button with this directive is clicked, the
21
21
  * [`cancel`]({% slug api_grid_gridcomponent %}#toc-cancel) event
@@ -5,7 +5,7 @@
5
5
  import { Directive, TemplateRef, Optional } from '@angular/core';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
- * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_reactive_editing_grid#toc-setting-up-custom-inputs)).
8
+ * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
9
9
  * Place an `<ng-template>` tag with the `kendoGridEditTemplate` directive inside a `<kendo-grid-column>` tag to define the template.
10
10
  *
11
11
  * The template context includes:
@@ -15,7 +15,7 @@ import * as i2 from "../common/provider.service";
15
15
  /**
16
16
  * Represents the `remove` command of the Grid. Apply this directive to any `button` element
17
17
  * inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
18
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
18
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
19
19
  * When you click the button with this directive, the
20
20
  * [`remove`]({% slug api_grid_gridcomponent %}#toc-remove) event fires.
21
21
  * The button with `kendoGridRemoveCommand` is automatically hidden when the row is in edit mode.
@@ -15,7 +15,7 @@ import * as i2 from "../common/provider.service";
15
15
  /**
16
16
  * Represents the `save` command of the Grid. Apply this directive to any `button`
17
17
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
18
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
18
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
19
19
  * When you click the button with this directive, the
20
20
  * [`save`]({% slug api_grid_gridcomponent %}#toc-save) event fires.
21
21
  * The button with `kendoGridSaveCommand` is automatically hidden when the row is not in edit mode.
@@ -16,7 +16,7 @@ import * as i2 from "../editing/local-data-changes.service";
16
16
  import * as i3 from "../common/adaptiveness.service";
17
17
  /**
18
18
  * Represents the Kendo UI Grid external editing directive. The directive manages editing operations in the Grid when using the
19
- * External Form ([see example](slug:editing_directives_grid#external-editing)).
19
+ * External Form ([see example](slug:external_editing_grid#quick-setup)).
20
20
  *
21
21
  * @example
22
22
  * ```typescript
@@ -12,7 +12,7 @@ import * as i0 from "@angular/core";
12
12
  import * as i1 from "../grid.component";
13
13
  import * as i2 from "../editing/local-data-changes.service";
14
14
  /**
15
- * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-in-cell-editing)).
15
+ * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example](slug:editing_incell_grid#quick-setup)).
16
16
  *
17
17
  * @example
18
18
  * ```html
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  import * as i1 from "../grid.component";
12
12
  import * as i2 from "../editing/local-data-changes.service";
13
13
  /**
14
- * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:editing_directives_grid#toc-reactive-editing-directive)).
14
+ * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:inline_editing_grid#using-reactive-forms)).
15
15
  *
16
16
  * @example
17
17
  * ```html
@@ -10,7 +10,7 @@ import * as i0 from "@angular/core";
10
10
  import * as i1 from "../grid.component";
11
11
  import * as i2 from "../editing/local-data-changes.service";
12
12
  /**
13
- * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example]({% slug editing_directives_grid %}#toc-template-editing-directive)).
13
+ * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example](slug:inline_editing_grid#using-template-driven-forms)).
14
14
  *
15
15
  * @example
16
16
  * ```html
@@ -45,11 +45,11 @@ export class FilterMenuInputWrapperComponent extends FilterInputWrapperComponent
45
45
  this.filterService.menuTabbingService.firstFocusable = this.firstOperatorDropDown;
46
46
  if (this.ctx.grid?.isActionSheetExpanded) {
47
47
  this.subs.add(this.adaptiveGridService.animationEnd.subscribe(() => {
48
- this.firstOperatorDropDown.focus();
48
+ this.firstOperatorDropDown.wrapper.nativeElement.focus({ preventScroll: true });
49
49
  }));
50
50
  }
51
51
  else {
52
- this.firstOperatorDropDown.focus();
52
+ this.firstOperatorDropDown.wrapper.nativeElement.focus({ preventScroll: true });
53
53
  }
54
54
  }
55
55
  }
@@ -139,7 +139,13 @@ export class FilterMenuComponent {
139
139
  this.cdr.markForCheck();
140
140
  }
141
141
  focusRoot() {
142
- this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
142
+ if (this.isNavigable) {
143
+ this.navigationService.preventScroll = true;
144
+ this.navigationService.focusCell(0, this.column.leafIndex);
145
+ }
146
+ else {
147
+ this.anchor.nativeElement.focus({ preventScroll: true });
148
+ }
143
149
  }
144
150
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: i1.FilterService }, { token: i2.SinglePopupService }, { token: i3.ContextService }, { token: i4.NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.AdaptiveGridService }, { token: i0.NgZone }, { token: i6.IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
145
151
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuComponent, isStandalone: true, selector: "kendo-grid-filter-menu", inputs: { column: "column", filter: "filter", tabIndex: "tabIndex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
@@ -123,8 +123,14 @@ export class LogicalCellDirective {
123
123
  this.focusGroup.focus();
124
124
  }
125
125
  else {
126
- if (!this.logicalSlaveCell && this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
127
- this.microtask(() => this.isFocused() && el.focus());
126
+ if (!this.logicalSlaveCell &&
127
+ this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
128
+ this.microtask(() => {
129
+ if (this.isFocused()) {
130
+ el.focus({ preventScroll: this.navigationService.preventScroll });
131
+ this.navigationService.preventScroll = false;
132
+ }
133
+ });
128
134
  }
129
135
  this.renderer.addClass(el, 'k-focus');
130
136
  }
@@ -155,6 +155,7 @@ export class NavigationService {
155
155
  return columnIndexInsideGroup !== columnGroupChildren.length - 1;
156
156
  }
157
157
  }
158
+ preventScroll = false;
158
159
  viewport;
159
160
  columnViewport;
160
161
  activeRowIndex = 0;
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1759307158,
14
- version: '20.1.0-develop.5',
13
+ publishDate: 1759477759,
14
+ version: '20.1.0-develop.7',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -216,7 +216,7 @@ export class ColumnChooserToolbarDirective extends ToolbarToolBase {
216
216
  this.buttonElement?.setAttribute('aria-expanded', 'false');
217
217
  this.buttonElement?.removeAttribute('aria-controls');
218
218
  this.host.selected = false;
219
- focusAnchor && this.buttonElement?.focus();
219
+ focusAnchor && this.buttonElement?.focus({ preventScroll: true });
220
220
  }
221
221
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, deps: [{ token: i0.Renderer2 }, { token: i1.PopupService }, { token: i2.ToolBarButtonComponent }, { token: i3.ContextService }, { token: i0.NgZone }, { token: i2.RefreshService }, { token: i4.AdaptiveGridService }, { token: i5.ColumnInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
222
222
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserToolbarDirective, isStandalone: true, selector: "[kendoGridColumnChooserTool]", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll", filterable: "filterable", showSelectAll: "showSelectAll" }, usesInheritance: true, ngImport: i0 });
@@ -91,7 +91,7 @@ export class FilterToolbarToolComponent {
91
91
  }
92
92
  ngAfterViewInit() {
93
93
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
94
- this.filterItems?.get(0)?.nativeElement.focus();
94
+ this.filterItems?.get(0)?.nativeElement.focus({ preventScroll: true });
95
95
  });
96
96
  }
97
97
  ngOnDestroy() {
@@ -34,12 +34,12 @@ export class GroupToolbarToolComponent {
34
34
  if (items?.first && (!isPresent(this.currentFocusedItemIndex) || this.currentFocusedItemIndex >= items.length || this.currentFocusedItemIndex < 0)) {
35
35
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
36
36
  this.currentFocusedItemIndex = 0;
37
- this.groupItems.first.nativeElement.focus();
37
+ this.groupItems.first.nativeElement.focus({ preventScroll: true });
38
38
  });
39
39
  return;
40
40
  }
41
41
  if (items?.first) {
42
- items.get(this.currentFocusedItemIndex).nativeElement.focus();
42
+ items.get(this.currentFocusedItemIndex).nativeElement.focus({ preventScroll: true });
43
43
  }
44
44
  }
45
45
  get groupItems() {
@@ -70,7 +70,7 @@ export class SortToolbarToolComponent {
70
70
  }
71
71
  ngAfterViewInit() {
72
72
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
73
- this.sortItems?.get(0)?.nativeElement.focus();
73
+ this.sortItems?.get(0)?.nativeElement.focus({ preventScroll: true });
74
74
  });
75
75
  }
76
76
  ngOnDestroy() {
@@ -1933,7 +1933,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1933
1933
  }] }]; } });
1934
1934
 
1935
1935
  /**
1936
- * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_reactive_editing_grid#toc-setting-up-custom-inputs)).
1936
+ * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
1937
1937
  * Place an `<ng-template>` tag with the `kendoGridEditTemplate` directive inside a `<kendo-grid-column>` tag to define the template.
1938
1938
  *
1939
1939
  * The template context includes:
@@ -3045,7 +3045,7 @@ class SpanColumnComponent extends ColumnBase {
3045
3045
  includeInChooser = false;
3046
3046
  /**
3047
3047
  * Sets whether the edit template of the column is rendered.
3048
- * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_reactive_editing_grid)).
3048
+ * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
3049
3049
  * @default false
3050
3050
  */
3051
3051
  set editable(value) {
@@ -3507,6 +3507,7 @@ class NavigationService {
3507
3507
  return columnIndexInsideGroup !== columnGroupChildren.length - 1;
3508
3508
  }
3509
3509
  }
3510
+ preventScroll = false;
3510
3511
  viewport;
3511
3512
  columnViewport;
3512
3513
  activeRowIndex = 0;
@@ -5264,8 +5265,14 @@ class LogicalCellDirective {
5264
5265
  this.focusGroup.focus();
5265
5266
  }
5266
5267
  else {
5267
- if (!this.logicalSlaveCell && this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
5268
- this.microtask(() => this.isFocused() && el.focus());
5268
+ if (!this.logicalSlaveCell &&
5269
+ this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
5270
+ this.microtask(() => {
5271
+ if (this.isFocused()) {
5272
+ el.focus({ preventScroll: this.navigationService.preventScroll });
5273
+ this.navigationService.preventScroll = false;
5274
+ }
5275
+ });
5269
5276
  }
5270
5277
  this.renderer.addClass(el, 'k-focus');
5271
5278
  }
@@ -8964,11 +8971,11 @@ class FilterMenuInputWrapperComponent extends FilterInputWrapperComponent {
8964
8971
  this.filterService.menuTabbingService.firstFocusable = this.firstOperatorDropDown;
8965
8972
  if (this.ctx.grid?.isActionSheetExpanded) {
8966
8973
  this.subs.add(this.adaptiveGridService.animationEnd.subscribe(() => {
8967
- this.firstOperatorDropDown.focus();
8974
+ this.firstOperatorDropDown.wrapper.nativeElement.focus({ preventScroll: true });
8968
8975
  }));
8969
8976
  }
8970
8977
  else {
8971
- this.firstOperatorDropDown.focus();
8978
+ this.firstOperatorDropDown.wrapper.nativeElement.focus({ preventScroll: true });
8972
8979
  }
8973
8980
  }
8974
8981
  }
@@ -11072,7 +11079,13 @@ class FilterMenuComponent {
11072
11079
  this.cdr.markForCheck();
11073
11080
  }
11074
11081
  focusRoot() {
11075
- this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
11082
+ if (this.isNavigable) {
11083
+ this.navigationService.preventScroll = true;
11084
+ this.navigationService.focusCell(0, this.column.leafIndex);
11085
+ }
11086
+ else {
11087
+ this.anchor.nativeElement.focus({ preventScroll: true });
11088
+ }
11076
11089
  }
11077
11090
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: FilterService }, { token: SinglePopupService }, { token: ContextService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: AdaptiveGridService }, { token: i0.NgZone }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11078
11091
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuComponent, isStandalone: true, selector: "kendo-grid-filter-menu", inputs: { column: "column", filter: "filter", tabIndex: "tabIndex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
@@ -12087,7 +12100,7 @@ class ColumnListKeyboardNavigation {
12087
12100
  toggle(index, active) {
12088
12101
  const element = this.items[index]?.hostElement.nativeElement.closest('.k-column-list-item');
12089
12102
  element && this.renderer.setAttribute(element, 'tabindex', active ? '0' : '-1');
12090
- active && element?.focus();
12103
+ active && element?.focus({ preventScroll: true });
12091
12104
  }
12092
12105
  toggleCheckedState() {
12093
12106
  this.items[this.activeIndex].hostElement.nativeElement.closest('.k-column-list-item').firstElementChild.click();
@@ -12217,15 +12230,6 @@ class ColumnListComponent {
12217
12230
  this.service.menuTabbingService.lastFocusable = this.applyButton.nativeElement;
12218
12231
  }
12219
12232
  }
12220
- onSelectAllClick(e) {
12221
- if (e.target.classList.contains('k-checkbox')) {
12222
- return;
12223
- }
12224
- e.preventDefault();
12225
- const label = e.target.closest('.k-column-list-item');
12226
- const input = label?.querySelector('input');
12227
- input.click();
12228
- }
12229
12233
  onSelectAllCheckboxChange(checkedState) {
12230
12234
  if (!checkedState && !this.allowHideAll) {
12231
12235
  const columnsToKeep = [];
@@ -12407,25 +12411,6 @@ class ColumnListComponent {
12407
12411
  });
12408
12412
  }
12409
12413
  }
12410
- checkBoxClick(e) {
12411
- const closestItem = e.target.closest('.k-column-list-item');
12412
- if (!closestItem)
12413
- return;
12414
- const checkboxElement = closestItem.querySelector('.k-checkbox-wrap');
12415
- const input = checkboxElement?.querySelector('input');
12416
- if (e.target === input) {
12417
- return;
12418
- }
12419
- e.preventDefault();
12420
- if (input) {
12421
- const index = parseInt(input.getAttribute('data-index'), 10);
12422
- const column = this.filteredColumns[index];
12423
- const isDisabled = checkboxElement.classList.contains('k-disabled');
12424
- if (column && !isDisabled) {
12425
- input.click();
12426
- }
12427
- }
12428
- }
12429
12414
  onCheckboxChange(checkedState, column, _index) {
12430
12415
  column.currentlyChecked = checkedState;
12431
12416
  if (this.autoSync) {
@@ -12459,9 +12444,7 @@ class ColumnListComponent {
12459
12444
  <label
12460
12445
  *ngIf="showSelectAll"
12461
12446
  class='k-column-list-item'
12462
- role="option"
12463
- [kendoEventsOutsideAngular]="{click: onSelectAllClick}"
12464
- [scope]="this">
12447
+ role="option">
12465
12448
  <kendo-checkbox
12466
12449
  #checkbox
12467
12450
  [inputAttributes]="{'data-index': '0'}"
@@ -12474,9 +12457,7 @@ class ColumnListComponent {
12474
12457
  <label
12475
12458
  *ngFor="let column of filteredColumns; let index = index;"
12476
12459
  class='k-column-list-item'
12477
- role="option"
12478
- [kendoEventsOutsideAngular]="{click: checkBoxClick}"
12479
- [scope]="this">
12460
+ role="option">
12480
12461
  <kendo-checkbox
12481
12462
  #checkbox
12482
12463
  [inputAttributes]="{'data-index': index.toString()}"
@@ -12487,7 +12468,7 @@ class ColumnListComponent {
12487
12468
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12488
12469
  </label>
12489
12470
  </div>
12490
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
12471
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }] });
12491
12472
  }
12492
12473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, decorators: [{
12493
12474
  type: Component,
@@ -12503,9 +12484,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12503
12484
  <label
12504
12485
  *ngIf="showSelectAll"
12505
12486
  class='k-column-list-item'
12506
- role="option"
12507
- [kendoEventsOutsideAngular]="{click: onSelectAllClick}"
12508
- [scope]="this">
12487
+ role="option">
12509
12488
  <kendo-checkbox
12510
12489
  #checkbox
12511
12490
  [inputAttributes]="{'data-index': '0'}"
@@ -12518,9 +12497,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12518
12497
  <label
12519
12498
  *ngFor="let column of filteredColumns; let index = index;"
12520
12499
  class='k-column-list-item'
12521
- role="option"
12522
- [kendoEventsOutsideAngular]="{click: checkBoxClick}"
12523
- [scope]="this">
12500
+ role="option">
12524
12501
  <kendo-checkbox
12525
12502
  #checkbox
12526
12503
  [inputAttributes]="{'data-index': index.toString()}"
@@ -12533,7 +12510,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12533
12510
  </div>
12534
12511
  `,
12535
12512
  standalone: true,
12536
- imports: [NgFor, NgIf, CheckBoxComponent, EventsOutsideAngularDirective]
12513
+ imports: [NgFor, NgIf, CheckBoxComponent]
12537
12514
  }]
12538
12515
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ColumnListKeyboardNavigation }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService, decorators: [{
12539
12516
  type: Optional
@@ -13375,7 +13352,7 @@ class ColumnChooserToolbarDirective extends ToolbarToolBase {
13375
13352
  this.buttonElement?.setAttribute('aria-expanded', 'false');
13376
13353
  this.buttonElement?.removeAttribute('aria-controls');
13377
13354
  this.host.selected = false;
13378
- focusAnchor && this.buttonElement?.focus();
13355
+ focusAnchor && this.buttonElement?.focus({ preventScroll: true });
13379
13356
  }
13380
13357
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, deps: [{ token: i0.Renderer2 }, { token: i2.PopupService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i54.RefreshService }, { token: AdaptiveGridService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
13381
13358
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserToolbarDirective, isStandalone: true, selector: "[kendoGridColumnChooserTool]", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll", filterable: "filterable", showSelectAll: "showSelectAll" }, usesInheritance: true, ngImport: i0 });
@@ -14899,7 +14876,15 @@ class ColumnMenuContainerComponent {
14899
14876
  else {
14900
14877
  return;
14901
14878
  }
14902
- this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable?.focus());
14879
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
14880
+ const firstFocusable = this.service.menuTabbingService.firstFocusable;
14881
+ if (firstFocusable instanceof DropDownListComponent) {
14882
+ firstFocusable.wrapper.nativeElement.focus({ preventScroll: true });
14883
+ }
14884
+ else {
14885
+ firstFocusable?.focus({ preventScroll: true });
14886
+ }
14887
+ });
14903
14888
  }
14904
14889
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuContainerComponent, deps: [{ token: ColumnMenuService }, { token: NgZone }], target: i0.ɵɵFactoryTarget.Component });
14905
14890
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuContainerComponent, isStandalone: true, selector: "kendo-grid-columnmenu-container", queries: [{ propertyName: "columnMenuItems", predicate: ColumnMenuItemDirective, descendants: true }], ngImport: i0, template: `
@@ -15354,7 +15339,13 @@ class ColumnMenuComponent {
15354
15339
  ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
15355
15340
  }
15356
15341
  focusRoot() {
15357
- this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
15342
+ if (this.isNavigable) {
15343
+ this.navigationService.preventScroll = true;
15344
+ this.navigationService.focusCell(0, this.column.leafIndex);
15345
+ }
15346
+ else {
15347
+ this.anchor.nativeElement.focus({ preventScroll: true });
15348
+ }
15358
15349
  }
15359
15350
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: NavigationService }, { token: SinglePopupService }, { token: ColumnMenuService }, { token: ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService }, { token: IdService, optional: true }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
15360
15351
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuComponent, isStandalone: true, selector: "kendo-grid-column-menu", inputs: { standalone: "standalone", column: "column", settings: "settings", sort: "sort", filter: "filter", sortable: "sortable", columnMenuTemplate: "columnMenuTemplate", tabIndex: "tabIndex" }, host: { properties: { "class.k-grid-column-menu-standalone": "this.standalone" } }, providers: [
@@ -19549,7 +19540,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19549
19540
 
19550
19541
  /**
19551
19542
  * Represents the command columns of the Grid. Define the content of the column inside an `<ng-template>` tag.
19552
- * For more information and examples, see the [Command Column Directives](slug:editing_directives_grid#toc-command-column-directives) article.
19543
+ * For more information and examples, see the [Editing Action Buttons](slug:basics_editing_grid#editing-action-buttons) article.
19553
19544
  *
19554
19545
  * @example
19555
19546
  * ```html
@@ -21796,7 +21787,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
21796
21787
  /**
21797
21788
  * Represents the `cancel` command of the Grid. Apply this directive to any `button`
21798
21789
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
21799
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
21790
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
21800
21791
  *
21801
21792
  * When a button with this directive is clicked, the
21802
21793
  * [`cancel`]({% slug api_grid_gridcomponent %}#toc-cancel) event
@@ -21900,7 +21891,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
21900
21891
  /**
21901
21892
  * Represents the `save` command of the Grid. Apply this directive to any `button`
21902
21893
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
21903
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
21894
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
21904
21895
  * When you click the button with this directive, the
21905
21896
  * [`save`]({% slug api_grid_gridcomponent %}#toc-save) event fires.
21906
21897
  * The button with `kendoGridSaveCommand` is automatically hidden when the row is not in edit mode.
@@ -22003,7 +21994,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
22003
21994
  /**
22004
21995
  * Represents the `remove` command of the Grid. Apply this directive to any `button` element
22005
21996
  * inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
22006
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
21997
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
22007
21998
  * When you click the button with this directive, the
22008
21999
  * [`remove`]({% slug api_grid_gridcomponent %}#toc-remove) event fires.
22009
22000
  * The button with `kendoGridRemoveCommand` is automatically hidden when the row is in edit mode.
@@ -22427,8 +22418,8 @@ const packageMetadata = {
22427
22418
  productName: 'Kendo UI for Angular',
22428
22419
  productCode: 'KENDOUIANGULAR',
22429
22420
  productCodes: ['KENDOUIANGULAR'],
22430
- publishDate: 1759307158,
22431
- version: '20.1.0-develop.5',
22421
+ publishDate: 1759477759,
22422
+ version: '20.1.0-develop.7',
22432
22423
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
22433
22424
  };
22434
22425
 
@@ -26941,7 +26932,7 @@ class FilterToolbarToolComponent {
26941
26932
  }
26942
26933
  ngAfterViewInit() {
26943
26934
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
26944
- this.filterItems?.get(0)?.nativeElement.focus();
26935
+ this.filterItems?.get(0)?.nativeElement.focus({ preventScroll: true });
26945
26936
  });
26946
26937
  }
26947
26938
  ngOnDestroy() {
@@ -27127,7 +27118,7 @@ class SortToolbarToolComponent {
27127
27118
  }
27128
27119
  ngAfterViewInit() {
27129
27120
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
27130
- this.sortItems?.get(0)?.nativeElement.focus();
27121
+ this.sortItems?.get(0)?.nativeElement.focus({ preventScroll: true });
27131
27122
  });
27132
27123
  }
27133
27124
  ngOnDestroy() {
@@ -27689,12 +27680,12 @@ class GroupToolbarToolComponent {
27689
27680
  if (items?.first && (!isPresent$1(this.currentFocusedItemIndex) || this.currentFocusedItemIndex >= items.length || this.currentFocusedItemIndex < 0)) {
27690
27681
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
27691
27682
  this.currentFocusedItemIndex = 0;
27692
- this.groupItems.first.nativeElement.focus();
27683
+ this.groupItems.first.nativeElement.focus({ preventScroll: true });
27693
27684
  });
27694
27685
  return;
27695
27686
  }
27696
27687
  if (items?.first) {
27697
- items.get(this.currentFocusedItemIndex).nativeElement.focus();
27688
+ items.get(this.currentFocusedItemIndex).nativeElement.focus({ preventScroll: true });
27698
27689
  }
27699
27690
  }
27700
27691
  get groupItems() {
@@ -34722,7 +34713,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34722
34713
  }] });
34723
34714
 
34724
34715
  /**
34725
- * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example]({% slug editing_directives_grid %}#toc-template-editing-directive)).
34716
+ * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example](slug:inline_editing_grid#using-template-driven-forms)).
34726
34717
  *
34727
34718
  * @example
34728
34719
  * ```html
@@ -34799,7 +34790,7 @@ const markAllAsTouched = (control) => {
34799
34790
  };
34800
34791
 
34801
34792
  /**
34802
- * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:editing_directives_grid#toc-reactive-editing-directive)).
34793
+ * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:inline_editing_grid#using-reactive-forms)).
34803
34794
  *
34804
34795
  * @example
34805
34796
  * ```html
@@ -34848,7 +34839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34848
34839
  }] } });
34849
34840
 
34850
34841
  /**
34851
- * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-in-cell-editing)).
34842
+ * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example](slug:editing_incell_grid#quick-setup)).
34852
34843
  *
34853
34844
  * @example
34854
34845
  * ```html
@@ -34934,7 +34925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34934
34925
 
34935
34926
  /**
34936
34927
  * Represents the Kendo UI Grid external editing directive. The directive manages editing operations in the Grid when using the
34937
- * External Form ([see example](slug:editing_directives_grid#external-editing)).
34928
+ * External Form ([see example](slug:external_editing_grid#quick-setup)).
34938
34929
  *
34939
34930
  * @example
34940
34931
  * ```typescript
@@ -59,6 +59,7 @@ export declare class NavigationService implements OnDestroy {
59
59
  get activeCell(): NavigationCell;
60
60
  get activeRow(): NavigationRow;
61
61
  get isColumnResizable(): boolean;
62
+ preventScroll: boolean;
62
63
  viewport: NavigationViewport;
63
64
  columnViewport: NavigationViewport;
64
65
  private activeRowIndex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-grid",
3
- "version": "20.1.0-develop.5",
3
+ "version": "20.1.0-develop.7",
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",
@@ -41,7 +41,7 @@
41
41
  "package": {
42
42
  "productName": "Kendo UI for Angular",
43
43
  "productCode": "KENDOUIANGULAR",
44
- "publishDate": 1759307158,
44
+ "publishDate": 1759477759,
45
45
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
46
46
  }
47
47
  },
@@ -54,29 +54,29 @@
54
54
  "@progress/kendo-data-query": "^1.0.0",
55
55
  "@progress/kendo-drawing": "^1.21.0",
56
56
  "@progress/kendo-licensing": "^1.7.0",
57
- "@progress/kendo-angular-buttons": "20.1.0-develop.5",
58
- "@progress/kendo-angular-common": "20.1.0-develop.5",
59
- "@progress/kendo-angular-dateinputs": "20.1.0-develop.5",
60
- "@progress/kendo-angular-layout": "20.1.0-develop.5",
61
- "@progress/kendo-angular-navigation": "20.1.0-develop.5",
62
- "@progress/kendo-angular-dropdowns": "20.1.0-develop.5",
63
- "@progress/kendo-angular-excel-export": "20.1.0-develop.5",
64
- "@progress/kendo-angular-icons": "20.1.0-develop.5",
65
- "@progress/kendo-angular-inputs": "20.1.0-develop.5",
66
- "@progress/kendo-angular-conversational-ui": "20.1.0-develop.5",
67
- "@progress/kendo-angular-intl": "20.1.0-develop.5",
68
- "@progress/kendo-angular-l10n": "20.1.0-develop.5",
69
- "@progress/kendo-angular-label": "20.1.0-develop.5",
70
- "@progress/kendo-angular-pager": "20.1.0-develop.5",
71
- "@progress/kendo-angular-pdf-export": "20.1.0-develop.5",
72
- "@progress/kendo-angular-popup": "20.1.0-develop.5",
73
- "@progress/kendo-angular-toolbar": "20.1.0-develop.5",
74
- "@progress/kendo-angular-utils": "20.1.0-develop.5",
57
+ "@progress/kendo-angular-buttons": "20.1.0-develop.7",
58
+ "@progress/kendo-angular-common": "20.1.0-develop.7",
59
+ "@progress/kendo-angular-dateinputs": "20.1.0-develop.7",
60
+ "@progress/kendo-angular-layout": "20.1.0-develop.7",
61
+ "@progress/kendo-angular-navigation": "20.1.0-develop.7",
62
+ "@progress/kendo-angular-dropdowns": "20.1.0-develop.7",
63
+ "@progress/kendo-angular-excel-export": "20.1.0-develop.7",
64
+ "@progress/kendo-angular-icons": "20.1.0-develop.7",
65
+ "@progress/kendo-angular-inputs": "20.1.0-develop.7",
66
+ "@progress/kendo-angular-conversational-ui": "20.1.0-develop.7",
67
+ "@progress/kendo-angular-intl": "20.1.0-develop.7",
68
+ "@progress/kendo-angular-l10n": "20.1.0-develop.7",
69
+ "@progress/kendo-angular-label": "20.1.0-develop.7",
70
+ "@progress/kendo-angular-pager": "20.1.0-develop.7",
71
+ "@progress/kendo-angular-pdf-export": "20.1.0-develop.7",
72
+ "@progress/kendo-angular-popup": "20.1.0-develop.7",
73
+ "@progress/kendo-angular-toolbar": "20.1.0-develop.7",
74
+ "@progress/kendo-angular-utils": "20.1.0-develop.7",
75
75
  "rxjs": "^6.5.3 || ^7.0.0"
76
76
  },
77
77
  "dependencies": {
78
78
  "tslib": "^2.3.1",
79
- "@progress/kendo-angular-schematics": "20.1.0-develop.5",
79
+ "@progress/kendo-angular-schematics": "20.1.0-develop.7",
80
80
  "@progress/kendo-common": "^1.0.1",
81
81
  "@progress/kendo-file-saver": "^1.0.0"
82
82
  },
@@ -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': '20.1.0-develop.5',
8
- '@progress/kendo-angular-navigation': '20.1.0-develop.5',
7
+ '@progress/kendo-angular-treeview': '20.1.0-develop.7',
8
+ '@progress/kendo-angular-navigation': '20.1.0-develop.7',
9
9
  // peer dependency of kendo-angular-inputs
10
- '@progress/kendo-angular-dialog': '20.1.0-develop.5',
10
+ '@progress/kendo-angular-dialog': '20.1.0-develop.7',
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': '20.1.0-develop.5'
14
+ '@progress/kendo-angular-progressbar': '20.1.0-develop.7'
15
15
  } });
16
16
  return (0, schematics_1.externalSchematic)('@progress/kendo-angular-schematics', 'ng-add', finalOptions);
17
17
  }