@progress/kendo-angular-grid 15.0.2-develop.1 → 15.0.2-develop.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/column-menu/column-list.component.d.ts +2 -1
- package/common/provider.service.d.ts +1 -0
- package/esm2020/column-menu/column-list.component.mjs +18 -9
- package/esm2020/editing-directives/editing-directive-base.mjs +3 -2
- package/esm2020/grid.component.mjs +4 -0
- package/esm2020/navigation/focusable.directive.mjs +7 -4
- package/esm2020/package-metadata.mjs +2 -2
- package/fesm2015/progress-kendo-angular-grid.mjs +31 -16
- package/fesm2020/progress-kendo-angular-grid.mjs +101 -86
- package/navigation/focusable.directive.d.ts +4 -2
- package/package.json +18 -17
- package/schematics/ngAdd/index.js +3 -3
|
@@ -42,11 +42,11 @@ export declare class ColumnListComponent implements OnInit, OnDestroy {
|
|
|
42
42
|
private allColumns;
|
|
43
43
|
private domSubscriptions;
|
|
44
44
|
constructor(element: ElementRef, ngZone: NgZone, renderer: Renderer2, listNavigationService: ColumnListKeyboardNavigation);
|
|
45
|
-
isDisabled(column: any): boolean;
|
|
46
45
|
ngOnInit(): void;
|
|
47
46
|
ngAfterViewInit(): void;
|
|
48
47
|
ngOnChanges(changes: SimpleChanges): void;
|
|
49
48
|
ngOnDestroy(): void;
|
|
49
|
+
isDisabled(column: any): boolean;
|
|
50
50
|
cancelChanges(): void;
|
|
51
51
|
applyChanges(): void;
|
|
52
52
|
onTab(e: Event): void;
|
|
@@ -54,6 +54,7 @@ export declare class ColumnListComponent implements OnInit, OnDestroy {
|
|
|
54
54
|
private forEachCheckBox;
|
|
55
55
|
private updateDisabled;
|
|
56
56
|
private updateColumnState;
|
|
57
|
+
private setDisabledState;
|
|
57
58
|
static ɵfac: i0.ɵɵFactoryDeclaration<ColumnListComponent, never>;
|
|
58
59
|
static ɵcmp: i0.ɵɵComponentDeclaration<ColumnListComponent, "kendo-grid-columnlist", never, { "columns": "columns"; "autoSync": "autoSync"; "ariaLabel": "ariaLabel"; "allowHideAll": "allowHideAll"; "applyText": "applyText"; "resetText": "resetText"; "actionsClass": "actionsClass"; "isLast": "isLast"; "isExpanded": "isExpanded"; "service": "service"; }, { "reset": "reset"; "apply": "apply"; "columnChange": "columnChange"; }, never, never>;
|
|
59
60
|
}
|
|
@@ -22,6 +22,7 @@ export declare class ContextService {
|
|
|
22
22
|
grid: GridComponent;
|
|
23
23
|
topToolbarNavigation: GridToolbarNavigationService;
|
|
24
24
|
bottomToolbarNavigation: GridToolbarNavigationService;
|
|
25
|
+
navigable: boolean;
|
|
25
26
|
constructor(renderer: Renderer2, localization: LocalizationService);
|
|
26
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContextService, never>;
|
|
27
28
|
static ɵprov: i0.ɵɵInjectableDeclaration<ContextService>;
|
|
@@ -58,10 +58,6 @@ export class ColumnListComponent {
|
|
|
58
58
|
get columns() {
|
|
59
59
|
return this._columns;
|
|
60
60
|
}
|
|
61
|
-
isDisabled(column) {
|
|
62
|
-
return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
|
|
63
|
-
(this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
|
|
64
|
-
}
|
|
65
61
|
ngOnInit() {
|
|
66
62
|
if (!this.element) {
|
|
67
63
|
return;
|
|
@@ -105,6 +101,7 @@ export class ColumnListComponent {
|
|
|
105
101
|
ngAfterViewInit() {
|
|
106
102
|
this.listNavigationService.items = this.options.toArray();
|
|
107
103
|
this.listNavigationService.toggle(0, true);
|
|
104
|
+
this.updateDisabled();
|
|
108
105
|
}
|
|
109
106
|
ngOnChanges(changes) {
|
|
110
107
|
if (!this.service) {
|
|
@@ -120,6 +117,10 @@ export class ColumnListComponent {
|
|
|
120
117
|
ngOnDestroy() {
|
|
121
118
|
this.domSubscriptions.unsubscribe();
|
|
122
119
|
}
|
|
120
|
+
isDisabled(column) {
|
|
121
|
+
return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
|
|
122
|
+
(this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
|
|
123
|
+
}
|
|
123
124
|
cancelChanges() {
|
|
124
125
|
this.forEachCheckBox((element, index) => {
|
|
125
126
|
element.checked = !this.columns[index].hidden;
|
|
@@ -167,16 +168,16 @@ export class ColumnListComponent {
|
|
|
167
168
|
if (checkbox.checked) {
|
|
168
169
|
checkedItems.push({ checkbox, index });
|
|
169
170
|
}
|
|
170
|
-
checkbox
|
|
171
|
+
this.setDisabledState(checkbox, false);
|
|
171
172
|
});
|
|
172
173
|
if (!this.allowHideAll && checkedItems.length === 1 && !this.hasFiltered) {
|
|
173
|
-
checkedItems[0].checkbox
|
|
174
|
+
this.setDisabledState(checkedItems[0].checkbox, true);
|
|
174
175
|
}
|
|
175
176
|
else if (this.hasLocked && !this.hasUnlockedFiltered) {
|
|
176
177
|
const columns = this.columns;
|
|
177
178
|
const checkedUnlocked = checkedItems.filter(item => !columns[item.index].locked);
|
|
178
179
|
if (checkedUnlocked.length === 1) {
|
|
179
|
-
checkedUnlocked[0].checkbox
|
|
180
|
+
this.setDisabledState(checkedUnlocked[0].checkbox, true);
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
183
|
}
|
|
@@ -194,6 +195,14 @@ export class ColumnListComponent {
|
|
|
194
195
|
this.hasUnlockedFiltered = false;
|
|
195
196
|
}
|
|
196
197
|
}
|
|
198
|
+
setDisabledState(element, disabled) {
|
|
199
|
+
element.disabled = disabled;
|
|
200
|
+
const parent = element.parentElement;
|
|
201
|
+
const classCommand = disabled ? 'addClass' : 'removeClass';
|
|
202
|
+
const attributeCommand = disabled ? 'setAttribute' : 'removeAttribute';
|
|
203
|
+
this.renderer[classCommand](parent, 'k-disabled');
|
|
204
|
+
this.renderer[attributeCommand](parent, 'aria-disabled', disabled ? 'true' : undefined);
|
|
205
|
+
}
|
|
197
206
|
}
|
|
198
207
|
ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ColumnListKeyboardNavigation }], target: i0.ɵɵFactoryTarget.Component });
|
|
199
208
|
ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
@@ -210,7 +219,7 @@ ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
|
210
219
|
<input
|
|
211
220
|
class="k-checkbox k-checkbox-md k-rounded-md"
|
|
212
221
|
type="checkbox"
|
|
213
|
-
[attr.data-index]="index"
|
|
222
|
+
[attr.data-index]="index"
|
|
214
223
|
[checked]="!column.hidden"
|
|
215
224
|
tabindex="-1"
|
|
216
225
|
[attr.aria-hidden]="true"
|
|
@@ -255,7 +264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
255
264
|
<input
|
|
256
265
|
class="k-checkbox k-checkbox-md k-rounded-md"
|
|
257
266
|
type="checkbox"
|
|
258
|
-
[attr.data-index]="index"
|
|
267
|
+
[attr.data-index]="index"
|
|
259
268
|
[checked]="!column.hidden"
|
|
260
269
|
tabindex="-1"
|
|
261
270
|
[attr.aria-hidden]="true"
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { Input, Directive } from '@angular/core';
|
|
6
6
|
import { GridComponent } from '../grid.component';
|
|
7
7
|
import { LocalEditService } from './local-edit.service';
|
|
8
|
-
import { Observable } from 'rxjs';
|
|
8
|
+
import { Subscription, Observable } from 'rxjs';
|
|
9
9
|
import { LocalDataChangesService } from '../editing/local-data-changes.service';
|
|
10
10
|
import { take } from 'rxjs/operators';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
@@ -18,6 +18,7 @@ export class EditingDirectiveBase {
|
|
|
18
18
|
constructor(grid, localDataChangesService) {
|
|
19
19
|
this.grid = grid;
|
|
20
20
|
this.localDataChangesService = localDataChangesService;
|
|
21
|
+
this.subscriptions = new Subscription();
|
|
21
22
|
this.defaultEditService = this.createDefaultService();
|
|
22
23
|
}
|
|
23
24
|
// Consider adding support for the dependency injection of the service to allow for specifying a generic service without code.
|
|
@@ -35,7 +36,7 @@ export class EditingDirectiveBase {
|
|
|
35
36
|
* @hidden
|
|
36
37
|
*/
|
|
37
38
|
ngOnInit() {
|
|
38
|
-
this.subscriptions
|
|
39
|
+
this.subscriptions.add(this.grid.add.subscribe(this.addHandler.bind(this)));
|
|
39
40
|
this.subscriptions.add(this.grid.remove.subscribe(this.removeHandler.bind(this)));
|
|
40
41
|
this.subscriptions.add(this.grid.cancel.subscribe(this.cancelHandler.bind(this)));
|
|
41
42
|
this.subscriptions.add(this.grid.save.subscribe(this.saveHandler.bind(this)));
|
|
@@ -618,8 +618,12 @@ export class GridComponent {
|
|
|
618
618
|
set navigable(value) {
|
|
619
619
|
if (typeof value === 'boolean') {
|
|
620
620
|
this._navigable = value ? ['table', 'pager', 'toolbar'] : [];
|
|
621
|
+
this.ctx.navigable = value;
|
|
621
622
|
return;
|
|
622
623
|
}
|
|
624
|
+
else {
|
|
625
|
+
this.ctx.navigable = value.includes('table');
|
|
626
|
+
}
|
|
623
627
|
this._navigable = value;
|
|
624
628
|
}
|
|
625
629
|
get navigable() {
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
import { Directive, ElementRef, Inject, Input, Optional, Renderer2, SkipSelf } from '@angular/core';
|
|
6
6
|
import { DefaultFocusableElement } from './default-focusable-element';
|
|
7
7
|
import { CELL_CONTEXT } from '../rendering/common/cell-context';
|
|
8
|
+
import { ContextService } from '../common/provider.service';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../common/provider.service";
|
|
9
11
|
/**
|
|
10
12
|
* A directive that controls the way focusable elements receive
|
|
11
13
|
* [focus in a navigable Grid]({% slug keyboard_navigation_grid %}).
|
|
@@ -24,10 +26,11 @@ import * as i0 from "@angular/core";
|
|
|
24
26
|
* ```
|
|
25
27
|
*/
|
|
26
28
|
export class FocusableDirective {
|
|
27
|
-
constructor(cellContext, hostElement, renderer) {
|
|
29
|
+
constructor(cellContext, hostElement, renderer, ctx) {
|
|
28
30
|
this.cellContext = cellContext;
|
|
29
31
|
this.hostElement = hostElement;
|
|
30
32
|
this.renderer = renderer;
|
|
33
|
+
this.ctx = ctx;
|
|
31
34
|
this.active = true;
|
|
32
35
|
this._enabled = true;
|
|
33
36
|
if (this.cellContext) {
|
|
@@ -58,7 +61,7 @@ export class FocusableDirective {
|
|
|
58
61
|
return this._enabled;
|
|
59
62
|
}
|
|
60
63
|
ngAfterViewInit() {
|
|
61
|
-
if (!this.element) {
|
|
64
|
+
if (!this.element && this.ctx.navigable) {
|
|
62
65
|
this.element = new DefaultFocusableElement(this.hostElement, this.renderer);
|
|
63
66
|
}
|
|
64
67
|
if (this.group && this.element) {
|
|
@@ -112,7 +115,7 @@ export class FocusableDirective {
|
|
|
112
115
|
this.element = element;
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
|
-
FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: CELL_CONTEXT, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
118
|
+
FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: CELL_CONTEXT, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
116
119
|
FocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: { enabled: ["kendoGridFocusable", "enabled"] }, ngImport: i0 });
|
|
117
120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, decorators: [{
|
|
118
121
|
type: Directive,
|
|
@@ -132,7 +135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
132
135
|
args: [CELL_CONTEXT]
|
|
133
136
|
}, {
|
|
134
137
|
type: SkipSelf
|
|
135
|
-
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { enabled: [{
|
|
138
|
+
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ContextService }]; }, propDecorators: { enabled: [{
|
|
136
139
|
type: Input,
|
|
137
140
|
args: ['kendoGridFocusable']
|
|
138
141
|
}] } });
|
|
@@ -9,7 +9,7 @@ export const packageMetadata = {
|
|
|
9
9
|
name: '@progress/kendo-angular-grid',
|
|
10
10
|
productName: 'Kendo UI for Angular',
|
|
11
11
|
productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
|
|
12
|
-
publishDate:
|
|
13
|
-
version: '15.0.2-develop.
|
|
12
|
+
publishDate: 1708345697,
|
|
13
|
+
version: '15.0.2-develop.11',
|
|
14
14
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
15
15
|
};
|
|
@@ -2968,10 +2968,11 @@ const EMPTY_CELL_CONTEXT = {};
|
|
|
2968
2968
|
* ```
|
|
2969
2969
|
*/
|
|
2970
2970
|
class FocusableDirective {
|
|
2971
|
-
constructor(cellContext, hostElement, renderer) {
|
|
2971
|
+
constructor(cellContext, hostElement, renderer, ctx) {
|
|
2972
2972
|
this.cellContext = cellContext;
|
|
2973
2973
|
this.hostElement = hostElement;
|
|
2974
2974
|
this.renderer = renderer;
|
|
2975
|
+
this.ctx = ctx;
|
|
2975
2976
|
this.active = true;
|
|
2976
2977
|
this._enabled = true;
|
|
2977
2978
|
if (this.cellContext) {
|
|
@@ -3002,7 +3003,7 @@ class FocusableDirective {
|
|
|
3002
3003
|
return this._enabled;
|
|
3003
3004
|
}
|
|
3004
3005
|
ngAfterViewInit() {
|
|
3005
|
-
if (!this.element) {
|
|
3006
|
+
if (!this.element && this.ctx.navigable) {
|
|
3006
3007
|
this.element = new DefaultFocusableElement(this.hostElement, this.renderer);
|
|
3007
3008
|
}
|
|
3008
3009
|
if (this.group && this.element) {
|
|
@@ -3056,7 +3057,7 @@ class FocusableDirective {
|
|
|
3056
3057
|
this.element = element;
|
|
3057
3058
|
}
|
|
3058
3059
|
}
|
|
3059
|
-
FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: CELL_CONTEXT, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3060
|
+
FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: CELL_CONTEXT, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3060
3061
|
FocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: { enabled: ["kendoGridFocusable", "enabled"] }, ngImport: i0 });
|
|
3061
3062
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, decorators: [{
|
|
3062
3063
|
type: Directive,
|
|
@@ -3077,7 +3078,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
3077
3078
|
args: [CELL_CONTEXT]
|
|
3078
3079
|
}, {
|
|
3079
3080
|
type: SkipSelf
|
|
3080
|
-
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }];
|
|
3081
|
+
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: ContextService }];
|
|
3081
3082
|
}, propDecorators: { enabled: [{
|
|
3082
3083
|
type: Input,
|
|
3083
3084
|
args: ['kendoGridFocusable']
|
|
@@ -4532,8 +4533,8 @@ const packageMetadata = {
|
|
|
4532
4533
|
name: '@progress/kendo-angular-grid',
|
|
4533
4534
|
productName: 'Kendo UI for Angular',
|
|
4534
4535
|
productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
|
|
4535
|
-
publishDate:
|
|
4536
|
-
version: '15.0.2-develop.
|
|
4536
|
+
publishDate: 1708345697,
|
|
4537
|
+
version: '15.0.2-develop.11',
|
|
4537
4538
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
4538
4539
|
};
|
|
4539
4540
|
|
|
@@ -12639,10 +12640,6 @@ class ColumnListComponent {
|
|
|
12639
12640
|
get columns() {
|
|
12640
12641
|
return this._columns;
|
|
12641
12642
|
}
|
|
12642
|
-
isDisabled(column) {
|
|
12643
|
-
return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
|
|
12644
|
-
(this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
|
|
12645
|
-
}
|
|
12646
12643
|
ngOnInit() {
|
|
12647
12644
|
if (!this.element) {
|
|
12648
12645
|
return;
|
|
@@ -12686,6 +12683,7 @@ class ColumnListComponent {
|
|
|
12686
12683
|
ngAfterViewInit() {
|
|
12687
12684
|
this.listNavigationService.items = this.options.toArray();
|
|
12688
12685
|
this.listNavigationService.toggle(0, true);
|
|
12686
|
+
this.updateDisabled();
|
|
12689
12687
|
}
|
|
12690
12688
|
ngOnChanges(changes) {
|
|
12691
12689
|
if (!this.service) {
|
|
@@ -12701,6 +12699,10 @@ class ColumnListComponent {
|
|
|
12701
12699
|
ngOnDestroy() {
|
|
12702
12700
|
this.domSubscriptions.unsubscribe();
|
|
12703
12701
|
}
|
|
12702
|
+
isDisabled(column) {
|
|
12703
|
+
return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
|
|
12704
|
+
(this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
|
|
12705
|
+
}
|
|
12704
12706
|
cancelChanges() {
|
|
12705
12707
|
this.forEachCheckBox((element, index) => {
|
|
12706
12708
|
element.checked = !this.columns[index].hidden;
|
|
@@ -12748,16 +12750,16 @@ class ColumnListComponent {
|
|
|
12748
12750
|
if (checkbox.checked) {
|
|
12749
12751
|
checkedItems.push({ checkbox, index });
|
|
12750
12752
|
}
|
|
12751
|
-
checkbox
|
|
12753
|
+
this.setDisabledState(checkbox, false);
|
|
12752
12754
|
});
|
|
12753
12755
|
if (!this.allowHideAll && checkedItems.length === 1 && !this.hasFiltered) {
|
|
12754
|
-
checkedItems[0].checkbox
|
|
12756
|
+
this.setDisabledState(checkedItems[0].checkbox, true);
|
|
12755
12757
|
}
|
|
12756
12758
|
else if (this.hasLocked && !this.hasUnlockedFiltered) {
|
|
12757
12759
|
const columns = this.columns;
|
|
12758
12760
|
const checkedUnlocked = checkedItems.filter(item => !columns[item.index].locked);
|
|
12759
12761
|
if (checkedUnlocked.length === 1) {
|
|
12760
|
-
checkedUnlocked[0].checkbox
|
|
12762
|
+
this.setDisabledState(checkedUnlocked[0].checkbox, true);
|
|
12761
12763
|
}
|
|
12762
12764
|
}
|
|
12763
12765
|
}
|
|
@@ -12775,6 +12777,14 @@ class ColumnListComponent {
|
|
|
12775
12777
|
this.hasUnlockedFiltered = false;
|
|
12776
12778
|
}
|
|
12777
12779
|
}
|
|
12780
|
+
setDisabledState(element, disabled) {
|
|
12781
|
+
element.disabled = disabled;
|
|
12782
|
+
const parent = element.parentElement;
|
|
12783
|
+
const classCommand = disabled ? 'addClass' : 'removeClass';
|
|
12784
|
+
const attributeCommand = disabled ? 'setAttribute' : 'removeAttribute';
|
|
12785
|
+
this.renderer[classCommand](parent, 'k-disabled');
|
|
12786
|
+
this.renderer[attributeCommand](parent, 'aria-disabled', disabled ? 'true' : undefined);
|
|
12787
|
+
}
|
|
12778
12788
|
}
|
|
12779
12789
|
ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ColumnListKeyboardNavigation }], target: i0.ɵɵFactoryTarget.Component });
|
|
12780
12790
|
ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
@@ -12791,7 +12801,7 @@ ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
|
12791
12801
|
<input
|
|
12792
12802
|
class="k-checkbox k-checkbox-md k-rounded-md"
|
|
12793
12803
|
type="checkbox"
|
|
12794
|
-
[attr.data-index]="index"
|
|
12804
|
+
[attr.data-index]="index"
|
|
12795
12805
|
[checked]="!column.hidden"
|
|
12796
12806
|
tabindex="-1"
|
|
12797
12807
|
[attr.aria-hidden]="true"
|
|
@@ -12836,7 +12846,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
12836
12846
|
<input
|
|
12837
12847
|
class="k-checkbox k-checkbox-md k-rounded-md"
|
|
12838
12848
|
type="checkbox"
|
|
12839
|
-
[attr.data-index]="index"
|
|
12849
|
+
[attr.data-index]="index"
|
|
12840
12850
|
[checked]="!column.hidden"
|
|
12841
12851
|
tabindex="-1"
|
|
12842
12852
|
[attr.aria-hidden]="true"
|
|
@@ -20543,8 +20553,12 @@ class GridComponent {
|
|
|
20543
20553
|
set navigable(value) {
|
|
20544
20554
|
if (typeof value === 'boolean') {
|
|
20545
20555
|
this._navigable = value ? ['table', 'pager', 'toolbar'] : [];
|
|
20556
|
+
this.ctx.navigable = value;
|
|
20546
20557
|
return;
|
|
20547
20558
|
}
|
|
20559
|
+
else {
|
|
20560
|
+
this.ctx.navigable = value.includes('table');
|
|
20561
|
+
}
|
|
20548
20562
|
this._navigable = value;
|
|
20549
20563
|
}
|
|
20550
20564
|
get navigable() {
|
|
@@ -26078,6 +26092,7 @@ class EditingDirectiveBase {
|
|
|
26078
26092
|
constructor(grid, localDataChangesService) {
|
|
26079
26093
|
this.grid = grid;
|
|
26080
26094
|
this.localDataChangesService = localDataChangesService;
|
|
26095
|
+
this.subscriptions = new Subscription();
|
|
26081
26096
|
this.defaultEditService = this.createDefaultService();
|
|
26082
26097
|
}
|
|
26083
26098
|
// Consider adding support for the dependency injection of the service to allow for specifying a generic service without code.
|
|
@@ -26095,7 +26110,7 @@ class EditingDirectiveBase {
|
|
|
26095
26110
|
* @hidden
|
|
26096
26111
|
*/
|
|
26097
26112
|
ngOnInit() {
|
|
26098
|
-
this.subscriptions
|
|
26113
|
+
this.subscriptions.add(this.grid.add.subscribe(this.addHandler.bind(this)));
|
|
26099
26114
|
this.subscriptions.add(this.grid.remove.subscribe(this.removeHandler.bind(this)));
|
|
26100
26115
|
this.subscriptions.add(this.grid.cancel.subscribe(this.cancelHandler.bind(this)));
|
|
26101
26116
|
this.subscriptions.add(this.grid.save.subscribe(this.saveHandler.bind(this)));
|
|
@@ -503,6 +503,76 @@ const CELL_CONTEXT = new InjectionToken('grid-cell-context');
|
|
|
503
503
|
*/
|
|
504
504
|
const EMPTY_CELL_CONTEXT = {};
|
|
505
505
|
|
|
506
|
+
/**
|
|
507
|
+
* @hidden
|
|
508
|
+
*/
|
|
509
|
+
class GridToolbarNavigationService {
|
|
510
|
+
constructor(renderer) {
|
|
511
|
+
this.renderer = renderer;
|
|
512
|
+
this.navigableElements = [];
|
|
513
|
+
this.currentActiveIndex = 0;
|
|
514
|
+
this.defaultFocusableSelector = `
|
|
515
|
+
[kendogridtoolbarfocusable],
|
|
516
|
+
[kendogridaddcommand],
|
|
517
|
+
[kendogridcancelcommand],
|
|
518
|
+
[kendogrideditcommand],
|
|
519
|
+
[kendogridremovecommand],
|
|
520
|
+
[kendogridsavecommand],
|
|
521
|
+
[kendogridexcelcommand],
|
|
522
|
+
[kendogridpdfcommand]
|
|
523
|
+
`;
|
|
524
|
+
}
|
|
525
|
+
notify() {
|
|
526
|
+
// ensure focusable elements are in the same order as in the DOM
|
|
527
|
+
this.navigableElements = this.navigableElements.length && Array.from(this.navigableElements[0].parentElement.querySelectorAll(this.defaultFocusableSelector)) || [];
|
|
528
|
+
this.currentActiveIndex = 0;
|
|
529
|
+
this.updateFocus();
|
|
530
|
+
}
|
|
531
|
+
focus() {
|
|
532
|
+
this.navigableElements[this.currentActiveIndex]?.focus();
|
|
533
|
+
}
|
|
534
|
+
updateFocus() {
|
|
535
|
+
if (!this.navigableElements.length) {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
this.navigableElements.forEach(el => {
|
|
539
|
+
this.renderer.setAttribute(el, 'tabindex', '-1');
|
|
540
|
+
});
|
|
541
|
+
this.renderer.setAttribute(this.navigableElements[this.currentActiveIndex], 'tabindex', '0');
|
|
542
|
+
if (isDocumentAvailable() && document.activeElement.closest('.k-toolbar')) {
|
|
543
|
+
this.navigableElements[this.currentActiveIndex].focus();
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
GridToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
548
|
+
GridToolbarNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridToolbarNavigationService });
|
|
549
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridToolbarNavigationService, decorators: [{
|
|
550
|
+
type: Injectable
|
|
551
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* @hidden
|
|
555
|
+
*
|
|
556
|
+
* The Context service is used to provide common
|
|
557
|
+
* services and DI tokens for a Grid instance.
|
|
558
|
+
*
|
|
559
|
+
* This keeps the constructor parameters stable
|
|
560
|
+
* and a avoids dependency cycles between components.
|
|
561
|
+
*/
|
|
562
|
+
class ContextService {
|
|
563
|
+
constructor(renderer, localization) {
|
|
564
|
+
this.renderer = renderer;
|
|
565
|
+
this.localization = localization;
|
|
566
|
+
this.topToolbarNavigation = new GridToolbarNavigationService(this.renderer);
|
|
567
|
+
this.bottomToolbarNavigation = new GridToolbarNavigationService(this.renderer);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
571
|
+
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService });
|
|
572
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, decorators: [{
|
|
573
|
+
type: Injectable
|
|
574
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LocalizationService }]; } });
|
|
575
|
+
|
|
506
576
|
/**
|
|
507
577
|
* A directive that controls the way focusable elements receive
|
|
508
578
|
* [focus in a navigable Grid]({% slug keyboard_navigation_grid %}).
|
|
@@ -521,10 +591,11 @@ const EMPTY_CELL_CONTEXT = {};
|
|
|
521
591
|
* ```
|
|
522
592
|
*/
|
|
523
593
|
class FocusableDirective {
|
|
524
|
-
constructor(cellContext, hostElement, renderer) {
|
|
594
|
+
constructor(cellContext, hostElement, renderer, ctx) {
|
|
525
595
|
this.cellContext = cellContext;
|
|
526
596
|
this.hostElement = hostElement;
|
|
527
597
|
this.renderer = renderer;
|
|
598
|
+
this.ctx = ctx;
|
|
528
599
|
this.active = true;
|
|
529
600
|
this._enabled = true;
|
|
530
601
|
if (this.cellContext) {
|
|
@@ -555,7 +626,7 @@ class FocusableDirective {
|
|
|
555
626
|
return this._enabled;
|
|
556
627
|
}
|
|
557
628
|
ngAfterViewInit() {
|
|
558
|
-
if (!this.element) {
|
|
629
|
+
if (!this.element && this.ctx.navigable) {
|
|
559
630
|
this.element = new DefaultFocusableElement(this.hostElement, this.renderer);
|
|
560
631
|
}
|
|
561
632
|
if (this.group && this.element) {
|
|
@@ -609,7 +680,7 @@ class FocusableDirective {
|
|
|
609
680
|
this.element = element;
|
|
610
681
|
}
|
|
611
682
|
}
|
|
612
|
-
FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: CELL_CONTEXT, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
683
|
+
FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: CELL_CONTEXT, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
613
684
|
FocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: { enabled: ["kendoGridFocusable", "enabled"] }, ngImport: i0 });
|
|
614
685
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, decorators: [{
|
|
615
686
|
type: Directive,
|
|
@@ -629,7 +700,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
629
700
|
args: [CELL_CONTEXT]
|
|
630
701
|
}, {
|
|
631
702
|
type: SkipSelf
|
|
632
|
-
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { enabled: [{
|
|
703
|
+
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: ContextService }]; }, propDecorators: { enabled: [{
|
|
633
704
|
type: Input,
|
|
634
705
|
args: ['kendoGridFocusable']
|
|
635
706
|
}] } });
|
|
@@ -1454,76 +1525,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
1454
1525
|
type: Injectable
|
|
1455
1526
|
}] });
|
|
1456
1527
|
|
|
1457
|
-
/**
|
|
1458
|
-
* @hidden
|
|
1459
|
-
*/
|
|
1460
|
-
class GridToolbarNavigationService {
|
|
1461
|
-
constructor(renderer) {
|
|
1462
|
-
this.renderer = renderer;
|
|
1463
|
-
this.navigableElements = [];
|
|
1464
|
-
this.currentActiveIndex = 0;
|
|
1465
|
-
this.defaultFocusableSelector = `
|
|
1466
|
-
[kendogridtoolbarfocusable],
|
|
1467
|
-
[kendogridaddcommand],
|
|
1468
|
-
[kendogridcancelcommand],
|
|
1469
|
-
[kendogrideditcommand],
|
|
1470
|
-
[kendogridremovecommand],
|
|
1471
|
-
[kendogridsavecommand],
|
|
1472
|
-
[kendogridexcelcommand],
|
|
1473
|
-
[kendogridpdfcommand]
|
|
1474
|
-
`;
|
|
1475
|
-
}
|
|
1476
|
-
notify() {
|
|
1477
|
-
// ensure focusable elements are in the same order as in the DOM
|
|
1478
|
-
this.navigableElements = this.navigableElements.length && Array.from(this.navigableElements[0].parentElement.querySelectorAll(this.defaultFocusableSelector)) || [];
|
|
1479
|
-
this.currentActiveIndex = 0;
|
|
1480
|
-
this.updateFocus();
|
|
1481
|
-
}
|
|
1482
|
-
focus() {
|
|
1483
|
-
this.navigableElements[this.currentActiveIndex]?.focus();
|
|
1484
|
-
}
|
|
1485
|
-
updateFocus() {
|
|
1486
|
-
if (!this.navigableElements.length) {
|
|
1487
|
-
return;
|
|
1488
|
-
}
|
|
1489
|
-
this.navigableElements.forEach(el => {
|
|
1490
|
-
this.renderer.setAttribute(el, 'tabindex', '-1');
|
|
1491
|
-
});
|
|
1492
|
-
this.renderer.setAttribute(this.navigableElements[this.currentActiveIndex], 'tabindex', '0');
|
|
1493
|
-
if (isDocumentAvailable() && document.activeElement.closest('.k-toolbar')) {
|
|
1494
|
-
this.navigableElements[this.currentActiveIndex].focus();
|
|
1495
|
-
}
|
|
1496
|
-
}
|
|
1497
|
-
}
|
|
1498
|
-
GridToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1499
|
-
GridToolbarNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridToolbarNavigationService });
|
|
1500
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridToolbarNavigationService, decorators: [{
|
|
1501
|
-
type: Injectable
|
|
1502
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
|
|
1503
|
-
|
|
1504
|
-
/**
|
|
1505
|
-
* @hidden
|
|
1506
|
-
*
|
|
1507
|
-
* The Context service is used to provide common
|
|
1508
|
-
* services and DI tokens for a Grid instance.
|
|
1509
|
-
*
|
|
1510
|
-
* This keeps the constructor parameters stable
|
|
1511
|
-
* and a avoids dependency cycles between components.
|
|
1512
|
-
*/
|
|
1513
|
-
class ContextService {
|
|
1514
|
-
constructor(renderer, localization) {
|
|
1515
|
-
this.renderer = renderer;
|
|
1516
|
-
this.localization = localization;
|
|
1517
|
-
this.topToolbarNavigation = new GridToolbarNavigationService(this.renderer);
|
|
1518
|
-
this.bottomToolbarNavigation = new GridToolbarNavigationService(this.renderer);
|
|
1519
|
-
}
|
|
1520
|
-
}
|
|
1521
|
-
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1522
|
-
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService });
|
|
1523
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, decorators: [{
|
|
1524
|
-
type: Injectable
|
|
1525
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LocalizationService }]; } });
|
|
1526
|
-
|
|
1527
1528
|
const isInSameGrid = (element, gridElement) => closest(element, matchesNodeName('kendo-grid')) === gridElement;
|
|
1528
1529
|
const matchHeaderCell = matchesNodeName('th');
|
|
1529
1530
|
const matchDataCell = matchesNodeName('td');
|
|
@@ -4500,8 +4501,8 @@ const packageMetadata = {
|
|
|
4500
4501
|
name: '@progress/kendo-angular-grid',
|
|
4501
4502
|
productName: 'Kendo UI for Angular',
|
|
4502
4503
|
productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
|
|
4503
|
-
publishDate:
|
|
4504
|
-
version: '15.0.2-develop.
|
|
4504
|
+
publishDate: 1708345697,
|
|
4505
|
+
version: '15.0.2-develop.11',
|
|
4505
4506
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
4506
4507
|
};
|
|
4507
4508
|
|
|
@@ -12571,10 +12572,6 @@ class ColumnListComponent {
|
|
|
12571
12572
|
get columns() {
|
|
12572
12573
|
return this._columns;
|
|
12573
12574
|
}
|
|
12574
|
-
isDisabled(column) {
|
|
12575
|
-
return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
|
|
12576
|
-
(this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
|
|
12577
|
-
}
|
|
12578
12575
|
ngOnInit() {
|
|
12579
12576
|
if (!this.element) {
|
|
12580
12577
|
return;
|
|
@@ -12618,6 +12615,7 @@ class ColumnListComponent {
|
|
|
12618
12615
|
ngAfterViewInit() {
|
|
12619
12616
|
this.listNavigationService.items = this.options.toArray();
|
|
12620
12617
|
this.listNavigationService.toggle(0, true);
|
|
12618
|
+
this.updateDisabled();
|
|
12621
12619
|
}
|
|
12622
12620
|
ngOnChanges(changes) {
|
|
12623
12621
|
if (!this.service) {
|
|
@@ -12633,6 +12631,10 @@ class ColumnListComponent {
|
|
|
12633
12631
|
ngOnDestroy() {
|
|
12634
12632
|
this.domSubscriptions.unsubscribe();
|
|
12635
12633
|
}
|
|
12634
|
+
isDisabled(column) {
|
|
12635
|
+
return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
|
|
12636
|
+
(this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
|
|
12637
|
+
}
|
|
12636
12638
|
cancelChanges() {
|
|
12637
12639
|
this.forEachCheckBox((element, index) => {
|
|
12638
12640
|
element.checked = !this.columns[index].hidden;
|
|
@@ -12680,16 +12682,16 @@ class ColumnListComponent {
|
|
|
12680
12682
|
if (checkbox.checked) {
|
|
12681
12683
|
checkedItems.push({ checkbox, index });
|
|
12682
12684
|
}
|
|
12683
|
-
checkbox
|
|
12685
|
+
this.setDisabledState(checkbox, false);
|
|
12684
12686
|
});
|
|
12685
12687
|
if (!this.allowHideAll && checkedItems.length === 1 && !this.hasFiltered) {
|
|
12686
|
-
checkedItems[0].checkbox
|
|
12688
|
+
this.setDisabledState(checkedItems[0].checkbox, true);
|
|
12687
12689
|
}
|
|
12688
12690
|
else if (this.hasLocked && !this.hasUnlockedFiltered) {
|
|
12689
12691
|
const columns = this.columns;
|
|
12690
12692
|
const checkedUnlocked = checkedItems.filter(item => !columns[item.index].locked);
|
|
12691
12693
|
if (checkedUnlocked.length === 1) {
|
|
12692
|
-
checkedUnlocked[0].checkbox
|
|
12694
|
+
this.setDisabledState(checkedUnlocked[0].checkbox, true);
|
|
12693
12695
|
}
|
|
12694
12696
|
}
|
|
12695
12697
|
}
|
|
@@ -12707,6 +12709,14 @@ class ColumnListComponent {
|
|
|
12707
12709
|
this.hasUnlockedFiltered = false;
|
|
12708
12710
|
}
|
|
12709
12711
|
}
|
|
12712
|
+
setDisabledState(element, disabled) {
|
|
12713
|
+
element.disabled = disabled;
|
|
12714
|
+
const parent = element.parentElement;
|
|
12715
|
+
const classCommand = disabled ? 'addClass' : 'removeClass';
|
|
12716
|
+
const attributeCommand = disabled ? 'setAttribute' : 'removeAttribute';
|
|
12717
|
+
this.renderer[classCommand](parent, 'k-disabled');
|
|
12718
|
+
this.renderer[attributeCommand](parent, 'aria-disabled', disabled ? 'true' : undefined);
|
|
12719
|
+
}
|
|
12710
12720
|
}
|
|
12711
12721
|
ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ColumnListKeyboardNavigation }], target: i0.ɵɵFactoryTarget.Component });
|
|
12712
12722
|
ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
@@ -12723,7 +12733,7 @@ ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
|
12723
12733
|
<input
|
|
12724
12734
|
class="k-checkbox k-checkbox-md k-rounded-md"
|
|
12725
12735
|
type="checkbox"
|
|
12726
|
-
[attr.data-index]="index"
|
|
12736
|
+
[attr.data-index]="index"
|
|
12727
12737
|
[checked]="!column.hidden"
|
|
12728
12738
|
tabindex="-1"
|
|
12729
12739
|
[attr.aria-hidden]="true"
|
|
@@ -12768,7 +12778,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
12768
12778
|
<input
|
|
12769
12779
|
class="k-checkbox k-checkbox-md k-rounded-md"
|
|
12770
12780
|
type="checkbox"
|
|
12771
|
-
[attr.data-index]="index"
|
|
12781
|
+
[attr.data-index]="index"
|
|
12772
12782
|
[checked]="!column.hidden"
|
|
12773
12783
|
tabindex="-1"
|
|
12774
12784
|
[attr.aria-hidden]="true"
|
|
@@ -20456,8 +20466,12 @@ class GridComponent {
|
|
|
20456
20466
|
set navigable(value) {
|
|
20457
20467
|
if (typeof value === 'boolean') {
|
|
20458
20468
|
this._navigable = value ? ['table', 'pager', 'toolbar'] : [];
|
|
20469
|
+
this.ctx.navigable = value;
|
|
20459
20470
|
return;
|
|
20460
20471
|
}
|
|
20472
|
+
else {
|
|
20473
|
+
this.ctx.navigable = value.includes('table');
|
|
20474
|
+
}
|
|
20461
20475
|
this._navigable = value;
|
|
20462
20476
|
}
|
|
20463
20477
|
get navigable() {
|
|
@@ -25975,6 +25989,7 @@ class EditingDirectiveBase {
|
|
|
25975
25989
|
constructor(grid, localDataChangesService) {
|
|
25976
25990
|
this.grid = grid;
|
|
25977
25991
|
this.localDataChangesService = localDataChangesService;
|
|
25992
|
+
this.subscriptions = new Subscription();
|
|
25978
25993
|
this.defaultEditService = this.createDefaultService();
|
|
25979
25994
|
}
|
|
25980
25995
|
// Consider adding support for the dependency injection of the service to allow for specifying a generic service without code.
|
|
@@ -25992,7 +26007,7 @@ class EditingDirectiveBase {
|
|
|
25992
26007
|
* @hidden
|
|
25993
26008
|
*/
|
|
25994
26009
|
ngOnInit() {
|
|
25995
|
-
this.subscriptions
|
|
26010
|
+
this.subscriptions.add(this.grid.add.subscribe(this.addHandler.bind(this)));
|
|
25996
26011
|
this.subscriptions.add(this.grid.remove.subscribe(this.removeHandler.bind(this)));
|
|
25997
26012
|
this.subscriptions.add(this.grid.cancel.subscribe(this.cancelHandler.bind(this)));
|
|
25998
26013
|
this.subscriptions.add(this.grid.save.subscribe(this.saveHandler.bind(this)));
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { AfterViewInit, ElementRef, OnDestroy, Renderer2 } from '@angular/core';
|
|
6
6
|
import { FocusableElement } from './focusable-element.interface';
|
|
7
7
|
import { CellContext } from '../rendering/common/cell-context';
|
|
8
|
+
import { ContextService } from '../common/provider.service';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
/**
|
|
10
11
|
* A directive that controls the way focusable elements receive
|
|
@@ -27,6 +28,7 @@ export declare class FocusableDirective implements FocusableElement, AfterViewIn
|
|
|
27
28
|
private cellContext;
|
|
28
29
|
private hostElement;
|
|
29
30
|
private renderer;
|
|
31
|
+
private ctx;
|
|
30
32
|
private active;
|
|
31
33
|
private group;
|
|
32
34
|
private element;
|
|
@@ -36,7 +38,7 @@ export declare class FocusableDirective implements FocusableElement, AfterViewIn
|
|
|
36
38
|
*/
|
|
37
39
|
set enabled(value: any);
|
|
38
40
|
get enabled(): any;
|
|
39
|
-
constructor(cellContext: CellContext, hostElement: ElementRef, renderer: Renderer2);
|
|
41
|
+
constructor(cellContext: CellContext, hostElement: ElementRef, renderer: Renderer2, ctx: ContextService);
|
|
40
42
|
ngAfterViewInit(): void;
|
|
41
43
|
ngOnDestroy(): void;
|
|
42
44
|
/**
|
|
@@ -63,6 +65,6 @@ export declare class FocusableDirective implements FocusableElement, AfterViewIn
|
|
|
63
65
|
* @hidden
|
|
64
66
|
*/
|
|
65
67
|
registerElement(element: FocusableElement): void;
|
|
66
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FocusableDirective, [{ optional: true; skipSelf: true; }, null, null]>;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FocusableDirective, [{ optional: true; skipSelf: true; }, null, null, null]>;
|
|
67
69
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FocusableDirective, "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", never, { "enabled": "kendoGridFocusable"; }, {}, never>;
|
|
68
70
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-angular-grid",
|
|
3
|
-
"version": "15.0.2-develop.
|
|
3
|
+
"version": "15.0.2-develop.11",
|
|
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",
|
|
@@ -33,25 +33,26 @@
|
|
|
33
33
|
"@progress/kendo-data-query": "^1.0.0",
|
|
34
34
|
"@progress/kendo-drawing": "^1.19.0",
|
|
35
35
|
"@progress/kendo-licensing": "^1.0.2",
|
|
36
|
-
"@progress/kendo-angular-buttons": "15.0.2-develop.
|
|
37
|
-
"@progress/kendo-angular-common": "15.0.2-develop.
|
|
38
|
-
"@progress/kendo-angular-dateinputs": "15.0.2-develop.
|
|
39
|
-
"@progress/kendo-angular-layout": "15.0.2-develop.
|
|
40
|
-
"@progress/kendo-angular-dropdowns": "15.0.2-develop.
|
|
41
|
-
"@progress/kendo-angular-excel-export": "15.0.2-develop.
|
|
42
|
-
"@progress/kendo-angular-icons": "15.0.2-develop.
|
|
43
|
-
"@progress/kendo-angular-inputs": "15.0.2-develop.
|
|
44
|
-
"@progress/kendo-angular-intl": "15.0.2-develop.
|
|
45
|
-
"@progress/kendo-angular-l10n": "15.0.2-develop.
|
|
46
|
-
"@progress/kendo-angular-label": "15.0.2-develop.
|
|
47
|
-
"@progress/kendo-angular-pdf-export": "15.0.2-develop.
|
|
48
|
-
"@progress/kendo-angular-popup": "15.0.2-develop.
|
|
49
|
-
"@progress/kendo-angular-utils": "15.0.2-develop.
|
|
50
|
-
"rxjs": "^6.5.3 || ^7.0.0"
|
|
36
|
+
"@progress/kendo-angular-buttons": "15.0.2-develop.11",
|
|
37
|
+
"@progress/kendo-angular-common": "15.0.2-develop.11",
|
|
38
|
+
"@progress/kendo-angular-dateinputs": "15.0.2-develop.11",
|
|
39
|
+
"@progress/kendo-angular-layout": "15.0.2-develop.11",
|
|
40
|
+
"@progress/kendo-angular-dropdowns": "15.0.2-develop.11",
|
|
41
|
+
"@progress/kendo-angular-excel-export": "15.0.2-develop.11",
|
|
42
|
+
"@progress/kendo-angular-icons": "15.0.2-develop.11",
|
|
43
|
+
"@progress/kendo-angular-inputs": "15.0.2-develop.11",
|
|
44
|
+
"@progress/kendo-angular-intl": "15.0.2-develop.11",
|
|
45
|
+
"@progress/kendo-angular-l10n": "15.0.2-develop.11",
|
|
46
|
+
"@progress/kendo-angular-label": "15.0.2-develop.11",
|
|
47
|
+
"@progress/kendo-angular-pdf-export": "15.0.2-develop.11",
|
|
48
|
+
"@progress/kendo-angular-popup": "15.0.2-develop.11",
|
|
49
|
+
"@progress/kendo-angular-utils": "15.0.2-develop.11",
|
|
50
|
+
"rxjs": "^6.5.3 || ^7.0.0",
|
|
51
|
+
"@progress/kendo-angular-spreadsheet": "15.0.2-develop.11"
|
|
51
52
|
},
|
|
52
53
|
"dependencies": {
|
|
53
54
|
"tslib": "^2.3.1",
|
|
54
|
-
"@progress/kendo-angular-schematics": "15.0.2-develop.
|
|
55
|
+
"@progress/kendo-angular-schematics": "15.0.2-develop.11",
|
|
55
56
|
"@progress/kendo-common": "^0.2.0",
|
|
56
57
|
"@progress/kendo-file-saver": "^1.0.0"
|
|
57
58
|
},
|
|
@@ -4,13 +4,13 @@ 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 dep of the dropdowns
|
|
7
|
-
'@progress/kendo-angular-treeview': '15.0.2-develop.
|
|
7
|
+
'@progress/kendo-angular-treeview': '15.0.2-develop.11',
|
|
8
8
|
// peer dependency of kendo-angular-inputs
|
|
9
|
-
'@progress/kendo-angular-dialog': '15.0.2-develop.
|
|
9
|
+
'@progress/kendo-angular-dialog': '15.0.2-develop.11',
|
|
10
10
|
// peer dependency of kendo-angular-icons
|
|
11
11
|
'@progress/kendo-svg-icons': '^2.0.0',
|
|
12
12
|
// peer dependency of kendo-angular-layout
|
|
13
|
-
'@progress/kendo-angular-progressbar': '15.0.2-develop.
|
|
13
|
+
'@progress/kendo-angular-progressbar': '15.0.2-develop.11'
|
|
14
14
|
} });
|
|
15
15
|
return (0, schematics_1.externalSchematic)('@progress/kendo-angular-schematics', 'ng-add', finalOptions);
|
|
16
16
|
}
|