@clr/angular 17.9.0 → 17.10.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/clarity.api.md +92 -52
- package/data/datagrid/datagrid-row.d.ts +5 -4
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +3 -7
- package/data/datagrid/datagrid.d.ts +11 -3
- package/data/datagrid/index.d.ts +1 -0
- package/data/datagrid/interfaces/key-nav-grid-strategy.interface.d.ts +11 -0
- package/data/datagrid/interfaces/virtual-scroll-data-range.interface.d.ts +5 -0
- package/data/datagrid/providers/items.d.ts +1 -0
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +1 -16
- package/data/datagrid/utils/key-navigation-strategies/default.d.ts +15 -0
- package/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.d.ts +14 -0
- package/data/datagrid/utils/key-navigation-strategies/expanded-row.d.ts +14 -0
- package/data/datagrid/utils/key-navigation-utils.d.ts +22 -0
- package/esm2020/data/datagrid/datagrid-column.mjs +8 -12
- package/esm2020/data/datagrid/datagrid-row.mjs +21 -8
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +23 -20
- package/esm2020/data/datagrid/datagrid.mjs +48 -17
- package/esm2020/data/datagrid/index.mjs +2 -1
- package/esm2020/data/datagrid/interfaces/key-nav-grid-strategy.interface.mjs +8 -0
- package/esm2020/data/datagrid/interfaces/virtual-scroll-data-range.interface.mjs +8 -0
- package/esm2020/data/datagrid/providers/items.mjs +5 -1
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +18 -243
- package/esm2020/data/datagrid/utils/key-navigation-strategies/default.mjs +132 -0
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.mjs +132 -0
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-row.mjs +168 -0
- package/esm2020/data/datagrid/utils/key-navigation-utils.mjs +108 -0
- package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2020/modal/modal.mjs +7 -4
- package/esm2020/popover/common/popover.mjs +2 -2
- package/esm2020/utils/animations/constants.mjs +7 -1
- package/esm2020/utils/animations/expandable-animation/base-expandable-animation.mjs +38 -0
- package/esm2020/utils/animations/expandable-animation/expandable-animation.directive.mjs +56 -0
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +10 -32
- package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +3 -2
- package/esm2020/utils/animations/expandable-animation/index.mjs +4 -2
- package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
- package/esm2020/wizard/wizard.mjs +29 -6
- package/fesm2015/clr-angular.mjs +790 -338
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +788 -334
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/modal/modal.d.ts +3 -2
- package/package.json +2 -2
- package/utils/animations/constants.d.ts +1 -0
- package/utils/animations/expandable-animation/base-expandable-animation.d.ts +13 -0
- package/utils/animations/expandable-animation/expandable-animation.d.ts +2 -6
- package/utils/animations/expandable-animation/expandable-animation.directive.d.ts +16 -0
- package/utils/animations/expandable-animation/expandable-animation.module.d.ts +3 -2
- package/utils/animations/expandable-animation/index.d.ts +1 -0
- package/wizard/wizard.d.ts +12 -2
package/fesm2020/clr-angular.mjs
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, NgModule, Optional, Input, Injectable, Component, ChangeDetectionStrategy, EventEmitter, SkipSelf, HostBinding, Output, ContentChildren, PLATFORM_ID, Inject, ViewChild, HostListener, Renderer2, InjectionToken, ElementRef, NgZone, ChangeDetectorRef, ContentChild, ComponentFactoryResolver, KeyValueDiffers, Self, forwardRef, Attribute, TemplateRef, ViewContainerRef, LOCALE_ID, inject, Injector, VERSION, EnvironmentInjector, IterableDiffers } from '@angular/core';
|
|
2
|
+
import { Directive, NgModule, Optional, Input, Injectable, Component, ChangeDetectionStrategy, EventEmitter, SkipSelf, HostBinding, Output, ContentChildren, PLATFORM_ID, Inject, ViewChild, HostListener, Renderer2, InjectionToken, ElementRef, NgZone, ChangeDetectorRef, ContentChild, ComponentFactoryResolver, KeyValueDiffers, Self, forwardRef, Attribute, TemplateRef, ViewContainerRef, LOCALE_ID, inject, Injector, VERSION, EnvironmentInjector, IterableDiffers, ViewChildren } from '@angular/core';
|
|
3
3
|
import * as i5 from '@angular/common';
|
|
4
4
|
import { CommonModule, isPlatformBrowser, DOCUMENT, NgForOf, getLocaleDayNames, FormStyle, TranslationWidth, getLocaleMonthNames, getLocaleFirstDayOfWeek, getLocaleDateFormat, FormatWidth } from '@angular/common';
|
|
5
5
|
import { ClarityIcons, angleIcon, exclamationCircleIcon, checkCircleIcon, ellipsisHorizontalIcon, windowCloseIcon, infoCircleIcon, timesIcon, angleDoubleIcon, eventIcon, calendarIcon, folderOpenIcon, minusIcon, plusIcon, eyeHideIcon, eyeIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, stepForward2Icon, filterGridCircleIcon, filterGridIcon, errorStandardIcon, helpIcon, infoStandardIcon, noteIcon, successStandardIcon, warningStandardIcon, circleIcon, dotCircleIcon } from '@cds/core/icon';
|
|
6
6
|
import { map, tap, startWith, distinctUntilChanged, filter, skipUntil, debounceTime, takeUntil, take, first, switchMap as switchMap$1 } from 'rxjs/operators';
|
|
7
7
|
import * as i3 from 'rxjs';
|
|
8
8
|
import { Subject, BehaviorSubject, Observable, fromEvent, isObservable, of, shareReplay, combineLatest, startWith as startWith$1, switchMap, merge, map as map$1, EMPTY, ReplaySubject, tap as tap$1 } from 'rxjs';
|
|
9
|
-
import
|
|
9
|
+
import * as i2 from '@angular/animations';
|
|
10
|
+
import { animation, style, animate, trigger, transition, state, useAnimation, keyframes } from '@angular/animations';
|
|
10
11
|
import * as i1 from '@angular/forms';
|
|
11
12
|
import { FormControl, FormGroup, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, SelectMultipleControlValueAccessor } from '@angular/forms';
|
|
12
13
|
import * as i1$1 from '@angular/router';
|
|
13
14
|
import { RouterModule } from '@angular/router';
|
|
14
15
|
import * as i1$2 from '@angular/cdk/a11y';
|
|
15
16
|
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
16
|
-
import * as i2 from '@angular/cdk/drag-drop';
|
|
17
|
+
import * as i2$1 from '@angular/cdk/drag-drop';
|
|
17
18
|
import { CdkDrag, CDK_DROP_LIST, CDK_DRAG_CONFIG } from '@angular/cdk/drag-drop';
|
|
18
19
|
import * as i1$3 from '@angular/cdk/bidi';
|
|
19
20
|
import { Directionality } from '@angular/cdk/bidi';
|
|
@@ -233,6 +234,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
233
234
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
234
235
|
*/
|
|
235
236
|
const defaultAnimationTiming = '0.2s ease-in-out';
|
|
237
|
+
const defaultExpandAnimation = animation([style({ height: '{{ startHeight }}px' }), animate(defaultAnimationTiming, style({ height: '*' }))], {
|
|
238
|
+
params: {
|
|
239
|
+
startHeight: 0, // default
|
|
240
|
+
},
|
|
241
|
+
});
|
|
236
242
|
|
|
237
243
|
/*
|
|
238
244
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -3104,54 +3110,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
3104
3110
|
* This software is released under MIT license.
|
|
3105
3111
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3106
3112
|
*/
|
|
3107
|
-
class
|
|
3113
|
+
class BaseExpandableAnimation {
|
|
3108
3114
|
constructor(element, domAdapter, renderer) {
|
|
3109
3115
|
this.element = element;
|
|
3110
3116
|
this.domAdapter = domAdapter;
|
|
3111
3117
|
this.renderer = renderer;
|
|
3112
|
-
this.clrExpandTrigger = false;
|
|
3113
3118
|
this.startHeight = 0;
|
|
3114
3119
|
}
|
|
3120
|
+
updateStartHeight() {
|
|
3121
|
+
this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
|
|
3122
|
+
}
|
|
3123
|
+
initAnimationEffects() {
|
|
3124
|
+
this.renderer.setStyle(this.element.nativeElement, 'overflow', 'hidden');
|
|
3125
|
+
}
|
|
3126
|
+
cleanupAnimationEffects(cancelAnimations = false) {
|
|
3127
|
+
this.renderer.removeStyle(this.element.nativeElement, 'overflow');
|
|
3128
|
+
// A "safe" auto-update of the height ensuring basic OOTB user experience .
|
|
3129
|
+
// Prone to small jumps in initial animation height if data was changed in the meantime, the window was resized, etc.
|
|
3130
|
+
// For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
|
|
3131
|
+
this.updateStartHeight();
|
|
3132
|
+
if (cancelAnimations) {
|
|
3133
|
+
this.cancelElementAnimations();
|
|
3134
|
+
}
|
|
3135
|
+
}
|
|
3136
|
+
cancelElementAnimations() {
|
|
3137
|
+
this.element.nativeElement.getAnimations().forEach(animation => {
|
|
3138
|
+
if (animation.playState === 'finished') {
|
|
3139
|
+
animation.cancel(); // clears animation-style set on the element
|
|
3140
|
+
}
|
|
3141
|
+
});
|
|
3142
|
+
}
|
|
3143
|
+
}
|
|
3144
|
+
|
|
3145
|
+
/*
|
|
3146
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
3147
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
3148
|
+
* This software is released under MIT license.
|
|
3149
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3150
|
+
*/
|
|
3151
|
+
class ClrExpandableAnimation extends BaseExpandableAnimation {
|
|
3152
|
+
constructor(element, domAdapter, renderer) {
|
|
3153
|
+
super(element, domAdapter, renderer);
|
|
3154
|
+
this.clrExpandTrigger = false;
|
|
3155
|
+
}
|
|
3115
3156
|
get expandAnimation() {
|
|
3116
3157
|
return { value: this.clrExpandTrigger, params: { startHeight: this.startHeight } };
|
|
3117
3158
|
}
|
|
3118
3159
|
animationStart(event) {
|
|
3119
3160
|
if (event.fromState !== 'void') {
|
|
3120
|
-
this.
|
|
3161
|
+
this.initAnimationEffects();
|
|
3121
3162
|
}
|
|
3122
3163
|
}
|
|
3123
3164
|
animationDone(event) {
|
|
3124
3165
|
if (event.fromState !== 'void') {
|
|
3125
|
-
this.
|
|
3126
|
-
// A "safe" auto-update of the height ensuring basic OOTB user experience .
|
|
3127
|
-
// Prone to small jumps in initial animation height if data was changed in the meantime, window was resized, etc.
|
|
3128
|
-
// For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
|
|
3129
|
-
this.updateStartHeight();
|
|
3166
|
+
this.cleanupAnimationEffects();
|
|
3130
3167
|
}
|
|
3131
3168
|
}
|
|
3132
|
-
updateStartHeight() {
|
|
3133
|
-
this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
|
|
3134
|
-
}
|
|
3135
3169
|
}
|
|
3136
3170
|
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps: [{ token: i0.ElementRef }, { token: DomAdapter }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
3137
|
-
ClrExpandableAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: { clrExpandTrigger: "clrExpandTrigger" }, host: { listeners: { "@expandAnimation.start": "animationStart($event)", "@expandAnimation.done": "animationDone($event)" }, properties: { "@expandAnimation": "this.expandAnimation" } }, providers: [DomAdapter], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], animations: [
|
|
3138
|
-
trigger('expandAnimation', [
|
|
3139
|
-
transition('true <=> false', [
|
|
3140
|
-
style({ height: '{{startHeight}}px' }),
|
|
3141
|
-
animate('0.2s ease-in-out', style({ height: '*' })),
|
|
3142
|
-
]),
|
|
3143
|
-
]),
|
|
3144
|
-
] });
|
|
3171
|
+
ClrExpandableAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: { clrExpandTrigger: "clrExpandTrigger" }, host: { listeners: { "@expandAnimation.start": "animationStart($event)", "@expandAnimation.done": "animationDone($event)" }, properties: { "@expandAnimation": "this.expandAnimation" } }, providers: [DomAdapter], usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], animations: [trigger('expandAnimation', [transition('true <=> false', [useAnimation(defaultExpandAnimation)])])] });
|
|
3145
3172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, decorators: [{
|
|
3146
3173
|
type: Component,
|
|
3147
|
-
args: [{ selector: 'clr-expandable-animation', template: `<ng-content></ng-content>`, animations: [
|
|
3148
|
-
trigger('expandAnimation', [
|
|
3149
|
-
transition('true <=> false', [
|
|
3150
|
-
style({ height: '{{startHeight}}px' }),
|
|
3151
|
-
animate('0.2s ease-in-out', style({ height: '*' })),
|
|
3152
|
-
]),
|
|
3153
|
-
]),
|
|
3154
|
-
], providers: [DomAdapter], styles: [":host{display:block}\n"] }]
|
|
3174
|
+
args: [{ selector: 'clr-expandable-animation', template: `<ng-content></ng-content>`, animations: [trigger('expandAnimation', [transition('true <=> false', [useAnimation(defaultExpandAnimation)])])], providers: [DomAdapter], styles: [":host{display:block}\n"] }]
|
|
3155
3175
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }]; }, propDecorators: { clrExpandTrigger: [{
|
|
3156
3176
|
type: Input
|
|
3157
3177
|
}], expandAnimation: [{
|
|
@@ -3171,7 +3191,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
3171
3191
|
* This software is released under MIT license.
|
|
3172
3192
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3173
3193
|
*/
|
|
3174
|
-
|
|
3194
|
+
class ClrExpandableAnimationDirective extends BaseExpandableAnimation {
|
|
3195
|
+
constructor(element, domAdapter, renderer, builder) {
|
|
3196
|
+
super(element, domAdapter, renderer);
|
|
3197
|
+
this.builder = builder;
|
|
3198
|
+
this.expanded = false;
|
|
3199
|
+
}
|
|
3200
|
+
ngOnChanges(changes) {
|
|
3201
|
+
if (changes['expanded'] && !changes['expanded'].firstChange) {
|
|
3202
|
+
Promise.resolve().then(() => this.playAnimation());
|
|
3203
|
+
}
|
|
3204
|
+
}
|
|
3205
|
+
ngOnDestroy() {
|
|
3206
|
+
this.player?.destroy();
|
|
3207
|
+
}
|
|
3208
|
+
playAnimation() {
|
|
3209
|
+
if (this.player) {
|
|
3210
|
+
this.player.destroy();
|
|
3211
|
+
}
|
|
3212
|
+
this.player = this.builder
|
|
3213
|
+
.build([useAnimation(defaultExpandAnimation, { params: { startHeight: this.startHeight } })])
|
|
3214
|
+
.create(this.element.nativeElement);
|
|
3215
|
+
this.player.onStart(() => this.initAnimationEffects());
|
|
3216
|
+
this.player.onDone(() => this.cleanupAnimationEffects(true));
|
|
3217
|
+
this.player.play();
|
|
3218
|
+
}
|
|
3219
|
+
}
|
|
3220
|
+
ClrExpandableAnimationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationDirective, deps: [{ token: i0.ElementRef }, { token: DomAdapter }, { token: i0.Renderer2 }, { token: i2.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3221
|
+
ClrExpandableAnimationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrExpandableAnimationDirective, selector: "[clrExpandableAnimation]", inputs: { expanded: ["clrExpandableAnimation", "expanded"] }, host: { properties: { "class.clr-expandable-animation": "true" } }, providers: [DomAdapter], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
3222
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationDirective, decorators: [{
|
|
3223
|
+
type: Directive,
|
|
3224
|
+
args: [{
|
|
3225
|
+
selector: '[clrExpandableAnimation]',
|
|
3226
|
+
providers: [DomAdapter],
|
|
3227
|
+
host: {
|
|
3228
|
+
'[class.clr-expandable-animation]': 'true',
|
|
3229
|
+
},
|
|
3230
|
+
}]
|
|
3231
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }, { type: i2.AnimationBuilder }]; }, propDecorators: { expanded: [{
|
|
3232
|
+
type: Input,
|
|
3233
|
+
args: ['clrExpandableAnimation']
|
|
3234
|
+
}] } });
|
|
3235
|
+
|
|
3236
|
+
/*
|
|
3237
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
3238
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
3239
|
+
* This software is released under MIT license.
|
|
3240
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3241
|
+
*/
|
|
3242
|
+
const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation, ClrExpandableAnimationDirective];
|
|
3175
3243
|
|
|
3176
3244
|
/*
|
|
3177
3245
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -5167,7 +5235,7 @@ class Popover {
|
|
|
5167
5235
|
this._scroll = new Subject();
|
|
5168
5236
|
const anchor = e;
|
|
5169
5237
|
let current = e;
|
|
5170
|
-
while (current && current !== document) {
|
|
5238
|
+
while (current && current !== document && current.nodeType === Node.ELEMENT_NODE) {
|
|
5171
5239
|
if (this.scrolls(current)) {
|
|
5172
5240
|
current.addEventListener('scroll', this.boundOnScrollListener);
|
|
5173
5241
|
this.scrollableElements.push(current);
|
|
@@ -5494,7 +5562,7 @@ class BasicFocusableItem {
|
|
|
5494
5562
|
if (isPlatformBrowser(this.platformId)) {
|
|
5495
5563
|
this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '0');
|
|
5496
5564
|
this.el.nativeElement.focus();
|
|
5497
|
-
this.el.nativeElement.scrollIntoView({ behavior: 'smooth', block: '
|
|
5565
|
+
this.el.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
5498
5566
|
}
|
|
5499
5567
|
}
|
|
5500
5568
|
blur() {
|
|
@@ -9965,14 +10033,14 @@ class ClrBreadcrumbs {
|
|
|
9965
10033
|
}
|
|
9966
10034
|
}
|
|
9967
10035
|
ClrBreadcrumbs.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, deps: [{ token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9968
|
-
ClrBreadcrumbs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrBreadcrumbs, selector: "clr-breadcrumbs", inputs: { items: "items" }, outputs: { clrBreadcrumbItemClick: "clrBreadcrumbItemClick" }, host: { properties: { "attr.aria-label": "commonStrings.keys.breadcrumbsLabel", "attr.role": "\"navigation\"" }, classAttribute: "clr-breadcrumb" }, ngImport: i0, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root [cds-theme]{--clr-breadcrumb-item-space: var(--cds-global-space-5)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;font-size:var(--cds-alias-typography-secondary-font-size);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--cds-alias-typography-secondary-line-height);letter-spacing:var(--cds-alias-typography-secondary-letter-spacing)}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center;line-height:var(--cds-global-space-9)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space);color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-item:last-child{color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-expand{margin:0;padding:0;gap:0;min-width:-moz-fit-content;min-width:fit-content}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ClrBreadcrumbItem, selector: "clr-breadcrumb-item" }, { kind: "pipe", type: i5.SlicePipe, name: "slice" }] });
|
|
10036
|
+
ClrBreadcrumbs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrBreadcrumbs, selector: "clr-breadcrumbs", inputs: { items: "items" }, outputs: { clrBreadcrumbItemClick: "clrBreadcrumbItemClick" }, host: { properties: { "attr.aria-label": "commonStrings.keys.breadcrumbsLabel", "attr.role": "\"navigation\"" }, classAttribute: "clr-breadcrumb" }, ngImport: i0, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root [cds-theme]{--clr-breadcrumb-item-space: var(--cds-global-space-5)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;font-size:var(--cds-alias-typography-secondary-font-size);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--cds-alias-typography-secondary-line-height);letter-spacing:var(--cds-alias-typography-secondary-letter-spacing)}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center;line-height:var(--cds-global-space-9)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited{color:var(--clr-link-color)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited:hover{color:var(--clr-link-hover-color)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space);color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-item:last-child{color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-expand{margin:0;padding:0;gap:0;min-width:-moz-fit-content;min-width:fit-content}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ClrBreadcrumbItem, selector: "clr-breadcrumb-item" }, { kind: "pipe", type: i5.SlicePipe, name: "slice" }] });
|
|
9969
10037
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, decorators: [{
|
|
9970
10038
|
type: Component,
|
|
9971
10039
|
args: [{ selector: 'clr-breadcrumbs', host: {
|
|
9972
10040
|
class: 'clr-breadcrumb',
|
|
9973
10041
|
'[attr.aria-label]': 'commonStrings.keys.breadcrumbsLabel',
|
|
9974
10042
|
'[attr.role]': '"navigation"',
|
|
9975
|
-
}, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root [cds-theme]{--clr-breadcrumb-item-space: var(--cds-global-space-5)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;font-size:var(--cds-alias-typography-secondary-font-size);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--cds-alias-typography-secondary-line-height);letter-spacing:var(--cds-alias-typography-secondary-letter-spacing)}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center;line-height:var(--cds-global-space-9)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space);color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-item:last-child{color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-expand{margin:0;padding:0;gap:0;min-width:-moz-fit-content;min-width:fit-content}\n"] }]
|
|
10043
|
+
}, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root [cds-theme]{--clr-breadcrumb-item-space: var(--cds-global-space-5)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;font-size:var(--cds-alias-typography-secondary-font-size);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--cds-alias-typography-secondary-line-height);letter-spacing:var(--cds-alias-typography-secondary-letter-spacing)}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center;line-height:var(--cds-global-space-9)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited{color:var(--clr-link-color)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited:hover{color:var(--clr-link-hover-color)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space);color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-item:last-child{color:var(--cds-alias-typography-color-400)}.clr-breadcrumb-menu .clr-breadcrumb-expand{margin:0;padding:0;gap:0;min-width:-moz-fit-content;min-width:fit-content}\n"] }]
|
|
9976
10044
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }]; }, propDecorators: { items: [{
|
|
9977
10045
|
type: Input
|
|
9978
10046
|
}], clrBreadcrumbItemClick: [{
|
|
@@ -17180,7 +17248,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17180
17248
|
class ClrExpandableAnimationModule {
|
|
17181
17249
|
}
|
|
17182
17250
|
ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17183
|
-
ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
|
|
17251
|
+
ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation, ClrExpandableAnimationDirective], imports: [CommonModule], exports: [ClrExpandableAnimation, ClrExpandableAnimationDirective] });
|
|
17184
17252
|
ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
|
|
17185
17253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
|
|
17186
17254
|
type: NgModule,
|
|
@@ -17204,7 +17272,7 @@ class CdkDragModule_CdkDrag extends CdkDrag {
|
|
|
17204
17272
|
super(elementRef, dropContainer, document, ngZone, viewContainerRef, config, dir, dragDrop, changeDetectorRef);
|
|
17205
17273
|
}
|
|
17206
17274
|
}
|
|
17207
|
-
CdkDragModule_CdkDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CdkDragModule_CdkDrag, deps: [{ token: i0.ElementRef }, { token: CDK_DROP_LIST, optional: true }, { token: DOCUMENT, optional: true }, { token: i0.NgZone }, { token: i0.ViewContainerRef }, { token: CDK_DRAG_CONFIG, optional: true }, { token: i1$3.Directionality }, { token: i2.DragDrop }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17275
|
+
CdkDragModule_CdkDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CdkDragModule_CdkDrag, deps: [{ token: i0.ElementRef }, { token: CDK_DROP_LIST, optional: true }, { token: DOCUMENT, optional: true }, { token: i0.NgZone }, { token: i0.ViewContainerRef }, { token: CDK_DRAG_CONFIG, optional: true }, { token: i1$3.Directionality }, { token: i2$1.DragDrop }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17208
17276
|
CdkDragModule_CdkDrag.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]", usesInheritance: true, ngImport: i0 });
|
|
17209
17277
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CdkDragModule_CdkDrag, decorators: [{
|
|
17210
17278
|
type: Directive,
|
|
@@ -17226,7 +17294,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17226
17294
|
}, {
|
|
17227
17295
|
type: Inject,
|
|
17228
17296
|
args: [CDK_DRAG_CONFIG]
|
|
17229
|
-
}] }, { type: i1$3.Directionality }, { type: i2.DragDrop }, { type: i0.ChangeDetectorRef }]; } });
|
|
17297
|
+
}] }, { type: i1$3.Directionality }, { type: i2$1.DragDrop }, { type: i0.ChangeDetectorRef }]; } });
|
|
17230
17298
|
/**
|
|
17231
17299
|
* This module allows us to avoid importing all of CdkDragDropModule which results in a smaller application bundle.
|
|
17232
17300
|
*/
|
|
@@ -17665,6 +17733,540 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17665
17733
|
type: Directive
|
|
17666
17734
|
}], ctorParameters: function () { return [{ type: FiltersProvider }]; } });
|
|
17667
17735
|
|
|
17736
|
+
/*
|
|
17737
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
17738
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
17739
|
+
* This software is released under MIT license.
|
|
17740
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
17741
|
+
*/
|
|
17742
|
+
class DefaultKeyNavigationStrategy {
|
|
17743
|
+
constructor(utils) {
|
|
17744
|
+
this.utils = utils;
|
|
17745
|
+
}
|
|
17746
|
+
keyUp(currentCellCoords) {
|
|
17747
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17748
|
+
if (currentCellCoords.y === 0) {
|
|
17749
|
+
return nextCellCoords;
|
|
17750
|
+
}
|
|
17751
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17752
|
+
const isActionCell = this.utils.isActionCell(currentCellCoords);
|
|
17753
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y) &&
|
|
17754
|
+
!isActionCell &&
|
|
17755
|
+
this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17756
|
+
nextCellCoords.x = 0;
|
|
17757
|
+
}
|
|
17758
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17759
|
+
if (isActionCell) {
|
|
17760
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17761
|
+
}
|
|
17762
|
+
else {
|
|
17763
|
+
nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17764
|
+
}
|
|
17765
|
+
}
|
|
17766
|
+
return nextCellCoords;
|
|
17767
|
+
}
|
|
17768
|
+
keyDown(currentCellCoords) {
|
|
17769
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17770
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
17771
|
+
if (currentCellCoords.y >= numOfRows) {
|
|
17772
|
+
return nextCellCoords;
|
|
17773
|
+
}
|
|
17774
|
+
const isActionCell = this.utils.isActionCell(currentCellCoords);
|
|
17775
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
17776
|
+
if (!isActionCell && this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
17777
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17778
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
17779
|
+
? 0
|
|
17780
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17781
|
+
}
|
|
17782
|
+
return nextCellCoords;
|
|
17783
|
+
}
|
|
17784
|
+
keyLeft(currentCellCoords) {
|
|
17785
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17786
|
+
if (currentCellCoords.x === 0) {
|
|
17787
|
+
return nextCellCoords;
|
|
17788
|
+
}
|
|
17789
|
+
nextCellCoords.x = currentCellCoords.x - 1;
|
|
17790
|
+
return nextCellCoords;
|
|
17791
|
+
}
|
|
17792
|
+
keyRight(currentCellCoords) {
|
|
17793
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17794
|
+
// calculate numOfColumns based on header cells.
|
|
17795
|
+
const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
17796
|
+
nextCellCoords.x = currentCellCoords.x < numOfColumns ? nextCellCoords.x + 1 : nextCellCoords.x;
|
|
17797
|
+
return nextCellCoords;
|
|
17798
|
+
}
|
|
17799
|
+
keyEnd(currentCellCoords, ctrlKey) {
|
|
17800
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17801
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
17802
|
+
// calculate X based on header cells.
|
|
17803
|
+
nextCellCoords.x = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
17804
|
+
if (ctrlKey) {
|
|
17805
|
+
nextCellCoords.y = numOfRows;
|
|
17806
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17807
|
+
nextCellCoords.x = this.utils.getCellsForRow(nextCellCoords.y).length - 1;
|
|
17808
|
+
}
|
|
17809
|
+
}
|
|
17810
|
+
return nextCellCoords;
|
|
17811
|
+
}
|
|
17812
|
+
keyHome(currentCellCoords, ctrlKey) {
|
|
17813
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17814
|
+
nextCellCoords.x = 0;
|
|
17815
|
+
if (ctrlKey) {
|
|
17816
|
+
nextCellCoords.y = 0;
|
|
17817
|
+
}
|
|
17818
|
+
return nextCellCoords;
|
|
17819
|
+
}
|
|
17820
|
+
keyPageUp(currentCellCoords) {
|
|
17821
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17822
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
17823
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
17824
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
17825
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17826
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
17827
|
+
? 0
|
|
17828
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17829
|
+
}
|
|
17830
|
+
else if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
17831
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17832
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
17833
|
+
? 0
|
|
17834
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17835
|
+
}
|
|
17836
|
+
}
|
|
17837
|
+
else {
|
|
17838
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17839
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17840
|
+
}
|
|
17841
|
+
}
|
|
17842
|
+
return nextCellCoords;
|
|
17843
|
+
}
|
|
17844
|
+
keyPageDown(currentCellCoords) {
|
|
17845
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17846
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
17847
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
17848
|
+
nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
|
|
17849
|
+
if (this.utils.isActionCell(currentCellCoords) && this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17850
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17851
|
+
}
|
|
17852
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y) && this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
17853
|
+
nextCellCoords.x = 0;
|
|
17854
|
+
}
|
|
17855
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17856
|
+
nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17857
|
+
}
|
|
17858
|
+
else if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
17859
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17860
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
17861
|
+
? 0
|
|
17862
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17863
|
+
}
|
|
17864
|
+
return nextCellCoords;
|
|
17865
|
+
}
|
|
17866
|
+
}
|
|
17867
|
+
|
|
17868
|
+
/*
|
|
17869
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
17870
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
17871
|
+
* This software is released under MIT license.
|
|
17872
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
17873
|
+
*/
|
|
17874
|
+
class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
|
|
17875
|
+
constructor(utils) {
|
|
17876
|
+
super(utils);
|
|
17877
|
+
}
|
|
17878
|
+
keyUp(currentCellCoords) {
|
|
17879
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17880
|
+
if (currentCellCoords.y === 0) {
|
|
17881
|
+
return nextCellCoords;
|
|
17882
|
+
}
|
|
17883
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17884
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
17885
|
+
if (this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
17886
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17887
|
+
}
|
|
17888
|
+
switch (true) {
|
|
17889
|
+
case this.utils.isDetailsRow(nextCellCoords.y):
|
|
17890
|
+
nextCellCoords.x = 0;
|
|
17891
|
+
break;
|
|
17892
|
+
case this.utils.isDetailsRow(currentCellCoords.y) === false:
|
|
17893
|
+
nextCellCoords.x = currentCellCoords.x;
|
|
17894
|
+
break;
|
|
17895
|
+
default:
|
|
17896
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
|
|
17897
|
+
}
|
|
17898
|
+
}
|
|
17899
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y) && nextCellCoords.y > 0) {
|
|
17900
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17901
|
+
}
|
|
17902
|
+
return nextCellCoords;
|
|
17903
|
+
}
|
|
17904
|
+
keyDown(currentCellCoords) {
|
|
17905
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17906
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
17907
|
+
if (currentCellCoords.y >= numOfRows) {
|
|
17908
|
+
return nextCellCoords;
|
|
17909
|
+
}
|
|
17910
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
17911
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
17912
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
17913
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17914
|
+
}
|
|
17915
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17916
|
+
nextCellCoords.x = 0;
|
|
17917
|
+
}
|
|
17918
|
+
else {
|
|
17919
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
|
|
17920
|
+
}
|
|
17921
|
+
}
|
|
17922
|
+
else {
|
|
17923
|
+
nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y;
|
|
17924
|
+
}
|
|
17925
|
+
return nextCellCoords;
|
|
17926
|
+
}
|
|
17927
|
+
keyLeft(currentCellCoords) {
|
|
17928
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17929
|
+
if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
17930
|
+
return super.keyLeft(currentCellCoords);
|
|
17931
|
+
}
|
|
17932
|
+
if (currentCellCoords.x !== 0) {
|
|
17933
|
+
nextCellCoords.x = currentCellCoords.x - 1;
|
|
17934
|
+
}
|
|
17935
|
+
else if (!this.utils.isActionCell(currentCellCoords)) {
|
|
17936
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17937
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y) - 1;
|
|
17938
|
+
}
|
|
17939
|
+
return nextCellCoords;
|
|
17940
|
+
}
|
|
17941
|
+
keyRight(currentCellCoords) {
|
|
17942
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17943
|
+
if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
17944
|
+
return super.keyRight(currentCellCoords);
|
|
17945
|
+
}
|
|
17946
|
+
// calculate numOfColumns based on header cells.
|
|
17947
|
+
const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
17948
|
+
if (currentCellCoords.x >= numOfColumns) {
|
|
17949
|
+
return nextCellCoords;
|
|
17950
|
+
}
|
|
17951
|
+
if (this.utils.isActionCell(currentCellCoords) &&
|
|
17952
|
+
currentCellCoords.x === this.utils.actionCellCount(currentCellCoords.x) - 1 &&
|
|
17953
|
+
this.utils.isRowReplaced(currentCellCoords.y) &&
|
|
17954
|
+
!this.utils.isDetailsRow(currentCellCoords.y)) {
|
|
17955
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
17956
|
+
nextCellCoords.x = 0;
|
|
17957
|
+
}
|
|
17958
|
+
else {
|
|
17959
|
+
nextCellCoords.x = currentCellCoords.x + 1;
|
|
17960
|
+
}
|
|
17961
|
+
return nextCellCoords;
|
|
17962
|
+
}
|
|
17963
|
+
keyEnd(currentCellCoords, ctrlKey) {
|
|
17964
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17965
|
+
if ((!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) || ctrlKey) {
|
|
17966
|
+
return super.keyEnd(currentCellCoords, ctrlKey);
|
|
17967
|
+
}
|
|
17968
|
+
nextCellCoords.x = this.utils.getCellsForRow(currentCellCoords.y).length - 1;
|
|
17969
|
+
return nextCellCoords;
|
|
17970
|
+
}
|
|
17971
|
+
keyHome(currentCellCoords, ctrlKey) {
|
|
17972
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17973
|
+
if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
17974
|
+
return super.keyHome(currentCellCoords, ctrlKey);
|
|
17975
|
+
}
|
|
17976
|
+
nextCellCoords.x = 0;
|
|
17977
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17978
|
+
if (ctrlKey) {
|
|
17979
|
+
nextCellCoords.y = 0;
|
|
17980
|
+
}
|
|
17981
|
+
return nextCellCoords;
|
|
17982
|
+
}
|
|
17983
|
+
keyPageUp(currentCellCoords) {
|
|
17984
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17985
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
17986
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
17987
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
17988
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
17989
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17990
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17991
|
+
nextCellCoords.x = 0;
|
|
17992
|
+
}
|
|
17993
|
+
}
|
|
17994
|
+
else if (!this.utils.isDetailsRow(currentCellCoords.y)) {
|
|
17995
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
17996
|
+
nextCellCoords.x = 0;
|
|
17997
|
+
}
|
|
17998
|
+
}
|
|
17999
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y)) {
|
|
18000
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18001
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
|
|
18002
|
+
}
|
|
18003
|
+
}
|
|
18004
|
+
}
|
|
18005
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18006
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18007
|
+
}
|
|
18008
|
+
return nextCellCoords;
|
|
18009
|
+
}
|
|
18010
|
+
keyPageDown(currentCellCoords) {
|
|
18011
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18012
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18013
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18014
|
+
nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
|
|
18015
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18016
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18017
|
+
if (nextCellCoords.y < numOfRows && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18018
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18019
|
+
}
|
|
18020
|
+
}
|
|
18021
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18022
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18023
|
+
}
|
|
18024
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18025
|
+
nextCellCoords.x = 0;
|
|
18026
|
+
}
|
|
18027
|
+
}
|
|
18028
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18029
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18030
|
+
}
|
|
18031
|
+
return nextCellCoords;
|
|
18032
|
+
}
|
|
18033
|
+
}
|
|
18034
|
+
|
|
18035
|
+
/*
|
|
18036
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
18037
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
18038
|
+
* This software is released under MIT license.
|
|
18039
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18040
|
+
*/
|
|
18041
|
+
class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {
|
|
18042
|
+
constructor(utils) {
|
|
18043
|
+
super(utils);
|
|
18044
|
+
}
|
|
18045
|
+
keyUp(currentCellCoords) {
|
|
18046
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18047
|
+
if (currentCellCoords.y === 0) {
|
|
18048
|
+
return nextCellCoords;
|
|
18049
|
+
}
|
|
18050
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18051
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18052
|
+
return super.keyUp(currentCellCoords);
|
|
18053
|
+
}
|
|
18054
|
+
const isActionCell = this.utils.isActionCell(currentCellCoords);
|
|
18055
|
+
if (isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18056
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18057
|
+
}
|
|
18058
|
+
else if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18059
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18060
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18061
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18062
|
+
}
|
|
18063
|
+
}
|
|
18064
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18065
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18066
|
+
}
|
|
18067
|
+
else if (!isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18068
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18069
|
+
}
|
|
18070
|
+
return nextCellCoords;
|
|
18071
|
+
}
|
|
18072
|
+
keyDown(currentCellCoords) {
|
|
18073
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18074
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18075
|
+
const numOfColumns = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
18076
|
+
if (currentCellCoords.y >= numOfRows) {
|
|
18077
|
+
return nextCellCoords;
|
|
18078
|
+
}
|
|
18079
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
18080
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18081
|
+
return super.keyDown(currentCellCoords);
|
|
18082
|
+
}
|
|
18083
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18084
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18085
|
+
nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
|
|
18086
|
+
}
|
|
18087
|
+
else if (this.utils.getCellsForRow(currentCellCoords.y).length > numOfColumns) {
|
|
18088
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18089
|
+
}
|
|
18090
|
+
else {
|
|
18091
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18092
|
+
}
|
|
18093
|
+
}
|
|
18094
|
+
else {
|
|
18095
|
+
nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
|
|
18096
|
+
}
|
|
18097
|
+
return nextCellCoords;
|
|
18098
|
+
}
|
|
18099
|
+
keyLeft(currentCellCoords) {
|
|
18100
|
+
return super.keyLeft(currentCellCoords);
|
|
18101
|
+
}
|
|
18102
|
+
keyRight(currentCellCoords) {
|
|
18103
|
+
return super.keyRight(currentCellCoords);
|
|
18104
|
+
}
|
|
18105
|
+
keyEnd(currentCellCoords, ctrlKey) {
|
|
18106
|
+
return super.keyEnd(currentCellCoords, ctrlKey);
|
|
18107
|
+
}
|
|
18108
|
+
keyHome(currentCellCoords, ctrlKey) {
|
|
18109
|
+
return super.keyHome(currentCellCoords, ctrlKey);
|
|
18110
|
+
}
|
|
18111
|
+
keyPageUp(currentCellCoords) {
|
|
18112
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18113
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18114
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
18115
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18116
|
+
return super.keyPageUp(currentCellCoords);
|
|
18117
|
+
}
|
|
18118
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18119
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18120
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18121
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18122
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18123
|
+
}
|
|
18124
|
+
}
|
|
18125
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18126
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18127
|
+
}
|
|
18128
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18129
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18130
|
+
}
|
|
18131
|
+
}
|
|
18132
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18133
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18134
|
+
}
|
|
18135
|
+
return nextCellCoords;
|
|
18136
|
+
}
|
|
18137
|
+
keyPageDown(currentCellCoords) {
|
|
18138
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18139
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18140
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18141
|
+
nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
|
|
18142
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18143
|
+
return super.keyPageDown(currentCellCoords);
|
|
18144
|
+
}
|
|
18145
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18146
|
+
if (this.utils.isRowReplaced(nextCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18147
|
+
if (nextCellCoords.y < numOfRows) {
|
|
18148
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18149
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18150
|
+
}
|
|
18151
|
+
}
|
|
18152
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18153
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18154
|
+
}
|
|
18155
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18156
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18157
|
+
}
|
|
18158
|
+
}
|
|
18159
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18160
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18161
|
+
}
|
|
18162
|
+
return nextCellCoords;
|
|
18163
|
+
}
|
|
18164
|
+
}
|
|
18165
|
+
|
|
18166
|
+
/*
|
|
18167
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
18168
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
18169
|
+
* This software is released under MIT license.
|
|
18170
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18171
|
+
*/
|
|
18172
|
+
class KeyNavigationUtils {
|
|
18173
|
+
constructor(host, config) {
|
|
18174
|
+
this.host = host;
|
|
18175
|
+
this.config = config;
|
|
18176
|
+
}
|
|
18177
|
+
get grid() {
|
|
18178
|
+
return this.host?.querySelector(this.config.keyGrid);
|
|
18179
|
+
}
|
|
18180
|
+
get rows() {
|
|
18181
|
+
return this.host?.querySelectorAll(this.config.keyGridRows);
|
|
18182
|
+
}
|
|
18183
|
+
get cells() {
|
|
18184
|
+
return this.host?.querySelectorAll(this.config.keyGridCells);
|
|
18185
|
+
}
|
|
18186
|
+
get currentCellCoordinates() {
|
|
18187
|
+
const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
18188
|
+
const currentRow = currentCell ? currentCell.closest(this.config.keyGridRows) : null;
|
|
18189
|
+
const coordinates = {
|
|
18190
|
+
x: currentRow && currentCell
|
|
18191
|
+
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
18192
|
+
: 0,
|
|
18193
|
+
y: currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0,
|
|
18194
|
+
};
|
|
18195
|
+
return coordinates;
|
|
18196
|
+
}
|
|
18197
|
+
get itemsPerPage() {
|
|
18198
|
+
return Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.rows[0].clientHeight) - 1 || 0;
|
|
18199
|
+
}
|
|
18200
|
+
getNextItemCoordinate(e) {
|
|
18201
|
+
const currentCellCoords = this.currentCellCoordinates;
|
|
18202
|
+
const strategy = this.getNavStrategy(currentCellCoords);
|
|
18203
|
+
const inlineStart = this.host.dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;
|
|
18204
|
+
const inlineEnd = this.host.dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;
|
|
18205
|
+
switch (e.key) {
|
|
18206
|
+
case Keys.ArrowUp:
|
|
18207
|
+
return strategy.keyUp(currentCellCoords);
|
|
18208
|
+
case Keys.ArrowDown:
|
|
18209
|
+
return strategy.keyDown(currentCellCoords);
|
|
18210
|
+
case inlineStart:
|
|
18211
|
+
return strategy.keyLeft(currentCellCoords);
|
|
18212
|
+
case inlineEnd:
|
|
18213
|
+
return strategy.keyRight(currentCellCoords);
|
|
18214
|
+
case Keys.Home:
|
|
18215
|
+
return strategy.keyHome(currentCellCoords, e.ctrlKey);
|
|
18216
|
+
case Keys.End:
|
|
18217
|
+
return strategy.keyEnd(currentCellCoords, e.ctrlKey);
|
|
18218
|
+
case Keys.PageUp:
|
|
18219
|
+
return strategy.keyPageUp(currentCellCoords);
|
|
18220
|
+
case Keys.PageDown:
|
|
18221
|
+
return strategy.keyPageDown(currentCellCoords);
|
|
18222
|
+
default:
|
|
18223
|
+
return currentCellCoords;
|
|
18224
|
+
}
|
|
18225
|
+
}
|
|
18226
|
+
getCellsForRow(index) {
|
|
18227
|
+
return this.rows[index].querySelectorAll(this.config.keyGridCells);
|
|
18228
|
+
}
|
|
18229
|
+
isExpandedRow(index) {
|
|
18230
|
+
const selectedElement = this.rows[index].querySelector('.datagrid-row-detail');
|
|
18231
|
+
return selectedElement ? selectedElement.style.display !== 'none' : false;
|
|
18232
|
+
}
|
|
18233
|
+
isDetailsRow(index) {
|
|
18234
|
+
return this.rows[index].classList.contains('datagrid-row-detail');
|
|
18235
|
+
}
|
|
18236
|
+
isRowReplaced(index) {
|
|
18237
|
+
return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');
|
|
18238
|
+
}
|
|
18239
|
+
isSingleCellExpandedRow(index) {
|
|
18240
|
+
return this.rows[index]?.querySelectorAll(this.config.keyGridCells).length === 1;
|
|
18241
|
+
}
|
|
18242
|
+
actionCellCount(index) {
|
|
18243
|
+
return this.actionCellsAsArray(index).length;
|
|
18244
|
+
}
|
|
18245
|
+
actionCellsAsArray(index) {
|
|
18246
|
+
return Array.from(this.rows[index].querySelectorAll('.datagrid-row-sticky .datagrid-cell, .datagrid-row-sticky .datagrid-column'));
|
|
18247
|
+
}
|
|
18248
|
+
isActionCell(cellCoords) {
|
|
18249
|
+
return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];
|
|
18250
|
+
}
|
|
18251
|
+
createNextCellCoords(cellCoords) {
|
|
18252
|
+
return {
|
|
18253
|
+
x: cellCoords.x,
|
|
18254
|
+
y: cellCoords.y,
|
|
18255
|
+
};
|
|
18256
|
+
}
|
|
18257
|
+
getNavStrategy(currentCellCoords) {
|
|
18258
|
+
switch (true) {
|
|
18259
|
+
case this.isSingleCellExpandedRow(currentCellCoords.y):
|
|
18260
|
+
return new ExpandedRowKeyNavigationStrategy(this);
|
|
18261
|
+
case this.isDetailsRow(currentCellCoords.y):
|
|
18262
|
+
case this.isExpandedRow(currentCellCoords.y):
|
|
18263
|
+
return new ExpandedColumnsRowKeyNavigationStrategy(this);
|
|
18264
|
+
default:
|
|
18265
|
+
return new DefaultKeyNavigationStrategy(this);
|
|
18266
|
+
}
|
|
18267
|
+
}
|
|
18268
|
+
}
|
|
18269
|
+
|
|
17668
18270
|
/*
|
|
17669
18271
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
17670
18272
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -17706,15 +18308,6 @@ class KeyNavigationGridController {
|
|
|
17706
18308
|
keyGrid: '[role=grid]',
|
|
17707
18309
|
};
|
|
17708
18310
|
}
|
|
17709
|
-
get grid() {
|
|
17710
|
-
return this.host?.querySelector(this.config.keyGrid);
|
|
17711
|
-
}
|
|
17712
|
-
get rows() {
|
|
17713
|
-
return this.host?.querySelectorAll(this.config.keyGridRows);
|
|
17714
|
-
}
|
|
17715
|
-
get cells() {
|
|
17716
|
-
return this.host?.querySelectorAll(this.config.keyGridCells);
|
|
17717
|
-
}
|
|
17718
18311
|
ngOnDestroy() {
|
|
17719
18312
|
this.destroy$.next();
|
|
17720
18313
|
this.destroy$.complete();
|
|
@@ -17724,33 +18317,33 @@ class KeyNavigationGridController {
|
|
|
17724
18317
|
return;
|
|
17725
18318
|
}
|
|
17726
18319
|
this.zone.runOutsideAngular(() => {
|
|
17727
|
-
fromEvent(this.grid, 'mousedown')
|
|
18320
|
+
fromEvent(this.keyNavUtils.grid, 'mousedown')
|
|
17728
18321
|
.pipe(takeUntil(this.destroy$))
|
|
17729
18322
|
.subscribe((e) => {
|
|
17730
18323
|
// 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
|
|
17731
18324
|
if (e.buttons === 1 && !e.ctrlKey) {
|
|
17732
|
-
const activeCell = this.cells
|
|
17733
|
-
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
18325
|
+
const activeCell = this.keyNavUtils.cells
|
|
18326
|
+
? Array.from(this.keyNavUtils.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
17734
18327
|
: null;
|
|
17735
18328
|
if (activeCell) {
|
|
17736
18329
|
this.setActiveCell(activeCell, { keepFocus: isActionableItem(e.target) });
|
|
17737
18330
|
}
|
|
17738
18331
|
}
|
|
17739
18332
|
});
|
|
17740
|
-
fromEvent(this.grid, 'wheel')
|
|
18333
|
+
fromEvent(this.keyNavUtils.grid, 'wheel')
|
|
17741
18334
|
.pipe(takeUntil(this.destroy$))
|
|
17742
18335
|
.subscribe(() => {
|
|
17743
18336
|
this.removeActiveCell();
|
|
17744
18337
|
});
|
|
17745
|
-
fromEvent(this.grid, 'focusout')
|
|
18338
|
+
fromEvent(this.keyNavUtils.grid, 'focusout')
|
|
17746
18339
|
.pipe(debounceTime(0), takeUntil(this.destroy$))
|
|
17747
18340
|
.subscribe(() => {
|
|
17748
|
-
if (this.grid.contains(document.activeElement)) {
|
|
18341
|
+
if (this.keyNavUtils.grid.contains(document.activeElement)) {
|
|
17749
18342
|
return;
|
|
17750
18343
|
}
|
|
17751
18344
|
this.removeActiveCell();
|
|
17752
18345
|
});
|
|
17753
|
-
fromEvent(this.grid, 'keydown')
|
|
18346
|
+
fromEvent(this.keyNavUtils.grid, 'keydown')
|
|
17754
18347
|
.pipe(takeUntil(this.destroy$))
|
|
17755
18348
|
.subscribe((e) => {
|
|
17756
18349
|
// Skip column resize events
|
|
@@ -17766,12 +18359,9 @@ class KeyNavigationGridController {
|
|
|
17766
18359
|
e.key === Keys.Home ||
|
|
17767
18360
|
e.key === Keys.PageUp ||
|
|
17768
18361
|
e.key === Keys.PageDown) {
|
|
17769
|
-
const
|
|
17770
|
-
const
|
|
17771
|
-
? this.
|
|
17772
|
-
: this.getNextItemCoordinate(e, currentCellCoords);
|
|
17773
|
-
const activeItem = this.rows
|
|
17774
|
-
? Array.from(this.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
18362
|
+
const nextCellCoords = this.keyNavUtils.getNextItemCoordinate(e);
|
|
18363
|
+
const activeItem = this.keyNavUtils.rows
|
|
18364
|
+
? Array.from(this.keyNavUtils.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
17775
18365
|
: null;
|
|
17776
18366
|
if (activeItem) {
|
|
17777
18367
|
this.setActiveCell(activeItem);
|
|
@@ -17783,13 +18373,13 @@ class KeyNavigationGridController {
|
|
|
17783
18373
|
this.listenersAdded = true;
|
|
17784
18374
|
}
|
|
17785
18375
|
initializeKeyGrid(host) {
|
|
17786
|
-
this.
|
|
18376
|
+
this.keyNavUtils = new KeyNavigationUtils(host, this.config);
|
|
17787
18377
|
this.addListeners();
|
|
17788
18378
|
this.resetKeyGrid();
|
|
17789
18379
|
}
|
|
17790
18380
|
resetKeyGrid() {
|
|
17791
|
-
this.cells?.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
17792
|
-
const firstCell = this.cells ? this.cells[0] : null;
|
|
18381
|
+
this.keyNavUtils.cells?.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
18382
|
+
const firstCell = this.keyNavUtils.cells ? this.keyNavUtils.cells[0] : null;
|
|
17793
18383
|
firstCell?.setAttribute('tabindex', '0');
|
|
17794
18384
|
}
|
|
17795
18385
|
removeActiveCell() {
|
|
@@ -17799,7 +18389,9 @@ class KeyNavigationGridController {
|
|
|
17799
18389
|
return this._activeCell;
|
|
17800
18390
|
}
|
|
17801
18391
|
setActiveCell(activeCell, { keepFocus } = { keepFocus: false }) {
|
|
17802
|
-
const prior = this.
|
|
18392
|
+
const prior = this.keyNavUtils.cells
|
|
18393
|
+
? Array.from(this.keyNavUtils.cells).find(c => c.getAttribute('tabindex') === '0')
|
|
18394
|
+
: null;
|
|
17803
18395
|
if (prior) {
|
|
17804
18396
|
prior.setAttribute('tabindex', '-1');
|
|
17805
18397
|
}
|
|
@@ -17817,222 +18409,6 @@ class KeyNavigationGridController {
|
|
|
17817
18409
|
elementToFocus.focus();
|
|
17818
18410
|
}
|
|
17819
18411
|
}
|
|
17820
|
-
getNextForExpandedRowCoordinate(e, currentCellCoords) {
|
|
17821
|
-
if (e.key === Keys.PageUp || e.key === Keys.PageDown) {
|
|
17822
|
-
return this.getNextItemCoordinate(e, currentCellCoords);
|
|
17823
|
-
}
|
|
17824
|
-
if (!this.isDetailsRow(currentCellCoords.y) &&
|
|
17825
|
-
!this.isRowReplaced(currentCellCoords.y) &&
|
|
17826
|
-
(e.key === Keys.Home || e.key === Keys.End || e.key === Keys.ArrowRight || e.key === Keys.ArrowLeft)) {
|
|
17827
|
-
return this.getNextItemCoordinate(e, currentCellCoords);
|
|
17828
|
-
}
|
|
17829
|
-
const { numOfRows, numOfColumns, inlineStart, inlineEnd, isActionCell, nextCellCoords } = this.getCalcVariables(currentCellCoords);
|
|
17830
|
-
const isSingleCellExpandedRow = this.isSingleCellExpandedRow(currentCellCoords.y);
|
|
17831
|
-
if (e.key === Keys.ArrowUp && currentCellCoords.y !== 0) {
|
|
17832
|
-
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17833
|
-
if (isSingleCellExpandedRow && !isActionCell) {
|
|
17834
|
-
if (this.isRowReplaced(currentCellCoords.y)) {
|
|
17835
|
-
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17836
|
-
}
|
|
17837
|
-
if (this.isDetailsRow(nextCellCoords.y)) {
|
|
17838
|
-
nextCellCoords.x = 0;
|
|
17839
|
-
}
|
|
17840
|
-
else if (this.isDetailsRow(currentCellCoords.y) === false) {
|
|
17841
|
-
// false check is intentional, the ! operator may be missed easily in this case
|
|
17842
|
-
nextCellCoords.x = currentCellCoords.x;
|
|
17843
|
-
}
|
|
17844
|
-
else {
|
|
17845
|
-
nextCellCoords.x = this.actionCellCount(nextCellCoords.y);
|
|
17846
|
-
}
|
|
17847
|
-
return nextCellCoords;
|
|
17848
|
-
}
|
|
17849
|
-
if (isActionCell && this.isDetailsRow(nextCellCoords.y)) {
|
|
17850
|
-
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17851
|
-
}
|
|
17852
|
-
else if (this.isRowReplaced(nextCellCoords.y)) {
|
|
17853
|
-
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17854
|
-
if (!this.isDetailsRow(nextCellCoords.y)) {
|
|
17855
|
-
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
17856
|
-
}
|
|
17857
|
-
}
|
|
17858
|
-
else if (this.isDetailsRow(currentCellCoords.y) && !this.isDetailsRow(nextCellCoords.y)) {
|
|
17859
|
-
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
17860
|
-
}
|
|
17861
|
-
else if (!isActionCell && this.isDetailsRow(nextCellCoords.y)) {
|
|
17862
|
-
nextCellCoords.x = currentCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
17863
|
-
}
|
|
17864
|
-
}
|
|
17865
|
-
else if (e.key === Keys.ArrowDown && currentCellCoords.y < numOfRows) {
|
|
17866
|
-
nextCellCoords.y = currentCellCoords.y + 1;
|
|
17867
|
-
if (isSingleCellExpandedRow && !isActionCell) {
|
|
17868
|
-
if (this.isRowReplaced(nextCellCoords.y)) {
|
|
17869
|
-
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17870
|
-
}
|
|
17871
|
-
if (this.isDetailsRow(nextCellCoords.y)) {
|
|
17872
|
-
nextCellCoords.x = 0;
|
|
17873
|
-
}
|
|
17874
|
-
else {
|
|
17875
|
-
nextCellCoords.x = this.actionCellCount(nextCellCoords.y);
|
|
17876
|
-
}
|
|
17877
|
-
return nextCellCoords;
|
|
17878
|
-
}
|
|
17879
|
-
if (isActionCell || this.isRowReplaced(nextCellCoords.y)) {
|
|
17880
|
-
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17881
|
-
}
|
|
17882
|
-
else if (this.getCellsForRow(currentCellCoords.y).length > numOfColumns) {
|
|
17883
|
-
nextCellCoords.x = currentCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
17884
|
-
}
|
|
17885
|
-
else {
|
|
17886
|
-
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
17887
|
-
}
|
|
17888
|
-
}
|
|
17889
|
-
else if (e.key === inlineStart) {
|
|
17890
|
-
if (currentCellCoords.x !== 0) {
|
|
17891
|
-
nextCellCoords.x = currentCellCoords.x - 1;
|
|
17892
|
-
}
|
|
17893
|
-
else if (!isActionCell) {
|
|
17894
|
-
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17895
|
-
nextCellCoords.x = this.actionCellCount(nextCellCoords.y) - 1;
|
|
17896
|
-
}
|
|
17897
|
-
}
|
|
17898
|
-
else if (e.key === inlineEnd && currentCellCoords.x < numOfColumns) {
|
|
17899
|
-
if (isActionCell &&
|
|
17900
|
-
currentCellCoords.x === this.actionCellCount(currentCellCoords.x) - 1 &&
|
|
17901
|
-
this.isRowReplaced(currentCellCoords.y) &&
|
|
17902
|
-
!this.isDetailsRow(currentCellCoords.y)) {
|
|
17903
|
-
nextCellCoords.y = currentCellCoords.y + 1;
|
|
17904
|
-
nextCellCoords.x = 0;
|
|
17905
|
-
}
|
|
17906
|
-
else {
|
|
17907
|
-
nextCellCoords.x = currentCellCoords.x + 1;
|
|
17908
|
-
}
|
|
17909
|
-
}
|
|
17910
|
-
else if (e.key === Keys.End) {
|
|
17911
|
-
nextCellCoords.x = this.getCellsForRow(currentCellCoords.y).length - 1;
|
|
17912
|
-
if (e.ctrlKey) {
|
|
17913
|
-
nextCellCoords.x = numOfColumns;
|
|
17914
|
-
nextCellCoords.y = numOfRows;
|
|
17915
|
-
}
|
|
17916
|
-
}
|
|
17917
|
-
else if (e.key === Keys.Home) {
|
|
17918
|
-
nextCellCoords.x = 0;
|
|
17919
|
-
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17920
|
-
if (e.ctrlKey) {
|
|
17921
|
-
nextCellCoords.y = 0;
|
|
17922
|
-
}
|
|
17923
|
-
}
|
|
17924
|
-
return nextCellCoords;
|
|
17925
|
-
}
|
|
17926
|
-
getNextItemCoordinate(e, currentCellCoords) {
|
|
17927
|
-
const { numOfRows, numOfColumns, inlineStart, inlineEnd, itemsPerPage, isActionCell, nextCellCoords } = this.getCalcVariables(currentCellCoords);
|
|
17928
|
-
if (e.key === Keys.ArrowUp && currentCellCoords.y !== 0) {
|
|
17929
|
-
nextCellCoords.y = currentCellCoords.y - 1;
|
|
17930
|
-
if (this.isSingleCellExpandedRow(nextCellCoords.y) && !isActionCell && this.isDetailsRow(nextCellCoords.y)) {
|
|
17931
|
-
nextCellCoords.x = 0;
|
|
17932
|
-
return nextCellCoords;
|
|
17933
|
-
}
|
|
17934
|
-
if (this.isDetailsRow(nextCellCoords.y)) {
|
|
17935
|
-
if (isActionCell) {
|
|
17936
|
-
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17937
|
-
}
|
|
17938
|
-
else {
|
|
17939
|
-
nextCellCoords.x = nextCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
17940
|
-
}
|
|
17941
|
-
}
|
|
17942
|
-
}
|
|
17943
|
-
else if (e.key === Keys.ArrowDown && currentCellCoords.y < numOfRows) {
|
|
17944
|
-
nextCellCoords.y = currentCellCoords.y + 1;
|
|
17945
|
-
if (this.isSingleCellExpandedRow(nextCellCoords.y) && !isActionCell && this.isRowReplaced(nextCellCoords.y)) {
|
|
17946
|
-
nextCellCoords.x = 0;
|
|
17947
|
-
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17948
|
-
return nextCellCoords;
|
|
17949
|
-
}
|
|
17950
|
-
if (!isActionCell && this.isRowReplaced(nextCellCoords.y)) {
|
|
17951
|
-
nextCellCoords.y = nextCellCoords.y + 1;
|
|
17952
|
-
nextCellCoords.x = nextCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
17953
|
-
}
|
|
17954
|
-
}
|
|
17955
|
-
else if (e.key === inlineStart && currentCellCoords.x !== 0) {
|
|
17956
|
-
nextCellCoords.x = currentCellCoords.x - 1;
|
|
17957
|
-
}
|
|
17958
|
-
else if (e.key === inlineEnd && currentCellCoords.x < numOfColumns) {
|
|
17959
|
-
nextCellCoords.x = currentCellCoords.x + 1;
|
|
17960
|
-
}
|
|
17961
|
-
else if (e.key === Keys.End) {
|
|
17962
|
-
nextCellCoords.x = numOfColumns;
|
|
17963
|
-
if (e.ctrlKey) {
|
|
17964
|
-
nextCellCoords.y = numOfRows;
|
|
17965
|
-
}
|
|
17966
|
-
}
|
|
17967
|
-
else if (e.key === Keys.Home) {
|
|
17968
|
-
nextCellCoords.x = 0;
|
|
17969
|
-
if (e.ctrlKey) {
|
|
17970
|
-
nextCellCoords.y = 0;
|
|
17971
|
-
}
|
|
17972
|
-
}
|
|
17973
|
-
else if (e.key === Keys.PageUp) {
|
|
17974
|
-
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
17975
|
-
}
|
|
17976
|
-
else if (e.key === Keys.PageDown) {
|
|
17977
|
-
nextCellCoords.y =
|
|
17978
|
-
currentCellCoords.y + itemsPerPage < numOfRows ? currentCellCoords.y + itemsPerPage : numOfRows;
|
|
17979
|
-
}
|
|
17980
|
-
return nextCellCoords;
|
|
17981
|
-
}
|
|
17982
|
-
getCalcVariables(currentCellCoords) {
|
|
17983
|
-
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
17984
|
-
// calculate numOfColumns based on header cells.
|
|
17985
|
-
const numOfColumns = numOfRows ? this.getCellsForRow(0).length - 1 : 0;
|
|
17986
|
-
const dir = this.host.dir;
|
|
17987
|
-
const inlineStart = dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;
|
|
17988
|
-
const inlineEnd = dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;
|
|
17989
|
-
const itemsPerPage = Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.rows[0].clientHeight) - 1 || 0;
|
|
17990
|
-
const isActionCell = this.isActionCell(currentCellCoords);
|
|
17991
|
-
const nextCellCoords = {
|
|
17992
|
-
x: currentCellCoords.x,
|
|
17993
|
-
y: currentCellCoords.y,
|
|
17994
|
-
};
|
|
17995
|
-
return { numOfRows, numOfColumns, inlineStart, inlineEnd, itemsPerPage, isActionCell, nextCellCoords };
|
|
17996
|
-
}
|
|
17997
|
-
getCurrentCellCoordinates() {
|
|
17998
|
-
const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
17999
|
-
const currentRow = currentCell ? currentCell.closest(this.config.keyGridRows) : null;
|
|
18000
|
-
const coordinates = {
|
|
18001
|
-
x: currentRow && currentCell
|
|
18002
|
-
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
18003
|
-
: 0,
|
|
18004
|
-
y: currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0,
|
|
18005
|
-
};
|
|
18006
|
-
return coordinates;
|
|
18007
|
-
}
|
|
18008
|
-
getCellsForRow(index) {
|
|
18009
|
-
return this.rows[index].querySelectorAll(this.config.keyGridCells);
|
|
18010
|
-
}
|
|
18011
|
-
isExpandedRow(index) {
|
|
18012
|
-
const selectedElement = this.rows[index].querySelector('.datagrid-row-detail');
|
|
18013
|
-
return selectedElement ? selectedElement.style.display !== 'none' : false;
|
|
18014
|
-
}
|
|
18015
|
-
isDetailsRow(index) {
|
|
18016
|
-
return this.rows[index].classList.contains('datagrid-row-detail');
|
|
18017
|
-
}
|
|
18018
|
-
isRowReplaced(index) {
|
|
18019
|
-
return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');
|
|
18020
|
-
}
|
|
18021
|
-
isSingleCellExpandedRow(index) {
|
|
18022
|
-
const row = this.rows[index].classList.contains('datagrid-row-detail')
|
|
18023
|
-
? this.rows[index]
|
|
18024
|
-
: this.rows[index].querySelector('.datagrid-row-detail');
|
|
18025
|
-
return row?.querySelectorAll(this.config.keyGridCells).length === 1;
|
|
18026
|
-
}
|
|
18027
|
-
actionCellCount(index) {
|
|
18028
|
-
return this.actionCellsAsArray(index).length;
|
|
18029
|
-
}
|
|
18030
|
-
actionCellsAsArray(index) {
|
|
18031
|
-
return Array.from(this.rows[index].querySelectorAll('.datagrid-row-sticky .datagrid-cell, .datagrid-row-sticky .datagrid-column'));
|
|
18032
|
-
}
|
|
18033
|
-
isActionCell(cellCoords) {
|
|
18034
|
-
return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];
|
|
18035
|
-
}
|
|
18036
18412
|
}
|
|
18037
18413
|
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18038
18414
|
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
@@ -19730,18 +20106,14 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
19730
20106
|
if (typeof comparator === 'string') {
|
|
19731
20107
|
this._sortBy = new DatagridPropertyComparator(comparator);
|
|
19732
20108
|
}
|
|
20109
|
+
else if (comparator) {
|
|
20110
|
+
this._sortBy = comparator;
|
|
20111
|
+
}
|
|
20112
|
+
else if (this.field) {
|
|
20113
|
+
this._sortBy = new DatagridPropertyComparator(this.field);
|
|
20114
|
+
}
|
|
19733
20115
|
else {
|
|
19734
|
-
|
|
19735
|
-
this._sortBy = comparator;
|
|
19736
|
-
}
|
|
19737
|
-
else {
|
|
19738
|
-
if (this.field) {
|
|
19739
|
-
this._sortBy = new DatagridPropertyComparator(this.field);
|
|
19740
|
-
}
|
|
19741
|
-
else {
|
|
19742
|
-
delete this._sortBy;
|
|
19743
|
-
}
|
|
19744
|
-
}
|
|
20116
|
+
delete this._sortBy;
|
|
19745
20117
|
}
|
|
19746
20118
|
}
|
|
19747
20119
|
get sortOrder() {
|
|
@@ -20124,6 +20496,10 @@ class Items {
|
|
|
20124
20496
|
this._pageSub.unsubscribe();
|
|
20125
20497
|
}
|
|
20126
20498
|
}
|
|
20499
|
+
smartenDown() {
|
|
20500
|
+
this._smart = false;
|
|
20501
|
+
this.destroy();
|
|
20502
|
+
}
|
|
20127
20503
|
smartenUp() {
|
|
20128
20504
|
this._smart = true;
|
|
20129
20505
|
/*
|
|
@@ -21125,6 +21501,16 @@ class ClrDatagridRow {
|
|
|
21125
21501
|
}
|
|
21126
21502
|
if (viewChange === DatagridDisplayMode.CALCULATE) {
|
|
21127
21503
|
this.displayCells = false;
|
|
21504
|
+
// Inserts a fixed cell if any of these conditions are true.
|
|
21505
|
+
const fixedCellConditions = [
|
|
21506
|
+
this.selection.selectionType !== this.SELECTION_TYPE.None,
|
|
21507
|
+
this.rowActionService.hasActionableRow,
|
|
21508
|
+
this.globalExpandable.hasExpandableRow,
|
|
21509
|
+
this.detailService.enabled,
|
|
21510
|
+
];
|
|
21511
|
+
fixedCellConditions
|
|
21512
|
+
.filter(Boolean)
|
|
21513
|
+
.forEach(() => this._calculatedCells.insert(this._fixedCellTemplate.createEmbeddedView(null)));
|
|
21128
21514
|
this.dgCells.forEach(cell => {
|
|
21129
21515
|
if (!cell._view.destroyed) {
|
|
21130
21516
|
this._calculatedCells.insert(cell._view);
|
|
@@ -21166,7 +21552,7 @@ class ClrDatagridRow {
|
|
|
21166
21552
|
* selection browser functionality, which is inconsistently implemented in browsers anyway.
|
|
21167
21553
|
*/
|
|
21168
21554
|
clearRanges(event) {
|
|
21169
|
-
if (event.shiftKey) {
|
|
21555
|
+
if (this.selection.rowSelectionMode && event.shiftKey) {
|
|
21170
21556
|
this.document.getSelection().removeAllRanges();
|
|
21171
21557
|
// Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();
|
|
21172
21558
|
// We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by
|
|
@@ -21183,7 +21569,7 @@ class ClrDatagridRow {
|
|
|
21183
21569
|
selectRow(selected = !this.selected, $event) {
|
|
21184
21570
|
// The label also captures clicks that bubble up to the row event listener, causing
|
|
21185
21571
|
// this handler to run twice. This exits early to prevent toggling the checkbox twice.
|
|
21186
|
-
if ($event.target.tagName === 'LABEL') {
|
|
21572
|
+
if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL') {
|
|
21187
21573
|
return;
|
|
21188
21574
|
}
|
|
21189
21575
|
if (this.selection.selectionType === this.SELECTION_TYPE.Single) {
|
|
@@ -21222,7 +21608,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
21222
21608
|
DatagridIfExpandService,
|
|
21223
21609
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21224
21610
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21225
|
-
], 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 <div class=\"clr-checkbox-wrapper\">\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\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 </div>\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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 <clr-dg-cell class=\"skeleton-loading\" *ngIf=\"skeletonLoading\"></clr-dg-cell>\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: ["id", "for"] }, { 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: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }] });
|
|
21611
|
+
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimationDirective, 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 }, { propertyName: "_fixedCellTemplate", first: true, predicate: ["fixedCellTemplate"], descendants: true }], ngImport: i0, template: "<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\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 <div class=\"clr-checkbox-wrapper\">\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\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 </div>\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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 <clr-dg-cell class=\"skeleton-loading\" *ngIf=\"skeletonLoading\"></clr-dg-cell>\n</div>\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-container #calculatedCells></ng-container>\n\n<ng-template #fixedCellTemplate>\n <div class=\"datagrid-fixed-column datagrid-cell\" role=\"gridcell\"></div>\n</ng-template>\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: ["id", "for"] }, { 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: "directive", type: ClrExpandableAnimationDirective, selector: "[clrExpandableAnimation]", inputs: ["clrExpandableAnimation"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }] });
|
|
21226
21612
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
21227
21613
|
type: Component,
|
|
21228
21614
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -21235,7 +21621,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21235
21621
|
DatagridIfExpandService,
|
|
21236
21622
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21237
21623
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21238
|
-
], template: "
|
|
21624
|
+
], template: "<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\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 <div class=\"clr-checkbox-wrapper\">\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\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 </div>\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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 <clr-dg-cell class=\"skeleton-loading\" *ngIf=\"skeletonLoading\"></clr-dg-cell>\n</div>\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-container #calculatedCells></ng-container>\n\n<ng-template #fixedCellTemplate>\n <div class=\"datagrid-fixed-column datagrid-cell\" role=\"gridcell\"></div>\n</ng-template>\n" }]
|
|
21239
21625
|
}], 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: [{
|
|
21240
21626
|
type: Inject,
|
|
21241
21627
|
args: [DOCUMENT]
|
|
@@ -21259,7 +21645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21259
21645
|
args: [ClrDatagridCell]
|
|
21260
21646
|
}], expandAnimation: [{
|
|
21261
21647
|
type: ViewChild,
|
|
21262
|
-
args: [
|
|
21648
|
+
args: [ClrExpandableAnimationDirective]
|
|
21263
21649
|
}], detailButton: [{
|
|
21264
21650
|
type: ViewChild,
|
|
21265
21651
|
args: ['detailButton']
|
|
@@ -21272,6 +21658,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21272
21658
|
}], _calculatedCells: [{
|
|
21273
21659
|
type: ViewChild,
|
|
21274
21660
|
args: ['calculatedCells', { read: ViewContainerRef }]
|
|
21661
|
+
}], _fixedCellTemplate: [{
|
|
21662
|
+
type: ViewChild,
|
|
21663
|
+
args: ['fixedCellTemplate']
|
|
21275
21664
|
}], item: [{
|
|
21276
21665
|
type: Input,
|
|
21277
21666
|
args: ['clrDgItem']
|
|
@@ -21472,6 +21861,12 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21472
21861
|
this.updateFixedSizeVirtualScrollInputs();
|
|
21473
21862
|
}
|
|
21474
21863
|
set dataRange(range) {
|
|
21864
|
+
if (!range) {
|
|
21865
|
+
return;
|
|
21866
|
+
}
|
|
21867
|
+
if (this.items.smart) {
|
|
21868
|
+
this.items.smartenDown();
|
|
21869
|
+
}
|
|
21475
21870
|
this.totalItems = range.total;
|
|
21476
21871
|
this.updateDataRange(range.skip, range.data);
|
|
21477
21872
|
}
|
|
@@ -21479,11 +21874,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21479
21874
|
return this._totalItems;
|
|
21480
21875
|
}
|
|
21481
21876
|
set totalItems(value) {
|
|
21482
|
-
if (this._totalItems === value) {
|
|
21483
|
-
return;
|
|
21484
|
-
}
|
|
21485
21877
|
this._totalItems = value;
|
|
21486
|
-
this.populatePlaceholderData();
|
|
21487
21878
|
}
|
|
21488
21879
|
ngAfterViewInit() {
|
|
21489
21880
|
this.injector.runInContext(() => {
|
|
@@ -21494,7 +21885,9 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21494
21885
|
this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector('[role="grid"]');
|
|
21495
21886
|
this.updateCdkVirtualForInputs();
|
|
21496
21887
|
this.subscriptions.push(this.items.change.subscribe(newItems => {
|
|
21497
|
-
this.
|
|
21888
|
+
if (this.items.smart) {
|
|
21889
|
+
this.cdkVirtualFor.cdkVirtualForOf = newItems;
|
|
21890
|
+
}
|
|
21498
21891
|
}), this.cdkVirtualFor.dataStream.subscribe(data => {
|
|
21499
21892
|
this.updateAriaRowCount(data.length);
|
|
21500
21893
|
}), this.virtualScrollViewport.scrolledIndexChange.subscribe(index => {
|
|
@@ -21530,16 +21923,13 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21530
21923
|
scrollToIndex(index, behavior = 'auto') {
|
|
21531
21924
|
this.virtualScrollViewport?.scrollToIndex(index, behavior);
|
|
21532
21925
|
}
|
|
21533
|
-
populatePlaceholderData() {
|
|
21534
|
-
this.cdkVirtualForOf = Array(this.totalItems);
|
|
21535
|
-
}
|
|
21536
21926
|
updateDataRange(skip, data) {
|
|
21537
|
-
|
|
21538
|
-
|
|
21927
|
+
let items = this.cdkVirtualForOf;
|
|
21928
|
+
if (!this.persistItems || !items || items?.length !== this.totalItems) {
|
|
21929
|
+
items = Array(this.totalItems);
|
|
21539
21930
|
}
|
|
21540
|
-
const items = this.items.all;
|
|
21541
21931
|
items.splice(skip, data.length, ...data);
|
|
21542
|
-
this.
|
|
21932
|
+
this.cdkVirtualForOf = Array.from(items);
|
|
21543
21933
|
}
|
|
21544
21934
|
updateCdkVirtualForInputs() {
|
|
21545
21935
|
if (this.cdkVirtualFor) {
|
|
@@ -21598,7 +21988,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21598
21988
|
return virtualScrollViewport;
|
|
21599
21989
|
}
|
|
21600
21990
|
}
|
|
21601
|
-
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
|
|
21991
|
+
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 }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1$3.Directionality }, { token: i3$1.ScrollDispatcher }, { token: i3$1.ViewportRuler }, { token: forwardRef(() => ClrDatagrid) }, { token: ColumnsService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
21602
21992
|
ClrDatagridVirtualScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridVirtualScrollDirective, selector: "[clrVirtualScroll],[ClrVirtualScroll]", inputs: { persistItems: ["clrVirtualPersistItems", "persistItems"], cdkVirtualForOf: ["clrVirtualRowsOf", "cdkVirtualForOf"], cdkVirtualForTrackBy: ["clrVirtualRowsTrackBy", "cdkVirtualForTrackBy"], cdkVirtualForTemplate: ["clrVirtualRowsTemplate", "cdkVirtualForTemplate"], cdkVirtualForTemplateCacheSize: ["clrVirtualRowsTemplateCacheSize", "cdkVirtualForTemplateCacheSize"], itemSize: ["clrVirtualRowsItemSize", "itemSize"], minBufferPx: ["clrVirtualRowsMinBufferPx", "minBufferPx"], maxBufferPx: ["clrVirtualRowsMaxBufferPx", "maxBufferPx"], dataRange: ["clrVirtualDataRange", "dataRange"] }, outputs: { renderedRangeChange: "renderedRangeChange" }, providers: [Items], ngImport: i0 });
|
|
21603
21993
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, decorators: [{
|
|
21604
21994
|
type: Directive,
|
|
@@ -21606,9 +21996,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21606
21996
|
selector: '[clrVirtualScroll],[ClrVirtualScroll]',
|
|
21607
21997
|
providers: [Items],
|
|
21608
21998
|
}]
|
|
21609
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: Items, decorators: [{
|
|
21610
|
-
type:
|
|
21611
|
-
|
|
21999
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: Items }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1$3.Directionality }, { type: i3$1.ScrollDispatcher }, { type: i3$1.ViewportRuler }, { type: ClrDatagrid, decorators: [{
|
|
22000
|
+
type: Inject,
|
|
22001
|
+
args: [forwardRef(() => ClrDatagrid)]
|
|
22002
|
+
}] }, { type: ColumnsService }, { type: i0.EnvironmentInjector }]; }, propDecorators: { renderedRangeChange: [{
|
|
21612
22003
|
type: Output
|
|
21613
22004
|
}], persistItems: [{
|
|
21614
22005
|
type: Input,
|
|
@@ -21846,6 +22237,11 @@ class ClrDatagrid {
|
|
|
21846
22237
|
* Output emitted whenever the data needs to be refreshed, based on user action or external ones
|
|
21847
22238
|
*/
|
|
21848
22239
|
this.refresh = new EventEmitter(false);
|
|
22240
|
+
/**
|
|
22241
|
+
* The application can provide custom select all logic.
|
|
22242
|
+
*/
|
|
22243
|
+
this.customSelectAllEnabled = false;
|
|
22244
|
+
this.customSelectAll = new EventEmitter();
|
|
21849
22245
|
/* reference to the enum so that template can access */
|
|
21850
22246
|
this.SELECTION_TYPE = SelectionType;
|
|
21851
22247
|
/**
|
|
@@ -21912,13 +22308,18 @@ class ClrDatagrid {
|
|
|
21912
22308
|
get allSelected() {
|
|
21913
22309
|
return this.selection.isAllSelected();
|
|
21914
22310
|
}
|
|
21915
|
-
set allSelected(
|
|
21916
|
-
|
|
21917
|
-
|
|
21918
|
-
|
|
21919
|
-
|
|
21920
|
-
|
|
21921
|
-
|
|
22311
|
+
set allSelected(value) {
|
|
22312
|
+
if (this.customSelectAllEnabled) {
|
|
22313
|
+
this.customSelectAll.emit(value);
|
|
22314
|
+
}
|
|
22315
|
+
else {
|
|
22316
|
+
/**
|
|
22317
|
+
* This is a setter but we ignore the value.
|
|
22318
|
+
* It's strange, but it lets us have an indeterminate state where only
|
|
22319
|
+
* some of the items are selected.
|
|
22320
|
+
*/
|
|
22321
|
+
this.selection.toggleAll();
|
|
22322
|
+
}
|
|
21922
22323
|
}
|
|
21923
22324
|
ngAfterContentInit() {
|
|
21924
22325
|
if (!this.items.smart) {
|
|
@@ -21964,7 +22365,7 @@ class ClrDatagrid {
|
|
|
21964
22365
|
this.updateDetailState();
|
|
21965
22366
|
// TODO: determine if we can get rid of provider wiring in view init so that subscriptions can be done earlier
|
|
21966
22367
|
this.refresh.emit(this.stateProvider.state);
|
|
21967
|
-
this._subscriptions.push(this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
|
|
22368
|
+
this._subscriptions.push(this.stickyHeaders.changes.subscribe(() => this.resize()), this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
|
|
21968
22369
|
if (this.selection.selectionType === SelectionType.Single) {
|
|
21969
22370
|
this.singleSelectedChanged.emit(s);
|
|
21970
22371
|
}
|
|
@@ -22010,6 +22411,15 @@ class ClrDatagrid {
|
|
|
22010
22411
|
else {
|
|
22011
22412
|
// Set state, style for the datagrid to CALCULATE and insert row & columns into containers
|
|
22012
22413
|
this.renderer.addClass(this.el.nativeElement, 'datagrid-calculate-mode');
|
|
22414
|
+
// Inserts a fixed column if any of these conditions are true.
|
|
22415
|
+
const fixedColumnConditions = [
|
|
22416
|
+
this.rowActionService.hasActionableRow,
|
|
22417
|
+
this.selection.selectionType !== this.SELECTION_TYPE.None,
|
|
22418
|
+
this.expandableRows.hasExpandableRow || this.detailService.enabled,
|
|
22419
|
+
];
|
|
22420
|
+
fixedColumnConditions
|
|
22421
|
+
.filter(Boolean)
|
|
22422
|
+
.forEach(() => this._projectedCalculationColumns.insert(this._fixedColumnTemplate.createEmbeddedView(null)));
|
|
22013
22423
|
this.columns.forEach(column => {
|
|
22014
22424
|
this._projectedCalculationColumns.insert(column._view);
|
|
22015
22425
|
});
|
|
@@ -22037,10 +22447,7 @@ class ClrDatagrid {
|
|
|
22037
22447
|
}
|
|
22038
22448
|
toggleAllSelected($event) {
|
|
22039
22449
|
$event.preventDefault();
|
|
22040
|
-
|
|
22041
|
-
return;
|
|
22042
|
-
}
|
|
22043
|
-
this.allSelected = !this.allSelected;
|
|
22450
|
+
this.selectAllCheckbox?.nativeElement.click();
|
|
22044
22451
|
}
|
|
22045
22452
|
resize() {
|
|
22046
22453
|
this.organizer.resize();
|
|
@@ -22076,7 +22483,7 @@ class ClrDatagrid {
|
|
|
22076
22483
|
}
|
|
22077
22484
|
}
|
|
22078
22485
|
ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
22079
|
-
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
|
|
22486
|
+
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", customSelectAllEnabled: ["clrDgCustomSelectAllEnabled", "customSelectAllEnabled"], loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh", customSelectAll: "clrDgCustomSelectAll" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
|
|
22080
22487
|
Selection,
|
|
22081
22488
|
Sort,
|
|
22082
22489
|
FiltersProvider,
|
|
@@ -22092,7 +22499,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
22092
22499
|
ColumnsService,
|
|
22093
22500
|
DisplayModeService,
|
|
22094
22501
|
KeyNavigationGridController,
|
|
22095
|
-
], queries: [{ propertyName: "virtualScroll", first: true, predicate: ClrDatagridVirtualScrollDirective, descendants: true }, { 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-2025 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=\"!virtualScroll\" 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: ["id", "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", "clrDgSkeletonLoading", "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" }] });
|
|
22502
|
+
], queries: [{ propertyName: "virtualScroll", first: true, predicate: ClrDatagridVirtualScrollDirective, descendants: true }, { 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 }, { propertyName: "_fixedColumnTemplate", first: true, predicate: ["fixedColumnTemplate"], descendants: true }, { propertyName: "selectAllCheckbox", first: true, predicate: ["selectAllCheckbox"], descendants: true }, { propertyName: "stickyHeaders", predicate: ["stickyHeader"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 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 #stickyHeader\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=\"!virtualScroll || customSelectAllEnabled\" 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 #selectAllCheckbox\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 #stickyHeader\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 #stickyHeader\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 #stickyHeader\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\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["id", "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", "clrDgSkeletonLoading", "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" }] });
|
|
22096
22503
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
22097
22504
|
type: Component,
|
|
22098
22505
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -22114,7 +22521,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22114
22521
|
], host: {
|
|
22115
22522
|
'[class.datagrid-host]': 'true',
|
|
22116
22523
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
22117
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2025 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=\"!virtualScroll\" 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" }]
|
|
22524
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2025 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 #stickyHeader\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=\"!virtualScroll || customSelectAllEnabled\" 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 #selectAllCheckbox\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 #stickyHeader\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 #stickyHeader\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 #stickyHeader\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\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n" }]
|
|
22118
22525
|
}], 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: [{
|
|
22119
22526
|
type: Inject,
|
|
22120
22527
|
args: [DOCUMENT]
|
|
@@ -22138,6 +22545,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22138
22545
|
}], refresh: [{
|
|
22139
22546
|
type: Output,
|
|
22140
22547
|
args: ['clrDgRefresh']
|
|
22548
|
+
}], customSelectAllEnabled: [{
|
|
22549
|
+
type: Input,
|
|
22550
|
+
args: ['clrDgCustomSelectAllEnabled']
|
|
22551
|
+
}], customSelectAll: [{
|
|
22552
|
+
type: Output,
|
|
22553
|
+
args: ['clrDgCustomSelectAll']
|
|
22141
22554
|
}], virtualScroll: [{
|
|
22142
22555
|
type: ContentChild,
|
|
22143
22556
|
args: [ClrDatagridVirtualScrollDirective]
|
|
@@ -22174,6 +22587,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22174
22587
|
}], _calculationRows: [{
|
|
22175
22588
|
type: ViewChild,
|
|
22176
22589
|
args: ['calculationRows', { read: ViewContainerRef }]
|
|
22590
|
+
}], _fixedColumnTemplate: [{
|
|
22591
|
+
type: ViewChild,
|
|
22592
|
+
args: ['fixedColumnTemplate']
|
|
22593
|
+
}], stickyHeaders: [{
|
|
22594
|
+
type: ViewChildren,
|
|
22595
|
+
args: ['stickyHeader', { emitDistinctChangesOnly: true }]
|
|
22596
|
+
}], selectAllCheckbox: [{
|
|
22597
|
+
type: ViewChild,
|
|
22598
|
+
args: ['selectAllCheckbox']
|
|
22177
22599
|
}], loading: [{
|
|
22178
22600
|
type: Input,
|
|
22179
22601
|
args: ['clrDgLoading']
|
|
@@ -26468,7 +26890,7 @@ class ClrModal {
|
|
|
26468
26890
|
}
|
|
26469
26891
|
}
|
|
26470
26892
|
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 });
|
|
26471
|
-
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 }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 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
|
|
26893
|
+
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" } }, queries: [{ propertyName: "modalContentTemplate", first: true, predicate: ["clrInternalModalContentTemplate"], descendants: true }], viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 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 <!-- This wizard is tightly coupled to the modal styles, so changes here could require changes in the wizard. -->\n <div *ngIf=\"!modalContentTemplate; else modalContentTemplate\" class=\"modal-content-wrapper\">\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <ng-content select=\".leading-button\"></ng-content>\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 #body 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</div>\n\n<div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></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: [
|
|
26472
26894
|
trigger('fadeMove', [
|
|
26473
26895
|
transition('* => fadeDown', [
|
|
26474
26896
|
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
@@ -26503,7 +26925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26503
26925
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
26504
26926
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
26505
26927
|
]),
|
|
26506
|
-
], template: "<!--\n ~ Copyright (c) 2016-2025 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
|
|
26928
|
+
], template: "<!--\n ~ Copyright (c) 2016-2025 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 <!-- This wizard is tightly coupled to the modal styles, so changes here could require changes in the wizard. -->\n <div *ngIf=\"!modalContentTemplate; else modalContentTemplate\" class=\"modal-content-wrapper\">\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <ng-content select=\".leading-button\"></ng-content>\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 #body 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</div>\n\n<div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
|
|
26507
26929
|
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
|
|
26508
26930
|
type: ViewChild,
|
|
26509
26931
|
args: ['title']
|
|
@@ -26543,6 +26965,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26543
26965
|
}], bypassScrollService: [{
|
|
26544
26966
|
type: Input,
|
|
26545
26967
|
args: ['clrModalOverrideScrollService']
|
|
26968
|
+
}], modalContentTemplate: [{
|
|
26969
|
+
type: ContentChild,
|
|
26970
|
+
args: ['clrInternalModalContentTemplate']
|
|
26546
26971
|
}], bodyElementRef: [{
|
|
26547
26972
|
type: ViewChild,
|
|
26548
26973
|
args: ['body']
|
|
@@ -29410,6 +29835,15 @@ class ClrWizard {
|
|
|
29410
29835
|
* Set the modal size of the wizard. Set using `[clrWizardSize]` input.
|
|
29411
29836
|
*/
|
|
29412
29837
|
this.size = 'xl';
|
|
29838
|
+
/**
|
|
29839
|
+
* Enable "in page" wizard. Set using `[clrWizardInPage]` input.
|
|
29840
|
+
*/
|
|
29841
|
+
this.inPage = false;
|
|
29842
|
+
/**
|
|
29843
|
+
* Make an "in page" wizard fill the `.content-area`. Set using `[clrWizardInPageFillContentArea]` input.
|
|
29844
|
+
* If you can't use this option, you will likely need to provide custom CSS to set the wizard's height and margins.
|
|
29845
|
+
*/
|
|
29846
|
+
this.inPageFillContentArea = false;
|
|
29413
29847
|
/**
|
|
29414
29848
|
* Tells the modal part of the wizard whether it should have a close "X"
|
|
29415
29849
|
* in the top right corner. Set using `[clrWizardClosable]` input.
|
|
@@ -29568,6 +30002,9 @@ class ClrWizard {
|
|
|
29568
30002
|
ngAfterContentInit() {
|
|
29569
30003
|
this.pageCollection.pages = this.pages;
|
|
29570
30004
|
this.headerActionService.wizardHeaderActions = this.headerActions;
|
|
30005
|
+
if (this.inPage) {
|
|
30006
|
+
this.open();
|
|
30007
|
+
}
|
|
29571
30008
|
this.initializeButtons();
|
|
29572
30009
|
}
|
|
29573
30010
|
ngDoCheck() {
|
|
@@ -29762,7 +30199,7 @@ class ClrWizard {
|
|
|
29762
30199
|
this.pageTitle?.nativeElement.focus();
|
|
29763
30200
|
this.currentPageChanged.emit();
|
|
29764
30201
|
// scroll to top of page in case there is long page content
|
|
29765
|
-
this.
|
|
30202
|
+
this.bodyElementRef?.nativeElement.scrollTo(0, 0);
|
|
29766
30203
|
});
|
|
29767
30204
|
}
|
|
29768
30205
|
updateNavOnPageChanges() {
|
|
@@ -29786,7 +30223,7 @@ class ClrWizard {
|
|
|
29786
30223
|
}
|
|
29787
30224
|
}
|
|
29788
30225
|
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 });
|
|
29789
|
-
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.
|
|
30226
|
+
ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], inPage: ["clrWizardInPage", "inPage"], inPageFillContentArea: ["clrWizardInPageFillContentArea", "inPageFillContentArea"], 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.wizard-in-page": "inPage", "class.wizard-in-page--fill-content-area": "inPage && inPageFillContentArea" } }, 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 }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }, { propertyName: "modal", first: true, predicate: ClrModal, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 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-container *ngIf=\"inPage; then wizardTemplate; else wizardModalTemplate\"></ng-container>\n\n<ng-template #wizardModalTemplate>\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 <ng-template #clrInternalModalContentTemplate>\n <ng-container [ngTemplateOutlet]=\"wizardTemplate\"></ng-container>\n </ng-template>\n </clr-modal>\n</ng-template>\n\n<!-- This template is tightly coupled to the modal styles. -->\n<ng-template #wizardTemplate>\n <div class=\"modal-content-wrapper\">\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\">\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 [label]=\"stepnavAriaLabel\"></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title cdkFocusInitial tabindex=\"-1\">\n <div\n class=\"modal-title\"\n role=\"heading\"\n [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\"\n >\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 </div>\n <button\n *ngIf=\"closable && !inPage\"\n type=\"button\"\n class=\"close\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n (click)=\"modalCancel()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div #body class=\"modal-body-wrapper\">\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>\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 </div>\n </div>\n</ng-template>\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: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav", inputs: ["label"] }] });
|
|
29790
30227
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
29791
30228
|
type: Component,
|
|
29792
30229
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -29794,8 +30231,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29794
30231
|
'[class.wizard-md]': "size == 'md'",
|
|
29795
30232
|
'[class.wizard-lg]': "size == 'lg'",
|
|
29796
30233
|
'[class.wizard-xl]': "size == 'xl'",
|
|
29797
|
-
'[class.
|
|
29798
|
-
|
|
30234
|
+
'[class.wizard-in-page]': 'inPage',
|
|
30235
|
+
'[class.wizard-in-page--fill-content-area]': 'inPage && inPageFillContentArea',
|
|
30236
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2025 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-container *ngIf=\"inPage; then wizardTemplate; else wizardModalTemplate\"></ng-container>\n\n<ng-template #wizardModalTemplate>\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 <ng-template #clrInternalModalContentTemplate>\n <ng-container [ngTemplateOutlet]=\"wizardTemplate\"></ng-container>\n </ng-template>\n </clr-modal>\n</ng-template>\n\n<!-- This template is tightly coupled to the modal styles. -->\n<ng-template #wizardTemplate>\n <div class=\"modal-content-wrapper\">\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\">\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 [label]=\"stepnavAriaLabel\"></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title cdkFocusInitial tabindex=\"-1\">\n <div\n class=\"modal-title\"\n role=\"heading\"\n [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\"\n >\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 </div>\n <button\n *ngIf=\"closable && !inPage\"\n type=\"button\"\n class=\"close\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n (click)=\"modalCancel()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div #body class=\"modal-body-wrapper\">\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>\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 </div>\n </div>\n</ng-template>\n" }]
|
|
29799
30237
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
29800
30238
|
type: Inject,
|
|
29801
30239
|
args: [PLATFORM_ID]
|
|
@@ -29805,6 +30243,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29805
30243
|
}], size: [{
|
|
29806
30244
|
type: Input,
|
|
29807
30245
|
args: ['clrWizardSize']
|
|
30246
|
+
}], inPage: [{
|
|
30247
|
+
type: Input,
|
|
30248
|
+
args: ['clrWizardInPage']
|
|
30249
|
+
}], inPageFillContentArea: [{
|
|
30250
|
+
type: Input,
|
|
30251
|
+
args: ['clrWizardInPageFillContentArea']
|
|
29808
30252
|
}], closable: [{
|
|
29809
30253
|
type: Input,
|
|
29810
30254
|
args: ['clrWizardClosable']
|
|
@@ -29844,6 +30288,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29844
30288
|
}], wizardTitle: [{
|
|
29845
30289
|
type: ContentChild,
|
|
29846
30290
|
args: [ClrWizardTitle]
|
|
30291
|
+
}], bodyElementRef: [{
|
|
30292
|
+
type: ViewChild,
|
|
30293
|
+
args: ['body']
|
|
29847
30294
|
}], modal: [{
|
|
29848
30295
|
type: ViewChild,
|
|
29849
30296
|
args: [ClrModal]
|
|
@@ -30423,9 +30870,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30423
30870
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
30424
30871
|
*/
|
|
30425
30872
|
|
|
30873
|
+
/*
|
|
30874
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
30875
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
30876
|
+
* This software is released under MIT license.
|
|
30877
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
30878
|
+
*/
|
|
30879
|
+
|
|
30426
30880
|
/**
|
|
30427
30881
|
* Generated bundle index. Do not edit.
|
|
30428
30882
|
*/
|
|
30429
30883
|
|
|
30430
|
-
export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrBreadcrumbItem, ClrBreadcrumbs, ClrBreadcrumbsModule, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputBase, ClrDateInputValidator, ClrDatepickerActions, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrEndDateInput, ClrEndDateInputValidator, ClrExpandableAnimation, ClrFileError, ClrFileInfo, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFileList, ClrFileMessagesTemplate, ClrFileSuccess, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalConfigurationService, ClrModalHostDirective, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrNumberInput, ClrNumberInputContainer, ClrNumberInputModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTitle, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStartDateInput, ClrStartDateInputValidator, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabAction, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsActions, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
|
|
30884
|
+
export { BaseExpandableAnimation, CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrBreadcrumbItem, ClrBreadcrumbs, ClrBreadcrumbsModule, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputBase, ClrDateInputValidator, ClrDatepickerActions, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrEndDateInput, ClrEndDateInputValidator, ClrExpandableAnimation, ClrFileError, ClrFileInfo, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFileList, ClrFileMessagesTemplate, ClrFileSuccess, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalConfigurationService, ClrModalHostDirective, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrNumberInput, ClrNumberInputContainer, ClrNumberInputModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTitle, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStartDateInput, ClrStartDateInputValidator, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabAction, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsActions, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
|
|
30431
30885
|
//# sourceMappingURL=clr-angular.mjs.map
|