@clr/angular 13.0.0-next.0 → 13.0.2

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.
Files changed (36) hide show
  1. package/emphasis/alert/alert.d.ts +2 -1
  2. package/emphasis/alert/providers/multi-alert.service.d.ts +2 -1
  3. package/esm2020/accordion/accordion-panel.mjs +3 -3
  4. package/esm2020/accordion/models/accordion.model.mjs +4 -3
  5. package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
  6. package/esm2020/button/button-loading/loading-button.mjs +6 -3
  7. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +3 -1
  8. package/esm2020/data/datagrid/datagrid-row-detail.mjs +11 -6
  9. package/esm2020/data/tree-view/tree-node.mjs +3 -4
  10. package/esm2020/emphasis/alert/alert-item.mjs +6 -4
  11. package/esm2020/emphasis/alert/alert.mjs +17 -5
  12. package/esm2020/emphasis/alert/providers/multi-alert.service.mjs +23 -6
  13. package/esm2020/forms/password/password-container.mjs +8 -2
  14. package/esm2020/layout/nav/header.mjs +24 -14
  15. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +8 -4
  16. package/esm2020/modal/modal-body.mjs +27 -10
  17. package/esm2020/modal/modal.mjs +3 -3
  18. package/esm2020/popover/common/abstract-popover.mjs +16 -27
  19. package/esm2020/utils/i18n/common-strings.default.mjs +20 -6
  20. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  21. package/esm2020/wizard/providers/wizard-navigation.service.mjs +2 -2
  22. package/esm2020/wizard/wizard-page.mjs +2 -2
  23. package/esm2020/wizard/wizard-stepnav-item.mjs +14 -8
  24. package/esm2020/wizard/wizard.mjs +9 -3
  25. package/fesm2015/clr-angular.mjs +714 -619
  26. package/fesm2015/clr-angular.mjs.map +1 -1
  27. package/fesm2020/clr-angular.mjs +718 -625
  28. package/fesm2020/clr-angular.mjs.map +1 -1
  29. package/forms/password/password-container.d.ts +1 -1
  30. package/layout/nav/header.d.ts +2 -0
  31. package/layout/vertical-nav/vertical-nav-group.d.ts +2 -1
  32. package/modal/modal-body.d.ts +6 -1
  33. package/package.json +2 -2
  34. package/popover/common/abstract-popover.d.ts +1 -4
  35. package/utils/i18n/common-strings.interface.d.ts +34 -0
  36. package/wizard/wizard-stepnav-item.d.ts +3 -1
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, NgModule, Injectable, Inject, PLATFORM_ID, EventEmitter, Input, Output, HostListener, Optional, Component, SkipSelf, ViewChild, InjectionToken, ContentChildren, ComponentFactoryResolver, ElementRef, HostBinding, ContentChild, Self, Attribute, LOCALE_ID, Renderer2, ChangeDetectionStrategy, ViewContainerRef, TemplateRef } from '@angular/core';
3
3
  import { ClarityIcons, ellipsisHorizontalIcon, exclamationCircleIcon, checkCircleIcon, angleIcon, eventIcon, calendarIcon, eyeHideIcon, eyeIcon, windowCloseIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, timesIcon, stepForward2Icon, angleDoubleIcon, filterGridCircleIcon, filterGridIcon, infoCircleIcon, exclamationTriangleIcon, errorStandardIcon, circleIcon, dotCircleIcon, successStandardIcon } from '@cds/core/icon';
4
- import * as i3 from '@angular/common';
4
+ import * as i4 from '@angular/common';
5
5
  import { CommonModule, DOCUMENT, isPlatformBrowser, getLocaleDayNames, FormStyle, TranslationWidth, getLocaleMonthNames, getLocaleFirstDayOfWeek, getLocaleDateFormat, FormatWidth, NgForOf } from '@angular/common';
6
6
  import { filter, debounceTime, first, switchMap, take, map, startWith, tap, distinctUntilChanged, pairwise } from 'rxjs/operators';
7
- import * as i3$1 from 'rxjs';
7
+ import * as i3 from 'rxjs';
8
8
  import { Subject, fromEvent, BehaviorSubject, of, ReplaySubject, isObservable, combineLatest, Observable } from 'rxjs';
9
9
  import { trigger, transition, style, animate, keyframes, state } from '@angular/animations';
10
10
  import * as i1 from '@angular/forms';
@@ -1234,7 +1234,7 @@ ClrButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
1234
1234
  <ng-content></ng-content>
1235
1235
  </button>
1236
1236
  </ng-template>
1237
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1237
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1238
1238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrButton, decorators: [{
1239
1239
  type: Component,
1240
1240
  args: [{
@@ -1371,7 +1371,7 @@ ClrPopoverPositions['left-bottom'] = {
1371
1371
  };
1372
1372
 
1373
1373
  /*
1374
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
1374
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
1375
1375
  * This software is released under MIT license.
1376
1376
  * The full license information can be found in LICENSE in the root directory of this project.
1377
1377
  */
@@ -1436,6 +1436,11 @@ const commonStringsDefault = {
1436
1436
  datepickerSelectYearText: 'Select year, the current year is {CALENDAR_YEAR}',
1437
1437
  // Stack View
1438
1438
  stackViewChanged: 'Value changed.',
1439
+ // Responsive Nav
1440
+ responsiveNavToggleOpen: 'Open navigation menu',
1441
+ responsiveNavToggleClose: 'Close navigation menu',
1442
+ responsiveNavOverflowOpen: 'Open navigation overflow menu',
1443
+ responsiveNavOverflowClose: 'Close navigation overflow menu',
1439
1444
  //Vertical Nav
1440
1445
  verticalNavGroupToggle: 'Toggle vertical navigation group',
1441
1446
  verticalNavToggle: 'Toggle vertical navigation',
@@ -1453,10 +1458,19 @@ const commonStringsDefault = {
1453
1458
  comboboxNoResults: 'No results',
1454
1459
  comboboxOpen: 'Show options',
1455
1460
  // Datagrid expandable rows
1456
- dategridExpandableBeginningOf: 'Beginning of',
1457
- dategridExpandableEndOf: 'End of',
1458
- dategridExpandableRowContent: 'Expandable row content',
1459
- dategridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,
1461
+ datagridExpandableBeginningOf: 'Beginning of',
1462
+ datagridExpandableEndOf: 'End of',
1463
+ datagridExpandableRowContent: 'Expandable row content',
1464
+ datagridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,
1465
+ // Wizard
1466
+ wizardStepSuccess: 'Completed',
1467
+ wizardStepError: 'Error',
1468
+ /**
1469
+ * Password Input
1470
+ * Screen-reader text for the hide/show password field button
1471
+ */
1472
+ passwordHide: 'Hide password',
1473
+ passwordShow: 'Show password',
1460
1474
  };
1461
1475
 
1462
1476
  /*
@@ -1605,7 +1619,7 @@ ClrButtonGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
1605
1619
  ClrPopoverToggleService,
1606
1620
  ClrPopoverEventsService,
1607
1621
  ClrPopoverPositionService,
1608
- ], queries: [{ propertyName: "buttons", predicate: ClrButton }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-container *ngFor=\"let inlineButton of inlineButtons\">\n <ng-template [ngTemplateOutlet]=\"inlineButton.templateRef\"></ng-template>\n</ng-container>\n<ng-container *ngIf=\"menuButtons.length > 0\">\n <div class=\"btn-group-overflow open\" [ngClass]=\"menuPosition\" #anchor>\n <button\n class=\"btn dropdown-toggle\"\n clrPopoverAnchor\n clrPopoverOpenCloseButton\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-label]=\"commonStrings.keys.rowActions\"\n >\n <cds-icon shape=\"ellipsis-horizontal\" [attr.title]=\"commonStrings.keys.more\"></cds-icon>\n </button>\n <div\n role=\"menu\"\n class=\"dropdown-menu clr-button-group-menu\"\n [id]=\"popoverId\"\n [attr.id]=\"popoverId\"\n [attr.aria-hidden]=\"!open\"\n *clrPopoverContent=\"open at popoverPosition; outsideClickToClose: true; scrollToClose: true\"\n >\n <ng-template [ngTemplateOutlet]=\"ref\"></ng-template>\n </div>\n </div>\n</ng-container>\n<ng-template #ref>\n <ng-container *ngFor=\"let menuButton of menuButtons\">\n <ng-template [ngTemplateOutlet]=\"menuButton.templateRef\"></ng-template>\n </ng-container>\n</ng-template>\n", directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
1622
+ ], queries: [{ propertyName: "buttons", predicate: ClrButton }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-container *ngFor=\"let inlineButton of inlineButtons\">\n <ng-template [ngTemplateOutlet]=\"inlineButton.templateRef\"></ng-template>\n</ng-container>\n<ng-container *ngIf=\"menuButtons.length > 0\">\n <div class=\"btn-group-overflow open\" [ngClass]=\"menuPosition\" #anchor>\n <button\n class=\"btn dropdown-toggle\"\n clrPopoverAnchor\n clrPopoverOpenCloseButton\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-label]=\"commonStrings.keys.rowActions\"\n >\n <cds-icon shape=\"ellipsis-horizontal\" [attr.title]=\"commonStrings.keys.more\"></cds-icon>\n </button>\n <div\n role=\"menu\"\n class=\"dropdown-menu clr-button-group-menu\"\n [id]=\"popoverId\"\n [attr.id]=\"popoverId\"\n [attr.aria-hidden]=\"!open\"\n *clrPopoverContent=\"open at popoverPosition; outsideClickToClose: true; scrollToClose: true\"\n >\n <ng-template [ngTemplateOutlet]=\"ref\"></ng-template>\n </div>\n </div>\n</ng-container>\n<ng-template #ref>\n <ng-container *ngFor=\"let menuButton of menuButtons\">\n <ng-template [ngTemplateOutlet]=\"menuButton.templateRef\"></ng-template>\n </ng-container>\n</ng-template>\n", directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
1609
1623
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrButtonGroup, decorators: [{
1610
1624
  type: Component,
1611
1625
  args: [{ selector: 'clr-button-group', providers: [
@@ -1647,10 +1661,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
1647
1661
  }] });
1648
1662
 
1649
1663
  /*
1650
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
1664
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
1651
1665
  * This software is released under MIT license.
1652
1666
  * The full license information can be found in LICENSE in the root directory of this project.
1653
1667
  */
1668
+ // minimum width to fit loading spinner
1669
+ const MIN_BUTTON_WIDTH = 42;
1654
1670
  class ClrLoadingButton {
1655
1671
  constructor(el, renderer) {
1656
1672
  this.el = el;
@@ -1691,7 +1707,8 @@ class ClrLoadingButton {
1691
1707
  setExplicitButtonWidth() {
1692
1708
  if (this.el.nativeElement && this.el.nativeElement.getBoundingClientRect) {
1693
1709
  const boundingClientRect = this.el.nativeElement.getBoundingClientRect();
1694
- this.renderer.setStyle(this.el.nativeElement, 'width', `${boundingClientRect.width}px`);
1710
+ const width = Math.max(MIN_BUTTON_WIDTH, boundingClientRect.width);
1711
+ this.renderer.setStyle(this.el.nativeElement, 'width', `${width}px`);
1695
1712
  }
1696
1713
  }
1697
1714
  }
@@ -1712,7 +1729,7 @@ ClrLoadingButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
1712
1729
  <ng-content></ng-content>
1713
1730
  </span>
1714
1731
  </ng-container>
1715
- `, isInline: true, directives: [{ type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
1732
+ `, isInline: true, directives: [{ type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
1716
1733
  trigger('defaultButton', [
1717
1734
  transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
1718
1735
  // TODO: see if we can get leave animation to work before spinner's enter animation
@@ -2657,7 +2674,7 @@ ClrControlContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
2657
2674
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
2658
2675
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
2659
2676
  </div>
2660
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
2677
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
2661
2678
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrControlContainer, decorators: [{
2662
2679
  type: Component,
2663
2680
  args: [{
@@ -3033,7 +3050,7 @@ ClrCheckboxWrapper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
3033
3050
  <ng-content select="[clrCheckbox],[clrToggle]"></ng-content>
3034
3051
  <ng-content select="label"></ng-content>
3035
3052
  <label *ngIf="!label"></label>
3036
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
3053
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
3037
3054
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCheckboxWrapper, decorators: [{
3038
3055
  type: Component,
3039
3056
  args: [{
@@ -3049,7 +3066,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
3049
3066
  },
3050
3067
  providers: [ControlIdService, IS_TOGGLE_PROVIDER],
3051
3068
  }]
3052
- }], ctorParameters: function () { return [{ type: i3$1.BehaviorSubject, decorators: [{
3069
+ }], ctorParameters: function () { return [{ type: i3.BehaviorSubject, decorators: [{
3053
3070
  type: Inject,
3054
3071
  args: [IS_TOGGLE]
3055
3072
  }] }]; }, propDecorators: { label: [{
@@ -3159,7 +3176,7 @@ ClrCheckboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3159
3176
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
3160
3177
  </div>
3161
3178
  </div>
3162
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
3179
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
3163
3180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCheckboxContainer, decorators: [{
3164
3181
  type: Component,
3165
3182
  args: [{
@@ -4887,7 +4904,7 @@ class ClrCalendar {
4887
4904
  }
4888
4905
  }
4889
4906
  ClrCalendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCalendar, deps: [{ token: LocaleHelperService }, { token: DateNavigationService }, { token: DatepickerFocusService }, { token: DateIOService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
4890
- ClrCalendar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrCalendar, selector: "clr-calendar", host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0, template: "<table class=\"calendar-table\">\n <tr class=\"calendar-row weekdays\">\n <td *ngFor=\"let day of localeDays\" class=\"calendar-cell weekday\" role=\"heading\" [attr.aria-label]=\"day.day\">\n {{day.narrow}}\n </td>\n </tr>\n <tr class=\"calendar-row\" *ngFor=\"let row of calendarViewModel.calendarView\">\n <td *ngFor=\"let dayView of row\" class=\"calendar-cell\">\n <clr-day [clrDayView]=\"dayView\"></clr-day>\n </td>\n </tr>\n</table>\n", components: [{ type: ClrDay, selector: "clr-day", inputs: ["clrDayView"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
4907
+ ClrCalendar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrCalendar, selector: "clr-calendar", host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0, template: "<table class=\"calendar-table\">\n <tr class=\"calendar-row weekdays\">\n <td *ngFor=\"let day of localeDays\" class=\"calendar-cell weekday\" role=\"heading\" [attr.aria-label]=\"day.day\">\n {{day.narrow}}\n </td>\n </tr>\n <tr class=\"calendar-row\" *ngFor=\"let row of calendarViewModel.calendarView\">\n <td *ngFor=\"let dayView of row\" class=\"calendar-cell\">\n <clr-day [clrDayView]=\"dayView\"></clr-day>\n </td>\n </tr>\n</table>\n", components: [{ type: ClrDay, selector: "clr-day", inputs: ["clrDayView"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
4891
4908
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCalendar, decorators: [{
4892
4909
  type: Component,
4893
4910
  args: [{ selector: 'clr-calendar', template: "<table class=\"calendar-table\">\n <tr class=\"calendar-row weekdays\">\n <td *ngFor=\"let day of localeDays\" class=\"calendar-cell weekday\" role=\"heading\" [attr.aria-label]=\"day.day\">\n {{day.narrow}}\n </td>\n </tr>\n <tr class=\"calendar-row\" *ngFor=\"let row of calendarViewModel.calendarView\">\n <td *ngFor=\"let dayView of row\" class=\"calendar-cell\">\n <clr-day [clrDayView]=\"dayView\"></clr-day>\n </td>\n </tr>\n</table>\n" }]
@@ -5097,7 +5114,7 @@ ClrMonthpicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
5097
5114
  >
5098
5115
  {{ month }}
5099
5116
  </button>
5100
- `, isInline: true, directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5117
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5101
5118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrMonthpicker, decorators: [{
5102
5119
  type: Component,
5103
5120
  args: [{
@@ -5350,7 +5367,7 @@ ClrYearpicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
5350
5367
  {{ year }}
5351
5368
  </button>
5352
5369
  </div>
5353
- `, isInline: true, directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5370
+ `, isInline: true, directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5354
5371
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrYearpicker, decorators: [{
5355
5372
  type: Component,
5356
5373
  args: [{
@@ -5505,7 +5522,7 @@ class ClrDatepickerViewManager {
5505
5522
  }
5506
5523
  }
5507
5524
  ClrDatepickerViewManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatepickerViewManager, deps: [{ token: ViewManagerService }], target: i0.ɵɵFactoryTarget.Component });
5508
- ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { properties: { "class.datepicker": "true", "attr.aria-modal": "true" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n* Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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", components: [{ type: ClrMonthpicker, selector: "clr-monthpicker" }, { type: ClrYearpicker, selector: "clr-yearpicker" }, { type: ClrDaypicker, selector: "clr-daypicker" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
5525
+ ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { properties: { "class.datepicker": "true", "attr.aria-modal": "true" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n* Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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", components: [{ type: ClrMonthpicker, selector: "clr-monthpicker" }, { type: ClrYearpicker, selector: "clr-yearpicker" }, { type: ClrDaypicker, selector: "clr-daypicker" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
5509
5526
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
5510
5527
  type: Component,
5511
5528
  args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
@@ -5644,7 +5661,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
5644
5661
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
5645
5662
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
5646
5663
  </div>
5647
- `, isInline: true, components: [{ type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
5664
+ `, isInline: true, components: [{ type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
5648
5665
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDateContainer, decorators: [{
5649
5666
  type: Component,
5650
5667
  args: [{
@@ -6112,7 +6129,7 @@ ClrInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
6112
6129
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6113
6130
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6114
6131
  </div>
6115
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6132
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6116
6133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrInputContainer, decorators: [{
6117
6134
  type: Component,
6118
6135
  args: [{
@@ -6198,7 +6215,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6198
6215
  }], ctorParameters: function () { return []; } });
6199
6216
 
6200
6217
  /**
6201
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
6218
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
6202
6219
  * This software is released under MIT license.
6203
6220
  * The full license information can be found in LICENSE in the root directory of this project.
6204
6221
  */
@@ -6262,6 +6279,9 @@ ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
6262
6279
  [attr.shape]="show ? 'eye-hide' : 'eye'"
6263
6280
  [attr.title]="show ? commonStrings.keys.hide : commonStrings.keys.show"
6264
6281
  ></cds-icon>
6282
+ <span class="clr-sr-only">{{
6283
+ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow
6284
+ }}</span>
6265
6285
  </button>
6266
6286
  </div>
6267
6287
  <cds-icon
@@ -6283,7 +6303,7 @@ ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
6283
6303
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6284
6304
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6285
6305
  </div>
6286
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6306
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6287
6307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrPasswordContainer, decorators: [{
6288
6308
  type: Component,
6289
6309
  args: [{
@@ -6307,6 +6327,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6307
6327
  [attr.shape]="show ? 'eye-hide' : 'eye'"
6308
6328
  [attr.title]="show ? commonStrings.keys.hide : commonStrings.keys.show"
6309
6329
  ></cds-icon>
6330
+ <span class="clr-sr-only">{{
6331
+ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow
6332
+ }}</span>
6310
6333
  </button>
6311
6334
  </div>
6312
6335
  <cds-icon
@@ -6345,7 +6368,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6345
6368
  }]
6346
6369
  }], ctorParameters: function () { return [{ type: IfControlStateService }, { type: LayoutService, decorators: [{
6347
6370
  type: Optional
6348
- }] }, { type: ControlClassService }, { type: NgControlService }, { type: FocusService$1 }, { type: i3$1.BehaviorSubject, decorators: [{
6371
+ }] }, { type: ControlClassService }, { type: NgControlService }, { type: FocusService$1 }, { type: i3.BehaviorSubject, decorators: [{
6349
6372
  type: Inject,
6350
6373
  args: [TOGGLE_SERVICE]
6351
6374
  }] }, { type: ClrCommonStringsService }]; }, propDecorators: { clrToggle: [{
@@ -6394,7 +6417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6394
6417
  type: Optional
6395
6418
  }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: FocusService$1, decorators: [{
6396
6419
  type: Optional
6397
- }] }, { type: i3$1.BehaviorSubject, decorators: [{
6420
+ }] }, { type: i3.BehaviorSubject, decorators: [{
6398
6421
  type: Optional
6399
6422
  }, {
6400
6423
  type: Inject,
@@ -6453,7 +6476,7 @@ ClrRadioWrapper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
6453
6476
  <ng-content select="[clrRadio]"></ng-content>
6454
6477
  <ng-content select="label"></ng-content>
6455
6478
  <label *ngIf="!label"></label>
6456
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
6479
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
6457
6480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrRadioWrapper, decorators: [{
6458
6481
  type: Component,
6459
6482
  args: [{
@@ -6558,7 +6581,7 @@ ClrRadioContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
6558
6581
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6559
6582
  </div>
6560
6583
  </div>
6561
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6584
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6562
6585
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrRadioContainer, decorators: [{
6563
6586
  type: Component,
6564
6587
  args: [{
@@ -6682,7 +6705,7 @@ ClrSelectContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
6682
6705
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6683
6706
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6684
6707
  </div>
6685
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6708
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6686
6709
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrSelectContainer, decorators: [{
6687
6710
  type: Component,
6688
6711
  args: [{
@@ -6805,7 +6828,7 @@ ClrTextareaContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
6805
6828
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6806
6829
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6807
6830
  </div>
6808
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6831
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6809
6832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTextareaContainer, decorators: [{
6810
6833
  type: Component,
6811
6834
  args: [{
@@ -6953,7 +6976,7 @@ ClrRangeContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
6953
6976
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6954
6977
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6955
6978
  </div>
6956
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6979
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
6957
6980
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrRangeContainer, decorators: [{
6958
6981
  type: Component,
6959
6982
  args: [{
@@ -7122,7 +7145,7 @@ ClrDatalistContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
7122
7145
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
7123
7146
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
7124
7147
  </div>
7125
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
7148
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
7126
7149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatalistContainer, decorators: [{
7127
7150
  type: Component,
7128
7151
  args: [{
@@ -7812,7 +7835,7 @@ class ClrOption {
7812
7835
  }
7813
7836
  ClrOption.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrOption, deps: [{ token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: ComboboxFocusHandler }, { token: OptionSelectionService }, { token: UNIQUE_ID }], target: i0.ɵɵFactoryTarget.Component });
7814
7837
  ClrOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrOption, selector: "clr-option", inputs: { optionId: ["id", "optionId"], value: ["clrValue", "value"] }, host: { listeners: { "click": "onClick()" }, properties: { "class.clr-combobox-option": "true", "attr.role": "\"option\"", "attr.tabindex": "-1", "attr.id": "optionId", "class.active": "this.selected", "class.clr-focus": "this.focusClass" } }, providers: [UNIQUE_ID_PROVIDER], ngImport: i0, template: `<ng-content></ng-content>
7815
- <span *ngIf="selected" class="clr-sr-only"> {{ commonStrings.keys.comboboxSelected }} </span> `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
7838
+ <span *ngIf="selected" class="clr-sr-only"> {{ commonStrings.keys.comboboxSelected }} </span> `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
7816
7839
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrOption, decorators: [{
7817
7840
  type: Component,
7818
7841
  args: [{
@@ -8034,7 +8057,7 @@ ClrOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "1
8034
8057
 
8035
8058
  <!--Option Groups and Options will be projected here-->
8036
8059
  <ng-content></ng-content>
8037
- `, isInline: true, components: [{ type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
8060
+ `, isInline: true, components: [{ type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
8038
8061
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrOptions, decorators: [{
8039
8062
  type: Component,
8040
8063
  args: [{
@@ -8146,7 +8169,7 @@ ClrComboboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
8146
8169
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
8147
8170
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
8148
8171
  </div>
8149
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
8172
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
8150
8173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrComboboxContainer, decorators: [{
8151
8174
  type: Component,
8152
8175
  args: [{
@@ -8895,7 +8918,7 @@ ClrCombobox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
8895
8918
  ClrPopoverToggleService,
8896
8919
  ClrPopoverEventsService,
8897
8920
  ClrPopoverPositionService,
8898
- ], queries: [{ propertyName: "optionSelected", first: true, predicate: ClrOptionSelected, descendants: true }], viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textboxInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n* Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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>\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 >\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 [id]=\"inputId()\"\n role=\"combobox\"\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 aria-multiline=\"false\"\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\" size=\"12\"></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", components: [{ type: ClrRovingTabindex, selector: "[clrRovingTabindex]", inputs: ["clrRovingTabindex", "clrRovingTabindexDisabled"] }], directives: [{ type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ClrKeyFocusItem, selector: "[clrKeyFocusItem]" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
8921
+ ], queries: [{ propertyName: "optionSelected", first: true, predicate: ClrOptionSelected, descendants: true }], viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textboxInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n* Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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>\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 >\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 [id]=\"inputId()\"\n role=\"combobox\"\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 aria-multiline=\"false\"\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\" size=\"12\"></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", components: [{ type: ClrRovingTabindex, selector: "[clrRovingTabindex]", inputs: ["clrRovingTabindex", "clrRovingTabindexDisabled"] }], directives: [{ type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ClrKeyFocusItem, selector: "[clrKeyFocusItem]" }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
8899
8922
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCombobox, decorators: [{
8900
8923
  type: Component,
8901
8924
  args: [{ selector: 'clr-combobox', providers: [
@@ -11171,6 +11194,7 @@ DatagridStringFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
11171
11194
  [(ngModel)]="value"
11172
11195
  class="clr-input"
11173
11196
  [attr.aria-label]="commonStrings.keys.filterItems"
11197
+ [placeholder]="commonStrings.keys.filterItems"
11174
11198
  />
11175
11199
  </clr-dg-filter>
11176
11200
  `, isInline: true, components: [{ type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: ["clrDgFilterOpen", "clrDgFilter"], outputs: ["clrDgFilterOpenChange"] }], directives: [{ 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
@@ -11188,6 +11212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
11188
11212
  [(ngModel)]="value"
11189
11213
  class="clr-input"
11190
11214
  [attr.aria-label]="commonStrings.keys.filterItems"
11215
+ [placeholder]="commonStrings.keys.filterItems"
11191
11216
  />
11192
11217
  </clr-dg-filter>
11193
11218
  `,
@@ -12557,7 +12582,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
12557
12582
 
12558
12583
  <clr-dg-column-separator *ngIf="showSeparator"></clr-dg-column-separator>
12559
12584
  </div>
12560
- `, isInline: true, components: [{ type: DatagridStringFilter, selector: "clr-dg-string-filter", inputs: ["clrDgStringFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }, { type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: ["clrDgNumericFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }, { type: ClrDatagridColumnSeparator, selector: "clr-dg-column-separator" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12585
+ `, isInline: true, components: [{ type: DatagridStringFilter, selector: "clr-dg-string-filter", inputs: ["clrDgStringFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }, { type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: ["clrDgNumericFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }, { type: ClrDatagridColumnSeparator, selector: "clr-dg-column-separator" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12561
12586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridColumn, decorators: [{
12562
12587
  type: Component,
12563
12588
  args: [{
@@ -12888,7 +12913,7 @@ ClrDatagridPlaceholder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
12888
12913
  <div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
12889
12914
  <span role="gridcell"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
12890
12915
  </div>
12891
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12916
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12892
12917
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridPlaceholder, decorators: [{
12893
12918
  type: Component,
12894
12919
  args: [{
@@ -13087,7 +13112,7 @@ ClrSignpost.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
13087
13112
  </ng-container>
13088
13113
 
13089
13114
  <ng-content></ng-content>
13090
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
13115
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
13091
13116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrSignpost, decorators: [{
13092
13117
  type: Component,
13093
13118
  args: [{
@@ -13851,7 +13876,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
13851
13876
  DatagridIfExpandService,
13852
13877
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
13853
13878
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
13854
- ], 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<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\">\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</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"commonStrings.keys.select\"\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\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\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 [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"commonStrings.keys.select\"\n />\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.isOpen ? 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", components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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]" }, { type: ClrRadio, selector: "[clrRadio]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
13879
+ ], 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<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\">\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</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"commonStrings.keys.select\"\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\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\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 [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"commonStrings.keys.select\"\n />\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.isOpen ? 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", components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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]" }, { type: ClrRadio, selector: "[clrRadio]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
13855
13880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridRow, decorators: [{
13856
13881
  type: Component,
13857
13882
  args: [{ selector: 'clr-dg-row', host: {
@@ -14258,7 +14283,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
14258
14283
  TableSizeService,
14259
14284
  ColumnsService,
14260
14285
  DisplayModeService,
14261
- ], 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: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { 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-2021 VMware, Inc. All Rights Reserved.\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 >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\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 [attr.aria-label]=\"clrDgSingleSelectionAriaLabel\"\n >\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 [attr.aria-label]=\"clrDgSingleActionableAriaLabel\"\n >\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 [attr.aria-label]=\"clrDetailExpandableAriaLabel\"\n >\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 <ng-container #displayedRows></ng-container>\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 <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", components: [{ type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
14286
+ ], 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: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { 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-2021 VMware, Inc. All Rights Reserved.\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 >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\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 [attr.aria-label]=\"clrDgSingleSelectionAriaLabel\"\n >\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 [attr.aria-label]=\"clrDgSingleActionableAriaLabel\"\n >\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 [attr.aria-label]=\"clrDetailExpandableAriaLabel\"\n >\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 <ng-container #displayedRows></ng-container>\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 <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", components: [{ type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
14262
14287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagrid, decorators: [{
14263
14288
  type: Component,
14264
14289
  args: [{ selector: 'clr-datagrid', providers: [
@@ -14729,7 +14754,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14729
14754
  </clr-dg-column-toggle-button>
14730
14755
  </div>
14731
14756
  </div>
14732
- `, isInline: true, components: [{ type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: ClrDatagridColumnToggleButton, selector: "clr-dg-column-toggle-button", outputs: ["clrAllSelected"] }], directives: [{ type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
14757
+ `, isInline: true, components: [{ type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: ClrDatagridColumnToggleButton, selector: "clr-dg-column-toggle-button", outputs: ["clrAllSelected"] }], directives: [{ type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
14733
14758
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
14734
14759
  type: Component,
14735
14760
  args: [{
@@ -14931,7 +14956,7 @@ ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
14931
14956
  <ng-content></ng-content>
14932
14957
  <div class="clr-sr-only">{{ commonStrings.keys.detailPaneEnd }}</div>
14933
14958
  </div>
14934
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
14959
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
14935
14960
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridDetail, decorators: [{
14936
14961
  type: Component,
14937
14962
  args: [{
@@ -15088,7 +15113,7 @@ ClrDatagridFooter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15088
15113
  </div>
15089
15114
  </ng-container>
15090
15115
  <ng-content select="clr-dg-pagination"></ng-content>
15091
- `, isInline: true, components: [{ type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: ClrDatagridColumnToggle, selector: "clr-dg-column-toggle" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
15116
+ `, isInline: true, components: [{ type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: ClrDatagridColumnToggle, selector: "clr-dg-column-toggle" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
15092
15117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridFooter, decorators: [{
15093
15118
  type: Component,
15094
15119
  args: [{
@@ -15218,7 +15243,7 @@ ClrDatagridHideableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.
15218
15243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridHideableColumn, decorators: [{
15219
15244
  type: Directive,
15220
15245
  args: [{ selector: '[clrDgHideableColumn]' }]
15221
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ColumnsService }, { type: i3$1.BehaviorSubject, decorators: [{
15246
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ColumnsService }, { type: i3.BehaviorSubject, decorators: [{
15222
15247
  type: Optional
15223
15248
  }, {
15224
15249
  type: Inject,
@@ -15257,7 +15282,7 @@ ClrDatagridPageSize.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
15257
15282
  <option *ngFor="let option of pageSizeOptions" [ngValue]="option">{{ option }}</option>
15258
15283
  </select>
15259
15284
  </div>
15260
- `, isInline: true, directives: [{ type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
15285
+ `, isInline: true, directives: [{ type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
15261
15286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridPageSize, decorators: [{
15262
15287
  type: Component,
15263
15288
  args: [{
@@ -15507,7 +15532,7 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
15507
15532
  </button>
15508
15533
  </div>
15509
15534
  </ng-container>
15510
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
15535
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
15511
15536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridPagination, decorators: [{
15512
15537
  type: Component,
15513
15538
  args: [{
@@ -15631,7 +15656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
15631
15656
  }] } });
15632
15657
 
15633
15658
  /*
15634
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
15659
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
15635
15660
  * This software is released under MIT license.
15636
15661
  * The full license information can be found in LICENSE in the root directory of this project.
15637
15662
  */
@@ -15664,17 +15689,20 @@ class ClrDatagridRowDetail {
15664
15689
  }
15665
15690
  get beginningOfExpandableContentAriaText() {
15666
15691
  return (this._beginningOfExpandableContentAriaText ||
15667
- `${this.commonStrings.keys.dategridExpandableBeginningOf} ${this.commonStrings.keys.dategridExpandableRowContent}`);
15692
+ `${this.commonStrings.keys.dategridExpandableBeginningOf || this.commonStrings.keys.datagridExpandableBeginningOf}
15693
+ ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
15668
15694
  }
15669
15695
  get endOfExpandableContentAriaText() {
15670
15696
  return (this._endOfExpandableContentAriaText ||
15671
- `${this.commonStrings.keys.dategridExpandableEndOf} ${this.commonStrings.keys.dategridExpandableRowContent}`);
15697
+ `${this.commonStrings.keys.dategridExpandableEndOf || this.commonStrings.keys.datagridExpandableEndOf}
15698
+ ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
15672
15699
  }
15673
15700
  }
15674
15701
  ClrDatagridRowDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridRowDetail, deps: [{ token: Selection }, { token: RowActionService }, { token: DatagridIfExpandService }, { token: ExpandableRowsCount }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
15675
15702
  ClrDatagridRowDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrDatagridRowDetail, selector: "clr-dg-row-detail", inputs: { replace: ["clrDgReplace", "replace"], _beginningOfExpandableContentAriaText: ["clrRowDetailBeginningAriaText", "_beginningOfExpandableContentAriaText"], _endOfExpandableContentAriaText: ["clrRowDetailEndAriaText", "_endOfExpandableContentAriaText"] }, host: { properties: { "class.datagrid-row-flex": "true", "class.datagrid-row-detail": "true", "class.datagrid-container": "cells.length === 0", "attr.id": "expand.expandableId" } }, queries: [{ propertyName: "cells", predicate: ClrDatagridCell }], ngImport: i0, template: `
15676
15703
  <div class="clr-sr-only">
15677
- {{ beginningOfExpandableContentAriaText }} {{ commonStrings.keys.dategridExpandableRowsHelperText }}
15704
+ {{ beginningOfExpandableContentAriaText }}
15705
+ {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
15678
15706
  </div>
15679
15707
  <ng-content></ng-content>
15680
15708
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -15683,9 +15711,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
15683
15711
  type: Component,
15684
15712
  args: [{
15685
15713
  selector: 'clr-dg-row-detail',
15714
+ // TODO: @deprecated - dategrid* keys are deprecated. Remove in v14.
15686
15715
  template: `
15687
15716
  <div class="clr-sr-only">
15688
- {{ beginningOfExpandableContentAriaText }} {{ commonStrings.keys.dategridExpandableRowsHelperText }}
15717
+ {{ beginningOfExpandableContentAriaText }}
15718
+ {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
15689
15719
  </div>
15690
15720
  <ng-content></ng-content>
15691
15721
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -15910,7 +15940,7 @@ DatagridHeaderRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0",
15910
15940
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DatagridHeaderRenderer, decorators: [{
15911
15941
  type: Directive,
15912
15942
  args: [{ selector: 'clr-dg-column', providers: [ColumnResizerService, COLUMN_STATE_PROVIDER] }]
15913
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }, { type: DomAdapter }, { type: ColumnResizerService }, { type: ColumnsService }, { type: i3$1.BehaviorSubject, decorators: [{
15943
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }, { type: DomAdapter }, { type: ColumnResizerService }, { type: ColumnsService }, { type: i3.BehaviorSubject, decorators: [{
15914
15944
  type: Inject,
15915
15945
  args: [COLUMN_STATE]
15916
15946
  }] }]; }, propDecorators: { resizeEmitter: [{
@@ -16500,7 +16530,7 @@ ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
16500
16530
  <ng-content select="clr-stack-block"></ng-content>
16501
16531
  </div>
16502
16532
  </clr-expandable-animation>
16503
- `, isInline: true, styles: [":host{display:block}\n"], components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
16533
+ `, isInline: true, styles: [":host{display:block}\n"], components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
16504
16534
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackBlock, decorators: [{
16505
16535
  type: Component,
16506
16536
  args: [{
@@ -16678,7 +16708,7 @@ ClrStackHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
16678
16708
  <!-- End of undocumented experimental feature. -->
16679
16709
  </span>
16680
16710
  </h4>
16681
- `, isInline: true, styles: [":host{display:block}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16711
+ `, isInline: true, styles: [":host{display:block}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16682
16712
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackHeader, decorators: [{
16683
16713
  type: Component,
16684
16714
  args: [{
@@ -16749,7 +16779,7 @@ ClrStackInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
16749
16779
  ClrStackInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrStackInput, selector: "clr-stack-input", inputs: { model: ["clrModel", "model"], type: "type" }, outputs: { modelChange: "clrModelChange" }, usesInheritance: true, ngImport: i0, template: `
16750
16780
  <span *ngIf="!stackView.editing">{{ model }}</span>
16751
16781
  <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
16752
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
16782
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
16753
16783
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackInput, decorators: [{
16754
16784
  type: Component,
16755
16785
  args: [{
@@ -16782,7 +16812,7 @@ ClrStackSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
16782
16812
  <ng-content></ng-content>
16783
16813
  </select>
16784
16814
  </div>
16785
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
16815
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
16786
16816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackSelect, decorators: [{
16787
16817
  type: Component,
16788
16818
  args: [{
@@ -17268,7 +17298,7 @@ RecursiveChildren.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
17268
17298
  <ng-container *ngTemplateOutlet="featuresService.recursion.template; context: getContext(child)"></ng-container>
17269
17299
  </ng-container>
17270
17300
  </ng-container>
17271
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
17301
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
17272
17302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RecursiveChildren, decorators: [{
17273
17303
  type: Component,
17274
17304
  args: [{
@@ -17295,7 +17325,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
17295
17325
  }] } });
17296
17326
 
17297
17327
  /*
17298
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
17328
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17299
17329
  * This software is released under MIT license.
17300
17330
  * The full license information can be found in LICENSE in the root directory of this project.
17301
17331
  */
@@ -17488,12 +17518,12 @@ class ClrTreeNode {
17488
17518
  }
17489
17519
  }
17490
17520
  ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTreeNode, deps: [{ token: UNIQUE_ID }, { token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
17491
- ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrTreeNode, selector: "clr-tree-node", inputs: { selected: ["clrSelected", "selected"], expandable: ["clrExpandable", "expandable"], expanded: ["clrExpanded", "expanded"] }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "attr.role": "\"treeitem\"", "class.clr-tree-node": "true" } }, providers: [
17521
+ ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrTreeNode, selector: "clr-tree-node", inputs: { selected: ["clrSelected", "selected"], expandable: ["clrExpandable", "expandable"], expanded: ["clrExpanded", "expanded"] }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true" } }, providers: [
17492
17522
  UNIQUE_ID_PROVIDER,
17493
17523
  TREE_FEATURES_PROVIDER,
17494
17524
  IfExpandService,
17495
17525
  { provide: LoadingListener, useExisting: IfExpandService },
17496
- ], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\"></label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\">\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable\">\n <span *ngIf=\"ariaSelected\"> selected </span>\n <span *ngIf=\"!ariaSelected\"> unselected </span>\n </div>\n </div>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", components: [{ type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], animations: [
17526
+ ], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\"></label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\">\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable\">\n <span *ngIf=\"ariaSelected\"> selected </span>\n <span *ngIf=\"!ariaSelected\"> unselected </span>\n </div>\n </div>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", components: [{ type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], animations: [
17497
17527
  trigger('toggleChildrenAnim', [
17498
17528
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
17499
17529
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -17516,7 +17546,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
17516
17546
  state('collapsed', style({ height: 0 })),
17517
17547
  ]),
17518
17548
  ], host: {
17519
- '[attr.role]': '"treeitem"',
17520
17549
  '[class.clr-tree-node]': 'true',
17521
17550
  }, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\"></label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\">\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable\">\n <span *ngIf=\"ariaSelected\"> selected </span>\n <span *ngIf=\"!ariaSelected\"> unselected </span>\n </div>\n </div>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
17522
17551
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
@@ -17604,7 +17633,7 @@ ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0
17604
17633
  *ngIf="featuresService.recursion"
17605
17634
  [children]="featuresService.recursion.root"
17606
17635
  ></clr-recursive-children>
17607
- `, isInline: true, components: [{ type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17636
+ `, isInline: true, components: [{ type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17608
17637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTree, decorators: [{
17609
17638
  type: Component,
17610
17639
  args: [{
@@ -18514,7 +18543,7 @@ class Popover {
18514
18543
  }
18515
18544
 
18516
18545
  /*
18517
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
18546
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18518
18547
  * This software is released under MIT license.
18519
18548
  * The full license information can be found in LICENSE in the root directory of this project.
18520
18549
  */
@@ -18529,6 +18558,13 @@ class AbstractPopover {
18529
18558
  * a separate directive on the host. So let's do dirty but performant for now.
18530
18559
  */
18531
18560
  this.closeOnOutsideClick = false;
18561
+ this.closeOnOutsideClickCallback = event => {
18562
+ // The anchor element containing the click event origin means, the click wasn't triggered outside.
18563
+ if (this.anchorElem.contains(event.target)) {
18564
+ return;
18565
+ }
18566
+ this.toggleService.open = false;
18567
+ };
18532
18568
  this.el = injector.get(ElementRef);
18533
18569
  this.toggleService = injector.get(ClrPopoverToggleService);
18534
18570
  this.renderer = injector.get(Renderer2);
@@ -18552,8 +18588,6 @@ class AbstractPopover {
18552
18588
  }
18553
18589
  anchor() {
18554
18590
  this.updateAnchor = true;
18555
- // Ugh
18556
- this.ignore = this.toggleService.originalEvent;
18557
18591
  }
18558
18592
  release() {
18559
18593
  this.detachOutsideClickListener();
@@ -18600,34 +18634,18 @@ class AbstractPopover {
18600
18634
  }
18601
18635
  }
18602
18636
  attachOutsideClickListener() {
18603
- if (this.closeOnOutsideClick) {
18604
- this.hostClickListener = this.renderer.listen(this.el.nativeElement, 'click', event => (this.ignore = event));
18605
- if (this.ignoredElement) {
18606
- this.ignoredElementClickListener = this.renderer.listen(this.ignoredElement, 'click', event => (this.ignore = event));
18637
+ if (this.closeOnOutsideClick && this.toggleService.open) {
18638
+ if (document && document.addEventListener) {
18639
+ // To listen outside click, the listener should catch the event during the capturing phase.
18640
+ // We have to do this ugly document check as Renderer2.listen doesn't allow passive/useCapture listen.
18641
+ document.addEventListener('click', this.closeOnOutsideClickCallback, true);
18607
18642
  }
18608
- this.documentClickListener = this.renderer.listen('document', 'click', event => {
18609
- if (event === this.ignore) {
18610
- delete this.ignore;
18611
- }
18612
- else {
18613
- this.toggleService.open = false;
18614
- }
18615
- });
18616
18643
  }
18617
18644
  }
18618
18645
  detachOutsideClickListener() {
18619
18646
  if (this.closeOnOutsideClick) {
18620
- if (this.hostClickListener) {
18621
- this.hostClickListener();
18622
- delete this.hostClickListener;
18623
- }
18624
- if (this.ignoredElementClickListener) {
18625
- this.ignoredElementClickListener();
18626
- delete this.ignoredElementClickListener;
18627
- }
18628
- if (this.documentClickListener) {
18629
- this.documentClickListener();
18630
- delete this.documentClickListener;
18647
+ if (document && document.removeEventListener) {
18648
+ document.removeEventListener('click', this.closeOnOutsideClickCallback, true);
18631
18649
  }
18632
18650
  }
18633
18651
  }
@@ -18892,7 +18910,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
18892
18910
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }]; } });
18893
18911
 
18894
18912
  /*
18895
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
18913
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18896
18914
  * This software is released under MIT license.
18897
18915
  * The full license information can be found in LICENSE in the root directory of this project.
18898
18916
  */
@@ -18944,16 +18962,33 @@ class MultiAlertService {
18944
18962
  });
18945
18963
  }
18946
18964
  next() {
18947
- this.current = this.current === this.activeAlerts.length - 1 ? 0 : this.current + 1;
18965
+ this._current = this.current === this.activeAlerts.length - 1 ? 0 : this.current + 1;
18966
+ this._change.next(this._current);
18948
18967
  }
18949
18968
  previous() {
18950
18969
  if (this.activeAlerts.length === 0) {
18951
18970
  return;
18952
18971
  }
18953
- this.current = this.current === 0 ? this.activeAlerts.length - 1 : this.current - 1;
18972
+ this._current = this.current === 0 ? this.activeAlerts.length - 1 : this.current - 1;
18973
+ this._change.next(this._current);
18954
18974
  }
18955
- close() {
18956
- this.previous();
18975
+ open() {
18976
+ if (this.activeAlerts.length === 0) {
18977
+ return;
18978
+ }
18979
+ if (!this.currentAlert) {
18980
+ this._current = 0;
18981
+ }
18982
+ this._change.next(this._current);
18983
+ }
18984
+ close(isCurrentAlert) {
18985
+ if (this.activeAlerts.length === 0) {
18986
+ return;
18987
+ }
18988
+ if (isCurrentAlert) {
18989
+ this._current = Math.max(0, this.current - 1);
18990
+ }
18991
+ this._change.next(this._current);
18957
18992
  }
18958
18993
  destroy() {
18959
18994
  if (this.subscription) {
@@ -18968,7 +19003,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
18968
19003
  }] });
18969
19004
 
18970
19005
  /*
18971
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19006
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18972
19007
  * This software is released under MIT license.
18973
19008
  * The full license information can be found in LICENSE in the root directory of this project.
18974
19009
  */
@@ -18997,6 +19032,14 @@ class ClrAlert {
18997
19032
  ngOnDestroy() {
18998
19033
  this.subscriptions.forEach(sub => sub.unsubscribe());
18999
19034
  }
19035
+ set closed(value) {
19036
+ if (value && !this._closed) {
19037
+ this.close();
19038
+ }
19039
+ else if (!value && this._closed) {
19040
+ this.open();
19041
+ }
19042
+ }
19000
19043
  set alertType(val) {
19001
19044
  this.iconService.alertType = val;
19002
19045
  }
@@ -19022,19 +19065,23 @@ class ClrAlert {
19022
19065
  if (!this.closable) {
19023
19066
  return;
19024
19067
  }
19068
+ const isCurrentAlert = this.multiAlertService?.currentAlert === this;
19025
19069
  this._closed = true;
19026
19070
  if (this.multiAlertService) {
19027
- this.multiAlertService.close();
19071
+ this.multiAlertService.close(isCurrentAlert);
19028
19072
  }
19029
19073
  this._closedChanged.emit(true);
19030
19074
  }
19031
19075
  open() {
19032
19076
  this._closed = false;
19077
+ if (this.multiAlertService) {
19078
+ this.multiAlertService.open();
19079
+ }
19033
19080
  this._closedChanged.emit(false);
19034
19081
  }
19035
19082
  }
19036
19083
  ClrAlert.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlert, deps: [{ token: AlertIconAndTypesService }, { token: i0.ChangeDetectorRef }, { token: MultiAlertService, optional: true }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
19037
- ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", _closed: ["clrAlertClosed", "_closed"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-hidden]=\"hidden\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n</div>\n", styles: [":host{display:block}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
19084
+ ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", closed: ["clrAlertClosed", "closed"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-hidden]=\"hidden\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n</div>\n", styles: [":host{display:block}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
19038
19085
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlert, decorators: [{
19039
19086
  type: Component,
19040
19087
  args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], styles: [':host { display: block; }'], template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-hidden]=\"hidden\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n</div>\n" }]
@@ -19051,7 +19098,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19051
19098
  args: ['clrAlertAppLevel']
19052
19099
  }], clrCloseButtonAriaLabel: [{
19053
19100
  type: Input
19054
- }], _closed: [{
19101
+ }], closed: [{
19055
19102
  type: Input,
19056
19103
  args: ['clrAlertClosed']
19057
19104
  }], _closedChanged: [{
@@ -19066,7 +19113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19066
19113
  }] } });
19067
19114
 
19068
19115
  /*
19069
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19116
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
19070
19117
  * This software is released under MIT license.
19071
19118
  * The full license information can be found in LICENSE in the root directory of this project.
19072
19119
  */
@@ -19080,8 +19127,9 @@ ClrAlertItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
19080
19127
  <div class="alert-icon-wrapper">
19081
19128
  <cds-icon
19082
19129
  class="alert-icon"
19130
+ role="img"
19083
19131
  [attr.shape]="iconService.alertIconShape"
19084
- [attr.title]="iconService.alertIconTitle"
19132
+ [attr.aria-label]="iconService.alertIconTitle"
19085
19133
  ></cds-icon>
19086
19134
  </div>
19087
19135
  <ng-content></ng-content>
@@ -19094,8 +19142,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19094
19142
  <div class="alert-icon-wrapper">
19095
19143
  <cds-icon
19096
19144
  class="alert-icon"
19145
+ role="img"
19097
19146
  [attr.shape]="iconService.alertIconShape"
19098
- [attr.title]="iconService.alertIconTitle"
19147
+ [attr.aria-label]="iconService.alertIconTitle"
19099
19148
  ></cds-icon>
19100
19149
  </div>
19101
19150
  <ng-content></ng-content>
@@ -19237,7 +19286,7 @@ class ClrAlerts {
19237
19286
  }
19238
19287
  }
19239
19288
  ClrAlerts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlerts, deps: [{ token: MultiAlertService }], target: i0.ɵɵFactoryTarget.Component });
19240
- ClrAlerts.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrAlerts, selector: "clr-alerts", inputs: { _inputCurrentIndex: ["clrCurrentAlertIndex", "_inputCurrentIndex"], currentAlert: ["clrCurrentAlert", "currentAlert"] }, outputs: { currentAlertIndexChange: "clrCurrentAlertIndexChange", currentAlertChange: "clrCurrentAlertChange" }, host: { properties: { "class.alerts": "true", "class.alert-danger": "this.currentAlertType == 'danger'", "class.alert-info": "this.currentAlertType == 'info'", "class.alert-success": "this.currentAlertType == 'success'", "class.alert-warning": "this.currentAlertType == 'warning'" } }, providers: [MultiAlertService], queries: [{ propertyName: "allAlerts", predicate: ClrAlert }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"> </clr-alerts-pager>\n<ng-content select=\"clr-alert\"></ng-content>\n", styles: [":host{display:block}\n"], components: [{ type: ClrAlertsPager, selector: "clr-alerts-pager", inputs: ["clrCurrentAlert", "clrCurrentAlertIndex"], outputs: ["clrCurrentAlertChange", "clrCurrentAlertIndexChange"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19289
+ ClrAlerts.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrAlerts, selector: "clr-alerts", inputs: { _inputCurrentIndex: ["clrCurrentAlertIndex", "_inputCurrentIndex"], currentAlert: ["clrCurrentAlert", "currentAlert"] }, outputs: { currentAlertIndexChange: "clrCurrentAlertIndexChange", currentAlertChange: "clrCurrentAlertChange" }, host: { properties: { "class.alerts": "true", "class.alert-danger": "this.currentAlertType == 'danger'", "class.alert-info": "this.currentAlertType == 'info'", "class.alert-success": "this.currentAlertType == 'success'", "class.alert-warning": "this.currentAlertType == 'warning'" } }, providers: [MultiAlertService], queries: [{ propertyName: "allAlerts", predicate: ClrAlert }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"> </clr-alerts-pager>\n<ng-content select=\"clr-alert\"></ng-content>\n", styles: [":host{display:block}\n"], components: [{ type: ClrAlertsPager, selector: "clr-alerts-pager", inputs: ["clrCurrentAlert", "clrCurrentAlertIndex"], outputs: ["clrCurrentAlertChange", "clrCurrentAlertIndexChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19241
19290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlerts, decorators: [{
19242
19291
  type: Component,
19243
19292
  args: [{ selector: 'clr-alerts', providers: [MultiAlertService], host: {
@@ -19532,7 +19581,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19532
19581
  }] }, { type: ResponsiveNavigationService }]; } });
19533
19582
 
19534
19583
  /*
19535
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19584
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
19536
19585
  * This software is released under MIT license.
19537
19586
  * The full license information can be found in LICENSE in the root directory of this project.
19538
19587
  */
@@ -19550,6 +19599,24 @@ class ClrHeader {
19550
19599
  },
19551
19600
  });
19552
19601
  }
19602
+ get responsiveNavCommonString() {
19603
+ const myCommonStrings = this.commonStrings.keys;
19604
+ if (this.openNavLevel !== this.responsiveNavCodes.NAV_LEVEL_1) {
19605
+ return myCommonStrings.responsiveNavToggleOpen;
19606
+ }
19607
+ else {
19608
+ return myCommonStrings.responsiveNavToggleClose;
19609
+ }
19610
+ }
19611
+ get responsiveOverflowCommonString() {
19612
+ const myCommonStrings = this.commonStrings.keys;
19613
+ if (this.openNavLevel !== this.responsiveNavCodes.NAV_LEVEL_2) {
19614
+ return myCommonStrings.responsiveNavOverflowOpen;
19615
+ }
19616
+ else {
19617
+ return myCommonStrings.responsiveNavOverflowClose;
19618
+ }
19619
+ }
19553
19620
  // reset triggers. handles cases when an application has different nav levels on different pages.
19554
19621
  resetNavTriggers() {
19555
19622
  this.isNavLevel1OnPage = false;
@@ -19590,9 +19657,7 @@ ClrHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
19590
19657
  type="button"
19591
19658
  *ngIf="isNavLevel1OnPage"
19592
19659
  class="header-hamburger-trigger"
19593
- [attr.aria-label]="
19594
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_1 ? commonStrings.keys.open : commonStrings.keys.close
19595
- "
19660
+ [attr.aria-label]="responsiveNavCommonString"
19596
19661
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_1)"
19597
19662
  >
19598
19663
  <span></span>
@@ -19602,15 +19667,13 @@ ClrHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
19602
19667
  type="button"
19603
19668
  *ngIf="isNavLevel2OnPage"
19604
19669
  class="header-overflow-trigger"
19605
- [attr.aria-label]="
19606
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_2 ? commonStrings.keys.open : commonStrings.keys.close
19607
- "
19670
+ [attr.aria-label]="responsiveOverflowCommonString"
19608
19671
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_2)"
19609
19672
  >
19610
19673
  <span></span>
19611
19674
  </button>
19612
19675
  <div class="header-backdrop" (click)="closeOpenNav()"></div>
19613
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19676
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19614
19677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrHeader, decorators: [{
19615
19678
  type: Component,
19616
19679
  args: [{
@@ -19620,9 +19683,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19620
19683
  type="button"
19621
19684
  *ngIf="isNavLevel1OnPage"
19622
19685
  class="header-hamburger-trigger"
19623
- [attr.aria-label]="
19624
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_1 ? commonStrings.keys.open : commonStrings.keys.close
19625
- "
19686
+ [attr.aria-label]="responsiveNavCommonString"
19626
19687
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_1)"
19627
19688
  >
19628
19689
  <span></span>
@@ -19632,9 +19693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19632
19693
  type="button"
19633
19694
  *ngIf="isNavLevel2OnPage"
19634
19695
  class="header-overflow-trigger"
19635
- [attr.aria-label]="
19636
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_2 ? commonStrings.keys.open : commonStrings.keys.close
19637
- "
19696
+ [attr.aria-label]="responsiveOverflowCommonString"
19638
19697
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_2)"
19639
19698
  >
19640
19699
  <span></span>
@@ -20371,7 +20430,7 @@ ClrTabs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0
20371
20430
  </ng-container>
20372
20431
  </ul>
20373
20432
  <ng-container #tabContentViewContainer></ng-container>
20374
- `, isInline: true, components: [{ type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }, { type: ClrTabOverflowContent, selector: "clr-tab-overflow-content" }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
20433
+ `, isInline: true, components: [{ type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }, { type: ClrTabOverflowContent, selector: "clr-tab-overflow-content" }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
20375
20434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTabs, decorators: [{
20376
20435
  type: Component,
20377
20436
  args: [{
@@ -20651,7 +20710,7 @@ class ClrVerticalNav {
20651
20710
  }
20652
20711
  }
20653
20712
  ClrVerticalNav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrVerticalNav, deps: [{ token: VerticalNavService }, { token: VerticalNavIconService }, { token: VerticalNavGroupRegistrationService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
20654
- ClrVerticalNav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrVerticalNav, selector: "clr-vertical-nav", inputs: { collapsible: ["clrVerticalNavCollapsible", "collapsible"], collapsed: ["clrVerticalNavCollapsed", "collapsed"] }, outputs: { _collapsedChanged: "clrVerticalNavCollapsedChange" }, host: { properties: { "class.is-collapsed": "collapsed", "class.has-nav-groups": "hasNavGroups", "class.has-icons": "hasIcons" }, classAttribute: "clr-vertical-nav" }, providers: [VerticalNavService, VerticalNavIconService, VerticalNavGroupRegistrationService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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<button\n type=\"button\"\n class=\"nav-trigger\"\n [class.on-collapse]=\"collapsed\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-label]=\"commonStrings.keys.verticalNavToggle\"\n (click)=\"toggleByButton()\"\n *ngIf=\"collapsible\"\n>\n <cds-icon\n shape=\"angle-double\"\n class=\"nav-trigger-icon\"\n [attr.direction]=\"(this.collapsed) ? 'right' : 'left'\"\n [attr.title]=\"(this.collapsed) ? commonStrings.keys.expand : commonStrings.keys.collapse\"\n ></cds-icon>\n</button>\n<!-- Click handler on .nav-content is bad but required :-( -->\n<div class=\"nav-content\">\n <ng-content></ng-content>\n <button\n (click)=\"collapsed = false\"\n class=\"nav-btn\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n [attr.aria-label]=\"commonStrings.keys.verticalNavToggle\"\n *ngIf=\"collapsible && collapsed\"\n ></button>\n</div>\n", directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
20713
+ ClrVerticalNav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrVerticalNav, selector: "clr-vertical-nav", inputs: { collapsible: ["clrVerticalNavCollapsible", "collapsible"], collapsed: ["clrVerticalNavCollapsed", "collapsed"] }, outputs: { _collapsedChanged: "clrVerticalNavCollapsedChange" }, host: { properties: { "class.is-collapsed": "collapsed", "class.has-nav-groups": "hasNavGroups", "class.has-icons": "hasIcons" }, classAttribute: "clr-vertical-nav" }, providers: [VerticalNavService, VerticalNavIconService, VerticalNavGroupRegistrationService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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<button\n type=\"button\"\n class=\"nav-trigger\"\n [class.on-collapse]=\"collapsed\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-label]=\"commonStrings.keys.verticalNavToggle\"\n (click)=\"toggleByButton()\"\n *ngIf=\"collapsible\"\n>\n <cds-icon\n shape=\"angle-double\"\n class=\"nav-trigger-icon\"\n [attr.direction]=\"(this.collapsed) ? 'right' : 'left'\"\n [attr.title]=\"(this.collapsed) ? commonStrings.keys.expand : commonStrings.keys.collapse\"\n ></cds-icon>\n</button>\n<!-- Click handler on .nav-content is bad but required :-( -->\n<div class=\"nav-content\">\n <ng-content></ng-content>\n <button\n (click)=\"collapsed = false\"\n class=\"nav-btn\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n [attr.aria-label]=\"commonStrings.keys.verticalNavToggle\"\n *ngIf=\"collapsible && collapsed\"\n ></button>\n</div>\n", directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
20655
20714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrVerticalNav, decorators: [{
20656
20715
  type: Component,
20657
20716
  args: [{ selector: 'clr-vertical-nav', providers: [VerticalNavService, VerticalNavIconService, VerticalNavGroupRegistrationService], host: {
@@ -20694,7 +20753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
20694
20753
  }] });
20695
20754
 
20696
20755
  /*
20697
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
20756
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
20698
20757
  * This software is released under MIT license.
20699
20758
  * The full license information can be found in LICENSE in the root directory of this project.
20700
20759
  */
@@ -20708,6 +20767,7 @@ class ClrVerticalNavGroup {
20708
20767
  this._navService = _navService;
20709
20768
  this.commonStrings = commonStrings;
20710
20769
  this.wasExpanded = false;
20770
+ this.groupLabel = this.commonStrings.keys.verticalNavGroupToggle;
20711
20771
  this.expandedChange = new EventEmitter(true);
20712
20772
  this._subscriptions = [];
20713
20773
  this._expandAnimationState = COLLAPSED_STATE;
@@ -20817,7 +20877,7 @@ class ClrVerticalNavGroup {
20817
20877
  }
20818
20878
  }
20819
20879
  ClrVerticalNavGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrVerticalNavGroup, deps: [{ token: IfExpandService }, { token: VerticalNavGroupRegistrationService }, { token: VerticalNavGroupService }, { token: VerticalNavService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
20820
- ClrVerticalNavGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrVerticalNavGroup, selector: "clr-vertical-nav-group", inputs: { userExpandedInput: ["clrVerticalNavGroupExpanded", "userExpandedInput"] }, outputs: { expandedChange: "clrVerticalNavGroupExpandedChange" }, host: { properties: { "class.is-expanded": "this.expanded" }, classAttribute: "nav-group" }, providers: [IfExpandService, VerticalNavGroupService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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 class=\"nav-group-content\">\n <ng-content select=\"[clrVerticalNavLink]\"></ng-content>\n <button\n class=\"nav-group-trigger\"\n type=\"button\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-label]=\"commonStrings.keys.verticalNavGroupToggle\"\n (click)=\"toggleExpand()\"\n >\n <ng-content select=\"[clrVerticalNavIcon]\"></ng-content>\n <div class=\"nav-group-text\">\n <ng-content></ng-content>\n </div>\n <cds-icon\n shape=\"angle\"\n class=\"nav-group-trigger-icon\"\n [attr.direction]=\"(this.expanded) ? 'down' : 'right'\"\n [attr.title]=\"(this.expanded) ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n >\n </cds-icon>\n </button>\n</div>\n<!--TODO: This animation needs to be added to the clr-vertical-nav-group-children component-->\n<div class=\"nav-group-children\" [@clrExpand]=\"expandAnimationState\" (@clrExpand.done)=\"expandAnimationDone($event)\">\n <ng-content select=\"[clrIfExpanded], clr-vertical-nav-group-children\"></ng-content>\n</div>\n", directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }], animations: [
20880
+ ClrVerticalNavGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrVerticalNavGroup, selector: "clr-vertical-nav-group", inputs: { groupLabel: ["clrVerticalNavGroupLabel", "groupLabel"], userExpandedInput: ["clrVerticalNavGroupExpanded", "userExpandedInput"] }, outputs: { expandedChange: "clrVerticalNavGroupExpandedChange" }, host: { properties: { "class.is-expanded": "this.expanded" }, classAttribute: "nav-group" }, providers: [IfExpandService, VerticalNavGroupService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.\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 class=\"nav-group-content\">\n <ng-content select=\"[clrVerticalNavLink]\"></ng-content>\n <button\n class=\"nav-group-trigger\"\n type=\"button\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-label]=\"groupLabel\"\n (click)=\"toggleExpand()\"\n >\n <ng-content select=\"[clrVerticalNavIcon]\"></ng-content>\n <div class=\"nav-group-text\">\n <ng-content></ng-content>\n </div>\n <cds-icon\n shape=\"angle\"\n class=\"nav-group-trigger-icon\"\n [attr.direction]=\"(this.expanded) ? 'down' : 'right'\"\n [attr.title]=\"(this.expanded) ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n >\n </cds-icon>\n </button>\n</div>\n<!--TODO: This animation needs to be added to the clr-vertical-nav-group-children component-->\n<div class=\"nav-group-children\" [@clrExpand]=\"expandAnimationState\" (@clrExpand.done)=\"expandAnimationDone($event)\">\n <ng-content select=\"[clrIfExpanded], clr-vertical-nav-group-children\"></ng-content>\n</div>\n", directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }], animations: [
20821
20881
  trigger('clrExpand', [
20822
20882
  state(EXPANDED_STATE, style({ height: '*' })),
20823
20883
  state(COLLAPSED_STATE, style({ height: 0, 'overflow-y': 'hidden', visibility: 'hidden' })),
@@ -20832,10 +20892,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
20832
20892
  state(COLLAPSED_STATE, style({ height: 0, 'overflow-y': 'hidden', visibility: 'hidden' })),
20833
20893
  transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, animate('0.2s ease-in-out')),
20834
20894
  ]),
20835
- ], host: { class: 'nav-group' }, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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 class=\"nav-group-content\">\n <ng-content select=\"[clrVerticalNavLink]\"></ng-content>\n <button\n class=\"nav-group-trigger\"\n type=\"button\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-label]=\"commonStrings.keys.verticalNavGroupToggle\"\n (click)=\"toggleExpand()\"\n >\n <ng-content select=\"[clrVerticalNavIcon]\"></ng-content>\n <div class=\"nav-group-text\">\n <ng-content></ng-content>\n </div>\n <cds-icon\n shape=\"angle\"\n class=\"nav-group-trigger-icon\"\n [attr.direction]=\"(this.expanded) ? 'down' : 'right'\"\n [attr.title]=\"(this.expanded) ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n >\n </cds-icon>\n </button>\n</div>\n<!--TODO: This animation needs to be added to the clr-vertical-nav-group-children component-->\n<div class=\"nav-group-children\" [@clrExpand]=\"expandAnimationState\" (@clrExpand.done)=\"expandAnimationDone($event)\">\n <ng-content select=\"[clrIfExpanded], clr-vertical-nav-group-children\"></ng-content>\n</div>\n" }]
20895
+ ], host: { class: 'nav-group' }, template: "<!--\n ~ Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.\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 class=\"nav-group-content\">\n <ng-content select=\"[clrVerticalNavLink]\"></ng-content>\n <button\n class=\"nav-group-trigger\"\n type=\"button\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-label]=\"groupLabel\"\n (click)=\"toggleExpand()\"\n >\n <ng-content select=\"[clrVerticalNavIcon]\"></ng-content>\n <div class=\"nav-group-text\">\n <ng-content></ng-content>\n </div>\n <cds-icon\n shape=\"angle\"\n class=\"nav-group-trigger-icon\"\n [attr.direction]=\"(this.expanded) ? 'down' : 'right'\"\n [attr.title]=\"(this.expanded) ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n >\n </cds-icon>\n </button>\n</div>\n<!--TODO: This animation needs to be added to the clr-vertical-nav-group-children component-->\n<div class=\"nav-group-children\" [@clrExpand]=\"expandAnimationState\" (@clrExpand.done)=\"expandAnimationDone($event)\">\n <ng-content select=\"[clrIfExpanded], clr-vertical-nav-group-children\"></ng-content>\n</div>\n" }]
20836
20896
  }], ctorParameters: function () { return [{ type: IfExpandService }, { type: VerticalNavGroupRegistrationService }, { type: VerticalNavGroupService }, { type: VerticalNavService }, { type: ClrCommonStringsService }]; }, propDecorators: { expanded: [{
20837
20897
  type: HostBinding,
20838
20898
  args: ['class.is-expanded']
20899
+ }], groupLabel: [{
20900
+ type: Input,
20901
+ args: ['clrVerticalNavGroupLabel']
20839
20902
  }], userExpandedInput: [{
20840
20903
  type: Input,
20841
20904
  args: ['clrVerticalNavGroupExpanded']
@@ -21063,7 +21126,7 @@ class ClrModal {
21063
21126
  }
21064
21127
  }
21065
21128
  ClrModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrModal, deps: [{ token: ScrollingService }, { token: ClrCommonStringsService }, { token: UNIQUE_ID }], target: i0.ɵɵFactoryTarget.Component });
21066
- ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"], stopClose: ["clrModalPreventClose", "stopClose"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { listeners: { "body:keyup.escape": "close()" }, properties: { "class.open": "this._open" } }, providers: [UNIQUE_ID_PROVIDER], viewQueries: [{ propertyName: "focusTrap", first: true, predicate: FocusTrapDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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 clrFocusTrap class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.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]=\"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}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"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 <ng-content select=\".modal-body\"></ng-content>\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] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { type: ClrFocusOnViewInit, selector: "[clrFocusOnViewInit]", inputs: ["clrFocusOnViewInit"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], viewProviders: [ScrollingService], animations: [
21129
+ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"], stopClose: ["clrModalPreventClose", "stopClose"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { listeners: { "body:keyup.escape": "close()" }, properties: { "class.open": "this._open" } }, providers: [UNIQUE_ID_PROVIDER], viewQueries: [{ propertyName: "focusTrap", first: true, predicate: FocusTrapDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.\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 clrFocusTrap class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.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]=\"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}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"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] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { type: ClrFocusOnViewInit, selector: "[clrFocusOnViewInit]", inputs: ["clrFocusOnViewInit"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], viewProviders: [ScrollingService], animations: [
21067
21130
  trigger('fadeDown', [
21068
21131
  transition('* => false', [style({ opacity: 0, transform: 'translate(0, -25%)' }), animate('0.2s ease-in-out')]),
21069
21132
  transition('false => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' }))]),
@@ -21093,7 +21156,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
21093
21156
  transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
21094
21157
  transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
21095
21158
  ]),
21096
- ], providers: [UNIQUE_ID_PROVIDER], template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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 clrFocusTrap class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.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]=\"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}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"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 <ng-content select=\".modal-body\"></ng-content>\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] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n" }]
21159
+ ], providers: [UNIQUE_ID_PROVIDER], template: "<!--\n ~ Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.\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 clrFocusTrap class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.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]=\"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}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"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] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n" }]
21097
21160
  }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
21098
21161
  type: Inject,
21099
21162
  args: [UNIQUE_ID]
@@ -21136,7 +21199,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
21136
21199
  }] } });
21137
21200
 
21138
21201
  /*
21139
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
21202
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21140
21203
  * This software is released under MIT license.
21141
21204
  * The full license information can be found in LICENSE in the root directory of this project.
21142
21205
  */
@@ -21147,18 +21210,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
21147
21210
  * the overflow scroll being focused.
21148
21211
  */
21149
21212
  class ClrModalBody {
21150
- constructor(ngZone, renderer, host) {
21213
+ constructor(renderer, host, ngZone) {
21214
+ this.renderer = renderer;
21215
+ this.host = host;
21151
21216
  this.tabindex = '0';
21152
21217
  this.unlisteners = [];
21153
- renderer.setAttribute(host.nativeElement, 'tabindex', this.tabindex);
21154
21218
  ngZone.runOutsideAngular(() => {
21155
- this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
21219
+ new ResizeObserver(() => this.addOrRemoveTabIndex()).observe(this.host.nativeElement);
21220
+ this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
21156
21221
  // set the tabindex binding back when click is completed with mouseup
21157
- renderer.setAttribute(host.nativeElement, 'tabindex', this.tabindex);
21158
- }), renderer.listen(host.nativeElement, 'mousedown', () => {
21222
+ this.addOrRemoveTabIndex();
21223
+ }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
21159
21224
  // tabindex = 0 binding should be removed
21160
21225
  // so it won't be focused when click starts with mousedown
21161
- renderer.removeAttribute(host.nativeElement, 'tabindex');
21226
+ this.removeTabIndex();
21162
21227
  }));
21163
21228
  });
21164
21229
  }
@@ -21167,13 +21232,28 @@ class ClrModalBody {
21167
21232
  this.unlisteners.pop()();
21168
21233
  }
21169
21234
  }
21235
+ addTabIndex() {
21236
+ this.renderer.setAttribute(this.host.nativeElement, 'tabindex', this.tabindex);
21237
+ }
21238
+ removeTabIndex() {
21239
+ this.renderer.removeAttribute(this.host.nativeElement, 'tabindex');
21240
+ }
21241
+ addOrRemoveTabIndex() {
21242
+ const modalBody = this.host.nativeElement.parentElement;
21243
+ if (modalBody.clientHeight < modalBody.scrollHeight) {
21244
+ this.addTabIndex();
21245
+ }
21246
+ else {
21247
+ this.removeTabIndex();
21248
+ }
21249
+ }
21170
21250
  }
21171
- ClrModalBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrModalBody, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
21251
+ ClrModalBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrModalBody, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
21172
21252
  ClrModalBody.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ClrModalBody, selector: ".modal-body", ngImport: i0 });
21173
21253
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrModalBody, decorators: [{
21174
21254
  type: Directive,
21175
21255
  args: [{ selector: '.modal-body' }]
21176
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; } });
21256
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; } });
21177
21257
 
21178
21258
  /*
21179
21259
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -22094,7 +22174,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
22094
22174
  }] });
22095
22175
 
22096
22176
  /*
22097
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
22177
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22098
22178
  * This software is released under MIT license.
22099
22179
  * The full license information can be found in LICENSE in the root directory of this project.
22100
22180
  */
@@ -22839,7 +22919,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
22839
22919
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
22840
22920
 
22841
22921
  /*
22842
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
22922
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22843
22923
  * This software is released under MIT license.
22844
22924
  * The full license information can be found in LICENSE in the root directory of this project.
22845
22925
  */
@@ -23515,129 +23595,473 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
23515
23595
  * This software is released under MIT license.
23516
23596
  * The full license information can be found in LICENSE in the root directory of this project.
23517
23597
  */
23518
- class ClrWizardStepnavItem {
23519
- constructor(navService, pageCollection) {
23520
- this.navService = navService;
23521
- this.pageCollection = pageCollection;
23598
+ const defaultAnimationTiming = '0.2s ease-in-out';
23599
+
23600
+ /*
23601
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23602
+ * This software is released under MIT license.
23603
+ * The full license information can be found in LICENSE in the root directory of this project.
23604
+ */
23605
+ function collapse() {
23606
+ 'use strict';
23607
+ return [
23608
+ state('true', style({ height: 0, 'overflow-y': 'hidden' })),
23609
+ transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),
23610
+ transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),
23611
+ ];
23612
+ }
23613
+
23614
+ /*
23615
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23616
+ * This software is released under MIT license.
23617
+ * The full license information can be found in LICENSE in the root directory of this project.
23618
+ */
23619
+
23620
+ /*
23621
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23622
+ * This software is released under MIT license.
23623
+ * The full license information can be found in LICENSE in the root directory of this project.
23624
+ */
23625
+ function fade(opacity = 1) {
23626
+ return [
23627
+ transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),
23628
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),
23629
+ ];
23630
+ }
23631
+
23632
+ /*
23633
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23634
+ * This software is released under MIT license.
23635
+ * The full license information can be found in LICENSE in the root directory of this project.
23636
+ */
23637
+
23638
+ /*
23639
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23640
+ * This software is released under MIT license.
23641
+ * The full license information can be found in LICENSE in the root directory of this project.
23642
+ */
23643
+ function fadeSlide(direction) {
23644
+ let transform = null;
23645
+ if (direction === 'up') {
23646
+ transform = 'translate(0, 25%)';
23522
23647
  }
23523
- pageGuard() {
23524
- if (!this.page) {
23525
- throw new Error('Wizard stepnav item is not associated with a wizard page.');
23526
- }
23648
+ else if (direction === 'down') {
23649
+ transform = 'translate(0, -25%)';
23527
23650
  }
23528
- get id() {
23529
- this.pageGuard();
23530
- return this.pageCollection.getStepItemIdForPage(this.page);
23651
+ else if (direction === 'left') {
23652
+ transform = 'translate(25%, 0)';
23531
23653
  }
23532
- get stepAriaCurrent() {
23533
- return this.isCurrent && 'step';
23654
+ else if (direction === 'right') {
23655
+ transform = 'translate(-25%, 0)';
23534
23656
  }
23535
- get isDisabled() {
23536
- this.pageGuard();
23537
- return this.page.disabled || this.navService.wizardStopNavigation || this.navService.wizardDisableStepnav;
23657
+ else {
23658
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
23538
23659
  }
23539
- get isCurrent() {
23540
- this.pageGuard();
23541
- return this.page.current;
23660
+ return [
23661
+ transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
23662
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
23663
+ ];
23664
+ }
23665
+
23666
+ /*
23667
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23668
+ * This software is released under MIT license.
23669
+ * The full license information can be found in LICENSE in the root directory of this project.
23670
+ */
23671
+
23672
+ /*
23673
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23674
+ * This software is released under MIT license.
23675
+ * The full license information can be found in LICENSE in the root directory of this project.
23676
+ */
23677
+ function slide(direction) {
23678
+ let transform = null;
23679
+ if (direction === 'up') {
23680
+ transform = 'translate(0, 25%)';
23542
23681
  }
23543
- get isComplete() {
23544
- this.pageGuard();
23545
- return this.page.completed;
23682
+ else if (direction === 'down') {
23683
+ transform = 'translate(0, -25%)';
23546
23684
  }
23547
- get hasError() {
23548
- this.pageGuard();
23549
- return this.page.hasError && this.isComplete;
23685
+ else if (direction === 'left') {
23686
+ transform = 'translate(25%, 0)';
23550
23687
  }
23551
- get canNavigate() {
23552
- this.pageGuard();
23553
- return this.pageCollection.previousPageIsCompleted(this.page);
23688
+ else if (direction === 'right') {
23689
+ transform = 'translate(-25%, 0)';
23554
23690
  }
23555
- click() {
23556
- this.pageGuard();
23557
- // if we click on our own stepnav or a disabled stepnav, we don't want to do anything
23558
- if (this.isDisabled || this.isCurrent) {
23559
- return;
23560
- }
23561
- this.navService.goTo(this.page);
23691
+ else {
23692
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
23562
23693
  }
23694
+ return [
23695
+ transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
23696
+ transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
23697
+ ];
23563
23698
  }
23564
- ClrWizardStepnavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnavItem, deps: [{ token: WizardNavigationService }, { token: PageCollectionService }], target: i0.ɵɵFactoryTarget.Component });
23565
- ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: { page: "page" }, host: { properties: { "id": "id", "attr.aria-current": "stepAriaCurrent", "attr.aria-controls": "id", "class.clr-nav-link": "true", "class.nav-item": "true", "class.active": "isCurrent", "class.disabled": "isDisabled", "class.no-click": "!canNavigate", "class.complete": "isComplete", "class.error": "hasError" } }, ngImport: i0, template: `
23566
- <button
23567
- type="button"
23568
- class="btn btn-link clr-wizard-stepnav-link"
23569
- (click)="click()"
23570
- [attr.disabled]="isDisabled ? '' : null"
23571
- >
23572
- <span class="clr-wizard-stepnav-link-suffix">
23573
- <cds-icon
23574
- shape="error-standard"
23575
- status="danger"
23576
- class="clr-wizard-stepnav-item-error-icon"
23577
- *ngIf="hasError"
23578
- ></cds-icon>
23579
- <ng-content *ngIf="!hasError"></ng-content>
23580
- </span>
23581
- <span class="clr-wizard-stepnav-link-title">
23582
- <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
23583
- </span>
23584
- </button>
23585
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
23586
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
23587
- type: Component,
23588
- args: [{
23589
- selector: '[clr-wizard-stepnav-item]',
23590
- template: `
23591
- <button
23592
- type="button"
23593
- class="btn btn-link clr-wizard-stepnav-link"
23594
- (click)="click()"
23595
- [attr.disabled]="isDisabled ? '' : null"
23596
- >
23597
- <span class="clr-wizard-stepnav-link-suffix">
23598
- <cds-icon
23599
- shape="error-standard"
23600
- status="danger"
23601
- class="clr-wizard-stepnav-item-error-icon"
23602
- *ngIf="hasError"
23603
- ></cds-icon>
23604
- <ng-content *ngIf="!hasError"></ng-content>
23605
- </span>
23606
- <span class="clr-wizard-stepnav-link-title">
23607
- <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
23608
- </span>
23609
- </button>
23610
- `,
23611
- host: {
23612
- '[id]': 'id',
23613
- '[attr.aria-current]': 'stepAriaCurrent',
23614
- '[attr.aria-controls]': 'id',
23615
- '[class.clr-nav-link]': 'true',
23616
- '[class.nav-item]': 'true',
23617
- '[class.active]': 'isCurrent',
23618
- '[class.disabled]': 'isDisabled',
23619
- '[class.no-click]': '!canNavigate',
23620
- '[class.complete]': 'isComplete',
23621
- '[class.error]': 'hasError',
23622
- },
23623
- }]
23624
- }], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }]; }, propDecorators: { page: [{
23625
- type: Input,
23626
- args: ['page']
23627
- }] } });
23628
23699
 
23629
23700
  /*
23630
23701
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23631
23702
  * This software is released under MIT license.
23632
23703
  * The full license information can be found in LICENSE in the root directory of this project.
23633
23704
  */
23634
- class ClrWizardStepnav {
23635
- constructor(pageService) {
23636
- this.pageService = pageService;
23637
- }
23638
- }
23639
- ClrWizardStepnav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnav, deps: [{ token: PageCollectionService }], target: i0.ɵɵFactoryTarget.Component });
23640
- ClrWizardStepnav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrWizardStepnav, selector: "clr-wizard-stepnav", host: { classAttribute: "clr-wizard-stepnav" }, ngImport: i0, template: `
23705
+
23706
+ /*
23707
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23708
+ * This software is released under MIT license.
23709
+ * The full license information can be found in LICENSE in the root directory of this project.
23710
+ */
23711
+
23712
+ /*
23713
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23714
+ * This software is released under MIT license.
23715
+ * The full license information can be found in LICENSE in the root directory of this project.
23716
+ */
23717
+
23718
+ /*
23719
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23720
+ * This software is released under MIT license.
23721
+ * The full license information can be found in LICENSE in the root directory of this project.
23722
+ */
23723
+
23724
+ /*
23725
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23726
+ * This software is released under MIT license.
23727
+ * The full license information can be found in LICENSE in the root directory of this project.
23728
+ */
23729
+
23730
+ /*
23731
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23732
+ * This software is released under MIT license.
23733
+ * The full license information can be found in LICENSE in the root directory of this project.
23734
+ */
23735
+ var ClrAriaLivePoliteness;
23736
+ (function (ClrAriaLivePoliteness) {
23737
+ ClrAriaLivePoliteness["off"] = "off";
23738
+ ClrAriaLivePoliteness["polite"] = "polite";
23739
+ ClrAriaLivePoliteness["assertive"] = "assertive";
23740
+ })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
23741
+ /**
23742
+ * Time in milliseconds before inserting the content into the container
23743
+ */
23744
+ const ARIA_LIVE_TICK = 100;
23745
+ /**
23746
+ * @deprecated
23747
+ *
23748
+ * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
23749
+ * Please consider using the LiveAnnouncer in the Angular Material CDK
23750
+ * if your project needs this functionality.
23751
+ * More info: https://material.angular.io/cdk/a11y/overview#example-1
23752
+ *
23753
+ * This service handle `aria-live` accessibility attribute. The issue is that you need
23754
+ * to have the DOM Element with attribute `aria-live` before you could insert content
23755
+ * and SR (Screen Reader) pick the change and announce it.
23756
+ *
23757
+ * ```typescript
23758
+ * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
23759
+ *
23760
+ * @Component({
23761
+ * selector: 'clr-demo-component',
23762
+ * providers: [ClrAriaLiveService],
23763
+ * template: `
23764
+ * <ng-content></ng-content>
23765
+ * `,
23766
+ * })
23767
+ * export class DemoComponent {
23768
+ * constructor(ariaLiveService: ClrAriaLiveService) {}
23769
+ *
23770
+ * public actionThatWillTriggerChange() {
23771
+ * this.ariaLiveService.announce('message that I want to announce to SR');
23772
+ * }
23773
+ * }
23774
+ * ```
23775
+ *
23776
+ */
23777
+ class ClrAriaLiveService {
23778
+ constructor(ngZone, _document, platformId) {
23779
+ this.ngZone = ngZone;
23780
+ this.platformId = platformId;
23781
+ this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
23782
+ this.document = _document;
23783
+ }
23784
+ /**
23785
+ * get access to the internal HTML `id` that gonna be used for the AriaLive container.
23786
+ * @return ID of the DOM Element as string.
23787
+ */
23788
+ get id() {
23789
+ return this._id;
23790
+ }
23791
+ /**
23792
+ * Append text content inside the AriaLive Container. This method will check if the
23793
+ * DOM Element is existing if not it will create one for us and the will apply the text.
23794
+ *
23795
+ * ```typescript
23796
+ * this.ariaLiveService.announce(this.el.nativeElement);
23797
+ * // or
23798
+ * this.ariaLiveService.announce('Message to announce to SR');
23799
+ * ```
23800
+ *
23801
+ * @remark
23802
+ * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
23803
+ * The reason for that is that we don't want to do additional work if the SR will ignore it.
23804
+ *
23805
+ * @param message - This could be simple string or HTMLElement
23806
+ * @param politeness - 'polite', 'assertive' or 'off'
23807
+ */
23808
+ announce(message, politeness = ClrAriaLivePoliteness.polite) {
23809
+ if (politeness === ClrAriaLivePoliteness.off) {
23810
+ return;
23811
+ }
23812
+ if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
23813
+ this.ariaLiveElement = this.createContainer();
23814
+ }
23815
+ message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
23816
+ // when there is no message do NOTHING!
23817
+ if (!message) {
23818
+ return;
23819
+ }
23820
+ this.ariaLiveElement.setAttribute('aria-live', politeness);
23821
+ // This 100ms timeout is necessary for some browser + screen-reader combinations:
23822
+ // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
23823
+ // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
23824
+ // second time without clearing and then using a non-zero delay.
23825
+ // (using JAWS 17 at time of this writing).
23826
+ this.ngZone.runOutsideAngular(() => {
23827
+ // This clearTimeout will stop all older messages from announcing
23828
+ // in the case where the messages are comming too fast we gonna try to append only
23829
+ // the last one. That's what the SR will try to do anyway.
23830
+ clearTimeout(this.previousTimeout);
23831
+ this.previousTimeout = setTimeout(() => {
23832
+ this.ariaLiveElement.textContent = message;
23833
+ }, ARIA_LIVE_TICK);
23834
+ });
23835
+ }
23836
+ /**
23837
+ * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
23838
+ * container from the document.
23839
+ */
23840
+ ngOnDestroy() {
23841
+ clearTimeout(this.previousTimeout);
23842
+ if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
23843
+ this.document.body.removeChild(this.ariaLiveElement);
23844
+ this.ariaLiveElement = null;
23845
+ }
23846
+ }
23847
+ /**
23848
+ * Create AriaLive DOM element as a last child of the document.
23849
+ * After the element is created, we gonna apply Clarity class to hide it from
23850
+ * the screen and set the `aria-live` politness.
23851
+ *
23852
+ * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
23853
+ *
23854
+ * @remark
23855
+ * Calling this method multiple times will create multiple DOM Elements, that
23856
+ * won't be tracked and will be GC after the service is destroyed.
23857
+ *
23858
+ * @return AriaLive container as HTMLElement
23859
+ *
23860
+ */
23861
+ createContainer() {
23862
+ const ariaLiveElement = this.document.createElement('div');
23863
+ ariaLiveElement.setAttribute('id', this.id);
23864
+ // Use clarity screen reader class to hide the dom element
23865
+ // and fix the scrollbar shake
23866
+ ariaLiveElement.classList.add('clr-sr-only');
23867
+ ariaLiveElement.setAttribute('aria-atomic', 'true');
23868
+ ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
23869
+ this.document.body.appendChild(ariaLiveElement);
23870
+ return ariaLiveElement;
23871
+ }
23872
+ }
23873
+ ClrAriaLiveService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, deps: [{ token: i0.NgZone }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
23874
+ ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
23875
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, decorators: [{
23876
+ type: Injectable,
23877
+ args: [{
23878
+ providedIn: 'root',
23879
+ }]
23880
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{
23881
+ type: Inject,
23882
+ args: [DOCUMENT]
23883
+ }] }, { type: undefined, decorators: [{
23884
+ type: Inject,
23885
+ args: [PLATFORM_ID]
23886
+ }] }]; } });
23887
+
23888
+ /*
23889
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23890
+ * This software is released under MIT license.
23891
+ * The full license information can be found in LICENSE in the root directory of this project.
23892
+ */
23893
+
23894
+ /*
23895
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23896
+ * This software is released under MIT license.
23897
+ * The full license information can be found in LICENSE in the root directory of this project.
23898
+ */
23899
+
23900
+ /*
23901
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23902
+ * This software is released under MIT license.
23903
+ * The full license information can be found in LICENSE in the root directory of this project.
23904
+ *
23905
+ */
23906
+
23907
+ /*
23908
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23909
+ * This software is released under MIT license.
23910
+ * The full license information can be found in LICENSE in the root directory of this project.
23911
+ *
23912
+ */
23913
+
23914
+ /*
23915
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23916
+ * This software is released under MIT license.
23917
+ * The full license information can be found in LICENSE in the root directory of this project.
23918
+ */
23919
+
23920
+ /*
23921
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23922
+ * This software is released under MIT license.
23923
+ * The full license information can be found in LICENSE in the root directory of this project.
23924
+ */
23925
+
23926
+ /*
23927
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23928
+ * This software is released under MIT license.
23929
+ * The full license information can be found in LICENSE in the root directory of this project.
23930
+ */
23931
+
23932
+ /*
23933
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23934
+ * This software is released under MIT license.
23935
+ * The full license information can be found in LICENSE in the root directory of this project.
23936
+ */
23937
+ class ClrWizardStepnavItem {
23938
+ constructor(navService, pageCollection, commonStrings) {
23939
+ this.navService = navService;
23940
+ this.pageCollection = pageCollection;
23941
+ this.commonStrings = commonStrings;
23942
+ }
23943
+ pageGuard() {
23944
+ if (!this.page) {
23945
+ throw new Error('Wizard stepnav item is not associated with a wizard page.');
23946
+ }
23947
+ }
23948
+ get id() {
23949
+ this.pageGuard();
23950
+ return this.pageCollection.getStepItemIdForPage(this.page);
23951
+ }
23952
+ get stepAriaCurrent() {
23953
+ return this.isCurrent && 'step';
23954
+ }
23955
+ get isDisabled() {
23956
+ this.pageGuard();
23957
+ return this.page.disabled || this.navService.wizardStopNavigation || this.navService.wizardDisableStepnav;
23958
+ }
23959
+ get isCurrent() {
23960
+ this.pageGuard();
23961
+ return this.page.current;
23962
+ }
23963
+ get isComplete() {
23964
+ this.pageGuard();
23965
+ return this.page.completed;
23966
+ }
23967
+ get hasError() {
23968
+ this.pageGuard();
23969
+ return this.page.hasError && this.isComplete;
23970
+ }
23971
+ get canNavigate() {
23972
+ this.pageGuard();
23973
+ return this.pageCollection.previousPageIsCompleted(this.page);
23974
+ }
23975
+ click() {
23976
+ this.pageGuard();
23977
+ // if we click on our own stepnav or a disabled stepnav, we don't want to do anything
23978
+ if (this.isDisabled || this.isCurrent) {
23979
+ return;
23980
+ }
23981
+ this.navService.goTo(this.page);
23982
+ }
23983
+ }
23984
+ ClrWizardStepnavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnavItem, deps: [{ token: WizardNavigationService }, { token: PageCollectionService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
23985
+ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: { page: "page" }, host: { properties: { "id": "id", "attr.aria-current": "stepAriaCurrent", "attr.aria-controls": "id", "class.clr-nav-link": "true", "class.nav-item": "true", "class.active": "isCurrent", "class.disabled": "isDisabled", "class.no-click": "!canNavigate", "class.complete": "isComplete", "class.error": "hasError" } }, ngImport: i0, template: `
23986
+ <button
23987
+ type="button"
23988
+ class="btn btn-link clr-wizard-stepnav-link"
23989
+ (click)="click()"
23990
+ [attr.disabled]="isDisabled ? '' : null"
23991
+ >
23992
+ <span class="clr-wizard-stepnav-link-suffix">
23993
+ <cds-icon
23994
+ shape="error-standard"
23995
+ status="danger"
23996
+ class="clr-wizard-stepnav-item-error-icon"
23997
+ *ngIf="hasError"
23998
+ ></cds-icon>
23999
+ <ng-content *ngIf="!hasError"></ng-content>
24000
+ </span>
24001
+ <span class="clr-wizard-stepnav-link-title">
24002
+ <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
24003
+ </span>
24004
+ <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
24005
+ <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
24006
+ </button>
24007
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
24008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
24009
+ type: Component,
24010
+ args: [{
24011
+ selector: '[clr-wizard-stepnav-item]',
24012
+ template: `
24013
+ <button
24014
+ type="button"
24015
+ class="btn btn-link clr-wizard-stepnav-link"
24016
+ (click)="click()"
24017
+ [attr.disabled]="isDisabled ? '' : null"
24018
+ >
24019
+ <span class="clr-wizard-stepnav-link-suffix">
24020
+ <cds-icon
24021
+ shape="error-standard"
24022
+ status="danger"
24023
+ class="clr-wizard-stepnav-item-error-icon"
24024
+ *ngIf="hasError"
24025
+ ></cds-icon>
24026
+ <ng-content *ngIf="!hasError"></ng-content>
24027
+ </span>
24028
+ <span class="clr-wizard-stepnav-link-title">
24029
+ <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
24030
+ </span>
24031
+ <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
24032
+ <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
24033
+ </button>
24034
+ `,
24035
+ host: {
24036
+ '[id]': 'id',
24037
+ '[attr.aria-current]': 'stepAriaCurrent',
24038
+ '[attr.aria-controls]': 'id',
24039
+ '[class.clr-nav-link]': 'true',
24040
+ '[class.nav-item]': 'true',
24041
+ '[class.active]': 'isCurrent',
24042
+ '[class.disabled]': 'isDisabled',
24043
+ '[class.no-click]': '!canNavigate',
24044
+ '[class.complete]': 'isComplete',
24045
+ '[class.error]': 'hasError',
24046
+ },
24047
+ }]
24048
+ }], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }]; }, propDecorators: { page: [{
24049
+ type: Input,
24050
+ args: ['page']
24051
+ }] } });
24052
+
24053
+ /*
24054
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24055
+ * This software is released under MIT license.
24056
+ * The full license information can be found in LICENSE in the root directory of this project.
24057
+ */
24058
+ class ClrWizardStepnav {
24059
+ constructor(pageService) {
24060
+ this.pageService = pageService;
24061
+ }
24062
+ }
24063
+ ClrWizardStepnav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnav, deps: [{ token: PageCollectionService }], target: i0.ɵɵFactoryTarget.Component });
24064
+ ClrWizardStepnav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrWizardStepnav, selector: "clr-wizard-stepnav", host: { classAttribute: "clr-wizard-stepnav" }, ngImport: i0, template: `
23641
24065
  <div class="clr-wizard-stepnav-list">
23642
24066
  <div
23643
24067
  *ngFor="let page of pageService.pages; let i = index"
@@ -23648,7 +24072,7 @@ ClrWizardStepnav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
23648
24072
  {{ i + 1 }}
23649
24073
  </div>
23650
24074
  </div>
23651
- `, isInline: true, components: [{ type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: ["page"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
24075
+ `, isInline: true, components: [{ type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: ["page"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
23652
24076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnav, decorators: [{
23653
24077
  type: Component,
23654
24078
  args: [{
@@ -23670,7 +24094,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
23670
24094
  }], ctorParameters: function () { return [{ type: PageCollectionService }]; } });
23671
24095
 
23672
24096
  /*
23673
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24097
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23674
24098
  * This software is released under MIT license.
23675
24099
  * The full license information can be found in LICENSE in the root directory of this project.
23676
24100
  */
@@ -24031,7 +24455,13 @@ class ClrWizard {
24031
24455
  return this.navService.wizardFinished.subscribe(() => this.emitWizardFinished());
24032
24456
  }
24033
24457
  listenForPageChanges() {
24034
- return this.navService.currentPageChanged.subscribe(() => this.currentPageChanged.emit());
24458
+ return this.navService.currentPageChanged.subscribe(() => {
24459
+ // Added to address VPAT-749:
24460
+ // When clicking on a wizard tab, focus should move to that
24461
+ // tabs content to make the wizard more accessible.
24462
+ this.wizardTitle?.nativeElement.focus();
24463
+ this.currentPageChanged.emit();
24464
+ });
24035
24465
  }
24036
24466
  updateNavOnPageChanges() {
24037
24467
  const changes = this.differ.diff(this.pages);
@@ -24054,7 +24484,7 @@ class ClrWizard {
24054
24484
  }
24055
24485
  }
24056
24486
  ClrWizard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizard, deps: [{ token: PLATFORM_ID }, { token: WizardNavigationService }, { token: PageCollectionService }, { token: ButtonHubService }, { token: HeaderActionService }, { token: i0.ElementRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
24057
- ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrWizard, selector: "clr-wizard", inputs: { size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"] }, 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: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "wizardTitle", first: true, predicate: ["wizardTitle"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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]=\"isStatic\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n>\n <nav class=\"modal-nav clr-wizard-stepnav-wrapper\">\n <h1 class=\"clr-wizard-title\"><ng-content select=\"clr-wizard-title\"></ng-content></h1>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </nav>\n\n <h2 class=\"modal-title\">\n <span tabindex=\"-1\" #wizardTitle 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 </h2>\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", components: [{ type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalOverrideScrollService", "clrModalPreventClose"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }], directives: [{ type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrModalBody, selector: ".modal-body" }] });
24487
+ ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrWizard, selector: "clr-wizard", inputs: { size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"] }, 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: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "wizardTitle", first: true, predicate: ["wizardTitle"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\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]=\"isStatic\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n>\n <nav class=\"modal-nav clr-wizard-stepnav-wrapper\">\n <h1 class=\"clr-wizard-title\"><ng-content select=\"clr-wizard-title\"></ng-content></h1>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </nav>\n\n <h2 class=\"modal-title\">\n <span tabindex=\"-1\" #wizardTitle 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 </h2>\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", components: [{ type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalOverrideScrollService", "clrModalPreventClose"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }], directives: [{ type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrModalBody, selector: ".modal-body" }] });
24058
24488
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizard, decorators: [{
24059
24489
  type: Component,
24060
24490
  args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
@@ -24390,13 +24820,6 @@ var AccordionStatus;
24390
24820
  AccordionStatus["Complete"] = "complete";
24391
24821
  })(AccordionStatus || (AccordionStatus = {}));
24392
24822
 
24393
- /*
24394
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24395
- * This software is released under MIT license.
24396
- * The full license information can be found in LICENSE in the root directory of this project.
24397
- */
24398
- const defaultAnimationTiming = '0.2s ease-in-out';
24399
-
24400
24823
  /*
24401
24824
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24402
24825
  * This software is released under MIT license.
@@ -24494,10 +24917,11 @@ class AccordionModel {
24494
24917
  }
24495
24918
  togglePanel(panelId, open) {
24496
24919
  const panelIsOpen = this._panels[panelId].open;
24497
- if (this.strategy === AccordionStrategy.Default) {
24920
+ const newOpenState = open !== undefined ? open : !panelIsOpen;
24921
+ if (newOpenState && this.strategy === AccordionStrategy.Default) {
24498
24922
  this.closeAllPanels();
24499
24923
  }
24500
- this._panels[panelId].open = open !== undefined ? open : !panelIsOpen;
24924
+ this._panels[panelId].open = newOpenState;
24501
24925
  }
24502
24926
  disablePanel(panelId, disabled) {
24503
24927
  this._panels[panelId].disabled = disabled;
@@ -24628,10 +25052,10 @@ class ClrAccordionPanel {
24628
25052
  }
24629
25053
  }
24630
25054
  ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: ClrCommonStringsService }, { token: AccordionService }, { token: IfExpandService }, { token: UNIQUE_ID }], target: i0.ɵɵFactoryTarget.Component });
24631
- ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService, UNIQUE_ID_PROVIDER], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div role=\"group\" [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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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", directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], pipes: { "async": i3.AsyncPipe }, animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
25055
+ ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService, UNIQUE_ID_PROVIDER], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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", directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], pipes: { "async": i4.AsyncPipe }, animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
24632
25056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAccordionPanel, decorators: [{
24633
25057
  type: Component,
24634
- args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService, UNIQUE_ID_PROVIDER], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div role=\"group\" [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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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" }]
25058
+ args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService, UNIQUE_ID_PROVIDER], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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" }]
24635
25059
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }, { type: undefined, decorators: [{
24636
25060
  type: Inject,
24637
25061
  args: [UNIQUE_ID]
@@ -25060,10 +25484,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
25060
25484
  }
25061
25485
  }
25062
25486
  ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", 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: UNIQUE_ID }], target: i0.ɵɵFactoryTarget.Component });
25063
- ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService, UNIQUE_ID_PROVIDER], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div role=\"group\" [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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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", directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], pipes: { "async": i3.AsyncPipe }, animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
25487
+ ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService, UNIQUE_ID_PROVIDER], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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", directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: CdsIconCustomTag, selector: "cds-icon" }], pipes: { "async": i4.AsyncPipe }, animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
25064
25488
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStepperPanel, decorators: [{
25065
25489
  type: Component,
25066
- args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService, UNIQUE_ID_PROVIDER], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div role=\"group\" [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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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" }]
25490
+ args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService, UNIQUE_ID_PROVIDER], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\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-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\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\"></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>\n <div\n @skipInitialRender\n role=\"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" }]
25067
25491
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
25068
25492
  type: Inject,
25069
25493
  args: [PLATFORM_ID]
@@ -25373,7 +25797,7 @@ ClrProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version:
25373
25797
  ClrProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ClrProgressBar, selector: "clr-progress-bar", inputs: { id: "id", max: ["clrMax", "max"], displayval: ["clrDisplayval", "displayval"], value: ["clrValue", "value"], clrLabeled: "clrLabeled", clrFade: "clrFade", clrLoop: "clrLoop", clrSuccess: "clrSuccess", clrDanger: "clrDanger", clrFlash: "clrFlash", clrFlashDanger: "clrFlashDanger" }, host: { properties: { "attr.id": "this.externalId", "class.progress": "this.progressClass", "class.labeled": "this.labeledClass", "class.progress-fade": "this.fadeClass", "class.loop": "this.loopClass", "class.success": "this.successClass", "class.danger": "this.dangerClass", "class.flash": "this.flashClass", "class.flash-danger": "this.flashDangerClass" } }, ngImport: i0, template: `
25374
25798
  <progress [id]="id" [attr.max]="max" [attr.value]="value" [attr.data-displayval]="displayValue"></progress>
25375
25799
  <span *ngIf="displayStringValue()">{{ displayValue }}</span>
25376
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
25800
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
25377
25801
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrProgressBar, decorators: [{
25378
25802
  type: Component,
25379
25803
  args: [{
@@ -25651,7 +26075,7 @@ ClrTimelineStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
25651
26075
  <ng-template #processing>
25652
26076
  <clr-spinner clrMedium [attr.aria-label]="iconAriaLabel"></clr-spinner>
25653
26077
  </ng-template>
25654
- `, isInline: true, components: [{ type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
26078
+ `, isInline: true, components: [{ type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
25655
26079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTimelineStep, decorators: [{
25656
26080
  type: Component,
25657
26081
  args: [{
@@ -25811,150 +26235,30 @@ ClarityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
25811
26235
  ClrTimelineModule] });
25812
26236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClarityModule, decorators: [{
25813
26237
  type: NgModule,
25814
- args: [{
25815
- exports: [
25816
- ClrEmphasisModule,
25817
- ClrDataModule,
25818
- ClrIconModule,
25819
- ClrModalModule,
25820
- ClrLoadingModule,
25821
- ClrConditionalModule,
25822
- ClrFocusTrapModule,
25823
- ClrFocusOnViewInitModule,
25824
- ClrButtonModule,
25825
- ClrFormsModule,
25826
- ClrLayoutModule,
25827
- ClrPopoverModule,
25828
- ClrWizardModule,
25829
- ClrDragAndDropModule,
25830
- ClrStepperModule,
25831
- ClrSpinnerModule,
25832
- ClrProgressBarModule,
25833
- ClrPopoverModuleNext,
25834
- ClrTimelineModule,
25835
- ],
25836
- }]
25837
- }] });
25838
-
25839
- /*
25840
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25841
- * This software is released under MIT license.
25842
- * The full license information can be found in LICENSE in the root directory of this project.
25843
- */
25844
-
25845
- /*
25846
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25847
- * This software is released under MIT license.
25848
- * The full license information can be found in LICENSE in the root directory of this project.
25849
- */
25850
-
25851
- /*
25852
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25853
- * This software is released under MIT license.
25854
- * The full license information can be found in LICENSE in the root directory of this project.
25855
- */
25856
-
25857
- /*
25858
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25859
- * This software is released under MIT license.
25860
- * The full license information can be found in LICENSE in the root directory of this project.
25861
- */
25862
-
25863
- /*
25864
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25865
- * This software is released under MIT license.
25866
- * The full license information can be found in LICENSE in the root directory of this project.
25867
- */
25868
-
25869
- /*
25870
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25871
- * This software is released under MIT license.
25872
- * The full license information can be found in LICENSE in the root directory of this project.
25873
- */
25874
-
25875
- /*
25876
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25877
- * This software is released under MIT license.
25878
- * The full license information can be found in LICENSE in the root directory of this project.
25879
- */
25880
-
25881
- /*
25882
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25883
- * This software is released under MIT license.
25884
- * The full license information can be found in LICENSE in the root directory of this project.
25885
- */
25886
-
25887
- /*
25888
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25889
- * This software is released under MIT license.
25890
- * The full license information can be found in LICENSE in the root directory of this project.
25891
- */
25892
-
25893
- /*
25894
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25895
- * This software is released under MIT license.
25896
- * The full license information can be found in LICENSE in the root directory of this project.
25897
- */
25898
-
25899
- /*
25900
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25901
- * This software is released under MIT license.
25902
- * The full license information can be found in LICENSE in the root directory of this project.
25903
- */
25904
-
25905
- /*
25906
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25907
- * This software is released under MIT license.
25908
- * The full license information can be found in LICENSE in the root directory of this project.
25909
- */
25910
-
25911
- /*
25912
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25913
- * This software is released under MIT license.
25914
- * The full license information can be found in LICENSE in the root directory of this project.
25915
- */
25916
-
25917
- /*
25918
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25919
- * This software is released under MIT license.
25920
- * The full license information can be found in LICENSE in the root directory of this project.
25921
- */
25922
-
25923
- /*
25924
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25925
- * This software is released under MIT license.
25926
- * The full license information can be found in LICENSE in the root directory of this project.
25927
- */
25928
-
25929
- /*
25930
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25931
- * This software is released under MIT license.
25932
- * The full license information can be found in LICENSE in the root directory of this project.
25933
- */
25934
-
25935
- /*
25936
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25937
- * This software is released under MIT license.
25938
- * The full license information can be found in LICENSE in the root directory of this project.
25939
- */
25940
-
25941
- /*
25942
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25943
- * This software is released under MIT license.
25944
- * The full license information can be found in LICENSE in the root directory of this project.
25945
- */
25946
-
25947
- /*
25948
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25949
- * This software is released under MIT license.
25950
- * The full license information can be found in LICENSE in the root directory of this project.
25951
- */
25952
-
25953
- /*
25954
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
25955
- * This software is released under MIT license.
25956
- * The full license information can be found in LICENSE in the root directory of this project.
25957
- */
26238
+ args: [{
26239
+ exports: [
26240
+ ClrEmphasisModule,
26241
+ ClrDataModule,
26242
+ ClrIconModule,
26243
+ ClrModalModule,
26244
+ ClrLoadingModule,
26245
+ ClrConditionalModule,
26246
+ ClrFocusTrapModule,
26247
+ ClrFocusOnViewInitModule,
26248
+ ClrButtonModule,
26249
+ ClrFormsModule,
26250
+ ClrLayoutModule,
26251
+ ClrPopoverModule,
26252
+ ClrWizardModule,
26253
+ ClrDragAndDropModule,
26254
+ ClrStepperModule,
26255
+ ClrSpinnerModule,
26256
+ ClrProgressBarModule,
26257
+ ClrPopoverModuleNext,
26258
+ ClrTimelineModule,
26259
+ ],
26260
+ }]
26261
+ }] });
25958
26262
 
25959
26263
  /*
25960
26264
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26015,16 +26319,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
26015
26319
  * This software is released under MIT license.
26016
26320
  * The full license information can be found in LICENSE in the root directory of this project.
26017
26321
  */
26018
- const CLR_MENU_POSITIONS = [
26019
- 'bottom-left',
26020
- 'bottom-right',
26021
- 'top-left',
26022
- 'top-right',
26023
- 'left-bottom',
26024
- 'left-top',
26025
- 'right-bottom',
26026
- 'right-top',
26027
- ];
26028
26322
 
26029
26323
  /*
26030
26324
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26055,14 +26349,6 @@ const CLR_MENU_POSITIONS = [
26055
26349
  * This software is released under MIT license.
26056
26350
  * The full license information can be found in LICENSE in the root directory of this project.
26057
26351
  */
26058
- function collapse() {
26059
- 'use strict';
26060
- return [
26061
- state('true', style({ height: 0, 'overflow-y': 'hidden' })),
26062
- transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),
26063
- transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),
26064
- ];
26065
- }
26066
26352
 
26067
26353
  /*
26068
26354
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26075,12 +26361,6 @@ function collapse() {
26075
26361
  * This software is released under MIT license.
26076
26362
  * The full license information can be found in LICENSE in the root directory of this project.
26077
26363
  */
26078
- function fade(opacity = 1) {
26079
- return [
26080
- transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),
26081
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),
26082
- ];
26083
- }
26084
26364
 
26085
26365
  /*
26086
26366
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26093,28 +26373,6 @@ function fade(opacity = 1) {
26093
26373
  * This software is released under MIT license.
26094
26374
  * The full license information can be found in LICENSE in the root directory of this project.
26095
26375
  */
26096
- function fadeSlide(direction) {
26097
- let transform = null;
26098
- if (direction === 'up') {
26099
- transform = 'translate(0, 25%)';
26100
- }
26101
- else if (direction === 'down') {
26102
- transform = 'translate(0, -25%)';
26103
- }
26104
- else if (direction === 'left') {
26105
- transform = 'translate(25%, 0)';
26106
- }
26107
- else if (direction === 'right') {
26108
- transform = 'translate(-25%, 0)';
26109
- }
26110
- else {
26111
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
26112
- }
26113
- return [
26114
- transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
26115
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
26116
- ];
26117
- }
26118
26376
 
26119
26377
  /*
26120
26378
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26127,28 +26385,6 @@ function fadeSlide(direction) {
26127
26385
  * This software is released under MIT license.
26128
26386
  * The full license information can be found in LICENSE in the root directory of this project.
26129
26387
  */
26130
- function slide(direction) {
26131
- let transform = null;
26132
- if (direction === 'up') {
26133
- transform = 'translate(0, 25%)';
26134
- }
26135
- else if (direction === 'down') {
26136
- transform = 'translate(0, -25%)';
26137
- }
26138
- else if (direction === 'left') {
26139
- transform = 'translate(25%, 0)';
26140
- }
26141
- else if (direction === 'right') {
26142
- transform = 'translate(-25%, 0)';
26143
- }
26144
- else {
26145
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
26146
- }
26147
- return [
26148
- transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
26149
- transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
26150
- ];
26151
- }
26152
26388
 
26153
26389
  /*
26154
26390
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26185,158 +26421,6 @@ function slide(direction) {
26185
26421
  * This software is released under MIT license.
26186
26422
  * The full license information can be found in LICENSE in the root directory of this project.
26187
26423
  */
26188
- var ClrAriaLivePoliteness;
26189
- (function (ClrAriaLivePoliteness) {
26190
- ClrAriaLivePoliteness["off"] = "off";
26191
- ClrAriaLivePoliteness["polite"] = "polite";
26192
- ClrAriaLivePoliteness["assertive"] = "assertive";
26193
- })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
26194
- /**
26195
- * Time in milliseconds before inserting the content into the container
26196
- */
26197
- const ARIA_LIVE_TICK = 100;
26198
- /**
26199
- * @deprecated
26200
- *
26201
- * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
26202
- * Please consider using the LiveAnnouncer in the Angular Material CDK
26203
- * if your project needs this functionality.
26204
- * More info: https://material.angular.io/cdk/a11y/overview#example-1
26205
- *
26206
- * This service handle `aria-live` accessibility attribute. The issue is that you need
26207
- * to have the DOM Element with attribute `aria-live` before you could insert content
26208
- * and SR (Screen Reader) pick the change and announce it.
26209
- *
26210
- * ```typescript
26211
- * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
26212
- *
26213
- * @Component({
26214
- * selector: 'clr-demo-component',
26215
- * providers: [ClrAriaLiveService],
26216
- * template: `
26217
- * <ng-content></ng-content>
26218
- * `,
26219
- * })
26220
- * export class DemoComponent {
26221
- * constructor(ariaLiveService: ClrAriaLiveService) {}
26222
- *
26223
- * public actionThatWillTriggerChange() {
26224
- * this.ariaLiveService.announce('message that I want to announce to SR');
26225
- * }
26226
- * }
26227
- * ```
26228
- *
26229
- */
26230
- class ClrAriaLiveService {
26231
- constructor(ngZone, _document, platformId) {
26232
- this.ngZone = ngZone;
26233
- this.platformId = platformId;
26234
- this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
26235
- this.document = _document;
26236
- }
26237
- /**
26238
- * get access to the internal HTML `id` that gonna be used for the AriaLive container.
26239
- * @return ID of the DOM Element as string.
26240
- */
26241
- get id() {
26242
- return this._id;
26243
- }
26244
- /**
26245
- * Append text content inside the AriaLive Container. This method will check if the
26246
- * DOM Element is existing if not it will create one for us and the will apply the text.
26247
- *
26248
- * ```typescript
26249
- * this.ariaLiveService.announce(this.el.nativeElement);
26250
- * // or
26251
- * this.ariaLiveService.announce('Message to announce to SR');
26252
- * ```
26253
- *
26254
- * @remark
26255
- * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
26256
- * The reason for that is that we don't want to do additional work if the SR will ignore it.
26257
- *
26258
- * @param message - This could be simple string or HTMLElement
26259
- * @param politeness - 'polite', 'assertive' or 'off'
26260
- */
26261
- announce(message, politeness = ClrAriaLivePoliteness.polite) {
26262
- if (politeness === ClrAriaLivePoliteness.off) {
26263
- return;
26264
- }
26265
- if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
26266
- this.ariaLiveElement = this.createContainer();
26267
- }
26268
- message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
26269
- // when there is no message do NOTHING!
26270
- if (!message) {
26271
- return;
26272
- }
26273
- this.ariaLiveElement.setAttribute('aria-live', politeness);
26274
- // This 100ms timeout is necessary for some browser + screen-reader combinations:
26275
- // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
26276
- // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
26277
- // second time without clearing and then using a non-zero delay.
26278
- // (using JAWS 17 at time of this writing).
26279
- this.ngZone.runOutsideAngular(() => {
26280
- // This clearTimeout will stop all older messages from announcing
26281
- // in the case where the messages are comming too fast we gonna try to append only
26282
- // the last one. That's what the SR will try to do anyway.
26283
- clearTimeout(this.previousTimeout);
26284
- this.previousTimeout = setTimeout(() => {
26285
- this.ariaLiveElement.textContent = message;
26286
- }, ARIA_LIVE_TICK);
26287
- });
26288
- }
26289
- /**
26290
- * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
26291
- * container from the document.
26292
- */
26293
- ngOnDestroy() {
26294
- clearTimeout(this.previousTimeout);
26295
- if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
26296
- this.document.body.removeChild(this.ariaLiveElement);
26297
- this.ariaLiveElement = null;
26298
- }
26299
- }
26300
- /**
26301
- * Create AriaLive DOM element as a last child of the document.
26302
- * After the element is created, we gonna apply Clarity class to hide it from
26303
- * the screen and set the `aria-live` politness.
26304
- *
26305
- * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
26306
- *
26307
- * @remark
26308
- * Calling this method multiple times will create multiple DOM Elements, that
26309
- * won't be tracked and will be GC after the service is destroyed.
26310
- *
26311
- * @return AriaLive container as HTMLElement
26312
- *
26313
- */
26314
- createContainer() {
26315
- const ariaLiveElement = this.document.createElement('div');
26316
- ariaLiveElement.setAttribute('id', this.id);
26317
- // Use clarity screen reader class to hide the dom element
26318
- // and fix the scrollbar shake
26319
- ariaLiveElement.classList.add('clr-sr-only');
26320
- ariaLiveElement.setAttribute('aria-atomic', 'true');
26321
- ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
26322
- this.document.body.appendChild(ariaLiveElement);
26323
- return ariaLiveElement;
26324
- }
26325
- }
26326
- ClrAriaLiveService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, deps: [{ token: i0.NgZone }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
26327
- ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
26328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, decorators: [{
26329
- type: Injectable,
26330
- args: [{
26331
- providedIn: 'root',
26332
- }]
26333
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{
26334
- type: Inject,
26335
- args: [DOCUMENT]
26336
- }] }, { type: undefined, decorators: [{
26337
- type: Inject,
26338
- args: [PLATFORM_ID]
26339
- }] }]; } });
26340
26424
 
26341
26425
  /*
26342
26426
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26354,14 +26438,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
26354
26438
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26355
26439
  * This software is released under MIT license.
26356
26440
  * The full license information can be found in LICENSE in the root directory of this project.
26357
- *
26358
26441
  */
26442
+ const CLR_MENU_POSITIONS = [
26443
+ 'bottom-left',
26444
+ 'bottom-right',
26445
+ 'top-left',
26446
+ 'top-right',
26447
+ 'left-bottom',
26448
+ 'left-top',
26449
+ 'right-bottom',
26450
+ 'right-top',
26451
+ ];
26359
26452
 
26360
26453
  /*
26361
26454
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26362
26455
  * This software is released under MIT license.
26363
26456
  * The full license information can be found in LICENSE in the root directory of this project.
26364
- *
26365
26457
  */
26366
26458
 
26367
26459
  /*
@@ -26435,3 +26527,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
26435
26527
  */
26436
26528
 
26437
26529
  export { CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DRAG_AND_DROP_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, ClrAriaLivePoliteness, ClrAriaLiveService, 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, ClrDatagridColumnToggleTitle, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridItemsTrackBy, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDragAndDropModule, ClrDragEvent, ClrDragHandle, ClrDraggable, ClrDraggableGhost, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrDroppable, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfDragged, 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, 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, ClrStackInput, ClrStackSelect, ClrStackView, ClrStackViewCustomTags, ClrStackViewModule, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, 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, ClrWizardCustomTags, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, 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, ClrFocusTrapModule as ÇlrClrFocusTrapModule, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, FocusTrapDirective as ÇlrFocusTrapDirective, FocusTrapTracker as ÇlrFocusTrapTracker, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
26530
+ //# sourceMappingURL=clr-angular.mjs.map