@clr/angular 17.9.0 → 17.11.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 +183 -87
- package/data/datagrid/datagrid-column.d.ts +6 -1
- package/data/datagrid/datagrid-filter.d.ts +2 -9
- package/data/datagrid/datagrid-row.d.ts +6 -4
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +5 -7
- package/data/datagrid/datagrid.d.ts +15 -4
- 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/datagrid-filter-registrar.d.ts +1 -1
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +8 -24
- package/data/datagrid/utils/key-navigation-strategies/default.d.ts +15 -0
- package/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.d.ts +12 -0
- package/data/datagrid/utils/key-navigation-strategies/expanded-row.d.ts +12 -0
- package/data/datagrid/utils/key-navigation-utils.d.ts +24 -0
- package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
- package/esm2020/button/button-group/button.mjs +20 -4
- package/esm2020/data/datagrid/datagrid-column.mjs +40 -28
- package/esm2020/data/datagrid/datagrid-detail-header.mjs +3 -3
- package/esm2020/data/datagrid/datagrid-filter.mjs +2 -21
- package/esm2020/data/datagrid/datagrid-pagination.mjs +35 -31
- package/esm2020/data/datagrid/datagrid-row.mjs +23 -11
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +52 -51
- package/esm2020/data/datagrid/datagrid.mjs +87 -24
- 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/datagrid-filter-registrar.mjs +1 -1
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +44 -271
- package/esm2020/data/datagrid/utils/key-navigation-strategies/default.mjs +132 -0
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.mjs +129 -0
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-row.mjs +165 -0
- package/esm2020/data/datagrid/utils/key-navigation-utils.mjs +121 -0
- package/esm2020/data/stack-view/stack-block.mjs +3 -3
- package/esm2020/emphasis/alert/alert.mjs +3 -3
- package/esm2020/forms/combobox/combobox.mjs +3 -3
- package/esm2020/forms/combobox/combobox.module.mjs +20 -3
- package/esm2020/forms/combobox/index.mjs +2 -1
- package/esm2020/forms/combobox/option-group.mjs +42 -0
- package/esm2020/forms/combobox/option-items.directive.mjs +5 -1
- package/esm2020/forms/combobox/options.mjs +3 -3
- package/esm2020/forms/common/abstract-control.mjs +1 -1
- package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +1 -1
- package/esm2020/forms/datepicker/datepicker-view-manager.mjs +3 -3
- package/esm2020/forms/file-input/file-input-container.mjs +2 -2
- package/esm2020/forms/file-input/file-input.mjs +11 -4
- package/esm2020/forms/number-input/number-input-container.mjs +6 -3
- package/esm2020/forms/number-input/number-input.mjs +10 -3
- package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2020/modal/index.mjs +2 -2
- package/esm2020/modal/modal-host.component.mjs +29 -0
- package/esm2020/modal/modal.mjs +11 -4
- package/esm2020/modal/modal.module.mjs +4 -4
- package/esm2020/modal/side-panel.mjs +102 -47
- package/esm2020/popover/common/abstract-popover.mjs +8 -2
- package/esm2020/popover/common/popover.mjs +2 -2
- package/esm2020/popover/dropdown/dropdown-item.mjs +10 -4
- package/esm2020/popover/dropdown/dropdown-trigger.mjs +12 -4
- package/esm2020/popover/dropdown/utils/content-wrapping.mjs +22 -0
- package/esm2020/utils/animations/constants.mjs +7 -1
- package/esm2020/utils/animations/expandable-animation/base-expandable-animation.mjs +46 -0
- package/esm2020/utils/animations/expandable-animation/expandable-animation.directive.mjs +56 -0
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +13 -36
- 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/chocolate/oompa-loompa.mjs +1 -1
- package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
- package/esm2020/utils/i18n/common-strings.default.mjs +2 -1
- package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
- package/esm2020/wizard/wizard-stepnav-item.mjs +60 -24
- package/esm2020/wizard/wizard.mjs +29 -6
- package/fesm2015/clr-angular.mjs +1377 -646
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +1371 -641
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/combobox/combobox.module.d.ts +12 -11
- package/forms/combobox/index.d.ts +1 -0
- package/forms/combobox/option-group.d.ts +9 -0
- package/forms/combobox/option-items.directive.d.ts +1 -0
- package/forms/common/abstract-control.d.ts +1 -1
- package/forms/common/if-control-state/abstract-if-state.d.ts +1 -1
- package/forms/file-input/file-input.d.ts +2 -0
- package/forms/number-input/number-input-container.d.ts +1 -0
- package/forms/number-input/number-input.d.ts +2 -0
- package/modal/index.d.ts +1 -1
- package/modal/modal-host.component.d.ts +5 -0
- package/modal/modal.d.ts +3 -2
- package/modal/modal.module.d.ts +2 -2
- package/modal/side-panel.d.ts +18 -10
- package/package.json +2 -2
- package/popover/common/abstract-popover.d.ts +1 -1
- package/popover/dropdown/dropdown-item.d.ts +5 -1
- package/popover/dropdown/dropdown-trigger.d.ts +5 -2
- package/popover/dropdown/utils/content-wrapping.d.ts +2 -0
- package/utils/animations/constants.d.ts +1 -0
- package/utils/animations/expandable-animation/base-expandable-animation.d.ts +16 -0
- package/utils/animations/expandable-animation/expandable-animation.d.ts +2 -9
- 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/utils/chocolate/oompa-loompa.d.ts +1 -1
- package/utils/i18n/common-strings.interface.d.ts +4 -0
- package/wizard/wizard-stepnav-item.d.ts +16 -2
- package/wizard/wizard.d.ts +12 -2
- package/esm2020/modal/modal-host.directive.mjs +0 -20
- package/modal/modal-host.directive.d.ts +0 -5
package/fesm2015/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';
|
|
@@ -235,6 +236,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
235
236
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
236
237
|
*/
|
|
237
238
|
const defaultAnimationTiming = '0.2s ease-in-out';
|
|
239
|
+
const defaultExpandAnimation = animation([style({ height: '{{ startHeight }}px' }), animate(defaultAnimationTiming, style({ height: '*' }))], {
|
|
240
|
+
params: {
|
|
241
|
+
startHeight: 0, // default
|
|
242
|
+
},
|
|
243
|
+
});
|
|
238
244
|
|
|
239
245
|
/*
|
|
240
246
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -372,6 +378,7 @@ const commonStringsDefault = {
|
|
|
372
378
|
datagridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,
|
|
373
379
|
// Wizard
|
|
374
380
|
wizardStep: 'Step',
|
|
381
|
+
wizardStepCurrent: 'Current',
|
|
375
382
|
wizardStepSuccess: 'Completed',
|
|
376
383
|
wizardStepError: 'Error',
|
|
377
384
|
wizardStepnavAriaLabel: 'Wizard steps',
|
|
@@ -1252,10 +1259,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1252
1259
|
}
|
|
1253
1260
|
}
|
|
1254
1261
|
ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: i1.FormGroupName, optional: true }, { token: i1.NgModelGroup, optional: true }, { token: StepperService }, { token: IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1255
|
-
ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-stepper-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n
|
|
1262
|
+
ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-stepper-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <span class=\"clr-step-status-icon\">\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1256
1263
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
|
|
1257
1264
|
type: Component,
|
|
1258
|
-
args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-stepper-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n
|
|
1265
|
+
args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-stepper-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <span class=\"clr-step-status-icon\">\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
|
|
1259
1266
|
}], ctorParameters: function () {
|
|
1260
1267
|
return [{ type: undefined, decorators: [{
|
|
1261
1268
|
type: Inject,
|
|
@@ -2630,10 +2637,18 @@ ClrButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15
|
|
|
2630
2637
|
[attr.id]="id"
|
|
2631
2638
|
>
|
|
2632
2639
|
<span class="spinner spinner-inline" *ngIf="loading"></span>
|
|
2633
|
-
<ng-
|
|
2640
|
+
<ng-container *ngIf="inMenu; then inMenuTemplate; else defaultTemplate"></ng-container>
|
|
2634
2641
|
</button>
|
|
2635
2642
|
</ng-template>
|
|
2636
|
-
|
|
2643
|
+
<ng-template #defaultTemplate>
|
|
2644
|
+
<ng-content></ng-content>
|
|
2645
|
+
</ng-template>
|
|
2646
|
+
<ng-template #inMenuTemplate>
|
|
2647
|
+
<span class="dropdown-item-content">
|
|
2648
|
+
<ng-container [ngTemplateOutlet]="defaultTemplate"></ng-container>
|
|
2649
|
+
</span>
|
|
2650
|
+
</ng-template>
|
|
2651
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
2637
2652
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrButton, decorators: [{
|
|
2638
2653
|
type: Component,
|
|
2639
2654
|
args: [{
|
|
@@ -2650,9 +2665,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
2650
2665
|
[attr.id]="id"
|
|
2651
2666
|
>
|
|
2652
2667
|
<span class="spinner spinner-inline" *ngIf="loading"></span>
|
|
2653
|
-
<ng-
|
|
2668
|
+
<ng-container *ngIf="inMenu; then inMenuTemplate; else defaultTemplate"></ng-container>
|
|
2654
2669
|
</button>
|
|
2655
2670
|
</ng-template>
|
|
2671
|
+
<ng-template #defaultTemplate>
|
|
2672
|
+
<ng-content></ng-content>
|
|
2673
|
+
</ng-template>
|
|
2674
|
+
<ng-template #inMenuTemplate>
|
|
2675
|
+
<span class="dropdown-item-content">
|
|
2676
|
+
<ng-container [ngTemplateOutlet]="defaultTemplate"></ng-container>
|
|
2677
|
+
</span>
|
|
2678
|
+
</ng-template>
|
|
2656
2679
|
`,
|
|
2657
2680
|
providers: [{ provide: LoadingListener, useExisting: ClrButton }],
|
|
2658
2681
|
}]
|
|
@@ -3117,55 +3140,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
3117
3140
|
* This software is released under MIT license.
|
|
3118
3141
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3119
3142
|
*/
|
|
3120
|
-
class
|
|
3143
|
+
class BaseExpandableAnimation {
|
|
3121
3144
|
constructor(element, domAdapter, renderer) {
|
|
3122
3145
|
this.element = element;
|
|
3123
3146
|
this.domAdapter = domAdapter;
|
|
3124
3147
|
this.renderer = renderer;
|
|
3125
|
-
this.clrExpandTrigger = false;
|
|
3126
3148
|
this.startHeight = 0;
|
|
3127
3149
|
}
|
|
3150
|
+
updateStartHeight() {
|
|
3151
|
+
this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
|
|
3152
|
+
}
|
|
3153
|
+
initAnimationEffects() {
|
|
3154
|
+
this.renderer.setStyle(this.element.nativeElement, 'overflow', 'hidden');
|
|
3155
|
+
}
|
|
3156
|
+
cleanupAnimationEffects(cancelAnimations = false) {
|
|
3157
|
+
this.renderer.removeStyle(this.element.nativeElement, 'overflow');
|
|
3158
|
+
// A "safe" auto-update of the height ensuring basic OOTB user experience .
|
|
3159
|
+
// Prone to small jumps in initial animation height if data was changed in the meantime, the window was resized, etc.
|
|
3160
|
+
// For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
|
|
3161
|
+
this.updateStartHeight();
|
|
3162
|
+
if (cancelAnimations) {
|
|
3163
|
+
this.cancelElementAnimations();
|
|
3164
|
+
}
|
|
3165
|
+
}
|
|
3166
|
+
cancelElementAnimations() {
|
|
3167
|
+
this.element.nativeElement.getAnimations().forEach(animation => {
|
|
3168
|
+
if (animation.playState === 'finished') {
|
|
3169
|
+
animation.cancel(); // clears animation-style set on the element
|
|
3170
|
+
}
|
|
3171
|
+
});
|
|
3172
|
+
}
|
|
3173
|
+
}
|
|
3174
|
+
BaseExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseExpandableAnimation, deps: [{ token: i0.ElementRef }, { token: DomAdapter }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3175
|
+
BaseExpandableAnimation.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: BaseExpandableAnimation, ngImport: i0 });
|
|
3176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseExpandableAnimation, decorators: [{
|
|
3177
|
+
type: Directive
|
|
3178
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }]; } });
|
|
3179
|
+
|
|
3180
|
+
/*
|
|
3181
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
3182
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
3183
|
+
* This software is released under MIT license.
|
|
3184
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3185
|
+
*/
|
|
3186
|
+
class ClrExpandableAnimation extends BaseExpandableAnimation {
|
|
3187
|
+
constructor() {
|
|
3188
|
+
super(...arguments);
|
|
3189
|
+
this.clrExpandTrigger = false;
|
|
3190
|
+
}
|
|
3128
3191
|
get expandAnimation() {
|
|
3129
3192
|
return { value: this.clrExpandTrigger, params: { startHeight: this.startHeight } };
|
|
3130
3193
|
}
|
|
3131
3194
|
animationStart(event) {
|
|
3132
3195
|
if (event.fromState !== 'void') {
|
|
3133
|
-
this.
|
|
3196
|
+
this.initAnimationEffects();
|
|
3134
3197
|
}
|
|
3135
3198
|
}
|
|
3136
3199
|
animationDone(event) {
|
|
3137
3200
|
if (event.fromState !== 'void') {
|
|
3138
|
-
this.
|
|
3139
|
-
// A "safe" auto-update of the height ensuring basic OOTB user experience .
|
|
3140
|
-
// Prone to small jumps in initial animation height if data was changed in the meantime, window was resized, etc.
|
|
3141
|
-
// For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
|
|
3142
|
-
this.updateStartHeight();
|
|
3201
|
+
this.cleanupAnimationEffects();
|
|
3143
3202
|
}
|
|
3144
3203
|
}
|
|
3145
|
-
updateStartHeight() {
|
|
3146
|
-
this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
|
|
3147
|
-
}
|
|
3148
3204
|
}
|
|
3149
|
-
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps:
|
|
3150
|
-
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: [
|
|
3151
|
-
trigger('expandAnimation', [
|
|
3152
|
-
transition('true <=> false', [
|
|
3153
|
-
style({ height: '{{startHeight}}px' }),
|
|
3154
|
-
animate('0.2s ease-in-out', style({ height: '*' })),
|
|
3155
|
-
]),
|
|
3156
|
-
]),
|
|
3157
|
-
] });
|
|
3205
|
+
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
3206
|
+
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)])])] });
|
|
3158
3207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, decorators: [{
|
|
3159
3208
|
type: Component,
|
|
3160
|
-
args: [{ selector: 'clr-expandable-animation', template: `<ng-content></ng-content>`, animations: [
|
|
3161
|
-
|
|
3162
|
-
transition('true <=> false', [
|
|
3163
|
-
style({ height: '{{startHeight}}px' }),
|
|
3164
|
-
animate('0.2s ease-in-out', style({ height: '*' })),
|
|
3165
|
-
]),
|
|
3166
|
-
]),
|
|
3167
|
-
], providers: [DomAdapter], styles: [":host{display:block}\n"] }]
|
|
3168
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }]; }, propDecorators: { clrExpandTrigger: [{
|
|
3209
|
+
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"] }]
|
|
3210
|
+
}], propDecorators: { clrExpandTrigger: [{
|
|
3169
3211
|
type: Input
|
|
3170
3212
|
}], expandAnimation: [{
|
|
3171
3213
|
type: HostBinding,
|
|
@@ -3184,7 +3226,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
3184
3226
|
* This software is released under MIT license.
|
|
3185
3227
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3186
3228
|
*/
|
|
3187
|
-
|
|
3229
|
+
class ClrExpandableAnimationDirective extends BaseExpandableAnimation {
|
|
3230
|
+
constructor(element, domAdapter, renderer, builder) {
|
|
3231
|
+
super(element, domAdapter, renderer);
|
|
3232
|
+
this.builder = builder;
|
|
3233
|
+
this.expanded = false;
|
|
3234
|
+
}
|
|
3235
|
+
ngOnChanges(changes) {
|
|
3236
|
+
if (changes['expanded'] && !changes['expanded'].firstChange) {
|
|
3237
|
+
Promise.resolve().then(() => this.playAnimation());
|
|
3238
|
+
}
|
|
3239
|
+
}
|
|
3240
|
+
ngOnDestroy() {
|
|
3241
|
+
var _a;
|
|
3242
|
+
(_a = this.player) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
3243
|
+
}
|
|
3244
|
+
playAnimation() {
|
|
3245
|
+
if (this.player) {
|
|
3246
|
+
this.player.destroy();
|
|
3247
|
+
}
|
|
3248
|
+
this.player = this.builder
|
|
3249
|
+
.build([useAnimation(defaultExpandAnimation, { params: { startHeight: this.startHeight } })])
|
|
3250
|
+
.create(this.element.nativeElement);
|
|
3251
|
+
this.player.onStart(() => this.initAnimationEffects());
|
|
3252
|
+
this.player.onDone(() => this.cleanupAnimationEffects(true));
|
|
3253
|
+
this.player.play();
|
|
3254
|
+
}
|
|
3255
|
+
}
|
|
3256
|
+
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 });
|
|
3257
|
+
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 });
|
|
3258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationDirective, decorators: [{
|
|
3259
|
+
type: Directive,
|
|
3260
|
+
args: [{
|
|
3261
|
+
selector: '[clrExpandableAnimation]',
|
|
3262
|
+
providers: [DomAdapter],
|
|
3263
|
+
host: {
|
|
3264
|
+
'[class.clr-expandable-animation]': 'true',
|
|
3265
|
+
},
|
|
3266
|
+
}]
|
|
3267
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }, { type: i2.AnimationBuilder }]; }, propDecorators: { expanded: [{
|
|
3268
|
+
type: Input,
|
|
3269
|
+
args: ['clrExpandableAnimation']
|
|
3270
|
+
}] } });
|
|
3271
|
+
|
|
3272
|
+
/*
|
|
3273
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
3274
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
3275
|
+
* This software is released under MIT license.
|
|
3276
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3277
|
+
*/
|
|
3278
|
+
const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation, ClrExpandableAnimationDirective];
|
|
3188
3279
|
|
|
3189
3280
|
/*
|
|
3190
3281
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -5185,7 +5276,7 @@ class Popover {
|
|
|
5185
5276
|
this._scroll = new Subject();
|
|
5186
5277
|
const anchor = e;
|
|
5187
5278
|
let current = e;
|
|
5188
|
-
while (current && current !== document) {
|
|
5279
|
+
while (current && current !== document && current.nodeType === Node.ELEMENT_NODE) {
|
|
5189
5280
|
if (this.scrolls(current)) {
|
|
5190
5281
|
current.addEventListener('scroll', this.boundOnScrollListener);
|
|
5191
5282
|
this.scrollableElements.push(current);
|
|
@@ -5238,7 +5329,13 @@ class AbstractPopover {
|
|
|
5238
5329
|
this.documentESCListener = null;
|
|
5239
5330
|
this.closeOnOutsideClickCallback = event => {
|
|
5240
5331
|
// The anchor element containing the click event origin means, the click wasn't triggered outside.
|
|
5241
|
-
if (
|
|
5332
|
+
if (event.target.shadowRoot) {
|
|
5333
|
+
const containsNode = event.composedPath().some((element) => element === this.anchorElem);
|
|
5334
|
+
if (containsNode) {
|
|
5335
|
+
return;
|
|
5336
|
+
}
|
|
5337
|
+
}
|
|
5338
|
+
else if (this.anchorElem.contains(event.target)) {
|
|
5242
5339
|
return;
|
|
5243
5340
|
}
|
|
5244
5341
|
this.toggleService.open = false;
|
|
@@ -5452,6 +5549,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5452
5549
|
args: ['clrPosition']
|
|
5453
5550
|
}] } });
|
|
5454
5551
|
|
|
5552
|
+
/*
|
|
5553
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
5554
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
5555
|
+
* This software is released under MIT license.
|
|
5556
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5557
|
+
*/
|
|
5558
|
+
function wrapHostContentInsideSpan(hostElement, renderer, wrapperClass) {
|
|
5559
|
+
if (!hostElement || !renderer) {
|
|
5560
|
+
return;
|
|
5561
|
+
}
|
|
5562
|
+
const wrapper = renderer.createElement('span');
|
|
5563
|
+
if (wrapperClass) {
|
|
5564
|
+
renderer.addClass(wrapper, wrapperClass);
|
|
5565
|
+
}
|
|
5566
|
+
// Move all existing children into the wrapper
|
|
5567
|
+
// We must loop while there are child nodes and re-append them to wrapper.
|
|
5568
|
+
while (hostElement.firstChild) {
|
|
5569
|
+
renderer.appendChild(wrapper, hostElement.firstChild);
|
|
5570
|
+
}
|
|
5571
|
+
renderer.appendChild(hostElement, wrapper);
|
|
5572
|
+
}
|
|
5573
|
+
|
|
5455
5574
|
/*
|
|
5456
5575
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
5457
5576
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -5459,8 +5578,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5459
5578
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5460
5579
|
*/
|
|
5461
5580
|
class ClrDropdownTrigger {
|
|
5462
|
-
constructor(dropdown, toggleService, el, focusHandler) {
|
|
5581
|
+
constructor(dropdown, toggleService, el, focusHandler, renderer) {
|
|
5463
5582
|
this.toggleService = toggleService;
|
|
5583
|
+
this.el = el;
|
|
5584
|
+
this.renderer = renderer;
|
|
5464
5585
|
this.isRootLevelToggle = true;
|
|
5465
5586
|
// if the containing dropdown has a parent, then this is not the root level one
|
|
5466
5587
|
if (dropdown.parent) {
|
|
@@ -5474,8 +5595,13 @@ class ClrDropdownTrigger {
|
|
|
5474
5595
|
onDropdownTriggerClick(event) {
|
|
5475
5596
|
this.toggleService.toggleWithEvent(event);
|
|
5476
5597
|
}
|
|
5598
|
+
ngAfterViewInit() {
|
|
5599
|
+
if (!this.isRootLevelToggle) {
|
|
5600
|
+
wrapHostContentInsideSpan(this.el.nativeElement, this.renderer, 'dropdown-item-content');
|
|
5601
|
+
}
|
|
5602
|
+
}
|
|
5477
5603
|
}
|
|
5478
|
-
ClrDropdownTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, deps: [{ token: ClrDropdown }, { token: ClrPopoverToggleService }, { token: i0.ElementRef }, { token: DropdownFocusHandler }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5604
|
+
ClrDropdownTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, deps: [{ token: ClrDropdown }, { token: ClrPopoverToggleService }, { token: i0.ElementRef }, { token: DropdownFocusHandler }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5479
5605
|
ClrDropdownTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]", host: { listeners: { "click": "onDropdownTriggerClick($event)" }, properties: { "class.dropdown-toggle": "isRootLevelToggle", "class.dropdown-item": "!isRootLevelToggle", "class.expandable": "!isRootLevelToggle", "class.active": "active", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "active" } }, ngImport: i0 });
|
|
5480
5606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, decorators: [{
|
|
5481
5607
|
type: Directive,
|
|
@@ -5491,7 +5617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5491
5617
|
'[attr.aria-expanded]': 'active',
|
|
5492
5618
|
},
|
|
5493
5619
|
}]
|
|
5494
|
-
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: ClrPopoverToggleService }, { type: i0.ElementRef }, { type: DropdownFocusHandler }]; }, propDecorators: { onDropdownTriggerClick: [{
|
|
5620
|
+
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: ClrPopoverToggleService }, { type: i0.ElementRef }, { type: DropdownFocusHandler }, { type: i0.Renderer2 }]; }, propDecorators: { onDropdownTriggerClick: [{
|
|
5495
5621
|
type: HostListener,
|
|
5496
5622
|
args: ['click', ['$event']]
|
|
5497
5623
|
}] } });
|
|
@@ -5516,7 +5642,7 @@ class BasicFocusableItem {
|
|
|
5516
5642
|
if (isPlatformBrowser(this.platformId)) {
|
|
5517
5643
|
this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '0');
|
|
5518
5644
|
this.el.nativeElement.focus();
|
|
5519
|
-
this.el.nativeElement.scrollIntoView({ behavior: 'smooth', block: '
|
|
5645
|
+
this.el.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
5520
5646
|
}
|
|
5521
5647
|
}
|
|
5522
5648
|
blur() {
|
|
@@ -5555,10 +5681,12 @@ const BASIC_FOCUSABLE_ITEM_PROVIDER = [
|
|
|
5555
5681
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5556
5682
|
*/
|
|
5557
5683
|
class ClrDropdownItem {
|
|
5558
|
-
constructor(dropdown, _dropdownService, focusableItem) {
|
|
5684
|
+
constructor(dropdown, _dropdownService, focusableItem, el, renderer) {
|
|
5559
5685
|
this.dropdown = dropdown;
|
|
5560
5686
|
this._dropdownService = _dropdownService;
|
|
5561
5687
|
this.focusableItem = focusableItem;
|
|
5688
|
+
this.el = el;
|
|
5689
|
+
this.renderer = renderer;
|
|
5562
5690
|
}
|
|
5563
5691
|
get disabled() {
|
|
5564
5692
|
return this.focusableItem.disabled;
|
|
@@ -5576,6 +5704,9 @@ class ClrDropdownItem {
|
|
|
5576
5704
|
set dropdownItemId(value) {
|
|
5577
5705
|
this.focusableItem.id = value;
|
|
5578
5706
|
}
|
|
5707
|
+
ngAfterViewInit() {
|
|
5708
|
+
wrapHostContentInsideSpan(this.el.nativeElement, this.renderer, 'dropdown-item-content');
|
|
5709
|
+
}
|
|
5579
5710
|
onDropdownItemClick() {
|
|
5580
5711
|
// Move focus back to the root dropdown trigger.
|
|
5581
5712
|
// This is done BEFORE the dropdown is closed so that focus gets moved properly if a modal is opened.
|
|
@@ -5613,7 +5744,7 @@ class ClrDropdownItem {
|
|
|
5613
5744
|
return rootDropdown;
|
|
5614
5745
|
}
|
|
5615
5746
|
}
|
|
5616
|
-
ClrDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, deps: [{ token: ClrDropdown }, { token: RootDropdownService }, { token: FocusableItem }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5747
|
+
ClrDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, deps: [{ token: ClrDropdown }, { token: RootDropdownService }, { token: FocusableItem }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5617
5748
|
ClrDropdownItem.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDropdownItem, selector: "[clrDropdownItem]", inputs: { disabled: ["clrDisabled", "disabled"], dropdownItemId: ["id", "dropdownItemId"] }, host: { listeners: { "click": "onDropdownItemClick()", "keydown.space": "onSpaceKeydown($event)", "keydown.enter": "onEnterKeydown($event)" }, properties: { "class.disabled": "disabled", "class.dropdown-item": "true", "attr.role": "\"menuitem\"", "attr.aria-disabled": "disabled", "attr.id": "dropdownItemId" } }, providers: [BASIC_FOCUSABLE_ITEM_PROVIDER], ngImport: i0 });
|
|
5618
5749
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, decorators: [{
|
|
5619
5750
|
type: Directive,
|
|
@@ -5628,7 +5759,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5628
5759
|
},
|
|
5629
5760
|
providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],
|
|
5630
5761
|
}]
|
|
5631
|
-
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
|
|
5762
|
+
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { disabled: [{
|
|
5632
5763
|
type: Input,
|
|
5633
5764
|
args: ['clrDisabled']
|
|
5634
5765
|
}], dropdownItemId: [{
|
|
@@ -8993,7 +9124,7 @@ class ClrOptions {
|
|
|
8993
9124
|
}
|
|
8994
9125
|
}
|
|
8995
9126
|
ClrOptions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptions, deps: [{ token: OptionSelectionService }, { token: IF_ACTIVE_ID }, { token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: ComboboxFocusHandler }, { token: ClrPopoverToggleService }, { token: POPOVER_HOST_ANCHOR, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
8996
|
-
ClrOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOptions, selector: "clr-options", inputs: { optionsId: ["id", "optionsId"] }, host: { properties: { "class.clr-combobox-options": "true", "attr.role": "\"listbox\"", "id": "optionsId" } }, providers: [{ provide: LoadingListener, useExisting: ClrOptions }], queries: [{ propertyName: "items", predicate: ClrOption }], ngImport: i0, template: `
|
|
9127
|
+
ClrOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOptions, selector: "clr-options", inputs: { optionsId: ["id", "optionsId"] }, host: { properties: { "class.clr-combobox-options": "true", "attr.role": "\"listbox\"", "id": "optionsId" } }, providers: [{ provide: LoadingListener, useExisting: ClrOptions }], queries: [{ propertyName: "items", predicate: ClrOption, descendants: true }], ngImport: i0, template: `
|
|
8997
9128
|
<div *ngIf="optionSelectionService.loading" class="clr-combobox-options-loading">
|
|
8998
9129
|
<clr-spinner clrInline>
|
|
8999
9130
|
{{ commonStrings.keys.loading }}
|
|
@@ -9062,7 +9193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9062
9193
|
args: ['id']
|
|
9063
9194
|
}], items: [{
|
|
9064
9195
|
type: ContentChildren,
|
|
9065
|
-
args: [ClrOption]
|
|
9196
|
+
args: [ClrOption, { descendants: true }]
|
|
9066
9197
|
}] } });
|
|
9067
9198
|
|
|
9068
9199
|
/*
|
|
@@ -9341,7 +9472,7 @@ ClrCombobox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
9341
9472
|
IF_ACTIVE_ID_PROVIDER,
|
|
9342
9473
|
FOCUS_SERVICE_PROVIDER,
|
|
9343
9474
|
COMBOBOX_FOCUS_HANDLER_PROVIDER,
|
|
9344
|
-
], queries: [{ propertyName: "optionSelected", first: true, predicate: ClrOptionSelected, descendants: true }, { propertyName: "options", first: true, predicate: ClrOptions, descendants: true }], viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textboxInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], 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<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <
|
|
9475
|
+
], queries: [{ propertyName: "optionSelected", first: true, predicate: ClrOptionSelected, descendants: true }, { propertyName: "options", first: true, predicate: ClrOptions, descendants: true }], viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textboxInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], 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<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model && multiSelectModel.length > 0\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n class=\"clr-combobox-pills\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <input\n #textboxInput\n type=\"text\"\n role=\"combobox\"\n [id]=\"inputId()\"\n class=\"clr-input clr-combobox-input\"\n [(ngModel)]=\"searchText\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-owns]=\"ariaOwns\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n [attr.aria-invalid]=\"control?.invalid? true: null\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-activedescendant]=\"getActiveDescendant()\"\n [attr.placeholder]=\"placeholder\"\n />\n\n <!-- No click handler, as it uses the handler on the .clr-combobox-wrapper -->\n <button\n clrPopoverOpenCloseButton\n #trigger\n type=\"button\"\n class=\"clr-combobox-trigger\"\n tabindex=\"-1\"\n [disabled]=\"control?.disabled || null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxOpen\"\n >\n <cds-icon shape=\"angle\" direction=\"down\"></cds-icon>\n </button>\n\n <div class=\"clr-focus-indicator\" [class.clr-focus]=\"focused\"></div>\n</div>\n\n<!-- Both close handlers are handled manually due to issues in Edge browser.\n Additionally 'outsideClickToClose' has complex handling that's necessary\n to be manual due to the component architecture -->\n<div role=\"dialog\" *clrPopoverContent=\"openState at smartPosition; outsideClickToClose: false; scrollToClose: false\">\n <ng-content></ng-content>\n</div>\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: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrRovingTabindex, selector: "[clrRovingTabindex]", inputs: ["clrRovingTabindex", "clrRovingTabindexDisabled"] }, { kind: "directive", type: ClrKeyFocusItem, selector: "[clrKeyFocusItem]" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
|
|
9345
9476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrCombobox, decorators: [{
|
|
9346
9477
|
type: Component,
|
|
9347
9478
|
args: [{ selector: 'clr-combobox', providers: [
|
|
@@ -9354,7 +9485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9354
9485
|
'[class.aria-required]': 'true',
|
|
9355
9486
|
'[class.clr-combobox]': 'true',
|
|
9356
9487
|
'[class.clr-combobox-disabled]': 'control?.disabled',
|
|
9357
|
-
}, 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<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <
|
|
9488
|
+
}, 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<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model && multiSelectModel.length > 0\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n class=\"clr-combobox-pills\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <input\n #textboxInput\n type=\"text\"\n role=\"combobox\"\n [id]=\"inputId()\"\n class=\"clr-input clr-combobox-input\"\n [(ngModel)]=\"searchText\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-owns]=\"ariaOwns\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n [attr.aria-invalid]=\"control?.invalid? true: null\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-activedescendant]=\"getActiveDescendant()\"\n [attr.placeholder]=\"placeholder\"\n />\n\n <!-- No click handler, as it uses the handler on the .clr-combobox-wrapper -->\n <button\n clrPopoverOpenCloseButton\n #trigger\n type=\"button\"\n class=\"clr-combobox-trigger\"\n tabindex=\"-1\"\n [disabled]=\"control?.disabled || null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxOpen\"\n >\n <cds-icon shape=\"angle\" direction=\"down\"></cds-icon>\n </button>\n\n <div class=\"clr-focus-indicator\" [class.clr-focus]=\"focused\"></div>\n</div>\n\n<!-- Both close handlers are handled manually due to issues in Edge browser.\n Additionally 'outsideClickToClose' has complex handling that's necessary\n to be manual due to the component architecture -->\n<div role=\"dialog\" *clrPopoverContent=\"openState at smartPosition; outsideClickToClose: false; scrollToClose: false\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
9358
9489
|
}], ctorParameters: function () {
|
|
9359
9490
|
return [{ type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i1.NgControl, decorators: [{
|
|
9360
9491
|
type: Self
|
|
@@ -9432,6 +9563,10 @@ class ClrOptionItems {
|
|
|
9432
9563
|
this._filterField = field;
|
|
9433
9564
|
this.optionService.displayField = field;
|
|
9434
9565
|
}
|
|
9566
|
+
get hasResults() {
|
|
9567
|
+
// explicity return `undefined` instead of `false` if the answer is not known
|
|
9568
|
+
return this.filteredItems ? this.filteredItems.length : undefined;
|
|
9569
|
+
}
|
|
9435
9570
|
ngDoCheck() {
|
|
9436
9571
|
if (!this.differ) {
|
|
9437
9572
|
this.differ = this.differs.find(this.filteredItems).create(this.iterableProxy.ngForTrackBy);
|
|
@@ -9501,6 +9636,44 @@ function normalizeValue(value) {
|
|
|
9501
9636
|
.toLowerCase();
|
|
9502
9637
|
}
|
|
9503
9638
|
|
|
9639
|
+
/*
|
|
9640
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
9641
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
9642
|
+
* This software is released under MIT license.
|
|
9643
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
9644
|
+
*/
|
|
9645
|
+
class ClrOptionGroup {
|
|
9646
|
+
constructor() {
|
|
9647
|
+
this.labelId = uniqueIdFactory();
|
|
9648
|
+
}
|
|
9649
|
+
}
|
|
9650
|
+
ClrOptionGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9651
|
+
ClrOptionGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOptionGroup, selector: "clr-option-group", inputs: { label: ["clrOptionGroupLabel", "label"] }, host: { properties: { "attr.role": "\"group\"", "attr.aria-labelledby": "labelId", "style.display": "clrOptionItems.hasResults ? undefined : \"none\"" } }, queries: [{ propertyName: "clrOptionItems", first: true, predicate: ClrOptionItems, descendants: true }], ngImport: i0, template: `
|
|
9652
|
+
<span [id]="labelId" class="clr-option-group-label" role="presentation">{{ label }}</span>
|
|
9653
|
+
<ng-content></ng-content>
|
|
9654
|
+
`, isInline: true });
|
|
9655
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptionGroup, decorators: [{
|
|
9656
|
+
type: Component,
|
|
9657
|
+
args: [{
|
|
9658
|
+
selector: 'clr-option-group',
|
|
9659
|
+
host: {
|
|
9660
|
+
'[attr.role]': '"group"',
|
|
9661
|
+
'[attr.aria-labelledby]': 'labelId',
|
|
9662
|
+
'[style.display]': 'clrOptionItems.hasResults ? undefined : "none"',
|
|
9663
|
+
},
|
|
9664
|
+
template: `
|
|
9665
|
+
<span [id]="labelId" class="clr-option-group-label" role="presentation">{{ label }}</span>
|
|
9666
|
+
<ng-content></ng-content>
|
|
9667
|
+
`,
|
|
9668
|
+
}]
|
|
9669
|
+
}], propDecorators: { label: [{
|
|
9670
|
+
type: Input,
|
|
9671
|
+
args: ['clrOptionGroupLabel']
|
|
9672
|
+
}], clrOptionItems: [{
|
|
9673
|
+
type: ContentChild,
|
|
9674
|
+
args: [ClrOptionItems]
|
|
9675
|
+
}] } });
|
|
9676
|
+
|
|
9504
9677
|
/*
|
|
9505
9678
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
9506
9679
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -9513,7 +9686,13 @@ class ClrComboboxModule {
|
|
|
9513
9686
|
}
|
|
9514
9687
|
}
|
|
9515
9688
|
ClrComboboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9516
|
-
ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, declarations: [ClrCombobox,
|
|
9689
|
+
ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, declarations: [ClrCombobox,
|
|
9690
|
+
ClrComboboxContainer,
|
|
9691
|
+
ClrOptions,
|
|
9692
|
+
ClrOption,
|
|
9693
|
+
ClrOptionGroup,
|
|
9694
|
+
ClrOptionSelected,
|
|
9695
|
+
ClrOptionItems], imports: [CommonModule,
|
|
9517
9696
|
FormsModule,
|
|
9518
9697
|
ClrIconModule,
|
|
9519
9698
|
ClrKeyFocusModule,
|
|
@@ -9525,6 +9704,7 @@ ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
9525
9704
|
ClrComboboxContainer,
|
|
9526
9705
|
ClrOptions,
|
|
9527
9706
|
ClrOption,
|
|
9707
|
+
ClrOptionGroup,
|
|
9528
9708
|
ClrOptionSelected,
|
|
9529
9709
|
ClrConditionalModule,
|
|
9530
9710
|
ClrOptionItems] });
|
|
@@ -9550,13 +9730,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9550
9730
|
ClrPopoverModuleNext,
|
|
9551
9731
|
ClrSpinnerModule,
|
|
9552
9732
|
],
|
|
9553
|
-
declarations: [
|
|
9733
|
+
declarations: [
|
|
9734
|
+
ClrCombobox,
|
|
9735
|
+
ClrComboboxContainer,
|
|
9736
|
+
ClrOptions,
|
|
9737
|
+
ClrOption,
|
|
9738
|
+
ClrOptionGroup,
|
|
9739
|
+
ClrOptionSelected,
|
|
9740
|
+
ClrOptionItems,
|
|
9741
|
+
],
|
|
9554
9742
|
exports: [
|
|
9555
9743
|
ClrCommonFormsModule,
|
|
9556
9744
|
ClrCombobox,
|
|
9557
9745
|
ClrComboboxContainer,
|
|
9558
9746
|
ClrOptions,
|
|
9559
9747
|
ClrOption,
|
|
9748
|
+
ClrOptionGroup,
|
|
9560
9749
|
ClrOptionSelected,
|
|
9561
9750
|
ClrConditionalModule,
|
|
9562
9751
|
ClrOptionItems,
|
|
@@ -10049,14 +10238,14 @@ class ClrBreadcrumbs {
|
|
|
10049
10238
|
}
|
|
10050
10239
|
}
|
|
10051
10240
|
ClrBreadcrumbs.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, deps: [{ token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10052
|
-
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(--
|
|
10241
|
+
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(--clr-base-gap-s)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;height:var(--clr-base-row-height-s);color:var(--cds-alias-typography-color-400);font-size:var(--clr-base-typography-font-size-inline);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--clr-base-typography-line-height-16);letter-spacing:calc(-.1 * (1rem / var(--cds-global-base)))}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center}.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 a:visited:active{color:var(--clr-link-active-color)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space)}.clr-breadcrumb-menu .clr-breadcrumb-expand{height:var(--clr-base-icon-size-l);width:var(--clr-base-icon-size-l);min-height:var(--clr-base-icon-size-l);min-width:var(--clr-base-icon-size-l);margin:0;padding:0;gap:0}\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" }] });
|
|
10053
10242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, decorators: [{
|
|
10054
10243
|
type: Component,
|
|
10055
10244
|
args: [{ selector: 'clr-breadcrumbs', host: {
|
|
10056
10245
|
class: 'clr-breadcrumb',
|
|
10057
10246
|
'[attr.aria-label]': 'commonStrings.keys.breadcrumbsLabel',
|
|
10058
10247
|
'[attr.role]': '"navigation"',
|
|
10059
|
-
}, 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(--
|
|
10248
|
+
}, 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(--clr-base-gap-s)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;height:var(--clr-base-row-height-s);color:var(--cds-alias-typography-color-400);font-size:var(--clr-base-typography-font-size-inline);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--clr-base-typography-line-height-16);letter-spacing:calc(-.1 * (1rem / var(--cds-global-base)))}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center}.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 a:visited:active{color:var(--clr-link-active-color)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space)}.clr-breadcrumb-menu .clr-breadcrumb-expand{height:var(--clr-base-icon-size-l);width:var(--clr-base-icon-size-l);min-height:var(--clr-base-icon-size-l);min-width:var(--clr-base-icon-size-l);margin:0;padding:0;gap:0}\n"] }]
|
|
10060
10249
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }]; }, propDecorators: { items: [{
|
|
10061
10250
|
type: Input
|
|
10062
10251
|
}], clrBreadcrumbItemClick: [{
|
|
@@ -14863,7 +15052,7 @@ class ClrDatepickerViewManager {
|
|
|
14863
15052
|
}
|
|
14864
15053
|
}
|
|
14865
15054
|
ClrDatepickerViewManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, deps: [{ token: ClrCommonStringsService }, { token: ViewManagerService }, { token: DateNavigationService }, { token: DateIOService }], target: i0.ɵɵFactoryTarget.Component });
|
|
14866
|
-
ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { attributes: { "role": "dialog" }, properties: { "class.datepicker": "true", "class.has-range-option": "hasRangeOptions", "class.has-action-buttons": "hasActionButtons", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], 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=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <
|
|
15055
|
+
ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { attributes: { "role": "dialog" }, properties: { "class.datepicker": "true", "class.has-range-option": "hasRangeOptions", "class.has-action-buttons": "hasActionButtons", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], 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=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <ng-container *ngTemplateOutlet=\"calendarView\"></ng-container>\n</ng-container>\n\n<ng-template #calendarView>\n <div class=\"datepicker-view-manager\">\n <clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n <clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n <clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n <clr-datepicker-actions *ngIf=\"hasActionButtons\"></clr-datepicker-actions>\n </div>\n</ng-template>\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: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ClrVerticalNav, selector: "clr-vertical-nav", inputs: ["clrVerticalNavToggleLabel", "clrVerticalNavCollapsible", "clrVerticalNavCollapsed"], outputs: ["clrVerticalNavCollapsedChange"] }, { kind: "component", type: ClrVerticalNavLink, selector: "[clrVerticalNavLink]" }, { kind: "component", type: ClrMonthpicker, selector: "clr-monthpicker" }, { kind: "component", type: ClrYearpicker, selector: "clr-yearpicker" }, { kind: "component", type: ClrDaypicker, selector: "clr-daypicker" }, { kind: "component", type: ClrDatepickerActions, selector: "clr-datepicker-actions" }] });
|
|
14867
15056
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
|
|
14868
15057
|
type: Component,
|
|
14869
15058
|
args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
|
|
@@ -14873,7 +15062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
14873
15062
|
'[attr.aria-modal]': 'true',
|
|
14874
15063
|
'[attr.aria-label]': 'commonStrings.keys.datepickerDialogLabel',
|
|
14875
15064
|
role: 'dialog',
|
|
14876
|
-
}, 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=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <
|
|
15065
|
+
}, 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=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <ng-container *ngTemplateOutlet=\"calendarView\"></ng-container>\n</ng-container>\n\n<ng-template #calendarView>\n <div class=\"datepicker-view-manager\">\n <clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n <clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n <clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n <clr-datepicker-actions *ngIf=\"hasActionButtons\"></clr-datepicker-actions>\n </div>\n</ng-template>\n" }]
|
|
14877
15066
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: ViewManagerService }, { type: DateNavigationService }, { type: DateIOService }]; } });
|
|
14878
15067
|
|
|
14879
15068
|
/*
|
|
@@ -15667,7 +15856,7 @@ class ClrFileInputContainer extends ClrAbstractContainer {
|
|
|
15667
15856
|
return this.fileInput.elementRef.nativeElement.multiple;
|
|
15668
15857
|
}
|
|
15669
15858
|
get disabled() {
|
|
15670
|
-
return this.fileInput.elementRef.nativeElement.disabled;
|
|
15859
|
+
return this.fileInput.elementRef.nativeElement.disabled || (this.control && this.control.disabled);
|
|
15671
15860
|
}
|
|
15672
15861
|
get browseButtonText() {
|
|
15673
15862
|
var _a, _b;
|
|
@@ -15891,9 +16080,13 @@ class ClrFileInput extends WrappedFormControl {
|
|
|
15891
16080
|
constructor(injector, renderer, viewContainerRef, elementRef, control, commonStrings) {
|
|
15892
16081
|
super(viewContainerRef, ClrFileInputContainer, injector, control, renderer, elementRef);
|
|
15893
16082
|
this.elementRef = elementRef;
|
|
16083
|
+
this.control = control;
|
|
15894
16084
|
this.commonStrings = commonStrings;
|
|
15895
16085
|
this.selection = undefined;
|
|
15896
16086
|
}
|
|
16087
|
+
get disabled() {
|
|
16088
|
+
return this.control && this.control.disabled;
|
|
16089
|
+
}
|
|
15897
16090
|
handleChange() {
|
|
15898
16091
|
this.updateSelection();
|
|
15899
16092
|
}
|
|
@@ -15925,7 +16118,7 @@ class ClrFileInput extends WrappedFormControl {
|
|
|
15925
16118
|
}
|
|
15926
16119
|
}
|
|
15927
16120
|
ClrFileInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInput, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15928
|
-
ClrFileInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInput, selector: "input[type=\"file\"][clrFileInput]", host: { attributes: { "tabindex": "-1", "aria-hidden": "true" }, listeners: { "change": "handleChange()" }, properties: { "class.clr-file-input": "true" } }, usesInheritance: true, ngImport: i0 });
|
|
16121
|
+
ClrFileInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInput, selector: "input[type=\"file\"][clrFileInput]", host: { attributes: { "tabindex": "-1", "aria-hidden": "true" }, listeners: { "change": "handleChange()" }, properties: { "class.clr-file-input": "true", "disabled": "this.disabled" } }, usesInheritance: true, ngImport: i0 });
|
|
15929
16122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInput, decorators: [{
|
|
15930
16123
|
type: Directive,
|
|
15931
16124
|
args: [{
|
|
@@ -15942,7 +16135,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15942
16135
|
}, {
|
|
15943
16136
|
type: Optional
|
|
15944
16137
|
}] }, { type: ClrCommonStringsService }];
|
|
15945
|
-
}, propDecorators: {
|
|
16138
|
+
}, propDecorators: { disabled: [{
|
|
16139
|
+
type: HostBinding,
|
|
16140
|
+
args: ['disabled']
|
|
16141
|
+
}], handleChange: [{
|
|
15946
16142
|
type: HostListener,
|
|
15947
16143
|
args: ['change']
|
|
15948
16144
|
}] } });
|
|
@@ -16138,6 +16334,9 @@ class ClrNumberInputContainer extends ClrAbstractContainer {
|
|
|
16138
16334
|
this.focus = false;
|
|
16139
16335
|
this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
|
|
16140
16336
|
}
|
|
16337
|
+
focusOut() {
|
|
16338
|
+
this.input.dispatchBlur();
|
|
16339
|
+
}
|
|
16141
16340
|
}
|
|
16142
16341
|
ClrNumberInputContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrNumberInputContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16143
16342
|
ClrNumberInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrNumberInputContainer, selector: "clr-number-input-container", host: { properties: { "class.clr-form-control": "true", "class.clr-form-control-disabled": "control?.disabled", "class.clr-form-control-readonly": "input.readonly", "class.clr-row": "addGrid()" } }, providers: [FocusService, IfControlStateService, NgControlService, ControlIdService, ControlClassService], queries: [{ propertyName: "input", first: true, predicate: i0.forwardRef(function () { return ClrNumberInput; }), descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
@@ -16145,7 +16344,7 @@ ClrNumberInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
16145
16344
|
<label *ngIf="!label && addGrid()"></label>
|
|
16146
16345
|
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
16147
16346
|
<div class="clr-number-input-wrapper">
|
|
16148
|
-
<div class="clr-input-group" [class.clr-focus]="focus">
|
|
16347
|
+
<div class="clr-input-group" [class.clr-focus]="focus" (focusout)="focusOut()">
|
|
16149
16348
|
<ng-content select="[clrNumberInput]"></ng-content>
|
|
16150
16349
|
<div class="clr-input-group-actions">
|
|
16151
16350
|
<button
|
|
@@ -16196,7 +16395,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16196
16395
|
<label *ngIf="!label && addGrid()"></label>
|
|
16197
16396
|
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
16198
16397
|
<div class="clr-number-input-wrapper">
|
|
16199
|
-
<div class="clr-input-group" [class.clr-focus]="focus">
|
|
16398
|
+
<div class="clr-input-group" [class.clr-focus]="focus" (focusout)="focusOut()">
|
|
16200
16399
|
<ng-content select="[clrNumberInput]"></ng-content>
|
|
16201
16400
|
<div class="clr-input-group-actions">
|
|
16202
16401
|
<button
|
|
@@ -16290,14 +16489,21 @@ class ClrNumberInput extends WrappedFormControl {
|
|
|
16290
16489
|
}
|
|
16291
16490
|
stepUp() {
|
|
16292
16491
|
this.el.nativeElement.stepUp();
|
|
16293
|
-
this.
|
|
16492
|
+
this.dispatchStepChangeEvents();
|
|
16294
16493
|
this.control.control.markAllAsTouched();
|
|
16295
16494
|
}
|
|
16296
16495
|
stepDown() {
|
|
16297
16496
|
this.el.nativeElement.stepDown();
|
|
16298
|
-
this.
|
|
16497
|
+
this.dispatchStepChangeEvents();
|
|
16299
16498
|
this.control.control.markAllAsTouched();
|
|
16300
16499
|
}
|
|
16500
|
+
dispatchBlur() {
|
|
16501
|
+
this.el.nativeElement.dispatchEvent(new Event('blur', { bubbles: true, cancelable: true }));
|
|
16502
|
+
}
|
|
16503
|
+
dispatchStepChangeEvents() {
|
|
16504
|
+
this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
|
|
16505
|
+
this.el.nativeElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
16506
|
+
}
|
|
16301
16507
|
}
|
|
16302
16508
|
ClrNumberInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrNumberInput, deps: [{ token: FocusService, optional: true }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i1.NgControl, optional: true, self: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
16303
16509
|
ClrNumberInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrNumberInput, selector: "input[type=\"number\"][clrNumberInput]", host: { listeners: { "focus": "triggerFocus()", "blur": "triggerValidation()" }, properties: { "class.clr-input": "true", "class.clr-number-input": "true" } }, usesInheritance: true, ngImport: i0 });
|
|
@@ -17338,7 +17544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17338
17544
|
class ClrExpandableAnimationModule {
|
|
17339
17545
|
}
|
|
17340
17546
|
ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17341
|
-
ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
|
|
17547
|
+
ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation, ClrExpandableAnimationDirective], imports: [CommonModule], exports: [ClrExpandableAnimation, ClrExpandableAnimationDirective] });
|
|
17342
17548
|
ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
|
|
17343
17549
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
|
|
17344
17550
|
type: NgModule,
|
|
@@ -17362,7 +17568,7 @@ class CdkDragModule_CdkDrag extends CdkDrag {
|
|
|
17362
17568
|
super(elementRef, dropContainer, document, ngZone, viewContainerRef, config, dir, dragDrop, changeDetectorRef);
|
|
17363
17569
|
}
|
|
17364
17570
|
}
|
|
17365
|
-
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 });
|
|
17571
|
+
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 });
|
|
17366
17572
|
CdkDragModule_CdkDrag.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]", usesInheritance: true, ngImport: i0 });
|
|
17367
17573
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CdkDragModule_CdkDrag, decorators: [{
|
|
17368
17574
|
type: Directive,
|
|
@@ -17385,7 +17591,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17385
17591
|
}, {
|
|
17386
17592
|
type: Inject,
|
|
17387
17593
|
args: [CDK_DRAG_CONFIG]
|
|
17388
|
-
}] }, { type: i1$3.Directionality }, { type: i2.DragDrop }, { type: i0.ChangeDetectorRef }];
|
|
17594
|
+
}] }, { type: i1$3.Directionality }, { type: i2$1.DragDrop }, { type: i0.ChangeDetectorRef }];
|
|
17389
17595
|
} });
|
|
17390
17596
|
/**
|
|
17391
17597
|
* This module allows us to avoid importing all of CdkDragDropModule which results in a smaller application bundle.
|
|
@@ -17831,335 +18037,450 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17831
18037
|
* This software is released under MIT license.
|
|
17832
18038
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
17833
18039
|
*/
|
|
17834
|
-
|
|
17835
|
-
|
|
17836
|
-
|
|
17837
|
-
'input:not([disabled])',
|
|
17838
|
-
'button:not([disabled])',
|
|
17839
|
-
'select:not([disabled])',
|
|
17840
|
-
'textarea:not([disabled])',
|
|
17841
|
-
'iframe',
|
|
17842
|
-
'object',
|
|
17843
|
-
'embed',
|
|
17844
|
-
'[contenteditable=true]',
|
|
17845
|
-
'[role=button]:not([disabled])',
|
|
17846
|
-
];
|
|
17847
|
-
function getTabbableItems(el) {
|
|
17848
|
-
const tabbableItemSelectors = [...actionableItemSelectors, '[tabindex="0"]:not([disabled])'];
|
|
17849
|
-
const tabbableSelector = tabbableItemSelectors.join(',');
|
|
17850
|
-
return Array.from(el.querySelectorAll(tabbableSelector));
|
|
17851
|
-
}
|
|
17852
|
-
function isActionableItem(el) {
|
|
17853
|
-
const actionableSelector = actionableItemSelectors.join(',');
|
|
17854
|
-
return el.matches(actionableSelector);
|
|
17855
|
-
}
|
|
17856
|
-
class KeyNavigationGridController {
|
|
17857
|
-
constructor(zone) {
|
|
17858
|
-
this.zone = zone;
|
|
17859
|
-
this.skipItemFocus = false;
|
|
17860
|
-
this.listenersAdded = false;
|
|
17861
|
-
this.destroy$ = new Subject();
|
|
17862
|
-
this._activeCell = null;
|
|
17863
|
-
this.config = {
|
|
17864
|
-
keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*="display: none"])',
|
|
17865
|
-
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
17866
|
-
keyGrid: '[role=grid]',
|
|
17867
|
-
};
|
|
17868
|
-
}
|
|
17869
|
-
get grid() {
|
|
17870
|
-
var _a;
|
|
17871
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector(this.config.keyGrid);
|
|
17872
|
-
}
|
|
17873
|
-
get rows() {
|
|
17874
|
-
var _a;
|
|
17875
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridRows);
|
|
17876
|
-
}
|
|
17877
|
-
get cells() {
|
|
17878
|
-
var _a;
|
|
17879
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells);
|
|
17880
|
-
}
|
|
17881
|
-
ngOnDestroy() {
|
|
17882
|
-
this.destroy$.next();
|
|
17883
|
-
this.destroy$.complete();
|
|
18040
|
+
class DefaultKeyNavigationStrategy {
|
|
18041
|
+
constructor(utils) {
|
|
18042
|
+
this.utils = utils;
|
|
17884
18043
|
}
|
|
17885
|
-
|
|
17886
|
-
|
|
17887
|
-
|
|
18044
|
+
keyUp(currentCellCoords) {
|
|
18045
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18046
|
+
if (currentCellCoords.y === 0) {
|
|
18047
|
+
return nextCellCoords;
|
|
17888
18048
|
}
|
|
17889
|
-
|
|
17890
|
-
|
|
17891
|
-
|
|
17892
|
-
|
|
17893
|
-
|
|
17894
|
-
|
|
17895
|
-
const activeCell = this.cells
|
|
17896
|
-
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
17897
|
-
: null;
|
|
17898
|
-
if (activeCell) {
|
|
17899
|
-
this.setActiveCell(activeCell, { keepFocus: isActionableItem(e.target) });
|
|
17900
|
-
}
|
|
17901
|
-
}
|
|
17902
|
-
});
|
|
17903
|
-
fromEvent(this.grid, 'wheel')
|
|
17904
|
-
.pipe(takeUntil(this.destroy$))
|
|
17905
|
-
.subscribe(() => {
|
|
17906
|
-
this.removeActiveCell();
|
|
17907
|
-
});
|
|
17908
|
-
fromEvent(this.grid, 'focusout')
|
|
17909
|
-
.pipe(debounceTime(0), takeUntil(this.destroy$))
|
|
17910
|
-
.subscribe(() => {
|
|
17911
|
-
if (this.grid.contains(document.activeElement)) {
|
|
17912
|
-
return;
|
|
17913
|
-
}
|
|
17914
|
-
this.removeActiveCell();
|
|
17915
|
-
});
|
|
17916
|
-
fromEvent(this.grid, 'keydown')
|
|
17917
|
-
.pipe(takeUntil(this.destroy$))
|
|
17918
|
-
.subscribe((e) => {
|
|
17919
|
-
// Skip column resize events
|
|
17920
|
-
if (e.target.classList.contains('drag-handle') &&
|
|
17921
|
-
(e.key === Keys.ArrowLeft || e.key === Keys.ArrowRight)) {
|
|
17922
|
-
return;
|
|
17923
|
-
}
|
|
17924
|
-
if (e.key === Keys.ArrowUp ||
|
|
17925
|
-
e.key === Keys.ArrowDown ||
|
|
17926
|
-
e.key === Keys.ArrowLeft ||
|
|
17927
|
-
e.key === Keys.ArrowRight ||
|
|
17928
|
-
e.key === Keys.End ||
|
|
17929
|
-
e.key === Keys.Home ||
|
|
17930
|
-
e.key === Keys.PageUp ||
|
|
17931
|
-
e.key === Keys.PageDown) {
|
|
17932
|
-
const currentCellCoords = this.getCurrentCellCoordinates();
|
|
17933
|
-
const nextCellCoords = this.isExpandedRow(currentCellCoords.y) || this.isDetailsRow(currentCellCoords.y)
|
|
17934
|
-
? this.getNextForExpandedRowCoordinate(e, currentCellCoords)
|
|
17935
|
-
: this.getNextItemCoordinate(e, currentCellCoords);
|
|
17936
|
-
const activeItem = this.rows
|
|
17937
|
-
? Array.from(this.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
17938
|
-
: null;
|
|
17939
|
-
if (activeItem) {
|
|
17940
|
-
this.setActiveCell(activeItem);
|
|
17941
|
-
}
|
|
17942
|
-
e.preventDefault();
|
|
17943
|
-
}
|
|
17944
|
-
});
|
|
17945
|
-
});
|
|
17946
|
-
this.listenersAdded = true;
|
|
17947
|
-
}
|
|
17948
|
-
initializeKeyGrid(host) {
|
|
17949
|
-
this.host = host;
|
|
17950
|
-
this.addListeners();
|
|
17951
|
-
this.resetKeyGrid();
|
|
17952
|
-
}
|
|
17953
|
-
resetKeyGrid() {
|
|
17954
|
-
var _a;
|
|
17955
|
-
(_a = this.cells) === null || _a === void 0 ? void 0 : _a.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
17956
|
-
const firstCell = this.cells ? this.cells[0] : null;
|
|
17957
|
-
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
17958
|
-
}
|
|
17959
|
-
removeActiveCell() {
|
|
17960
|
-
this._activeCell = null;
|
|
17961
|
-
}
|
|
17962
|
-
getActiveCell() {
|
|
17963
|
-
return this._activeCell;
|
|
17964
|
-
}
|
|
17965
|
-
setActiveCell(activeCell, { keepFocus } = { keepFocus: false }) {
|
|
17966
|
-
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
17967
|
-
if (prior) {
|
|
17968
|
-
prior.setAttribute('tabindex', '-1');
|
|
18049
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18050
|
+
const isActionCell = this.utils.isActionCell(currentCellCoords);
|
|
18051
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y) &&
|
|
18052
|
+
!isActionCell &&
|
|
18053
|
+
this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18054
|
+
nextCellCoords.x = 0;
|
|
17969
18055
|
}
|
|
17970
|
-
|
|
17971
|
-
|
|
17972
|
-
|
|
17973
|
-
let elementToFocus;
|
|
17974
|
-
if (activeCell.getAttribute('role') === 'columnheader') {
|
|
17975
|
-
elementToFocus = activeCell;
|
|
18056
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18057
|
+
if (isActionCell) {
|
|
18058
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
17976
18059
|
}
|
|
17977
18060
|
else {
|
|
17978
|
-
|
|
17979
|
-
elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;
|
|
18061
|
+
nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17980
18062
|
}
|
|
17981
|
-
elementToFocus.focus();
|
|
17982
18063
|
}
|
|
18064
|
+
return nextCellCoords;
|
|
17983
18065
|
}
|
|
17984
|
-
|
|
17985
|
-
|
|
17986
|
-
|
|
18066
|
+
keyDown(currentCellCoords) {
|
|
18067
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18068
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18069
|
+
if (currentCellCoords.y >= numOfRows) {
|
|
18070
|
+
return nextCellCoords;
|
|
17987
18071
|
}
|
|
17988
|
-
|
|
17989
|
-
|
|
17990
|
-
|
|
17991
|
-
|
|
18072
|
+
const isActionCell = this.utils.isActionCell(currentCellCoords);
|
|
18073
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
18074
|
+
if (!isActionCell && this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18075
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18076
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
18077
|
+
? 0
|
|
18078
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
17992
18079
|
}
|
|
17993
|
-
|
|
17994
|
-
|
|
17995
|
-
|
|
17996
|
-
|
|
17997
|
-
|
|
17998
|
-
|
|
17999
|
-
|
|
18000
|
-
|
|
18001
|
-
|
|
18002
|
-
|
|
18003
|
-
|
|
18004
|
-
|
|
18005
|
-
|
|
18006
|
-
|
|
18007
|
-
|
|
18008
|
-
|
|
18009
|
-
|
|
18010
|
-
|
|
18011
|
-
|
|
18080
|
+
return nextCellCoords;
|
|
18081
|
+
}
|
|
18082
|
+
keyLeft(currentCellCoords) {
|
|
18083
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18084
|
+
if (currentCellCoords.x === 0) {
|
|
18085
|
+
return nextCellCoords;
|
|
18086
|
+
}
|
|
18087
|
+
nextCellCoords.x = currentCellCoords.x - 1;
|
|
18088
|
+
return nextCellCoords;
|
|
18089
|
+
}
|
|
18090
|
+
keyRight(currentCellCoords) {
|
|
18091
|
+
var _a;
|
|
18092
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18093
|
+
// calculate numOfColumns based on header cells.
|
|
18094
|
+
const numOfColumns = ((_a = this.utils.rows) === null || _a === void 0 ? void 0 : _a.length) - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
18095
|
+
nextCellCoords.x = currentCellCoords.x < numOfColumns ? nextCellCoords.x + 1 : nextCellCoords.x;
|
|
18096
|
+
return nextCellCoords;
|
|
18097
|
+
}
|
|
18098
|
+
keyEnd(currentCellCoords, ctrlKey) {
|
|
18099
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18100
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18101
|
+
// calculate X based on header cells.
|
|
18102
|
+
nextCellCoords.x = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
18103
|
+
if (ctrlKey) {
|
|
18104
|
+
nextCellCoords.y = numOfRows;
|
|
18105
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18106
|
+
nextCellCoords.x = this.utils.getCellsForRow(nextCellCoords.y).length - 1;
|
|
18107
|
+
}
|
|
18108
|
+
}
|
|
18109
|
+
return nextCellCoords;
|
|
18110
|
+
}
|
|
18111
|
+
keyHome(currentCellCoords, ctrlKey) {
|
|
18112
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18113
|
+
nextCellCoords.x = 0;
|
|
18114
|
+
if (ctrlKey) {
|
|
18115
|
+
nextCellCoords.y = 0;
|
|
18116
|
+
}
|
|
18117
|
+
return nextCellCoords;
|
|
18118
|
+
}
|
|
18119
|
+
keyPageUp(currentCellCoords) {
|
|
18120
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18121
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18122
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
18123
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18124
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18125
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
18126
|
+
? 0
|
|
18127
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18128
|
+
}
|
|
18129
|
+
else if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18130
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18131
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
18132
|
+
? 0
|
|
18133
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18012
18134
|
}
|
|
18013
|
-
|
|
18135
|
+
}
|
|
18136
|
+
else {
|
|
18137
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18014
18138
|
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18015
18139
|
}
|
|
18016
|
-
|
|
18140
|
+
}
|
|
18141
|
+
return nextCellCoords;
|
|
18142
|
+
}
|
|
18143
|
+
keyPageDown(currentCellCoords) {
|
|
18144
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18145
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18146
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18147
|
+
nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
|
|
18148
|
+
if (this.utils.isActionCell(currentCellCoords) && this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18149
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18150
|
+
}
|
|
18151
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y) && this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18152
|
+
nextCellCoords.x = 0;
|
|
18153
|
+
}
|
|
18154
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18155
|
+
nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18156
|
+
}
|
|
18157
|
+
else if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18158
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18159
|
+
nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
|
|
18160
|
+
? 0
|
|
18161
|
+
: nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18162
|
+
}
|
|
18163
|
+
return nextCellCoords;
|
|
18164
|
+
}
|
|
18165
|
+
}
|
|
18166
|
+
|
|
18167
|
+
/*
|
|
18168
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
18169
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
18170
|
+
* This software is released under MIT license.
|
|
18171
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18172
|
+
*/
|
|
18173
|
+
class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
|
|
18174
|
+
keyUp(currentCellCoords) {
|
|
18175
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18176
|
+
if (currentCellCoords.y === 0) {
|
|
18177
|
+
return nextCellCoords;
|
|
18178
|
+
}
|
|
18179
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18180
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18181
|
+
if (this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
18017
18182
|
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18018
|
-
if (!this.isDetailsRow(nextCellCoords.y)) {
|
|
18019
|
-
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
18020
|
-
}
|
|
18021
18183
|
}
|
|
18022
|
-
|
|
18023
|
-
|
|
18184
|
+
switch (true) {
|
|
18185
|
+
case this.utils.isDetailsRow(nextCellCoords.y):
|
|
18186
|
+
nextCellCoords.x = 0;
|
|
18187
|
+
break;
|
|
18188
|
+
case this.utils.isDetailsRow(currentCellCoords.y) === false:
|
|
18189
|
+
nextCellCoords.x = currentCellCoords.x;
|
|
18190
|
+
break;
|
|
18191
|
+
default:
|
|
18192
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
|
|
18193
|
+
}
|
|
18194
|
+
}
|
|
18195
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y) && nextCellCoords.y > 0) {
|
|
18196
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18197
|
+
}
|
|
18198
|
+
return nextCellCoords;
|
|
18199
|
+
}
|
|
18200
|
+
keyDown(currentCellCoords) {
|
|
18201
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18202
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18203
|
+
if (currentCellCoords.y >= numOfRows) {
|
|
18204
|
+
return nextCellCoords;
|
|
18205
|
+
}
|
|
18206
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
18207
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18208
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18209
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18024
18210
|
}
|
|
18025
|
-
|
|
18026
|
-
nextCellCoords.x =
|
|
18211
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18212
|
+
nextCellCoords.x = 0;
|
|
18213
|
+
}
|
|
18214
|
+
else {
|
|
18215
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
|
|
18027
18216
|
}
|
|
18028
18217
|
}
|
|
18029
|
-
else
|
|
18218
|
+
else {
|
|
18219
|
+
nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y;
|
|
18220
|
+
}
|
|
18221
|
+
return nextCellCoords;
|
|
18222
|
+
}
|
|
18223
|
+
keyLeft(currentCellCoords) {
|
|
18224
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18225
|
+
if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
18226
|
+
return super.keyLeft(currentCellCoords);
|
|
18227
|
+
}
|
|
18228
|
+
if (currentCellCoords.x !== 0) {
|
|
18229
|
+
nextCellCoords.x = currentCellCoords.x - 1;
|
|
18230
|
+
}
|
|
18231
|
+
else if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18232
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18233
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y) - 1;
|
|
18234
|
+
}
|
|
18235
|
+
return nextCellCoords;
|
|
18236
|
+
}
|
|
18237
|
+
keyRight(currentCellCoords) {
|
|
18238
|
+
var _a;
|
|
18239
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18240
|
+
if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
18241
|
+
return super.keyRight(currentCellCoords);
|
|
18242
|
+
}
|
|
18243
|
+
// calculate numOfColumns based on header cells.
|
|
18244
|
+
const numOfColumns = ((_a = this.utils.rows) === null || _a === void 0 ? void 0 : _a.length) - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
18245
|
+
if (currentCellCoords.x >= numOfColumns) {
|
|
18246
|
+
return nextCellCoords;
|
|
18247
|
+
}
|
|
18248
|
+
if (this.utils.isActionCell(currentCellCoords) &&
|
|
18249
|
+
currentCellCoords.x === this.utils.actionCellCount(currentCellCoords.x) - 1 &&
|
|
18250
|
+
this.utils.isRowReplaced(currentCellCoords.y) &&
|
|
18251
|
+
!this.utils.isDetailsRow(currentCellCoords.y)) {
|
|
18030
18252
|
nextCellCoords.y = currentCellCoords.y + 1;
|
|
18031
|
-
|
|
18032
|
-
|
|
18253
|
+
nextCellCoords.x = 0;
|
|
18254
|
+
}
|
|
18255
|
+
else {
|
|
18256
|
+
nextCellCoords.x = currentCellCoords.x + 1;
|
|
18257
|
+
}
|
|
18258
|
+
return nextCellCoords;
|
|
18259
|
+
}
|
|
18260
|
+
keyEnd(currentCellCoords, ctrlKey) {
|
|
18261
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18262
|
+
if ((!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) || ctrlKey) {
|
|
18263
|
+
return super.keyEnd(currentCellCoords, ctrlKey);
|
|
18264
|
+
}
|
|
18265
|
+
nextCellCoords.x = this.utils.getCellsForRow(currentCellCoords.y).length - 1;
|
|
18266
|
+
return nextCellCoords;
|
|
18267
|
+
}
|
|
18268
|
+
keyHome(currentCellCoords, ctrlKey) {
|
|
18269
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18270
|
+
if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
|
|
18271
|
+
return super.keyHome(currentCellCoords, ctrlKey);
|
|
18272
|
+
}
|
|
18273
|
+
nextCellCoords.x = 0;
|
|
18274
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18275
|
+
if (ctrlKey) {
|
|
18276
|
+
nextCellCoords.y = 0;
|
|
18277
|
+
}
|
|
18278
|
+
return nextCellCoords;
|
|
18279
|
+
}
|
|
18280
|
+
keyPageUp(currentCellCoords) {
|
|
18281
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18282
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18283
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
18284
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18285
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18286
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18033
18287
|
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18288
|
+
nextCellCoords.x = 0;
|
|
18034
18289
|
}
|
|
18035
|
-
|
|
18290
|
+
}
|
|
18291
|
+
else if (!this.utils.isDetailsRow(currentCellCoords.y)) {
|
|
18292
|
+
if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18036
18293
|
nextCellCoords.x = 0;
|
|
18037
18294
|
}
|
|
18038
|
-
|
|
18039
|
-
|
|
18295
|
+
}
|
|
18296
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y)) {
|
|
18297
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18298
|
+
nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
|
|
18040
18299
|
}
|
|
18041
|
-
return nextCellCoords;
|
|
18042
18300
|
}
|
|
18043
|
-
|
|
18044
|
-
|
|
18301
|
+
}
|
|
18302
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18303
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18304
|
+
}
|
|
18305
|
+
return nextCellCoords;
|
|
18306
|
+
}
|
|
18307
|
+
keyPageDown(currentCellCoords) {
|
|
18308
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18309
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18310
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18311
|
+
nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
|
|
18312
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18313
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18314
|
+
if (nextCellCoords.y < numOfRows && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18315
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18316
|
+
}
|
|
18045
18317
|
}
|
|
18046
|
-
else if (this.
|
|
18047
|
-
nextCellCoords.x = currentCellCoords.x
|
|
18318
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18319
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18048
18320
|
}
|
|
18049
|
-
else {
|
|
18050
|
-
nextCellCoords.x =
|
|
18321
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18322
|
+
nextCellCoords.x = 0;
|
|
18051
18323
|
}
|
|
18052
18324
|
}
|
|
18053
|
-
else if (
|
|
18054
|
-
|
|
18055
|
-
|
|
18056
|
-
|
|
18057
|
-
|
|
18058
|
-
|
|
18059
|
-
|
|
18325
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18326
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18327
|
+
}
|
|
18328
|
+
return nextCellCoords;
|
|
18329
|
+
}
|
|
18330
|
+
}
|
|
18331
|
+
|
|
18332
|
+
/*
|
|
18333
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
18334
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
18335
|
+
* This software is released under MIT license.
|
|
18336
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18337
|
+
*/
|
|
18338
|
+
class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {
|
|
18339
|
+
keyUp(currentCellCoords) {
|
|
18340
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18341
|
+
if (currentCellCoords.y === 0) {
|
|
18342
|
+
return nextCellCoords;
|
|
18343
|
+
}
|
|
18344
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18345
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18346
|
+
return super.keyUp(currentCellCoords);
|
|
18347
|
+
}
|
|
18348
|
+
const isActionCell = this.utils.isActionCell(currentCellCoords);
|
|
18349
|
+
if (isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18350
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18351
|
+
}
|
|
18352
|
+
else if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18353
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18354
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18355
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18060
18356
|
}
|
|
18061
18357
|
}
|
|
18062
|
-
else if (
|
|
18063
|
-
|
|
18064
|
-
|
|
18065
|
-
|
|
18066
|
-
|
|
18067
|
-
|
|
18068
|
-
|
|
18358
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18359
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18360
|
+
}
|
|
18361
|
+
else if (!isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18362
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18363
|
+
}
|
|
18364
|
+
return nextCellCoords;
|
|
18365
|
+
}
|
|
18366
|
+
keyDown(currentCellCoords) {
|
|
18367
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18368
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18369
|
+
const numOfColumns = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
|
|
18370
|
+
if (currentCellCoords.y >= numOfRows) {
|
|
18371
|
+
return nextCellCoords;
|
|
18372
|
+
}
|
|
18373
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
18374
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18375
|
+
return super.keyDown(currentCellCoords);
|
|
18376
|
+
}
|
|
18377
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18378
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18379
|
+
nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
|
|
18069
18380
|
}
|
|
18070
|
-
else {
|
|
18071
|
-
nextCellCoords.x = currentCellCoords.x
|
|
18381
|
+
else if (this.utils.getCellsForRow(currentCellCoords.y).length > numOfColumns) {
|
|
18382
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18072
18383
|
}
|
|
18073
|
-
|
|
18074
|
-
|
|
18075
|
-
nextCellCoords.x = this.getCellsForRow(currentCellCoords.y).length - 1;
|
|
18076
|
-
if (e.ctrlKey) {
|
|
18077
|
-
nextCellCoords.x = numOfColumns;
|
|
18078
|
-
nextCellCoords.y = numOfRows;
|
|
18384
|
+
else {
|
|
18385
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18079
18386
|
}
|
|
18080
18387
|
}
|
|
18081
|
-
else
|
|
18082
|
-
nextCellCoords.
|
|
18083
|
-
nextCellCoords.y = currentCellCoords.y - 1;
|
|
18084
|
-
if (e.ctrlKey) {
|
|
18085
|
-
nextCellCoords.y = 0;
|
|
18086
|
-
}
|
|
18388
|
+
else {
|
|
18389
|
+
nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
|
|
18087
18390
|
}
|
|
18088
18391
|
return nextCellCoords;
|
|
18089
18392
|
}
|
|
18090
|
-
|
|
18091
|
-
|
|
18092
|
-
|
|
18093
|
-
|
|
18094
|
-
|
|
18095
|
-
|
|
18096
|
-
|
|
18097
|
-
|
|
18098
|
-
|
|
18099
|
-
|
|
18100
|
-
|
|
18101
|
-
|
|
18102
|
-
|
|
18103
|
-
|
|
18393
|
+
keyLeft(currentCellCoords) {
|
|
18394
|
+
return super.keyLeft(currentCellCoords);
|
|
18395
|
+
}
|
|
18396
|
+
keyRight(currentCellCoords) {
|
|
18397
|
+
return super.keyRight(currentCellCoords);
|
|
18398
|
+
}
|
|
18399
|
+
keyEnd(currentCellCoords, ctrlKey) {
|
|
18400
|
+
return super.keyEnd(currentCellCoords, ctrlKey);
|
|
18401
|
+
}
|
|
18402
|
+
keyHome(currentCellCoords, ctrlKey) {
|
|
18403
|
+
return super.keyHome(currentCellCoords, ctrlKey);
|
|
18404
|
+
}
|
|
18405
|
+
keyPageUp(currentCellCoords) {
|
|
18406
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18407
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18408
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
18409
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18410
|
+
return super.keyPageUp(currentCellCoords);
|
|
18411
|
+
}
|
|
18412
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18413
|
+
if (this.utils.isRowReplaced(nextCellCoords.y)) {
|
|
18414
|
+
if (!this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18415
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18416
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18104
18417
|
}
|
|
18105
18418
|
}
|
|
18106
|
-
|
|
18107
|
-
|
|
18108
|
-
nextCellCoords.y = currentCellCoords.y + 1;
|
|
18109
|
-
if (this.isSingleCellExpandedRow(nextCellCoords.y) && !isActionCell && this.isRowReplaced(nextCellCoords.y)) {
|
|
18110
|
-
nextCellCoords.x = 0;
|
|
18111
|
-
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18112
|
-
return nextCellCoords;
|
|
18419
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18420
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18113
18421
|
}
|
|
18114
|
-
if (
|
|
18115
|
-
nextCellCoords.
|
|
18116
|
-
nextCellCoords.x = nextCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
18422
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18423
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18117
18424
|
}
|
|
18118
18425
|
}
|
|
18119
|
-
else if (
|
|
18120
|
-
nextCellCoords.
|
|
18121
|
-
}
|
|
18122
|
-
else if (e.key === inlineEnd && currentCellCoords.x < numOfColumns) {
|
|
18123
|
-
nextCellCoords.x = currentCellCoords.x + 1;
|
|
18426
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18427
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18124
18428
|
}
|
|
18125
|
-
|
|
18126
|
-
|
|
18127
|
-
|
|
18128
|
-
|
|
18429
|
+
return nextCellCoords;
|
|
18430
|
+
}
|
|
18431
|
+
keyPageDown(currentCellCoords) {
|
|
18432
|
+
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18433
|
+
const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
|
|
18434
|
+
const itemsPerPage = this.utils.itemsPerPage;
|
|
18435
|
+
nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
|
|
18436
|
+
if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
|
|
18437
|
+
return super.keyPageDown(currentCellCoords);
|
|
18438
|
+
}
|
|
18439
|
+
if (!this.utils.isActionCell(currentCellCoords)) {
|
|
18440
|
+
if (this.utils.isRowReplaced(nextCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18441
|
+
if (nextCellCoords.y < numOfRows) {
|
|
18442
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
18443
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18444
|
+
}
|
|
18129
18445
|
}
|
|
18130
|
-
|
|
18131
|
-
|
|
18132
|
-
|
|
18133
|
-
if (
|
|
18134
|
-
nextCellCoords.
|
|
18446
|
+
else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18447
|
+
nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
|
|
18448
|
+
}
|
|
18449
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18450
|
+
nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
|
|
18135
18451
|
}
|
|
18136
18452
|
}
|
|
18137
|
-
else if (
|
|
18138
|
-
nextCellCoords.y =
|
|
18139
|
-
}
|
|
18140
|
-
else if (e.key === Keys.PageDown) {
|
|
18141
|
-
nextCellCoords.y =
|
|
18142
|
-
currentCellCoords.y + itemsPerPage < numOfRows ? currentCellCoords.y + itemsPerPage : numOfRows;
|
|
18453
|
+
else if (this.utils.isDetailsRow(nextCellCoords.y)) {
|
|
18454
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
18143
18455
|
}
|
|
18144
18456
|
return nextCellCoords;
|
|
18145
18457
|
}
|
|
18146
|
-
|
|
18458
|
+
}
|
|
18459
|
+
|
|
18460
|
+
/*
|
|
18461
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
18462
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
18463
|
+
* This software is released under MIT license.
|
|
18464
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18465
|
+
*/
|
|
18466
|
+
class KeyNavigationUtils {
|
|
18467
|
+
constructor(host, config) {
|
|
18468
|
+
this.host = host;
|
|
18469
|
+
this.config = config;
|
|
18470
|
+
}
|
|
18471
|
+
get grid() {
|
|
18147
18472
|
var _a;
|
|
18148
|
-
|
|
18149
|
-
// calculate numOfColumns based on header cells.
|
|
18150
|
-
const numOfColumns = numOfRows ? this.getCellsForRow(0).length - 1 : 0;
|
|
18151
|
-
const dir = this.host.dir;
|
|
18152
|
-
const inlineStart = dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;
|
|
18153
|
-
const inlineEnd = dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;
|
|
18154
|
-
const itemsPerPage = Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.rows[0].clientHeight) - 1 || 0;
|
|
18155
|
-
const isActionCell = this.isActionCell(currentCellCoords);
|
|
18156
|
-
const nextCellCoords = {
|
|
18157
|
-
x: currentCellCoords.x,
|
|
18158
|
-
y: currentCellCoords.y,
|
|
18159
|
-
};
|
|
18160
|
-
return { numOfRows, numOfColumns, inlineStart, inlineEnd, itemsPerPage, isActionCell, nextCellCoords };
|
|
18473
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector(this.config.keyGrid);
|
|
18161
18474
|
}
|
|
18162
|
-
|
|
18475
|
+
get rows() {
|
|
18476
|
+
var _a;
|
|
18477
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridRows);
|
|
18478
|
+
}
|
|
18479
|
+
get cells() {
|
|
18480
|
+
var _a;
|
|
18481
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells);
|
|
18482
|
+
}
|
|
18483
|
+
get currentCellCoordinates() {
|
|
18163
18484
|
const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
18164
18485
|
const currentRow = currentCell ? currentCell.closest(this.config.keyGridRows) : null;
|
|
18165
18486
|
const coordinates = {
|
|
@@ -18170,6 +18491,49 @@ class KeyNavigationGridController {
|
|
|
18170
18491
|
};
|
|
18171
18492
|
return coordinates;
|
|
18172
18493
|
}
|
|
18494
|
+
get averageRowHeight() {
|
|
18495
|
+
const heightSum = Array.from(this.rows.values()).reduce((sum, row) => {
|
|
18496
|
+
return sum + row.clientHeight;
|
|
18497
|
+
}, 0);
|
|
18498
|
+
return Math.round(heightSum / this.rows.length);
|
|
18499
|
+
}
|
|
18500
|
+
get itemsPerPage() {
|
|
18501
|
+
var _a;
|
|
18502
|
+
return Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.averageRowHeight) - 1 || 0;
|
|
18503
|
+
}
|
|
18504
|
+
setAriaRowIndexTo(cellCoords) {
|
|
18505
|
+
let ariaRowIndex = this.rows[cellCoords.y].getAttribute('aria-rowindex');
|
|
18506
|
+
if (!ariaRowIndex) {
|
|
18507
|
+
ariaRowIndex = this.rows[cellCoords.y - 1].getAttribute('aria-rowindex');
|
|
18508
|
+
}
|
|
18509
|
+
cellCoords.ariaRowIndex = ariaRowIndex;
|
|
18510
|
+
}
|
|
18511
|
+
getNextItemCoordinate(e) {
|
|
18512
|
+
const currentCellCoords = this.currentCellCoordinates;
|
|
18513
|
+
const strategy = this.getNavStrategy(currentCellCoords);
|
|
18514
|
+
const inlineStart = this.host.dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;
|
|
18515
|
+
const inlineEnd = this.host.dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;
|
|
18516
|
+
switch (e.key) {
|
|
18517
|
+
case Keys.ArrowUp:
|
|
18518
|
+
return strategy.keyUp(currentCellCoords);
|
|
18519
|
+
case Keys.ArrowDown:
|
|
18520
|
+
return strategy.keyDown(currentCellCoords);
|
|
18521
|
+
case inlineStart:
|
|
18522
|
+
return strategy.keyLeft(currentCellCoords);
|
|
18523
|
+
case inlineEnd:
|
|
18524
|
+
return strategy.keyRight(currentCellCoords);
|
|
18525
|
+
case Keys.Home:
|
|
18526
|
+
return strategy.keyHome(currentCellCoords, e.ctrlKey);
|
|
18527
|
+
case Keys.End:
|
|
18528
|
+
return strategy.keyEnd(currentCellCoords, e.ctrlKey);
|
|
18529
|
+
case Keys.PageUp:
|
|
18530
|
+
return strategy.keyPageUp(currentCellCoords);
|
|
18531
|
+
case Keys.PageDown:
|
|
18532
|
+
return strategy.keyPageDown(currentCellCoords);
|
|
18533
|
+
default:
|
|
18534
|
+
return currentCellCoords;
|
|
18535
|
+
}
|
|
18536
|
+
}
|
|
18173
18537
|
getCellsForRow(index) {
|
|
18174
18538
|
return this.rows[index].querySelectorAll(this.config.keyGridCells);
|
|
18175
18539
|
}
|
|
@@ -18184,10 +18548,8 @@ class KeyNavigationGridController {
|
|
|
18184
18548
|
return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');
|
|
18185
18549
|
}
|
|
18186
18550
|
isSingleCellExpandedRow(index) {
|
|
18187
|
-
|
|
18188
|
-
|
|
18189
|
-
: this.rows[index].querySelector('.datagrid-row-detail');
|
|
18190
|
-
return (row === null || row === void 0 ? void 0 : row.querySelectorAll(this.config.keyGridCells).length) === 1;
|
|
18551
|
+
var _a;
|
|
18552
|
+
return ((_a = this.rows[index]) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells).length) === 1;
|
|
18191
18553
|
}
|
|
18192
18554
|
actionCellCount(index) {
|
|
18193
18555
|
return this.actionCellsAsArray(index).length;
|
|
@@ -18198,6 +18560,166 @@ class KeyNavigationGridController {
|
|
|
18198
18560
|
isActionCell(cellCoords) {
|
|
18199
18561
|
return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];
|
|
18200
18562
|
}
|
|
18563
|
+
createNextCellCoords(cellCoords) {
|
|
18564
|
+
return {
|
|
18565
|
+
x: cellCoords.x,
|
|
18566
|
+
y: cellCoords.y,
|
|
18567
|
+
};
|
|
18568
|
+
}
|
|
18569
|
+
getNavStrategy(currentCellCoords) {
|
|
18570
|
+
switch (true) {
|
|
18571
|
+
case this.isSingleCellExpandedRow(currentCellCoords.y):
|
|
18572
|
+
return new ExpandedRowKeyNavigationStrategy(this);
|
|
18573
|
+
case this.isDetailsRow(currentCellCoords.y):
|
|
18574
|
+
case this.isExpandedRow(currentCellCoords.y):
|
|
18575
|
+
return new ExpandedColumnsRowKeyNavigationStrategy(this);
|
|
18576
|
+
default:
|
|
18577
|
+
return new DefaultKeyNavigationStrategy(this);
|
|
18578
|
+
}
|
|
18579
|
+
}
|
|
18580
|
+
}
|
|
18581
|
+
|
|
18582
|
+
/*
|
|
18583
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
18584
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
18585
|
+
* This software is released under MIT license.
|
|
18586
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18587
|
+
*/
|
|
18588
|
+
const actionableItemSelectors = [
|
|
18589
|
+
'a[href]',
|
|
18590
|
+
'area[href]',
|
|
18591
|
+
'input:not([disabled])',
|
|
18592
|
+
'button:not([disabled])',
|
|
18593
|
+
'select:not([disabled])',
|
|
18594
|
+
'textarea:not([disabled])',
|
|
18595
|
+
'iframe',
|
|
18596
|
+
'object',
|
|
18597
|
+
'embed',
|
|
18598
|
+
'[contenteditable=true]',
|
|
18599
|
+
'[role=button]:not([disabled])',
|
|
18600
|
+
];
|
|
18601
|
+
function getTabbableItems(el) {
|
|
18602
|
+
const tabbableItemSelectors = [...actionableItemSelectors, '[tabindex="0"]:not([disabled])'];
|
|
18603
|
+
const tabbableSelector = tabbableItemSelectors.join(',');
|
|
18604
|
+
return Array.from(el.querySelectorAll(tabbableSelector));
|
|
18605
|
+
}
|
|
18606
|
+
function isActionableItem(el) {
|
|
18607
|
+
const actionableSelector = actionableItemSelectors.join(',');
|
|
18608
|
+
return el.matches(actionableSelector);
|
|
18609
|
+
}
|
|
18610
|
+
class KeyNavigationGridController {
|
|
18611
|
+
constructor(zone) {
|
|
18612
|
+
this.zone = zone;
|
|
18613
|
+
this.nextCellCoordsEmitter = new EventEmitter(false);
|
|
18614
|
+
this.skipItemFocus = false;
|
|
18615
|
+
this.preventScrollOnFocus = false;
|
|
18616
|
+
this.config = {
|
|
18617
|
+
keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*="display: none"])',
|
|
18618
|
+
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
18619
|
+
keyGrid: '[role=grid]',
|
|
18620
|
+
};
|
|
18621
|
+
this.listenersAdded = false;
|
|
18622
|
+
this.destroy$ = new Subject();
|
|
18623
|
+
}
|
|
18624
|
+
ngOnDestroy() {
|
|
18625
|
+
this.destroy$.next();
|
|
18626
|
+
this.destroy$.complete();
|
|
18627
|
+
}
|
|
18628
|
+
addListeners() {
|
|
18629
|
+
if (this.listenersAdded) {
|
|
18630
|
+
return;
|
|
18631
|
+
}
|
|
18632
|
+
this.zone.runOutsideAngular(() => {
|
|
18633
|
+
fromEvent(this.keyNavUtils.grid, 'mousedown')
|
|
18634
|
+
.pipe(takeUntil(this.destroy$))
|
|
18635
|
+
.subscribe((e) => {
|
|
18636
|
+
// 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
|
|
18637
|
+
if (e.buttons === 1 && !e.ctrlKey) {
|
|
18638
|
+
const activeCell = this.keyNavUtils.cells
|
|
18639
|
+
? Array.from(this.keyNavUtils.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
18640
|
+
: null;
|
|
18641
|
+
if (activeCell) {
|
|
18642
|
+
this.setActiveCell(activeCell);
|
|
18643
|
+
if (!isActionableItem(e.target)) {
|
|
18644
|
+
this.focusElement(activeCell);
|
|
18645
|
+
}
|
|
18646
|
+
}
|
|
18647
|
+
}
|
|
18648
|
+
});
|
|
18649
|
+
fromEvent(this.keyNavUtils.grid, 'wheel')
|
|
18650
|
+
.pipe(takeUntil(this.destroy$))
|
|
18651
|
+
.subscribe(() => {
|
|
18652
|
+
this.nextCellCoordsEmitter.emit(null);
|
|
18653
|
+
});
|
|
18654
|
+
fromEvent(this.keyNavUtils.grid, 'keydown')
|
|
18655
|
+
.pipe(takeUntil(this.destroy$))
|
|
18656
|
+
.subscribe((e) => {
|
|
18657
|
+
// Skip column resize events
|
|
18658
|
+
if (e.target.classList.contains('drag-handle') &&
|
|
18659
|
+
(e.key === Keys.ArrowLeft || e.key === Keys.ArrowRight)) {
|
|
18660
|
+
return;
|
|
18661
|
+
}
|
|
18662
|
+
if (e.key === Keys.ArrowUp ||
|
|
18663
|
+
e.key === Keys.ArrowDown ||
|
|
18664
|
+
e.key === Keys.ArrowLeft ||
|
|
18665
|
+
e.key === Keys.ArrowRight ||
|
|
18666
|
+
e.key === Keys.End ||
|
|
18667
|
+
e.key === Keys.Home ||
|
|
18668
|
+
e.key === Keys.PageUp ||
|
|
18669
|
+
e.key === Keys.PageDown) {
|
|
18670
|
+
const nextCellCoords = this.keyNavUtils.getNextItemCoordinate(e);
|
|
18671
|
+
if (nextCellCoords.y > 0 &&
|
|
18672
|
+
(e.key === Keys.ArrowUp || e.key === Keys.ArrowDown || e.key === Keys.PageUp || e.key === Keys.PageDown)) {
|
|
18673
|
+
this.keyNavUtils.setAriaRowIndexTo(nextCellCoords);
|
|
18674
|
+
this.nextCellCoordsEmitter.emit(nextCellCoords);
|
|
18675
|
+
}
|
|
18676
|
+
const activeItem = this.keyNavUtils.rows
|
|
18677
|
+
? Array.from(this.keyNavUtils.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
18678
|
+
: null;
|
|
18679
|
+
if (activeItem) {
|
|
18680
|
+
this.setActiveCell(activeItem);
|
|
18681
|
+
this.focusElement(activeItem, { preventScroll: this.preventScrollOnFocus });
|
|
18682
|
+
}
|
|
18683
|
+
e.preventDefault();
|
|
18684
|
+
}
|
|
18685
|
+
});
|
|
18686
|
+
});
|
|
18687
|
+
this.listenersAdded = true;
|
|
18688
|
+
}
|
|
18689
|
+
initializeKeyGrid(host) {
|
|
18690
|
+
this.keyNavUtils = new KeyNavigationUtils(host, this.config);
|
|
18691
|
+
this.addListeners();
|
|
18692
|
+
this.resetKeyGrid();
|
|
18693
|
+
}
|
|
18694
|
+
resetKeyGrid() {
|
|
18695
|
+
var _a;
|
|
18696
|
+
(_a = this.keyNavUtils.cells) === null || _a === void 0 ? void 0 : _a.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
18697
|
+
const firstCell = this.keyNavUtils.cells ? this.keyNavUtils.cells[0] : null;
|
|
18698
|
+
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
18699
|
+
}
|
|
18700
|
+
setActiveCell(activeCell) {
|
|
18701
|
+
const prior = this.keyNavUtils.cells
|
|
18702
|
+
? Array.from(this.keyNavUtils.cells).find(c => c.getAttribute('tabindex') === '0')
|
|
18703
|
+
: null;
|
|
18704
|
+
if (prior) {
|
|
18705
|
+
prior.setAttribute('tabindex', '-1');
|
|
18706
|
+
}
|
|
18707
|
+
activeCell.setAttribute('tabindex', '0');
|
|
18708
|
+
}
|
|
18709
|
+
focusElement(activeCell, options = { preventScroll: false }) {
|
|
18710
|
+
if (this.skipItemFocus) {
|
|
18711
|
+
return;
|
|
18712
|
+
}
|
|
18713
|
+
let elementToFocus;
|
|
18714
|
+
if (activeCell.getAttribute('role') === 'columnheader') {
|
|
18715
|
+
elementToFocus = activeCell;
|
|
18716
|
+
}
|
|
18717
|
+
else {
|
|
18718
|
+
const tabbableElements = getTabbableItems(activeCell);
|
|
18719
|
+
elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;
|
|
18720
|
+
}
|
|
18721
|
+
elementToFocus.focus(options);
|
|
18722
|
+
}
|
|
18201
18723
|
}
|
|
18202
18724
|
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18203
18725
|
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
@@ -18268,36 +18790,17 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
18268
18790
|
get active() {
|
|
18269
18791
|
return !!this.filter && this.filter.isActive();
|
|
18270
18792
|
}
|
|
18271
|
-
ngOnChanges() {
|
|
18272
|
-
setTimeout(() => {
|
|
18273
|
-
this.setToggleButtonAriaLabel();
|
|
18274
|
-
});
|
|
18275
|
-
}
|
|
18276
18793
|
ngOnDestroy() {
|
|
18277
18794
|
super.ngOnDestroy();
|
|
18278
18795
|
this.subs.forEach(sub => sub.unsubscribe());
|
|
18279
18796
|
}
|
|
18280
|
-
/**
|
|
18281
|
-
* This is not in a getter to prevent "expression has changed after it was checked" errors.
|
|
18282
|
-
* And it's more performant this way since it only runs on change.
|
|
18283
|
-
*/
|
|
18284
|
-
setToggleButtonAriaLabel() {
|
|
18285
|
-
var _a;
|
|
18286
|
-
const columnElement = (_a = this.elementRef.nativeElement) === null || _a === void 0 ? void 0 : _a.closest('clr-dg-column');
|
|
18287
|
-
const columnTitleElement = columnElement === null || columnElement === void 0 ? void 0 : columnElement.querySelector('.datagrid-column-title');
|
|
18288
|
-
const columnTitle = columnTitleElement === null || columnTitleElement === void 0 ? void 0 : columnTitleElement.textContent.trim().toLocaleLowerCase();
|
|
18289
|
-
this.toggleButtonAriaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {
|
|
18290
|
-
COLUMN: columnTitle || '',
|
|
18291
|
-
});
|
|
18292
|
-
}
|
|
18293
18797
|
}
|
|
18294
18798
|
ClrDatagridFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridFilter, deps: [{ token: FiltersProvider }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: KeyNavigationGridController, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
18295
|
-
ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: { open: ["clrDgFilterOpen", "open"], customFilter: ["clrDgFilter", "customFilter"] }, outputs: { openChange: "clrDgFilterOpenChange" }, providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], usesInheritance: true,
|
|
18799
|
+
ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: { open: ["clrDgFilterOpen", "open"], customFilter: ["clrDgFilter", "customFilter"] }, outputs: { openChange: "clrDgFilterOpenChange" }, providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
|
|
18296
18800
|
<button
|
|
18297
18801
|
class="datagrid-filter-toggle"
|
|
18298
18802
|
type="button"
|
|
18299
18803
|
#anchor
|
|
18300
|
-
[attr.aria-label]="toggleButtonAriaLabel"
|
|
18301
18804
|
[attr.aria-expanded]="ariaExpanded"
|
|
18302
18805
|
[attr.aria-controls]="popoverId"
|
|
18303
18806
|
clrPopoverAnchor
|
|
@@ -18340,7 +18843,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18340
18843
|
class="datagrid-filter-toggle"
|
|
18341
18844
|
type="button"
|
|
18342
18845
|
#anchor
|
|
18343
|
-
[attr.aria-label]="toggleButtonAriaLabel"
|
|
18344
18846
|
[attr.aria-expanded]="ariaExpanded"
|
|
18345
18847
|
[attr.aria-controls]="popoverId"
|
|
18346
18848
|
clrPopoverAnchor
|
|
@@ -19843,13 +20345,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
19843
20345
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
19844
20346
|
*/
|
|
19845
20347
|
class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
19846
|
-
constructor(el, _sort, filters, vcr, detailService, changeDetectorRef) {
|
|
20348
|
+
constructor(el, _sort, filters, vcr, detailService, changeDetectorRef, commonStrings) {
|
|
19847
20349
|
super(filters);
|
|
19848
20350
|
this.el = el;
|
|
19849
20351
|
this._sort = _sort;
|
|
19850
20352
|
this.vcr = vcr;
|
|
19851
20353
|
this.detailService = detailService;
|
|
19852
20354
|
this.changeDetectorRef = changeDetectorRef;
|
|
20355
|
+
this.commonStrings = commonStrings;
|
|
19853
20356
|
this.sortOrderChange = new EventEmitter();
|
|
19854
20357
|
this.filterValueChange = new EventEmitter();
|
|
19855
20358
|
/**
|
|
@@ -19909,18 +20412,14 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
19909
20412
|
if (typeof comparator === 'string') {
|
|
19910
20413
|
this._sortBy = new DatagridPropertyComparator(comparator);
|
|
19911
20414
|
}
|
|
20415
|
+
else if (comparator) {
|
|
20416
|
+
this._sortBy = comparator;
|
|
20417
|
+
}
|
|
20418
|
+
else if (this.field) {
|
|
20419
|
+
this._sortBy = new DatagridPropertyComparator(this.field);
|
|
20420
|
+
}
|
|
19912
20421
|
else {
|
|
19913
|
-
|
|
19914
|
-
this._sortBy = comparator;
|
|
19915
|
-
}
|
|
19916
|
-
else {
|
|
19917
|
-
if (this.field) {
|
|
19918
|
-
this._sortBy = new DatagridPropertyComparator(this.field);
|
|
19919
|
-
}
|
|
19920
|
-
else {
|
|
19921
|
-
delete this._sortBy;
|
|
19922
|
-
}
|
|
19923
|
-
}
|
|
20422
|
+
delete this._sortBy;
|
|
19924
20423
|
}
|
|
19925
20424
|
}
|
|
19926
20425
|
get sortOrder() {
|
|
@@ -20023,6 +20522,9 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20023
20522
|
ngOnInit() {
|
|
20024
20523
|
this.wrappedInjector = new HostWrapper(WrappedColumn, this.vcr);
|
|
20025
20524
|
}
|
|
20525
|
+
ngAfterViewInit() {
|
|
20526
|
+
this.setFilterToggleAriaLabel();
|
|
20527
|
+
}
|
|
20026
20528
|
ngOnChanges(changes) {
|
|
20027
20529
|
if (changes.colType &&
|
|
20028
20530
|
changes.colType.currentValue &&
|
|
@@ -20062,6 +20564,15 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20062
20564
|
}
|
|
20063
20565
|
});
|
|
20064
20566
|
}
|
|
20567
|
+
setFilterToggleAriaLabel() {
|
|
20568
|
+
var _a;
|
|
20569
|
+
const filterToggle = this.el.nativeElement.querySelector('.datagrid-filter-toggle');
|
|
20570
|
+
if (filterToggle) {
|
|
20571
|
+
filterToggle.ariaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {
|
|
20572
|
+
COLUMN: (_a = this === null || this === void 0 ? void 0 : this.titleContainer) === null || _a === void 0 ? void 0 : _a.nativeElement.textContent.trim().toLocaleLowerCase(),
|
|
20573
|
+
});
|
|
20574
|
+
}
|
|
20575
|
+
}
|
|
20065
20576
|
listenForSortingChanges() {
|
|
20066
20577
|
return this._sort.change.subscribe(sort => {
|
|
20067
20578
|
// Need to manually mark the component to be checked
|
|
@@ -20091,10 +20602,10 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20091
20602
|
}
|
|
20092
20603
|
}
|
|
20093
20604
|
}
|
|
20094
|
-
ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: i0.ElementRef }, { token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
20095
|
-
ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
20605
|
+
ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: i0.ElementRef }, { token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
20606
|
+
ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], viewQueries: [{ propertyName: "titleContainer", first: true, predicate: ["titleContainer"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
20096
20607
|
<div class="datagrid-column-flex">
|
|
20097
|
-
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
|
|
20608
|
+
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button" #titleContainer>
|
|
20098
20609
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20099
20610
|
<cds-icon
|
|
20100
20611
|
*ngIf="sortDirection"
|
|
@@ -20126,7 +20637,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
20126
20637
|
<ng-content></ng-content>
|
|
20127
20638
|
</ng-template>
|
|
20128
20639
|
|
|
20129
|
-
<span class="datagrid-column-title" *ngIf="!sortable">
|
|
20640
|
+
<span class="datagrid-column-title" *ngIf="!sortable" #titleContainer>
|
|
20130
20641
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20131
20642
|
</span>
|
|
20132
20643
|
|
|
@@ -20139,7 +20650,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20139
20650
|
selector: 'clr-dg-column',
|
|
20140
20651
|
template: `
|
|
20141
20652
|
<div class="datagrid-column-flex">
|
|
20142
|
-
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
|
|
20653
|
+
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button" #titleContainer>
|
|
20143
20654
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20144
20655
|
<cds-icon
|
|
20145
20656
|
*ngIf="sortDirection"
|
|
@@ -20171,7 +20682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20171
20682
|
<ng-content></ng-content>
|
|
20172
20683
|
</ng-template>
|
|
20173
20684
|
|
|
20174
|
-
<span class="datagrid-column-title" *ngIf="!sortable">
|
|
20685
|
+
<span class="datagrid-column-title" *ngIf="!sortable" #titleContainer>
|
|
20175
20686
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20176
20687
|
</span>
|
|
20177
20688
|
|
|
@@ -20186,7 +20697,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20186
20697
|
},
|
|
20187
20698
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
20188
20699
|
}]
|
|
20189
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
|
|
20700
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }, { type: ClrCommonStringsService }]; }, propDecorators: { filterStringPlaceholder: [{
|
|
20190
20701
|
type: Input,
|
|
20191
20702
|
args: ['clrFilterStringPlaceholder']
|
|
20192
20703
|
}], filterNumberMaxPlaceholder: [{
|
|
@@ -20201,6 +20712,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20201
20712
|
}], filterValueChange: [{
|
|
20202
20713
|
type: Output,
|
|
20203
20714
|
args: ['clrFilterValueChange']
|
|
20715
|
+
}], titleContainer: [{
|
|
20716
|
+
type: ViewChild,
|
|
20717
|
+
args: ['titleContainer', { read: ElementRef }]
|
|
20204
20718
|
}], colType: [{
|
|
20205
20719
|
type: Input,
|
|
20206
20720
|
args: ['clrDgColType']
|
|
@@ -20303,6 +20817,10 @@ class Items {
|
|
|
20303
20817
|
this._pageSub.unsubscribe();
|
|
20304
20818
|
}
|
|
20305
20819
|
}
|
|
20820
|
+
smartenDown() {
|
|
20821
|
+
this._smart = false;
|
|
20822
|
+
this.destroy();
|
|
20823
|
+
}
|
|
20306
20824
|
smartenUp() {
|
|
20307
20825
|
this._smart = true;
|
|
20308
20826
|
/*
|
|
@@ -21075,77 +21593,23 @@ class ClrDatagridSelectionCellDirective {
|
|
|
21075
21593
|
if (this.selection.rowSelectionMode) {
|
|
21076
21594
|
return;
|
|
21077
21595
|
}
|
|
21078
|
-
// If click was outside the label/input, forward the click to the input.
|
|
21079
|
-
if (event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT') {
|
|
21080
|
-
(_a = event.target.querySelector('input')) === null || _a === void 0 ? void 0 : _a.click();
|
|
21081
|
-
}
|
|
21082
|
-
}
|
|
21083
|
-
}
|
|
21084
|
-
ClrDatagridSelectionCellDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridSelectionCellDirective, deps: [{ token: Selection }], target: i0.ɵɵFactoryTarget.Directive });
|
|
21085
|
-
ClrDatagridSelectionCellDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select", host: { listeners: { "click": "onSelectionCellClick($event)" } }, ngImport: i0 });
|
|
21086
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridSelectionCellDirective, decorators: [{
|
|
21087
|
-
type: Directive,
|
|
21088
|
-
args: [{
|
|
21089
|
-
selector: '.datagrid-select',
|
|
21090
|
-
}]
|
|
21091
|
-
}], ctorParameters: function () { return [{ type: Selection }]; }, propDecorators: { onSelectionCellClick: [{
|
|
21092
|
-
type: HostListener,
|
|
21093
|
-
args: ['click', ['$event']]
|
|
21094
|
-
}] } });
|
|
21095
|
-
|
|
21096
|
-
/*
|
|
21097
|
-
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
21098
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
21099
|
-
* This software is released under MIT license.
|
|
21100
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
21101
|
-
*/
|
|
21102
|
-
class DatagridCellRenderer {
|
|
21103
|
-
constructor(el, renderer, organizer) {
|
|
21104
|
-
this.el = el;
|
|
21105
|
-
this.renderer = renderer;
|
|
21106
|
-
this.subscriptions = [];
|
|
21107
|
-
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
21108
|
-
}
|
|
21109
|
-
ngOnDestroy() {
|
|
21110
|
-
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
21111
|
-
if (this.stateSubscription) {
|
|
21112
|
-
this.stateSubscription.unsubscribe();
|
|
21113
|
-
}
|
|
21114
|
-
}
|
|
21115
|
-
resetState(state) {
|
|
21116
|
-
this.setWidth(state);
|
|
21117
|
-
this.setHidden(state);
|
|
21118
|
-
}
|
|
21119
|
-
setWidth(state) {
|
|
21120
|
-
if (state.strictWidth) {
|
|
21121
|
-
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21122
|
-
}
|
|
21123
|
-
else {
|
|
21124
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21125
|
-
}
|
|
21126
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
21127
|
-
}
|
|
21128
|
-
setHidden(state) {
|
|
21129
|
-
if (state.hidden) {
|
|
21130
|
-
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
21131
|
-
}
|
|
21132
|
-
else {
|
|
21133
|
-
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
21596
|
+
// If click was outside the label/input, forward the click to the input.
|
|
21597
|
+
if (event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT') {
|
|
21598
|
+
(_a = event.target.querySelector('input')) === null || _a === void 0 ? void 0 : _a.click();
|
|
21134
21599
|
}
|
|
21135
21600
|
}
|
|
21136
|
-
clearWidth() {
|
|
21137
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21138
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
21139
|
-
}
|
|
21140
21601
|
}
|
|
21141
|
-
|
|
21142
|
-
|
|
21143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type:
|
|
21602
|
+
ClrDatagridSelectionCellDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridSelectionCellDirective, deps: [{ token: Selection }], target: i0.ɵɵFactoryTarget.Directive });
|
|
21603
|
+
ClrDatagridSelectionCellDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select", host: { listeners: { "click": "onSelectionCellClick($event)" } }, ngImport: i0 });
|
|
21604
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridSelectionCellDirective, decorators: [{
|
|
21144
21605
|
type: Directive,
|
|
21145
21606
|
args: [{
|
|
21146
|
-
selector: '
|
|
21607
|
+
selector: '.datagrid-select',
|
|
21147
21608
|
}]
|
|
21148
|
-
}], ctorParameters: function () { return [{ type:
|
|
21609
|
+
}], ctorParameters: function () { return [{ type: Selection }]; }, propDecorators: { onSelectionCellClick: [{
|
|
21610
|
+
type: HostListener,
|
|
21611
|
+
args: ['click', ['$event']]
|
|
21612
|
+
}] } });
|
|
21149
21613
|
|
|
21150
21614
|
/*
|
|
21151
21615
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -21163,6 +21627,7 @@ class ClrDatagridRow {
|
|
|
21163
21627
|
this.detailService = detailService;
|
|
21164
21628
|
this.displayMode = displayMode;
|
|
21165
21629
|
this.vcr = vcr;
|
|
21630
|
+
this.el = el;
|
|
21166
21631
|
this.commonStrings = commonStrings;
|
|
21167
21632
|
this.items = items;
|
|
21168
21633
|
this.document = document;
|
|
@@ -21305,6 +21770,16 @@ class ClrDatagridRow {
|
|
|
21305
21770
|
}
|
|
21306
21771
|
if (viewChange === DatagridDisplayMode.CALCULATE) {
|
|
21307
21772
|
this.displayCells = false;
|
|
21773
|
+
// Inserts a fixed cell if any of these conditions are true.
|
|
21774
|
+
const fixedCellConditions = [
|
|
21775
|
+
this.selection.selectionType !== this.SELECTION_TYPE.None,
|
|
21776
|
+
this.rowActionService.hasActionableRow,
|
|
21777
|
+
this.globalExpandable.hasExpandableRow,
|
|
21778
|
+
this.detailService.enabled,
|
|
21779
|
+
];
|
|
21780
|
+
fixedCellConditions
|
|
21781
|
+
.filter(Boolean)
|
|
21782
|
+
.forEach(() => this._calculatedCells.insert(this._fixedCellTemplate.createEmbeddedView(null)));
|
|
21308
21783
|
this.dgCells.forEach(cell => {
|
|
21309
21784
|
if (!cell._view.destroyed) {
|
|
21310
21785
|
this._calculatedCells.insert(cell._view);
|
|
@@ -21346,7 +21821,7 @@ class ClrDatagridRow {
|
|
|
21346
21821
|
* selection browser functionality, which is inconsistently implemented in browsers anyway.
|
|
21347
21822
|
*/
|
|
21348
21823
|
clearRanges(event) {
|
|
21349
|
-
if (event.shiftKey) {
|
|
21824
|
+
if (this.selection.rowSelectionMode && event.shiftKey) {
|
|
21350
21825
|
this.document.getSelection().removeAllRanges();
|
|
21351
21826
|
// Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();
|
|
21352
21827
|
// We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by
|
|
@@ -21363,7 +21838,7 @@ class ClrDatagridRow {
|
|
|
21363
21838
|
selectRow(selected = !this.selected, $event) {
|
|
21364
21839
|
// The label also captures clicks that bubble up to the row event listener, causing
|
|
21365
21840
|
// this handler to run twice. This exits early to prevent toggling the checkbox twice.
|
|
21366
|
-
if ($event.target.tagName === 'LABEL') {
|
|
21841
|
+
if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL' || !this._selectable) {
|
|
21367
21842
|
return;
|
|
21368
21843
|
}
|
|
21369
21844
|
if (this.selection.selectionType === this.SELECTION_TYPE.Single) {
|
|
@@ -21402,7 +21877,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
21402
21877
|
DatagridIfExpandService,
|
|
21403
21878
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21404
21879
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21405
|
-
], 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" }] });
|
|
21880
|
+
], 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</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: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
21406
21881
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
21407
21882
|
type: Component,
|
|
21408
21883
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -21415,7 +21890,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21415
21890
|
DatagridIfExpandService,
|
|
21416
21891
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21417
21892
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21418
|
-
], template: "
|
|
21893
|
+
], 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</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" }]
|
|
21419
21894
|
}], ctorParameters: function () {
|
|
21420
21895
|
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: [{
|
|
21421
21896
|
type: Inject,
|
|
@@ -21441,7 +21916,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21441
21916
|
args: [ClrDatagridCell]
|
|
21442
21917
|
}], expandAnimation: [{
|
|
21443
21918
|
type: ViewChild,
|
|
21444
|
-
args: [
|
|
21919
|
+
args: [ClrExpandableAnimationDirective]
|
|
21445
21920
|
}], detailButton: [{
|
|
21446
21921
|
type: ViewChild,
|
|
21447
21922
|
args: ['detailButton']
|
|
@@ -21454,6 +21929,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21454
21929
|
}], _calculatedCells: [{
|
|
21455
21930
|
type: ViewChild,
|
|
21456
21931
|
args: ['calculatedCells', { read: ViewContainerRef }]
|
|
21932
|
+
}], _fixedCellTemplate: [{
|
|
21933
|
+
type: ViewChild,
|
|
21934
|
+
args: ['fixedCellTemplate']
|
|
21457
21935
|
}], item: [{
|
|
21458
21936
|
type: Input,
|
|
21459
21937
|
args: ['clrDgItem']
|
|
@@ -21562,6 +22040,7 @@ const defaultCdkFixedSizeVirtualScrollInputs = {
|
|
|
21562
22040
|
};
|
|
21563
22041
|
class ClrDatagridVirtualScrollDirective {
|
|
21564
22042
|
constructor(changeDetectorRef, iterableDiffers, items, ngZone, renderer2, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, columnsService, injector) {
|
|
22043
|
+
var _a;
|
|
21565
22044
|
this.changeDetectorRef = changeDetectorRef;
|
|
21566
22045
|
this.iterableDiffers = iterableDiffers;
|
|
21567
22046
|
this.items = items;
|
|
@@ -21577,9 +22056,11 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21577
22056
|
this.injector = injector;
|
|
21578
22057
|
this.renderedRangeChange = new EventEmitter();
|
|
21579
22058
|
this.persistItems = true;
|
|
22059
|
+
this.shouldUpdateAriaRowIndexes = false;
|
|
21580
22060
|
this._cdkFixedSizeVirtualScrollInputs = Object.assign({}, defaultCdkFixedSizeVirtualScrollInputs);
|
|
21581
22061
|
this.subscriptions = [];
|
|
21582
22062
|
this.topIndex = 0;
|
|
22063
|
+
// @deprecated remove the mutation observer when `datagrid-compact` class is deleted
|
|
21583
22064
|
this.mutationChanges = new MutationObserver((mutations) => {
|
|
21584
22065
|
mutations.forEach((mutation) => {
|
|
21585
22066
|
// it is possible this to be called twice because the old class is removed and the new added
|
|
@@ -21597,12 +22078,21 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21597
22078
|
this.datagridElementRef = datagrid.el;
|
|
21598
22079
|
// default
|
|
21599
22080
|
this.cdkVirtualForTemplateCacheSize = 20;
|
|
22081
|
+
const rowHeightToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-row-height');
|
|
22082
|
+
const rowHeightValue = +((_a = /calc\(([0-9]+) \* calc\(\(1rem \/ 20\) \* 1\)\)/.exec(rowHeightToken)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
22083
|
+
if (rowHeightValue && this.itemSize > rowHeightValue) {
|
|
22084
|
+
this.itemSize = rowHeightValue;
|
|
22085
|
+
}
|
|
21600
22086
|
this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
|
|
21601
22087
|
attributeFilter: ['class'],
|
|
21602
22088
|
attributeOldValue: true,
|
|
21603
22089
|
});
|
|
21604
22090
|
this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
|
|
21605
22091
|
}
|
|
22092
|
+
get totalContentHeight() {
|
|
22093
|
+
var _a;
|
|
22094
|
+
return ((_a = this.virtualScrollViewport) === null || _a === void 0 ? void 0 : _a._totalContentHeight) || '';
|
|
22095
|
+
}
|
|
21606
22096
|
get cdkVirtualForOf() {
|
|
21607
22097
|
return this.cdkVirtualForInputs.cdkVirtualForOf;
|
|
21608
22098
|
}
|
|
@@ -21655,6 +22145,12 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21655
22145
|
this.updateFixedSizeVirtualScrollInputs();
|
|
21656
22146
|
}
|
|
21657
22147
|
set dataRange(range) {
|
|
22148
|
+
if (!range) {
|
|
22149
|
+
return;
|
|
22150
|
+
}
|
|
22151
|
+
if (this.items.smart) {
|
|
22152
|
+
this.items.smartenDown();
|
|
22153
|
+
}
|
|
21658
22154
|
this.totalItems = range.total;
|
|
21659
22155
|
this.updateDataRange(range.skip, range.data);
|
|
21660
22156
|
}
|
|
@@ -21662,11 +22158,7 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21662
22158
|
return this._totalItems;
|
|
21663
22159
|
}
|
|
21664
22160
|
set totalItems(value) {
|
|
21665
|
-
if (this._totalItems === value) {
|
|
21666
|
-
return;
|
|
21667
|
-
}
|
|
21668
22161
|
this._totalItems = value;
|
|
21669
|
-
this.populatePlaceholderData();
|
|
21670
22162
|
}
|
|
21671
22163
|
ngAfterViewInit() {
|
|
21672
22164
|
this.injector.runInContext(() => {
|
|
@@ -21677,13 +22169,17 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21677
22169
|
this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector('[role="grid"]');
|
|
21678
22170
|
this.updateCdkVirtualForInputs();
|
|
21679
22171
|
this.subscriptions.push(this.items.change.subscribe(newItems => {
|
|
21680
|
-
this.
|
|
22172
|
+
if (this.items.smart) {
|
|
22173
|
+
this.cdkVirtualFor.cdkVirtualForOf = newItems;
|
|
22174
|
+
}
|
|
22175
|
+
this.shouldUpdateAriaRowIndexes = true;
|
|
21681
22176
|
}), this.cdkVirtualFor.dataStream.subscribe(data => {
|
|
21682
22177
|
this.updateAriaRowCount(data.length);
|
|
21683
22178
|
}), this.virtualScrollViewport.scrolledIndexChange.subscribe(index => {
|
|
21684
22179
|
this.topIndex = index;
|
|
21685
22180
|
}), this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {
|
|
21686
22181
|
this.renderedRangeChange.emit(renderedRange);
|
|
22182
|
+
this.shouldUpdateAriaRowIndexes = true;
|
|
21687
22183
|
}), this.datagrid.refresh.subscribe(datagridState => {
|
|
21688
22184
|
if (datagridState.filters) {
|
|
21689
22185
|
this.scrollToIndex(0);
|
|
@@ -21695,7 +22191,10 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21695
22191
|
ngDoCheck() {
|
|
21696
22192
|
var _a;
|
|
21697
22193
|
(_a = this.cdkVirtualFor) === null || _a === void 0 ? void 0 : _a.ngDoCheck();
|
|
21698
|
-
this.
|
|
22194
|
+
if (this.shouldUpdateAriaRowIndexes) {
|
|
22195
|
+
this.updateAriaRowIndexes();
|
|
22196
|
+
this.shouldUpdateAriaRowIndexes = false;
|
|
22197
|
+
}
|
|
21699
22198
|
}
|
|
21700
22199
|
ngOnDestroy() {
|
|
21701
22200
|
var _a, _b, _c;
|
|
@@ -21716,16 +22215,13 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21716
22215
|
var _a;
|
|
21717
22216
|
(_a = this.virtualScrollViewport) === null || _a === void 0 ? void 0 : _a.scrollToIndex(index, behavior);
|
|
21718
22217
|
}
|
|
21719
|
-
populatePlaceholderData() {
|
|
21720
|
-
this.cdkVirtualForOf = Array(this.totalItems);
|
|
21721
|
-
}
|
|
21722
22218
|
updateDataRange(skip, data) {
|
|
21723
|
-
|
|
21724
|
-
|
|
22219
|
+
let items = this.cdkVirtualForOf;
|
|
22220
|
+
if (!this.persistItems || !items || (items === null || items === void 0 ? void 0 : items.length) !== this.totalItems) {
|
|
22221
|
+
items = Array(this.totalItems);
|
|
21725
22222
|
}
|
|
21726
|
-
const items = this.items.all;
|
|
21727
22223
|
items.splice(skip, data.length, ...data);
|
|
21728
|
-
this.
|
|
22224
|
+
this.cdkVirtualForOf = Array.from(items);
|
|
21729
22225
|
}
|
|
21730
22226
|
updateCdkVirtualForInputs() {
|
|
21731
22227
|
if (this.cdkVirtualFor) {
|
|
@@ -21751,42 +22247,21 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21751
22247
|
const rootElements = viewRef.rootNodes;
|
|
21752
22248
|
const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');
|
|
21753
22249
|
const rowRoleElement = datagridRowElement === null || datagridRowElement === void 0 ? void 0 : datagridRowElement.querySelector('[role="row"]');
|
|
21754
|
-
|
|
21755
|
-
rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.
|
|
22250
|
+
const newAriaRowIndex = (viewRef.context.index + 1).toString();
|
|
22251
|
+
if ((rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.getAttribute('aria-rowindex')) !== newAriaRowIndex) {
|
|
22252
|
+
// aria-rowindex should start with one, not zero, so we have to add one to the zero-based index
|
|
22253
|
+
rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.setAttribute('aria-rowindex', newAriaRowIndex);
|
|
22254
|
+
}
|
|
21756
22255
|
}
|
|
21757
22256
|
}
|
|
21758
22257
|
createVirtualScrollViewportForDatagrid(changeDetectorRef, ngZone, renderer2, directionality, scrollDispatcher, viewportRuler, datagridElementRef, virtualScrollStrategy) {
|
|
21759
|
-
const
|
|
21760
|
-
const datagridTableElement = datagridElementRef.nativeElement.querySelector('.datagrid-table');
|
|
22258
|
+
const datagridContentElement = datagridElementRef.nativeElement.querySelector('.datagrid-content');
|
|
21761
22259
|
const datagridRowsElement = datagridElementRef.nativeElement.querySelector('.datagrid-rows');
|
|
21762
|
-
const
|
|
21763
|
-
let topOffset = 0;
|
|
21764
|
-
let totalContentSize = 0;
|
|
21765
|
-
function updateDatagridElementStyles() {
|
|
21766
|
-
datagridRowsElement.style.transform = `translateY(${topOffset}px)`;
|
|
21767
|
-
datagridRowsElement.style.height = `${totalContentSize - topOffset}px`;
|
|
21768
|
-
}
|
|
21769
|
-
const virtualScrollViewport = createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
21770
|
-
virtualScrollViewport._contentWrapper = {
|
|
21771
|
-
nativeElement: {
|
|
21772
|
-
style: {
|
|
21773
|
-
set transform(value) {
|
|
21774
|
-
var _a;
|
|
21775
|
-
topOffset = value === undefined ? 0 : +((_a = /translateY\(([0-9]+)px\)/.exec(value)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
21776
|
-
updateDatagridElementStyles();
|
|
21777
|
-
},
|
|
21778
|
-
},
|
|
21779
|
-
},
|
|
21780
|
-
};
|
|
21781
|
-
virtualScrollViewport.setTotalContentSize = (value) => {
|
|
21782
|
-
totalContentSize = value;
|
|
21783
|
-
datagridTableElement.style.height = `${totalContentSize}px`;
|
|
21784
|
-
updateDatagridElementStyles();
|
|
21785
|
-
};
|
|
22260
|
+
const virtualScrollViewport = createCdkVirtualScrollViewport(new ElementRef(datagridContentElement), new ElementRef(datagridRowsElement), changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
21786
22261
|
return virtualScrollViewport;
|
|
21787
22262
|
}
|
|
21788
22263
|
}
|
|
21789
|
-
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
|
|
22264
|
+
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 });
|
|
21790
22265
|
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 });
|
|
21791
22266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, decorators: [{
|
|
21792
22267
|
type: Directive,
|
|
@@ -21795,9 +22270,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21795
22270
|
providers: [Items],
|
|
21796
22271
|
}]
|
|
21797
22272
|
}], ctorParameters: function () {
|
|
21798
|
-
return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: Items, decorators: [{
|
|
21799
|
-
type:
|
|
21800
|
-
|
|
22273
|
+
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: [{
|
|
22274
|
+
type: Inject,
|
|
22275
|
+
args: [forwardRef(() => ClrDatagrid)]
|
|
22276
|
+
}] }, { type: ColumnsService }, { type: i0.EnvironmentInjector }];
|
|
21801
22277
|
}, propDecorators: { renderedRangeChange: [{
|
|
21802
22278
|
type: Output
|
|
21803
22279
|
}], persistItems: [{
|
|
@@ -21828,9 +22304,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21828
22304
|
type: Input,
|
|
21829
22305
|
args: ['clrVirtualDataRange']
|
|
21830
22306
|
}] } });
|
|
21831
|
-
function createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable) {
|
|
22307
|
+
function createCdkVirtualScrollViewport(datagridDivElementRef, contentWrapper, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable) {
|
|
22308
|
+
let viewPort;
|
|
21832
22309
|
if (+VERSION.major < 19) {
|
|
21833
|
-
|
|
22310
|
+
viewPort = new CdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable);
|
|
21834
22311
|
}
|
|
21835
22312
|
else {
|
|
21836
22313
|
const virtualScrollViewportInjector = Injector.create({
|
|
@@ -21848,8 +22325,10 @@ function createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef
|
|
|
21848
22325
|
{ provide: CdkVirtualScrollViewport, useClass: CdkVirtualScrollViewport },
|
|
21849
22326
|
],
|
|
21850
22327
|
});
|
|
21851
|
-
|
|
22328
|
+
viewPort = virtualScrollViewportInjector.get(CdkVirtualScrollViewport);
|
|
21852
22329
|
}
|
|
22330
|
+
viewPort._contentWrapper = contentWrapper;
|
|
22331
|
+
return viewPort;
|
|
21853
22332
|
}
|
|
21854
22333
|
function createCdkVirtualForOfDirective(viewContainerRef, templateRef, iterableDiffers, viewRepeater, virtualScrollViewport, ngZone) {
|
|
21855
22334
|
if (+VERSION.major < 19) {
|
|
@@ -21942,6 +22421,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21942
22421
|
type: Injectable
|
|
21943
22422
|
}], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
|
|
21944
22423
|
|
|
22424
|
+
/*
|
|
22425
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
22426
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
22427
|
+
* This software is released under MIT license.
|
|
22428
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
22429
|
+
*/
|
|
22430
|
+
class DatagridCellRenderer {
|
|
22431
|
+
constructor(el, renderer, organizer) {
|
|
22432
|
+
this.el = el;
|
|
22433
|
+
this.renderer = renderer;
|
|
22434
|
+
this.subscriptions = [];
|
|
22435
|
+
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
22436
|
+
}
|
|
22437
|
+
ngOnDestroy() {
|
|
22438
|
+
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
22439
|
+
if (this.stateSubscription) {
|
|
22440
|
+
this.stateSubscription.unsubscribe();
|
|
22441
|
+
}
|
|
22442
|
+
}
|
|
22443
|
+
resetState(state) {
|
|
22444
|
+
this.setWidth(state);
|
|
22445
|
+
this.setHidden(state);
|
|
22446
|
+
}
|
|
22447
|
+
setWidth(state) {
|
|
22448
|
+
if (state.strictWidth) {
|
|
22449
|
+
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22450
|
+
}
|
|
22451
|
+
else {
|
|
22452
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22453
|
+
}
|
|
22454
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
22455
|
+
}
|
|
22456
|
+
setHidden(state) {
|
|
22457
|
+
if (state.hidden) {
|
|
22458
|
+
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
22459
|
+
}
|
|
22460
|
+
else {
|
|
22461
|
+
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
22462
|
+
}
|
|
22463
|
+
}
|
|
22464
|
+
clearWidth() {
|
|
22465
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22466
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
22467
|
+
}
|
|
22468
|
+
}
|
|
22469
|
+
DatagridCellRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DatagridRenderOrganizer }], target: i0.ɵɵFactoryTarget.Directive });
|
|
22470
|
+
DatagridCellRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridCellRenderer, selector: "clr-dg-cell", ngImport: i0 });
|
|
22471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, decorators: [{
|
|
22472
|
+
type: Directive,
|
|
22473
|
+
args: [{
|
|
22474
|
+
selector: 'clr-dg-cell',
|
|
22475
|
+
}]
|
|
22476
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }]; } });
|
|
22477
|
+
|
|
21945
22478
|
/*
|
|
21946
22479
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
21947
22480
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -22036,6 +22569,11 @@ class ClrDatagrid {
|
|
|
22036
22569
|
* Output emitted whenever the data needs to be refreshed, based on user action or external ones
|
|
22037
22570
|
*/
|
|
22038
22571
|
this.refresh = new EventEmitter(false);
|
|
22572
|
+
/**
|
|
22573
|
+
* The application can provide custom select all logic.
|
|
22574
|
+
*/
|
|
22575
|
+
this.customSelectAllEnabled = false;
|
|
22576
|
+
this.customSelectAll = new EventEmitter();
|
|
22039
22577
|
/* reference to the enum so that template can access */
|
|
22040
22578
|
this.SELECTION_TYPE = SelectionType;
|
|
22041
22579
|
/**
|
|
@@ -22102,13 +22640,18 @@ class ClrDatagrid {
|
|
|
22102
22640
|
get allSelected() {
|
|
22103
22641
|
return this.selection.isAllSelected();
|
|
22104
22642
|
}
|
|
22105
|
-
set allSelected(
|
|
22106
|
-
|
|
22107
|
-
|
|
22108
|
-
|
|
22109
|
-
|
|
22110
|
-
|
|
22111
|
-
|
|
22643
|
+
set allSelected(value) {
|
|
22644
|
+
if (this.customSelectAllEnabled) {
|
|
22645
|
+
this.customSelectAll.emit(value);
|
|
22646
|
+
}
|
|
22647
|
+
else {
|
|
22648
|
+
/**
|
|
22649
|
+
* This is a setter but we ignore the value.
|
|
22650
|
+
* It's strange, but it lets us have an indeterminate state where only
|
|
22651
|
+
* some of the items are selected.
|
|
22652
|
+
*/
|
|
22653
|
+
this.selection.toggleAll();
|
|
22654
|
+
}
|
|
22112
22655
|
}
|
|
22113
22656
|
ngAfterContentInit() {
|
|
22114
22657
|
if (!this.items.smart) {
|
|
@@ -22136,13 +22679,18 @@ class ClrDatagrid {
|
|
|
22136
22679
|
});
|
|
22137
22680
|
this.updateDetailState();
|
|
22138
22681
|
// retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
|
|
22139
|
-
if (this.virtualScroll) {
|
|
22140
|
-
|
|
22141
|
-
|
|
22142
|
-
|
|
22143
|
-
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
22682
|
+
if (this.virtualScroll && this.activeCellCoords) {
|
|
22683
|
+
this.zone.runOutsideAngular(() => {
|
|
22684
|
+
const row = Array.from(this.rows).find(row => {
|
|
22685
|
+
return row.el.nativeElement.children[0].ariaRowIndex === this.activeCellCoords.ariaRowIndex;
|
|
22144
22686
|
});
|
|
22145
|
-
|
|
22687
|
+
if (!row) {
|
|
22688
|
+
return;
|
|
22689
|
+
}
|
|
22690
|
+
const activeCell = row.el.nativeElement.querySelectorAll(this.keyNavigation.config.keyGridCells)[this.activeCellCoords.x];
|
|
22691
|
+
this.keyNavigation.setActiveCell(activeCell);
|
|
22692
|
+
this.keyNavigation.focusElement(activeCell, { preventScroll: true });
|
|
22693
|
+
});
|
|
22146
22694
|
}
|
|
22147
22695
|
}));
|
|
22148
22696
|
}
|
|
@@ -22151,10 +22699,12 @@ class ClrDatagrid {
|
|
|
22151
22699
|
*/
|
|
22152
22700
|
ngAfterViewInit() {
|
|
22153
22701
|
this.keyNavigation.initializeKeyGrid(this.el.nativeElement);
|
|
22702
|
+
// the virtual scroll will handle the scrolling
|
|
22703
|
+
this.keyNavigation.preventScrollOnFocus = !!this.virtualScroll;
|
|
22154
22704
|
this.updateDetailState();
|
|
22155
22705
|
// TODO: determine if we can get rid of provider wiring in view init so that subscriptions can be done earlier
|
|
22156
22706
|
this.refresh.emit(this.stateProvider.state);
|
|
22157
|
-
this._subscriptions.push(this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
|
|
22707
|
+
this._subscriptions.push(this.stickyHeaders.changes.subscribe(() => this.resize()), this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
|
|
22158
22708
|
if (this.selection.selectionType === SelectionType.Single) {
|
|
22159
22709
|
this.singleSelectedChanged.emit(s);
|
|
22160
22710
|
}
|
|
@@ -22200,6 +22750,15 @@ class ClrDatagrid {
|
|
|
22200
22750
|
else {
|
|
22201
22751
|
// Set state, style for the datagrid to CALCULATE and insert row & columns into containers
|
|
22202
22752
|
this.renderer.addClass(this.el.nativeElement, 'datagrid-calculate-mode');
|
|
22753
|
+
// Inserts a fixed column if any of these conditions are true.
|
|
22754
|
+
const fixedColumnConditions = [
|
|
22755
|
+
this.rowActionService.hasActionableRow,
|
|
22756
|
+
this.selection.selectionType !== this.SELECTION_TYPE.None,
|
|
22757
|
+
this.expandableRows.hasExpandableRow || this.detailService.enabled,
|
|
22758
|
+
];
|
|
22759
|
+
fixedColumnConditions
|
|
22760
|
+
.filter(Boolean)
|
|
22761
|
+
.forEach(() => this._projectedCalculationColumns.insert(this._fixedColumnTemplate.createEmbeddedView(null)));
|
|
22203
22762
|
this.columns.forEach(column => {
|
|
22204
22763
|
this._projectedCalculationColumns.insert(column._view);
|
|
22205
22764
|
});
|
|
@@ -22221,16 +22780,33 @@ class ClrDatagrid {
|
|
|
22221
22780
|
}
|
|
22222
22781
|
}));
|
|
22223
22782
|
});
|
|
22783
|
+
if (this.virtualScroll) {
|
|
22784
|
+
this._subscriptions.push(fromEvent(this.contentWrapper.nativeElement, 'scroll').subscribe(() => {
|
|
22785
|
+
this.datagridHeader.nativeElement.scrollLeft = this.contentWrapper.nativeElement.scrollLeft;
|
|
22786
|
+
}), this.keyNavigation.nextCellCoordsEmitter.subscribe(cellCoords => {
|
|
22787
|
+
var _a;
|
|
22788
|
+
if (!(cellCoords === null || cellCoords === void 0 ? void 0 : cellCoords.ariaRowIndex)) {
|
|
22789
|
+
this.activeCellCoords = null;
|
|
22790
|
+
return;
|
|
22791
|
+
}
|
|
22792
|
+
if (cellCoords.ariaRowIndex === ((_a = this.activeCellCoords) === null || _a === void 0 ? void 0 : _a.ariaRowIndex)) {
|
|
22793
|
+
this.activeCellCoords = cellCoords;
|
|
22794
|
+
return;
|
|
22795
|
+
}
|
|
22796
|
+
this.activeCellCoords = cellCoords;
|
|
22797
|
+
// aria-rowindex is always + 1. Check virtual scroller updateAriaRowIndexes method.
|
|
22798
|
+
const rowIndex = Number(cellCoords.ariaRowIndex) - 1;
|
|
22799
|
+
this.virtualScroll.scrollToIndex(rowIndex);
|
|
22800
|
+
}));
|
|
22801
|
+
}
|
|
22224
22802
|
}
|
|
22225
22803
|
ngOnDestroy() {
|
|
22226
22804
|
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
22227
22805
|
}
|
|
22228
22806
|
toggleAllSelected($event) {
|
|
22807
|
+
var _a;
|
|
22229
22808
|
$event.preventDefault();
|
|
22230
|
-
|
|
22231
|
-
return;
|
|
22232
|
-
}
|
|
22233
|
-
this.allSelected = !this.allSelected;
|
|
22809
|
+
(_a = this.selectAllCheckbox) === null || _a === void 0 ? void 0 : _a.nativeElement.click();
|
|
22234
22810
|
}
|
|
22235
22811
|
resize() {
|
|
22236
22812
|
this.organizer.resize();
|
|
@@ -22266,7 +22842,7 @@ class ClrDatagrid {
|
|
|
22266
22842
|
}
|
|
22267
22843
|
}
|
|
22268
22844
|
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 });
|
|
22269
|
-
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: [
|
|
22845
|
+
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", "class.datagrid-virtual-scroll": "!!virtualScroll" } }, providers: [
|
|
22270
22846
|
Selection,
|
|
22271
22847
|
Sort,
|
|
22272
22848
|
FiltersProvider,
|
|
@@ -22282,7 +22858,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
22282
22858
|
ColumnsService,
|
|
22283
22859
|
DisplayModeService,
|
|
22284
22860
|
KeyNavigationGridController,
|
|
22285
|
-
], 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" }] });
|
|
22861
|
+
], 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, emitDistinctChangesOnly: false }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "datagridHeader", first: true, predicate: ["datagridHeader"], descendants: true, read: ElementRef }, { propertyName: "contentWrapper", first: true, predicate: ["contentWrapper"], 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\" #datagridHeader>\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 *ngIf=\"virtualScroll\" class=\"datagrid-row-sticky datagrid-row-sticky-scroll\">\n <div class=\"datagrid-column\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"datagrid-content\" [class.datagrid-content-virtual]=\"virtualScroll\" #contentWrapper>\n <div\n *ngIf=\"virtualScroll\"\n class=\"datagrid-content-virtual-spacer\"\n [style.height]=\"virtualScroll?.totalContentHeight\"\n ></div>\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 </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" }] });
|
|
22286
22862
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
22287
22863
|
type: Component,
|
|
22288
22864
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -22304,7 +22880,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22304
22880
|
], host: {
|
|
22305
22881
|
'[class.datagrid-host]': 'true',
|
|
22306
22882
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
22307
|
-
|
|
22883
|
+
'[class.datagrid-virtual-scroll]': '!!virtualScroll',
|
|
22884
|
+
}, 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\" #datagridHeader>\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 *ngIf=\"virtualScroll\" class=\"datagrid-row-sticky datagrid-row-sticky-scroll\">\n <div class=\"datagrid-column\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"datagrid-content\" [class.datagrid-content-virtual]=\"virtualScroll\" #contentWrapper>\n <div\n *ngIf=\"virtualScroll\"\n class=\"datagrid-content-virtual-spacer\"\n [style.height]=\"virtualScroll?.totalContentHeight\"\n ></div>\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 </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" }]
|
|
22308
22885
|
}], ctorParameters: function () {
|
|
22309
22886
|
return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
|
|
22310
22887
|
type: Inject,
|
|
@@ -22330,6 +22907,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22330
22907
|
}], refresh: [{
|
|
22331
22908
|
type: Output,
|
|
22332
22909
|
args: ['clrDgRefresh']
|
|
22910
|
+
}], customSelectAllEnabled: [{
|
|
22911
|
+
type: Input,
|
|
22912
|
+
args: ['clrDgCustomSelectAllEnabled']
|
|
22913
|
+
}], customSelectAll: [{
|
|
22914
|
+
type: Output,
|
|
22915
|
+
args: ['clrDgCustomSelectAll']
|
|
22333
22916
|
}], virtualScroll: [{
|
|
22334
22917
|
type: ContentChild,
|
|
22335
22918
|
args: [ClrDatagridVirtualScrollDirective]
|
|
@@ -22344,13 +22927,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22344
22927
|
args: [ClrDatagridColumn]
|
|
22345
22928
|
}], rows: [{
|
|
22346
22929
|
type: ContentChildren,
|
|
22347
|
-
args: [ClrDatagridRow]
|
|
22930
|
+
args: [ClrDatagridRow, { emitDistinctChangesOnly: false }]
|
|
22348
22931
|
}], datagrid: [{
|
|
22349
22932
|
type: ViewChild,
|
|
22350
22933
|
args: ['datagrid', { read: ElementRef }]
|
|
22351
22934
|
}], datagridTable: [{
|
|
22352
22935
|
type: ViewChild,
|
|
22353
22936
|
args: ['datagridTable', { read: ElementRef }]
|
|
22937
|
+
}], datagridHeader: [{
|
|
22938
|
+
type: ViewChild,
|
|
22939
|
+
args: ['datagridHeader', { read: ElementRef }]
|
|
22940
|
+
}], contentWrapper: [{
|
|
22941
|
+
type: ViewChild,
|
|
22942
|
+
args: ['contentWrapper', { read: ElementRef }]
|
|
22354
22943
|
}], scrollableColumns: [{
|
|
22355
22944
|
type: ViewChild,
|
|
22356
22945
|
args: ['scrollableColumns', { read: ViewContainerRef }]
|
|
@@ -22366,6 +22955,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22366
22955
|
}], _calculationRows: [{
|
|
22367
22956
|
type: ViewChild,
|
|
22368
22957
|
args: ['calculationRows', { read: ViewContainerRef }]
|
|
22958
|
+
}], _fixedColumnTemplate: [{
|
|
22959
|
+
type: ViewChild,
|
|
22960
|
+
args: ['fixedColumnTemplate']
|
|
22961
|
+
}], stickyHeaders: [{
|
|
22962
|
+
type: ViewChildren,
|
|
22963
|
+
args: ['stickyHeader', { emitDistinctChangesOnly: true }]
|
|
22964
|
+
}], selectAllCheckbox: [{
|
|
22965
|
+
type: ViewChild,
|
|
22966
|
+
args: ['selectAllCheckbox']
|
|
22369
22967
|
}], loading: [{
|
|
22370
22968
|
type: Input,
|
|
22371
22969
|
args: ['clrDgLoading']
|
|
@@ -22833,7 +23431,7 @@ ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
22833
23431
|
<div class="datagrid-detail-pane-close">
|
|
22834
23432
|
<button
|
|
22835
23433
|
type="button"
|
|
22836
|
-
class="btn btn-link"
|
|
23434
|
+
class="btn btn-icon btn-link"
|
|
22837
23435
|
(click)="detailService.close()"
|
|
22838
23436
|
[attr.aria-label]="commonStrings.keys.close"
|
|
22839
23437
|
>
|
|
@@ -22855,7 +23453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22855
23453
|
<div class="datagrid-detail-pane-close">
|
|
22856
23454
|
<button
|
|
22857
23455
|
type="button"
|
|
22858
|
-
class="btn btn-link"
|
|
23456
|
+
class="btn btn-icon btn-link"
|
|
22859
23457
|
(click)="detailService.close()"
|
|
22860
23458
|
[attr.aria-label]="commonStrings.keys.close"
|
|
22861
23459
|
>
|
|
@@ -23532,22 +24130,24 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
23532
24130
|
<span class="clr-sr-only">{{ commonStrings.keys.previousPage }}</span>
|
|
23533
24131
|
<cds-icon shape="angle" direction="left"></cds-icon>
|
|
23534
24132
|
</button>
|
|
23535
|
-
<
|
|
23536
|
-
|
|
23537
|
-
|
|
23538
|
-
|
|
23539
|
-
|
|
23540
|
-
|
|
23541
|
-
|
|
23542
|
-
|
|
23543
|
-
|
|
23544
|
-
|
|
23545
|
-
|
|
23546
|
-
|
|
23547
|
-
<
|
|
23548
|
-
|
|
24133
|
+
<div class="pagination-pages">
|
|
24134
|
+
<input
|
|
24135
|
+
*ngIf="!disableCurrentPageInput; else readOnly"
|
|
24136
|
+
#currentPageInput
|
|
24137
|
+
type="text"
|
|
24138
|
+
class="pagination-current clr-input"
|
|
24139
|
+
[size]="page.last.toString().length"
|
|
24140
|
+
[value]="page.current"
|
|
24141
|
+
(keydown.enter)="updateCurrentPage($event)"
|
|
24142
|
+
(blur)="verifyCurrentPage($event)"
|
|
24143
|
+
[attr.aria-label]="commonStrings.keys.currentPage"
|
|
24144
|
+
/>
|
|
24145
|
+
<ng-template #readOnly>
|
|
24146
|
+
<span>{{ page.current }}</span>
|
|
24147
|
+
</ng-template>
|
|
23549
24148
|
|
|
23550
|
-
|
|
24149
|
+
/ <span [attr.aria-label]="commonStrings.keys.totalPages">{{ page.last }}</span>
|
|
24150
|
+
</div>
|
|
23551
24151
|
<button
|
|
23552
24152
|
type="button"
|
|
23553
24153
|
class="pagination-next"
|
|
@@ -23632,22 +24232,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23632
24232
|
<span class="clr-sr-only">{{ commonStrings.keys.previousPage }}</span>
|
|
23633
24233
|
<cds-icon shape="angle" direction="left"></cds-icon>
|
|
23634
24234
|
</button>
|
|
23635
|
-
<
|
|
23636
|
-
|
|
23637
|
-
|
|
23638
|
-
|
|
23639
|
-
|
|
23640
|
-
|
|
23641
|
-
|
|
23642
|
-
|
|
23643
|
-
|
|
23644
|
-
|
|
23645
|
-
|
|
23646
|
-
|
|
23647
|
-
<
|
|
23648
|
-
|
|
24235
|
+
<div class="pagination-pages">
|
|
24236
|
+
<input
|
|
24237
|
+
*ngIf="!disableCurrentPageInput; else readOnly"
|
|
24238
|
+
#currentPageInput
|
|
24239
|
+
type="text"
|
|
24240
|
+
class="pagination-current clr-input"
|
|
24241
|
+
[size]="page.last.toString().length"
|
|
24242
|
+
[value]="page.current"
|
|
24243
|
+
(keydown.enter)="updateCurrentPage($event)"
|
|
24244
|
+
(blur)="verifyCurrentPage($event)"
|
|
24245
|
+
[attr.aria-label]="commonStrings.keys.currentPage"
|
|
24246
|
+
/>
|
|
24247
|
+
<ng-template #readOnly>
|
|
24248
|
+
<span>{{ page.current }}</span>
|
|
24249
|
+
</ng-template>
|
|
23649
24250
|
|
|
23650
|
-
|
|
24251
|
+
/ <span [attr.aria-label]="commonStrings.keys.totalPages">{{ page.last }}</span>
|
|
24252
|
+
</div>
|
|
23651
24253
|
<button
|
|
23652
24254
|
type="button"
|
|
23653
24255
|
class="pagination-next"
|
|
@@ -24593,7 +25195,7 @@ ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
24593
25195
|
[attr.aria-expanded]="ariaExpanded"
|
|
24594
25196
|
[attr.aria-controls]="getStackChildrenId()"
|
|
24595
25197
|
>
|
|
24596
|
-
<cds-icon shape="angle" class="stack-block-caret"
|
|
25198
|
+
<cds-icon shape="angle" class="stack-block-caret" [attr.direction]="caretDirection"></cds-icon>
|
|
24597
25199
|
<span class="clr-sr-only" *ngIf="getChangedValue">{{ commonStrings.keys.stackViewChanged }}</span>
|
|
24598
25200
|
<div class="stack-view-key">
|
|
24599
25201
|
<!-- This structure changed to fix #3567 and the a11y request was to move away from dl's -->
|
|
@@ -24636,7 +25238,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24636
25238
|
[attr.aria-expanded]="ariaExpanded"
|
|
24637
25239
|
[attr.aria-controls]="getStackChildrenId()"
|
|
24638
25240
|
>
|
|
24639
|
-
<cds-icon shape="angle" class="stack-block-caret"
|
|
25241
|
+
<cds-icon shape="angle" class="stack-block-caret" [attr.direction]="caretDirection"></cds-icon>
|
|
24640
25242
|
<span class="clr-sr-only" *ngIf="getChangedValue">{{ commonStrings.keys.stackViewChanged }}</span>
|
|
24641
25243
|
<div class="stack-view-key">
|
|
24642
25244
|
<!-- This structure changed to fix #3567 and the a11y request was to move away from dl's -->
|
|
@@ -26228,10 +26830,10 @@ class ClrAlert {
|
|
|
26228
26830
|
}
|
|
26229
26831
|
}
|
|
26230
26832
|
ClrAlert.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, deps: [{ token: AlertIconAndTypesService }, { token: i0.ChangeDetectorRef }, { token: MultiAlertService, optional: true }, { token: ClrCommonStringsService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
26231
|
-
ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", isLightweight: ["clrAlertLightweight", "isLightweight"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"], closed: ["clrAlertClosed", "closed"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], 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\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"
|
|
26833
|
+
ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", isLightweight: ["clrAlertLightweight", "isLightweight"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"], closed: ["clrAlertClosed", "closed"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], 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\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n</div>\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: CdsIconCustomTag, selector: "cds-icon" }] });
|
|
26232
26834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, decorators: [{
|
|
26233
26835
|
type: Component,
|
|
26234
|
-
args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], 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\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"
|
|
26836
|
+
args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], 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\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n</div>\n" }]
|
|
26235
26837
|
}], ctorParameters: function () {
|
|
26236
26838
|
return [{ type: AlertIconAndTypesService }, { type: i0.ChangeDetectorRef }, { type: MultiAlertService, decorators: [{
|
|
26237
26839
|
type: Optional
|
|
@@ -26685,7 +27287,7 @@ class ClrModal {
|
|
|
26685
27287
|
}
|
|
26686
27288
|
}
|
|
26687
27289
|
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 });
|
|
26688
|
-
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
|
|
27290
|
+
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 [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }], viewProviders: [ScrollingService], animations: [
|
|
26689
27291
|
trigger('fadeMove', [
|
|
26690
27292
|
transition('* => fadeDown', [
|
|
26691
27293
|
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
@@ -26696,6 +27298,8 @@ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
|
26696
27298
|
]),
|
|
26697
27299
|
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
26698
27300
|
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
27301
|
+
transition('* => fadeUp', [style({ opacity: 0, transform: 'translate(0, 50%)' }), animate('0.2s ease-in-out')]),
|
|
27302
|
+
transition('fadeUp => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, 50%)' }))]),
|
|
26699
27303
|
]),
|
|
26700
27304
|
trigger('fade', [
|
|
26701
27305
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
@@ -26715,12 +27319,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26715
27319
|
]),
|
|
26716
27320
|
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
26717
27321
|
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
27322
|
+
transition('* => fadeUp', [style({ opacity: 0, transform: 'translate(0, 50%)' }), animate('0.2s ease-in-out')]),
|
|
27323
|
+
transition('fadeUp => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, 50%)' }))]),
|
|
26718
27324
|
]),
|
|
26719
27325
|
trigger('fade', [
|
|
26720
27326
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
26721
27327
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
26722
27328
|
]),
|
|
26723
|
-
], 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
|
|
27329
|
+
], 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 [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
|
|
26724
27330
|
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
|
|
26725
27331
|
type: ViewChild,
|
|
26726
27332
|
args: ['title']
|
|
@@ -26760,6 +27366,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26760
27366
|
}], bypassScrollService: [{
|
|
26761
27367
|
type: Input,
|
|
26762
27368
|
args: ['clrModalOverrideScrollService']
|
|
27369
|
+
}], modalContentTemplate: [{
|
|
27370
|
+
type: ContentChild,
|
|
27371
|
+
args: ['clrInternalModalContentTemplate']
|
|
26763
27372
|
}], bodyElementRef: [{
|
|
26764
27373
|
type: ViewChild,
|
|
26765
27374
|
args: ['body']
|
|
@@ -26834,15 +27443,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26834
27443
|
* This software is released under MIT license.
|
|
26835
27444
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
26836
27445
|
*/
|
|
26837
|
-
class
|
|
27446
|
+
class ClrModalHostComponent {
|
|
26838
27447
|
}
|
|
26839
|
-
|
|
26840
|
-
|
|
26841
|
-
|
|
26842
|
-
|
|
27448
|
+
ClrModalHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27449
|
+
ClrModalHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModalHostComponent, selector: "[clrModalHost]", host: { properties: { "class.clr-modal-host": "true" } }, ngImport: i0, template: `
|
|
27450
|
+
<div class="clr-modal-host-scrollable">
|
|
27451
|
+
<ng-content></ng-content>
|
|
27452
|
+
</div>
|
|
27453
|
+
`, isInline: true });
|
|
27454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalHostComponent, decorators: [{
|
|
27455
|
+
type: Component,
|
|
26843
27456
|
args: [{
|
|
26844
27457
|
selector: '[clrModalHost]',
|
|
26845
27458
|
host: { '[class.clr-modal-host]': 'true' },
|
|
27459
|
+
template: `
|
|
27460
|
+
<div class="clr-modal-host-scrollable">
|
|
27461
|
+
<ng-content></ng-content>
|
|
27462
|
+
</div>
|
|
27463
|
+
`,
|
|
26846
27464
|
}]
|
|
26847
27465
|
}] });
|
|
26848
27466
|
|
|
@@ -26852,14 +27470,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26852
27470
|
* This software is released under MIT license.
|
|
26853
27471
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
26854
27472
|
*/
|
|
26855
|
-
const CLR_MODAL_DIRECTIVES = [ClrModal, ClrModalBody,
|
|
27473
|
+
const CLR_MODAL_DIRECTIVES = [ClrModal, ClrModalBody, ClrModalHostComponent];
|
|
26856
27474
|
class ClrModalModule {
|
|
26857
27475
|
constructor() {
|
|
26858
27476
|
ClarityIcons.addIcons(windowCloseIcon);
|
|
26859
27477
|
}
|
|
26860
27478
|
}
|
|
26861
27479
|
ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26862
|
-
ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody,
|
|
27480
|
+
ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody, ClrModalHostComponent], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrModalHostComponent, ClrIconModule] });
|
|
26863
27481
|
ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
|
|
26864
27482
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
|
|
26865
27483
|
type: NgModule,
|
|
@@ -26881,16 +27499,29 @@ class ClrSidePanel {
|
|
|
26881
27499
|
this.element = element;
|
|
26882
27500
|
this.configuration = configuration;
|
|
26883
27501
|
this.commonStrings = commonStrings;
|
|
26884
|
-
this._open = false;
|
|
26885
27502
|
this.openChange = new EventEmitter(false);
|
|
26886
27503
|
this.skipAnimation = false;
|
|
26887
27504
|
this.staticBackdrop = false;
|
|
27505
|
+
this.closable = true;
|
|
26888
27506
|
this.preventClose = false;
|
|
26889
27507
|
this.altClose = new EventEmitter(false);
|
|
26890
27508
|
this._pinnable = false;
|
|
26891
27509
|
this._pinned = false;
|
|
27510
|
+
this._position = 'right';
|
|
27511
|
+
this.__open = false;
|
|
26892
27512
|
this._size = 'md';
|
|
26893
27513
|
}
|
|
27514
|
+
get _open() {
|
|
27515
|
+
return this.__open;
|
|
27516
|
+
}
|
|
27517
|
+
set _open(open) {
|
|
27518
|
+
if (open !== this.__open) {
|
|
27519
|
+
this.__open = open;
|
|
27520
|
+
if (this.pinned) {
|
|
27521
|
+
this.updateModalState();
|
|
27522
|
+
}
|
|
27523
|
+
}
|
|
27524
|
+
}
|
|
26894
27525
|
get size() {
|
|
26895
27526
|
return this._size;
|
|
26896
27527
|
}
|
|
@@ -26900,9 +27531,22 @@ class ClrSidePanel {
|
|
|
26900
27531
|
}
|
|
26901
27532
|
if (this._size !== value) {
|
|
26902
27533
|
this._size = value;
|
|
26903
|
-
if (this.
|
|
26904
|
-
this.
|
|
26905
|
-
|
|
27534
|
+
if (this.pinned) {
|
|
27535
|
+
this.updateModalState();
|
|
27536
|
+
}
|
|
27537
|
+
}
|
|
27538
|
+
}
|
|
27539
|
+
get position() {
|
|
27540
|
+
return this._position;
|
|
27541
|
+
}
|
|
27542
|
+
set position(position) {
|
|
27543
|
+
if (position && position !== this._position) {
|
|
27544
|
+
this._position = position;
|
|
27545
|
+
if (this._position === 'right') {
|
|
27546
|
+
this.configuration.fadeMove = 'fadeLeft';
|
|
27547
|
+
}
|
|
27548
|
+
else if (this._position === 'bottom') {
|
|
27549
|
+
this.configuration.fadeMove = 'fadeUp';
|
|
26906
27550
|
}
|
|
26907
27551
|
}
|
|
26908
27552
|
}
|
|
@@ -26910,17 +27554,9 @@ class ClrSidePanel {
|
|
|
26910
27554
|
return this._pinned;
|
|
26911
27555
|
}
|
|
26912
27556
|
set pinned(pinned) {
|
|
26913
|
-
|
|
26914
|
-
|
|
26915
|
-
|
|
26916
|
-
this.originalStopClose = this.modal.stopClose;
|
|
26917
|
-
this.modal.stopClose = true;
|
|
26918
|
-
this.displaySideBySide();
|
|
26919
|
-
}
|
|
26920
|
-
else {
|
|
26921
|
-
this.modal.stopClose = this.originalStopClose;
|
|
26922
|
-
this.displayOverlapping();
|
|
26923
|
-
}
|
|
27557
|
+
this._pinned = pinned;
|
|
27558
|
+
if (this.modal) {
|
|
27559
|
+
this.updateModalState();
|
|
26924
27560
|
}
|
|
26925
27561
|
}
|
|
26926
27562
|
get clrSidePanelBackdrop() {
|
|
@@ -26937,28 +27573,37 @@ class ClrSidePanel {
|
|
|
26937
27573
|
set clrSidePanelPinnable(pinnable) {
|
|
26938
27574
|
this._pinnable = pinnable;
|
|
26939
27575
|
}
|
|
27576
|
+
get modal() {
|
|
27577
|
+
return this._modal;
|
|
27578
|
+
}
|
|
27579
|
+
set modal(modal) {
|
|
27580
|
+
this._modal = modal;
|
|
27581
|
+
this.originalStopClose = this.modal.stopClose;
|
|
27582
|
+
this.updateModalState();
|
|
27583
|
+
}
|
|
26940
27584
|
get hostElement() {
|
|
26941
27585
|
return this.element.nativeElement.closest('.clr-modal-host') || document.body;
|
|
26942
27586
|
}
|
|
27587
|
+
get bottomPositionCssClass() {
|
|
27588
|
+
return this.position === 'bottom';
|
|
27589
|
+
}
|
|
26943
27590
|
ngOnInit() {
|
|
26944
27591
|
this.configuration.fadeMove = 'fadeLeft';
|
|
26945
|
-
|
|
26946
|
-
|
|
26947
|
-
if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
|
|
26948
|
-
if (changes._open.currentValue) {
|
|
26949
|
-
if (this.clrSidePanelPinnable && this.pinned) {
|
|
26950
|
-
this.displaySideBySide();
|
|
26951
|
-
}
|
|
26952
|
-
}
|
|
26953
|
-
else {
|
|
26954
|
-
if (this.clrSidePanelPinnable && this.pinned) {
|
|
26955
|
-
this.displayOverlapping();
|
|
26956
|
-
}
|
|
26957
|
-
}
|
|
27592
|
+
if (this.position === 'bottom') {
|
|
27593
|
+
this.configuration.fadeMove = 'fadeUp';
|
|
26958
27594
|
}
|
|
26959
27595
|
}
|
|
26960
27596
|
ngOnDestroy() {
|
|
26961
|
-
this.
|
|
27597
|
+
this.cleanupPinnedClasses();
|
|
27598
|
+
}
|
|
27599
|
+
handleModalOpen(open) {
|
|
27600
|
+
if (open) {
|
|
27601
|
+
this.updateModalState();
|
|
27602
|
+
}
|
|
27603
|
+
else {
|
|
27604
|
+
this.cleanupPinnedClasses();
|
|
27605
|
+
}
|
|
27606
|
+
this.openChange.emit(open);
|
|
26962
27607
|
}
|
|
26963
27608
|
open() {
|
|
26964
27609
|
this.modal.open();
|
|
@@ -26976,28 +27621,41 @@ class ClrSidePanel {
|
|
|
26976
27621
|
this.modal.close();
|
|
26977
27622
|
}
|
|
26978
27623
|
}
|
|
26979
|
-
|
|
26980
|
-
|
|
27624
|
+
updateModalState() {
|
|
27625
|
+
if (!this.modal) {
|
|
27626
|
+
return;
|
|
27627
|
+
}
|
|
27628
|
+
if (this.pinned) {
|
|
27629
|
+
this.modal.stopClose = true;
|
|
27630
|
+
this.updatePinnedClasses();
|
|
27631
|
+
}
|
|
27632
|
+
else {
|
|
27633
|
+
this.modal.stopClose = this.originalStopClose;
|
|
27634
|
+
this.cleanupPinnedClasses();
|
|
27635
|
+
}
|
|
26981
27636
|
}
|
|
26982
|
-
|
|
26983
|
-
this.hostElement.
|
|
26984
|
-
|
|
26985
|
-
|
|
26986
|
-
|
|
27637
|
+
cleanupPinnedClasses() {
|
|
27638
|
+
[this.hostElement, document.body].forEach(host => {
|
|
27639
|
+
host.classList.forEach(className => {
|
|
27640
|
+
if (className.startsWith('clr-side-panel-pinned-')) {
|
|
27641
|
+
host.classList.remove(className);
|
|
27642
|
+
}
|
|
27643
|
+
});
|
|
26987
27644
|
});
|
|
26988
27645
|
}
|
|
27646
|
+
updatePinnedClasses() {
|
|
27647
|
+
this.cleanupPinnedClasses();
|
|
27648
|
+
this.hostElement.classList.add(`clr-side-panel-pinned-${this.position}-${this.size}`);
|
|
27649
|
+
}
|
|
26989
27650
|
}
|
|
26990
27651
|
ClrSidePanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, deps: [{ token: i0.ElementRef }, { token: ClrModalConfigurationService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
26991
|
-
ClrSidePanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrSidePanel, selector: "clr-side-panel", inputs: {
|
|
27652
|
+
ClrSidePanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrSidePanel, selector: "clr-side-panel", inputs: { closeButtonAriaLabel: ["clrSidePanelCloseButtonAriaLabel", "closeButtonAriaLabel"], skipAnimation: ["clrSidePanelSkipAnimation", "skipAnimation"], labelledById: ["clrSidePanelLabelledById", "labelledById"], staticBackdrop: ["clrSidePanelStaticBackdrop", "staticBackdrop"], closable: ["clrSidePanelClosable", "closable"], preventClose: ["clrSidePanelPreventClose", "preventClose"], _open: ["clrSidePanelOpen", "_open"], size: ["clrSidePanelSize", "size"], position: ["clrSidePanelPosition", "position"], pinned: ["clrSidePanelPinned", "pinned"], clrSidePanelBackdrop: "clrSidePanelBackdrop", clrSidePanelPinnable: "clrSidePanelPinnable" }, outputs: { openChange: "clrSidePanelOpenChange", altClose: "clrSidePanelAlternateClose" }, host: { listeners: { "document:pointerup": "documentClick($event)" }, properties: { "class.side-panel": "true", "class.side-panel-bottom": "this.bottomPositionCssClass" } }, viewQueries: [{ propertyName: "modal", first: true, predicate: ClrModal, descendants: true }], ngImport: i0, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"handleModalOpen($event)\"\n [clrModalCloseButtonAriaLabel]=\"closeButtonAriaLabel\"\n [clrModalSize]=\"size\"\n [clrModalSkipAnimation]=\"skipAnimation\"\n [clrModalStaticBackdrop]=\"staticBackdrop\"\n [clrModalLabelledById]=\"labelledById\"\n [clrModalPreventClose]=\"preventClose\"\n [clrModalClosable]=\"closable\"\n (clrModalAlternateClose)=\"altClose.emit($event)\"\n [clrModalOverrideScrollService]=\"true\"\n>\n <button\n type=\"button\"\n [attr.aria-label]=\"commonStrings.keys.sidePanelPin\"\n class=\"leading-button pinnable\"\n *ngIf=\"clrSidePanelPinnable\"\n (click)=\"togglePinned()\"\n >\n <cds-icon [attr.shape]=\"pinned ? 'unpin' : 'pin'\"></cds-icon>\n </button>\n <div class=\"modal-title\"><ng-content select=\".side-panel-title\"></ng-content></div>\n <div class=\"modal-body\"><ng-content select=\".side-panel-body\"></ng-content></div>\n <div class=\"modal-footer\"><ng-content select=\".side-panel-footer\"></ng-content></div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { 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" }] });
|
|
26992
27653
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, decorators: [{
|
|
26993
27654
|
type: Component,
|
|
26994
27655
|
args: [{ selector: 'clr-side-panel', host: {
|
|
26995
27656
|
'[class.side-panel]': 'true',
|
|
26996
|
-
}, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"
|
|
26997
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
26998
|
-
type: Input,
|
|
26999
|
-
args: ['clrSidePanelOpen']
|
|
27000
|
-
}], openChange: [{
|
|
27657
|
+
}, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"handleModalOpen($event)\"\n [clrModalCloseButtonAriaLabel]=\"closeButtonAriaLabel\"\n [clrModalSize]=\"size\"\n [clrModalSkipAnimation]=\"skipAnimation\"\n [clrModalStaticBackdrop]=\"staticBackdrop\"\n [clrModalLabelledById]=\"labelledById\"\n [clrModalPreventClose]=\"preventClose\"\n [clrModalClosable]=\"closable\"\n (clrModalAlternateClose)=\"altClose.emit($event)\"\n [clrModalOverrideScrollService]=\"true\"\n>\n <button\n type=\"button\"\n [attr.aria-label]=\"commonStrings.keys.sidePanelPin\"\n class=\"leading-button pinnable\"\n *ngIf=\"clrSidePanelPinnable\"\n (click)=\"togglePinned()\"\n >\n <cds-icon [attr.shape]=\"pinned ? 'unpin' : 'pin'\"></cds-icon>\n </button>\n <div class=\"modal-title\"><ng-content select=\".side-panel-title\"></ng-content></div>\n <div class=\"modal-body\"><ng-content select=\".side-panel-body\"></ng-content></div>\n <div class=\"modal-footer\"><ng-content select=\".side-panel-footer\"></ng-content></div>\n</clr-modal>\n" }]
|
|
27658
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }, { type: ClrCommonStringsService }]; }, propDecorators: { openChange: [{
|
|
27001
27659
|
type: Output,
|
|
27002
27660
|
args: ['clrSidePanelOpenChange']
|
|
27003
27661
|
}], closeButtonAriaLabel: [{
|
|
@@ -27012,22 +27670,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27012
27670
|
}], staticBackdrop: [{
|
|
27013
27671
|
type: Input,
|
|
27014
27672
|
args: ['clrSidePanelStaticBackdrop']
|
|
27673
|
+
}], closable: [{
|
|
27674
|
+
type: Input,
|
|
27675
|
+
args: ['clrSidePanelClosable']
|
|
27015
27676
|
}], preventClose: [{
|
|
27016
27677
|
type: Input,
|
|
27017
27678
|
args: ['clrSidePanelPreventClose']
|
|
27018
27679
|
}], altClose: [{
|
|
27019
27680
|
type: Output,
|
|
27020
27681
|
args: ['clrSidePanelAlternateClose']
|
|
27021
|
-
}],
|
|
27022
|
-
type:
|
|
27023
|
-
args: [
|
|
27682
|
+
}], _open: [{
|
|
27683
|
+
type: Input,
|
|
27684
|
+
args: ['clrSidePanelOpen']
|
|
27024
27685
|
}], size: [{
|
|
27025
27686
|
type: Input,
|
|
27026
27687
|
args: ['clrSidePanelSize']
|
|
27688
|
+
}], position: [{
|
|
27689
|
+
type: Input,
|
|
27690
|
+
args: ['clrSidePanelPosition']
|
|
27691
|
+
}], pinned: [{
|
|
27692
|
+
type: Input,
|
|
27693
|
+
args: ['clrSidePanelPinned']
|
|
27027
27694
|
}], clrSidePanelBackdrop: [{
|
|
27028
27695
|
type: Input
|
|
27029
27696
|
}], clrSidePanelPinnable: [{
|
|
27030
27697
|
type: Input
|
|
27698
|
+
}], modal: [{
|
|
27699
|
+
type: ViewChild,
|
|
27700
|
+
args: [ClrModal]
|
|
27701
|
+
}], bottomPositionCssClass: [{
|
|
27702
|
+
type: HostBinding,
|
|
27703
|
+
args: ['class.side-panel-bottom']
|
|
27031
27704
|
}], documentClick: [{
|
|
27032
27705
|
type: HostListener,
|
|
27033
27706
|
args: ['document:pointerup', ['$event']]
|
|
@@ -29402,10 +30075,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29402
30075
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
29403
30076
|
*/
|
|
29404
30077
|
class ClrWizardStepnavItem {
|
|
29405
|
-
constructor(navService, pageCollection, commonStrings) {
|
|
30078
|
+
constructor(navService, pageCollection, commonStrings, elementRef) {
|
|
29406
30079
|
this.navService = navService;
|
|
29407
30080
|
this.pageCollection = pageCollection;
|
|
29408
30081
|
this.commonStrings = commonStrings;
|
|
30082
|
+
this.elementRef = elementRef;
|
|
30083
|
+
/**
|
|
30084
|
+
* This is used to prevent the steps from scrolling as the user clicks on the steps.
|
|
30085
|
+
*/
|
|
30086
|
+
this.skipNextScroll = false;
|
|
29409
30087
|
}
|
|
29410
30088
|
get id() {
|
|
29411
30089
|
this.pageGuard();
|
|
@@ -29451,12 +30129,43 @@ class ClrWizardStepnavItem {
|
|
|
29451
30129
|
const allIds = this.isComplete ? [this.stepIconId, ...textIds] : textIds;
|
|
29452
30130
|
return allIds.join(' ');
|
|
29453
30131
|
}
|
|
30132
|
+
get icon() {
|
|
30133
|
+
if (this.isCurrent) {
|
|
30134
|
+
return {
|
|
30135
|
+
shape: 'dot-circle',
|
|
30136
|
+
label: this.commonStrings.keys.wizardStepCurrent || this.commonStrings.keys.timelineStepCurrent,
|
|
30137
|
+
};
|
|
30138
|
+
}
|
|
30139
|
+
else if (this.hasError) {
|
|
30140
|
+
return {
|
|
30141
|
+
shape: 'error-standard',
|
|
30142
|
+
label: this.commonStrings.keys.wizardStepError || this.commonStrings.keys.timelineStepError,
|
|
30143
|
+
};
|
|
30144
|
+
}
|
|
30145
|
+
else if (this.isComplete) {
|
|
30146
|
+
return {
|
|
30147
|
+
shape: 'success-standard',
|
|
30148
|
+
label: this.commonStrings.keys.wizardStepSuccess || this.commonStrings.keys.timelineStepSuccess,
|
|
30149
|
+
};
|
|
30150
|
+
}
|
|
30151
|
+
else {
|
|
30152
|
+
return null;
|
|
30153
|
+
}
|
|
30154
|
+
}
|
|
30155
|
+
ngOnInit() {
|
|
30156
|
+
this.subscription = this.ensureCurrentStepIsScrolledIntoView().subscribe();
|
|
30157
|
+
}
|
|
30158
|
+
ngOnDestroy() {
|
|
30159
|
+
var _a;
|
|
30160
|
+
(_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
30161
|
+
}
|
|
29454
30162
|
click() {
|
|
29455
30163
|
this.pageGuard();
|
|
29456
30164
|
// if we click on our own stepnav or a disabled stepnav, we don't want to do anything
|
|
29457
30165
|
if (this.isDisabled || this.isCurrent) {
|
|
29458
30166
|
return;
|
|
29459
30167
|
}
|
|
30168
|
+
this.skipNextScroll = true;
|
|
29460
30169
|
this.navService.goTo(this.page);
|
|
29461
30170
|
}
|
|
29462
30171
|
pageGuard() {
|
|
@@ -29464,8 +30173,20 @@ class ClrWizardStepnavItem {
|
|
|
29464
30173
|
throw new Error('Wizard stepnav item is not associated with a wizard page.');
|
|
29465
30174
|
}
|
|
29466
30175
|
}
|
|
30176
|
+
ensureCurrentStepIsScrolledIntoView() {
|
|
30177
|
+
// Don't use "smooth" scrolling when the wizard is first opened to avoid a delay in scrolling the current step into view.
|
|
30178
|
+
// The current step when the wizard is opened might not be the first step. For example, the wizard can be closed and re-opened.
|
|
30179
|
+
let scrollBehavior = 'auto';
|
|
30180
|
+
return this.navService.currentPageChanged.pipe(startWith$1(this.navService.currentPage), tap$1(currentPage => {
|
|
30181
|
+
if (!this.skipNextScroll && currentPage === this.page) {
|
|
30182
|
+
this.elementRef.nativeElement.scrollIntoView({ behavior: scrollBehavior, block: 'center', inline: 'center' });
|
|
30183
|
+
}
|
|
30184
|
+
scrollBehavior = 'smooth';
|
|
30185
|
+
this.skipNextScroll = false;
|
|
30186
|
+
}));
|
|
30187
|
+
}
|
|
29467
30188
|
}
|
|
29468
|
-
ClrWizardStepnavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, deps: [{ token: WizardNavigationService }, { token: PageCollectionService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
30189
|
+
ClrWizardStepnavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, deps: [{ token: WizardNavigationService }, { token: PageCollectionService }, { token: ClrCommonStringsService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
29469
30190
|
ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: { page: "page" }, host: { properties: { "id": "id", "attr.aria-current": "stepAriaCurrent", "attr.aria-controls": "page.id", "class.clr-nav-link": "true", "class.nav-item": "true", "class.active": "isCurrent", "class.disabled": "isDisabled", "class.no-click": "!canNavigate", "class.complete": "isComplete", "class.error": "hasError" } }, ngImport: i0, template: `
|
|
29470
30191
|
<button
|
|
29471
30192
|
type="button"
|
|
@@ -29476,18 +30197,12 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
29476
30197
|
>
|
|
29477
30198
|
<div class="clr-wizard-stepnav-link-icon">
|
|
29478
30199
|
<cds-icon
|
|
29479
|
-
*ngIf="
|
|
29480
|
-
[id]="stepIconId"
|
|
29481
|
-
shape="error-standard"
|
|
29482
|
-
role="img"
|
|
29483
|
-
[attr.aria-label]="commonStrings.keys.wizardStepError"
|
|
29484
|
-
></cds-icon>
|
|
29485
|
-
<cds-icon
|
|
29486
|
-
*ngIf="!hasError && isComplete"
|
|
30200
|
+
*ngIf="icon; let icon"
|
|
29487
30201
|
[id]="stepIconId"
|
|
29488
|
-
shape="success-standard"
|
|
29489
30202
|
role="img"
|
|
29490
|
-
|
|
30203
|
+
class="clr-wizard-stepnav-link-icon"
|
|
30204
|
+
[attr.shape]="icon.shape"
|
|
30205
|
+
[attr.aria-label]="icon.label"
|
|
29491
30206
|
></cds-icon>
|
|
29492
30207
|
</div>
|
|
29493
30208
|
|
|
@@ -29514,18 +30229,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29514
30229
|
>
|
|
29515
30230
|
<div class="clr-wizard-stepnav-link-icon">
|
|
29516
30231
|
<cds-icon
|
|
29517
|
-
*ngIf="
|
|
29518
|
-
[id]="stepIconId"
|
|
29519
|
-
shape="error-standard"
|
|
29520
|
-
role="img"
|
|
29521
|
-
[attr.aria-label]="commonStrings.keys.wizardStepError"
|
|
29522
|
-
></cds-icon>
|
|
29523
|
-
<cds-icon
|
|
29524
|
-
*ngIf="!hasError && isComplete"
|
|
30232
|
+
*ngIf="icon; let icon"
|
|
29525
30233
|
[id]="stepIconId"
|
|
29526
|
-
shape="success-standard"
|
|
29527
30234
|
role="img"
|
|
29528
|
-
|
|
30235
|
+
class="clr-wizard-stepnav-link-icon"
|
|
30236
|
+
[attr.shape]="icon.shape"
|
|
30237
|
+
[attr.aria-label]="icon.label"
|
|
29529
30238
|
></cds-icon>
|
|
29530
30239
|
</div>
|
|
29531
30240
|
|
|
@@ -29551,7 +30260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29551
30260
|
'[class.error]': 'hasError',
|
|
29552
30261
|
},
|
|
29553
30262
|
}]
|
|
29554
|
-
}], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }]; }, propDecorators: { page: [{
|
|
30263
|
+
}], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }, { type: i0.ElementRef }]; }, propDecorators: { page: [{
|
|
29555
30264
|
type: Input,
|
|
29556
30265
|
args: ['page']
|
|
29557
30266
|
}] } });
|
|
@@ -29629,6 +30338,15 @@ class ClrWizard {
|
|
|
29629
30338
|
* Set the modal size of the wizard. Set using `[clrWizardSize]` input.
|
|
29630
30339
|
*/
|
|
29631
30340
|
this.size = 'xl';
|
|
30341
|
+
/**
|
|
30342
|
+
* Enable "in page" wizard. Set using `[clrWizardInPage]` input.
|
|
30343
|
+
*/
|
|
30344
|
+
this.inPage = false;
|
|
30345
|
+
/**
|
|
30346
|
+
* Make an "in page" wizard fill the `.content-area`. Set using `[clrWizardInPageFillContentArea]` input.
|
|
30347
|
+
* If you can't use this option, you will likely need to provide custom CSS to set the wizard's height and margins.
|
|
30348
|
+
*/
|
|
30349
|
+
this.inPageFillContentArea = false;
|
|
29632
30350
|
/**
|
|
29633
30351
|
* Tells the modal part of the wizard whether it should have a close "X"
|
|
29634
30352
|
* in the top right corner. Set using `[clrWizardClosable]` input.
|
|
@@ -29787,6 +30505,9 @@ class ClrWizard {
|
|
|
29787
30505
|
ngAfterContentInit() {
|
|
29788
30506
|
this.pageCollection.pages = this.pages;
|
|
29789
30507
|
this.headerActionService.wizardHeaderActions = this.headerActions;
|
|
30508
|
+
if (this.inPage) {
|
|
30509
|
+
this.open();
|
|
30510
|
+
}
|
|
29790
30511
|
this.initializeButtons();
|
|
29791
30512
|
}
|
|
29792
30513
|
ngDoCheck() {
|
|
@@ -29984,7 +30705,7 @@ class ClrWizard {
|
|
|
29984
30705
|
(_a = this.pageTitle) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
|
|
29985
30706
|
this.currentPageChanged.emit();
|
|
29986
30707
|
// scroll to top of page in case there is long page content
|
|
29987
|
-
(_b = this.
|
|
30708
|
+
(_b = this.bodyElementRef) === null || _b === void 0 ? void 0 : _b.nativeElement.scrollTo(0, 0);
|
|
29988
30709
|
});
|
|
29989
30710
|
}
|
|
29990
30711
|
updateNavOnPageChanges() {
|
|
@@ -30008,7 +30729,7 @@ class ClrWizard {
|
|
|
30008
30729
|
}
|
|
30009
30730
|
}
|
|
30010
30731
|
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 });
|
|
30011
|
-
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.
|
|
30732
|
+
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 </div>\n </div>\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 <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"] }] });
|
|
30012
30733
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
30013
30734
|
type: Component,
|
|
30014
30735
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -30016,8 +30737,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30016
30737
|
'[class.wizard-md]': "size == 'md'",
|
|
30017
30738
|
'[class.wizard-lg]': "size == 'lg'",
|
|
30018
30739
|
'[class.wizard-xl]': "size == 'xl'",
|
|
30019
|
-
'[class.
|
|
30020
|
-
|
|
30740
|
+
'[class.wizard-in-page]': 'inPage',
|
|
30741
|
+
'[class.wizard-in-page--fill-content-area]': 'inPage && inPageFillContentArea',
|
|
30742
|
+
}, 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 </div>\n </div>\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 <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" }]
|
|
30021
30743
|
}], ctorParameters: function () {
|
|
30022
30744
|
return [{ type: undefined, decorators: [{
|
|
30023
30745
|
type: Inject,
|
|
@@ -30029,6 +30751,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30029
30751
|
}], size: [{
|
|
30030
30752
|
type: Input,
|
|
30031
30753
|
args: ['clrWizardSize']
|
|
30754
|
+
}], inPage: [{
|
|
30755
|
+
type: Input,
|
|
30756
|
+
args: ['clrWizardInPage']
|
|
30757
|
+
}], inPageFillContentArea: [{
|
|
30758
|
+
type: Input,
|
|
30759
|
+
args: ['clrWizardInPageFillContentArea']
|
|
30032
30760
|
}], closable: [{
|
|
30033
30761
|
type: Input,
|
|
30034
30762
|
args: ['clrWizardClosable']
|
|
@@ -30068,6 +30796,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30068
30796
|
}], wizardTitle: [{
|
|
30069
30797
|
type: ContentChild,
|
|
30070
30798
|
args: [ClrWizardTitle]
|
|
30799
|
+
}], bodyElementRef: [{
|
|
30800
|
+
type: ViewChild,
|
|
30801
|
+
args: ['body']
|
|
30071
30802
|
}], modal: [{
|
|
30072
30803
|
type: ViewChild,
|
|
30073
30804
|
args: [ClrModal]
|
|
@@ -30609,5 +31340,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30609
31340
|
* Generated bundle index. Do not edit.
|
|
30610
31341
|
*/
|
|
30611
31342
|
|
|
30612
|
-
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,
|
|
31343
|
+
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, ClrModalHostComponent, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrNumberInput, ClrNumberInputContainer, ClrNumberInputModule, ClrOption, ClrOptionGroup, 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 };
|
|
30613
31344
|
//# sourceMappingURL=clr-angular.mjs.map
|