@clr/angular 17.2.0 → 17.3.0
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/accordion/stepper/stepper-panel.d.ts +1 -1
- package/button/button-loading/loading-button.d.ts +2 -2
- package/clarity.api.md +86 -55
- package/data/datagrid/built-in/filters/datagrid-numeric-filter.d.ts +1 -1
- package/data/datagrid/built-in/filters/datagrid-string-filter.d.ts +1 -1
- package/data/datagrid/datagrid-detail-header.d.ts +4 -1
- package/data/datagrid/datagrid-detail.d.ts +5 -1
- package/data/datagrid/datagrid-filter.d.ts +5 -3
- package/data/datagrid/datagrid-if-detail.d.ts +9 -0
- package/data/datagrid/datagrid-pagination.d.ts +1 -1
- package/data/datagrid/datagrid-row.d.ts +5 -3
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +5 -2
- package/data/datagrid/datagrid.d.ts +8 -2
- package/data/datagrid/enums/column-changes.enum.d.ts +2 -1
- package/data/datagrid/providers/column-resizer.service.d.ts +1 -1
- package/data/datagrid/providers/columns.service.d.ts +1 -0
- package/data/datagrid/providers/detail.service.d.ts +3 -0
- package/data/datagrid/render/cell-renderer.d.ts +1 -1
- package/data/datagrid/render/header-renderer.d.ts +1 -1
- package/data/datagrid/render/main-renderer.d.ts +2 -2
- package/data/datagrid/render/row-renderer.d.ts +2 -1
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +1 -0
- package/esm2020/accordion/stepper/stepper-panel.mjs +4 -1
- package/esm2020/button/button-loading/loading-button.mjs +1 -1
- package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +1 -1
- package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +1 -1
- package/esm2020/data/datagrid/datagrid-action-overflow.mjs +3 -1
- package/esm2020/data/datagrid/datagrid-column-separator.mjs +1 -1
- package/esm2020/data/datagrid/datagrid-detail-header.mjs +12 -6
- package/esm2020/data/datagrid/datagrid-detail.mjs +36 -8
- package/esm2020/data/datagrid/datagrid-filter.mjs +22 -13
- package/esm2020/data/datagrid/datagrid-if-detail.mjs +30 -7
- package/esm2020/data/datagrid/datagrid-pagination.mjs +2 -2
- package/esm2020/data/datagrid/datagrid-placeholder.mjs +5 -5
- package/esm2020/data/datagrid/datagrid-row.mjs +12 -4
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +13 -5
- package/esm2020/data/datagrid/datagrid.mjs +43 -21
- package/esm2020/data/datagrid/enums/column-changes.enum.mjs +3 -2
- package/esm2020/data/datagrid/providers/column-resizer.service.mjs +1 -1
- package/esm2020/data/datagrid/providers/columns.service.mjs +9 -3
- package/esm2020/data/datagrid/providers/detail.service.mjs +10 -5
- package/esm2020/data/datagrid/render/cell-renderer.mjs +1 -3
- package/esm2020/data/datagrid/render/header-renderer.mjs +1 -1
- package/esm2020/data/datagrid/render/main-renderer.mjs +29 -19
- package/esm2020/data/datagrid/render/row-renderer.mjs +6 -3
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +7 -4
- package/esm2020/data/stack-view/stack-block.mjs +4 -2
- package/esm2020/data/tree-view/tree-node.mjs +2 -2
- package/esm2020/forms/checkbox/checkbox-container.mjs +9 -5
- package/esm2020/forms/checkbox/checkbox.mjs +1 -1
- package/esm2020/forms/combobox/combobox-container.mjs +1 -1
- package/esm2020/forms/combobox/combobox.mjs +1 -1
- package/esm2020/forms/combobox/option.mjs +5 -4
- package/esm2020/forms/combobox/options.mjs +1 -1
- package/esm2020/forms/common/abstract-container.mjs +5 -2
- package/esm2020/forms/datalist/datalist-input.mjs +1 -1
- package/esm2020/forms/datepicker/date-container.mjs +1 -1
- package/esm2020/forms/datepicker/date-input.mjs +1 -1
- package/esm2020/forms/datepicker/monthpicker.mjs +1 -1
- package/esm2020/forms/datepicker/yearpicker.mjs +1 -1
- package/esm2020/forms/password/password.mjs +1 -1
- package/esm2020/forms/radio/radio-container.mjs +9 -5
- package/esm2020/layout/nav/nav-level.mjs +16 -12
- package/esm2020/layout/tabs/tab-link.directive.mjs +1 -1
- package/esm2020/modal/modal.mjs +15 -5
- package/esm2020/modal/side-panel.mjs +4 -2
- package/esm2020/popover/common/abstract-popover.mjs +1 -1
- package/esm2020/popover/signpost/signpost-content.mjs +1 -1
- package/esm2020/popover/signpost/signpost-trigger.mjs +1 -1
- package/esm2020/popover/tooltip/tooltip-content.mjs +1 -1
- package/esm2020/timeline/timeline-step.mjs +3 -3
- package/esm2020/timeline/timeline.mjs +3 -3
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +1 -1
- package/esm2020/utils/cdk/cdk-drag.module.mjs +1 -1
- package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +1 -1
- package/esm2020/utils/conditional/if-expanded.directive.mjs +1 -1
- package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +1 -1
- package/esm2020/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.mjs +1 -1
- package/esm2020/utils/focus/key-focus/key-focus-item.mjs +1 -1
- package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +1 -1
- package/esm2020/utils/i18n/common-strings.default.mjs +2 -2
- package/esm2020/utils/popover/popover-close-button.mjs +1 -1
- package/esm2020/utils/popover/providers/popover-events.service.mjs +1 -1
- package/esm2020/wizard/wizard-stepnav-item.mjs +13 -19
- package/esm2020/wizard/wizard.mjs +3 -3
- package/esm2020/wizard/wizard.module.mjs +3 -3
- package/fesm2015/clr-angular.mjs +482 -320
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +473 -315
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/checkbox/checkbox.d.ts +1 -1
- package/forms/combobox/combobox-container.d.ts +1 -1
- package/forms/combobox/combobox.d.ts +4 -4
- package/forms/combobox/option.d.ts +3 -3
- package/forms/combobox/options.d.ts +1 -1
- package/forms/datalist/datalist-input.d.ts +1 -1
- package/forms/datepicker/date-input.d.ts +2 -2
- package/forms/datepicker/monthpicker.d.ts +1 -1
- package/forms/datepicker/yearpicker.d.ts +1 -1
- package/forms/password/password.d.ts +1 -1
- package/layout/nav/nav-level.d.ts +0 -1
- package/layout/tabs/tab-link.directive.d.ts +2 -2
- package/modal/modal.d.ts +3 -1
- package/modal/side-panel.d.ts +1 -1
- package/package.json +5 -5
- package/popover/common/abstract-popover.d.ts +1 -1
- package/popover/signpost/signpost-content.d.ts +1 -1
- package/popover/signpost/signpost-trigger.d.ts +1 -1
- package/popover/tooltip/tooltip-content.d.ts +1 -1
- package/src/utils/popover/README.md +1 -1
- package/timeline/timeline-step.d.ts +1 -1
- package/utils/animations/expandable-animation/expandable-animation.d.ts +1 -1
- package/utils/cdk/cdk-drag.module.d.ts +1 -1
- package/utils/cdk/cdk-trap-focus.module.d.ts +1 -1
- package/utils/conditional/if-expanded.directive.d.ts +1 -1
- package/utils/focus/focus-on-view-init/focus-on-view-init.d.ts +1 -1
- package/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.d.ts +1 -1
- package/utils/focus/key-focus/key-focus-item.d.ts +2 -2
- package/utils/focus/key-focus/roving-tabindex.d.ts +1 -1
- package/utils/popover/popover-close-button.d.ts +1 -1
- package/utils/popover/providers/popover-events.service.d.ts +3 -3
- package/wizard/wizard.d.ts +1 -1
package/fesm2015/clr-angular.mjs
CHANGED
|
@@ -19,7 +19,6 @@ import { _RecycleViewRepeaterStrategy } from '@angular/cdk/collections';
|
|
|
19
19
|
import * as i3$1 from '@angular/cdk/scrolling';
|
|
20
20
|
import { FixedSizeVirtualScrollStrategy, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
21
21
|
import * as i1$3 from '@angular/router';
|
|
22
|
-
import '@cds/core/internal-components/close-button/register.js';
|
|
23
22
|
import '@cds/core/icon/register';
|
|
24
23
|
|
|
25
24
|
/*
|
|
@@ -327,7 +326,7 @@ const commonStringsDefault = {
|
|
|
327
326
|
singleSelectionAriaLabel: 'Single selection header',
|
|
328
327
|
singleActionableAriaLabel: 'Single actionable header',
|
|
329
328
|
detailExpandableAriaLabel: 'Toggle more row content',
|
|
330
|
-
datagridFilterAriaLabel: '
|
|
329
|
+
datagridFilterAriaLabel: '{COLUMN} filter',
|
|
331
330
|
datagridFilterDialogAriaLabel: 'Filter dialog',
|
|
332
331
|
columnSeparatorAriaLabel: 'Column resize handle',
|
|
333
332
|
columnSeparatorDescription: 'Use left or right key to resize the column',
|
|
@@ -1164,6 +1163,9 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1164
1163
|
// set panel status on form status change only after the form becomes invalid
|
|
1165
1164
|
const invalidStatusTrigger = this.formGroup.statusChanges.pipe(filter(status => status === 'INVALID'));
|
|
1166
1165
|
this.subscriptions.push(this.formGroup.statusChanges.pipe(skipUntil(invalidStatusTrigger), distinctUntilChanged()).subscribe(status => {
|
|
1166
|
+
if (!this.formGroup.touched) {
|
|
1167
|
+
return;
|
|
1168
|
+
}
|
|
1167
1169
|
if (status === 'VALID') {
|
|
1168
1170
|
this.stepperService.setPanelValid(this.id);
|
|
1169
1171
|
}
|
|
@@ -4771,7 +4773,10 @@ class ClrAbstractContainer {
|
|
|
4771
4773
|
this.subscriptions = [];
|
|
4772
4774
|
this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
|
|
4773
4775
|
this.state = state;
|
|
4774
|
-
|
|
4776
|
+
// Make sure everything is updated before dispatching the values for helpers
|
|
4777
|
+
setTimeout(() => {
|
|
4778
|
+
this.updateHelpers();
|
|
4779
|
+
});
|
|
4775
4780
|
}));
|
|
4776
4781
|
this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
|
|
4777
4782
|
this.control = control;
|
|
@@ -5639,8 +5644,10 @@ ClrCheckboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
5639
5644
|
<label *ngIf="!label && addGrid()"></label>
|
|
5640
5645
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
5641
5646
|
<ng-content select="clr-checkbox-wrapper,clr-toggle-wrapper"></ng-content>
|
|
5642
|
-
<div class="clr-subtext-wrapper">
|
|
5643
|
-
<ng-content select="clr-control-helper"
|
|
5647
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
5648
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
5649
|
+
</div>
|
|
5650
|
+
<div *ngIf="showInvalid || showValid" class="clr-subtext-wrapper">
|
|
5644
5651
|
<cds-icon
|
|
5645
5652
|
*ngIf="showInvalid"
|
|
5646
5653
|
class="clr-validate-icon"
|
|
@@ -5669,8 +5676,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5669
5676
|
<label *ngIf="!label && addGrid()"></label>
|
|
5670
5677
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
5671
5678
|
<ng-content select="clr-checkbox-wrapper,clr-toggle-wrapper"></ng-content>
|
|
5672
|
-
<div class="clr-subtext-wrapper">
|
|
5673
|
-
<ng-content select="clr-control-helper"
|
|
5679
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
5680
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
5681
|
+
</div>
|
|
5682
|
+
<div *ngIf="showInvalid || showValid" class="clr-subtext-wrapper">
|
|
5674
5683
|
<cds-icon
|
|
5675
5684
|
*ngIf="showInvalid"
|
|
5676
5685
|
class="clr-validate-icon"
|
|
@@ -6860,7 +6869,8 @@ class ClrOption {
|
|
|
6860
6869
|
this.optionProxy.id = this._id;
|
|
6861
6870
|
}
|
|
6862
6871
|
}
|
|
6863
|
-
onClick() {
|
|
6872
|
+
onClick(event) {
|
|
6873
|
+
event.stopPropagation();
|
|
6864
6874
|
if (this.optionSelectionService.multiselectable) {
|
|
6865
6875
|
this.optionSelectionService.toggle(this.value);
|
|
6866
6876
|
}
|
|
@@ -6875,7 +6885,7 @@ class ClrOption {
|
|
|
6875
6885
|
}
|
|
6876
6886
|
}
|
|
6877
6887
|
ClrOption.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOption, deps: [{ token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: ComboboxFocusHandler }, { token: OptionSelectionService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6878
|
-
ClrOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOption, selector: "clr-option", inputs: { optionId: ["id", "optionId"], value: ["clrValue", "value"] }, host: { listeners: { "click": "onClick()" }, properties: { "class.clr-combobox-option": "true", "attr.role": "\"option\"", "attr.tabindex": "-1", "attr.id": "optionId", "class.active": "this.selected", "class.clr-focus": "this.focusClass" } }, ngImport: i0, template: `
|
|
6888
|
+
ClrOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOption, selector: "clr-option", inputs: { optionId: ["id", "optionId"], value: ["clrValue", "value"] }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.clr-combobox-option": "true", "attr.role": "\"option\"", "attr.tabindex": "-1", "attr.id": "optionId", "class.active": "this.selected", "class.clr-focus": "this.focusClass" } }, ngImport: i0, template: `
|
|
6879
6889
|
<ng-content></ng-content>
|
|
6880
6890
|
<span *ngIf="selected" class="clr-sr-only">{{ commonStrings.keys.comboboxSelected }}</span>
|
|
6881
6891
|
`, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
@@ -6909,7 +6919,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
6909
6919
|
args: ['class.clr-focus']
|
|
6910
6920
|
}], onClick: [{
|
|
6911
6921
|
type: HostListener,
|
|
6912
|
-
args: ['click']
|
|
6922
|
+
args: ['click', ['$event']]
|
|
6913
6923
|
}] } });
|
|
6914
6924
|
|
|
6915
6925
|
/*
|
|
@@ -11089,8 +11099,10 @@ ClrRadioContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
11089
11099
|
<label *ngIf="!label && addGrid()"></label>
|
|
11090
11100
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
11091
11101
|
<ng-content select="clr-radio-wrapper"></ng-content>
|
|
11092
|
-
<div class="clr-subtext-wrapper">
|
|
11093
|
-
<ng-content select="clr-control-helper"
|
|
11102
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
11103
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
11104
|
+
</div>
|
|
11105
|
+
<div *ngIf="showValid || showInvalid" class="clr-subtext-wrapper">
|
|
11094
11106
|
<cds-icon
|
|
11095
11107
|
*ngIf="showInvalid"
|
|
11096
11108
|
class="clr-validate-icon"
|
|
@@ -11119,8 +11131,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
11119
11131
|
<label *ngIf="!label && addGrid()"></label>
|
|
11120
11132
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
11121
11133
|
<ng-content select="clr-radio-wrapper"></ng-content>
|
|
11122
|
-
<div class="clr-subtext-wrapper">
|
|
11123
|
-
<ng-content select="clr-control-helper"
|
|
11134
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
11135
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
11136
|
+
</div>
|
|
11137
|
+
<div *ngIf="showValid || showInvalid" class="clr-subtext-wrapper">
|
|
11124
11138
|
<cds-icon
|
|
11125
11139
|
*ngIf="showInvalid"
|
|
11126
11140
|
class="clr-validate-icon"
|
|
@@ -12187,6 +12201,196 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12187
12201
|
type: Directive
|
|
12188
12202
|
}], ctorParameters: function () { return [{ type: FiltersProvider }]; } });
|
|
12189
12203
|
|
|
12204
|
+
/*
|
|
12205
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
12206
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
12207
|
+
* This software is released under MIT license.
|
|
12208
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
12209
|
+
*/
|
|
12210
|
+
function getTabableItems(el) {
|
|
12211
|
+
const tabableSelector = [
|
|
12212
|
+
'a[href]',
|
|
12213
|
+
'area[href]',
|
|
12214
|
+
'input:not([disabled])',
|
|
12215
|
+
'button:not([disabled])',
|
|
12216
|
+
'select:not([disabled])',
|
|
12217
|
+
'textarea:not([disabled])',
|
|
12218
|
+
'iframe',
|
|
12219
|
+
'object',
|
|
12220
|
+
'embed',
|
|
12221
|
+
'*[tabindex]:not([disabled])',
|
|
12222
|
+
'*[contenteditable=true]',
|
|
12223
|
+
'[role=button]:not([disabled])',
|
|
12224
|
+
].join(',');
|
|
12225
|
+
return Array.from(el.querySelectorAll(tabableSelector));
|
|
12226
|
+
}
|
|
12227
|
+
class KeyNavigationGridController {
|
|
12228
|
+
constructor(zone) {
|
|
12229
|
+
this.zone = zone;
|
|
12230
|
+
this.skipItemFocus = false;
|
|
12231
|
+
this.listenersAdded = false;
|
|
12232
|
+
this.destroy$ = new Subject();
|
|
12233
|
+
this._activeCell = null;
|
|
12234
|
+
this.config = {
|
|
12235
|
+
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
12236
|
+
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
12237
|
+
keyGrid: '[role=grid]',
|
|
12238
|
+
};
|
|
12239
|
+
}
|
|
12240
|
+
get grid() {
|
|
12241
|
+
var _a;
|
|
12242
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector(this.config.keyGrid);
|
|
12243
|
+
}
|
|
12244
|
+
get rows() {
|
|
12245
|
+
var _a;
|
|
12246
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridRows);
|
|
12247
|
+
}
|
|
12248
|
+
get cells() {
|
|
12249
|
+
var _a;
|
|
12250
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells);
|
|
12251
|
+
}
|
|
12252
|
+
ngOnDestroy() {
|
|
12253
|
+
this.destroy$.next();
|
|
12254
|
+
this.destroy$.complete();
|
|
12255
|
+
}
|
|
12256
|
+
addListeners() {
|
|
12257
|
+
if (this.listenersAdded) {
|
|
12258
|
+
return;
|
|
12259
|
+
}
|
|
12260
|
+
this.zone.runOutsideAngular(() => {
|
|
12261
|
+
fromEvent(this.grid, 'mousedown')
|
|
12262
|
+
.pipe(takeUntil(this.destroy$))
|
|
12263
|
+
.subscribe((e) => {
|
|
12264
|
+
// preserve right click for context menus & keyboard mouse control https://apple.stackexchange.com/questions/32715/how-do-i-open-the-context-menu-from-a-mac-keyboard
|
|
12265
|
+
if (e.buttons === 1 && !e.ctrlKey) {
|
|
12266
|
+
const activeCell = this.cells
|
|
12267
|
+
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
12268
|
+
: null;
|
|
12269
|
+
if (activeCell) {
|
|
12270
|
+
this.setActiveCell(activeCell);
|
|
12271
|
+
}
|
|
12272
|
+
}
|
|
12273
|
+
});
|
|
12274
|
+
fromEvent(this.grid, 'wheel')
|
|
12275
|
+
.pipe(takeUntil(this.destroy$))
|
|
12276
|
+
.subscribe(() => {
|
|
12277
|
+
this.removeActiveCell();
|
|
12278
|
+
});
|
|
12279
|
+
fromEvent(this.grid, 'keydown')
|
|
12280
|
+
.pipe(takeUntil(this.destroy$))
|
|
12281
|
+
.subscribe((e) => {
|
|
12282
|
+
// Skip column resize events
|
|
12283
|
+
if (e.target.classList.contains('drag-handle') &&
|
|
12284
|
+
(e.code === 'ArrowLeft' || e.code === 'ArrowRight')) {
|
|
12285
|
+
return;
|
|
12286
|
+
}
|
|
12287
|
+
if (e.code === 'ArrowUp' ||
|
|
12288
|
+
e.code === 'ArrowDown' ||
|
|
12289
|
+
e.code === 'ArrowLeft' ||
|
|
12290
|
+
e.code === 'ArrowRight' ||
|
|
12291
|
+
e.code === 'End' ||
|
|
12292
|
+
e.code === 'Home' ||
|
|
12293
|
+
e.code === 'PageUp' ||
|
|
12294
|
+
e.code === 'PageDown') {
|
|
12295
|
+
const { x, y } = this.getNextItemCoordinate(e);
|
|
12296
|
+
const activeItem = this.rows
|
|
12297
|
+
? Array.from(this.rows[y].querySelectorAll(this.config.keyGridCells))[x]
|
|
12298
|
+
: null;
|
|
12299
|
+
if (activeItem) {
|
|
12300
|
+
this.setActiveCell(activeItem);
|
|
12301
|
+
}
|
|
12302
|
+
e.preventDefault();
|
|
12303
|
+
}
|
|
12304
|
+
});
|
|
12305
|
+
});
|
|
12306
|
+
this.listenersAdded = true;
|
|
12307
|
+
}
|
|
12308
|
+
initializeKeyGrid(host) {
|
|
12309
|
+
this.host = host;
|
|
12310
|
+
this.addListeners();
|
|
12311
|
+
this.resetKeyGrid();
|
|
12312
|
+
}
|
|
12313
|
+
resetKeyGrid() {
|
|
12314
|
+
var _a;
|
|
12315
|
+
(_a = this.cells) === null || _a === void 0 ? void 0 : _a.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
12316
|
+
const firstCell = this.cells ? this.cells[0] : null;
|
|
12317
|
+
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
12318
|
+
}
|
|
12319
|
+
removeActiveCell() {
|
|
12320
|
+
this._activeCell = null;
|
|
12321
|
+
}
|
|
12322
|
+
getActiveCell() {
|
|
12323
|
+
return this._activeCell;
|
|
12324
|
+
}
|
|
12325
|
+
setActiveCell(activeCell) {
|
|
12326
|
+
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
12327
|
+
if (prior) {
|
|
12328
|
+
prior.setAttribute('tabindex', '-1');
|
|
12329
|
+
}
|
|
12330
|
+
activeCell.setAttribute('tabindex', '0');
|
|
12331
|
+
this._activeCell = activeCell;
|
|
12332
|
+
const items = getTabableItems(activeCell);
|
|
12333
|
+
const item = activeCell.getAttribute('role') !== 'columnheader' && items[0] ? items[0] : activeCell;
|
|
12334
|
+
if (!this.skipItemFocus) {
|
|
12335
|
+
item.focus();
|
|
12336
|
+
}
|
|
12337
|
+
}
|
|
12338
|
+
getNextItemCoordinate(e) {
|
|
12339
|
+
var _a;
|
|
12340
|
+
let currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
12341
|
+
if (e.code === 'Tab') {
|
|
12342
|
+
currentCell = document.activeElement;
|
|
12343
|
+
}
|
|
12344
|
+
const currentRow = this.rows && currentCell ? Array.from(this.rows).find(r => r.contains(currentCell)) : null;
|
|
12345
|
+
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
12346
|
+
const numOfColumns = this.cells ? Math.floor(this.cells.length / this.rows.length - 1) : 0;
|
|
12347
|
+
let x = currentRow && currentCell
|
|
12348
|
+
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
12349
|
+
: 0;
|
|
12350
|
+
let y = currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0;
|
|
12351
|
+
const dir = this.host.dir;
|
|
12352
|
+
const inlineStart = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
12353
|
+
const inlineEnd = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
12354
|
+
const itemsPerPage = Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.rows[0].clientHeight) - 1 || 0;
|
|
12355
|
+
if (e.code === 'ArrowUp' && y !== 0) {
|
|
12356
|
+
y = y - 1;
|
|
12357
|
+
}
|
|
12358
|
+
else if (e.code === 'ArrowDown' && y < numOfRows) {
|
|
12359
|
+
y = y + 1;
|
|
12360
|
+
}
|
|
12361
|
+
else if (e.code === inlineStart && x !== 0) {
|
|
12362
|
+
x = x - 1;
|
|
12363
|
+
}
|
|
12364
|
+
else if (e.code === inlineEnd && x < numOfColumns) {
|
|
12365
|
+
x = x + 1;
|
|
12366
|
+
}
|
|
12367
|
+
else if (e.code === 'End') {
|
|
12368
|
+
x = numOfColumns;
|
|
12369
|
+
if (e.ctrlKey) {
|
|
12370
|
+
y = numOfRows;
|
|
12371
|
+
}
|
|
12372
|
+
}
|
|
12373
|
+
else if (e.code === 'Home') {
|
|
12374
|
+
x = 0;
|
|
12375
|
+
if (e.ctrlKey) {
|
|
12376
|
+
y = 0;
|
|
12377
|
+
}
|
|
12378
|
+
}
|
|
12379
|
+
else if (e.code === 'PageUp') {
|
|
12380
|
+
y = y - itemsPerPage > 0 ? y - itemsPerPage + 1 : 1;
|
|
12381
|
+
}
|
|
12382
|
+
else if (e.code === 'PageDown') {
|
|
12383
|
+
y = y + itemsPerPage < numOfRows ? y + itemsPerPage : numOfRows;
|
|
12384
|
+
}
|
|
12385
|
+
return { x, y };
|
|
12386
|
+
}
|
|
12387
|
+
}
|
|
12388
|
+
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12389
|
+
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
12390
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, decorators: [{
|
|
12391
|
+
type: Injectable
|
|
12392
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
12393
|
+
|
|
12190
12394
|
/*
|
|
12191
12395
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
12192
12396
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -12199,12 +12403,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12199
12403
|
* since it can be anything (not just a text input).
|
|
12200
12404
|
*/
|
|
12201
12405
|
class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
12202
|
-
constructor(_filters, commonStrings, smartToggleService, platformId, elementRef) {
|
|
12406
|
+
constructor(_filters, commonStrings, smartToggleService, platformId, elementRef, keyNavigation) {
|
|
12203
12407
|
super(_filters);
|
|
12204
12408
|
this.commonStrings = commonStrings;
|
|
12205
12409
|
this.smartToggleService = smartToggleService;
|
|
12206
12410
|
this.platformId = platformId;
|
|
12207
12411
|
this.elementRef = elementRef;
|
|
12412
|
+
this.keyNavigation = keyNavigation;
|
|
12208
12413
|
this.openChange = new EventEmitter(false);
|
|
12209
12414
|
this.ariaExpanded = false;
|
|
12210
12415
|
this.popoverId = uniqueIdFactory();
|
|
@@ -12233,6 +12438,9 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
12233
12438
|
if (!open && isPlatformBrowser(this.platformId)) {
|
|
12234
12439
|
this.anchor.nativeElement.focus();
|
|
12235
12440
|
}
|
|
12441
|
+
if (this.keyNavigation) {
|
|
12442
|
+
this.keyNavigation.skipItemFocus = open;
|
|
12443
|
+
}
|
|
12236
12444
|
// keep track of the state
|
|
12237
12445
|
this._open = open;
|
|
12238
12446
|
}
|
|
@@ -12247,7 +12455,9 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
12247
12455
|
return !!this.filter && this.filter.isActive();
|
|
12248
12456
|
}
|
|
12249
12457
|
ngOnChanges() {
|
|
12250
|
-
|
|
12458
|
+
setTimeout(() => {
|
|
12459
|
+
this.setToggleButtonAriaLabel();
|
|
12460
|
+
});
|
|
12251
12461
|
}
|
|
12252
12462
|
ngOnDestroy() {
|
|
12253
12463
|
super.ngOnDestroy();
|
|
@@ -12267,7 +12477,7 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
12267
12477
|
});
|
|
12268
12478
|
}
|
|
12269
12479
|
}
|
|
12270
|
-
ClrDatagridFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridFilter, deps: [{ token: FiltersProvider }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: PLATFORM_ID }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
12480
|
+
ClrDatagridFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridFilter, deps: [{ token: FiltersProvider }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: KeyNavigationGridController, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
12271
12481
|
ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: { open: ["clrDgFilterOpen", "open"], customFilter: ["clrDgFilter", "customFilter"] }, outputs: { openChange: "clrDgFilterOpenChange" }, providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
12272
12482
|
<button
|
|
12273
12483
|
class="datagrid-filter-toggle"
|
|
@@ -12353,7 +12563,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12353
12563
|
return [{ type: FiltersProvider }, { type: ClrCommonStringsService }, { type: ClrPopoverToggleService }, { type: undefined, decorators: [{
|
|
12354
12564
|
type: Inject,
|
|
12355
12565
|
args: [PLATFORM_ID]
|
|
12356
|
-
}] }, { type: i0.ElementRef }
|
|
12566
|
+
}] }, { type: i0.ElementRef }, { type: KeyNavigationGridController, decorators: [{
|
|
12567
|
+
type: Optional
|
|
12568
|
+
}] }];
|
|
12357
12569
|
}, propDecorators: { openChange: [{
|
|
12358
12570
|
type: Output,
|
|
12359
12571
|
args: ['clrDgFilterOpenChange']
|
|
@@ -13116,6 +13328,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
13116
13328
|
class DetailService {
|
|
13117
13329
|
constructor(modalStackService) {
|
|
13118
13330
|
this.modalStackService = modalStackService;
|
|
13331
|
+
this.preventScroll = false;
|
|
13119
13332
|
this.toggleState = false;
|
|
13120
13333
|
this._enabled = false;
|
|
13121
13334
|
this._state = new BehaviorSubject(this.toggleState);
|
|
@@ -13126,6 +13339,12 @@ class DetailService {
|
|
|
13126
13339
|
set enabled(state) {
|
|
13127
13340
|
this._enabled = state;
|
|
13128
13341
|
}
|
|
13342
|
+
get preventFocusScroll() {
|
|
13343
|
+
return this.preventScroll;
|
|
13344
|
+
}
|
|
13345
|
+
set preventFocusScroll(preventScroll) {
|
|
13346
|
+
this.preventScroll = preventScroll;
|
|
13347
|
+
}
|
|
13129
13348
|
get state() {
|
|
13130
13349
|
return this.cache;
|
|
13131
13350
|
}
|
|
@@ -13144,15 +13363,13 @@ class DetailService {
|
|
|
13144
13363
|
}
|
|
13145
13364
|
close() {
|
|
13146
13365
|
this.toggleState = false;
|
|
13366
|
+
this.returnFocus();
|
|
13147
13367
|
this._state.next(this.toggleState);
|
|
13148
13368
|
this.modalStackService.trackModalClose(this);
|
|
13149
|
-
// In the case of browser zoom greater than 250%, the detail pane toggle button is not visible on the page.
|
|
13150
|
-
// Wait for the detail pane to close, and return focus to the detail toggle button.
|
|
13151
|
-
setTimeout(() => this.returnFocus(), 0);
|
|
13152
13369
|
}
|
|
13153
13370
|
returnFocus() {
|
|
13154
13371
|
if (this.button) {
|
|
13155
|
-
this.button.focus();
|
|
13372
|
+
this.button.focus({ preventScroll: this.preventFocusScroll });
|
|
13156
13373
|
this.button = null;
|
|
13157
13374
|
}
|
|
13158
13375
|
}
|
|
@@ -14363,9 +14580,9 @@ class ClrDatagridPlaceholder {
|
|
|
14363
14580
|
}
|
|
14364
14581
|
ClrDatagridPlaceholder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPlaceholder, deps: [{ token: Items }], target: i0.ɵɵFactoryTarget.Component });
|
|
14365
14582
|
ClrDatagridPlaceholder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder", host: { properties: { "class.datagrid-placeholder-container": "true" } }, ngImport: i0, template: `
|
|
14366
|
-
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid"
|
|
14583
|
+
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid">
|
|
14367
14584
|
<div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
|
|
14368
|
-
<span
|
|
14585
|
+
<span class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
|
|
14369
14586
|
</div>
|
|
14370
14587
|
`, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
14371
14588
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPlaceholder, decorators: [{
|
|
@@ -14373,9 +14590,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
14373
14590
|
args: [{
|
|
14374
14591
|
selector: 'clr-dg-placeholder',
|
|
14375
14592
|
template: `
|
|
14376
|
-
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid"
|
|
14593
|
+
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid">
|
|
14377
14594
|
<div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
|
|
14378
|
-
<span
|
|
14595
|
+
<span class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
|
|
14379
14596
|
</div>
|
|
14380
14597
|
`,
|
|
14381
14598
|
host: { '[class.datagrid-placeholder-container]': 'true' },
|
|
@@ -15222,6 +15439,8 @@ class ClrDatagridRow {
|
|
|
15222
15439
|
this.document = document;
|
|
15223
15440
|
this.selectedChanged = new EventEmitter(false);
|
|
15224
15441
|
this.expandedChange = new EventEmitter(false);
|
|
15442
|
+
this.detailDisabled = false;
|
|
15443
|
+
this.detailHidden = false;
|
|
15225
15444
|
this.displayCells = false;
|
|
15226
15445
|
this.expandAnimationTrigger = false;
|
|
15227
15446
|
/* reference to the enum so that template can access */
|
|
@@ -15449,11 +15668,11 @@ class ClrDatagridRow {
|
|
|
15449
15668
|
}
|
|
15450
15669
|
}
|
|
15451
15670
|
ClrDatagridRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, deps: [{ token: Selection }, { token: RowActionService }, { token: ExpandableRowsCount }, { token: DatagridIfExpandService }, { token: DetailService }, { token: DisplayModeService }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: Items }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
15452
|
-
ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridRow, selector: "clr-dg-row", inputs: { item: ["clrDgItem", "item"], clrDgSelectable: "clrDgSelectable", selected: ["clrDgSelected", "selected"], expanded: ["clrDgExpanded", "expanded"], clrDgDetailOpenLabel: "clrDgDetailOpenLabel", clrDgDetailCloseLabel: "clrDgDetailCloseLabel", clrDgRowSelectionLabel: "clrDgRowSelectionLabel" }, outputs: { selectedChanged: "clrDgSelectedChange", expandedChange: "clrDgExpandedChange" }, host: { attributes: { "role": "rowgroup" }, properties: { "class.datagrid-row": "true", "class.datagrid-selected": "selected", "attr.aria-owns": "id" } }, providers: [
|
|
15671
|
+
ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridRow, selector: "clr-dg-row", inputs: { detailDisabled: ["clrDgDetailDisabled", "detailDisabled"], detailHidden: ["clrDgDetailHidden", "detailHidden"], item: ["clrDgItem", "item"], clrDgSelectable: "clrDgSelectable", selected: ["clrDgSelected", "selected"], expanded: ["clrDgExpanded", "expanded"], clrDgDetailOpenLabel: "clrDgDetailOpenLabel", clrDgDetailCloseLabel: "clrDgDetailCloseLabel", clrDgRowSelectionLabel: "clrDgRowSelectionLabel" }, outputs: { selectedChanged: "clrDgSelectedChange", expandedChange: "clrDgExpandedChange" }, host: { attributes: { "role": "rowgroup" }, properties: { "class.datagrid-row": "true", "class.datagrid-selected": "selected", "attr.aria-owns": "id" } }, providers: [
|
|
15453
15672
|
DatagridIfExpandService,
|
|
15454
15673
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15455
15674
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15456
|
-
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
15675
|
+
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
15457
15676
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
15458
15677
|
type: Component,
|
|
15459
15678
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -15465,7 +15684,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15465
15684
|
DatagridIfExpandService,
|
|
15466
15685
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15467
15686
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15468
|
-
], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
|
|
15687
|
+
], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
|
|
15469
15688
|
}], ctorParameters: function () {
|
|
15470
15689
|
return [{ type: Selection }, { type: RowActionService }, { type: ExpandableRowsCount }, { type: DatagridIfExpandService }, { type: DetailService }, { type: DisplayModeService }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: ClrCommonStringsService }, { type: Items }, { type: undefined, decorators: [{
|
|
15471
15690
|
type: Inject,
|
|
@@ -15477,6 +15696,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15477
15696
|
}], expandedChange: [{
|
|
15478
15697
|
type: Output,
|
|
15479
15698
|
args: ['clrDgExpandedChange']
|
|
15699
|
+
}], detailDisabled: [{
|
|
15700
|
+
type: Input,
|
|
15701
|
+
args: ['clrDgDetailDisabled']
|
|
15702
|
+
}], detailHidden: [{
|
|
15703
|
+
type: Input,
|
|
15704
|
+
args: ['clrDgDetailHidden']
|
|
15480
15705
|
}], dgCells: [{
|
|
15481
15706
|
type: ContentChildren,
|
|
15482
15707
|
args: [ClrDatagridCell]
|
|
@@ -15525,10 +15750,11 @@ var DatagridColumnChanges;
|
|
|
15525
15750
|
(function (DatagridColumnChanges) {
|
|
15526
15751
|
DatagridColumnChanges[DatagridColumnChanges["WIDTH"] = 0] = "WIDTH";
|
|
15527
15752
|
DatagridColumnChanges[DatagridColumnChanges["HIDDEN"] = 1] = "HIDDEN";
|
|
15753
|
+
DatagridColumnChanges[DatagridColumnChanges["INITIALIZE"] = 2] = "INITIALIZE";
|
|
15528
15754
|
})(DatagridColumnChanges || (DatagridColumnChanges = {}));
|
|
15529
15755
|
const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
|
|
15530
15756
|
.map(key => DatagridColumnChanges[key])
|
|
15531
|
-
.filter(key => key === parseInt(key, 10)); // extracts only integer keys
|
|
15757
|
+
.filter(key => key === parseInt(key, 10) && key !== DatagridColumnChanges.INITIALIZE); // extracts only integer keys
|
|
15532
15758
|
|
|
15533
15759
|
/*
|
|
15534
15760
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -15539,6 +15765,7 @@ const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
|
|
|
15539
15765
|
class ColumnsService {
|
|
15540
15766
|
constructor() {
|
|
15541
15767
|
this.columns = [];
|
|
15768
|
+
this.columnsStateChange = new BehaviorSubject(null);
|
|
15542
15769
|
this._cache = [];
|
|
15543
15770
|
}
|
|
15544
15771
|
get columnStates() {
|
|
@@ -15560,7 +15787,9 @@ class ColumnsService {
|
|
|
15560
15787
|
resetToLastCache() {
|
|
15561
15788
|
this._cache.forEach((state, index) => {
|
|
15562
15789
|
// Just emit the exact value from the cache
|
|
15563
|
-
|
|
15790
|
+
const cachedState = Object.assign(Object.assign({}, state), { changes: ALL_COLUMN_CHANGES });
|
|
15791
|
+
this.columns[index].next(cachedState);
|
|
15792
|
+
this.columnsStateChange.next(cachedState);
|
|
15564
15793
|
});
|
|
15565
15794
|
this._cache = [];
|
|
15566
15795
|
}
|
|
@@ -15572,7 +15801,9 @@ class ColumnsService {
|
|
|
15572
15801
|
this.emitStateChange(this.columns[columnIndex], diff);
|
|
15573
15802
|
}
|
|
15574
15803
|
emitStateChange(column, diff) {
|
|
15575
|
-
|
|
15804
|
+
const changedState = Object.assign(Object.assign({}, column.value), diff);
|
|
15805
|
+
column.next(changedState);
|
|
15806
|
+
this.columnsStateChange.next(changedState);
|
|
15576
15807
|
}
|
|
15577
15808
|
}
|
|
15578
15809
|
ColumnsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ColumnsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -15648,193 +15879,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15648
15879
|
type: Injectable
|
|
15649
15880
|
}], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
|
|
15650
15881
|
|
|
15651
|
-
/*
|
|
15652
|
-
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
15653
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
15654
|
-
* This software is released under MIT license.
|
|
15655
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
15656
|
-
*/
|
|
15657
|
-
function getTabableItems(el) {
|
|
15658
|
-
const tabableSelector = [
|
|
15659
|
-
'a[href]',
|
|
15660
|
-
'area[href]',
|
|
15661
|
-
'input:not([disabled])',
|
|
15662
|
-
'button:not([disabled])',
|
|
15663
|
-
'select:not([disabled])',
|
|
15664
|
-
'textarea:not([disabled])',
|
|
15665
|
-
'iframe',
|
|
15666
|
-
'object',
|
|
15667
|
-
'embed',
|
|
15668
|
-
'*[tabindex]',
|
|
15669
|
-
'*[contenteditable=true]',
|
|
15670
|
-
'[role=button]:not([disabled])',
|
|
15671
|
-
].join(',');
|
|
15672
|
-
return Array.from(el.querySelectorAll(tabableSelector));
|
|
15673
|
-
}
|
|
15674
|
-
class KeyNavigationGridController {
|
|
15675
|
-
constructor(zone) {
|
|
15676
|
-
this.zone = zone;
|
|
15677
|
-
this.listenersAdded = false;
|
|
15678
|
-
this.destroy$ = new Subject();
|
|
15679
|
-
this._activeCell = null;
|
|
15680
|
-
this.config = {
|
|
15681
|
-
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
15682
|
-
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
15683
|
-
keyGrid: '[role=grid]',
|
|
15684
|
-
};
|
|
15685
|
-
}
|
|
15686
|
-
get grid() {
|
|
15687
|
-
var _a;
|
|
15688
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector(this.config.keyGrid);
|
|
15689
|
-
}
|
|
15690
|
-
get rows() {
|
|
15691
|
-
var _a;
|
|
15692
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridRows);
|
|
15693
|
-
}
|
|
15694
|
-
get cells() {
|
|
15695
|
-
var _a;
|
|
15696
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells);
|
|
15697
|
-
}
|
|
15698
|
-
ngOnDestroy() {
|
|
15699
|
-
this.destroy$.next();
|
|
15700
|
-
this.destroy$.complete();
|
|
15701
|
-
}
|
|
15702
|
-
addListeners() {
|
|
15703
|
-
if (this.listenersAdded) {
|
|
15704
|
-
return;
|
|
15705
|
-
}
|
|
15706
|
-
this.zone.runOutsideAngular(() => {
|
|
15707
|
-
fromEvent(this.grid, 'mousedown')
|
|
15708
|
-
.pipe(takeUntil(this.destroy$))
|
|
15709
|
-
.subscribe((e) => {
|
|
15710
|
-
// preserve right click for context menus & keyboard mouse control https://apple.stackexchange.com/questions/32715/how-do-i-open-the-context-menu-from-a-mac-keyboard
|
|
15711
|
-
if (e.buttons === 1 && !e.ctrlKey) {
|
|
15712
|
-
const activeCell = this.cells
|
|
15713
|
-
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
15714
|
-
: null;
|
|
15715
|
-
if (activeCell) {
|
|
15716
|
-
this.setActiveCell(activeCell);
|
|
15717
|
-
}
|
|
15718
|
-
}
|
|
15719
|
-
});
|
|
15720
|
-
fromEvent(this.grid, 'wheel')
|
|
15721
|
-
.pipe(takeUntil(this.destroy$))
|
|
15722
|
-
.subscribe(() => {
|
|
15723
|
-
this.removeActiveCell();
|
|
15724
|
-
});
|
|
15725
|
-
fromEvent(this.grid, 'keydown')
|
|
15726
|
-
.pipe(takeUntil(this.destroy$))
|
|
15727
|
-
.subscribe((e) => {
|
|
15728
|
-
// Skip column resize events
|
|
15729
|
-
if (e.target.classList.contains('drag-handle') &&
|
|
15730
|
-
(e.code === 'ArrowLeft' || e.code === 'ArrowRight')) {
|
|
15731
|
-
return;
|
|
15732
|
-
}
|
|
15733
|
-
if (e.code === 'ArrowUp' ||
|
|
15734
|
-
e.code === 'ArrowDown' ||
|
|
15735
|
-
e.code === 'ArrowLeft' ||
|
|
15736
|
-
e.code === 'ArrowRight' ||
|
|
15737
|
-
e.code === 'End' ||
|
|
15738
|
-
e.code === 'Home' ||
|
|
15739
|
-
e.code === 'PageUp' ||
|
|
15740
|
-
e.code === 'PageDown') {
|
|
15741
|
-
const { x, y } = this.getNextItemCoordinate(e);
|
|
15742
|
-
const activeItem = this.rows
|
|
15743
|
-
? Array.from(this.rows[y].querySelectorAll(this.config.keyGridCells))[x]
|
|
15744
|
-
: null;
|
|
15745
|
-
if (activeItem) {
|
|
15746
|
-
this.setActiveCell(activeItem);
|
|
15747
|
-
}
|
|
15748
|
-
e.preventDefault();
|
|
15749
|
-
}
|
|
15750
|
-
});
|
|
15751
|
-
});
|
|
15752
|
-
this.listenersAdded = true;
|
|
15753
|
-
}
|
|
15754
|
-
initializeKeyGrid(host) {
|
|
15755
|
-
this.host = host;
|
|
15756
|
-
this.addListeners();
|
|
15757
|
-
this.resetKeyGrid();
|
|
15758
|
-
}
|
|
15759
|
-
resetKeyGrid() {
|
|
15760
|
-
var _a;
|
|
15761
|
-
(_a = this.cells) === null || _a === void 0 ? void 0 : _a.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
15762
|
-
const firstCell = this.cells ? this.cells[0] : null;
|
|
15763
|
-
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
15764
|
-
}
|
|
15765
|
-
removeActiveCell() {
|
|
15766
|
-
this._activeCell = null;
|
|
15767
|
-
}
|
|
15768
|
-
getActiveCell() {
|
|
15769
|
-
return this._activeCell;
|
|
15770
|
-
}
|
|
15771
|
-
setActiveCell(activeCell) {
|
|
15772
|
-
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
15773
|
-
if (prior) {
|
|
15774
|
-
prior.setAttribute('tabindex', '-1');
|
|
15775
|
-
}
|
|
15776
|
-
activeCell.setAttribute('tabindex', '0');
|
|
15777
|
-
const items = getTabableItems(activeCell);
|
|
15778
|
-
const item = activeCell.getAttribute('role') !== 'columnheader' && items[0] ? items[0] : activeCell;
|
|
15779
|
-
item.focus();
|
|
15780
|
-
this._activeCell = item;
|
|
15781
|
-
}
|
|
15782
|
-
getNextItemCoordinate(e) {
|
|
15783
|
-
var _a;
|
|
15784
|
-
let currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
15785
|
-
if (e.code === 'Tab') {
|
|
15786
|
-
currentCell = document.activeElement;
|
|
15787
|
-
}
|
|
15788
|
-
const currentRow = this.rows && currentCell ? Array.from(this.rows).find(r => r.contains(currentCell)) : null;
|
|
15789
|
-
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
15790
|
-
const numOfColumns = this.cells ? Math.floor(this.cells.length / this.rows.length - 1) : 0;
|
|
15791
|
-
let x = currentRow && currentCell
|
|
15792
|
-
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
15793
|
-
: 0;
|
|
15794
|
-
let y = currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0;
|
|
15795
|
-
const dir = this.host.dir;
|
|
15796
|
-
const inlineStart = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
15797
|
-
const inlineEnd = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
15798
|
-
const itemsPerPage = Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.rows[0].clientHeight) - 1 || 0;
|
|
15799
|
-
if (e.code === 'ArrowUp' && y !== 0) {
|
|
15800
|
-
y = y - 1;
|
|
15801
|
-
}
|
|
15802
|
-
else if (e.code === 'ArrowDown' && y < numOfRows) {
|
|
15803
|
-
y = y + 1;
|
|
15804
|
-
}
|
|
15805
|
-
else if (e.code === inlineStart && x !== 0) {
|
|
15806
|
-
x = x - 1;
|
|
15807
|
-
}
|
|
15808
|
-
else if (e.code === inlineEnd && x < numOfColumns) {
|
|
15809
|
-
x = x + 1;
|
|
15810
|
-
}
|
|
15811
|
-
else if (e.code === 'End') {
|
|
15812
|
-
x = numOfColumns;
|
|
15813
|
-
if (e.ctrlKey) {
|
|
15814
|
-
y = numOfRows;
|
|
15815
|
-
}
|
|
15816
|
-
}
|
|
15817
|
-
else if (e.code === 'Home') {
|
|
15818
|
-
x = 0;
|
|
15819
|
-
if (e.ctrlKey) {
|
|
15820
|
-
y = 0;
|
|
15821
|
-
}
|
|
15822
|
-
}
|
|
15823
|
-
else if (e.code === 'PageUp') {
|
|
15824
|
-
y = y - itemsPerPage > 0 ? y - itemsPerPage + 1 : 1;
|
|
15825
|
-
}
|
|
15826
|
-
else if (e.code === 'PageDown') {
|
|
15827
|
-
y = y + itemsPerPage < numOfRows ? y + itemsPerPage : numOfRows;
|
|
15828
|
-
}
|
|
15829
|
-
return { x, y };
|
|
15830
|
-
}
|
|
15831
|
-
}
|
|
15832
|
-
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
15833
|
-
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
15834
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, decorators: [{
|
|
15835
|
-
type: Injectable
|
|
15836
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
15837
|
-
|
|
15838
15882
|
/*
|
|
15839
15883
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
15840
15884
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -15868,7 +15912,6 @@ class DatagridCellRenderer {
|
|
|
15868
15912
|
}
|
|
15869
15913
|
}
|
|
15870
15914
|
resetState(state) {
|
|
15871
|
-
state.changes = ALL_COLUMN_CHANGES;
|
|
15872
15915
|
this.setWidth(state);
|
|
15873
15916
|
this.setHidden(state);
|
|
15874
15917
|
}
|
|
@@ -15949,7 +15992,7 @@ class DatagridRowRenderer {
|
|
|
15949
15992
|
}
|
|
15950
15993
|
}
|
|
15951
15994
|
DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15952
|
-
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail", queries: [{ propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
|
|
15995
|
+
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail", queries: [{ propertyName: "expandableRow", first: true, predicate: i0.forwardRef(function () { return DatagridRowRenderer; }), descendants: true }, { propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
|
|
15953
15996
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
|
|
15954
15997
|
type: Directive,
|
|
15955
15998
|
args: [{
|
|
@@ -15958,6 +16001,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15958
16001
|
}], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
|
|
15959
16002
|
type: ContentChildren,
|
|
15960
16003
|
args: [DatagridCellRenderer]
|
|
16004
|
+
}], expandableRow: [{
|
|
16005
|
+
type: ContentChild,
|
|
16006
|
+
args: [forwardRef(() => DatagridRowRenderer)]
|
|
15961
16007
|
}] } });
|
|
15962
16008
|
|
|
15963
16009
|
/*
|
|
@@ -16093,26 +16139,17 @@ class ClrDatagrid {
|
|
|
16093
16139
|
this.rows.forEach(row => {
|
|
16094
16140
|
this._displayedRows.insert(row._view);
|
|
16095
16141
|
});
|
|
16096
|
-
|
|
16097
|
-
|
|
16098
|
-
|
|
16099
|
-
|
|
16100
|
-
|
|
16101
|
-
|
|
16102
|
-
|
|
16103
|
-
|
|
16104
|
-
|
|
16105
|
-
else if (!this.hasVirtualScroller || !row) {
|
|
16106
|
-
this.detailService.close();
|
|
16142
|
+
this.updateDetailState();
|
|
16143
|
+
// retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
|
|
16144
|
+
if (this.hasVirtualScroller) {
|
|
16145
|
+
const active = this.keyNavigation.getActiveCell();
|
|
16146
|
+
const isFocusInsideDatagrid = this.datagrid.nativeElement.contains(document.activeElement);
|
|
16147
|
+
if (active && isFocusInsideDatagrid) {
|
|
16148
|
+
this.zone.runOutsideAngular(() => {
|
|
16149
|
+
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
16150
|
+
});
|
|
16107
16151
|
}
|
|
16108
16152
|
}
|
|
16109
|
-
// retain active cell when navigating with PageUp and PageDown buttons in virtual scroller
|
|
16110
|
-
const active = this.keyNavigation.getActiveCell();
|
|
16111
|
-
if (active) {
|
|
16112
|
-
this.zone.runOutsideAngular(() => {
|
|
16113
|
-
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
16114
|
-
});
|
|
16115
|
-
}
|
|
16116
16153
|
}));
|
|
16117
16154
|
}
|
|
16118
16155
|
/**
|
|
@@ -16120,6 +16157,7 @@ class ClrDatagrid {
|
|
|
16120
16157
|
*/
|
|
16121
16158
|
ngAfterViewInit() {
|
|
16122
16159
|
this.keyNavigation.initializeKeyGrid(this.el.nativeElement);
|
|
16160
|
+
this.updateDetailState();
|
|
16123
16161
|
// TODO: determine if we can get rid of provider wiring in view init so that subscriptions can be done earlier
|
|
16124
16162
|
this.refresh.emit(this.stateProvider.state);
|
|
16125
16163
|
this._subscriptions.push(this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
|
|
@@ -16193,9 +16231,39 @@ class ClrDatagrid {
|
|
|
16193
16231
|
ngOnDestroy() {
|
|
16194
16232
|
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
16195
16233
|
}
|
|
16234
|
+
toggleAllSelected($event) {
|
|
16235
|
+
$event.preventDefault();
|
|
16236
|
+
if (this.hasVirtualScroller) {
|
|
16237
|
+
return;
|
|
16238
|
+
}
|
|
16239
|
+
this.allSelected = !this.allSelected;
|
|
16240
|
+
}
|
|
16196
16241
|
resize() {
|
|
16197
16242
|
this.organizer.resize();
|
|
16198
16243
|
}
|
|
16244
|
+
/**
|
|
16245
|
+
* Checks the state of detail panel and if it's opened then
|
|
16246
|
+
* find the matching row and trigger the detail panel
|
|
16247
|
+
*/
|
|
16248
|
+
updateDetailState() {
|
|
16249
|
+
// Try to update only when there is something cached and its open.
|
|
16250
|
+
if (this.detailService.state && this.detailService.isOpen) {
|
|
16251
|
+
const row = this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state));
|
|
16252
|
+
/**
|
|
16253
|
+
* Reopen updated row or close it
|
|
16254
|
+
*/
|
|
16255
|
+
if (row) {
|
|
16256
|
+
this.detailService.open(row.item, row.detailButton.nativeElement);
|
|
16257
|
+
// always keep open when virtual scroll is available otherwise close it
|
|
16258
|
+
}
|
|
16259
|
+
else if (!this.hasVirtualScroller) {
|
|
16260
|
+
// Using setTimeout to make sure the inner cycles in rows are done
|
|
16261
|
+
setTimeout(() => {
|
|
16262
|
+
this.detailService.close();
|
|
16263
|
+
});
|
|
16264
|
+
}
|
|
16265
|
+
}
|
|
16266
|
+
}
|
|
16199
16267
|
/**
|
|
16200
16268
|
* Public method to re-trigger the computation of displayed items manually
|
|
16201
16269
|
*/
|
|
@@ -16220,7 +16288,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
16220
16288
|
ColumnsService,
|
|
16221
16289
|
DisplayModeService,
|
|
16222
16290
|
KeyNavigationGridController,
|
|
16223
|
-
], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"
|
|
16291
|
+
], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!hasVirtualScroller\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "component", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { kind: "component", type: ClrDatagridRow, selector: "clr-dg-row", inputs: ["clrDgDetailDisabled", "clrDgDetailHidden", "clrDgItem", "clrDgSelectable", "clrDgSelected", "clrDgExpanded", "clrDgDetailOpenLabel", "clrDgDetailCloseLabel", "clrDgRowSelectionLabel"], outputs: ["clrDgSelectedChange", "clrDgExpandedChange"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }, { kind: "directive", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail" }, { kind: "directive", type: ActionableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }, { kind: "directive", type: ExpandableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }] });
|
|
16224
16292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
16225
16293
|
type: Component,
|
|
16226
16294
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -16242,7 +16310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16242
16310
|
], host: {
|
|
16243
16311
|
'[class.datagrid-host]': 'true',
|
|
16244
16312
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
16245
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"
|
|
16313
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!hasVirtualScroller\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n" }]
|
|
16246
16314
|
}], ctorParameters: function () {
|
|
16247
16315
|
return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
|
|
16248
16316
|
type: Inject,
|
|
@@ -16413,6 +16481,7 @@ class ClrDatagridActionOverflow {
|
|
|
16413
16481
|
ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16414
16482
|
ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
16415
16483
|
<button
|
|
16484
|
+
tabindex="-1"
|
|
16416
16485
|
class="datagrid-action-toggle"
|
|
16417
16486
|
type="button"
|
|
16418
16487
|
role="button"
|
|
@@ -16447,6 +16516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16447
16516
|
hostDirectives: [ClrPopoverHostDirective],
|
|
16448
16517
|
template: `
|
|
16449
16518
|
<button
|
|
16519
|
+
tabindex="-1"
|
|
16450
16520
|
class="datagrid-action-toggle"
|
|
16451
16521
|
type="button"
|
|
16452
16522
|
role="button"
|
|
@@ -16754,10 +16824,13 @@ class ClrDatagridDetailHeader {
|
|
|
16754
16824
|
get titleId() {
|
|
16755
16825
|
return `${this.detailService.id}-title`;
|
|
16756
16826
|
}
|
|
16827
|
+
ngAfterViewInit() {
|
|
16828
|
+
this.title.nativeElement.focus();
|
|
16829
|
+
}
|
|
16757
16830
|
}
|
|
16758
16831
|
ClrDatagridDetailHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridDetailHeader, deps: [{ token: DetailService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16759
|
-
ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetailHeader, selector: "clr-dg-detail-header", host: { properties: { "class.datagrid-detail-header": "true" } }, ngImport: i0, template: `
|
|
16760
|
-
<div class="datagrid-detail-header-title"
|
|
16832
|
+
ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetailHeader, selector: "clr-dg-detail-header", host: { properties: { "class.datagrid-detail-header": "true" } }, viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }], ngImport: i0, template: `
|
|
16833
|
+
<div #title class="datagrid-detail-header-title" tabindex="-1" [id]="titleId">
|
|
16761
16834
|
<ng-content></ng-content>
|
|
16762
16835
|
</div>
|
|
16763
16836
|
<div class="datagrid-detail-pane-close">
|
|
@@ -16779,7 +16852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16779
16852
|
'[class.datagrid-detail-header]': 'true',
|
|
16780
16853
|
},
|
|
16781
16854
|
template: `
|
|
16782
|
-
<div class="datagrid-detail-header-title"
|
|
16855
|
+
<div #title class="datagrid-detail-header-title" tabindex="-1" [id]="titleId">
|
|
16783
16856
|
<ng-content></ng-content>
|
|
16784
16857
|
</div>
|
|
16785
16858
|
<div class="datagrid-detail-pane-close">
|
|
@@ -16794,7 +16867,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16794
16867
|
</div>
|
|
16795
16868
|
`,
|
|
16796
16869
|
}]
|
|
16797
|
-
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }
|
|
16870
|
+
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { title: [{
|
|
16871
|
+
type: ViewChild,
|
|
16872
|
+
args: ['title']
|
|
16873
|
+
}] } });
|
|
16798
16874
|
|
|
16799
16875
|
/*
|
|
16800
16876
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -16807,21 +16883,43 @@ class ClrDatagridDetail {
|
|
|
16807
16883
|
this.detailService = detailService;
|
|
16808
16884
|
this.commonStrings = commonStrings;
|
|
16809
16885
|
}
|
|
16886
|
+
get labelledBy() {
|
|
16887
|
+
var _a;
|
|
16888
|
+
if (this.ariaLabelledBy) {
|
|
16889
|
+
return this.header ? `${this.header.titleId} ${this.ariaLabelledBy}` : this.ariaLabelledBy;
|
|
16890
|
+
}
|
|
16891
|
+
else if (this.ariaLabel) {
|
|
16892
|
+
// If aria-label is set by the end user, do not set aria-labelledby
|
|
16893
|
+
return null;
|
|
16894
|
+
}
|
|
16895
|
+
else {
|
|
16896
|
+
return ((_a = this.header) === null || _a === void 0 ? void 0 : _a.titleId) || '';
|
|
16897
|
+
}
|
|
16898
|
+
}
|
|
16899
|
+
get label() {
|
|
16900
|
+
if (!this.ariaLabelledBy) {
|
|
16901
|
+
return this.ariaLabel || null;
|
|
16902
|
+
}
|
|
16903
|
+
else {
|
|
16904
|
+
return null;
|
|
16905
|
+
}
|
|
16906
|
+
}
|
|
16810
16907
|
close() {
|
|
16811
16908
|
this.detailService.close();
|
|
16812
16909
|
}
|
|
16813
16910
|
}
|
|
16814
16911
|
ClrDatagridDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridDetail, deps: [{ token: DetailService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16815
|
-
ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetail, selector: "clr-dg-detail", host: { properties: { "class.datagrid-detail-pane": "true" } }, queries: [{ propertyName: "header", first: true, predicate: ClrDatagridDetailHeader, descendants: true }], ngImport: i0, template: `
|
|
16912
|
+
ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetail, selector: "clr-dg-detail", inputs: { ariaLabelledBy: ["clrDetailAriaLabelledBy", "ariaLabelledBy"], ariaLabel: ["clrDetailAriaLabel", "ariaLabel"] }, host: { properties: { "class.datagrid-detail-pane": "true" } }, queries: [{ propertyName: "header", first: true, predicate: ClrDatagridDetailHeader, descendants: true }], ngImport: i0, template: `
|
|
16816
16913
|
<div
|
|
16817
16914
|
cdkTrapFocus
|
|
16818
|
-
[cdkTrapFocusAutoCapture]="
|
|
16915
|
+
[cdkTrapFocusAutoCapture]="!header"
|
|
16819
16916
|
class="datagrid-detail-pane-content"
|
|
16820
16917
|
*ngIf="detailService.isOpen"
|
|
16821
16918
|
role="dialog"
|
|
16822
16919
|
[id]="detailService.id"
|
|
16823
16920
|
aria-modal="true"
|
|
16824
|
-
[attr.aria-
|
|
16921
|
+
[attr.aria-labelledby]="labelledBy"
|
|
16922
|
+
[attr.aria-label]="label"
|
|
16825
16923
|
>
|
|
16826
16924
|
<div class="clr-sr-only">{{ commonStrings.keys.detailPaneStart }}</div>
|
|
16827
16925
|
<ng-content></ng-content>
|
|
@@ -16840,13 +16938,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16840
16938
|
template: `
|
|
16841
16939
|
<div
|
|
16842
16940
|
cdkTrapFocus
|
|
16843
|
-
[cdkTrapFocusAutoCapture]="
|
|
16941
|
+
[cdkTrapFocusAutoCapture]="!header"
|
|
16844
16942
|
class="datagrid-detail-pane-content"
|
|
16845
16943
|
*ngIf="detailService.isOpen"
|
|
16846
16944
|
role="dialog"
|
|
16847
16945
|
[id]="detailService.id"
|
|
16848
16946
|
aria-modal="true"
|
|
16849
|
-
[attr.aria-
|
|
16947
|
+
[attr.aria-labelledby]="labelledBy"
|
|
16948
|
+
[attr.aria-label]="label"
|
|
16850
16949
|
>
|
|
16851
16950
|
<div class="clr-sr-only">{{ commonStrings.keys.detailPaneStart }}</div>
|
|
16852
16951
|
<ng-content></ng-content>
|
|
@@ -16854,7 +16953,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16854
16953
|
</div>
|
|
16855
16954
|
`,
|
|
16856
16955
|
}]
|
|
16857
|
-
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
16956
|
+
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { ariaLabelledBy: [{
|
|
16957
|
+
type: Input,
|
|
16958
|
+
args: ['clrDetailAriaLabelledBy']
|
|
16959
|
+
}], ariaLabel: [{
|
|
16960
|
+
type: Input,
|
|
16961
|
+
args: ['clrDetailAriaLabel']
|
|
16962
|
+
}], header: [{
|
|
16858
16963
|
type: ContentChild,
|
|
16859
16964
|
args: [ClrDatagridDetailHeader]
|
|
16860
16965
|
}] } });
|
|
@@ -17132,6 +17237,9 @@ class ClrIfDetail {
|
|
|
17132
17237
|
}
|
|
17133
17238
|
this.skip = false;
|
|
17134
17239
|
}
|
|
17240
|
+
get viewContext() {
|
|
17241
|
+
return { $implicit: this.detailService.state };
|
|
17242
|
+
}
|
|
17135
17243
|
ngOnInit() {
|
|
17136
17244
|
this.subscriptions.push(this.detailService.stateChange.subscribe(state => {
|
|
17137
17245
|
if (state === true) {
|
|
@@ -17148,12 +17256,11 @@ class ClrIfDetail {
|
|
|
17148
17256
|
togglePanel(showPanel) {
|
|
17149
17257
|
let stateChangeParams = null;
|
|
17150
17258
|
if (showPanel === true) {
|
|
17151
|
-
|
|
17152
|
-
|
|
17153
|
-
|
|
17154
|
-
|
|
17155
|
-
|
|
17156
|
-
this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, embeddedViewContext);
|
|
17259
|
+
if (!this.embeddedViewRef) {
|
|
17260
|
+
// Create a context forward `Proxy` that will always bind to the user-specified context,
|
|
17261
|
+
// without having to re-assign it whenever changes.
|
|
17262
|
+
const viewContext = this._createContextForwardProxy();
|
|
17263
|
+
this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, viewContext);
|
|
17157
17264
|
}
|
|
17158
17265
|
this.skip = true;
|
|
17159
17266
|
stateChangeParams = this.detailService.state;
|
|
@@ -17164,6 +17271,27 @@ class ClrIfDetail {
|
|
|
17164
17271
|
}
|
|
17165
17272
|
this.stateChange.emit(stateChangeParams);
|
|
17166
17273
|
}
|
|
17274
|
+
/**
|
|
17275
|
+
* For a given outlet instance, we create a proxy object that delegates
|
|
17276
|
+
* to the user-specified context. This allows changing, or swapping out
|
|
17277
|
+
* the context object completely without having to destroy/re-create the view.
|
|
17278
|
+
*/
|
|
17279
|
+
_createContextForwardProxy() {
|
|
17280
|
+
return new Proxy({}, {
|
|
17281
|
+
set: (_target, prop, newValue) => {
|
|
17282
|
+
if (!this.viewContext) {
|
|
17283
|
+
return false;
|
|
17284
|
+
}
|
|
17285
|
+
return Reflect.set(this.viewContext, prop, newValue);
|
|
17286
|
+
},
|
|
17287
|
+
get: (_target, prop, receiver) => {
|
|
17288
|
+
if (!this.viewContext) {
|
|
17289
|
+
return undefined;
|
|
17290
|
+
}
|
|
17291
|
+
return Reflect.get(this.viewContext, prop, receiver);
|
|
17292
|
+
},
|
|
17293
|
+
});
|
|
17294
|
+
}
|
|
17167
17295
|
}
|
|
17168
17296
|
ClrIfDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrIfDetail, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: DetailService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17169
17297
|
ClrIfDetail.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrIfDetail, selector: "[clrIfDetail]", inputs: { state: ["clrIfDetail", "state"] }, outputs: { stateChange: "clrIfDetailChange" }, ngImport: i0 });
|
|
@@ -17375,7 +17503,7 @@ class ClrDatagridPagination {
|
|
|
17375
17503
|
* Set the input's value to the new current page. This is needed because the code
|
|
17376
17504
|
* above may have changed the value from what the user entered in.
|
|
17377
17505
|
*/
|
|
17378
|
-
this.currentPageInputRef.nativeElement.value = this.page.current;
|
|
17506
|
+
this.currentPageInputRef.nativeElement.value = this.page.current.toString();
|
|
17379
17507
|
}
|
|
17380
17508
|
}
|
|
17381
17509
|
ClrDatagridPagination.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPagination, deps: [{ token: Page }, { token: ClrCommonStringsService }, { token: DetailService }], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -17696,7 +17824,7 @@ const defaultCdkFixedSizeVirtualScrollInputs = {
|
|
|
17696
17824
|
maxBufferPx: 400,
|
|
17697
17825
|
};
|
|
17698
17826
|
class ClrDatagridVirtualScrollDirective {
|
|
17699
|
-
constructor(changeDetectorRef, iterableDiffers, items, ngZone, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, injector) {
|
|
17827
|
+
constructor(changeDetectorRef, iterableDiffers, items, ngZone, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, columnsService, injector) {
|
|
17700
17828
|
this.changeDetectorRef = changeDetectorRef;
|
|
17701
17829
|
this.iterableDiffers = iterableDiffers;
|
|
17702
17830
|
this.items = items;
|
|
@@ -17707,6 +17835,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17707
17835
|
this.scrollDispatcher = scrollDispatcher;
|
|
17708
17836
|
this.viewportRuler = viewportRuler;
|
|
17709
17837
|
this.datagrid = datagrid;
|
|
17838
|
+
this.columnsService = columnsService;
|
|
17710
17839
|
this.injector = injector;
|
|
17711
17840
|
this.renderedRangeChange = new EventEmitter();
|
|
17712
17841
|
this._cdkFixedSizeVirtualScrollInputs = Object.assign({}, defaultCdkFixedSizeVirtualScrollInputs);
|
|
@@ -17719,12 +17848,16 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17719
17848
|
}
|
|
17720
17849
|
});
|
|
17721
17850
|
});
|
|
17851
|
+
this.viewRepeater = new _RecycleViewRepeaterStrategy();
|
|
17722
17852
|
this.cdkVirtualForInputs = {
|
|
17723
17853
|
cdkVirtualForTrackBy: index => index,
|
|
17724
17854
|
};
|
|
17725
17855
|
this.items.smartenUp();
|
|
17726
17856
|
this.datagrid.hasVirtualScroller = true;
|
|
17857
|
+
this.datagrid.detailService.preventFocusScroll = true;
|
|
17727
17858
|
this.datagridElementRef = this.datagrid.el;
|
|
17859
|
+
// default
|
|
17860
|
+
this.cdkVirtualForTemplateCacheSize = 20;
|
|
17728
17861
|
this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
|
|
17729
17862
|
attributeFilter: ['class'],
|
|
17730
17863
|
attributeOldValue: true,
|
|
@@ -17785,7 +17918,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17785
17918
|
ngAfterViewInit() {
|
|
17786
17919
|
this.injector.runInContext(() => {
|
|
17787
17920
|
this.virtualScrollViewport = this.createVirtualScrollViewportForDatagrid(this.changeDetectorRef, this.ngZone, this.directionality, this.scrollDispatcher, this.viewportRuler, this.datagridElementRef, this.virtualScrollStrategy);
|
|
17788
|
-
this.cdkVirtualFor = new CdkVirtualForOf(this.viewContainerRef, this.templateRef, this.iterableDiffers,
|
|
17921
|
+
this.cdkVirtualFor = new CdkVirtualForOf(this.viewContainerRef, this.templateRef, this.iterableDiffers, this.viewRepeater, this.virtualScrollViewport, this.ngZone);
|
|
17789
17922
|
this.virtualScrollViewport.ngOnInit();
|
|
17790
17923
|
});
|
|
17791
17924
|
this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector('[role="grid"]');
|
|
@@ -17800,6 +17933,8 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17800
17933
|
if (datagridState.filters) {
|
|
17801
17934
|
this.virtualScrollViewport.scrollToIndex(0);
|
|
17802
17935
|
}
|
|
17936
|
+
}), this.columnsService.columnsStateChange.subscribe(() => {
|
|
17937
|
+
this.viewRepeater.detach();
|
|
17803
17938
|
}));
|
|
17804
17939
|
}
|
|
17805
17940
|
ngDoCheck() {
|
|
@@ -17875,7 +18010,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17875
18010
|
return virtualScrollViewport;
|
|
17876
18011
|
}
|
|
17877
18012
|
}
|
|
17878
|
-
ClrDatagridVirtualScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: Items, skipSelf: true }, { token: i0.NgZone }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1$2.Directionality }, { token: i3$1.ScrollDispatcher }, { token: i3$1.ViewportRuler }, { token: ClrDatagrid }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
18013
|
+
ClrDatagridVirtualScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: Items, skipSelf: true }, { token: i0.NgZone }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1$2.Directionality }, { token: i3$1.ScrollDispatcher }, { token: i3$1.ViewportRuler }, { token: ClrDatagrid }, { token: ColumnsService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17879
18014
|
ClrDatagridVirtualScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridVirtualScrollDirective, selector: "[ClrVirtualScroll]", inputs: { cdkVirtualForOf: ["clrVirtualRowsOf", "cdkVirtualForOf"], cdkVirtualForTrackBy: ["clrVirtualRowsTrackBy", "cdkVirtualForTrackBy"], cdkVirtualForTemplate: ["clrVirtualRowsTemplate", "cdkVirtualForTemplate"], cdkVirtualForTemplateCacheSize: ["clrVirtualRowsTemplateCacheSize", "cdkVirtualForTemplateCacheSize"], itemSize: ["clrVirtualRowsItemSize", "itemSize"], minBufferPx: ["clrVirtualRowsMinBufferPx", "minBufferPx"], maxBufferPx: ["clrVirtualRowsMaxBufferPx", "maxBufferPx"] }, outputs: { renderedRangeChange: "renderedRangeChange" }, providers: [Items], ngImport: i0 });
|
|
17880
18015
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, decorators: [{
|
|
17881
18016
|
type: Directive,
|
|
@@ -17886,7 +18021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17886
18021
|
}], ctorParameters: function () {
|
|
17887
18022
|
return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: Items, decorators: [{
|
|
17888
18023
|
type: SkipSelf
|
|
17889
|
-
}] }, { type: i0.NgZone }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1$2.Directionality }, { type: i3$1.ScrollDispatcher }, { type: i3$1.ViewportRuler }, { type: ClrDatagrid }, { type: i0.EnvironmentInjector }];
|
|
18024
|
+
}] }, { type: i0.NgZone }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1$2.Directionality }, { type: i3$1.ScrollDispatcher }, { type: i3$1.ViewportRuler }, { type: ClrDatagrid }, { type: ColumnsService }, { type: i0.EnvironmentInjector }];
|
|
17890
18025
|
}, propDecorators: { renderedRangeChange: [{
|
|
17891
18026
|
type: Output
|
|
17892
18027
|
}], cdkVirtualForOf: [{
|
|
@@ -18114,6 +18249,9 @@ class DatagridMainRenderer {
|
|
|
18114
18249
|
this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
|
|
18115
18250
|
this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
|
|
18116
18251
|
}
|
|
18252
|
+
ngOnInit() {
|
|
18253
|
+
this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
|
|
18254
|
+
}
|
|
18117
18255
|
ngAfterContentInit() {
|
|
18118
18256
|
this.setupColumns();
|
|
18119
18257
|
this.subscriptions.push(this.headers.changes.subscribe(() => {
|
|
@@ -18123,7 +18261,6 @@ class DatagridMainRenderer {
|
|
|
18123
18261
|
this.columnsSizesStable = false;
|
|
18124
18262
|
this.stabilizeColumns();
|
|
18125
18263
|
}));
|
|
18126
|
-
this.listenForColumnChanges();
|
|
18127
18264
|
}
|
|
18128
18265
|
// Initialize and set Table width for horizontal scrolling here.
|
|
18129
18266
|
ngAfterViewInit() {
|
|
@@ -18131,7 +18268,9 @@ class DatagridMainRenderer {
|
|
|
18131
18268
|
}
|
|
18132
18269
|
ngAfterViewChecked() {
|
|
18133
18270
|
if (this.shouldStabilizeColumns) {
|
|
18134
|
-
|
|
18271
|
+
setTimeout(() => {
|
|
18272
|
+
this.stabilizeColumns();
|
|
18273
|
+
}, 0);
|
|
18135
18274
|
}
|
|
18136
18275
|
if (this.shouldComputeHeight()) {
|
|
18137
18276
|
this.ngZone.runOutsideAngular(() => {
|
|
@@ -18165,7 +18304,10 @@ class DatagridMainRenderer {
|
|
|
18165
18304
|
setupColumns() {
|
|
18166
18305
|
this.headers.forEach((header, index) => header.setColumnState(index));
|
|
18167
18306
|
this.columnsService.columns.splice(this.headers.length); // Trim any old columns
|
|
18168
|
-
|
|
18307
|
+
// Sets columnIndex for each column
|
|
18308
|
+
this.columnsService.columns.forEach((column, index) => {
|
|
18309
|
+
this.columnsService.emitStateChange(column, { changes: [DatagridColumnChanges.INITIALIZE], columnIndex: index });
|
|
18310
|
+
});
|
|
18169
18311
|
}
|
|
18170
18312
|
shouldComputeHeight() {
|
|
18171
18313
|
if (!this._heightSet && this.page.size > 0) {
|
|
@@ -18219,6 +18361,10 @@ class DatagridMainRenderer {
|
|
|
18219
18361
|
});
|
|
18220
18362
|
}
|
|
18221
18363
|
columnStateChanged(state) {
|
|
18364
|
+
// eslint-disable-next-line eqeqeq
|
|
18365
|
+
if (!this.headers || state.columnIndex == null) {
|
|
18366
|
+
return;
|
|
18367
|
+
}
|
|
18222
18368
|
const columnIndex = state.columnIndex;
|
|
18223
18369
|
if (state.changes && state.changes.length) {
|
|
18224
18370
|
state.changes.forEach(change => {
|
|
@@ -18226,37 +18372,40 @@ class DatagridMainRenderer {
|
|
|
18226
18372
|
case DatagridColumnChanges.WIDTH:
|
|
18227
18373
|
this.headers.get(columnIndex).setWidth(state);
|
|
18228
18374
|
this.rows.forEach(row => {
|
|
18229
|
-
|
|
18375
|
+
var _a, _b;
|
|
18376
|
+
if ((row === null || row === void 0 ? void 0 : row.cells.length) === this.columnsService.columns.length) {
|
|
18230
18377
|
row.cells.get(columnIndex).setWidth(state);
|
|
18378
|
+
(_b = (_a = row.expandableRow) === null || _a === void 0 ? void 0 : _a.cells.get(columnIndex)) === null || _b === void 0 ? void 0 : _b.setWidth(state);
|
|
18231
18379
|
}
|
|
18232
18380
|
});
|
|
18233
18381
|
break;
|
|
18234
18382
|
case DatagridColumnChanges.HIDDEN:
|
|
18235
18383
|
this.headers.get(columnIndex).setHidden(state);
|
|
18236
18384
|
this.rows.forEach(row => {
|
|
18385
|
+
var _a, _b;
|
|
18237
18386
|
if (row.cells && row.cells.length) {
|
|
18238
18387
|
row.cells.get(columnIndex).setHidden(state);
|
|
18388
|
+
(_b = (_a = row.expandableRow) === null || _a === void 0 ? void 0 : _a.cells.get(columnIndex)) === null || _b === void 0 ? void 0 : _b.setHidden(state);
|
|
18239
18389
|
}
|
|
18240
18390
|
});
|
|
18241
18391
|
this.keyNavigation.resetKeyGrid();
|
|
18242
18392
|
break;
|
|
18393
|
+
case DatagridColumnChanges.INITIALIZE:
|
|
18394
|
+
if (state.hideable && state.hidden) {
|
|
18395
|
+
this.headers.get(columnIndex).setHidden(state);
|
|
18396
|
+
this.rows.forEach(row => {
|
|
18397
|
+
var _a;
|
|
18398
|
+
row.setCellsState();
|
|
18399
|
+
(_a = row.expandableRow) === null || _a === void 0 ? void 0 : _a.setCellsState();
|
|
18400
|
+
});
|
|
18401
|
+
}
|
|
18402
|
+
break;
|
|
18243
18403
|
default:
|
|
18244
18404
|
break;
|
|
18245
18405
|
}
|
|
18246
18406
|
});
|
|
18247
18407
|
}
|
|
18248
18408
|
}
|
|
18249
|
-
listenForColumnChanges() {
|
|
18250
|
-
this.columnsService.columns.forEach((column, index) => {
|
|
18251
|
-
this.columnsService.emitStateChange(column, { changes: [], columnIndex: index });
|
|
18252
|
-
});
|
|
18253
|
-
/*
|
|
18254
|
-
Merges all column subject so we can track them at once
|
|
18255
|
-
and receive only the changed column as result
|
|
18256
|
-
*/
|
|
18257
|
-
const columnChanges = merge(...this.columnsService.columns);
|
|
18258
|
-
this.subscriptions.push(columnChanges.subscribe(change => this.columnStateChanged(change)));
|
|
18259
|
-
}
|
|
18260
18409
|
/**
|
|
18261
18410
|
* Triggers a whole re-rendring cycle to set column sizes, if needed.
|
|
18262
18411
|
*/
|
|
@@ -18274,7 +18423,7 @@ class DatagridMainRenderer {
|
|
|
18274
18423
|
}
|
|
18275
18424
|
}
|
|
18276
18425
|
DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: DomAdapter }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
|
|
18277
|
-
DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer
|
|
18426
|
+
DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer }], ngImport: i0 });
|
|
18278
18427
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
|
|
18279
18428
|
type: Directive,
|
|
18280
18429
|
args: [{
|
|
@@ -18286,7 +18435,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18286
18435
|
args: [DatagridHeaderRenderer]
|
|
18287
18436
|
}], rows: [{
|
|
18288
18437
|
type: ContentChildren,
|
|
18289
|
-
args: [DatagridRowRenderer
|
|
18438
|
+
args: [DatagridRowRenderer]
|
|
18290
18439
|
}] } });
|
|
18291
18440
|
|
|
18292
18441
|
/*
|
|
@@ -18748,7 +18897,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18748
18897
|
}] } });
|
|
18749
18898
|
function eventIsInputEvent(event) {
|
|
18750
18899
|
const targetElement = event === null || event === void 0 ? void 0 : event.target;
|
|
18751
|
-
return (targetElement === null || targetElement === void 0 ? void 0 : targetElement.tagName)
|
|
18900
|
+
return (targetElement === null || targetElement === void 0 ? void 0 : targetElement.tagName)
|
|
18901
|
+
? ['INPUT', 'TEXTAREA', 'BUTTON', 'A', 'SELECT', 'OPTION'].includes(targetElement.tagName)
|
|
18902
|
+
: false;
|
|
18752
18903
|
}
|
|
18753
18904
|
|
|
18754
18905
|
/*
|
|
@@ -19722,7 +19873,7 @@ class ClrTreeNode {
|
|
|
19722
19873
|
}
|
|
19723
19874
|
setTabIndex(value) {
|
|
19724
19875
|
this.contentContainerTabindex = value;
|
|
19725
|
-
this.contentContainer.nativeElement.setAttribute('tabindex', value);
|
|
19876
|
+
this.contentContainer.nativeElement.setAttribute('tabindex', value.toString());
|
|
19726
19877
|
}
|
|
19727
19878
|
checkTabIndex(nodeId) {
|
|
19728
19879
|
if (isPlatformBrowser(this.platformId) && this.nodeId !== nodeId && this.contentContainerTabindex !== -1) {
|
|
@@ -21982,18 +22133,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21982
22133
|
* This software is released under MIT license.
|
|
21983
22134
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
21984
22135
|
*/
|
|
21985
|
-
const
|
|
21986
|
-
const
|
|
21987
|
-
|
|
21988
|
-
|
|
21989
|
-
|
|
21990
|
-
|
|
22136
|
+
const createCloseButton = (document, ariaLabel) => {
|
|
22137
|
+
const closeButton = document.createElement('button');
|
|
22138
|
+
closeButton.setAttribute('aria-label', ariaLabel);
|
|
22139
|
+
closeButton.setAttribute('aria-hidden', 'true');
|
|
22140
|
+
closeButton.innerHTML = `
|
|
22141
|
+
<cds-icon
|
|
22142
|
+
inner-offset="1"
|
|
22143
|
+
shape="close"
|
|
22144
|
+
size="32"
|
|
22145
|
+
</cds-icon>
|
|
22146
|
+
`;
|
|
21991
22147
|
/**
|
|
21992
22148
|
* The button is hidden by default based on our Desktop-first approach.
|
|
21993
22149
|
*/
|
|
21994
|
-
|
|
21995
|
-
|
|
21996
|
-
return
|
|
22150
|
+
closeButton.setAttribute('hidden', 'true');
|
|
22151
|
+
closeButton.className = 'clr-nav-close';
|
|
22152
|
+
return closeButton;
|
|
21997
22153
|
};
|
|
21998
22154
|
class ClrNavLevel {
|
|
21999
22155
|
constructor(platformId, cdkTrapFocus, responsiveNavService, elementRef, renderer, injector) {
|
|
@@ -22045,7 +22201,7 @@ class ClrNavLevel {
|
|
|
22045
22201
|
this.addNavClass(this.level);
|
|
22046
22202
|
}
|
|
22047
22203
|
ngAfterViewInit() {
|
|
22048
|
-
const closeButton =
|
|
22204
|
+
const closeButton = createCloseButton(this._document, this.closeButtonAriaLabel);
|
|
22049
22205
|
this.renderer.listen(closeButton, 'click', this.close.bind(this));
|
|
22050
22206
|
this.renderer.insertBefore(this.elementRef.nativeElement, closeButton, this.elementRef.nativeElement.firstChild); // Adding the button at the top of the nav
|
|
22051
22207
|
if (this._document.body.clientWidth < LARGE_BREAKPOINT) {
|
|
@@ -23556,6 +23712,13 @@ class ClrModal {
|
|
|
23556
23712
|
this._openChanged.emit(true);
|
|
23557
23713
|
this.modalStackService.trackModalOpen(this);
|
|
23558
23714
|
}
|
|
23715
|
+
backdropClick() {
|
|
23716
|
+
if (this.staticBackdrop) {
|
|
23717
|
+
this.title.nativeElement.focus();
|
|
23718
|
+
return;
|
|
23719
|
+
}
|
|
23720
|
+
this.close();
|
|
23721
|
+
}
|
|
23559
23722
|
close() {
|
|
23560
23723
|
if (this.stopClose) {
|
|
23561
23724
|
this.altClose.emit(false);
|
|
@@ -23575,7 +23738,7 @@ class ClrModal {
|
|
|
23575
23738
|
}
|
|
23576
23739
|
}
|
|
23577
23740
|
ClrModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModal, deps: [{ token: ScrollingService }, { token: ClrCommonStringsService }, { token: ModalStackService }, { token: ClrModalConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
23578
|
-
ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"
|
|
23741
|
+
ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }], viewProviders: [ScrollingService], animations: [
|
|
23579
23742
|
trigger('fadeMove', [
|
|
23580
23743
|
transition('* => fadeDown', [
|
|
23581
23744
|
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
@@ -23610,8 +23773,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23610
23773
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
23611
23774
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
23612
23775
|
]),
|
|
23613
|
-
], template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"
|
|
23614
|
-
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: {
|
|
23776
|
+
], template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
|
|
23777
|
+
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
|
|
23778
|
+
type: ViewChild,
|
|
23779
|
+
args: ['title']
|
|
23780
|
+
}], _open: [{
|
|
23615
23781
|
type: Input,
|
|
23616
23782
|
args: ['clrModalOpen']
|
|
23617
23783
|
}, {
|
|
@@ -23772,7 +23938,9 @@ class ClrSidePanel {
|
|
|
23772
23938
|
this.modal.close();
|
|
23773
23939
|
}
|
|
23774
23940
|
documentClick(event) {
|
|
23775
|
-
if (!this.element.nativeElement.contains(event.target) &&
|
|
23941
|
+
if (!this.element.nativeElement.contains(event.target) &&
|
|
23942
|
+
this.modal._open &&
|
|
23943
|
+
!this.configuration.backdrop) {
|
|
23776
23944
|
this.modal.close();
|
|
23777
23945
|
}
|
|
23778
23946
|
}
|
|
@@ -24663,13 +24831,13 @@ class ClrTimeline {
|
|
|
24663
24831
|
}
|
|
24664
24832
|
}
|
|
24665
24833
|
ClrTimeline.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimeline, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24666
|
-
ClrTimeline.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimeline, selector: "clr-timeline", inputs: { layout: ["clrLayout", "layout"] }, host: { properties: { "class.clr-timeline": "true", "class.clr-timeline-vertical": "this.isVertical" } }, providers: [TimelineIconAttributeService], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
24834
|
+
ClrTimeline.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimeline, selector: "clr-timeline", inputs: { layout: ["clrLayout", "layout"] }, host: { properties: { "class.clr-timeline": "true", "attr.role": "\"list\"", "class.clr-timeline-vertical": "this.isVertical" } }, providers: [TimelineIconAttributeService], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
24667
24835
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimeline, decorators: [{
|
|
24668
24836
|
type: Component,
|
|
24669
24837
|
args: [{
|
|
24670
24838
|
selector: 'clr-timeline',
|
|
24671
24839
|
template: `<ng-content></ng-content>`,
|
|
24672
|
-
host: { '[class.clr-timeline]': 'true' },
|
|
24840
|
+
host: { '[class.clr-timeline]': 'true', '[attr.role]': '"list"' },
|
|
24673
24841
|
providers: [TimelineIconAttributeService],
|
|
24674
24842
|
}]
|
|
24675
24843
|
}], propDecorators: { layout: [{
|
|
@@ -24740,7 +24908,7 @@ class ClrTimelineStep {
|
|
|
24740
24908
|
}
|
|
24741
24909
|
}
|
|
24742
24910
|
ClrTimelineStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimelineStep, deps: [{ token: TimelineIconAttributeService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
24743
|
-
ClrTimelineStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimelineStep, selector: "clr-timeline-step", inputs: { state: ["clrState", "state"] }, host: { properties: { "class.clr-timeline-step": "true" } }, queries: [{ propertyName: "stepTitle", first: true, predicate: ClrTimelineStepTitle, descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
24911
|
+
ClrTimelineStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimelineStep, selector: "clr-timeline-step", inputs: { state: ["clrState", "state"] }, host: { properties: { "class.clr-timeline-step": "true", "attr.role": "\"listitem\"" } }, queries: [{ propertyName: "stepTitle", first: true, predicate: ClrTimelineStepTitle, descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
24744
24912
|
<ng-content select="clr-timeline-step-header"></ng-content>
|
|
24745
24913
|
<span class="clr-sr-only">{{ stepTitleText }}</span>
|
|
24746
24914
|
<ng-container *ngIf="!isProcessing; else processing">
|
|
@@ -24784,7 +24952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24784
24952
|
<clr-spinner clrMedium [attr.aria-label]="iconAriaLabel"></clr-spinner>
|
|
24785
24953
|
</ng-template>
|
|
24786
24954
|
`,
|
|
24787
|
-
host: { '[class.clr-timeline-step]': 'true' },
|
|
24955
|
+
host: { '[class.clr-timeline-step]': 'true', '[attr.role]': '"listitem"' },
|
|
24788
24956
|
}]
|
|
24789
24957
|
}], ctorParameters: function () {
|
|
24790
24958
|
return [{ type: TimelineIconAttributeService }, { type: undefined, decorators: [{
|
|
@@ -26778,15 +26946,12 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
26778
26946
|
(click)="click()"
|
|
26779
26947
|
[attr.disabled]="isDisabled ? '' : null"
|
|
26780
26948
|
>
|
|
26781
|
-
<
|
|
26782
|
-
<cds-icon
|
|
26783
|
-
|
|
26784
|
-
|
|
26785
|
-
|
|
26786
|
-
|
|
26787
|
-
></cds-icon>
|
|
26788
|
-
<ng-content *ngIf="!hasError"></ng-content>
|
|
26789
|
-
</span>
|
|
26949
|
+
<div class="clr-wizard-stepnav-link-icon">
|
|
26950
|
+
<cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
|
|
26951
|
+
<cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
|
|
26952
|
+
</div>
|
|
26953
|
+
|
|
26954
|
+
<div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
|
|
26790
26955
|
<span class="clr-wizard-stepnav-link-title">
|
|
26791
26956
|
<ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
|
|
26792
26957
|
</span>
|
|
@@ -26805,15 +26970,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26805
26970
|
(click)="click()"
|
|
26806
26971
|
[attr.disabled]="isDisabled ? '' : null"
|
|
26807
26972
|
>
|
|
26808
|
-
<
|
|
26809
|
-
<cds-icon
|
|
26810
|
-
|
|
26811
|
-
|
|
26812
|
-
|
|
26813
|
-
|
|
26814
|
-
></cds-icon>
|
|
26815
|
-
<ng-content *ngIf="!hasError"></ng-content>
|
|
26816
|
-
</span>
|
|
26973
|
+
<div class="clr-wizard-stepnav-link-icon">
|
|
26974
|
+
<cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
|
|
26975
|
+
<cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
|
|
26976
|
+
</div>
|
|
26977
|
+
|
|
26978
|
+
<div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
|
|
26817
26979
|
<span class="clr-wizard-stepnav-link-title">
|
|
26818
26980
|
<ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
|
|
26819
26981
|
</span>
|
|
@@ -27283,7 +27445,7 @@ class ClrWizard {
|
|
|
27283
27445
|
}
|
|
27284
27446
|
}
|
|
27285
27447
|
ClrWizard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: WizardNavigationService }, { token: PageCollectionService }, { token: ButtonHubService }, { token: HeaderActionService }, { token: i0.ElementRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
27286
|
-
ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage
|
|
27448
|
+
ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById", "clrModalOverrideScrollService"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
|
|
27287
27449
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
27288
27450
|
type: Component,
|
|
27289
27451
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -27292,7 +27454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27292
27454
|
'[class.wizard-lg]': "size == 'lg'",
|
|
27293
27455
|
'[class.wizard-xl]': "size == 'xl'",
|
|
27294
27456
|
'[class.lastPage]': 'navService.currentPageIsLast',
|
|
27295
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage
|
|
27457
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
|
|
27296
27458
|
}], ctorParameters: function () {
|
|
27297
27459
|
return [{ type: undefined, decorators: [{
|
|
27298
27460
|
type: Inject,
|
|
@@ -27568,7 +27730,7 @@ const CLR_WIZARD_DIRECTIVES = [
|
|
|
27568
27730
|
];
|
|
27569
27731
|
class ClrWizardModule {
|
|
27570
27732
|
constructor() {
|
|
27571
|
-
ClarityIcons.addIcons(errorStandardIcon);
|
|
27733
|
+
ClarityIcons.addIcons(errorStandardIcon, successStandardIcon);
|
|
27572
27734
|
}
|
|
27573
27735
|
}
|
|
27574
27736
|
ClrWizardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|