@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/fesm2020/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
|
/*
|
|
@@ -325,7 +324,7 @@ const commonStringsDefault = {
|
|
|
325
324
|
singleSelectionAriaLabel: 'Single selection header',
|
|
326
325
|
singleActionableAriaLabel: 'Single actionable header',
|
|
327
326
|
detailExpandableAriaLabel: 'Toggle more row content',
|
|
328
|
-
datagridFilterAriaLabel: '
|
|
327
|
+
datagridFilterAriaLabel: '{COLUMN} filter',
|
|
329
328
|
datagridFilterDialogAriaLabel: 'Filter dialog',
|
|
330
329
|
columnSeparatorAriaLabel: 'Column resize handle',
|
|
331
330
|
columnSeparatorDescription: 'Use left or right key to resize the column',
|
|
@@ -1160,6 +1159,9 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1160
1159
|
// set panel status on form status change only after the form becomes invalid
|
|
1161
1160
|
const invalidStatusTrigger = this.formGroup.statusChanges.pipe(filter(status => status === 'INVALID'));
|
|
1162
1161
|
this.subscriptions.push(this.formGroup.statusChanges.pipe(skipUntil(invalidStatusTrigger), distinctUntilChanged()).subscribe(status => {
|
|
1162
|
+
if (!this.formGroup.touched) {
|
|
1163
|
+
return;
|
|
1164
|
+
}
|
|
1163
1165
|
if (status === 'VALID') {
|
|
1164
1166
|
this.stepperService.setPanelValid(this.id);
|
|
1165
1167
|
}
|
|
@@ -4755,7 +4757,10 @@ class ClrAbstractContainer {
|
|
|
4755
4757
|
this.subscriptions = [];
|
|
4756
4758
|
this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
|
|
4757
4759
|
this.state = state;
|
|
4758
|
-
|
|
4760
|
+
// Make sure everything is updated before dispatching the values for helpers
|
|
4761
|
+
setTimeout(() => {
|
|
4762
|
+
this.updateHelpers();
|
|
4763
|
+
});
|
|
4759
4764
|
}));
|
|
4760
4765
|
this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
|
|
4761
4766
|
this.control = control;
|
|
@@ -5607,8 +5612,10 @@ ClrCheckboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
5607
5612
|
<label *ngIf="!label && addGrid()"></label>
|
|
5608
5613
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
5609
5614
|
<ng-content select="clr-checkbox-wrapper,clr-toggle-wrapper"></ng-content>
|
|
5610
|
-
<div class="clr-subtext-wrapper">
|
|
5611
|
-
<ng-content select="clr-control-helper"
|
|
5615
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
5616
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
5617
|
+
</div>
|
|
5618
|
+
<div *ngIf="showInvalid || showValid" class="clr-subtext-wrapper">
|
|
5612
5619
|
<cds-icon
|
|
5613
5620
|
*ngIf="showInvalid"
|
|
5614
5621
|
class="clr-validate-icon"
|
|
@@ -5637,8 +5644,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5637
5644
|
<label *ngIf="!label && addGrid()"></label>
|
|
5638
5645
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
5639
5646
|
<ng-content select="clr-checkbox-wrapper,clr-toggle-wrapper"></ng-content>
|
|
5640
|
-
<div class="clr-subtext-wrapper">
|
|
5641
|
-
<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">
|
|
5642
5651
|
<cds-icon
|
|
5643
5652
|
*ngIf="showInvalid"
|
|
5644
5653
|
class="clr-validate-icon"
|
|
@@ -6820,7 +6829,8 @@ class ClrOption {
|
|
|
6820
6829
|
this.optionProxy.id = this._id;
|
|
6821
6830
|
}
|
|
6822
6831
|
}
|
|
6823
|
-
onClick() {
|
|
6832
|
+
onClick(event) {
|
|
6833
|
+
event.stopPropagation();
|
|
6824
6834
|
if (this.optionSelectionService.multiselectable) {
|
|
6825
6835
|
this.optionSelectionService.toggle(this.value);
|
|
6826
6836
|
}
|
|
@@ -6835,7 +6845,7 @@ class ClrOption {
|
|
|
6835
6845
|
}
|
|
6836
6846
|
}
|
|
6837
6847
|
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 });
|
|
6838
|
-
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: `
|
|
6848
|
+
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: `
|
|
6839
6849
|
<ng-content></ng-content>
|
|
6840
6850
|
<span *ngIf="selected" class="clr-sr-only">{{ commonStrings.keys.comboboxSelected }}</span>
|
|
6841
6851
|
`, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
@@ -6869,7 +6879,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
6869
6879
|
args: ['class.clr-focus']
|
|
6870
6880
|
}], onClick: [{
|
|
6871
6881
|
type: HostListener,
|
|
6872
|
-
args: ['click']
|
|
6882
|
+
args: ['click', ['$event']]
|
|
6873
6883
|
}] } });
|
|
6874
6884
|
|
|
6875
6885
|
/*
|
|
@@ -11009,8 +11019,10 @@ ClrRadioContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
11009
11019
|
<label *ngIf="!label && addGrid()"></label>
|
|
11010
11020
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
11011
11021
|
<ng-content select="clr-radio-wrapper"></ng-content>
|
|
11012
|
-
<div class="clr-subtext-wrapper">
|
|
11013
|
-
<ng-content select="clr-control-helper"
|
|
11022
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
11023
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
11024
|
+
</div>
|
|
11025
|
+
<div *ngIf="showValid || showInvalid" class="clr-subtext-wrapper">
|
|
11014
11026
|
<cds-icon
|
|
11015
11027
|
*ngIf="showInvalid"
|
|
11016
11028
|
class="clr-validate-icon"
|
|
@@ -11039,8 +11051,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
11039
11051
|
<label *ngIf="!label && addGrid()"></label>
|
|
11040
11052
|
<div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
|
|
11041
11053
|
<ng-content select="clr-radio-wrapper"></ng-content>
|
|
11042
|
-
<div class="clr-subtext-wrapper">
|
|
11043
|
-
<ng-content select="clr-control-helper"
|
|
11054
|
+
<div *ngIf="showHelper" class="clr-subtext-wrapper">
|
|
11055
|
+
<ng-content select="clr-control-helper"></ng-content>
|
|
11056
|
+
</div>
|
|
11057
|
+
<div *ngIf="showValid || showInvalid" class="clr-subtext-wrapper">
|
|
11044
11058
|
<cds-icon
|
|
11045
11059
|
*ngIf="showInvalid"
|
|
11046
11060
|
class="clr-validate-icon"
|
|
@@ -12093,6 +12107,191 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12093
12107
|
type: Directive
|
|
12094
12108
|
}], ctorParameters: function () { return [{ type: FiltersProvider }]; } });
|
|
12095
12109
|
|
|
12110
|
+
/*
|
|
12111
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
12112
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
12113
|
+
* This software is released under MIT license.
|
|
12114
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
12115
|
+
*/
|
|
12116
|
+
function getTabableItems(el) {
|
|
12117
|
+
const tabableSelector = [
|
|
12118
|
+
'a[href]',
|
|
12119
|
+
'area[href]',
|
|
12120
|
+
'input:not([disabled])',
|
|
12121
|
+
'button:not([disabled])',
|
|
12122
|
+
'select:not([disabled])',
|
|
12123
|
+
'textarea:not([disabled])',
|
|
12124
|
+
'iframe',
|
|
12125
|
+
'object',
|
|
12126
|
+
'embed',
|
|
12127
|
+
'*[tabindex]:not([disabled])',
|
|
12128
|
+
'*[contenteditable=true]',
|
|
12129
|
+
'[role=button]:not([disabled])',
|
|
12130
|
+
].join(',');
|
|
12131
|
+
return Array.from(el.querySelectorAll(tabableSelector));
|
|
12132
|
+
}
|
|
12133
|
+
class KeyNavigationGridController {
|
|
12134
|
+
constructor(zone) {
|
|
12135
|
+
this.zone = zone;
|
|
12136
|
+
this.skipItemFocus = false;
|
|
12137
|
+
this.listenersAdded = false;
|
|
12138
|
+
this.destroy$ = new Subject();
|
|
12139
|
+
this._activeCell = null;
|
|
12140
|
+
this.config = {
|
|
12141
|
+
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
12142
|
+
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
12143
|
+
keyGrid: '[role=grid]',
|
|
12144
|
+
};
|
|
12145
|
+
}
|
|
12146
|
+
get grid() {
|
|
12147
|
+
return this.host?.querySelector(this.config.keyGrid);
|
|
12148
|
+
}
|
|
12149
|
+
get rows() {
|
|
12150
|
+
return this.host?.querySelectorAll(this.config.keyGridRows);
|
|
12151
|
+
}
|
|
12152
|
+
get cells() {
|
|
12153
|
+
return this.host?.querySelectorAll(this.config.keyGridCells);
|
|
12154
|
+
}
|
|
12155
|
+
ngOnDestroy() {
|
|
12156
|
+
this.destroy$.next();
|
|
12157
|
+
this.destroy$.complete();
|
|
12158
|
+
}
|
|
12159
|
+
addListeners() {
|
|
12160
|
+
if (this.listenersAdded) {
|
|
12161
|
+
return;
|
|
12162
|
+
}
|
|
12163
|
+
this.zone.runOutsideAngular(() => {
|
|
12164
|
+
fromEvent(this.grid, 'mousedown')
|
|
12165
|
+
.pipe(takeUntil(this.destroy$))
|
|
12166
|
+
.subscribe((e) => {
|
|
12167
|
+
// 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
|
|
12168
|
+
if (e.buttons === 1 && !e.ctrlKey) {
|
|
12169
|
+
const activeCell = this.cells
|
|
12170
|
+
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
12171
|
+
: null;
|
|
12172
|
+
if (activeCell) {
|
|
12173
|
+
this.setActiveCell(activeCell);
|
|
12174
|
+
}
|
|
12175
|
+
}
|
|
12176
|
+
});
|
|
12177
|
+
fromEvent(this.grid, 'wheel')
|
|
12178
|
+
.pipe(takeUntil(this.destroy$))
|
|
12179
|
+
.subscribe(() => {
|
|
12180
|
+
this.removeActiveCell();
|
|
12181
|
+
});
|
|
12182
|
+
fromEvent(this.grid, 'keydown')
|
|
12183
|
+
.pipe(takeUntil(this.destroy$))
|
|
12184
|
+
.subscribe((e) => {
|
|
12185
|
+
// Skip column resize events
|
|
12186
|
+
if (e.target.classList.contains('drag-handle') &&
|
|
12187
|
+
(e.code === 'ArrowLeft' || e.code === 'ArrowRight')) {
|
|
12188
|
+
return;
|
|
12189
|
+
}
|
|
12190
|
+
if (e.code === 'ArrowUp' ||
|
|
12191
|
+
e.code === 'ArrowDown' ||
|
|
12192
|
+
e.code === 'ArrowLeft' ||
|
|
12193
|
+
e.code === 'ArrowRight' ||
|
|
12194
|
+
e.code === 'End' ||
|
|
12195
|
+
e.code === 'Home' ||
|
|
12196
|
+
e.code === 'PageUp' ||
|
|
12197
|
+
e.code === 'PageDown') {
|
|
12198
|
+
const { x, y } = this.getNextItemCoordinate(e);
|
|
12199
|
+
const activeItem = this.rows
|
|
12200
|
+
? Array.from(this.rows[y].querySelectorAll(this.config.keyGridCells))[x]
|
|
12201
|
+
: null;
|
|
12202
|
+
if (activeItem) {
|
|
12203
|
+
this.setActiveCell(activeItem);
|
|
12204
|
+
}
|
|
12205
|
+
e.preventDefault();
|
|
12206
|
+
}
|
|
12207
|
+
});
|
|
12208
|
+
});
|
|
12209
|
+
this.listenersAdded = true;
|
|
12210
|
+
}
|
|
12211
|
+
initializeKeyGrid(host) {
|
|
12212
|
+
this.host = host;
|
|
12213
|
+
this.addListeners();
|
|
12214
|
+
this.resetKeyGrid();
|
|
12215
|
+
}
|
|
12216
|
+
resetKeyGrid() {
|
|
12217
|
+
this.cells?.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
12218
|
+
const firstCell = this.cells ? this.cells[0] : null;
|
|
12219
|
+
firstCell?.setAttribute('tabindex', '0');
|
|
12220
|
+
}
|
|
12221
|
+
removeActiveCell() {
|
|
12222
|
+
this._activeCell = null;
|
|
12223
|
+
}
|
|
12224
|
+
getActiveCell() {
|
|
12225
|
+
return this._activeCell;
|
|
12226
|
+
}
|
|
12227
|
+
setActiveCell(activeCell) {
|
|
12228
|
+
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
12229
|
+
if (prior) {
|
|
12230
|
+
prior.setAttribute('tabindex', '-1');
|
|
12231
|
+
}
|
|
12232
|
+
activeCell.setAttribute('tabindex', '0');
|
|
12233
|
+
this._activeCell = activeCell;
|
|
12234
|
+
const items = getTabableItems(activeCell);
|
|
12235
|
+
const item = activeCell.getAttribute('role') !== 'columnheader' && items[0] ? items[0] : activeCell;
|
|
12236
|
+
if (!this.skipItemFocus) {
|
|
12237
|
+
item.focus();
|
|
12238
|
+
}
|
|
12239
|
+
}
|
|
12240
|
+
getNextItemCoordinate(e) {
|
|
12241
|
+
let currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
12242
|
+
if (e.code === 'Tab') {
|
|
12243
|
+
currentCell = document.activeElement;
|
|
12244
|
+
}
|
|
12245
|
+
const currentRow = this.rows && currentCell ? Array.from(this.rows).find(r => r.contains(currentCell)) : null;
|
|
12246
|
+
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
12247
|
+
const numOfColumns = this.cells ? Math.floor(this.cells.length / this.rows.length - 1) : 0;
|
|
12248
|
+
let x = currentRow && currentCell
|
|
12249
|
+
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
12250
|
+
: 0;
|
|
12251
|
+
let y = currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0;
|
|
12252
|
+
const dir = this.host.dir;
|
|
12253
|
+
const inlineStart = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
12254
|
+
const inlineEnd = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
12255
|
+
const itemsPerPage = Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.rows[0].clientHeight) - 1 || 0;
|
|
12256
|
+
if (e.code === 'ArrowUp' && y !== 0) {
|
|
12257
|
+
y = y - 1;
|
|
12258
|
+
}
|
|
12259
|
+
else if (e.code === 'ArrowDown' && y < numOfRows) {
|
|
12260
|
+
y = y + 1;
|
|
12261
|
+
}
|
|
12262
|
+
else if (e.code === inlineStart && x !== 0) {
|
|
12263
|
+
x = x - 1;
|
|
12264
|
+
}
|
|
12265
|
+
else if (e.code === inlineEnd && x < numOfColumns) {
|
|
12266
|
+
x = x + 1;
|
|
12267
|
+
}
|
|
12268
|
+
else if (e.code === 'End') {
|
|
12269
|
+
x = numOfColumns;
|
|
12270
|
+
if (e.ctrlKey) {
|
|
12271
|
+
y = numOfRows;
|
|
12272
|
+
}
|
|
12273
|
+
}
|
|
12274
|
+
else if (e.code === 'Home') {
|
|
12275
|
+
x = 0;
|
|
12276
|
+
if (e.ctrlKey) {
|
|
12277
|
+
y = 0;
|
|
12278
|
+
}
|
|
12279
|
+
}
|
|
12280
|
+
else if (e.code === 'PageUp') {
|
|
12281
|
+
y = y - itemsPerPage > 0 ? y - itemsPerPage + 1 : 1;
|
|
12282
|
+
}
|
|
12283
|
+
else if (e.code === 'PageDown') {
|
|
12284
|
+
y = y + itemsPerPage < numOfRows ? y + itemsPerPage : numOfRows;
|
|
12285
|
+
}
|
|
12286
|
+
return { x, y };
|
|
12287
|
+
}
|
|
12288
|
+
}
|
|
12289
|
+
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12290
|
+
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
12291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, decorators: [{
|
|
12292
|
+
type: Injectable
|
|
12293
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
12294
|
+
|
|
12096
12295
|
/*
|
|
12097
12296
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
12098
12297
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -12105,12 +12304,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12105
12304
|
* since it can be anything (not just a text input).
|
|
12106
12305
|
*/
|
|
12107
12306
|
class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
12108
|
-
constructor(_filters, commonStrings, smartToggleService, platformId, elementRef) {
|
|
12307
|
+
constructor(_filters, commonStrings, smartToggleService, platformId, elementRef, keyNavigation) {
|
|
12109
12308
|
super(_filters);
|
|
12110
12309
|
this.commonStrings = commonStrings;
|
|
12111
12310
|
this.smartToggleService = smartToggleService;
|
|
12112
12311
|
this.platformId = platformId;
|
|
12113
12312
|
this.elementRef = elementRef;
|
|
12313
|
+
this.keyNavigation = keyNavigation;
|
|
12114
12314
|
this.openChange = new EventEmitter(false);
|
|
12115
12315
|
this.ariaExpanded = false;
|
|
12116
12316
|
this.popoverId = uniqueIdFactory();
|
|
@@ -12139,6 +12339,9 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
12139
12339
|
if (!open && isPlatformBrowser(this.platformId)) {
|
|
12140
12340
|
this.anchor.nativeElement.focus();
|
|
12141
12341
|
}
|
|
12342
|
+
if (this.keyNavigation) {
|
|
12343
|
+
this.keyNavigation.skipItemFocus = open;
|
|
12344
|
+
}
|
|
12142
12345
|
// keep track of the state
|
|
12143
12346
|
this._open = open;
|
|
12144
12347
|
}
|
|
@@ -12153,7 +12356,9 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
12153
12356
|
return !!this.filter && this.filter.isActive();
|
|
12154
12357
|
}
|
|
12155
12358
|
ngOnChanges() {
|
|
12156
|
-
|
|
12359
|
+
setTimeout(() => {
|
|
12360
|
+
this.setToggleButtonAriaLabel();
|
|
12361
|
+
});
|
|
12157
12362
|
}
|
|
12158
12363
|
ngOnDestroy() {
|
|
12159
12364
|
super.ngOnDestroy();
|
|
@@ -12172,7 +12377,7 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
12172
12377
|
});
|
|
12173
12378
|
}
|
|
12174
12379
|
}
|
|
12175
|
-
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 });
|
|
12380
|
+
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 });
|
|
12176
12381
|
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: `
|
|
12177
12382
|
<button
|
|
12178
12383
|
class="datagrid-filter-toggle"
|
|
@@ -12257,7 +12462,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12257
12462
|
}], ctorParameters: function () { return [{ type: FiltersProvider }, { type: ClrCommonStringsService }, { type: ClrPopoverToggleService }, { type: undefined, decorators: [{
|
|
12258
12463
|
type: Inject,
|
|
12259
12464
|
args: [PLATFORM_ID]
|
|
12260
|
-
}] }, { type: i0.ElementRef }
|
|
12465
|
+
}] }, { type: i0.ElementRef }, { type: KeyNavigationGridController, decorators: [{
|
|
12466
|
+
type: Optional
|
|
12467
|
+
}] }]; }, propDecorators: { openChange: [{
|
|
12261
12468
|
type: Output,
|
|
12262
12469
|
args: ['clrDgFilterOpenChange']
|
|
12263
12470
|
}], anchor: [{
|
|
@@ -13015,6 +13222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
13015
13222
|
class DetailService {
|
|
13016
13223
|
constructor(modalStackService) {
|
|
13017
13224
|
this.modalStackService = modalStackService;
|
|
13225
|
+
this.preventScroll = false;
|
|
13018
13226
|
this.toggleState = false;
|
|
13019
13227
|
this._enabled = false;
|
|
13020
13228
|
this._state = new BehaviorSubject(this.toggleState);
|
|
@@ -13025,6 +13233,12 @@ class DetailService {
|
|
|
13025
13233
|
set enabled(state) {
|
|
13026
13234
|
this._enabled = state;
|
|
13027
13235
|
}
|
|
13236
|
+
get preventFocusScroll() {
|
|
13237
|
+
return this.preventScroll;
|
|
13238
|
+
}
|
|
13239
|
+
set preventFocusScroll(preventScroll) {
|
|
13240
|
+
this.preventScroll = preventScroll;
|
|
13241
|
+
}
|
|
13028
13242
|
get state() {
|
|
13029
13243
|
return this.cache;
|
|
13030
13244
|
}
|
|
@@ -13043,15 +13257,13 @@ class DetailService {
|
|
|
13043
13257
|
}
|
|
13044
13258
|
close() {
|
|
13045
13259
|
this.toggleState = false;
|
|
13260
|
+
this.returnFocus();
|
|
13046
13261
|
this._state.next(this.toggleState);
|
|
13047
13262
|
this.modalStackService.trackModalClose(this);
|
|
13048
|
-
// In the case of browser zoom greater than 250%, the detail pane toggle button is not visible on the page.
|
|
13049
|
-
// Wait for the detail pane to close, and return focus to the detail toggle button.
|
|
13050
|
-
setTimeout(() => this.returnFocus(), 0);
|
|
13051
13263
|
}
|
|
13052
13264
|
returnFocus() {
|
|
13053
13265
|
if (this.button) {
|
|
13054
|
-
this.button.focus();
|
|
13266
|
+
this.button.focus({ preventScroll: this.preventFocusScroll });
|
|
13055
13267
|
this.button = null;
|
|
13056
13268
|
}
|
|
13057
13269
|
}
|
|
@@ -14256,9 +14468,9 @@ class ClrDatagridPlaceholder {
|
|
|
14256
14468
|
}
|
|
14257
14469
|
ClrDatagridPlaceholder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPlaceholder, deps: [{ token: Items }], target: i0.ɵɵFactoryTarget.Component });
|
|
14258
14470
|
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: `
|
|
14259
|
-
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid"
|
|
14471
|
+
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid">
|
|
14260
14472
|
<div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
|
|
14261
|
-
<span
|
|
14473
|
+
<span class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
|
|
14262
14474
|
</div>
|
|
14263
14475
|
`, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
14264
14476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPlaceholder, decorators: [{
|
|
@@ -14266,9 +14478,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
14266
14478
|
args: [{
|
|
14267
14479
|
selector: 'clr-dg-placeholder',
|
|
14268
14480
|
template: `
|
|
14269
|
-
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid"
|
|
14481
|
+
<div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid">
|
|
14270
14482
|
<div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
|
|
14271
|
-
<span
|
|
14483
|
+
<span class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
|
|
14272
14484
|
</div>
|
|
14273
14485
|
`,
|
|
14274
14486
|
host: { '[class.datagrid-placeholder-container]': 'true' },
|
|
@@ -15112,6 +15324,8 @@ class ClrDatagridRow {
|
|
|
15112
15324
|
this.document = document;
|
|
15113
15325
|
this.selectedChanged = new EventEmitter(false);
|
|
15114
15326
|
this.expandedChange = new EventEmitter(false);
|
|
15327
|
+
this.detailDisabled = false;
|
|
15328
|
+
this.detailHidden = false;
|
|
15115
15329
|
this.displayCells = false;
|
|
15116
15330
|
this.expandAnimationTrigger = false;
|
|
15117
15331
|
/* reference to the enum so that template can access */
|
|
@@ -15339,11 +15553,11 @@ class ClrDatagridRow {
|
|
|
15339
15553
|
}
|
|
15340
15554
|
}
|
|
15341
15555
|
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 });
|
|
15342
|
-
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: [
|
|
15556
|
+
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: [
|
|
15343
15557
|
DatagridIfExpandService,
|
|
15344
15558
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15345
15559
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15346
|
-
], 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" }] });
|
|
15560
|
+
], 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" }] });
|
|
15347
15561
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
15348
15562
|
type: Component,
|
|
15349
15563
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -15355,7 +15569,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15355
15569
|
DatagridIfExpandService,
|
|
15356
15570
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15357
15571
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15358
|
-
], 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" }]
|
|
15572
|
+
], 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" }]
|
|
15359
15573
|
}], ctorParameters: function () { 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: [{
|
|
15360
15574
|
type: Inject,
|
|
15361
15575
|
args: [DOCUMENT]
|
|
@@ -15365,6 +15579,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15365
15579
|
}], expandedChange: [{
|
|
15366
15580
|
type: Output,
|
|
15367
15581
|
args: ['clrDgExpandedChange']
|
|
15582
|
+
}], detailDisabled: [{
|
|
15583
|
+
type: Input,
|
|
15584
|
+
args: ['clrDgDetailDisabled']
|
|
15585
|
+
}], detailHidden: [{
|
|
15586
|
+
type: Input,
|
|
15587
|
+
args: ['clrDgDetailHidden']
|
|
15368
15588
|
}], dgCells: [{
|
|
15369
15589
|
type: ContentChildren,
|
|
15370
15590
|
args: [ClrDatagridCell]
|
|
@@ -15413,10 +15633,11 @@ var DatagridColumnChanges;
|
|
|
15413
15633
|
(function (DatagridColumnChanges) {
|
|
15414
15634
|
DatagridColumnChanges[DatagridColumnChanges["WIDTH"] = 0] = "WIDTH";
|
|
15415
15635
|
DatagridColumnChanges[DatagridColumnChanges["HIDDEN"] = 1] = "HIDDEN";
|
|
15636
|
+
DatagridColumnChanges[DatagridColumnChanges["INITIALIZE"] = 2] = "INITIALIZE";
|
|
15416
15637
|
})(DatagridColumnChanges || (DatagridColumnChanges = {}));
|
|
15417
15638
|
const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
|
|
15418
15639
|
.map(key => DatagridColumnChanges[key])
|
|
15419
|
-
.filter(key => key === parseInt(key, 10)); // extracts only integer keys
|
|
15640
|
+
.filter(key => key === parseInt(key, 10) && key !== DatagridColumnChanges.INITIALIZE); // extracts only integer keys
|
|
15420
15641
|
|
|
15421
15642
|
/*
|
|
15422
15643
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -15427,6 +15648,7 @@ const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
|
|
|
15427
15648
|
class ColumnsService {
|
|
15428
15649
|
constructor() {
|
|
15429
15650
|
this.columns = [];
|
|
15651
|
+
this.columnsStateChange = new BehaviorSubject(null);
|
|
15430
15652
|
this._cache = [];
|
|
15431
15653
|
}
|
|
15432
15654
|
get columnStates() {
|
|
@@ -15448,7 +15670,9 @@ class ColumnsService {
|
|
|
15448
15670
|
resetToLastCache() {
|
|
15449
15671
|
this._cache.forEach((state, index) => {
|
|
15450
15672
|
// Just emit the exact value from the cache
|
|
15451
|
-
|
|
15673
|
+
const cachedState = { ...state, changes: ALL_COLUMN_CHANGES };
|
|
15674
|
+
this.columns[index].next(cachedState);
|
|
15675
|
+
this.columnsStateChange.next(cachedState);
|
|
15452
15676
|
});
|
|
15453
15677
|
this._cache = [];
|
|
15454
15678
|
}
|
|
@@ -15460,7 +15684,9 @@ class ColumnsService {
|
|
|
15460
15684
|
this.emitStateChange(this.columns[columnIndex], diff);
|
|
15461
15685
|
}
|
|
15462
15686
|
emitStateChange(column, diff) {
|
|
15463
|
-
|
|
15687
|
+
const changedState = { ...column.value, ...diff };
|
|
15688
|
+
column.next(changedState);
|
|
15689
|
+
this.columnsStateChange.next(changedState);
|
|
15464
15690
|
}
|
|
15465
15691
|
}
|
|
15466
15692
|
ColumnsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ColumnsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -15536,188 +15762,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15536
15762
|
type: Injectable
|
|
15537
15763
|
}], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
|
|
15538
15764
|
|
|
15539
|
-
/*
|
|
15540
|
-
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
15541
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
15542
|
-
* This software is released under MIT license.
|
|
15543
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
15544
|
-
*/
|
|
15545
|
-
function getTabableItems(el) {
|
|
15546
|
-
const tabableSelector = [
|
|
15547
|
-
'a[href]',
|
|
15548
|
-
'area[href]',
|
|
15549
|
-
'input:not([disabled])',
|
|
15550
|
-
'button:not([disabled])',
|
|
15551
|
-
'select:not([disabled])',
|
|
15552
|
-
'textarea:not([disabled])',
|
|
15553
|
-
'iframe',
|
|
15554
|
-
'object',
|
|
15555
|
-
'embed',
|
|
15556
|
-
'*[tabindex]',
|
|
15557
|
-
'*[contenteditable=true]',
|
|
15558
|
-
'[role=button]:not([disabled])',
|
|
15559
|
-
].join(',');
|
|
15560
|
-
return Array.from(el.querySelectorAll(tabableSelector));
|
|
15561
|
-
}
|
|
15562
|
-
class KeyNavigationGridController {
|
|
15563
|
-
constructor(zone) {
|
|
15564
|
-
this.zone = zone;
|
|
15565
|
-
this.listenersAdded = false;
|
|
15566
|
-
this.destroy$ = new Subject();
|
|
15567
|
-
this._activeCell = null;
|
|
15568
|
-
this.config = {
|
|
15569
|
-
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
15570
|
-
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
15571
|
-
keyGrid: '[role=grid]',
|
|
15572
|
-
};
|
|
15573
|
-
}
|
|
15574
|
-
get grid() {
|
|
15575
|
-
return this.host?.querySelector(this.config.keyGrid);
|
|
15576
|
-
}
|
|
15577
|
-
get rows() {
|
|
15578
|
-
return this.host?.querySelectorAll(this.config.keyGridRows);
|
|
15579
|
-
}
|
|
15580
|
-
get cells() {
|
|
15581
|
-
return this.host?.querySelectorAll(this.config.keyGridCells);
|
|
15582
|
-
}
|
|
15583
|
-
ngOnDestroy() {
|
|
15584
|
-
this.destroy$.next();
|
|
15585
|
-
this.destroy$.complete();
|
|
15586
|
-
}
|
|
15587
|
-
addListeners() {
|
|
15588
|
-
if (this.listenersAdded) {
|
|
15589
|
-
return;
|
|
15590
|
-
}
|
|
15591
|
-
this.zone.runOutsideAngular(() => {
|
|
15592
|
-
fromEvent(this.grid, 'mousedown')
|
|
15593
|
-
.pipe(takeUntil(this.destroy$))
|
|
15594
|
-
.subscribe((e) => {
|
|
15595
|
-
// 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
|
|
15596
|
-
if (e.buttons === 1 && !e.ctrlKey) {
|
|
15597
|
-
const activeCell = this.cells
|
|
15598
|
-
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
15599
|
-
: null;
|
|
15600
|
-
if (activeCell) {
|
|
15601
|
-
this.setActiveCell(activeCell);
|
|
15602
|
-
}
|
|
15603
|
-
}
|
|
15604
|
-
});
|
|
15605
|
-
fromEvent(this.grid, 'wheel')
|
|
15606
|
-
.pipe(takeUntil(this.destroy$))
|
|
15607
|
-
.subscribe(() => {
|
|
15608
|
-
this.removeActiveCell();
|
|
15609
|
-
});
|
|
15610
|
-
fromEvent(this.grid, 'keydown')
|
|
15611
|
-
.pipe(takeUntil(this.destroy$))
|
|
15612
|
-
.subscribe((e) => {
|
|
15613
|
-
// Skip column resize events
|
|
15614
|
-
if (e.target.classList.contains('drag-handle') &&
|
|
15615
|
-
(e.code === 'ArrowLeft' || e.code === 'ArrowRight')) {
|
|
15616
|
-
return;
|
|
15617
|
-
}
|
|
15618
|
-
if (e.code === 'ArrowUp' ||
|
|
15619
|
-
e.code === 'ArrowDown' ||
|
|
15620
|
-
e.code === 'ArrowLeft' ||
|
|
15621
|
-
e.code === 'ArrowRight' ||
|
|
15622
|
-
e.code === 'End' ||
|
|
15623
|
-
e.code === 'Home' ||
|
|
15624
|
-
e.code === 'PageUp' ||
|
|
15625
|
-
e.code === 'PageDown') {
|
|
15626
|
-
const { x, y } = this.getNextItemCoordinate(e);
|
|
15627
|
-
const activeItem = this.rows
|
|
15628
|
-
? Array.from(this.rows[y].querySelectorAll(this.config.keyGridCells))[x]
|
|
15629
|
-
: null;
|
|
15630
|
-
if (activeItem) {
|
|
15631
|
-
this.setActiveCell(activeItem);
|
|
15632
|
-
}
|
|
15633
|
-
e.preventDefault();
|
|
15634
|
-
}
|
|
15635
|
-
});
|
|
15636
|
-
});
|
|
15637
|
-
this.listenersAdded = true;
|
|
15638
|
-
}
|
|
15639
|
-
initializeKeyGrid(host) {
|
|
15640
|
-
this.host = host;
|
|
15641
|
-
this.addListeners();
|
|
15642
|
-
this.resetKeyGrid();
|
|
15643
|
-
}
|
|
15644
|
-
resetKeyGrid() {
|
|
15645
|
-
this.cells?.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
15646
|
-
const firstCell = this.cells ? this.cells[0] : null;
|
|
15647
|
-
firstCell?.setAttribute('tabindex', '0');
|
|
15648
|
-
}
|
|
15649
|
-
removeActiveCell() {
|
|
15650
|
-
this._activeCell = null;
|
|
15651
|
-
}
|
|
15652
|
-
getActiveCell() {
|
|
15653
|
-
return this._activeCell;
|
|
15654
|
-
}
|
|
15655
|
-
setActiveCell(activeCell) {
|
|
15656
|
-
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
15657
|
-
if (prior) {
|
|
15658
|
-
prior.setAttribute('tabindex', '-1');
|
|
15659
|
-
}
|
|
15660
|
-
activeCell.setAttribute('tabindex', '0');
|
|
15661
|
-
const items = getTabableItems(activeCell);
|
|
15662
|
-
const item = activeCell.getAttribute('role') !== 'columnheader' && items[0] ? items[0] : activeCell;
|
|
15663
|
-
item.focus();
|
|
15664
|
-
this._activeCell = item;
|
|
15665
|
-
}
|
|
15666
|
-
getNextItemCoordinate(e) {
|
|
15667
|
-
let currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
15668
|
-
if (e.code === 'Tab') {
|
|
15669
|
-
currentCell = document.activeElement;
|
|
15670
|
-
}
|
|
15671
|
-
const currentRow = this.rows && currentCell ? Array.from(this.rows).find(r => r.contains(currentCell)) : null;
|
|
15672
|
-
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
15673
|
-
const numOfColumns = this.cells ? Math.floor(this.cells.length / this.rows.length - 1) : 0;
|
|
15674
|
-
let x = currentRow && currentCell
|
|
15675
|
-
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
15676
|
-
: 0;
|
|
15677
|
-
let y = currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0;
|
|
15678
|
-
const dir = this.host.dir;
|
|
15679
|
-
const inlineStart = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
15680
|
-
const inlineEnd = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
15681
|
-
const itemsPerPage = Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.rows[0].clientHeight) - 1 || 0;
|
|
15682
|
-
if (e.code === 'ArrowUp' && y !== 0) {
|
|
15683
|
-
y = y - 1;
|
|
15684
|
-
}
|
|
15685
|
-
else if (e.code === 'ArrowDown' && y < numOfRows) {
|
|
15686
|
-
y = y + 1;
|
|
15687
|
-
}
|
|
15688
|
-
else if (e.code === inlineStart && x !== 0) {
|
|
15689
|
-
x = x - 1;
|
|
15690
|
-
}
|
|
15691
|
-
else if (e.code === inlineEnd && x < numOfColumns) {
|
|
15692
|
-
x = x + 1;
|
|
15693
|
-
}
|
|
15694
|
-
else if (e.code === 'End') {
|
|
15695
|
-
x = numOfColumns;
|
|
15696
|
-
if (e.ctrlKey) {
|
|
15697
|
-
y = numOfRows;
|
|
15698
|
-
}
|
|
15699
|
-
}
|
|
15700
|
-
else if (e.code === 'Home') {
|
|
15701
|
-
x = 0;
|
|
15702
|
-
if (e.ctrlKey) {
|
|
15703
|
-
y = 0;
|
|
15704
|
-
}
|
|
15705
|
-
}
|
|
15706
|
-
else if (e.code === 'PageUp') {
|
|
15707
|
-
y = y - itemsPerPage > 0 ? y - itemsPerPage + 1 : 1;
|
|
15708
|
-
}
|
|
15709
|
-
else if (e.code === 'PageDown') {
|
|
15710
|
-
y = y + itemsPerPage < numOfRows ? y + itemsPerPage : numOfRows;
|
|
15711
|
-
}
|
|
15712
|
-
return { x, y };
|
|
15713
|
-
}
|
|
15714
|
-
}
|
|
15715
|
-
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
15716
|
-
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
15717
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, decorators: [{
|
|
15718
|
-
type: Injectable
|
|
15719
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
15720
|
-
|
|
15721
15765
|
/*
|
|
15722
15766
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
15723
15767
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -15751,7 +15795,6 @@ class DatagridCellRenderer {
|
|
|
15751
15795
|
}
|
|
15752
15796
|
}
|
|
15753
15797
|
resetState(state) {
|
|
15754
|
-
state.changes = ALL_COLUMN_CHANGES;
|
|
15755
15798
|
this.setWidth(state);
|
|
15756
15799
|
this.setHidden(state);
|
|
15757
15800
|
}
|
|
@@ -15832,7 +15875,7 @@ class DatagridRowRenderer {
|
|
|
15832
15875
|
}
|
|
15833
15876
|
}
|
|
15834
15877
|
DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15835
|
-
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 });
|
|
15878
|
+
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 });
|
|
15836
15879
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
|
|
15837
15880
|
type: Directive,
|
|
15838
15881
|
args: [{
|
|
@@ -15841,6 +15884,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15841
15884
|
}], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
|
|
15842
15885
|
type: ContentChildren,
|
|
15843
15886
|
args: [DatagridCellRenderer]
|
|
15887
|
+
}], expandableRow: [{
|
|
15888
|
+
type: ContentChild,
|
|
15889
|
+
args: [forwardRef(() => DatagridRowRenderer)]
|
|
15844
15890
|
}] } });
|
|
15845
15891
|
|
|
15846
15892
|
/*
|
|
@@ -15976,26 +16022,17 @@ class ClrDatagrid {
|
|
|
15976
16022
|
this.rows.forEach(row => {
|
|
15977
16023
|
this._displayedRows.insert(row._view);
|
|
15978
16024
|
});
|
|
15979
|
-
|
|
15980
|
-
|
|
15981
|
-
|
|
15982
|
-
|
|
15983
|
-
|
|
15984
|
-
|
|
15985
|
-
|
|
15986
|
-
|
|
15987
|
-
|
|
15988
|
-
else if (!this.hasVirtualScroller || !row) {
|
|
15989
|
-
this.detailService.close();
|
|
16025
|
+
this.updateDetailState();
|
|
16026
|
+
// retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
|
|
16027
|
+
if (this.hasVirtualScroller) {
|
|
16028
|
+
const active = this.keyNavigation.getActiveCell();
|
|
16029
|
+
const isFocusInsideDatagrid = this.datagrid.nativeElement.contains(document.activeElement);
|
|
16030
|
+
if (active && isFocusInsideDatagrid) {
|
|
16031
|
+
this.zone.runOutsideAngular(() => {
|
|
16032
|
+
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
16033
|
+
});
|
|
15990
16034
|
}
|
|
15991
16035
|
}
|
|
15992
|
-
// retain active cell when navigating with PageUp and PageDown buttons in virtual scroller
|
|
15993
|
-
const active = this.keyNavigation.getActiveCell();
|
|
15994
|
-
if (active) {
|
|
15995
|
-
this.zone.runOutsideAngular(() => {
|
|
15996
|
-
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
15997
|
-
});
|
|
15998
|
-
}
|
|
15999
16036
|
}));
|
|
16000
16037
|
}
|
|
16001
16038
|
/**
|
|
@@ -16003,6 +16040,7 @@ class ClrDatagrid {
|
|
|
16003
16040
|
*/
|
|
16004
16041
|
ngAfterViewInit() {
|
|
16005
16042
|
this.keyNavigation.initializeKeyGrid(this.el.nativeElement);
|
|
16043
|
+
this.updateDetailState();
|
|
16006
16044
|
// TODO: determine if we can get rid of provider wiring in view init so that subscriptions can be done earlier
|
|
16007
16045
|
this.refresh.emit(this.stateProvider.state);
|
|
16008
16046
|
this._subscriptions.push(this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
|
|
@@ -16076,9 +16114,39 @@ class ClrDatagrid {
|
|
|
16076
16114
|
ngOnDestroy() {
|
|
16077
16115
|
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
16078
16116
|
}
|
|
16117
|
+
toggleAllSelected($event) {
|
|
16118
|
+
$event.preventDefault();
|
|
16119
|
+
if (this.hasVirtualScroller) {
|
|
16120
|
+
return;
|
|
16121
|
+
}
|
|
16122
|
+
this.allSelected = !this.allSelected;
|
|
16123
|
+
}
|
|
16079
16124
|
resize() {
|
|
16080
16125
|
this.organizer.resize();
|
|
16081
16126
|
}
|
|
16127
|
+
/**
|
|
16128
|
+
* Checks the state of detail panel and if it's opened then
|
|
16129
|
+
* find the matching row and trigger the detail panel
|
|
16130
|
+
*/
|
|
16131
|
+
updateDetailState() {
|
|
16132
|
+
// Try to update only when there is something cached and its open.
|
|
16133
|
+
if (this.detailService.state && this.detailService.isOpen) {
|
|
16134
|
+
const row = this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state));
|
|
16135
|
+
/**
|
|
16136
|
+
* Reopen updated row or close it
|
|
16137
|
+
*/
|
|
16138
|
+
if (row) {
|
|
16139
|
+
this.detailService.open(row.item, row.detailButton.nativeElement);
|
|
16140
|
+
// always keep open when virtual scroll is available otherwise close it
|
|
16141
|
+
}
|
|
16142
|
+
else if (!this.hasVirtualScroller) {
|
|
16143
|
+
// Using setTimeout to make sure the inner cycles in rows are done
|
|
16144
|
+
setTimeout(() => {
|
|
16145
|
+
this.detailService.close();
|
|
16146
|
+
});
|
|
16147
|
+
}
|
|
16148
|
+
}
|
|
16149
|
+
}
|
|
16082
16150
|
/**
|
|
16083
16151
|
* Public method to re-trigger the computation of displayed items manually
|
|
16084
16152
|
*/
|
|
@@ -16103,7 +16171,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
16103
16171
|
ColumnsService,
|
|
16104
16172
|
DisplayModeService,
|
|
16105
16173
|
KeyNavigationGridController,
|
|
16106
|
-
], 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)=\"
|
|
16174
|
+
], 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" }] });
|
|
16107
16175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
16108
16176
|
type: Component,
|
|
16109
16177
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -16125,7 +16193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16125
16193
|
], host: {
|
|
16126
16194
|
'[class.datagrid-host]': 'true',
|
|
16127
16195
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
16128
|
-
}, 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)=\"
|
|
16196
|
+
}, 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" }]
|
|
16129
16197
|
}], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
|
|
16130
16198
|
type: Inject,
|
|
16131
16199
|
args: [DOCUMENT]
|
|
@@ -16294,6 +16362,7 @@ class ClrDatagridActionOverflow {
|
|
|
16294
16362
|
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 });
|
|
16295
16363
|
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: `
|
|
16296
16364
|
<button
|
|
16365
|
+
tabindex="-1"
|
|
16297
16366
|
class="datagrid-action-toggle"
|
|
16298
16367
|
type="button"
|
|
16299
16368
|
role="button"
|
|
@@ -16328,6 +16397,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16328
16397
|
hostDirectives: [ClrPopoverHostDirective],
|
|
16329
16398
|
template: `
|
|
16330
16399
|
<button
|
|
16400
|
+
tabindex="-1"
|
|
16331
16401
|
class="datagrid-action-toggle"
|
|
16332
16402
|
type="button"
|
|
16333
16403
|
role="button"
|
|
@@ -16633,10 +16703,13 @@ class ClrDatagridDetailHeader {
|
|
|
16633
16703
|
get titleId() {
|
|
16634
16704
|
return `${this.detailService.id}-title`;
|
|
16635
16705
|
}
|
|
16706
|
+
ngAfterViewInit() {
|
|
16707
|
+
this.title.nativeElement.focus();
|
|
16708
|
+
}
|
|
16636
16709
|
}
|
|
16637
16710
|
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 });
|
|
16638
|
-
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: `
|
|
16639
|
-
<div class="datagrid-detail-header-title"
|
|
16711
|
+
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: `
|
|
16712
|
+
<div #title class="datagrid-detail-header-title" tabindex="-1" [id]="titleId">
|
|
16640
16713
|
<ng-content></ng-content>
|
|
16641
16714
|
</div>
|
|
16642
16715
|
<div class="datagrid-detail-pane-close">
|
|
@@ -16658,7 +16731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16658
16731
|
'[class.datagrid-detail-header]': 'true',
|
|
16659
16732
|
},
|
|
16660
16733
|
template: `
|
|
16661
|
-
<div class="datagrid-detail-header-title"
|
|
16734
|
+
<div #title class="datagrid-detail-header-title" tabindex="-1" [id]="titleId">
|
|
16662
16735
|
<ng-content></ng-content>
|
|
16663
16736
|
</div>
|
|
16664
16737
|
<div class="datagrid-detail-pane-close">
|
|
@@ -16673,7 +16746,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16673
16746
|
</div>
|
|
16674
16747
|
`,
|
|
16675
16748
|
}]
|
|
16676
|
-
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }
|
|
16749
|
+
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { title: [{
|
|
16750
|
+
type: ViewChild,
|
|
16751
|
+
args: ['title']
|
|
16752
|
+
}] } });
|
|
16677
16753
|
|
|
16678
16754
|
/*
|
|
16679
16755
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -16686,21 +16762,42 @@ class ClrDatagridDetail {
|
|
|
16686
16762
|
this.detailService = detailService;
|
|
16687
16763
|
this.commonStrings = commonStrings;
|
|
16688
16764
|
}
|
|
16765
|
+
get labelledBy() {
|
|
16766
|
+
if (this.ariaLabelledBy) {
|
|
16767
|
+
return this.header ? `${this.header.titleId} ${this.ariaLabelledBy}` : this.ariaLabelledBy;
|
|
16768
|
+
}
|
|
16769
|
+
else if (this.ariaLabel) {
|
|
16770
|
+
// If aria-label is set by the end user, do not set aria-labelledby
|
|
16771
|
+
return null;
|
|
16772
|
+
}
|
|
16773
|
+
else {
|
|
16774
|
+
return this.header?.titleId || '';
|
|
16775
|
+
}
|
|
16776
|
+
}
|
|
16777
|
+
get label() {
|
|
16778
|
+
if (!this.ariaLabelledBy) {
|
|
16779
|
+
return this.ariaLabel || null;
|
|
16780
|
+
}
|
|
16781
|
+
else {
|
|
16782
|
+
return null;
|
|
16783
|
+
}
|
|
16784
|
+
}
|
|
16689
16785
|
close() {
|
|
16690
16786
|
this.detailService.close();
|
|
16691
16787
|
}
|
|
16692
16788
|
}
|
|
16693
16789
|
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 });
|
|
16694
|
-
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: `
|
|
16790
|
+
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: `
|
|
16695
16791
|
<div
|
|
16696
16792
|
cdkTrapFocus
|
|
16697
|
-
[cdkTrapFocusAutoCapture]="
|
|
16793
|
+
[cdkTrapFocusAutoCapture]="!header"
|
|
16698
16794
|
class="datagrid-detail-pane-content"
|
|
16699
16795
|
*ngIf="detailService.isOpen"
|
|
16700
16796
|
role="dialog"
|
|
16701
16797
|
[id]="detailService.id"
|
|
16702
16798
|
aria-modal="true"
|
|
16703
|
-
[attr.aria-
|
|
16799
|
+
[attr.aria-labelledby]="labelledBy"
|
|
16800
|
+
[attr.aria-label]="label"
|
|
16704
16801
|
>
|
|
16705
16802
|
<div class="clr-sr-only">{{ commonStrings.keys.detailPaneStart }}</div>
|
|
16706
16803
|
<ng-content></ng-content>
|
|
@@ -16719,13 +16816,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16719
16816
|
template: `
|
|
16720
16817
|
<div
|
|
16721
16818
|
cdkTrapFocus
|
|
16722
|
-
[cdkTrapFocusAutoCapture]="
|
|
16819
|
+
[cdkTrapFocusAutoCapture]="!header"
|
|
16723
16820
|
class="datagrid-detail-pane-content"
|
|
16724
16821
|
*ngIf="detailService.isOpen"
|
|
16725
16822
|
role="dialog"
|
|
16726
16823
|
[id]="detailService.id"
|
|
16727
16824
|
aria-modal="true"
|
|
16728
|
-
[attr.aria-
|
|
16825
|
+
[attr.aria-labelledby]="labelledBy"
|
|
16826
|
+
[attr.aria-label]="label"
|
|
16729
16827
|
>
|
|
16730
16828
|
<div class="clr-sr-only">{{ commonStrings.keys.detailPaneStart }}</div>
|
|
16731
16829
|
<ng-content></ng-content>
|
|
@@ -16733,7 +16831,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16733
16831
|
</div>
|
|
16734
16832
|
`,
|
|
16735
16833
|
}]
|
|
16736
|
-
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
16834
|
+
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { ariaLabelledBy: [{
|
|
16835
|
+
type: Input,
|
|
16836
|
+
args: ['clrDetailAriaLabelledBy']
|
|
16837
|
+
}], ariaLabel: [{
|
|
16838
|
+
type: Input,
|
|
16839
|
+
args: ['clrDetailAriaLabel']
|
|
16840
|
+
}], header: [{
|
|
16737
16841
|
type: ContentChild,
|
|
16738
16842
|
args: [ClrDatagridDetailHeader]
|
|
16739
16843
|
}] } });
|
|
@@ -17007,6 +17111,9 @@ class ClrIfDetail {
|
|
|
17007
17111
|
}
|
|
17008
17112
|
this.skip = false;
|
|
17009
17113
|
}
|
|
17114
|
+
get viewContext() {
|
|
17115
|
+
return { $implicit: this.detailService.state };
|
|
17116
|
+
}
|
|
17010
17117
|
ngOnInit() {
|
|
17011
17118
|
this.subscriptions.push(this.detailService.stateChange.subscribe(state => {
|
|
17012
17119
|
if (state === true) {
|
|
@@ -17023,12 +17130,11 @@ class ClrIfDetail {
|
|
|
17023
17130
|
togglePanel(showPanel) {
|
|
17024
17131
|
let stateChangeParams = null;
|
|
17025
17132
|
if (showPanel === true) {
|
|
17026
|
-
|
|
17027
|
-
|
|
17028
|
-
|
|
17029
|
-
|
|
17030
|
-
|
|
17031
|
-
this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, embeddedViewContext);
|
|
17133
|
+
if (!this.embeddedViewRef) {
|
|
17134
|
+
// Create a context forward `Proxy` that will always bind to the user-specified context,
|
|
17135
|
+
// without having to re-assign it whenever changes.
|
|
17136
|
+
const viewContext = this._createContextForwardProxy();
|
|
17137
|
+
this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, viewContext);
|
|
17032
17138
|
}
|
|
17033
17139
|
this.skip = true;
|
|
17034
17140
|
stateChangeParams = this.detailService.state;
|
|
@@ -17039,6 +17145,27 @@ class ClrIfDetail {
|
|
|
17039
17145
|
}
|
|
17040
17146
|
this.stateChange.emit(stateChangeParams);
|
|
17041
17147
|
}
|
|
17148
|
+
/**
|
|
17149
|
+
* For a given outlet instance, we create a proxy object that delegates
|
|
17150
|
+
* to the user-specified context. This allows changing, or swapping out
|
|
17151
|
+
* the context object completely without having to destroy/re-create the view.
|
|
17152
|
+
*/
|
|
17153
|
+
_createContextForwardProxy() {
|
|
17154
|
+
return new Proxy({}, {
|
|
17155
|
+
set: (_target, prop, newValue) => {
|
|
17156
|
+
if (!this.viewContext) {
|
|
17157
|
+
return false;
|
|
17158
|
+
}
|
|
17159
|
+
return Reflect.set(this.viewContext, prop, newValue);
|
|
17160
|
+
},
|
|
17161
|
+
get: (_target, prop, receiver) => {
|
|
17162
|
+
if (!this.viewContext) {
|
|
17163
|
+
return undefined;
|
|
17164
|
+
}
|
|
17165
|
+
return Reflect.get(this.viewContext, prop, receiver);
|
|
17166
|
+
},
|
|
17167
|
+
});
|
|
17168
|
+
}
|
|
17042
17169
|
}
|
|
17043
17170
|
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 });
|
|
17044
17171
|
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 });
|
|
@@ -17250,7 +17377,7 @@ class ClrDatagridPagination {
|
|
|
17250
17377
|
* Set the input's value to the new current page. This is needed because the code
|
|
17251
17378
|
* above may have changed the value from what the user entered in.
|
|
17252
17379
|
*/
|
|
17253
|
-
this.currentPageInputRef.nativeElement.value = this.page.current;
|
|
17380
|
+
this.currentPageInputRef.nativeElement.value = this.page.current.toString();
|
|
17254
17381
|
}
|
|
17255
17382
|
}
|
|
17256
17383
|
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 });
|
|
@@ -17571,7 +17698,7 @@ const defaultCdkFixedSizeVirtualScrollInputs = {
|
|
|
17571
17698
|
maxBufferPx: 400,
|
|
17572
17699
|
};
|
|
17573
17700
|
class ClrDatagridVirtualScrollDirective {
|
|
17574
|
-
constructor(changeDetectorRef, iterableDiffers, items, ngZone, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, injector) {
|
|
17701
|
+
constructor(changeDetectorRef, iterableDiffers, items, ngZone, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, columnsService, injector) {
|
|
17575
17702
|
this.changeDetectorRef = changeDetectorRef;
|
|
17576
17703
|
this.iterableDiffers = iterableDiffers;
|
|
17577
17704
|
this.items = items;
|
|
@@ -17582,6 +17709,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17582
17709
|
this.scrollDispatcher = scrollDispatcher;
|
|
17583
17710
|
this.viewportRuler = viewportRuler;
|
|
17584
17711
|
this.datagrid = datagrid;
|
|
17712
|
+
this.columnsService = columnsService;
|
|
17585
17713
|
this.injector = injector;
|
|
17586
17714
|
this.renderedRangeChange = new EventEmitter();
|
|
17587
17715
|
this._cdkFixedSizeVirtualScrollInputs = { ...defaultCdkFixedSizeVirtualScrollInputs };
|
|
@@ -17594,12 +17722,16 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17594
17722
|
}
|
|
17595
17723
|
});
|
|
17596
17724
|
});
|
|
17725
|
+
this.viewRepeater = new _RecycleViewRepeaterStrategy();
|
|
17597
17726
|
this.cdkVirtualForInputs = {
|
|
17598
17727
|
cdkVirtualForTrackBy: index => index,
|
|
17599
17728
|
};
|
|
17600
17729
|
this.items.smartenUp();
|
|
17601
17730
|
this.datagrid.hasVirtualScroller = true;
|
|
17731
|
+
this.datagrid.detailService.preventFocusScroll = true;
|
|
17602
17732
|
this.datagridElementRef = this.datagrid.el;
|
|
17733
|
+
// default
|
|
17734
|
+
this.cdkVirtualForTemplateCacheSize = 20;
|
|
17603
17735
|
this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
|
|
17604
17736
|
attributeFilter: ['class'],
|
|
17605
17737
|
attributeOldValue: true,
|
|
@@ -17659,7 +17791,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17659
17791
|
ngAfterViewInit() {
|
|
17660
17792
|
this.injector.runInContext(() => {
|
|
17661
17793
|
this.virtualScrollViewport = this.createVirtualScrollViewportForDatagrid(this.changeDetectorRef, this.ngZone, this.directionality, this.scrollDispatcher, this.viewportRuler, this.datagridElementRef, this.virtualScrollStrategy);
|
|
17662
|
-
this.cdkVirtualFor = new CdkVirtualForOf(this.viewContainerRef, this.templateRef, this.iterableDiffers,
|
|
17794
|
+
this.cdkVirtualFor = new CdkVirtualForOf(this.viewContainerRef, this.templateRef, this.iterableDiffers, this.viewRepeater, this.virtualScrollViewport, this.ngZone);
|
|
17663
17795
|
this.virtualScrollViewport.ngOnInit();
|
|
17664
17796
|
});
|
|
17665
17797
|
this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector('[role="grid"]');
|
|
@@ -17674,6 +17806,8 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17674
17806
|
if (datagridState.filters) {
|
|
17675
17807
|
this.virtualScrollViewport.scrollToIndex(0);
|
|
17676
17808
|
}
|
|
17809
|
+
}), this.columnsService.columnsStateChange.subscribe(() => {
|
|
17810
|
+
this.viewRepeater.detach();
|
|
17677
17811
|
}));
|
|
17678
17812
|
}
|
|
17679
17813
|
ngDoCheck() {
|
|
@@ -17745,7 +17879,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
17745
17879
|
return virtualScrollViewport;
|
|
17746
17880
|
}
|
|
17747
17881
|
}
|
|
17748
|
-
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 });
|
|
17882
|
+
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 });
|
|
17749
17883
|
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 });
|
|
17750
17884
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, decorators: [{
|
|
17751
17885
|
type: Directive,
|
|
@@ -17755,7 +17889,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17755
17889
|
}]
|
|
17756
17890
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: Items, decorators: [{
|
|
17757
17891
|
type: SkipSelf
|
|
17758
|
-
}] }, { 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 }]; }, propDecorators: { renderedRangeChange: [{
|
|
17892
|
+
}] }, { 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 }]; }, propDecorators: { renderedRangeChange: [{
|
|
17759
17893
|
type: Output
|
|
17760
17894
|
}], cdkVirtualForOf: [{
|
|
17761
17895
|
type: Input,
|
|
@@ -17980,6 +18114,9 @@ class DatagridMainRenderer {
|
|
|
17980
18114
|
this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
|
|
17981
18115
|
this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
|
|
17982
18116
|
}
|
|
18117
|
+
ngOnInit() {
|
|
18118
|
+
this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
|
|
18119
|
+
}
|
|
17983
18120
|
ngAfterContentInit() {
|
|
17984
18121
|
this.setupColumns();
|
|
17985
18122
|
this.subscriptions.push(this.headers.changes.subscribe(() => {
|
|
@@ -17989,7 +18126,6 @@ class DatagridMainRenderer {
|
|
|
17989
18126
|
this.columnsSizesStable = false;
|
|
17990
18127
|
this.stabilizeColumns();
|
|
17991
18128
|
}));
|
|
17992
|
-
this.listenForColumnChanges();
|
|
17993
18129
|
}
|
|
17994
18130
|
// Initialize and set Table width for horizontal scrolling here.
|
|
17995
18131
|
ngAfterViewInit() {
|
|
@@ -17997,7 +18133,9 @@ class DatagridMainRenderer {
|
|
|
17997
18133
|
}
|
|
17998
18134
|
ngAfterViewChecked() {
|
|
17999
18135
|
if (this.shouldStabilizeColumns) {
|
|
18000
|
-
|
|
18136
|
+
setTimeout(() => {
|
|
18137
|
+
this.stabilizeColumns();
|
|
18138
|
+
}, 0);
|
|
18001
18139
|
}
|
|
18002
18140
|
if (this.shouldComputeHeight()) {
|
|
18003
18141
|
this.ngZone.runOutsideAngular(() => {
|
|
@@ -18031,7 +18169,10 @@ class DatagridMainRenderer {
|
|
|
18031
18169
|
setupColumns() {
|
|
18032
18170
|
this.headers.forEach((header, index) => header.setColumnState(index));
|
|
18033
18171
|
this.columnsService.columns.splice(this.headers.length); // Trim any old columns
|
|
18034
|
-
|
|
18172
|
+
// Sets columnIndex for each column
|
|
18173
|
+
this.columnsService.columns.forEach((column, index) => {
|
|
18174
|
+
this.columnsService.emitStateChange(column, { changes: [DatagridColumnChanges.INITIALIZE], columnIndex: index });
|
|
18175
|
+
});
|
|
18035
18176
|
}
|
|
18036
18177
|
shouldComputeHeight() {
|
|
18037
18178
|
if (!this._heightSet && this.page.size > 0) {
|
|
@@ -18088,6 +18229,10 @@ class DatagridMainRenderer {
|
|
|
18088
18229
|
});
|
|
18089
18230
|
}
|
|
18090
18231
|
columnStateChanged(state) {
|
|
18232
|
+
// eslint-disable-next-line eqeqeq
|
|
18233
|
+
if (!this.headers || state.columnIndex == null) {
|
|
18234
|
+
return;
|
|
18235
|
+
}
|
|
18091
18236
|
const columnIndex = state.columnIndex;
|
|
18092
18237
|
if (state.changes && state.changes.length) {
|
|
18093
18238
|
state.changes.forEach(change => {
|
|
@@ -18095,8 +18240,9 @@ class DatagridMainRenderer {
|
|
|
18095
18240
|
case DatagridColumnChanges.WIDTH:
|
|
18096
18241
|
this.headers.get(columnIndex).setWidth(state);
|
|
18097
18242
|
this.rows.forEach(row => {
|
|
18098
|
-
if (row.
|
|
18243
|
+
if (row?.cells.length === this.columnsService.columns.length) {
|
|
18099
18244
|
row.cells.get(columnIndex).setWidth(state);
|
|
18245
|
+
row.expandableRow?.cells.get(columnIndex)?.setWidth(state);
|
|
18100
18246
|
}
|
|
18101
18247
|
});
|
|
18102
18248
|
break;
|
|
@@ -18105,27 +18251,26 @@ class DatagridMainRenderer {
|
|
|
18105
18251
|
this.rows.forEach(row => {
|
|
18106
18252
|
if (row.cells && row.cells.length) {
|
|
18107
18253
|
row.cells.get(columnIndex).setHidden(state);
|
|
18254
|
+
row.expandableRow?.cells.get(columnIndex)?.setHidden(state);
|
|
18108
18255
|
}
|
|
18109
18256
|
});
|
|
18110
18257
|
this.keyNavigation.resetKeyGrid();
|
|
18111
18258
|
break;
|
|
18259
|
+
case DatagridColumnChanges.INITIALIZE:
|
|
18260
|
+
if (state.hideable && state.hidden) {
|
|
18261
|
+
this.headers.get(columnIndex).setHidden(state);
|
|
18262
|
+
this.rows.forEach(row => {
|
|
18263
|
+
row.setCellsState();
|
|
18264
|
+
row.expandableRow?.setCellsState();
|
|
18265
|
+
});
|
|
18266
|
+
}
|
|
18267
|
+
break;
|
|
18112
18268
|
default:
|
|
18113
18269
|
break;
|
|
18114
18270
|
}
|
|
18115
18271
|
});
|
|
18116
18272
|
}
|
|
18117
18273
|
}
|
|
18118
|
-
listenForColumnChanges() {
|
|
18119
|
-
this.columnsService.columns.forEach((column, index) => {
|
|
18120
|
-
this.columnsService.emitStateChange(column, { changes: [], columnIndex: index });
|
|
18121
|
-
});
|
|
18122
|
-
/*
|
|
18123
|
-
Merges all column subject so we can track them at once
|
|
18124
|
-
and receive only the changed column as result
|
|
18125
|
-
*/
|
|
18126
|
-
const columnChanges = merge(...this.columnsService.columns);
|
|
18127
|
-
this.subscriptions.push(columnChanges.subscribe(change => this.columnStateChanged(change)));
|
|
18128
|
-
}
|
|
18129
18274
|
/**
|
|
18130
18275
|
* Triggers a whole re-rendring cycle to set column sizes, if needed.
|
|
18131
18276
|
*/
|
|
@@ -18143,7 +18288,7 @@ class DatagridMainRenderer {
|
|
|
18143
18288
|
}
|
|
18144
18289
|
}
|
|
18145
18290
|
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 });
|
|
18146
|
-
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
|
|
18291
|
+
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 });
|
|
18147
18292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
|
|
18148
18293
|
type: Directive,
|
|
18149
18294
|
args: [{
|
|
@@ -18155,7 +18300,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18155
18300
|
args: [DatagridHeaderRenderer]
|
|
18156
18301
|
}], rows: [{
|
|
18157
18302
|
type: ContentChildren,
|
|
18158
|
-
args: [DatagridRowRenderer
|
|
18303
|
+
args: [DatagridRowRenderer]
|
|
18159
18304
|
}] } });
|
|
18160
18305
|
|
|
18161
18306
|
/*
|
|
@@ -18613,7 +18758,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18613
18758
|
}] } });
|
|
18614
18759
|
function eventIsInputEvent(event) {
|
|
18615
18760
|
const targetElement = event?.target;
|
|
18616
|
-
return targetElement?.tagName
|
|
18761
|
+
return targetElement?.tagName
|
|
18762
|
+
? ['INPUT', 'TEXTAREA', 'BUTTON', 'A', 'SELECT', 'OPTION'].includes(targetElement.tagName)
|
|
18763
|
+
: false;
|
|
18617
18764
|
}
|
|
18618
18765
|
|
|
18619
18766
|
/*
|
|
@@ -19583,7 +19730,7 @@ class ClrTreeNode {
|
|
|
19583
19730
|
}
|
|
19584
19731
|
setTabIndex(value) {
|
|
19585
19732
|
this.contentContainerTabindex = value;
|
|
19586
|
-
this.contentContainer.nativeElement.setAttribute('tabindex', value);
|
|
19733
|
+
this.contentContainer.nativeElement.setAttribute('tabindex', value.toString());
|
|
19587
19734
|
}
|
|
19588
19735
|
checkTabIndex(nodeId) {
|
|
19589
19736
|
if (isPlatformBrowser(this.platformId) && this.nodeId !== nodeId && this.contentContainerTabindex !== -1) {
|
|
@@ -21826,18 +21973,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21826
21973
|
* This software is released under MIT license.
|
|
21827
21974
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
21828
21975
|
*/
|
|
21829
|
-
const
|
|
21830
|
-
const
|
|
21831
|
-
|
|
21832
|
-
|
|
21833
|
-
|
|
21834
|
-
|
|
21976
|
+
const createCloseButton = (document, ariaLabel) => {
|
|
21977
|
+
const closeButton = document.createElement('button');
|
|
21978
|
+
closeButton.setAttribute('aria-label', ariaLabel);
|
|
21979
|
+
closeButton.setAttribute('aria-hidden', 'true');
|
|
21980
|
+
closeButton.innerHTML = `
|
|
21981
|
+
<cds-icon
|
|
21982
|
+
inner-offset="1"
|
|
21983
|
+
shape="close"
|
|
21984
|
+
size="32"
|
|
21985
|
+
</cds-icon>
|
|
21986
|
+
`;
|
|
21835
21987
|
/**
|
|
21836
21988
|
* The button is hidden by default based on our Desktop-first approach.
|
|
21837
21989
|
*/
|
|
21838
|
-
|
|
21839
|
-
|
|
21840
|
-
return
|
|
21990
|
+
closeButton.setAttribute('hidden', 'true');
|
|
21991
|
+
closeButton.className = 'clr-nav-close';
|
|
21992
|
+
return closeButton;
|
|
21841
21993
|
};
|
|
21842
21994
|
class ClrNavLevel {
|
|
21843
21995
|
constructor(platformId, cdkTrapFocus, responsiveNavService, elementRef, renderer, injector) {
|
|
@@ -21889,7 +22041,7 @@ class ClrNavLevel {
|
|
|
21889
22041
|
this.addNavClass(this.level);
|
|
21890
22042
|
}
|
|
21891
22043
|
ngAfterViewInit() {
|
|
21892
|
-
const closeButton =
|
|
22044
|
+
const closeButton = createCloseButton(this._document, this.closeButtonAriaLabel);
|
|
21893
22045
|
this.renderer.listen(closeButton, 'click', this.close.bind(this));
|
|
21894
22046
|
this.renderer.insertBefore(this.elementRef.nativeElement, closeButton, this.elementRef.nativeElement.firstChild); // Adding the button at the top of the nav
|
|
21895
22047
|
if (this._document.body.clientWidth < LARGE_BREAKPOINT) {
|
|
@@ -23382,6 +23534,13 @@ class ClrModal {
|
|
|
23382
23534
|
this._openChanged.emit(true);
|
|
23383
23535
|
this.modalStackService.trackModalOpen(this);
|
|
23384
23536
|
}
|
|
23537
|
+
backdropClick() {
|
|
23538
|
+
if (this.staticBackdrop) {
|
|
23539
|
+
this.title.nativeElement.focus();
|
|
23540
|
+
return;
|
|
23541
|
+
}
|
|
23542
|
+
this.close();
|
|
23543
|
+
}
|
|
23385
23544
|
close() {
|
|
23386
23545
|
if (this.stopClose) {
|
|
23387
23546
|
this.altClose.emit(false);
|
|
@@ -23401,7 +23560,7 @@ class ClrModal {
|
|
|
23401
23560
|
}
|
|
23402
23561
|
}
|
|
23403
23562
|
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 });
|
|
23404
|
-
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)=\"
|
|
23563
|
+
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: [
|
|
23405
23564
|
trigger('fadeMove', [
|
|
23406
23565
|
transition('* => fadeDown', [
|
|
23407
23566
|
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
@@ -23436,8 +23595,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23436
23595
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
23437
23596
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
23438
23597
|
]),
|
|
23439
|
-
], 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)=\"
|
|
23440
|
-
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: {
|
|
23598
|
+
], 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"] }]
|
|
23599
|
+
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
|
|
23600
|
+
type: ViewChild,
|
|
23601
|
+
args: ['title']
|
|
23602
|
+
}], _open: [{
|
|
23441
23603
|
type: Input,
|
|
23442
23604
|
args: ['clrModalOpen']
|
|
23443
23605
|
}, {
|
|
@@ -23598,7 +23760,9 @@ class ClrSidePanel {
|
|
|
23598
23760
|
this.modal.close();
|
|
23599
23761
|
}
|
|
23600
23762
|
documentClick(event) {
|
|
23601
|
-
if (!this.element.nativeElement.contains(event.target) &&
|
|
23763
|
+
if (!this.element.nativeElement.contains(event.target) &&
|
|
23764
|
+
this.modal._open &&
|
|
23765
|
+
!this.configuration.backdrop) {
|
|
23602
23766
|
this.modal.close();
|
|
23603
23767
|
}
|
|
23604
23768
|
}
|
|
@@ -24485,13 +24649,13 @@ class ClrTimeline {
|
|
|
24485
24649
|
}
|
|
24486
24650
|
}
|
|
24487
24651
|
ClrTimeline.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimeline, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24488
|
-
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 });
|
|
24652
|
+
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 });
|
|
24489
24653
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimeline, decorators: [{
|
|
24490
24654
|
type: Component,
|
|
24491
24655
|
args: [{
|
|
24492
24656
|
selector: 'clr-timeline',
|
|
24493
24657
|
template: `<ng-content></ng-content>`,
|
|
24494
|
-
host: { '[class.clr-timeline]': 'true' },
|
|
24658
|
+
host: { '[class.clr-timeline]': 'true', '[attr.role]': '"list"' },
|
|
24495
24659
|
providers: [TimelineIconAttributeService],
|
|
24496
24660
|
}]
|
|
24497
24661
|
}], propDecorators: { layout: [{
|
|
@@ -24562,7 +24726,7 @@ class ClrTimelineStep {
|
|
|
24562
24726
|
}
|
|
24563
24727
|
}
|
|
24564
24728
|
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 });
|
|
24565
|
-
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: `
|
|
24729
|
+
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: `
|
|
24566
24730
|
<ng-content select="clr-timeline-step-header"></ng-content>
|
|
24567
24731
|
<span class="clr-sr-only">{{ stepTitleText }}</span>
|
|
24568
24732
|
<ng-container *ngIf="!isProcessing; else processing">
|
|
@@ -24606,7 +24770,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24606
24770
|
<clr-spinner clrMedium [attr.aria-label]="iconAriaLabel"></clr-spinner>
|
|
24607
24771
|
</ng-template>
|
|
24608
24772
|
`,
|
|
24609
|
-
host: { '[class.clr-timeline-step]': 'true' },
|
|
24773
|
+
host: { '[class.clr-timeline-step]': 'true', '[attr.role]': '"listitem"' },
|
|
24610
24774
|
}]
|
|
24611
24775
|
}], ctorParameters: function () { return [{ type: TimelineIconAttributeService }, { type: undefined, decorators: [{
|
|
24612
24776
|
type: Inject,
|
|
@@ -26598,15 +26762,12 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
26598
26762
|
(click)="click()"
|
|
26599
26763
|
[attr.disabled]="isDisabled ? '' : null"
|
|
26600
26764
|
>
|
|
26601
|
-
<
|
|
26602
|
-
<cds-icon
|
|
26603
|
-
|
|
26604
|
-
|
|
26605
|
-
|
|
26606
|
-
|
|
26607
|
-
></cds-icon>
|
|
26608
|
-
<ng-content *ngIf="!hasError"></ng-content>
|
|
26609
|
-
</span>
|
|
26765
|
+
<div class="clr-wizard-stepnav-link-icon">
|
|
26766
|
+
<cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
|
|
26767
|
+
<cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
|
|
26768
|
+
</div>
|
|
26769
|
+
|
|
26770
|
+
<div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
|
|
26610
26771
|
<span class="clr-wizard-stepnav-link-title">
|
|
26611
26772
|
<ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
|
|
26612
26773
|
</span>
|
|
@@ -26625,15 +26786,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26625
26786
|
(click)="click()"
|
|
26626
26787
|
[attr.disabled]="isDisabled ? '' : null"
|
|
26627
26788
|
>
|
|
26628
|
-
<
|
|
26629
|
-
<cds-icon
|
|
26630
|
-
|
|
26631
|
-
|
|
26632
|
-
|
|
26633
|
-
|
|
26634
|
-
></cds-icon>
|
|
26635
|
-
<ng-content *ngIf="!hasError"></ng-content>
|
|
26636
|
-
</span>
|
|
26789
|
+
<div class="clr-wizard-stepnav-link-icon">
|
|
26790
|
+
<cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
|
|
26791
|
+
<cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
|
|
26792
|
+
</div>
|
|
26793
|
+
|
|
26794
|
+
<div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
|
|
26637
26795
|
<span class="clr-wizard-stepnav-link-title">
|
|
26638
26796
|
<ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
|
|
26639
26797
|
</span>
|
|
@@ -27100,7 +27258,7 @@ class ClrWizard {
|
|
|
27100
27258
|
}
|
|
27101
27259
|
}
|
|
27102
27260
|
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 });
|
|
27103
|
-
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
|
|
27261
|
+
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" }] });
|
|
27104
27262
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
27105
27263
|
type: Component,
|
|
27106
27264
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -27109,7 +27267,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27109
27267
|
'[class.wizard-lg]': "size == 'lg'",
|
|
27110
27268
|
'[class.wizard-xl]': "size == 'xl'",
|
|
27111
27269
|
'[class.lastPage]': 'navService.currentPageIsLast',
|
|
27112
|
-
}, 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
|
|
27270
|
+
}, 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" }]
|
|
27113
27271
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
27114
27272
|
type: Inject,
|
|
27115
27273
|
args: [PLATFORM_ID]
|
|
@@ -27383,7 +27541,7 @@ const CLR_WIZARD_DIRECTIVES = [
|
|
|
27383
27541
|
];
|
|
27384
27542
|
class ClrWizardModule {
|
|
27385
27543
|
constructor() {
|
|
27386
|
-
ClarityIcons.addIcons(errorStandardIcon);
|
|
27544
|
+
ClarityIcons.addIcons(errorStandardIcon, successStandardIcon);
|
|
27387
27545
|
}
|
|
27388
27546
|
}
|
|
27389
27547
|
ClrWizardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|