@clr/angular 17.1.0 → 17.2.1
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 +401 -145
- package/clr-angular.module.d.ts +7 -6
- package/data/datagrid/datagrid-detail-header.d.ts +4 -1
- package/data/datagrid/datagrid-detail.d.ts +5 -1
- package/data/datagrid/datagrid-filter.d.ts +4 -2
- package/data/datagrid/datagrid-if-detail.d.ts +9 -0
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +62 -0
- package/data/datagrid/datagrid.d.ts +8 -4
- package/data/datagrid/datagrid.module.d.ts +31 -30
- package/data/datagrid/enums/column-changes.enum.d.ts +2 -1
- package/data/datagrid/index.d.ts +1 -0
- package/data/datagrid/interfaces/column-state.interface.d.ts +1 -0
- package/data/datagrid/providers/columns.service.d.ts +1 -0
- package/data/datagrid/providers/detail.service.d.ts +4 -0
- package/data/datagrid/render/cell-renderer.d.ts +3 -6
- package/data/datagrid/render/header-renderer.d.ts +2 -3
- package/data/datagrid/render/main-renderer.d.ts +5 -1
- package/data/datagrid/render/row-renderer.d.ts +4 -3
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +5 -1
- package/esm2020/accordion/accordion-panel.mjs +3 -3
- package/esm2020/accordion/stepper/stepper-panel.mjs +8 -4
- package/esm2020/clr-angular.module.mjs +5 -1
- package/esm2020/data/datagrid/datagrid-action-overflow.mjs +3 -1
- package/esm2020/data/datagrid/datagrid-detail-header.mjs +12 -6
- package/esm2020/data/datagrid/datagrid-detail.mjs +36 -8
- package/esm2020/data/datagrid/datagrid-filter.mjs +22 -13
- package/esm2020/data/datagrid/datagrid-if-detail.mjs +30 -7
- package/esm2020/data/datagrid/datagrid-row.mjs +3 -3
- package/esm2020/data/datagrid/datagrid-selection-cell.directive.mjs +2 -2
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +233 -0
- package/esm2020/data/datagrid/datagrid.mjs +43 -10
- package/esm2020/data/datagrid/datagrid.module.mjs +5 -1
- package/esm2020/data/datagrid/enums/column-changes.enum.mjs +3 -2
- package/esm2020/data/datagrid/index.mjs +2 -1
- package/esm2020/data/datagrid/interfaces/column-state.interface.mjs +1 -1
- package/esm2020/data/datagrid/providers/columns.service.mjs +9 -3
- package/esm2020/data/datagrid/providers/detail.service.mjs +12 -2
- package/esm2020/data/datagrid/render/cell-renderer.mjs +8 -33
- package/esm2020/data/datagrid/render/header-renderer.mjs +25 -43
- package/esm2020/data/datagrid/render/main-renderer.mjs +59 -9
- package/esm2020/data/datagrid/render/render-organizer.mjs +2 -2
- package/esm2020/data/datagrid/render/row-renderer.mjs +5 -5
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +21 -5
- package/esm2020/forms/combobox/combobox.mjs +3 -3
- package/esm2020/forms/common/abstract-container.mjs +5 -2
- package/esm2020/forms/datalist/datalist-container.mjs +1 -4
- package/esm2020/forms/datepicker/datepicker-view-manager.mjs +3 -3
- package/esm2020/forms/file-input/file-input-container.mjs +157 -0
- package/esm2020/forms/file-input/file-input-validator.mjs +72 -0
- package/esm2020/forms/file-input/file-input-value-accessor.mjs +53 -0
- package/esm2020/forms/file-input/file-input.helpers.mjs +22 -0
- package/esm2020/forms/file-input/file-input.mjs +68 -0
- package/esm2020/forms/file-input/file-input.module.mjs +43 -0
- package/esm2020/forms/file-input/index.mjs +12 -0
- package/esm2020/forms/forms.module.mjs +5 -1
- package/esm2020/forms/index.mjs +2 -1
- package/esm2020/modal/index.mjs +3 -1
- package/esm2020/modal/modal-configuration.service.mjs +20 -0
- package/esm2020/modal/modal.mjs +47 -18
- package/esm2020/modal/modal.module.mjs +4 -2
- package/esm2020/modal/side-panel.mjs +90 -0
- package/esm2020/modal/side-panel.module.mjs +28 -0
- package/esm2020/timeline/timeline-step.mjs +3 -3
- package/esm2020/timeline/timeline.mjs +3 -3
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +17 -12
- package/esm2020/utils/dom-adapter/dom-adapter.mjs +13 -4
- package/esm2020/utils/i18n/common-strings.default.mjs +7 -2
- package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
- package/esm2020/wizard/wizard.mjs +29 -6
- package/fesm2015/clr-angular.mjs +1435 -468
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +1418 -463
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/file-input/file-input-container.d.ts +16 -0
- package/forms/file-input/file-input-validator.d.ts +12 -0
- package/forms/file-input/file-input-value-accessor.d.ts +15 -0
- package/forms/file-input/file-input.d.ts +21 -0
- package/forms/file-input/file-input.helpers.d.ts +3 -0
- package/forms/file-input/file-input.module.d.ts +14 -0
- package/forms/file-input/index.d.ts +5 -0
- package/forms/forms.module.d.ts +9 -8
- package/forms/index.d.ts +1 -0
- package/modal/index.d.ts +2 -0
- package/modal/modal-configuration.service.d.ts +7 -0
- package/modal/modal.d.ts +8 -2
- package/modal/side-panel.d.ts +26 -0
- package/modal/side-panel.module.d.ts +13 -0
- package/package.json +2 -2
- package/utils/animations/expandable-animation/expandable-animation.d.ts +5 -4
- package/utils/i18n/common-strings.interface.d.ts +4 -0
- package/wizard/wizard.d.ts +12 -2
package/fesm2015/clr-angular.mjs
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, NgModule, Optional, Input, Injectable, Component, ChangeDetectionStrategy, EventEmitter, HostBinding, Output, ContentChildren, PLATFORM_ID, Inject, ViewChild, HostListener, SkipSelf, Renderer2, InjectionToken, ElementRef, ContentChild, ComponentFactoryResolver, KeyValueDiffers, Self, Attribute, LOCALE_ID, ViewContainerRef, NgZone, ChangeDetectorRef, TemplateRef } from '@angular/core';
|
|
2
|
+
import { Directive, NgModule, Optional, Input, Injectable, Component, ChangeDetectionStrategy, EventEmitter, HostBinding, Output, ContentChildren, PLATFORM_ID, Inject, ViewChild, HostListener, SkipSelf, Renderer2, InjectionToken, ElementRef, ContentChild, ComponentFactoryResolver, KeyValueDiffers, Self, Attribute, LOCALE_ID, inject, forwardRef, ViewContainerRef, NgZone, ChangeDetectorRef, TemplateRef } 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
|
-
import { ClarityIcons, angleIcon, exclamationCircleIcon, checkCircleIcon, ellipsisHorizontalIcon, windowCloseIcon, eventIcon, calendarIcon, eyeHideIcon, eyeIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, timesIcon, stepForward2Icon, angleDoubleIcon, filterGridCircleIcon, filterGridIcon, errorStandardIcon, helpIcon, infoStandardIcon, noteIcon, successStandardIcon, warningStandardIcon, infoCircleIcon, circleIcon, dotCircleIcon } from '@cds/core/icon';
|
|
5
|
+
import { ClarityIcons, angleIcon, exclamationCircleIcon, checkCircleIcon, ellipsisHorizontalIcon, windowCloseIcon, eventIcon, calendarIcon, folderOpenIcon, eyeHideIcon, eyeIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, timesIcon, stepForward2Icon, angleDoubleIcon, filterGridCircleIcon, filterGridIcon, errorStandardIcon, helpIcon, infoStandardIcon, noteIcon, successStandardIcon, warningStandardIcon, infoCircleIcon, circleIcon, dotCircleIcon } from '@cds/core/icon';
|
|
6
6
|
import { map, tap, startWith, distinctUntilChanged, filter, skipUntil, debounceTime, takeUntil, take, first, switchMap } from 'rxjs/operators';
|
|
7
7
|
import * as i3 from 'rxjs';
|
|
8
8
|
import { Subject, BehaviorSubject, Observable, fromEvent, isObservable, of, ReplaySubject, combineLatest, merge } from 'rxjs';
|
|
9
9
|
import { trigger, transition, style, animate, state, keyframes } from '@angular/animations';
|
|
10
10
|
import * as i1 from '@angular/forms';
|
|
11
|
-
import { FormControl, FormGroup, FormsModule, NG_VALIDATORS, SelectMultipleControlValueAccessor } from '@angular/forms';
|
|
11
|
+
import { FormControl, FormGroup, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, SelectMultipleControlValueAccessor } from '@angular/forms';
|
|
12
12
|
import * as i1$1 from '@angular/cdk/a11y';
|
|
13
13
|
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
14
14
|
import * as i2 from '@angular/cdk/drag-drop';
|
|
15
15
|
import { CdkDrag, CDK_DROP_LIST, CDK_DRAG_CONFIG } from '@angular/cdk/drag-drop';
|
|
16
16
|
import * as i1$2 from '@angular/cdk/bidi';
|
|
17
|
+
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
18
|
+
import { _RecycleViewRepeaterStrategy } from '@angular/cdk/collections';
|
|
19
|
+
import * as i3$1 from '@angular/cdk/scrolling';
|
|
20
|
+
import { FixedSizeVirtualScrollStrategy, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
17
21
|
import * as i1$3 from '@angular/router';
|
|
18
22
|
import '@cds/core/internal-components/close-button/register.js';
|
|
19
23
|
import '@cds/core/icon/register';
|
|
@@ -323,7 +327,7 @@ const commonStringsDefault = {
|
|
|
323
327
|
singleSelectionAriaLabel: 'Single selection header',
|
|
324
328
|
singleActionableAriaLabel: 'Single actionable header',
|
|
325
329
|
detailExpandableAriaLabel: 'Toggle more row content',
|
|
326
|
-
datagridFilterAriaLabel: '
|
|
330
|
+
datagridFilterAriaLabel: '{COLUMN} filter',
|
|
327
331
|
datagridFilterDialogAriaLabel: 'Filter dialog',
|
|
328
332
|
columnSeparatorAriaLabel: 'Column resize handle',
|
|
329
333
|
columnSeparatorDescription: 'Use left or right key to resize the column',
|
|
@@ -388,6 +392,11 @@ const commonStringsDefault = {
|
|
|
388
392
|
// Accordion/Stepper
|
|
389
393
|
stepComplete: 'Step {STEP} complete',
|
|
390
394
|
stepError: 'Error in step {STEP}',
|
|
395
|
+
// File input
|
|
396
|
+
browse: 'Browse',
|
|
397
|
+
fileCount: '{COUNT} files',
|
|
398
|
+
clearFile: 'Clear {FILE}',
|
|
399
|
+
clearFiles: 'Clear {COUNT} files',
|
|
391
400
|
};
|
|
392
401
|
|
|
393
402
|
/*
|
|
@@ -641,10 +650,10 @@ class ClrAccordionPanel {
|
|
|
641
650
|
}
|
|
642
651
|
}
|
|
643
652
|
ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: ClrCommonStringsService }, { token: AccordionService }, { token: IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
644
|
-
ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true", "class.clr-accordion-panel-disabled": "this.disabled" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-
|
|
653
|
+
ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true", "class.clr-accordion-panel-disabled": "this.disabled" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, 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: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
645
654
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
|
|
646
655
|
type: Component,
|
|
647
|
-
args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-
|
|
656
|
+
args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, 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" }]
|
|
648
657
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
|
|
649
658
|
type: Input,
|
|
650
659
|
args: ['clrAccordionPanelDisabled']
|
|
@@ -1170,7 +1179,11 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1170
1179
|
listenToFocusChanges() {
|
|
1171
1180
|
this.subscriptions.push(this.stepperService.activeStep
|
|
1172
1181
|
.pipe(filter(panelId => isPlatformBrowser(this.platformId) && panelId === this.id))
|
|
1173
|
-
.subscribe(() =>
|
|
1182
|
+
.subscribe(() => {
|
|
1183
|
+
//Adding timeout so that the status of the previous step is read by Voice Over on Safari,
|
|
1184
|
+
//before focusing on the next stepper panel header
|
|
1185
|
+
setTimeout(() => this.headerButton.nativeElement.focus(), 1500);
|
|
1186
|
+
}));
|
|
1174
1187
|
}
|
|
1175
1188
|
triggerAllFormControlValidationIfError(panel) {
|
|
1176
1189
|
if (panel.status === AccordionStatus.Error) {
|
|
@@ -1179,10 +1192,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1179
1192
|
}
|
|
1180
1193
|
}
|
|
1181
1194
|
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 });
|
|
1182
|
-
ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-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\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-
|
|
1195
|
+
ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-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\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, 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 });
|
|
1183
1196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
|
|
1184
1197
|
type: Component,
|
|
1185
|
-
args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-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\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-
|
|
1198
|
+
args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-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\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && 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-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, 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" }]
|
|
1186
1199
|
}], ctorParameters: function () {
|
|
1187
1200
|
return [{ type: undefined, decorators: [{
|
|
1188
1201
|
type: Inject,
|
|
@@ -2965,10 +2978,19 @@ function collapse() {
|
|
|
2965
2978
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
2966
2979
|
*/
|
|
2967
2980
|
class DomAdapter {
|
|
2981
|
+
/*
|
|
2982
|
+
We clone the element and take its measurements from outside the grid
|
|
2983
|
+
so we don't trigger reflow for the whole datagrid.
|
|
2984
|
+
*/
|
|
2968
2985
|
userDefinedWidth(element) {
|
|
2969
|
-
element.
|
|
2970
|
-
|
|
2971
|
-
|
|
2986
|
+
const clonedElement = element.cloneNode(true);
|
|
2987
|
+
if (clonedElement.id) {
|
|
2988
|
+
clonedElement.id = clonedElement.id + '-clone';
|
|
2989
|
+
}
|
|
2990
|
+
clonedElement.classList.add('datagrid-cell-width-zero');
|
|
2991
|
+
document.body.appendChild(clonedElement);
|
|
2992
|
+
const userDefinedWidth = this.clientRect(clonedElement).width;
|
|
2993
|
+
clonedElement.remove();
|
|
2972
2994
|
return userDefinedWidth;
|
|
2973
2995
|
}
|
|
2974
2996
|
scrollBarWidth(element) {
|
|
@@ -3015,27 +3037,32 @@ class ClrExpandableAnimation {
|
|
|
3015
3037
|
this.element = element;
|
|
3016
3038
|
this.domAdapter = domAdapter;
|
|
3017
3039
|
this.renderer = renderer;
|
|
3040
|
+
this.clrExpandTrigger = false;
|
|
3018
3041
|
this.startHeight = 0;
|
|
3019
3042
|
}
|
|
3020
3043
|
get expandAnimation() {
|
|
3021
3044
|
return { value: this.clrExpandTrigger, params: { startHeight: this.startHeight } };
|
|
3022
3045
|
}
|
|
3023
|
-
animationStart() {
|
|
3024
|
-
|
|
3046
|
+
animationStart(event) {
|
|
3047
|
+
if (event.fromState !== 'void') {
|
|
3048
|
+
this.renderer.setStyle(this.element.nativeElement, 'overflow', 'hidden');
|
|
3049
|
+
}
|
|
3025
3050
|
}
|
|
3026
|
-
animationDone() {
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3051
|
+
animationDone(event) {
|
|
3052
|
+
if (event.fromState !== 'void') {
|
|
3053
|
+
this.renderer.removeStyle(this.element.nativeElement, 'overflow');
|
|
3054
|
+
// A "safe" auto-update of the height ensuring basic OOTB user experience .
|
|
3055
|
+
// Prone to small jumps in initial animation height if data was changed in the meantime, window was resized, etc.
|
|
3056
|
+
// For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
|
|
3057
|
+
this.updateStartHeight();
|
|
3058
|
+
}
|
|
3032
3059
|
}
|
|
3033
3060
|
updateStartHeight() {
|
|
3034
3061
|
this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
|
|
3035
3062
|
}
|
|
3036
3063
|
}
|
|
3037
3064
|
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps: [{ token: i0.ElementRef }, { token: DomAdapter }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
3038
|
-
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()", "@expandAnimation.done": "animationDone()" }, properties: { "@expandAnimation": "this.expandAnimation" } }, providers: [DomAdapter], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], animations: [
|
|
3065
|
+
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: [
|
|
3039
3066
|
trigger('expandAnimation', [
|
|
3040
3067
|
transition('true <=> false', [
|
|
3041
3068
|
style({ height: '{{startHeight}}px' }),
|
|
@@ -3060,10 +3087,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
3060
3087
|
args: ['@expandAnimation']
|
|
3061
3088
|
}], animationStart: [{
|
|
3062
3089
|
type: HostListener,
|
|
3063
|
-
args: ['@expandAnimation.start']
|
|
3090
|
+
args: ['@expandAnimation.start', ['$event']]
|
|
3064
3091
|
}], animationDone: [{
|
|
3065
3092
|
type: HostListener,
|
|
3066
|
-
args: ['@expandAnimation.done']
|
|
3093
|
+
args: ['@expandAnimation.done', ['$event']]
|
|
3067
3094
|
}] } });
|
|
3068
3095
|
|
|
3069
3096
|
/*
|
|
@@ -4744,7 +4771,10 @@ class ClrAbstractContainer {
|
|
|
4744
4771
|
this.subscriptions = [];
|
|
4745
4772
|
this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
|
|
4746
4773
|
this.state = state;
|
|
4747
|
-
|
|
4774
|
+
// Make sure everything is updated before dispatching the values for helpers
|
|
4775
|
+
setTimeout(() => {
|
|
4776
|
+
this.updateHelpers();
|
|
4777
|
+
});
|
|
4748
4778
|
}));
|
|
4749
4779
|
this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
|
|
4750
4780
|
this.control = control;
|
|
@@ -7301,7 +7331,7 @@ ClrCombobox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
7301
7331
|
IF_ACTIVE_ID_PROVIDER,
|
|
7302
7332
|
FOCUS_SERVICE_PROVIDER,
|
|
7303
7333
|
COMBOBOX_FOCUS_HANDLER_PROVIDER,
|
|
7304
|
-
], 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
|
|
7334
|
+
], 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-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- 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 <span class=\"clr-combobox-input-wrapper\">\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 </span>\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"] }] });
|
|
7305
7335
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrCombobox, decorators: [{
|
|
7306
7336
|
type: Component,
|
|
7307
7337
|
args: [{ selector: 'clr-combobox', providers: [
|
|
@@ -7314,7 +7344,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
7314
7344
|
'[class.aria-required]': 'true',
|
|
7315
7345
|
'[class.clr-combobox]': 'true',
|
|
7316
7346
|
'[class.clr-combobox-disabled]': 'control?.disabled',
|
|
7317
|
-
}, template: "<!--\n
|
|
7347
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- 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 <span class=\"clr-combobox-input-wrapper\">\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 </span>\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" }]
|
|
7318
7348
|
}], ctorParameters: function () {
|
|
7319
7349
|
return [{ type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i1.NgControl, decorators: [{
|
|
7320
7350
|
type: Self
|
|
@@ -7769,7 +7799,6 @@ class ClrDatalistContainer extends ClrAbstractContainer {
|
|
|
7769
7799
|
ClrDatalistContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatalistContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7770
7800
|
ClrDatalistContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatalistContainer, selector: "clr-datalist-container", host: { properties: { "class.clr-form-control": "true", "class.clr-form-control-disabled": "control?.disabled", "class.clr-row": "addGrid()" } }, providers: [
|
|
7771
7801
|
ControlClassService,
|
|
7772
|
-
LayoutService,
|
|
7773
7802
|
ControlIdService,
|
|
7774
7803
|
FocusService,
|
|
7775
7804
|
NgControlService,
|
|
@@ -7846,7 +7875,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
7846
7875
|
},
|
|
7847
7876
|
providers: [
|
|
7848
7877
|
ControlClassService,
|
|
7849
|
-
LayoutService,
|
|
7850
7878
|
ControlIdService,
|
|
7851
7879
|
FocusService,
|
|
7852
7880
|
NgControlService,
|
|
@@ -9657,7 +9685,7 @@ class ClrDatepickerViewManager {
|
|
|
9657
9685
|
}
|
|
9658
9686
|
}
|
|
9659
9687
|
ClrDatepickerViewManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, deps: [{ token: ClrCommonStringsService }, { token: ViewManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9660
|
-
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", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n
|
|
9688
|
+
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", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n<clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n<clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ClrMonthpicker, selector: "clr-monthpicker" }, { kind: "component", type: ClrYearpicker, selector: "clr-yearpicker" }, { kind: "component", type: ClrDaypicker, selector: "clr-daypicker" }] });
|
|
9661
9689
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
|
|
9662
9690
|
type: Component,
|
|
9663
9691
|
args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
|
|
@@ -9665,7 +9693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9665
9693
|
'[attr.aria-modal]': 'true',
|
|
9666
9694
|
'[attr.aria-label]': 'commonStrings.keys.datepickerDialogLabel',
|
|
9667
9695
|
role: 'dialog',
|
|
9668
|
-
}, template: "<!--\n
|
|
9696
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n<clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n<clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n" }]
|
|
9669
9697
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: ViewManagerService }]; } });
|
|
9670
9698
|
|
|
9671
9699
|
/*
|
|
@@ -10294,6 +10322,395 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
10294
10322
|
}]
|
|
10295
10323
|
}], ctorParameters: function () { return []; } });
|
|
10296
10324
|
|
|
10325
|
+
/*
|
|
10326
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10327
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10328
|
+
* This software is released under MIT license.
|
|
10329
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10330
|
+
*/
|
|
10331
|
+
class ClrFileInputContainer extends ClrAbstractContainer {
|
|
10332
|
+
constructor() {
|
|
10333
|
+
super(...arguments);
|
|
10334
|
+
this.commonStrings = inject(ClrCommonStringsService);
|
|
10335
|
+
}
|
|
10336
|
+
get disabled() {
|
|
10337
|
+
return this.fileInput.elementRef.nativeElement.disabled;
|
|
10338
|
+
}
|
|
10339
|
+
get browseButtonDescribedBy() {
|
|
10340
|
+
return this.fileInput.elementRef.nativeElement.getAttribute('aria-describedby');
|
|
10341
|
+
}
|
|
10342
|
+
browse() {
|
|
10343
|
+
this.fileInput.elementRef.nativeElement.click();
|
|
10344
|
+
}
|
|
10345
|
+
clearSelectedFiles() {
|
|
10346
|
+
this.fileInput.elementRef.nativeElement.value = '';
|
|
10347
|
+
this.fileInput.elementRef.nativeElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
10348
|
+
this.browseButtonElementRef.nativeElement.focus();
|
|
10349
|
+
}
|
|
10350
|
+
}
|
|
10351
|
+
ClrFileInputContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputContainer, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
10352
|
+
ClrFileInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInputContainer, selector: "clr-file-input-container", inputs: { customButtonLabel: ["clrButtonLabel", "customButtonLabel"] }, host: { properties: { "class.clr-form-control": "true", "class.clr-form-control-disabled": "disabled", "class.clr-row": "addGrid()" } }, providers: [IfControlStateService, NgControlService, ControlIdService, ControlClassService], queries: [{ propertyName: "fileInput", first: true, predicate: i0.forwardRef(function () { return ClrFileInput; }), descendants: true }], viewQueries: [{ propertyName: "browseButtonElementRef", first: true, predicate: ["browseButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
10353
|
+
<ng-content select="label"></ng-content>
|
|
10354
|
+
<label *ngIf="!label && addGrid()"></label>
|
|
10355
|
+
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
10356
|
+
<div class="clr-file-input-wrapper">
|
|
10357
|
+
<ng-content select="[clrFileInput]"></ng-content>
|
|
10358
|
+
<button
|
|
10359
|
+
#browseButton
|
|
10360
|
+
type="button"
|
|
10361
|
+
class="btn btn-sm clr-file-input-browse-button"
|
|
10362
|
+
[attr.aria-describedby]="browseButtonDescribedBy"
|
|
10363
|
+
[disabled]="disabled"
|
|
10364
|
+
(click)="browse()"
|
|
10365
|
+
>
|
|
10366
|
+
<cds-icon shape="folder-open"></cds-icon>
|
|
10367
|
+
<span class="clr-file-input-browse-button-text">
|
|
10368
|
+
{{ fileInput?.selection?.buttonLabel || customButtonLabel || commonStrings.keys.browse }}
|
|
10369
|
+
</span>
|
|
10370
|
+
</button>
|
|
10371
|
+
<button
|
|
10372
|
+
*ngIf="fileInput?.selection?.fileCount"
|
|
10373
|
+
type="button"
|
|
10374
|
+
class="btn btn-sm clr-file-input-clear-button"
|
|
10375
|
+
[attr.aria-label]="fileInput?.selection?.clearFilesButtonLabel"
|
|
10376
|
+
(click)="clearSelectedFiles()"
|
|
10377
|
+
>
|
|
10378
|
+
<cds-icon shape="times" status="neutral" size="md"></cds-icon>
|
|
10379
|
+
</button>
|
|
10380
|
+
<cds-icon
|
|
10381
|
+
*ngIf="showInvalid"
|
|
10382
|
+
class="clr-validate-icon"
|
|
10383
|
+
shape="exclamation-circle"
|
|
10384
|
+
status="danger"
|
|
10385
|
+
aria-hidden="true"
|
|
10386
|
+
></cds-icon>
|
|
10387
|
+
<cds-icon
|
|
10388
|
+
*ngIf="showValid"
|
|
10389
|
+
class="clr-validate-icon"
|
|
10390
|
+
shape="check-circle"
|
|
10391
|
+
status="success"
|
|
10392
|
+
aria-hidden="true"
|
|
10393
|
+
></cds-icon>
|
|
10394
|
+
</div>
|
|
10395
|
+
<ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content>
|
|
10396
|
+
<ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
|
|
10397
|
+
<ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
|
|
10398
|
+
</div>
|
|
10399
|
+
`, isInline: true, 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: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }] });
|
|
10400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputContainer, decorators: [{
|
|
10401
|
+
type: Component,
|
|
10402
|
+
args: [{
|
|
10403
|
+
selector: 'clr-file-input-container',
|
|
10404
|
+
template: `
|
|
10405
|
+
<ng-content select="label"></ng-content>
|
|
10406
|
+
<label *ngIf="!label && addGrid()"></label>
|
|
10407
|
+
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
10408
|
+
<div class="clr-file-input-wrapper">
|
|
10409
|
+
<ng-content select="[clrFileInput]"></ng-content>
|
|
10410
|
+
<button
|
|
10411
|
+
#browseButton
|
|
10412
|
+
type="button"
|
|
10413
|
+
class="btn btn-sm clr-file-input-browse-button"
|
|
10414
|
+
[attr.aria-describedby]="browseButtonDescribedBy"
|
|
10415
|
+
[disabled]="disabled"
|
|
10416
|
+
(click)="browse()"
|
|
10417
|
+
>
|
|
10418
|
+
<cds-icon shape="folder-open"></cds-icon>
|
|
10419
|
+
<span class="clr-file-input-browse-button-text">
|
|
10420
|
+
{{ fileInput?.selection?.buttonLabel || customButtonLabel || commonStrings.keys.browse }}
|
|
10421
|
+
</span>
|
|
10422
|
+
</button>
|
|
10423
|
+
<button
|
|
10424
|
+
*ngIf="fileInput?.selection?.fileCount"
|
|
10425
|
+
type="button"
|
|
10426
|
+
class="btn btn-sm clr-file-input-clear-button"
|
|
10427
|
+
[attr.aria-label]="fileInput?.selection?.clearFilesButtonLabel"
|
|
10428
|
+
(click)="clearSelectedFiles()"
|
|
10429
|
+
>
|
|
10430
|
+
<cds-icon shape="times" status="neutral" size="md"></cds-icon>
|
|
10431
|
+
</button>
|
|
10432
|
+
<cds-icon
|
|
10433
|
+
*ngIf="showInvalid"
|
|
10434
|
+
class="clr-validate-icon"
|
|
10435
|
+
shape="exclamation-circle"
|
|
10436
|
+
status="danger"
|
|
10437
|
+
aria-hidden="true"
|
|
10438
|
+
></cds-icon>
|
|
10439
|
+
<cds-icon
|
|
10440
|
+
*ngIf="showValid"
|
|
10441
|
+
class="clr-validate-icon"
|
|
10442
|
+
shape="check-circle"
|
|
10443
|
+
status="success"
|
|
10444
|
+
aria-hidden="true"
|
|
10445
|
+
></cds-icon>
|
|
10446
|
+
</div>
|
|
10447
|
+
<ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content>
|
|
10448
|
+
<ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
|
|
10449
|
+
<ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
|
|
10450
|
+
</div>
|
|
10451
|
+
`,
|
|
10452
|
+
host: {
|
|
10453
|
+
'[class.clr-form-control]': 'true',
|
|
10454
|
+
'[class.clr-form-control-disabled]': 'disabled',
|
|
10455
|
+
'[class.clr-row]': 'addGrid()',
|
|
10456
|
+
},
|
|
10457
|
+
providers: [IfControlStateService, NgControlService, ControlIdService, ControlClassService],
|
|
10458
|
+
}]
|
|
10459
|
+
}], propDecorators: { customButtonLabel: [{
|
|
10460
|
+
type: Input,
|
|
10461
|
+
args: ['clrButtonLabel']
|
|
10462
|
+
}], fileInput: [{
|
|
10463
|
+
type: ContentChild,
|
|
10464
|
+
args: [forwardRef(() => ClrFileInput)]
|
|
10465
|
+
}], browseButtonElementRef: [{
|
|
10466
|
+
type: ViewChild,
|
|
10467
|
+
args: ['browseButton']
|
|
10468
|
+
}] } });
|
|
10469
|
+
|
|
10470
|
+
/*
|
|
10471
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10472
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10473
|
+
* This software is released under MIT license.
|
|
10474
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10475
|
+
*/
|
|
10476
|
+
class ClrFileInput extends WrappedFormControl {
|
|
10477
|
+
constructor(injector, renderer, viewContainerRef, elementRef, control, commonStrings) {
|
|
10478
|
+
super(viewContainerRef, ClrFileInputContainer, injector, control, renderer, elementRef);
|
|
10479
|
+
this.elementRef = elementRef;
|
|
10480
|
+
this.commonStrings = commonStrings;
|
|
10481
|
+
this.selection = undefined;
|
|
10482
|
+
}
|
|
10483
|
+
handleChange() {
|
|
10484
|
+
this.updateSelection();
|
|
10485
|
+
}
|
|
10486
|
+
updateSelection() {
|
|
10487
|
+
const files = this.elementRef.nativeElement.files;
|
|
10488
|
+
let selectionButtonLabel;
|
|
10489
|
+
let clearFilesButtonLabel;
|
|
10490
|
+
if ((files === null || files === void 0 ? void 0 : files.length) === 1) {
|
|
10491
|
+
const filename = files[0].name;
|
|
10492
|
+
selectionButtonLabel = filename;
|
|
10493
|
+
clearFilesButtonLabel = this.commonStrings.parse(this.commonStrings.keys.clearFile, {
|
|
10494
|
+
FILE: filename,
|
|
10495
|
+
});
|
|
10496
|
+
}
|
|
10497
|
+
else if ((files === null || files === void 0 ? void 0 : files.length) > 1) {
|
|
10498
|
+
const fileCount = files.length.toString();
|
|
10499
|
+
selectionButtonLabel = this.commonStrings.parse(this.commonStrings.keys.fileCount, {
|
|
10500
|
+
COUNT: fileCount,
|
|
10501
|
+
});
|
|
10502
|
+
clearFilesButtonLabel = this.commonStrings.parse(this.commonStrings.keys.clearFiles, {
|
|
10503
|
+
COUNT: fileCount,
|
|
10504
|
+
});
|
|
10505
|
+
}
|
|
10506
|
+
this.selection = {
|
|
10507
|
+
fileCount: files.length,
|
|
10508
|
+
buttonLabel: selectionButtonLabel,
|
|
10509
|
+
clearFilesButtonLabel,
|
|
10510
|
+
};
|
|
10511
|
+
}
|
|
10512
|
+
}
|
|
10513
|
+
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 });
|
|
10514
|
+
ClrFileInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInput, selector: "input[type=\"file\"][clrFileInput]", host: { listeners: { "change": "handleChange()" }, properties: { "class.clr-file-input": "true" } }, usesInheritance: true, ngImport: i0 });
|
|
10515
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInput, decorators: [{
|
|
10516
|
+
type: Directive,
|
|
10517
|
+
args: [{
|
|
10518
|
+
selector: 'input[type="file"][clrFileInput]',
|
|
10519
|
+
host: {
|
|
10520
|
+
'[class.clr-file-input]': 'true',
|
|
10521
|
+
},
|
|
10522
|
+
}]
|
|
10523
|
+
}], ctorParameters: function () {
|
|
10524
|
+
return [{ type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
10525
|
+
type: Self
|
|
10526
|
+
}, {
|
|
10527
|
+
type: Optional
|
|
10528
|
+
}] }, { type: ClrCommonStringsService }];
|
|
10529
|
+
}, propDecorators: { handleChange: [{
|
|
10530
|
+
type: HostListener,
|
|
10531
|
+
args: ['change']
|
|
10532
|
+
}] } });
|
|
10533
|
+
|
|
10534
|
+
/*
|
|
10535
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10536
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10537
|
+
* This software is released under MIT license.
|
|
10538
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10539
|
+
*/
|
|
10540
|
+
class ClrFileInputValidator {
|
|
10541
|
+
constructor(elementRef) {
|
|
10542
|
+
this.elementRef = elementRef;
|
|
10543
|
+
}
|
|
10544
|
+
validate(control) {
|
|
10545
|
+
const files = control.value;
|
|
10546
|
+
const fileInputElement = this.elementRef.nativeElement;
|
|
10547
|
+
const errors = {};
|
|
10548
|
+
// required validation (native attribute)
|
|
10549
|
+
if (fileInputElement.required && (files === null || files === void 0 ? void 0 : files.length) === 0) {
|
|
10550
|
+
errors.required = true;
|
|
10551
|
+
}
|
|
10552
|
+
// accept validation (native attribute)
|
|
10553
|
+
if (fileInputElement.accept && (files === null || files === void 0 ? void 0 : files.length) > 0) {
|
|
10554
|
+
const accept = fileInputElement.accept.split(',').map(type => type.trim());
|
|
10555
|
+
for (let i = 0; i < files.length; i++) {
|
|
10556
|
+
const file = files.item(i);
|
|
10557
|
+
const [fileExtension] = file.name.match(/\..+$/);
|
|
10558
|
+
if (!accept.includes(file.type) && !accept.includes(fileExtension)) {
|
|
10559
|
+
errors.accept = errors.accept || [];
|
|
10560
|
+
errors.accept.push({ name: file.name, accept, type: file.type, extension: fileExtension });
|
|
10561
|
+
}
|
|
10562
|
+
}
|
|
10563
|
+
}
|
|
10564
|
+
// min file validation (custom input)
|
|
10565
|
+
if (this.minFileSize && (files === null || files === void 0 ? void 0 : files.length) > 0) {
|
|
10566
|
+
for (let i = 0; i < files.length; i++) {
|
|
10567
|
+
const file = files.item(i);
|
|
10568
|
+
if (file.size < this.minFileSize) {
|
|
10569
|
+
errors.minFileSize = errors.minFileSize || [];
|
|
10570
|
+
errors.minFileSize.push({ name: file.name, minFileSize: this.minFileSize, actualFileSize: file.size });
|
|
10571
|
+
}
|
|
10572
|
+
}
|
|
10573
|
+
}
|
|
10574
|
+
// max file validation (custom input)
|
|
10575
|
+
if (this.maxFileSize && (files === null || files === void 0 ? void 0 : files.length) > 0) {
|
|
10576
|
+
for (let i = 0; i < files.length; i++) {
|
|
10577
|
+
const file = files.item(i);
|
|
10578
|
+
if (file.size > this.maxFileSize) {
|
|
10579
|
+
errors.maxFileSize = errors.maxFileSize || [];
|
|
10580
|
+
errors.maxFileSize.push({ name: file.name, maxFileSize: this.maxFileSize, actualFileSize: file.size });
|
|
10581
|
+
}
|
|
10582
|
+
}
|
|
10583
|
+
}
|
|
10584
|
+
return Object.keys(errors).length ? errors : null;
|
|
10585
|
+
}
|
|
10586
|
+
}
|
|
10587
|
+
ClrFileInputValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputValidator, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
10588
|
+
ClrFileInputValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInputValidator, selector: "input[type=\"file\"][clrFileInput]", inputs: { minFileSize: ["clrMinFileSize", "minFileSize"], maxFileSize: ["clrMaxFileSize", "maxFileSize"] }, providers: [{ provide: NG_VALIDATORS, useExisting: ClrFileInputValidator, multi: true }], ngImport: i0 });
|
|
10589
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputValidator, decorators: [{
|
|
10590
|
+
type: Directive,
|
|
10591
|
+
args: [{
|
|
10592
|
+
selector: 'input[type="file"][clrFileInput]',
|
|
10593
|
+
providers: [{ provide: NG_VALIDATORS, useExisting: ClrFileInputValidator, multi: true }],
|
|
10594
|
+
}]
|
|
10595
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { minFileSize: [{
|
|
10596
|
+
type: Input,
|
|
10597
|
+
args: ['clrMinFileSize']
|
|
10598
|
+
}], maxFileSize: [{
|
|
10599
|
+
type: Input,
|
|
10600
|
+
args: ['clrMaxFileSize']
|
|
10601
|
+
}] } });
|
|
10602
|
+
|
|
10603
|
+
/*
|
|
10604
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10605
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10606
|
+
* This software is released under MIT license.
|
|
10607
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10608
|
+
*/
|
|
10609
|
+
function buildFileList(files) {
|
|
10610
|
+
const dataTransfer = new DataTransfer();
|
|
10611
|
+
for (const file of files) {
|
|
10612
|
+
dataTransfer.items.add(file);
|
|
10613
|
+
}
|
|
10614
|
+
return dataTransfer.files;
|
|
10615
|
+
}
|
|
10616
|
+
function selectFiles(fileInputElement, files) {
|
|
10617
|
+
fileInputElement.files = files instanceof FileList ? files : buildFileList(files);
|
|
10618
|
+
fileInputElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
10619
|
+
}
|
|
10620
|
+
function clearFiles(fileInputElement) {
|
|
10621
|
+
fileInputElement.value = '';
|
|
10622
|
+
fileInputElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
10623
|
+
}
|
|
10624
|
+
|
|
10625
|
+
/*
|
|
10626
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10627
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10628
|
+
* This software is released under MIT license.
|
|
10629
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10630
|
+
*/
|
|
10631
|
+
class ClrFileInputValueAccessor {
|
|
10632
|
+
constructor(elementRef) {
|
|
10633
|
+
this.elementRef = elementRef;
|
|
10634
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
10635
|
+
this.onChange = (_value) => { };
|
|
10636
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
10637
|
+
this.onTouched = () => { };
|
|
10638
|
+
}
|
|
10639
|
+
writeValue(value) {
|
|
10640
|
+
if (value !== undefined && value !== null && !(value instanceof FileList)) {
|
|
10641
|
+
throw new Error('The value of a file input control must be a FileList.');
|
|
10642
|
+
}
|
|
10643
|
+
if (value) {
|
|
10644
|
+
selectFiles(this.elementRef.nativeElement, value);
|
|
10645
|
+
}
|
|
10646
|
+
else if (this.elementRef.nativeElement.files.length) {
|
|
10647
|
+
clearFiles(this.elementRef.nativeElement);
|
|
10648
|
+
}
|
|
10649
|
+
}
|
|
10650
|
+
registerOnChange(fn) {
|
|
10651
|
+
this.onChange = fn;
|
|
10652
|
+
}
|
|
10653
|
+
registerOnTouched(fn) {
|
|
10654
|
+
this.onTouched = fn;
|
|
10655
|
+
}
|
|
10656
|
+
handleChange() {
|
|
10657
|
+
this.onTouched();
|
|
10658
|
+
this.onChange(this.elementRef.nativeElement.files);
|
|
10659
|
+
}
|
|
10660
|
+
}
|
|
10661
|
+
ClrFileInputValueAccessor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputValueAccessor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
10662
|
+
ClrFileInputValueAccessor.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInputValueAccessor, selector: "input[type=\"file\"][clrFileInput]", host: { listeners: { "change": "handleChange()" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ClrFileInputValueAccessor, multi: true }], ngImport: i0 });
|
|
10663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputValueAccessor, decorators: [{
|
|
10664
|
+
type: Directive,
|
|
10665
|
+
args: [{
|
|
10666
|
+
selector: 'input[type="file"][clrFileInput]',
|
|
10667
|
+
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ClrFileInputValueAccessor, multi: true }],
|
|
10668
|
+
}]
|
|
10669
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { handleChange: [{
|
|
10670
|
+
type: HostListener,
|
|
10671
|
+
args: ['change']
|
|
10672
|
+
}] } });
|
|
10673
|
+
|
|
10674
|
+
/*
|
|
10675
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10676
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10677
|
+
* This software is released under MIT license.
|
|
10678
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10679
|
+
*/
|
|
10680
|
+
class ClrFileInputModule {
|
|
10681
|
+
constructor() {
|
|
10682
|
+
ClarityIcons.addIcons(folderOpenIcon);
|
|
10683
|
+
}
|
|
10684
|
+
}
|
|
10685
|
+
ClrFileInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10686
|
+
ClrFileInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputModule, declarations: [ClrFileInput, ClrFileInputContainer, ClrFileInputValidator, ClrFileInputValueAccessor], imports: [CommonModule, ClrIconModule, ClrCommonFormsModule], exports: [ClrCommonFormsModule,
|
|
10687
|
+
ClrFileInput,
|
|
10688
|
+
ClrFileInputContainer,
|
|
10689
|
+
ClrFileInputValidator,
|
|
10690
|
+
ClrFileInputValueAccessor] });
|
|
10691
|
+
ClrFileInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputModule, imports: [CommonModule, ClrIconModule, ClrCommonFormsModule, ClrCommonFormsModule] });
|
|
10692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInputModule, decorators: [{
|
|
10693
|
+
type: NgModule,
|
|
10694
|
+
args: [{
|
|
10695
|
+
imports: [CommonModule, ClrIconModule, ClrCommonFormsModule],
|
|
10696
|
+
declarations: [ClrFileInput, ClrFileInputContainer, ClrFileInputValidator, ClrFileInputValueAccessor],
|
|
10697
|
+
exports: [
|
|
10698
|
+
ClrCommonFormsModule,
|
|
10699
|
+
ClrFileInput,
|
|
10700
|
+
ClrFileInputContainer,
|
|
10701
|
+
ClrFileInputValidator,
|
|
10702
|
+
ClrFileInputValueAccessor,
|
|
10703
|
+
],
|
|
10704
|
+
}]
|
|
10705
|
+
}], ctorParameters: function () { return []; } });
|
|
10706
|
+
|
|
10707
|
+
/*
|
|
10708
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10709
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
10710
|
+
* This software is released under MIT license.
|
|
10711
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
10712
|
+
*/
|
|
10713
|
+
|
|
10297
10714
|
/*
|
|
10298
10715
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
10299
10716
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -11236,6 +11653,7 @@ ClrFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
|
|
|
11236
11653
|
ClrCheckboxModule,
|
|
11237
11654
|
ClrComboboxModule,
|
|
11238
11655
|
ClrDatepickerModule,
|
|
11656
|
+
ClrFileInputModule,
|
|
11239
11657
|
ClrInputModule,
|
|
11240
11658
|
ClrPasswordModule,
|
|
11241
11659
|
ClrRadioModule,
|
|
@@ -11247,6 +11665,7 @@ ClrFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
|
|
|
11247
11665
|
ClrCheckboxModule,
|
|
11248
11666
|
ClrComboboxModule,
|
|
11249
11667
|
ClrDatepickerModule,
|
|
11668
|
+
ClrFileInputModule,
|
|
11250
11669
|
ClrInputModule,
|
|
11251
11670
|
ClrPasswordModule,
|
|
11252
11671
|
ClrRadioModule,
|
|
@@ -11263,6 +11682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
11263
11682
|
ClrCheckboxModule,
|
|
11264
11683
|
ClrComboboxModule,
|
|
11265
11684
|
ClrDatepickerModule,
|
|
11685
|
+
ClrFileInputModule,
|
|
11266
11686
|
ClrInputModule,
|
|
11267
11687
|
ClrPasswordModule,
|
|
11268
11688
|
ClrRadioModule,
|
|
@@ -11776,49 +12196,243 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
11776
12196
|
* This software is released under MIT license.
|
|
11777
12197
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
11778
12198
|
*/
|
|
11779
|
-
|
|
11780
|
-
|
|
11781
|
-
|
|
11782
|
-
|
|
11783
|
-
|
|
11784
|
-
|
|
11785
|
-
|
|
11786
|
-
|
|
11787
|
-
|
|
11788
|
-
|
|
11789
|
-
|
|
11790
|
-
|
|
11791
|
-
|
|
11792
|
-
|
|
11793
|
-
|
|
11794
|
-
|
|
11795
|
-
|
|
11796
|
-
|
|
11797
|
-
|
|
11798
|
-
|
|
11799
|
-
|
|
11800
|
-
|
|
11801
|
-
this.
|
|
11802
|
-
this.
|
|
11803
|
-
this.
|
|
11804
|
-
|
|
11805
|
-
|
|
11806
|
-
|
|
11807
|
-
|
|
11808
|
-
|
|
11809
|
-
|
|
11810
|
-
|
|
11811
|
-
|
|
11812
|
-
|
|
11813
|
-
|
|
11814
|
-
|
|
11815
|
-
|
|
11816
|
-
|
|
11817
|
-
|
|
11818
|
-
|
|
11819
|
-
|
|
11820
|
-
|
|
11821
|
-
|
|
12199
|
+
function getTabableItems(el) {
|
|
12200
|
+
const tabableSelector = [
|
|
12201
|
+
'a[href]',
|
|
12202
|
+
'area[href]',
|
|
12203
|
+
'input:not([disabled])',
|
|
12204
|
+
'button:not([disabled])',
|
|
12205
|
+
'select:not([disabled])',
|
|
12206
|
+
'textarea:not([disabled])',
|
|
12207
|
+
'iframe',
|
|
12208
|
+
'object',
|
|
12209
|
+
'embed',
|
|
12210
|
+
'*[tabindex]',
|
|
12211
|
+
'*[contenteditable=true]',
|
|
12212
|
+
'[role=button]:not([disabled])',
|
|
12213
|
+
].join(',');
|
|
12214
|
+
return Array.from(el.querySelectorAll(tabableSelector));
|
|
12215
|
+
}
|
|
12216
|
+
class KeyNavigationGridController {
|
|
12217
|
+
constructor(zone) {
|
|
12218
|
+
this.zone = zone;
|
|
12219
|
+
this.skipItemFocus = false;
|
|
12220
|
+
this.listenersAdded = false;
|
|
12221
|
+
this.destroy$ = new Subject();
|
|
12222
|
+
this._activeCell = null;
|
|
12223
|
+
this.config = {
|
|
12224
|
+
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
12225
|
+
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
12226
|
+
keyGrid: '[role=grid]',
|
|
12227
|
+
};
|
|
12228
|
+
}
|
|
12229
|
+
get grid() {
|
|
12230
|
+
var _a;
|
|
12231
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector(this.config.keyGrid);
|
|
12232
|
+
}
|
|
12233
|
+
get rows() {
|
|
12234
|
+
var _a;
|
|
12235
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridRows);
|
|
12236
|
+
}
|
|
12237
|
+
get cells() {
|
|
12238
|
+
var _a;
|
|
12239
|
+
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells);
|
|
12240
|
+
}
|
|
12241
|
+
ngOnDestroy() {
|
|
12242
|
+
this.destroy$.next();
|
|
12243
|
+
this.destroy$.complete();
|
|
12244
|
+
}
|
|
12245
|
+
addListeners() {
|
|
12246
|
+
if (this.listenersAdded) {
|
|
12247
|
+
return;
|
|
12248
|
+
}
|
|
12249
|
+
this.zone.runOutsideAngular(() => {
|
|
12250
|
+
fromEvent(this.grid, 'mousedown')
|
|
12251
|
+
.pipe(takeUntil(this.destroy$))
|
|
12252
|
+
.subscribe((e) => {
|
|
12253
|
+
// 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
|
|
12254
|
+
if (e.buttons === 1 && !e.ctrlKey) {
|
|
12255
|
+
const activeCell = this.cells
|
|
12256
|
+
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
12257
|
+
: null;
|
|
12258
|
+
if (activeCell) {
|
|
12259
|
+
this.setActiveCell(activeCell);
|
|
12260
|
+
}
|
|
12261
|
+
}
|
|
12262
|
+
});
|
|
12263
|
+
fromEvent(this.grid, 'wheel')
|
|
12264
|
+
.pipe(takeUntil(this.destroy$))
|
|
12265
|
+
.subscribe(() => {
|
|
12266
|
+
this.removeActiveCell();
|
|
12267
|
+
});
|
|
12268
|
+
fromEvent(this.grid, 'keydown')
|
|
12269
|
+
.pipe(takeUntil(this.destroy$))
|
|
12270
|
+
.subscribe((e) => {
|
|
12271
|
+
// Skip column resize events
|
|
12272
|
+
if (e.target.classList.contains('drag-handle') &&
|
|
12273
|
+
(e.code === 'ArrowLeft' || e.code === 'ArrowRight')) {
|
|
12274
|
+
return;
|
|
12275
|
+
}
|
|
12276
|
+
if (e.code === 'ArrowUp' ||
|
|
12277
|
+
e.code === 'ArrowDown' ||
|
|
12278
|
+
e.code === 'ArrowLeft' ||
|
|
12279
|
+
e.code === 'ArrowRight' ||
|
|
12280
|
+
e.code === 'End' ||
|
|
12281
|
+
e.code === 'Home' ||
|
|
12282
|
+
e.code === 'PageUp' ||
|
|
12283
|
+
e.code === 'PageDown') {
|
|
12284
|
+
const { x, y } = this.getNextItemCoordinate(e);
|
|
12285
|
+
const activeItem = this.rows
|
|
12286
|
+
? Array.from(this.rows[y].querySelectorAll(this.config.keyGridCells))[x]
|
|
12287
|
+
: null;
|
|
12288
|
+
if (activeItem) {
|
|
12289
|
+
this.setActiveCell(activeItem);
|
|
12290
|
+
}
|
|
12291
|
+
e.preventDefault();
|
|
12292
|
+
}
|
|
12293
|
+
});
|
|
12294
|
+
});
|
|
12295
|
+
this.listenersAdded = true;
|
|
12296
|
+
}
|
|
12297
|
+
initializeKeyGrid(host) {
|
|
12298
|
+
this.host = host;
|
|
12299
|
+
this.addListeners();
|
|
12300
|
+
this.resetKeyGrid();
|
|
12301
|
+
}
|
|
12302
|
+
resetKeyGrid() {
|
|
12303
|
+
var _a;
|
|
12304
|
+
(_a = this.cells) === null || _a === void 0 ? void 0 : _a.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
12305
|
+
const firstCell = this.cells ? this.cells[0] : null;
|
|
12306
|
+
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
12307
|
+
}
|
|
12308
|
+
removeActiveCell() {
|
|
12309
|
+
this._activeCell = null;
|
|
12310
|
+
}
|
|
12311
|
+
getActiveCell() {
|
|
12312
|
+
return this._activeCell;
|
|
12313
|
+
}
|
|
12314
|
+
setActiveCell(activeCell) {
|
|
12315
|
+
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
12316
|
+
if (prior) {
|
|
12317
|
+
prior.setAttribute('tabindex', '-1');
|
|
12318
|
+
}
|
|
12319
|
+
activeCell.setAttribute('tabindex', '0');
|
|
12320
|
+
this._activeCell = activeCell;
|
|
12321
|
+
const items = getTabableItems(activeCell);
|
|
12322
|
+
const item = activeCell.getAttribute('role') !== 'columnheader' && items[0] ? items[0] : activeCell;
|
|
12323
|
+
if (!this.skipItemFocus) {
|
|
12324
|
+
item.focus();
|
|
12325
|
+
}
|
|
12326
|
+
}
|
|
12327
|
+
getNextItemCoordinate(e) {
|
|
12328
|
+
var _a;
|
|
12329
|
+
let currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
12330
|
+
if (e.code === 'Tab') {
|
|
12331
|
+
currentCell = document.activeElement;
|
|
12332
|
+
}
|
|
12333
|
+
const currentRow = this.rows && currentCell ? Array.from(this.rows).find(r => r.contains(currentCell)) : null;
|
|
12334
|
+
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
12335
|
+
const numOfColumns = this.cells ? Math.floor(this.cells.length / this.rows.length - 1) : 0;
|
|
12336
|
+
let x = currentRow && currentCell
|
|
12337
|
+
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
12338
|
+
: 0;
|
|
12339
|
+
let y = currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0;
|
|
12340
|
+
const dir = this.host.dir;
|
|
12341
|
+
const inlineStart = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
12342
|
+
const inlineEnd = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
12343
|
+
const itemsPerPage = Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.rows[0].clientHeight) - 1 || 0;
|
|
12344
|
+
if (e.code === 'ArrowUp' && y !== 0) {
|
|
12345
|
+
y = y - 1;
|
|
12346
|
+
}
|
|
12347
|
+
else if (e.code === 'ArrowDown' && y < numOfRows) {
|
|
12348
|
+
y = y + 1;
|
|
12349
|
+
}
|
|
12350
|
+
else if (e.code === inlineStart && x !== 0) {
|
|
12351
|
+
x = x - 1;
|
|
12352
|
+
}
|
|
12353
|
+
else if (e.code === inlineEnd && x < numOfColumns) {
|
|
12354
|
+
x = x + 1;
|
|
12355
|
+
}
|
|
12356
|
+
else if (e.code === 'End') {
|
|
12357
|
+
x = numOfColumns;
|
|
12358
|
+
if (e.ctrlKey) {
|
|
12359
|
+
y = numOfRows;
|
|
12360
|
+
}
|
|
12361
|
+
}
|
|
12362
|
+
else if (e.code === 'Home') {
|
|
12363
|
+
x = 0;
|
|
12364
|
+
if (e.ctrlKey) {
|
|
12365
|
+
y = 0;
|
|
12366
|
+
}
|
|
12367
|
+
}
|
|
12368
|
+
else if (e.code === 'PageUp') {
|
|
12369
|
+
y = y - itemsPerPage > 0 ? y - itemsPerPage + 1 : 1;
|
|
12370
|
+
}
|
|
12371
|
+
else if (e.code === 'PageDown') {
|
|
12372
|
+
y = y + itemsPerPage < numOfRows ? y + itemsPerPage : numOfRows;
|
|
12373
|
+
}
|
|
12374
|
+
return { x, y };
|
|
12375
|
+
}
|
|
12376
|
+
}
|
|
12377
|
+
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12378
|
+
KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController });
|
|
12379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, decorators: [{
|
|
12380
|
+
type: Injectable
|
|
12381
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
12382
|
+
|
|
12383
|
+
/*
|
|
12384
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
12385
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
12386
|
+
* This software is released under MIT license.
|
|
12387
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
12388
|
+
*/
|
|
12389
|
+
/**
|
|
12390
|
+
* Custom filter that can be added in any column to override the default object property string filter.
|
|
12391
|
+
* The reason this is not just an input on DatagridColumn is because we need the filter's template to be projected,
|
|
12392
|
+
* since it can be anything (not just a text input).
|
|
12393
|
+
*/
|
|
12394
|
+
class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
12395
|
+
constructor(_filters, commonStrings, smartToggleService, platformId, elementRef, keyNavigation) {
|
|
12396
|
+
super(_filters);
|
|
12397
|
+
this.commonStrings = commonStrings;
|
|
12398
|
+
this.smartToggleService = smartToggleService;
|
|
12399
|
+
this.platformId = platformId;
|
|
12400
|
+
this.elementRef = elementRef;
|
|
12401
|
+
this.keyNavigation = keyNavigation;
|
|
12402
|
+
this.openChange = new EventEmitter(false);
|
|
12403
|
+
this.ariaExpanded = false;
|
|
12404
|
+
this.popoverId = uniqueIdFactory();
|
|
12405
|
+
// Smart Popover
|
|
12406
|
+
this.smartPosition = {
|
|
12407
|
+
axis: ClrAxis.VERTICAL,
|
|
12408
|
+
side: ClrSide.AFTER,
|
|
12409
|
+
anchor: ClrAlignment.END,
|
|
12410
|
+
content: ClrAlignment.END,
|
|
12411
|
+
};
|
|
12412
|
+
this._open = false;
|
|
12413
|
+
this.subs = [];
|
|
12414
|
+
this.subs.push(smartToggleService.openChange.subscribe(change => {
|
|
12415
|
+
this.open = change;
|
|
12416
|
+
this.ariaExpanded = change;
|
|
12417
|
+
}));
|
|
12418
|
+
}
|
|
12419
|
+
get open() {
|
|
12420
|
+
return this._open;
|
|
12421
|
+
}
|
|
12422
|
+
set open(open) {
|
|
12423
|
+
open = !!open;
|
|
12424
|
+
if (this.open !== open) {
|
|
12425
|
+
this.smartToggleService.open = open;
|
|
12426
|
+
this.openChange.emit(open);
|
|
12427
|
+
if (!open && isPlatformBrowser(this.platformId)) {
|
|
12428
|
+
this.anchor.nativeElement.focus();
|
|
12429
|
+
}
|
|
12430
|
+
if (this.keyNavigation) {
|
|
12431
|
+
this.keyNavigation.skipItemFocus = open;
|
|
12432
|
+
}
|
|
12433
|
+
// keep track of the state
|
|
12434
|
+
this._open = open;
|
|
12435
|
+
}
|
|
11822
12436
|
}
|
|
11823
12437
|
set customFilter(filter) {
|
|
11824
12438
|
this.setFilter(filter);
|
|
@@ -11830,7 +12444,9 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
11830
12444
|
return !!this.filter && this.filter.isActive();
|
|
11831
12445
|
}
|
|
11832
12446
|
ngOnChanges() {
|
|
11833
|
-
|
|
12447
|
+
setTimeout(() => {
|
|
12448
|
+
this.setToggleButtonAriaLabel();
|
|
12449
|
+
});
|
|
11834
12450
|
}
|
|
11835
12451
|
ngOnDestroy() {
|
|
11836
12452
|
super.ngOnDestroy();
|
|
@@ -11850,7 +12466,7 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
11850
12466
|
});
|
|
11851
12467
|
}
|
|
11852
12468
|
}
|
|
11853
|
-
ClrDatagridFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridFilter, deps: [{ token: FiltersProvider }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: PLATFORM_ID }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
12469
|
+
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 });
|
|
11854
12470
|
ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: { open: ["clrDgFilterOpen", "open"], customFilter: ["clrDgFilter", "customFilter"] }, outputs: { openChange: "clrDgFilterOpenChange" }, providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
11855
12471
|
<button
|
|
11856
12472
|
class="datagrid-filter-toggle"
|
|
@@ -11936,7 +12552,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
11936
12552
|
return [{ type: FiltersProvider }, { type: ClrCommonStringsService }, { type: ClrPopoverToggleService }, { type: undefined, decorators: [{
|
|
11937
12553
|
type: Inject,
|
|
11938
12554
|
args: [PLATFORM_ID]
|
|
11939
|
-
}] }, { type: i0.ElementRef }
|
|
12555
|
+
}] }, { type: i0.ElementRef }, { type: KeyNavigationGridController, decorators: [{
|
|
12556
|
+
type: Optional
|
|
12557
|
+
}] }];
|
|
11940
12558
|
}, propDecorators: { openChange: [{
|
|
11941
12559
|
type: Output,
|
|
11942
12560
|
args: ['clrDgFilterOpenChange']
|
|
@@ -12699,6 +13317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
12699
13317
|
class DetailService {
|
|
12700
13318
|
constructor(modalStackService) {
|
|
12701
13319
|
this.modalStackService = modalStackService;
|
|
13320
|
+
this.preventScroll = false;
|
|
12702
13321
|
this.toggleState = false;
|
|
12703
13322
|
this._enabled = false;
|
|
12704
13323
|
this._state = new BehaviorSubject(this.toggleState);
|
|
@@ -12709,6 +13328,12 @@ class DetailService {
|
|
|
12709
13328
|
set enabled(state) {
|
|
12710
13329
|
this._enabled = state;
|
|
12711
13330
|
}
|
|
13331
|
+
get preventFocusScroll() {
|
|
13332
|
+
return this.preventScroll;
|
|
13333
|
+
}
|
|
13334
|
+
set preventFocusScroll(preventScroll) {
|
|
13335
|
+
this.preventScroll = preventScroll;
|
|
13336
|
+
}
|
|
12712
13337
|
get state() {
|
|
12713
13338
|
return this.cache;
|
|
12714
13339
|
}
|
|
@@ -12727,10 +13352,13 @@ class DetailService {
|
|
|
12727
13352
|
}
|
|
12728
13353
|
close() {
|
|
12729
13354
|
this.toggleState = false;
|
|
13355
|
+
this.returnFocus();
|
|
12730
13356
|
this._state.next(this.toggleState);
|
|
12731
13357
|
this.modalStackService.trackModalClose(this);
|
|
13358
|
+
}
|
|
13359
|
+
returnFocus() {
|
|
12732
13360
|
if (this.button) {
|
|
12733
|
-
this.button.focus();
|
|
13361
|
+
this.button.focus({ preventScroll: this.preventFocusScroll });
|
|
12734
13362
|
this.button = null;
|
|
12735
13363
|
}
|
|
12736
13364
|
}
|
|
@@ -13038,7 +13666,7 @@ class DatagridRenderOrganizer {
|
|
|
13038
13666
|
this._renderStep.next(DatagridRenderStep.CLEAR_WIDTHS);
|
|
13039
13667
|
}
|
|
13040
13668
|
this._renderStep.next(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS);
|
|
13041
|
-
this._renderStep.next(DatagridRenderStep.ALIGN_COLUMNS);
|
|
13669
|
+
this._renderStep.next(DatagridRenderStep.ALIGN_COLUMNS); // NOT USED
|
|
13042
13670
|
this.alreadySized = true;
|
|
13043
13671
|
this._renderStep.next(DatagridRenderStep.CALCULATE_MODE_OFF);
|
|
13044
13672
|
}
|
|
@@ -14753,6 +15381,7 @@ class ClrDatagridSelectionCellDirective {
|
|
|
14753
15381
|
this.selection = selection;
|
|
14754
15382
|
}
|
|
14755
15383
|
onSelectionCellClick(event) {
|
|
15384
|
+
var _a;
|
|
14756
15385
|
// We want to effectively expand the selection click target to the entire selection cell.
|
|
14757
15386
|
// If row selection is enabled, do nothing because the entire selection cell is already clickable.
|
|
14758
15387
|
if (this.selection.rowSelectionMode) {
|
|
@@ -14760,7 +15389,7 @@ class ClrDatagridSelectionCellDirective {
|
|
|
14760
15389
|
}
|
|
14761
15390
|
// If click was outside the label/input, forward the click to the input.
|
|
14762
15391
|
if (event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT') {
|
|
14763
|
-
event.target.querySelector('input').click();
|
|
15392
|
+
(_a = event.target.querySelector('input')) === null || _a === void 0 ? void 0 : _a.click();
|
|
14764
15393
|
}
|
|
14765
15394
|
}
|
|
14766
15395
|
}
|
|
@@ -15030,7 +15659,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
15030
15659
|
DatagridIfExpandService,
|
|
15031
15660
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15032
15661
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15033
|
-
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
15662
|
+
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
15034
15663
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
15035
15664
|
type: Component,
|
|
15036
15665
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -15042,7 +15671,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15042
15671
|
DatagridIfExpandService,
|
|
15043
15672
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15044
15673
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15045
|
-
], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div
|
|
15674
|
+
], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
|
|
15046
15675
|
}], ctorParameters: function () {
|
|
15047
15676
|
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: [{
|
|
15048
15677
|
type: Inject,
|
|
@@ -15102,10 +15731,11 @@ var DatagridColumnChanges;
|
|
|
15102
15731
|
(function (DatagridColumnChanges) {
|
|
15103
15732
|
DatagridColumnChanges[DatagridColumnChanges["WIDTH"] = 0] = "WIDTH";
|
|
15104
15733
|
DatagridColumnChanges[DatagridColumnChanges["HIDDEN"] = 1] = "HIDDEN";
|
|
15734
|
+
DatagridColumnChanges[DatagridColumnChanges["INITIALIZE"] = 2] = "INITIALIZE";
|
|
15105
15735
|
})(DatagridColumnChanges || (DatagridColumnChanges = {}));
|
|
15106
15736
|
const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
|
|
15107
15737
|
.map(key => DatagridColumnChanges[key])
|
|
15108
|
-
.filter(key => key === parseInt(key, 10)); // extracts only integer keys
|
|
15738
|
+
.filter(key => key === parseInt(key, 10) && key !== DatagridColumnChanges.INITIALIZE); // extracts only integer keys
|
|
15109
15739
|
|
|
15110
15740
|
/*
|
|
15111
15741
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -15116,6 +15746,7 @@ const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
|
|
|
15116
15746
|
class ColumnsService {
|
|
15117
15747
|
constructor() {
|
|
15118
15748
|
this.columns = [];
|
|
15749
|
+
this.columnsStateChange = new BehaviorSubject(null);
|
|
15119
15750
|
this._cache = [];
|
|
15120
15751
|
}
|
|
15121
15752
|
get columnStates() {
|
|
@@ -15137,7 +15768,9 @@ class ColumnsService {
|
|
|
15137
15768
|
resetToLastCache() {
|
|
15138
15769
|
this._cache.forEach((state, index) => {
|
|
15139
15770
|
// Just emit the exact value from the cache
|
|
15140
|
-
|
|
15771
|
+
const cachedState = Object.assign(Object.assign({}, state), { changes: ALL_COLUMN_CHANGES });
|
|
15772
|
+
this.columns[index].next(cachedState);
|
|
15773
|
+
this.columnsStateChange.next(cachedState);
|
|
15141
15774
|
});
|
|
15142
15775
|
this._cache = [];
|
|
15143
15776
|
}
|
|
@@ -15149,7 +15782,9 @@ class ColumnsService {
|
|
|
15149
15782
|
this.emitStateChange(this.columns[columnIndex], diff);
|
|
15150
15783
|
}
|
|
15151
15784
|
emitStateChange(column, diff) {
|
|
15152
|
-
|
|
15785
|
+
const changedState = Object.assign(Object.assign({}, column.value), diff);
|
|
15786
|
+
column.next(changedState);
|
|
15787
|
+
this.columnsStateChange.next(changedState);
|
|
15153
15788
|
}
|
|
15154
15789
|
}
|
|
15155
15790
|
ColumnsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ColumnsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -15231,172 +15866,123 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15231
15866
|
* This software is released under MIT license.
|
|
15232
15867
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
15233
15868
|
*/
|
|
15234
|
-
|
|
15235
|
-
|
|
15236
|
-
|
|
15237
|
-
|
|
15238
|
-
|
|
15239
|
-
|
|
15240
|
-
|
|
15241
|
-
|
|
15242
|
-
|
|
15243
|
-
|
|
15244
|
-
|
|
15245
|
-
|
|
15246
|
-
|
|
15247
|
-
|
|
15248
|
-
|
|
15249
|
-
|
|
15250
|
-
|
|
15251
|
-
|
|
15252
|
-
|
|
15253
|
-
this.zone = zone;
|
|
15254
|
-
this.listenersAdded = false;
|
|
15255
|
-
this.destroy$ = new Subject();
|
|
15256
|
-
this.config = {
|
|
15257
|
-
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
15258
|
-
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
15259
|
-
keyGrid: '[role=grid]',
|
|
15260
|
-
};
|
|
15261
|
-
}
|
|
15262
|
-
get grid() {
|
|
15263
|
-
var _a;
|
|
15264
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector(this.config.keyGrid);
|
|
15265
|
-
}
|
|
15266
|
-
get rows() {
|
|
15267
|
-
var _a;
|
|
15268
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridRows);
|
|
15269
|
-
}
|
|
15270
|
-
get cells() {
|
|
15271
|
-
var _a;
|
|
15272
|
-
return (_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.config.keyGridCells);
|
|
15869
|
+
// @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
|
|
15870
|
+
// There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
|
|
15871
|
+
const NO_LAYOUT_CLASS = 'datagrid-no-layout';
|
|
15872
|
+
const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
|
|
15873
|
+
const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
|
|
15874
|
+
const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
|
|
15875
|
+
|
|
15876
|
+
/*
|
|
15877
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
15878
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
15879
|
+
* This software is released under MIT license.
|
|
15880
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
15881
|
+
*/
|
|
15882
|
+
class DatagridCellRenderer {
|
|
15883
|
+
constructor(el, renderer, organizer) {
|
|
15884
|
+
this.el = el;
|
|
15885
|
+
this.renderer = renderer;
|
|
15886
|
+
this.subscriptions = [];
|
|
15887
|
+
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
15273
15888
|
}
|
|
15274
15889
|
ngOnDestroy() {
|
|
15275
|
-
this.
|
|
15276
|
-
this.
|
|
15277
|
-
|
|
15278
|
-
addListeners() {
|
|
15279
|
-
if (this.listenersAdded) {
|
|
15280
|
-
return;
|
|
15890
|
+
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
15891
|
+
if (this.stateSubscription) {
|
|
15892
|
+
this.stateSubscription.unsubscribe();
|
|
15281
15893
|
}
|
|
15282
|
-
this.zone.runOutsideAngular(() => {
|
|
15283
|
-
fromEvent(this.grid, 'mousedown')
|
|
15284
|
-
.pipe(takeUntil(this.destroy$))
|
|
15285
|
-
.subscribe((e) => {
|
|
15286
|
-
// 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
|
|
15287
|
-
if (e.buttons === 1 && !e.ctrlKey) {
|
|
15288
|
-
const activeCell = this.cells
|
|
15289
|
-
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
15290
|
-
: null;
|
|
15291
|
-
if (activeCell) {
|
|
15292
|
-
this.setActiveCell(activeCell);
|
|
15293
|
-
}
|
|
15294
|
-
}
|
|
15295
|
-
});
|
|
15296
|
-
fromEvent(this.grid, 'keydown')
|
|
15297
|
-
.pipe(takeUntil(this.destroy$))
|
|
15298
|
-
.subscribe((e) => {
|
|
15299
|
-
// Skip column resize events
|
|
15300
|
-
if (e.target.classList.contains('drag-handle') &&
|
|
15301
|
-
(e.code === 'ArrowLeft' || e.code === 'ArrowRight')) {
|
|
15302
|
-
return;
|
|
15303
|
-
}
|
|
15304
|
-
if (e.code === 'ArrowUp' ||
|
|
15305
|
-
e.code === 'ArrowDown' ||
|
|
15306
|
-
e.code === 'ArrowLeft' ||
|
|
15307
|
-
e.code === 'ArrowRight' ||
|
|
15308
|
-
e.code === 'End' ||
|
|
15309
|
-
e.code === 'Home' ||
|
|
15310
|
-
e.code === 'PageUp' ||
|
|
15311
|
-
e.code === 'PageDown') {
|
|
15312
|
-
const { x, y } = this.getNextItemCoordinate(e);
|
|
15313
|
-
const activeItem = this.rows
|
|
15314
|
-
? Array.from(this.rows[y].querySelectorAll(this.config.keyGridCells))[x]
|
|
15315
|
-
: null;
|
|
15316
|
-
if (activeItem) {
|
|
15317
|
-
this.setActiveCell(activeItem);
|
|
15318
|
-
}
|
|
15319
|
-
e.preventDefault();
|
|
15320
|
-
}
|
|
15321
|
-
});
|
|
15322
|
-
});
|
|
15323
|
-
this.listenersAdded = true;
|
|
15324
|
-
}
|
|
15325
|
-
initializeKeyGrid(host) {
|
|
15326
|
-
this.host = host;
|
|
15327
|
-
this.addListeners();
|
|
15328
|
-
this.resetKeyGrid();
|
|
15329
|
-
}
|
|
15330
|
-
resetKeyGrid() {
|
|
15331
|
-
var _a;
|
|
15332
|
-
(_a = this.cells) === null || _a === void 0 ? void 0 : _a.forEach((i) => i.setAttribute('tabindex', '-1'));
|
|
15333
|
-
const firstCell = this.cells ? this.cells[0] : null;
|
|
15334
|
-
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
15335
15894
|
}
|
|
15336
|
-
|
|
15337
|
-
|
|
15338
|
-
|
|
15339
|
-
prior.setAttribute('tabindex', '-1');
|
|
15340
|
-
}
|
|
15341
|
-
activeCell.setAttribute('tabindex', '0');
|
|
15342
|
-
const items = getTabableItems(activeCell);
|
|
15343
|
-
const item = activeCell.getAttribute('role') !== 'columnheader' && items[0] ? items[0] : activeCell;
|
|
15344
|
-
item.focus();
|
|
15895
|
+
resetState(state) {
|
|
15896
|
+
this.setWidth(state);
|
|
15897
|
+
this.setHidden(state);
|
|
15345
15898
|
}
|
|
15346
|
-
|
|
15347
|
-
|
|
15348
|
-
|
|
15349
|
-
currentCell = document.activeElement;
|
|
15350
|
-
}
|
|
15351
|
-
const currentRow = this.rows && currentCell ? Array.from(this.rows).find(r => r.contains(currentCell)) : null;
|
|
15352
|
-
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
15353
|
-
const numOfColumns = this.cells ? this.cells.length / this.rows.length - 1 : 0;
|
|
15354
|
-
let x = currentRow && currentCell
|
|
15355
|
-
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
15356
|
-
: 0;
|
|
15357
|
-
let y = currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0;
|
|
15358
|
-
const dir = this.host.dir;
|
|
15359
|
-
const inlineStart = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
15360
|
-
const inlineEnd = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
15361
|
-
const itemsPerPage = this.rows.length || 0;
|
|
15362
|
-
if (e.code === 'ArrowUp' && y !== 0) {
|
|
15363
|
-
y = y - 1;
|
|
15364
|
-
}
|
|
15365
|
-
else if (e.code === 'ArrowDown' && y < numOfRows) {
|
|
15366
|
-
y = y + 1;
|
|
15367
|
-
}
|
|
15368
|
-
else if (e.code === inlineStart && x !== 0) {
|
|
15369
|
-
x = x - 1;
|
|
15370
|
-
}
|
|
15371
|
-
else if (e.code === inlineEnd && x < numOfColumns) {
|
|
15372
|
-
x = x + 1;
|
|
15899
|
+
setWidth(state) {
|
|
15900
|
+
if (state.strictWidth) {
|
|
15901
|
+
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
15373
15902
|
}
|
|
15374
|
-
else
|
|
15375
|
-
|
|
15376
|
-
if (e.ctrlKey) {
|
|
15377
|
-
y = numOfRows;
|
|
15378
|
-
}
|
|
15903
|
+
else {
|
|
15904
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
15379
15905
|
}
|
|
15380
|
-
|
|
15381
|
-
|
|
15382
|
-
|
|
15383
|
-
|
|
15384
|
-
|
|
15906
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
15907
|
+
}
|
|
15908
|
+
setHidden(state) {
|
|
15909
|
+
if (state.hidden) {
|
|
15910
|
+
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
15385
15911
|
}
|
|
15386
|
-
else
|
|
15387
|
-
|
|
15912
|
+
else {
|
|
15913
|
+
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
15388
15914
|
}
|
|
15389
|
-
|
|
15390
|
-
|
|
15915
|
+
}
|
|
15916
|
+
clearWidth() {
|
|
15917
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
15918
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
15919
|
+
}
|
|
15920
|
+
}
|
|
15921
|
+
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 });
|
|
15922
|
+
DatagridCellRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridCellRenderer, selector: "clr-dg-cell", ngImport: i0 });
|
|
15923
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, decorators: [{
|
|
15924
|
+
type: Directive,
|
|
15925
|
+
args: [{
|
|
15926
|
+
selector: 'clr-dg-cell',
|
|
15927
|
+
}]
|
|
15928
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }]; } });
|
|
15929
|
+
|
|
15930
|
+
/*
|
|
15931
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
15932
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
15933
|
+
* This software is released under MIT license.
|
|
15934
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
15935
|
+
*/
|
|
15936
|
+
class DatagridRowRenderer {
|
|
15937
|
+
constructor(columnsService) {
|
|
15938
|
+
this.columnsService = columnsService;
|
|
15939
|
+
this.subscriptions = [];
|
|
15940
|
+
}
|
|
15941
|
+
ngAfterContentInit() {
|
|
15942
|
+
this.setCellsState(); // case #3 and #4
|
|
15943
|
+
this.subscriptions.push(this.cells.changes.subscribe(() => {
|
|
15944
|
+
this.setCellsState(); // case #2
|
|
15945
|
+
// Note on case #2: In the case of dynamic columns, when one column (header/cell together) gets deleted,
|
|
15946
|
+
// this.cells.changes emits before this.columnsService.columns gets updated in MainRenderer
|
|
15947
|
+
// when this.headers.changes emits as well. So that means there will be n+1 column state providers
|
|
15948
|
+
// when this.cells.changes emits. Hence, we should quit earlier there. But this method will be called
|
|
15949
|
+
// right after again when this.headers.changes emits. By then, there will be the same number of column state
|
|
15950
|
+
// providers as column headers.
|
|
15951
|
+
}));
|
|
15952
|
+
}
|
|
15953
|
+
ngOnDestroy() {
|
|
15954
|
+
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
15955
|
+
}
|
|
15956
|
+
setCellsState() {
|
|
15957
|
+
// This method runs in four cases:
|
|
15958
|
+
// 1. When the initial rows appear on the first page.
|
|
15959
|
+
// In this case, the method will be called in DatagridMainRenderer.
|
|
15960
|
+
// 2. When columns (corresponding header/cells) get added and deleted.
|
|
15961
|
+
// In this case, the method will be called in DatagridMainRenderer. (Read the note on this case above).
|
|
15962
|
+
// 3. When rows load asynchronously.
|
|
15963
|
+
// In this case, the method will be called in this class.
|
|
15964
|
+
// 4. When rows load after switching pages.
|
|
15965
|
+
// In this case, the method will be called in this class (Basically, same as the case 3).
|
|
15966
|
+
if (this.cells.length === this.columnsService.columns.length) {
|
|
15967
|
+
this.cells.forEach((cell, index) => {
|
|
15968
|
+
if (this.columnsService.columns[index]) {
|
|
15969
|
+
cell.resetState(this.columnsService.columns[index].value);
|
|
15970
|
+
}
|
|
15971
|
+
});
|
|
15391
15972
|
}
|
|
15392
|
-
return { x, y };
|
|
15393
15973
|
}
|
|
15394
15974
|
}
|
|
15395
|
-
|
|
15396
|
-
|
|
15397
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type:
|
|
15398
|
-
type:
|
|
15399
|
-
|
|
15975
|
+
DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15976
|
+
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail", queries: [{ propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
|
|
15977
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
|
|
15978
|
+
type: Directive,
|
|
15979
|
+
args: [{
|
|
15980
|
+
selector: 'clr-dg-row, clr-dg-row-detail',
|
|
15981
|
+
}]
|
|
15982
|
+
}], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
|
|
15983
|
+
type: ContentChildren,
|
|
15984
|
+
args: [DatagridCellRenderer]
|
|
15985
|
+
}] } });
|
|
15400
15986
|
|
|
15401
15987
|
/*
|
|
15402
15988
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -15537,7 +16123,23 @@ class ClrDatagrid {
|
|
|
15537
16123
|
/**
|
|
15538
16124
|
* Reopen updated row or close it
|
|
15539
16125
|
*/
|
|
15540
|
-
|
|
16126
|
+
if (row) {
|
|
16127
|
+
this.detailService.open(row.item, row.detailButton.nativeElement);
|
|
16128
|
+
// always keep open when virtual scroll is available otherwise close it
|
|
16129
|
+
}
|
|
16130
|
+
else if (!this.hasVirtualScroller) {
|
|
16131
|
+
// Using setTimeout to make sure the inner cycles in rows are done
|
|
16132
|
+
setTimeout(() => {
|
|
16133
|
+
this.detailService.close();
|
|
16134
|
+
});
|
|
16135
|
+
}
|
|
16136
|
+
}
|
|
16137
|
+
// retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
|
|
16138
|
+
const active = this.keyNavigation.getActiveCell();
|
|
16139
|
+
if (active) {
|
|
16140
|
+
this.zone.runOutsideAngular(() => {
|
|
16141
|
+
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
16142
|
+
});
|
|
15541
16143
|
}
|
|
15542
16144
|
}));
|
|
15543
16145
|
}
|
|
@@ -15563,8 +16165,6 @@ class ClrDatagrid {
|
|
|
15563
16165
|
this.datagridTable.nativeElement.focus();
|
|
15564
16166
|
}
|
|
15565
16167
|
}),
|
|
15566
|
-
// Reinitialize arrow key navigation on hide/unhide columns
|
|
15567
|
-
combineLatest(this.columnsService.columns).subscribe(() => { var _a; return (_a = this.keyNavigation) === null || _a === void 0 ? void 0 : _a.resetKeyGrid(); }),
|
|
15568
16168
|
// A subscription that listens for displayMode changes on the datagrid
|
|
15569
16169
|
this.displayMode.view.subscribe(viewChange => {
|
|
15570
16170
|
// Remove any projected columns from the projectedDisplayColumns container
|
|
@@ -15621,6 +16221,13 @@ class ClrDatagrid {
|
|
|
15621
16221
|
ngOnDestroy() {
|
|
15622
16222
|
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
15623
16223
|
}
|
|
16224
|
+
toggleAllSelected($event) {
|
|
16225
|
+
$event.preventDefault();
|
|
16226
|
+
if (this.hasVirtualScroller) {
|
|
16227
|
+
return;
|
|
16228
|
+
}
|
|
16229
|
+
this.allSelected = !this.allSelected;
|
|
16230
|
+
}
|
|
15624
16231
|
resize() {
|
|
15625
16232
|
this.organizer.resize();
|
|
15626
16233
|
}
|
|
@@ -15632,7 +16239,7 @@ class ClrDatagrid {
|
|
|
15632
16239
|
}
|
|
15633
16240
|
}
|
|
15634
16241
|
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: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
15635
|
-
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { 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: [
|
|
16242
|
+
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: [
|
|
15636
16243
|
Selection,
|
|
15637
16244
|
Sort,
|
|
15638
16245
|
FiltersProvider,
|
|
@@ -15648,7 +16255,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
15648
16255
|
ColumnsService,
|
|
15649
16256
|
DisplayModeService,
|
|
15650
16257
|
KeyNavigationGridController,
|
|
15651
|
-
], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"
|
|
16258
|
+
], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!hasVirtualScroller\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "component", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { kind: "component", type: ClrDatagridRow, selector: "clr-dg-row", inputs: ["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" }] });
|
|
15652
16259
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
15653
16260
|
type: Component,
|
|
15654
16261
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -15670,13 +16277,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15670
16277
|
], host: {
|
|
15671
16278
|
'[class.datagrid-host]': 'true',
|
|
15672
16279
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
15673
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"
|
|
16280
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!hasVirtualScroller\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n" }]
|
|
15674
16281
|
}], ctorParameters: function () {
|
|
15675
16282
|
return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
|
|
15676
16283
|
type: Inject,
|
|
15677
16284
|
args: [DOCUMENT]
|
|
15678
16285
|
}] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }];
|
|
15679
|
-
}, propDecorators: {
|
|
16286
|
+
}, propDecorators: { loadingMoreItems: [{
|
|
16287
|
+
type: Input,
|
|
16288
|
+
args: ['clrLoadingMoreItems']
|
|
16289
|
+
}], clrDgSingleSelectionAriaLabel: [{
|
|
15680
16290
|
type: Input
|
|
15681
16291
|
}], clrDgSingleActionableAriaLabel: [{
|
|
15682
16292
|
type: Input
|
|
@@ -15705,6 +16315,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15705
16315
|
}], rows: [{
|
|
15706
16316
|
type: ContentChildren,
|
|
15707
16317
|
args: [ClrDatagridRow]
|
|
16318
|
+
}], datagrid: [{
|
|
16319
|
+
type: ViewChild,
|
|
16320
|
+
args: ['datagrid', { read: ElementRef }]
|
|
15708
16321
|
}], datagridTable: [{
|
|
15709
16322
|
type: ViewChild,
|
|
15710
16323
|
args: ['datagridTable', { read: ElementRef }]
|
|
@@ -15835,6 +16448,7 @@ class ClrDatagridActionOverflow {
|
|
|
15835
16448
|
ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
15836
16449
|
ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
15837
16450
|
<button
|
|
16451
|
+
tabindex="-1"
|
|
15838
16452
|
class="datagrid-action-toggle"
|
|
15839
16453
|
type="button"
|
|
15840
16454
|
role="button"
|
|
@@ -15869,6 +16483,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15869
16483
|
hostDirectives: [ClrPopoverHostDirective],
|
|
15870
16484
|
template: `
|
|
15871
16485
|
<button
|
|
16486
|
+
tabindex="-1"
|
|
15872
16487
|
class="datagrid-action-toggle"
|
|
15873
16488
|
type="button"
|
|
15874
16489
|
role="button"
|
|
@@ -16176,10 +16791,13 @@ class ClrDatagridDetailHeader {
|
|
|
16176
16791
|
get titleId() {
|
|
16177
16792
|
return `${this.detailService.id}-title`;
|
|
16178
16793
|
}
|
|
16794
|
+
ngAfterViewInit() {
|
|
16795
|
+
this.title.nativeElement.focus();
|
|
16796
|
+
}
|
|
16179
16797
|
}
|
|
16180
16798
|
ClrDatagridDetailHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridDetailHeader, deps: [{ token: DetailService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16181
|
-
ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetailHeader, selector: "clr-dg-detail-header", host: { properties: { "class.datagrid-detail-header": "true" } }, ngImport: i0, template: `
|
|
16182
|
-
<div class="datagrid-detail-header-title"
|
|
16799
|
+
ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetailHeader, selector: "clr-dg-detail-header", host: { properties: { "class.datagrid-detail-header": "true" } }, viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }], ngImport: i0, template: `
|
|
16800
|
+
<div #title class="datagrid-detail-header-title" tabindex="-1" [id]="titleId">
|
|
16183
16801
|
<ng-content></ng-content>
|
|
16184
16802
|
</div>
|
|
16185
16803
|
<div class="datagrid-detail-pane-close">
|
|
@@ -16201,7 +16819,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16201
16819
|
'[class.datagrid-detail-header]': 'true',
|
|
16202
16820
|
},
|
|
16203
16821
|
template: `
|
|
16204
|
-
<div class="datagrid-detail-header-title"
|
|
16822
|
+
<div #title class="datagrid-detail-header-title" tabindex="-1" [id]="titleId">
|
|
16205
16823
|
<ng-content></ng-content>
|
|
16206
16824
|
</div>
|
|
16207
16825
|
<div class="datagrid-detail-pane-close">
|
|
@@ -16216,7 +16834,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16216
16834
|
</div>
|
|
16217
16835
|
`,
|
|
16218
16836
|
}]
|
|
16219
|
-
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }
|
|
16837
|
+
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { title: [{
|
|
16838
|
+
type: ViewChild,
|
|
16839
|
+
args: ['title']
|
|
16840
|
+
}] } });
|
|
16220
16841
|
|
|
16221
16842
|
/*
|
|
16222
16843
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -16229,21 +16850,43 @@ class ClrDatagridDetail {
|
|
|
16229
16850
|
this.detailService = detailService;
|
|
16230
16851
|
this.commonStrings = commonStrings;
|
|
16231
16852
|
}
|
|
16853
|
+
get labelledBy() {
|
|
16854
|
+
var _a;
|
|
16855
|
+
if (this.ariaLabelledBy) {
|
|
16856
|
+
return this.header ? `${this.header.titleId} ${this.ariaLabelledBy}` : this.ariaLabelledBy;
|
|
16857
|
+
}
|
|
16858
|
+
else if (this.ariaLabel) {
|
|
16859
|
+
// If aria-label is set by the end user, do not set aria-labelledby
|
|
16860
|
+
return null;
|
|
16861
|
+
}
|
|
16862
|
+
else {
|
|
16863
|
+
return ((_a = this.header) === null || _a === void 0 ? void 0 : _a.titleId) || '';
|
|
16864
|
+
}
|
|
16865
|
+
}
|
|
16866
|
+
get label() {
|
|
16867
|
+
if (!this.ariaLabelledBy) {
|
|
16868
|
+
return this.ariaLabel || null;
|
|
16869
|
+
}
|
|
16870
|
+
else {
|
|
16871
|
+
return null;
|
|
16872
|
+
}
|
|
16873
|
+
}
|
|
16232
16874
|
close() {
|
|
16233
16875
|
this.detailService.close();
|
|
16234
16876
|
}
|
|
16235
16877
|
}
|
|
16236
16878
|
ClrDatagridDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridDetail, deps: [{ token: DetailService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16237
|
-
ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetail, selector: "clr-dg-detail", host: { properties: { "class.datagrid-detail-pane": "true" } }, queries: [{ propertyName: "header", first: true, predicate: ClrDatagridDetailHeader, descendants: true }], ngImport: i0, template: `
|
|
16879
|
+
ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridDetail, selector: "clr-dg-detail", inputs: { ariaLabelledBy: ["clrDetailAriaLabelledBy", "ariaLabelledBy"], ariaLabel: ["clrDetailAriaLabel", "ariaLabel"] }, host: { properties: { "class.datagrid-detail-pane": "true" } }, queries: [{ propertyName: "header", first: true, predicate: ClrDatagridDetailHeader, descendants: true }], ngImport: i0, template: `
|
|
16238
16880
|
<div
|
|
16239
16881
|
cdkTrapFocus
|
|
16240
|
-
[cdkTrapFocusAutoCapture]="
|
|
16882
|
+
[cdkTrapFocusAutoCapture]="!header"
|
|
16241
16883
|
class="datagrid-detail-pane-content"
|
|
16242
16884
|
*ngIf="detailService.isOpen"
|
|
16243
16885
|
role="dialog"
|
|
16244
16886
|
[id]="detailService.id"
|
|
16245
16887
|
aria-modal="true"
|
|
16246
|
-
[attr.aria-
|
|
16888
|
+
[attr.aria-labelledby]="labelledBy"
|
|
16889
|
+
[attr.aria-label]="label"
|
|
16247
16890
|
>
|
|
16248
16891
|
<div class="clr-sr-only">{{ commonStrings.keys.detailPaneStart }}</div>
|
|
16249
16892
|
<ng-content></ng-content>
|
|
@@ -16262,13 +16905,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16262
16905
|
template: `
|
|
16263
16906
|
<div
|
|
16264
16907
|
cdkTrapFocus
|
|
16265
|
-
[cdkTrapFocusAutoCapture]="
|
|
16908
|
+
[cdkTrapFocusAutoCapture]="!header"
|
|
16266
16909
|
class="datagrid-detail-pane-content"
|
|
16267
16910
|
*ngIf="detailService.isOpen"
|
|
16268
16911
|
role="dialog"
|
|
16269
16912
|
[id]="detailService.id"
|
|
16270
16913
|
aria-modal="true"
|
|
16271
|
-
[attr.aria-
|
|
16914
|
+
[attr.aria-labelledby]="labelledBy"
|
|
16915
|
+
[attr.aria-label]="label"
|
|
16272
16916
|
>
|
|
16273
16917
|
<div class="clr-sr-only">{{ commonStrings.keys.detailPaneStart }}</div>
|
|
16274
16918
|
<ng-content></ng-content>
|
|
@@ -16276,7 +16920,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16276
16920
|
</div>
|
|
16277
16921
|
`,
|
|
16278
16922
|
}]
|
|
16279
|
-
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
16923
|
+
}], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { ariaLabelledBy: [{
|
|
16924
|
+
type: Input,
|
|
16925
|
+
args: ['clrDetailAriaLabelledBy']
|
|
16926
|
+
}], ariaLabel: [{
|
|
16927
|
+
type: Input,
|
|
16928
|
+
args: ['clrDetailAriaLabel']
|
|
16929
|
+
}], header: [{
|
|
16280
16930
|
type: ContentChild,
|
|
16281
16931
|
args: [ClrDatagridDetailHeader]
|
|
16282
16932
|
}] } });
|
|
@@ -16554,6 +17204,9 @@ class ClrIfDetail {
|
|
|
16554
17204
|
}
|
|
16555
17205
|
this.skip = false;
|
|
16556
17206
|
}
|
|
17207
|
+
get viewContext() {
|
|
17208
|
+
return { $implicit: this.detailService.state };
|
|
17209
|
+
}
|
|
16557
17210
|
ngOnInit() {
|
|
16558
17211
|
this.subscriptions.push(this.detailService.stateChange.subscribe(state => {
|
|
16559
17212
|
if (state === true) {
|
|
@@ -16570,12 +17223,11 @@ class ClrIfDetail {
|
|
|
16570
17223
|
togglePanel(showPanel) {
|
|
16571
17224
|
let stateChangeParams = null;
|
|
16572
17225
|
if (showPanel === true) {
|
|
16573
|
-
|
|
16574
|
-
|
|
16575
|
-
|
|
16576
|
-
|
|
16577
|
-
|
|
16578
|
-
this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, embeddedViewContext);
|
|
17226
|
+
if (!this.embeddedViewRef) {
|
|
17227
|
+
// Create a context forward `Proxy` that will always bind to the user-specified context,
|
|
17228
|
+
// without having to re-assign it whenever changes.
|
|
17229
|
+
const viewContext = this._createContextForwardProxy();
|
|
17230
|
+
this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, viewContext);
|
|
16579
17231
|
}
|
|
16580
17232
|
this.skip = true;
|
|
16581
17233
|
stateChangeParams = this.detailService.state;
|
|
@@ -16586,6 +17238,27 @@ class ClrIfDetail {
|
|
|
16586
17238
|
}
|
|
16587
17239
|
this.stateChange.emit(stateChangeParams);
|
|
16588
17240
|
}
|
|
17241
|
+
/**
|
|
17242
|
+
* For a given outlet instance, we create a proxy object that delegates
|
|
17243
|
+
* to the user-specified context. This allows changing, or swapping out
|
|
17244
|
+
* the context object completely without having to destroy/re-create the view.
|
|
17245
|
+
*/
|
|
17246
|
+
_createContextForwardProxy() {
|
|
17247
|
+
return new Proxy({}, {
|
|
17248
|
+
set: (_target, prop, newValue) => {
|
|
17249
|
+
if (!this.viewContext) {
|
|
17250
|
+
return false;
|
|
17251
|
+
}
|
|
17252
|
+
return Reflect.set(this.viewContext, prop, newValue);
|
|
17253
|
+
},
|
|
17254
|
+
get: (_target, prop, receiver) => {
|
|
17255
|
+
if (!this.viewContext) {
|
|
17256
|
+
return undefined;
|
|
17257
|
+
}
|
|
17258
|
+
return Reflect.get(this.viewContext, prop, receiver);
|
|
17259
|
+
},
|
|
17260
|
+
});
|
|
17261
|
+
}
|
|
16589
17262
|
}
|
|
16590
17263
|
ClrIfDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrIfDetail, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: DetailService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
16591
17264
|
ClrIfDetail.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrIfDetail, selector: "[clrIfDetail]", inputs: { state: ["clrIfDetail", "state"] }, outputs: { stateChange: "clrIfDetailChange" }, ngImport: i0 });
|
|
@@ -17112,96 +17785,234 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17112
17785
|
args: ['clrDgReplace']
|
|
17113
17786
|
}] } });
|
|
17114
17787
|
|
|
17115
|
-
|
|
17116
|
-
|
|
17117
|
-
|
|
17118
|
-
|
|
17119
|
-
|
|
17120
|
-
|
|
17121
|
-
|
|
17122
|
-
|
|
17123
|
-
|
|
17124
|
-
|
|
17125
|
-
|
|
17126
|
-
|
|
17127
|
-
|
|
17128
|
-
|
|
17129
|
-
|
|
17130
|
-
|
|
17131
|
-
|
|
17132
|
-
|
|
17133
|
-
|
|
17134
|
-
|
|
17135
|
-
|
|
17136
|
-
this.el = el;
|
|
17137
|
-
this.renderer = renderer;
|
|
17788
|
+
const defaultCdkFixedSizeVirtualScrollInputs = {
|
|
17789
|
+
itemSize: 32,
|
|
17790
|
+
minBufferPx: 200,
|
|
17791
|
+
maxBufferPx: 400,
|
|
17792
|
+
};
|
|
17793
|
+
class ClrDatagridVirtualScrollDirective {
|
|
17794
|
+
constructor(changeDetectorRef, iterableDiffers, items, ngZone, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, columnsService, injector) {
|
|
17795
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
17796
|
+
this.iterableDiffers = iterableDiffers;
|
|
17797
|
+
this.items = items;
|
|
17798
|
+
this.ngZone = ngZone;
|
|
17799
|
+
this.templateRef = templateRef;
|
|
17800
|
+
this.viewContainerRef = viewContainerRef;
|
|
17801
|
+
this.directionality = directionality;
|
|
17802
|
+
this.scrollDispatcher = scrollDispatcher;
|
|
17803
|
+
this.viewportRuler = viewportRuler;
|
|
17804
|
+
this.datagrid = datagrid;
|
|
17805
|
+
this.columnsService = columnsService;
|
|
17806
|
+
this.injector = injector;
|
|
17807
|
+
this.renderedRangeChange = new EventEmitter();
|
|
17808
|
+
this._cdkFixedSizeVirtualScrollInputs = Object.assign({}, defaultCdkFixedSizeVirtualScrollInputs);
|
|
17138
17809
|
this.subscriptions = [];
|
|
17139
|
-
this.
|
|
17810
|
+
this.mutationChanges = new MutationObserver((mutations) => {
|
|
17811
|
+
mutations.forEach((mutation) => {
|
|
17812
|
+
// it is possible this to be called twice because the old class is removed and the new added
|
|
17813
|
+
if (mutation.target.classList.contains('datagrid-compact') && this.itemSize > 24) {
|
|
17814
|
+
this.itemSize = 24;
|
|
17815
|
+
}
|
|
17816
|
+
});
|
|
17817
|
+
});
|
|
17818
|
+
this.viewRepeater = new _RecycleViewRepeaterStrategy();
|
|
17819
|
+
this.cdkVirtualForInputs = {
|
|
17820
|
+
cdkVirtualForTrackBy: index => index,
|
|
17821
|
+
};
|
|
17822
|
+
this.items.smartenUp();
|
|
17823
|
+
this.datagrid.hasVirtualScroller = true;
|
|
17824
|
+
this.datagrid.detailService.preventFocusScroll = true;
|
|
17825
|
+
this.datagridElementRef = this.datagrid.el;
|
|
17826
|
+
// default
|
|
17827
|
+
this.cdkVirtualForTemplateCacheSize = 20;
|
|
17828
|
+
this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
|
|
17829
|
+
attributeFilter: ['class'],
|
|
17830
|
+
attributeOldValue: true,
|
|
17831
|
+
});
|
|
17832
|
+
this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
|
|
17140
17833
|
}
|
|
17141
|
-
|
|
17142
|
-
|
|
17143
|
-
if (this.stateSubscription) {
|
|
17144
|
-
this.stateSubscription.unsubscribe();
|
|
17145
|
-
}
|
|
17146
|
-
this.runAllChanges = ALL_COLUMN_CHANGES;
|
|
17147
|
-
this.stateSubscription = columnState.subscribe(state => this.stateChanges(state));
|
|
17834
|
+
get cdkVirtualForOf() {
|
|
17835
|
+
return this.cdkVirtualForInputs.cdkVirtualForOf;
|
|
17148
17836
|
}
|
|
17149
|
-
|
|
17150
|
-
this.
|
|
17151
|
-
|
|
17152
|
-
|
|
17153
|
-
}
|
|
17837
|
+
set cdkVirtualForOf(value) {
|
|
17838
|
+
this.cdkVirtualForInputs.cdkVirtualForOf = value;
|
|
17839
|
+
this.items.all = value;
|
|
17840
|
+
this.updateCdkVirtualForInputs();
|
|
17154
17841
|
}
|
|
17155
|
-
|
|
17156
|
-
|
|
17157
|
-
state.changes = this.runAllChanges;
|
|
17158
|
-
delete this.runAllChanges;
|
|
17159
|
-
}
|
|
17160
|
-
if (state.changes && state.changes.length) {
|
|
17161
|
-
state.changes.forEach(change => {
|
|
17162
|
-
switch (change) {
|
|
17163
|
-
case DatagridColumnChanges.WIDTH:
|
|
17164
|
-
this.setWidth(state);
|
|
17165
|
-
break;
|
|
17166
|
-
case DatagridColumnChanges.HIDDEN:
|
|
17167
|
-
this.setHidden(state);
|
|
17168
|
-
break;
|
|
17169
|
-
default:
|
|
17170
|
-
break;
|
|
17171
|
-
}
|
|
17172
|
-
});
|
|
17173
|
-
}
|
|
17842
|
+
get cdkVirtualForTrackBy() {
|
|
17843
|
+
return this.cdkVirtualForInputs.cdkVirtualForTrackBy;
|
|
17174
17844
|
}
|
|
17175
|
-
|
|
17176
|
-
this.
|
|
17177
|
-
this.
|
|
17845
|
+
set cdkVirtualForTrackBy(value) {
|
|
17846
|
+
this.cdkVirtualForInputs.cdkVirtualForTrackBy = value;
|
|
17847
|
+
this.updateCdkVirtualForInputs();
|
|
17178
17848
|
}
|
|
17179
|
-
|
|
17180
|
-
|
|
17181
|
-
|
|
17182
|
-
}
|
|
17183
|
-
else {
|
|
17184
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
17185
|
-
}
|
|
17186
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
17849
|
+
get cdkVirtualForTemplate() {
|
|
17850
|
+
var _a;
|
|
17851
|
+
return (_a = this === null || this === void 0 ? void 0 : this.cdkVirtualForInputs) === null || _a === void 0 ? void 0 : _a.cdkVirtualForTemplate;
|
|
17187
17852
|
}
|
|
17188
|
-
|
|
17189
|
-
|
|
17190
|
-
|
|
17853
|
+
set cdkVirtualForTemplate(value) {
|
|
17854
|
+
this.cdkVirtualForInputs.cdkVirtualForTemplate = value;
|
|
17855
|
+
this.updateCdkVirtualForInputs();
|
|
17856
|
+
}
|
|
17857
|
+
get cdkVirtualForTemplateCacheSize() {
|
|
17858
|
+
return this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize;
|
|
17859
|
+
}
|
|
17860
|
+
set cdkVirtualForTemplateCacheSize(value) {
|
|
17861
|
+
this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize = coerceNumberProperty(value);
|
|
17862
|
+
this.updateCdkVirtualForInputs();
|
|
17863
|
+
}
|
|
17864
|
+
get itemSize() {
|
|
17865
|
+
return this._cdkFixedSizeVirtualScrollInputs.itemSize;
|
|
17866
|
+
}
|
|
17867
|
+
set itemSize(value) {
|
|
17868
|
+
this._cdkFixedSizeVirtualScrollInputs.itemSize = coerceNumberProperty(value);
|
|
17869
|
+
this.updateFixedSizeVirtualScrollInputs();
|
|
17870
|
+
}
|
|
17871
|
+
get minBufferPx() {
|
|
17872
|
+
return this._cdkFixedSizeVirtualScrollInputs.minBufferPx;
|
|
17873
|
+
}
|
|
17874
|
+
set minBufferPx(value) {
|
|
17875
|
+
this._cdkFixedSizeVirtualScrollInputs.minBufferPx = coerceNumberProperty(value);
|
|
17876
|
+
this.updateFixedSizeVirtualScrollInputs();
|
|
17877
|
+
}
|
|
17878
|
+
get maxBufferPx() {
|
|
17879
|
+
return this._cdkFixedSizeVirtualScrollInputs.maxBufferPx;
|
|
17880
|
+
}
|
|
17881
|
+
set maxBufferPx(value) {
|
|
17882
|
+
this._cdkFixedSizeVirtualScrollInputs.maxBufferPx = coerceNumberProperty(value);
|
|
17883
|
+
this.updateFixedSizeVirtualScrollInputs();
|
|
17884
|
+
}
|
|
17885
|
+
ngAfterViewInit() {
|
|
17886
|
+
this.injector.runInContext(() => {
|
|
17887
|
+
this.virtualScrollViewport = this.createVirtualScrollViewportForDatagrid(this.changeDetectorRef, this.ngZone, this.directionality, this.scrollDispatcher, this.viewportRuler, this.datagridElementRef, this.virtualScrollStrategy);
|
|
17888
|
+
this.cdkVirtualFor = new CdkVirtualForOf(this.viewContainerRef, this.templateRef, this.iterableDiffers, this.viewRepeater, this.virtualScrollViewport, this.ngZone);
|
|
17889
|
+
this.virtualScrollViewport.ngOnInit();
|
|
17890
|
+
});
|
|
17891
|
+
this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector('[role="grid"]');
|
|
17892
|
+
this.updateCdkVirtualForInputs();
|
|
17893
|
+
this.subscriptions.push(this.items.change.subscribe(newItems => {
|
|
17894
|
+
this.cdkVirtualFor.cdkVirtualForOf = newItems;
|
|
17895
|
+
}), this.cdkVirtualFor.dataStream.subscribe(data => {
|
|
17896
|
+
this.updateAriaRowCount(data.length);
|
|
17897
|
+
}), this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {
|
|
17898
|
+
this.renderedRangeChange.emit(renderedRange);
|
|
17899
|
+
}), this.datagrid.refresh.subscribe(datagridState => {
|
|
17900
|
+
if (datagridState.filters) {
|
|
17901
|
+
this.virtualScrollViewport.scrollToIndex(0);
|
|
17902
|
+
}
|
|
17903
|
+
}), this.columnsService.columnsStateChange.subscribe(() => {
|
|
17904
|
+
this.viewRepeater.detach();
|
|
17905
|
+
}));
|
|
17906
|
+
}
|
|
17907
|
+
ngDoCheck() {
|
|
17908
|
+
var _a;
|
|
17909
|
+
(_a = this.cdkVirtualFor) === null || _a === void 0 ? void 0 : _a.ngDoCheck();
|
|
17910
|
+
this.updateAriaRowIndexes();
|
|
17911
|
+
}
|
|
17912
|
+
ngOnDestroy() {
|
|
17913
|
+
var _a, _b, _c;
|
|
17914
|
+
(_a = this.cdkVirtualFor) === null || _a === void 0 ? void 0 : _a.ngOnDestroy();
|
|
17915
|
+
(_b = this.virtualScrollViewport) === null || _b === void 0 ? void 0 : _b.ngOnDestroy();
|
|
17916
|
+
(_c = this.mutationChanges) === null || _c === void 0 ? void 0 : _c.disconnect();
|
|
17917
|
+
this.subscriptions.forEach(subscription => {
|
|
17918
|
+
subscription.unsubscribe();
|
|
17919
|
+
});
|
|
17920
|
+
}
|
|
17921
|
+
updateCdkVirtualForInputs() {
|
|
17922
|
+
if (this.cdkVirtualFor) {
|
|
17923
|
+
for (const cdkVirtualForInputKey of Object.keys(this.cdkVirtualForInputs)) {
|
|
17924
|
+
if (this.cdkVirtualFor[cdkVirtualForInputKey] !== this.cdkVirtualForInputs[cdkVirtualForInputKey]) {
|
|
17925
|
+
this.cdkVirtualFor[cdkVirtualForInputKey] = this.cdkVirtualForInputs[cdkVirtualForInputKey];
|
|
17926
|
+
}
|
|
17927
|
+
}
|
|
17191
17928
|
}
|
|
17192
|
-
|
|
17193
|
-
|
|
17929
|
+
}
|
|
17930
|
+
updateFixedSizeVirtualScrollInputs() {
|
|
17931
|
+
if (this.virtualScrollStrategy) {
|
|
17932
|
+
this.virtualScrollStrategy.updateItemAndBufferSize(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
|
|
17194
17933
|
}
|
|
17195
17934
|
}
|
|
17935
|
+
updateAriaRowCount(rowCount) {
|
|
17936
|
+
var _a;
|
|
17937
|
+
(_a = this.gridRoleElement) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-rowcount', rowCount.toString());
|
|
17938
|
+
}
|
|
17939
|
+
updateAriaRowIndexes() {
|
|
17940
|
+
for (let i = 0; i < this.viewContainerRef.length; i++) {
|
|
17941
|
+
const viewRef = this.viewContainerRef.get(i);
|
|
17942
|
+
const rootElements = viewRef.rootNodes;
|
|
17943
|
+
const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');
|
|
17944
|
+
const rowRoleElement = datagridRowElement === null || datagridRowElement === void 0 ? void 0 : datagridRowElement.querySelector('[role="row"]');
|
|
17945
|
+
// aria-rowindex should start with one, not zero, so we have to add one to the zero-based index
|
|
17946
|
+
rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.setAttribute('aria-rowindex', (viewRef.context.index + 1).toString());
|
|
17947
|
+
}
|
|
17948
|
+
}
|
|
17949
|
+
createVirtualScrollViewportForDatagrid(changeDetectorRef, ngZone, directionality, scrollDispatcher, viewportRuler, datagridElementRef, virtualScrollStrategy) {
|
|
17950
|
+
const datagridDivElement = datagridElementRef.nativeElement.querySelector('.datagrid');
|
|
17951
|
+
const datagridTableElement = datagridElementRef.nativeElement.querySelector('.datagrid-table');
|
|
17952
|
+
const datagridRowsElement = datagridElementRef.nativeElement.querySelector('.datagrid-rows');
|
|
17953
|
+
const datagridDivElementRef = { nativeElement: datagridDivElement };
|
|
17954
|
+
let topOffset = 0;
|
|
17955
|
+
let totalContentSize = 0;
|
|
17956
|
+
function updateDatagridElementStyles() {
|
|
17957
|
+
datagridRowsElement.style.transform = `translateY(${topOffset}px)`;
|
|
17958
|
+
datagridRowsElement.style.height = `${totalContentSize - topOffset}px`;
|
|
17959
|
+
}
|
|
17960
|
+
const virtualScrollViewport = new CdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
17961
|
+
virtualScrollViewport._contentWrapper = {
|
|
17962
|
+
nativeElement: {
|
|
17963
|
+
style: {
|
|
17964
|
+
set transform(value) {
|
|
17965
|
+
var _a;
|
|
17966
|
+
topOffset = value === undefined ? 0 : +((_a = /translateY\(([0-9]+)px\)/.exec(value)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
17967
|
+
updateDatagridElementStyles();
|
|
17968
|
+
},
|
|
17969
|
+
},
|
|
17970
|
+
},
|
|
17971
|
+
};
|
|
17972
|
+
virtualScrollViewport.setTotalContentSize = (value) => {
|
|
17973
|
+
totalContentSize = value;
|
|
17974
|
+
datagridTableElement.style.height = `${totalContentSize}px`;
|
|
17975
|
+
updateDatagridElementStyles();
|
|
17976
|
+
};
|
|
17977
|
+
return virtualScrollViewport;
|
|
17978
|
+
}
|
|
17196
17979
|
}
|
|
17197
|
-
|
|
17198
|
-
|
|
17199
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type:
|
|
17980
|
+
ClrDatagridVirtualScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: Items, skipSelf: true }, { token: i0.NgZone }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1$2.Directionality }, { token: i3$1.ScrollDispatcher }, { token: i3$1.ViewportRuler }, { token: ClrDatagrid }, { token: ColumnsService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17981
|
+
ClrDatagridVirtualScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridVirtualScrollDirective, selector: "[ClrVirtualScroll]", inputs: { cdkVirtualForOf: ["clrVirtualRowsOf", "cdkVirtualForOf"], cdkVirtualForTrackBy: ["clrVirtualRowsTrackBy", "cdkVirtualForTrackBy"], cdkVirtualForTemplate: ["clrVirtualRowsTemplate", "cdkVirtualForTemplate"], cdkVirtualForTemplateCacheSize: ["clrVirtualRowsTemplateCacheSize", "cdkVirtualForTemplateCacheSize"], itemSize: ["clrVirtualRowsItemSize", "itemSize"], minBufferPx: ["clrVirtualRowsMinBufferPx", "minBufferPx"], maxBufferPx: ["clrVirtualRowsMaxBufferPx", "maxBufferPx"] }, outputs: { renderedRangeChange: "renderedRangeChange" }, providers: [Items], ngImport: i0 });
|
|
17982
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, decorators: [{
|
|
17200
17983
|
type: Directive,
|
|
17201
17984
|
args: [{
|
|
17202
|
-
selector: '
|
|
17985
|
+
selector: '[ClrVirtualScroll]',
|
|
17986
|
+
providers: [Items],
|
|
17203
17987
|
}]
|
|
17204
|
-
}], ctorParameters: function () {
|
|
17988
|
+
}], ctorParameters: function () {
|
|
17989
|
+
return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: Items, decorators: [{
|
|
17990
|
+
type: SkipSelf
|
|
17991
|
+
}] }, { type: i0.NgZone }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1$2.Directionality }, { type: i3$1.ScrollDispatcher }, { type: i3$1.ViewportRuler }, { type: ClrDatagrid }, { type: ColumnsService }, { type: i0.EnvironmentInjector }];
|
|
17992
|
+
}, propDecorators: { renderedRangeChange: [{
|
|
17993
|
+
type: Output
|
|
17994
|
+
}], cdkVirtualForOf: [{
|
|
17995
|
+
type: Input,
|
|
17996
|
+
args: ['clrVirtualRowsOf']
|
|
17997
|
+
}], cdkVirtualForTrackBy: [{
|
|
17998
|
+
type: Input,
|
|
17999
|
+
args: ['clrVirtualRowsTrackBy']
|
|
18000
|
+
}], cdkVirtualForTemplate: [{
|
|
18001
|
+
type: Input,
|
|
18002
|
+
args: ['clrVirtualRowsTemplate']
|
|
18003
|
+
}], cdkVirtualForTemplateCacheSize: [{
|
|
18004
|
+
type: Input,
|
|
18005
|
+
args: ['clrVirtualRowsTemplateCacheSize']
|
|
18006
|
+
}], itemSize: [{
|
|
18007
|
+
type: Input,
|
|
18008
|
+
args: ['clrVirtualRowsItemSize']
|
|
18009
|
+
}], minBufferPx: [{
|
|
18010
|
+
type: Input,
|
|
18011
|
+
args: ['clrVirtualRowsMinBufferPx']
|
|
18012
|
+
}], maxBufferPx: [{
|
|
18013
|
+
type: Input,
|
|
18014
|
+
args: ['clrVirtualRowsMaxBufferPx']
|
|
18015
|
+
}] } });
|
|
17205
18016
|
|
|
17206
18017
|
/*
|
|
17207
18018
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
@@ -17226,7 +18037,6 @@ class DatagridHeaderRenderer {
|
|
|
17226
18037
|
this.autoSet = false;
|
|
17227
18038
|
this.subscriptions = [];
|
|
17228
18039
|
this.subscriptions.push(this.organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
17229
|
-
this.subscriptions.push(columnState.subscribe(state => this.stateChanges(state)));
|
|
17230
18040
|
}
|
|
17231
18041
|
ngOnDestroy() {
|
|
17232
18042
|
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
@@ -17241,20 +18051,30 @@ class DatagridHeaderRenderer {
|
|
|
17241
18051
|
setColumnState(index) {
|
|
17242
18052
|
this.columnsService.columns[index] = this.columnState;
|
|
17243
18053
|
}
|
|
17244
|
-
|
|
17245
|
-
if (state.
|
|
17246
|
-
|
|
17247
|
-
|
|
17248
|
-
|
|
17249
|
-
|
|
17250
|
-
|
|
17251
|
-
|
|
17252
|
-
|
|
17253
|
-
|
|
17254
|
-
|
|
17255
|
-
|
|
17256
|
-
|
|
17257
|
-
|
|
18054
|
+
setWidth(state) {
|
|
18055
|
+
if (state.strictWidth) {
|
|
18056
|
+
if (this.columnResizerService.resizedBy) {
|
|
18057
|
+
this.resizeEmitter.emit(state.width);
|
|
18058
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
18059
|
+
this.widthSet = false;
|
|
18060
|
+
}
|
|
18061
|
+
// Don't set width if there is a user-defined one. Just add the strict width class.
|
|
18062
|
+
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
18063
|
+
this.autoSet = false;
|
|
18064
|
+
}
|
|
18065
|
+
else {
|
|
18066
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
18067
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
18068
|
+
this.widthSet = true;
|
|
18069
|
+
this.autoSet = true;
|
|
18070
|
+
}
|
|
18071
|
+
}
|
|
18072
|
+
setHidden(state) {
|
|
18073
|
+
if (state.hidden) {
|
|
18074
|
+
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
18075
|
+
}
|
|
18076
|
+
else {
|
|
18077
|
+
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
17258
18078
|
}
|
|
17259
18079
|
}
|
|
17260
18080
|
clearWidth() {
|
|
@@ -17284,32 +18104,6 @@ class DatagridHeaderRenderer {
|
|
|
17284
18104
|
}
|
|
17285
18105
|
return width;
|
|
17286
18106
|
}
|
|
17287
|
-
setWidth(state) {
|
|
17288
|
-
if (state.strictWidth) {
|
|
17289
|
-
if (this.columnResizerService.resizedBy) {
|
|
17290
|
-
this.resizeEmitter.emit(state.width);
|
|
17291
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
17292
|
-
this.widthSet = false;
|
|
17293
|
-
}
|
|
17294
|
-
// Don't set width if there is a user-defined one. Just add the strict width class.
|
|
17295
|
-
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
17296
|
-
this.autoSet = false;
|
|
17297
|
-
}
|
|
17298
|
-
else {
|
|
17299
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
17300
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
17301
|
-
this.widthSet = true;
|
|
17302
|
-
this.autoSet = true;
|
|
17303
|
-
}
|
|
17304
|
-
}
|
|
17305
|
-
setHidden(state) {
|
|
17306
|
-
if (state.hidden) {
|
|
17307
|
-
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
17308
|
-
}
|
|
17309
|
-
else {
|
|
17310
|
-
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
17311
|
-
}
|
|
17312
|
-
}
|
|
17313
18107
|
}
|
|
17314
18108
|
DatagridHeaderRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridHeaderRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DatagridRenderOrganizer }, { token: DomAdapter }, { token: ColumnResizerService }, { token: ColumnsService }, { token: COLUMN_STATE }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17315
18109
|
DatagridHeaderRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridHeaderRenderer, selector: "clr-dg-column", outputs: { resizeEmitter: "clrDgColumnResize" }, providers: [ColumnResizerService, COLUMN_STATE_PROVIDER], ngImport: i0 });
|
|
@@ -17371,63 +18165,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17371
18165
|
type: Injectable
|
|
17372
18166
|
}] });
|
|
17373
18167
|
|
|
17374
|
-
/*
|
|
17375
|
-
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
17376
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
17377
|
-
* This software is released under MIT license.
|
|
17378
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
17379
|
-
*/
|
|
17380
|
-
class DatagridRowRenderer {
|
|
17381
|
-
constructor(columnsService) {
|
|
17382
|
-
this.columnsService = columnsService;
|
|
17383
|
-
this.subscriptions = [];
|
|
17384
|
-
}
|
|
17385
|
-
ngAfterContentInit() {
|
|
17386
|
-
this.setColumnState(); // case #3 and #4
|
|
17387
|
-
this.subscriptions.push(this.cells.changes.subscribe(() => {
|
|
17388
|
-
this.setColumnState(); // case #2
|
|
17389
|
-
// Note on case #2: In the case of dynamic columns, when one column (header/cell together) gets deleted,
|
|
17390
|
-
// this.cells.changes emits before this.columnsService.columns gets updated in MainRenderer
|
|
17391
|
-
// when this.headers.changes emits as well. So that means there will be n+1 column state providers
|
|
17392
|
-
// when this.cells.changes emits. Hence, we should quit earlier there. But this method will be called
|
|
17393
|
-
// right after again when this.headers.changes emits. By then, there will be the same number of column state
|
|
17394
|
-
// providers as column headers.
|
|
17395
|
-
}));
|
|
17396
|
-
}
|
|
17397
|
-
ngOnDestroy() {
|
|
17398
|
-
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
17399
|
-
}
|
|
17400
|
-
setColumnState() {
|
|
17401
|
-
// This method runs in four cases:
|
|
17402
|
-
// 1. When the initial rows appear on the first page.
|
|
17403
|
-
// In this case, the method will be called in DatagridMainRenderer.
|
|
17404
|
-
// 2. When columns (corresponding header/cells) get added and deleted.
|
|
17405
|
-
// In this case, the method will be called in DatagridMainRenderer. (Read the note on this case above).
|
|
17406
|
-
// 3. When rows load asynchronously.
|
|
17407
|
-
// In this case, the method will be called in this class.
|
|
17408
|
-
// 4. When rows load after switching pages.
|
|
17409
|
-
// In this case, the method will be called in this class (Basically, same as the case 3).
|
|
17410
|
-
if (this.cells.length === this.columnsService.columns.length) {
|
|
17411
|
-
this.cells.forEach((cell, index) => {
|
|
17412
|
-
if (this.columnsService.columns[index]) {
|
|
17413
|
-
cell.columnState = this.columnsService.columns[index];
|
|
17414
|
-
}
|
|
17415
|
-
});
|
|
17416
|
-
}
|
|
17417
|
-
}
|
|
17418
|
-
}
|
|
17419
|
-
DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17420
|
-
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail", queries: [{ propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
|
|
17421
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
|
|
17422
|
-
type: Directive,
|
|
17423
|
-
args: [{
|
|
17424
|
-
selector: 'clr-dg-row, clr-dg-row-detail',
|
|
17425
|
-
}]
|
|
17426
|
-
}], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
|
|
17427
|
-
type: ContentChildren,
|
|
17428
|
-
args: [DatagridCellRenderer]
|
|
17429
|
-
}] } });
|
|
17430
|
-
|
|
17431
18168
|
/*
|
|
17432
18169
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
17433
18170
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -17447,7 +18184,7 @@ const domAdapterFactory = (platformId) => {
|
|
|
17447
18184
|
// Fixes build error
|
|
17448
18185
|
// @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)
|
|
17449
18186
|
class DatagridMainRenderer {
|
|
17450
|
-
constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone) {
|
|
18187
|
+
constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
|
|
17451
18188
|
this.organizer = organizer;
|
|
17452
18189
|
this.items = items;
|
|
17453
18190
|
this.page = page;
|
|
@@ -17458,6 +18195,7 @@ class DatagridMainRenderer {
|
|
|
17458
18195
|
this.tableSizeService = tableSizeService;
|
|
17459
18196
|
this.columnsService = columnsService;
|
|
17460
18197
|
this.ngZone = ngZone;
|
|
18198
|
+
this.keyNavigation = keyNavigation;
|
|
17461
18199
|
this._heightSet = false;
|
|
17462
18200
|
this.shouldStabilizeColumns = true;
|
|
17463
18201
|
this.subscriptions = [];
|
|
@@ -17478,6 +18216,9 @@ class DatagridMainRenderer {
|
|
|
17478
18216
|
this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
|
|
17479
18217
|
this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
|
|
17480
18218
|
}
|
|
18219
|
+
ngOnInit() {
|
|
18220
|
+
this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
|
|
18221
|
+
}
|
|
17481
18222
|
ngAfterContentInit() {
|
|
17482
18223
|
this.setupColumns();
|
|
17483
18224
|
this.subscriptions.push(this.headers.changes.subscribe(() => {
|
|
@@ -17528,7 +18269,10 @@ class DatagridMainRenderer {
|
|
|
17528
18269
|
setupColumns() {
|
|
17529
18270
|
this.headers.forEach((header, index) => header.setColumnState(index));
|
|
17530
18271
|
this.columnsService.columns.splice(this.headers.length); // Trim any old columns
|
|
17531
|
-
|
|
18272
|
+
// Sets columnIndex for each column
|
|
18273
|
+
this.columnsService.columns.forEach((column, index) => {
|
|
18274
|
+
this.columnsService.emitStateChange(column, { changes: [DatagridColumnChanges.INITIALIZE], columnIndex: index });
|
|
18275
|
+
});
|
|
17532
18276
|
}
|
|
17533
18277
|
shouldComputeHeight() {
|
|
17534
18278
|
if (!this._heightSet && this.page.size > 0) {
|
|
@@ -17549,9 +18293,8 @@ class DatagridMainRenderer {
|
|
|
17549
18293
|
* Refer: http://stackoverflow.com/questions/24396205/flex-grow-not-working-in-internet-explorer-11-0
|
|
17550
18294
|
*/
|
|
17551
18295
|
computeDatagridHeight() {
|
|
17552
|
-
|
|
17553
|
-
|
|
17554
|
-
this.renderer.setStyle(this.el.nativeElement, 'height', value + 'px');
|
|
18296
|
+
const height = window.getComputedStyle(this.el.nativeElement).height;
|
|
18297
|
+
this.renderer.setStyle(this.el.nativeElement, 'height', height);
|
|
17555
18298
|
this._heightSet = true;
|
|
17556
18299
|
}
|
|
17557
18300
|
resetDatagridHeight() {
|
|
@@ -17563,13 +18306,16 @@ class DatagridMainRenderer {
|
|
|
17563
18306
|
*/
|
|
17564
18307
|
computeHeadersWidth() {
|
|
17565
18308
|
const nbColumns = this.headers.length;
|
|
18309
|
+
const headerWidths = this.headers.map(header => {
|
|
18310
|
+
return header.getColumnWidthState();
|
|
18311
|
+
});
|
|
17566
18312
|
let allStrict = true;
|
|
17567
18313
|
this.headers.forEach((header, index) => {
|
|
17568
18314
|
// On the last header column check whether all columns have strict widths.
|
|
17569
18315
|
// If all columns have strict widths, remove the strict width from the last column and make it the column's
|
|
17570
18316
|
// minimum width so that when all previous columns shrink, it will get a flexible width and cover the empty
|
|
17571
18317
|
// gap in the Datagrid.
|
|
17572
|
-
const state = Object.assign({ changes: [DatagridColumnChanges.WIDTH] },
|
|
18318
|
+
const state = Object.assign({ changes: [DatagridColumnChanges.WIDTH] }, headerWidths[index]);
|
|
17573
18319
|
if (!state.strictWidth) {
|
|
17574
18320
|
allStrict = false;
|
|
17575
18321
|
}
|
|
@@ -17579,6 +18325,46 @@ class DatagridMainRenderer {
|
|
|
17579
18325
|
this.columnsService.emitStateChangeAt(index, state);
|
|
17580
18326
|
});
|
|
17581
18327
|
}
|
|
18328
|
+
columnStateChanged(state) {
|
|
18329
|
+
// eslint-disable-next-line eqeqeq
|
|
18330
|
+
if (!this.headers || state.columnIndex == null) {
|
|
18331
|
+
return;
|
|
18332
|
+
}
|
|
18333
|
+
const columnIndex = state.columnIndex;
|
|
18334
|
+
if (state.changes && state.changes.length) {
|
|
18335
|
+
state.changes.forEach(change => {
|
|
18336
|
+
switch (change) {
|
|
18337
|
+
case DatagridColumnChanges.WIDTH:
|
|
18338
|
+
this.headers.get(columnIndex).setWidth(state);
|
|
18339
|
+
this.rows.forEach(row => {
|
|
18340
|
+
if ((row === null || row === void 0 ? void 0 : row.cells.length) === this.columnsService.columns.length) {
|
|
18341
|
+
row.cells.get(columnIndex).setWidth(state);
|
|
18342
|
+
}
|
|
18343
|
+
});
|
|
18344
|
+
break;
|
|
18345
|
+
case DatagridColumnChanges.HIDDEN:
|
|
18346
|
+
this.headers.get(columnIndex).setHidden(state);
|
|
18347
|
+
this.rows.forEach(row => {
|
|
18348
|
+
if (row.cells && row.cells.length) {
|
|
18349
|
+
row.cells.get(columnIndex).setHidden(state);
|
|
18350
|
+
}
|
|
18351
|
+
});
|
|
18352
|
+
this.keyNavigation.resetKeyGrid();
|
|
18353
|
+
break;
|
|
18354
|
+
case DatagridColumnChanges.INITIALIZE:
|
|
18355
|
+
if (state.hideable && state.hidden) {
|
|
18356
|
+
this.headers.get(columnIndex).setHidden(state);
|
|
18357
|
+
this.rows.forEach(row => {
|
|
18358
|
+
row.setCellsState();
|
|
18359
|
+
});
|
|
18360
|
+
}
|
|
18361
|
+
break;
|
|
18362
|
+
default:
|
|
18363
|
+
break;
|
|
18364
|
+
}
|
|
18365
|
+
});
|
|
18366
|
+
}
|
|
18367
|
+
}
|
|
17582
18368
|
/**
|
|
17583
18369
|
* Triggers a whole re-rendring cycle to set column sizes, if needed.
|
|
17584
18370
|
*/
|
|
@@ -17595,7 +18381,7 @@ class DatagridMainRenderer {
|
|
|
17595
18381
|
}
|
|
17596
18382
|
}
|
|
17597
18383
|
}
|
|
17598
|
-
DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: DomAdapter }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
18384
|
+
DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: DomAdapter }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
|
|
17599
18385
|
DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer, descendants: true }], ngImport: i0 });
|
|
17600
18386
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
|
|
17601
18387
|
type: Directive,
|
|
@@ -17603,7 +18389,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
17603
18389
|
selector: 'clr-datagrid',
|
|
17604
18390
|
providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],
|
|
17605
18391
|
}]
|
|
17606
|
-
}], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: DomAdapter }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }]; }, propDecorators: { headers: [{
|
|
18392
|
+
}], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: DomAdapter }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
|
|
17607
18393
|
type: ContentChildren,
|
|
17608
18394
|
args: [DatagridHeaderRenderer]
|
|
17609
18395
|
}], rows: [{
|
|
@@ -17638,6 +18424,7 @@ const CLR_DATAGRID_DIRECTIVES = [
|
|
|
17638
18424
|
ClrDatagridRow,
|
|
17639
18425
|
ClrDatagridRowDetail,
|
|
17640
18426
|
ClrDatagridSelectionCellDirective,
|
|
18427
|
+
ClrDatagridVirtualScrollDirective,
|
|
17641
18428
|
ClrIfDetail,
|
|
17642
18429
|
DatagridDetailRegisterer,
|
|
17643
18430
|
WrappedCell,
|
|
@@ -17684,6 +18471,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
17684
18471
|
ClrDatagridRow,
|
|
17685
18472
|
ClrDatagridRowDetail,
|
|
17686
18473
|
ClrDatagridSelectionCellDirective,
|
|
18474
|
+
ClrDatagridVirtualScrollDirective,
|
|
17687
18475
|
ClrIfDetail,
|
|
17688
18476
|
DatagridDetailRegisterer,
|
|
17689
18477
|
WrappedCell,
|
|
@@ -17734,6 +18522,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
17734
18522
|
ClrDatagridRow,
|
|
17735
18523
|
ClrDatagridRowDetail,
|
|
17736
18524
|
ClrDatagridSelectionCellDirective,
|
|
18525
|
+
ClrDatagridVirtualScrollDirective,
|
|
17737
18526
|
ClrIfDetail,
|
|
17738
18527
|
DatagridDetailRegisterer,
|
|
17739
18528
|
WrappedCell,
|
|
@@ -22801,6 +23590,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22801
23590
|
}] }];
|
|
22802
23591
|
} });
|
|
22803
23592
|
|
|
23593
|
+
/*
|
|
23594
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
23595
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
23596
|
+
* This software is released under MIT license.
|
|
23597
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
23598
|
+
*/
|
|
23599
|
+
class ClrModalConfigurationService {
|
|
23600
|
+
constructor() {
|
|
23601
|
+
this.fadeMove = 'fadeDown';
|
|
23602
|
+
this.backdrop = true;
|
|
23603
|
+
}
|
|
23604
|
+
}
|
|
23605
|
+
ClrModalConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
23606
|
+
ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService });
|
|
23607
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, decorators: [{
|
|
23608
|
+
type: Injectable
|
|
23609
|
+
}] });
|
|
23610
|
+
|
|
22804
23611
|
/*
|
|
22805
23612
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
22806
23613
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -22808,10 +23615,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22808
23615
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
22809
23616
|
*/
|
|
22810
23617
|
class ClrModal {
|
|
22811
|
-
constructor(_scrollingService, commonStrings, modalStackService) {
|
|
23618
|
+
constructor(_scrollingService, commonStrings, modalStackService, configuration) {
|
|
22812
23619
|
this._scrollingService = _scrollingService;
|
|
22813
23620
|
this.commonStrings = commonStrings;
|
|
22814
23621
|
this.modalStackService = modalStackService;
|
|
23622
|
+
this.configuration = configuration;
|
|
22815
23623
|
this.modalId = uniqueIdFactory();
|
|
22816
23624
|
this._open = false;
|
|
22817
23625
|
this._openChanged = new EventEmitter(false);
|
|
@@ -22821,13 +23629,23 @@ class ClrModal {
|
|
|
22821
23629
|
this.skipAnimation = 'false';
|
|
22822
23630
|
this.stopClose = false;
|
|
22823
23631
|
this.altClose = new EventEmitter(false);
|
|
22824
|
-
this
|
|
23632
|
+
// presently this is only used by inline wizards
|
|
23633
|
+
this.bypassScrollService = false;
|
|
23634
|
+
}
|
|
23635
|
+
get fadeMove() {
|
|
23636
|
+
return this.skipAnimation ? '' : this.configuration.fadeMove;
|
|
23637
|
+
}
|
|
23638
|
+
set fadeMove(move) {
|
|
23639
|
+
this.configuration.fadeMove = move;
|
|
23640
|
+
}
|
|
23641
|
+
get backdrop() {
|
|
23642
|
+
return this.configuration.backdrop;
|
|
22825
23643
|
}
|
|
22826
23644
|
// Detect when _open is set to true and set no-scrolling to true
|
|
22827
23645
|
ngOnChanges(changes) {
|
|
22828
|
-
if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
|
|
23646
|
+
if (!this.bypassScrollService && changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
|
|
22829
23647
|
if (changes._open.currentValue) {
|
|
22830
|
-
this._scrollingService.stopScrolling();
|
|
23648
|
+
this.backdrop && this._scrollingService.stopScrolling();
|
|
22831
23649
|
this.modalStackService.trackModalOpen(this);
|
|
22832
23650
|
}
|
|
22833
23651
|
else {
|
|
@@ -22864,11 +23682,18 @@ class ClrModal {
|
|
|
22864
23682
|
}
|
|
22865
23683
|
}
|
|
22866
23684
|
}
|
|
22867
|
-
ClrModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModal, deps: [{ token: ScrollingService }, { token: ClrCommonStringsService }, { token: ModalStackService }], target: i0.ɵɵFactoryTarget.Component });
|
|
22868
|
-
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"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@
|
|
22869
|
-
trigger('
|
|
22870
|
-
transition('* =>
|
|
22871
|
-
|
|
23685
|
+
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 });
|
|
23686
|
+
ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></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: [
|
|
23687
|
+
trigger('fadeMove', [
|
|
23688
|
+
transition('* => fadeDown', [
|
|
23689
|
+
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
23690
|
+
animate('0.2s ease-in-out'),
|
|
23691
|
+
]),
|
|
23692
|
+
transition('fadeDown => *', [
|
|
23693
|
+
animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' })),
|
|
23694
|
+
]),
|
|
23695
|
+
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
23696
|
+
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
22872
23697
|
]),
|
|
22873
23698
|
trigger('fade', [
|
|
22874
23699
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
@@ -22878,16 +23703,23 @@ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
|
22878
23703
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModal, decorators: [{
|
|
22879
23704
|
type: Component,
|
|
22880
23705
|
args: [{ selector: 'clr-modal', viewProviders: [ScrollingService], animations: [
|
|
22881
|
-
trigger('
|
|
22882
|
-
transition('* =>
|
|
22883
|
-
|
|
23706
|
+
trigger('fadeMove', [
|
|
23707
|
+
transition('* => fadeDown', [
|
|
23708
|
+
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
23709
|
+
animate('0.2s ease-in-out'),
|
|
23710
|
+
]),
|
|
23711
|
+
transition('fadeDown => *', [
|
|
23712
|
+
animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' })),
|
|
23713
|
+
]),
|
|
23714
|
+
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
23715
|
+
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
22884
23716
|
]),
|
|
22885
23717
|
trigger('fade', [
|
|
22886
23718
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
22887
23719
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
22888
23720
|
]),
|
|
22889
|
-
], template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@
|
|
22890
|
-
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }]; }, propDecorators: { _open: [{
|
|
23721
|
+
], template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
|
|
23722
|
+
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { _open: [{
|
|
22891
23723
|
type: Input,
|
|
22892
23724
|
args: ['clrModalOpen']
|
|
22893
23725
|
}, {
|
|
@@ -22920,6 +23752,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22920
23752
|
}], labelledBy: [{
|
|
22921
23753
|
type: Input,
|
|
22922
23754
|
args: ['clrModalLabelledById']
|
|
23755
|
+
}], bypassScrollService: [{
|
|
23756
|
+
type: Input,
|
|
23757
|
+
args: ['clrModalOverrideScrollService']
|
|
22923
23758
|
}] } });
|
|
22924
23759
|
|
|
22925
23760
|
/*
|
|
@@ -22999,16 +23834,122 @@ class ClrModalModule {
|
|
|
22999
23834
|
}
|
|
23000
23835
|
ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
23001
23836
|
ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrIconModule] });
|
|
23002
|
-
ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
|
|
23837
|
+
ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, providers: [ClrModalConfigurationService], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
|
|
23003
23838
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
|
|
23004
23839
|
type: NgModule,
|
|
23005
23840
|
args: [{
|
|
23006
23841
|
imports: [CommonModule, CdkTrapFocusModule, ClrIconModule],
|
|
23007
23842
|
declarations: [CLR_MODAL_DIRECTIVES],
|
|
23008
23843
|
exports: [CLR_MODAL_DIRECTIVES, ClrIconModule],
|
|
23844
|
+
providers: [ClrModalConfigurationService],
|
|
23009
23845
|
}]
|
|
23010
23846
|
}], ctorParameters: function () { return []; } });
|
|
23011
23847
|
|
|
23848
|
+
/*
|
|
23849
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
23850
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
23851
|
+
* This software is released under MIT license.
|
|
23852
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
23853
|
+
*/
|
|
23854
|
+
class ClrSidePanel {
|
|
23855
|
+
constructor(element, configuration) {
|
|
23856
|
+
this.element = element;
|
|
23857
|
+
this.configuration = configuration;
|
|
23858
|
+
this._open = false;
|
|
23859
|
+
this.openChange = new EventEmitter(false);
|
|
23860
|
+
this.skipAnimation = 'false';
|
|
23861
|
+
this.staticBackdrop = false;
|
|
23862
|
+
this.preventClose = false;
|
|
23863
|
+
this.altClose = new EventEmitter(false);
|
|
23864
|
+
}
|
|
23865
|
+
get clrSidePanelBackdrop() {
|
|
23866
|
+
return this.configuration.backdrop;
|
|
23867
|
+
}
|
|
23868
|
+
set clrSidePanelBackdrop(backdrop) {
|
|
23869
|
+
if (backdrop !== undefined) {
|
|
23870
|
+
this.configuration.backdrop = backdrop;
|
|
23871
|
+
}
|
|
23872
|
+
}
|
|
23873
|
+
ngOnInit() {
|
|
23874
|
+
this.configuration.fadeMove = 'fadeLeft';
|
|
23875
|
+
}
|
|
23876
|
+
open() {
|
|
23877
|
+
this.modal.open();
|
|
23878
|
+
}
|
|
23879
|
+
close() {
|
|
23880
|
+
this.modal.close();
|
|
23881
|
+
}
|
|
23882
|
+
documentClick(event) {
|
|
23883
|
+
if (!this.element.nativeElement.contains(event.target) && this.modal._open && !this.configuration.backdrop) {
|
|
23884
|
+
this.modal.close();
|
|
23885
|
+
}
|
|
23886
|
+
}
|
|
23887
|
+
}
|
|
23888
|
+
ClrSidePanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, deps: [{ token: i0.ElementRef }, { token: ClrModalConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
23889
|
+
ClrSidePanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrSidePanel, selector: "clr-side-panel", inputs: { _open: ["clrSidePanelOpen", "_open"], closeButtonAriaLabel: ["clrSidePanelCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrSidePanelSize", "size"], skipAnimation: ["clrSidePanelSkipAnimation", "skipAnimation"], labelledById: ["clrSidePanelLabelledById", "labelledById"], staticBackdrop: ["clrSidePanelStaticBackdrop", "staticBackdrop"], preventClose: ["clrSidePanelPreventClose", "preventClose"], clrSidePanelBackdrop: "clrSidePanelBackdrop" }, outputs: { openChange: "clrSidePanelOpenChange", altClose: "clrSidePanelAlternateClose" }, host: { listeners: { "document:pointerup": "documentClick($event)" }, properties: { "class.side-panel": "true" } }, viewQueries: [{ propertyName: "modal", first: true, predicate: ClrModal, descendants: true }], ngImport: i0, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"openChange.emit($event)\"\n [clrModalCloseButtonAriaLabel]=\"closeButtonAriaLabel\"\n [clrModalSize]=\"size\"\n [clrModalSkipAnimation]=\"skipAnimation\"\n [clrModalStaticBackdrop]=\"staticBackdrop\"\n [clrModalLabelledById]=\"labelledById\"\n [clrModalPreventClose]=\"preventClose\"\n (clrModalAlternateClose)=\"altClose.emit($event)\"\n>\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: "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" }] });
|
|
23890
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, decorators: [{
|
|
23891
|
+
type: Component,
|
|
23892
|
+
args: [{ selector: 'clr-side-panel', host: {
|
|
23893
|
+
'[class.side-panel]': 'true',
|
|
23894
|
+
}, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"openChange.emit($event)\"\n [clrModalCloseButtonAriaLabel]=\"closeButtonAriaLabel\"\n [clrModalSize]=\"size\"\n [clrModalSkipAnimation]=\"skipAnimation\"\n [clrModalStaticBackdrop]=\"staticBackdrop\"\n [clrModalLabelledById]=\"labelledById\"\n [clrModalPreventClose]=\"preventClose\"\n (clrModalAlternateClose)=\"altClose.emit($event)\"\n>\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" }]
|
|
23895
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }]; }, propDecorators: { _open: [{
|
|
23896
|
+
type: Input,
|
|
23897
|
+
args: ['clrSidePanelOpen']
|
|
23898
|
+
}], openChange: [{
|
|
23899
|
+
type: Output,
|
|
23900
|
+
args: ['clrSidePanelOpenChange']
|
|
23901
|
+
}], closeButtonAriaLabel: [{
|
|
23902
|
+
type: Input,
|
|
23903
|
+
args: ['clrSidePanelCloseButtonAriaLabel']
|
|
23904
|
+
}], size: [{
|
|
23905
|
+
type: Input,
|
|
23906
|
+
args: ['clrSidePanelSize']
|
|
23907
|
+
}], skipAnimation: [{
|
|
23908
|
+
type: Input,
|
|
23909
|
+
args: ['clrSidePanelSkipAnimation']
|
|
23910
|
+
}], labelledById: [{
|
|
23911
|
+
type: Input,
|
|
23912
|
+
args: ['clrSidePanelLabelledById']
|
|
23913
|
+
}], staticBackdrop: [{
|
|
23914
|
+
type: Input,
|
|
23915
|
+
args: ['clrSidePanelStaticBackdrop']
|
|
23916
|
+
}], preventClose: [{
|
|
23917
|
+
type: Input,
|
|
23918
|
+
args: ['clrSidePanelPreventClose']
|
|
23919
|
+
}], altClose: [{
|
|
23920
|
+
type: Output,
|
|
23921
|
+
args: ['clrSidePanelAlternateClose']
|
|
23922
|
+
}], modal: [{
|
|
23923
|
+
type: ViewChild,
|
|
23924
|
+
args: [ClrModal]
|
|
23925
|
+
}], clrSidePanelBackdrop: [{
|
|
23926
|
+
type: Input
|
|
23927
|
+
}], documentClick: [{
|
|
23928
|
+
type: HostListener,
|
|
23929
|
+
args: ['document:pointerup', ['$event']]
|
|
23930
|
+
}] } });
|
|
23931
|
+
|
|
23932
|
+
/*
|
|
23933
|
+
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
23934
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
23935
|
+
* This software is released under MIT license.
|
|
23936
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
23937
|
+
*/
|
|
23938
|
+
const CLR_SIDEPANEL_DIRECTIVES = [ClrSidePanel];
|
|
23939
|
+
class ClrSidePanelModule {
|
|
23940
|
+
}
|
|
23941
|
+
ClrSidePanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
23942
|
+
ClrSidePanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanelModule, declarations: [ClrSidePanel], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrModalModule], exports: [ClrSidePanel, ClrIconModule] });
|
|
23943
|
+
ClrSidePanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanelModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrModalModule, ClrIconModule] });
|
|
23944
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanelModule, decorators: [{
|
|
23945
|
+
type: NgModule,
|
|
23946
|
+
args: [{
|
|
23947
|
+
imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrModalModule],
|
|
23948
|
+
declarations: [CLR_SIDEPANEL_DIRECTIVES],
|
|
23949
|
+
exports: [CLR_SIDEPANEL_DIRECTIVES, ClrIconModule],
|
|
23950
|
+
}]
|
|
23951
|
+
}] });
|
|
23952
|
+
|
|
23012
23953
|
/*
|
|
23013
23954
|
* Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
|
|
23014
23955
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -23830,13 +24771,13 @@ class ClrTimeline {
|
|
|
23830
24771
|
}
|
|
23831
24772
|
}
|
|
23832
24773
|
ClrTimeline.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimeline, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
23833
|
-
ClrTimeline.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimeline, selector: "clr-timeline", inputs: { layout: ["clrLayout", "layout"] }, host: { properties: { "class.clr-timeline": "true", "class.clr-timeline-vertical": "this.isVertical" } }, providers: [TimelineIconAttributeService], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
24774
|
+
ClrTimeline.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimeline, selector: "clr-timeline", inputs: { layout: ["clrLayout", "layout"] }, host: { properties: { "class.clr-timeline": "true", "attr.role": "\"list\"", "class.clr-timeline-vertical": "this.isVertical" } }, providers: [TimelineIconAttributeService], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
23834
24775
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimeline, decorators: [{
|
|
23835
24776
|
type: Component,
|
|
23836
24777
|
args: [{
|
|
23837
24778
|
selector: 'clr-timeline',
|
|
23838
24779
|
template: `<ng-content></ng-content>`,
|
|
23839
|
-
host: { '[class.clr-timeline]': 'true' },
|
|
24780
|
+
host: { '[class.clr-timeline]': 'true', '[attr.role]': '"list"' },
|
|
23840
24781
|
providers: [TimelineIconAttributeService],
|
|
23841
24782
|
}]
|
|
23842
24783
|
}], propDecorators: { layout: [{
|
|
@@ -23907,7 +24848,7 @@ class ClrTimelineStep {
|
|
|
23907
24848
|
}
|
|
23908
24849
|
}
|
|
23909
24850
|
ClrTimelineStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTimelineStep, deps: [{ token: TimelineIconAttributeService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
23910
|
-
ClrTimelineStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimelineStep, selector: "clr-timeline-step", inputs: { state: ["clrState", "state"] }, host: { properties: { "class.clr-timeline-step": "true" } }, queries: [{ propertyName: "stepTitle", first: true, predicate: ClrTimelineStepTitle, descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
24851
|
+
ClrTimelineStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTimelineStep, selector: "clr-timeline-step", inputs: { state: ["clrState", "state"] }, host: { properties: { "class.clr-timeline-step": "true", "attr.role": "\"listitem\"" } }, queries: [{ propertyName: "stepTitle", first: true, predicate: ClrTimelineStepTitle, descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
23911
24852
|
<ng-content select="clr-timeline-step-header"></ng-content>
|
|
23912
24853
|
<span class="clr-sr-only">{{ stepTitleText }}</span>
|
|
23913
24854
|
<ng-container *ngIf="!isProcessing; else processing">
|
|
@@ -23951,7 +24892,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23951
24892
|
<clr-spinner clrMedium [attr.aria-label]="iconAriaLabel"></clr-spinner>
|
|
23952
24893
|
</ng-template>
|
|
23953
24894
|
`,
|
|
23954
|
-
host: { '[class.clr-timeline-step]': 'true' },
|
|
24895
|
+
host: { '[class.clr-timeline-step]': 'true', '[attr.role]': '"listitem"' },
|
|
23955
24896
|
}]
|
|
23956
24897
|
}], ctorParameters: function () {
|
|
23957
24898
|
return [{ type: TimelineIconAttributeService }, { type: undefined, decorators: [{
|
|
@@ -26057,13 +26998,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26057
26998
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
26058
26999
|
*/
|
|
26059
27000
|
class ClrWizard {
|
|
26060
|
-
constructor(platformId, commonStrings, navService, pageCollection, buttonService, headerActionService, differs) {
|
|
27001
|
+
constructor(platformId, commonStrings, navService, pageCollection, buttonService, headerActionService, elementRef, differs) {
|
|
26061
27002
|
this.platformId = platformId;
|
|
26062
27003
|
this.commonStrings = commonStrings;
|
|
26063
27004
|
this.navService = navService;
|
|
26064
27005
|
this.pageCollection = pageCollection;
|
|
26065
27006
|
this.buttonService = buttonService;
|
|
26066
27007
|
this.headerActionService = headerActionService;
|
|
27008
|
+
this.elementRef = elementRef;
|
|
26067
27009
|
/**
|
|
26068
27010
|
* Set the aria-label for the stepnav section of the wizard. Set using `[clrWizardStepnavAriaLabel]` input.
|
|
26069
27011
|
*/
|
|
@@ -26077,6 +27019,12 @@ class ClrWizard {
|
|
|
26077
27019
|
* in the top right corner. Set using `[clrWizardClosable]` input.
|
|
26078
27020
|
*/
|
|
26079
27021
|
this.closable = true;
|
|
27022
|
+
/**
|
|
27023
|
+
* Used to communicate to the underlying modal that animations are not
|
|
27024
|
+
* wanted. Primary use is for the display of static/inline wizards.
|
|
27025
|
+
* Set using `[clrWizardPreventModalAnimation]` input.
|
|
27026
|
+
*/
|
|
27027
|
+
this._stopModalAnimations = false;
|
|
26080
27028
|
/**
|
|
26081
27029
|
* Emits when the wizard is opened or closed.
|
|
26082
27030
|
* Listen via `(clrWizardOpenChange)` event.
|
|
@@ -26215,9 +27163,16 @@ class ClrWizard {
|
|
|
26215
27163
|
get isFirst() {
|
|
26216
27164
|
return this.navService.currentPageIsFirst;
|
|
26217
27165
|
}
|
|
27166
|
+
get isInline() {
|
|
27167
|
+
return this.elementRef.nativeElement.classList.contains('clr-wizard--inline');
|
|
27168
|
+
}
|
|
27169
|
+
get stopModalAnimations() {
|
|
27170
|
+
return this._stopModalAnimations ? 'true' : 'false';
|
|
27171
|
+
}
|
|
26218
27172
|
ngAfterContentInit() {
|
|
26219
27173
|
this.pageCollection.pages = this.pages;
|
|
26220
27174
|
this.headerActionService.wizardHeaderActions = this.headerActions;
|
|
27175
|
+
this.initializeButtons();
|
|
26221
27176
|
}
|
|
26222
27177
|
ngDoCheck() {
|
|
26223
27178
|
this.updateNavOnPageChanges();
|
|
@@ -26422,6 +27377,12 @@ class ClrWizard {
|
|
|
26422
27377
|
changes.forEachRemovedItem(() => this.navService.updateNavigation());
|
|
26423
27378
|
}
|
|
26424
27379
|
}
|
|
27380
|
+
initializeButtons() {
|
|
27381
|
+
// Only trigger buttons ready if default is open (inlined)
|
|
27382
|
+
if (this._open) {
|
|
27383
|
+
this.buttonService.buttonsReady = true;
|
|
27384
|
+
}
|
|
27385
|
+
}
|
|
26425
27386
|
emitWizardFinished() {
|
|
26426
27387
|
if (!this.stopNext) {
|
|
26427
27388
|
this.forceFinish();
|
|
@@ -26429,8 +27390,8 @@ class ClrWizard {
|
|
|
26429
27390
|
this.wizardFinished.emit();
|
|
26430
27391
|
}
|
|
26431
27392
|
}
|
|
26432
|
-
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.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
26433
|
-
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"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
|
|
27393
|
+
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 });
|
|
27394
|
+
ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById", "clrModalOverrideScrollService"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
|
|
26434
27395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
26435
27396
|
type: Component,
|
|
26436
27397
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -26439,12 +27400,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26439
27400
|
'[class.wizard-lg]': "size == 'lg'",
|
|
26440
27401
|
'[class.wizard-xl]': "size == 'xl'",
|
|
26441
27402
|
'[class.lastPage]': 'navService.currentPageIsLast',
|
|
26442
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
|
|
27403
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
|
|
26443
27404
|
}], ctorParameters: function () {
|
|
26444
27405
|
return [{ type: undefined, decorators: [{
|
|
26445
27406
|
type: Inject,
|
|
26446
27407
|
args: [PLATFORM_ID]
|
|
26447
|
-
}] }, { type: ClrCommonStringsService }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.IterableDiffers }];
|
|
27408
|
+
}] }, { type: ClrCommonStringsService }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.ElementRef }, { type: i0.IterableDiffers }];
|
|
26448
27409
|
}, propDecorators: { stepnavAriaLabel: [{
|
|
26449
27410
|
type: Input,
|
|
26450
27411
|
args: ['clrWizardStepnavAriaLabel']
|
|
@@ -26454,6 +27415,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26454
27415
|
}], closable: [{
|
|
26455
27416
|
type: Input,
|
|
26456
27417
|
args: ['clrWizardClosable']
|
|
27418
|
+
}], _stopModalAnimations: [{
|
|
27419
|
+
type: Input,
|
|
27420
|
+
args: ['clrWizardPreventModalAnimation']
|
|
26457
27421
|
}], _openChanged: [{
|
|
26458
27422
|
type: Output,
|
|
26459
27423
|
args: ['clrWizardOpenChange']
|
|
@@ -26768,6 +27732,7 @@ ClarityModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
|
|
|
26768
27732
|
ClrLayoutModule,
|
|
26769
27733
|
ClrPopoverModule,
|
|
26770
27734
|
ClrWizardModule,
|
|
27735
|
+
ClrSidePanelModule,
|
|
26771
27736
|
ClrStepperModule,
|
|
26772
27737
|
ClrSpinnerModule,
|
|
26773
27738
|
ClrProgressBarModule,
|
|
@@ -26785,6 +27750,7 @@ ClarityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
|
|
|
26785
27750
|
ClrLayoutModule,
|
|
26786
27751
|
ClrPopoverModule,
|
|
26787
27752
|
ClrWizardModule,
|
|
27753
|
+
ClrSidePanelModule,
|
|
26788
27754
|
ClrStepperModule,
|
|
26789
27755
|
ClrSpinnerModule,
|
|
26790
27756
|
ClrProgressBarModule,
|
|
@@ -26806,6 +27772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26806
27772
|
ClrLayoutModule,
|
|
26807
27773
|
ClrPopoverModule,
|
|
26808
27774
|
ClrWizardModule,
|
|
27775
|
+
ClrSidePanelModule,
|
|
26809
27776
|
ClrStepperModule,
|
|
26810
27777
|
ClrSpinnerModule,
|
|
26811
27778
|
ClrProgressBarModule,
|
|
@@ -27102,5 +28069,5 @@ const CLR_MENU_POSITIONS = [
|
|
|
27102
28069
|
* Generated bundle index. Do not edit.
|
|
27103
28070
|
*/
|
|
27104
28071
|
|
|
27105
|
-
export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, 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_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, 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, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, 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, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, 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, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
|
|
28072
|
+
export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, 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, 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, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, 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, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, 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 };
|
|
27106
28073
|
//# sourceMappingURL=clr-angular.mjs.map
|