@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';
@@ -1233,7 +1233,7 @@ ClrButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
1233
1233
  <ng-content></ng-content>
1234
1234
  </button>
1235
1235
  </ng-template>
1236
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1236
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1237
1237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrButton, decorators: [{
1238
1238
  type: Component,
1239
1239
  args: [{
@@ -1372,7 +1372,7 @@ ClrPopoverPositions['left-bottom'] = {
1372
1372
  };
1373
1373
 
1374
1374
  /*
1375
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
1375
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
1376
1376
  * This software is released under MIT license.
1377
1377
  * The full license information can be found in LICENSE in the root directory of this project.
1378
1378
  */
@@ -1437,6 +1437,11 @@ const commonStringsDefault = {
1437
1437
  datepickerSelectYearText: 'Select year, the current year is {CALENDAR_YEAR}',
1438
1438
  // Stack View
1439
1439
  stackViewChanged: 'Value changed.',
1440
+ // Responsive Nav
1441
+ responsiveNavToggleOpen: 'Open navigation menu',
1442
+ responsiveNavToggleClose: 'Close navigation menu',
1443
+ responsiveNavOverflowOpen: 'Open navigation overflow menu',
1444
+ responsiveNavOverflowClose: 'Close navigation overflow menu',
1440
1445
  //Vertical Nav
1441
1446
  verticalNavGroupToggle: 'Toggle vertical navigation group',
1442
1447
  verticalNavToggle: 'Toggle vertical navigation',
@@ -1454,10 +1459,19 @@ const commonStringsDefault = {
1454
1459
  comboboxNoResults: 'No results',
1455
1460
  comboboxOpen: 'Show options',
1456
1461
  // Datagrid expandable rows
1457
- dategridExpandableBeginningOf: 'Beginning of',
1458
- dategridExpandableEndOf: 'End of',
1459
- dategridExpandableRowContent: 'Expandable row content',
1460
- 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`,
1462
+ datagridExpandableBeginningOf: 'Beginning of',
1463
+ datagridExpandableEndOf: 'End of',
1464
+ datagridExpandableRowContent: 'Expandable row content',
1465
+ 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`,
1466
+ // Wizard
1467
+ wizardStepSuccess: 'Completed',
1468
+ wizardStepError: 'Error',
1469
+ /**
1470
+ * Password Input
1471
+ * Screen-reader text for the hide/show password field button
1472
+ */
1473
+ passwordHide: 'Hide password',
1474
+ passwordShow: 'Show password',
1461
1475
  };
1462
1476
 
1463
1477
  /*
@@ -1606,7 +1620,7 @@ ClrButtonGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
1606
1620
  ClrPopoverToggleService,
1607
1621
  ClrPopoverEventsService,
1608
1622
  ClrPopoverPositionService,
1609
- ], 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"] }] });
1623
+ ], 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"] }] });
1610
1624
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrButtonGroup, decorators: [{
1611
1625
  type: Component,
1612
1626
  args: [{ selector: 'clr-button-group', providers: [
@@ -1650,10 +1664,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
1650
1664
  }] });
1651
1665
 
1652
1666
  /*
1653
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
1667
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
1654
1668
  * This software is released under MIT license.
1655
1669
  * The full license information can be found in LICENSE in the root directory of this project.
1656
1670
  */
1671
+ // minimum width to fit loading spinner
1672
+ const MIN_BUTTON_WIDTH = 42;
1657
1673
  class ClrLoadingButton {
1658
1674
  constructor(el, renderer) {
1659
1675
  this.el = el;
@@ -1694,7 +1710,8 @@ class ClrLoadingButton {
1694
1710
  setExplicitButtonWidth() {
1695
1711
  if (this.el.nativeElement && this.el.nativeElement.getBoundingClientRect) {
1696
1712
  const boundingClientRect = this.el.nativeElement.getBoundingClientRect();
1697
- this.renderer.setStyle(this.el.nativeElement, 'width', `${boundingClientRect.width}px`);
1713
+ const width = Math.max(MIN_BUTTON_WIDTH, boundingClientRect.width);
1714
+ this.renderer.setStyle(this.el.nativeElement, 'width', `${width}px`);
1698
1715
  }
1699
1716
  }
1700
1717
  }
@@ -1715,7 +1732,7 @@ ClrLoadingButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
1715
1732
  <ng-content></ng-content>
1716
1733
  </span>
1717
1734
  </ng-container>
1718
- `, isInline: true, directives: [{ type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
1735
+ `, isInline: true, directives: [{ type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
1719
1736
  trigger('defaultButton', [
1720
1737
  transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
1721
1738
  // TODO: see if we can get leave animation to work before spinner's enter animation
@@ -2674,7 +2691,7 @@ ClrControlContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
2674
2691
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
2675
2692
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
2676
2693
  </div>
2677
- `, 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" }] });
2694
+ `, 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" }] });
2678
2695
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrControlContainer, decorators: [{
2679
2696
  type: Component,
2680
2697
  args: [{
@@ -3058,7 +3075,7 @@ ClrCheckboxWrapper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
3058
3075
  <ng-content select="[clrCheckbox],[clrToggle]"></ng-content>
3059
3076
  <ng-content select="label"></ng-content>
3060
3077
  <label *ngIf="!label"></label>
3061
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
3078
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
3062
3079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCheckboxWrapper, decorators: [{
3063
3080
  type: Component,
3064
3081
  args: [{
@@ -3075,7 +3092,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
3075
3092
  providers: [ControlIdService, IS_TOGGLE_PROVIDER],
3076
3093
  }]
3077
3094
  }], ctorParameters: function () {
3078
- return [{ type: i3$1.BehaviorSubject, decorators: [{
3095
+ return [{ type: i3.BehaviorSubject, decorators: [{
3079
3096
  type: Inject,
3080
3097
  args: [IS_TOGGLE]
3081
3098
  }] }];
@@ -3188,7 +3205,7 @@ ClrCheckboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3188
3205
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
3189
3206
  </div>
3190
3207
  </div>
3191
- `, 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" }] });
3208
+ `, 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" }] });
3192
3209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCheckboxContainer, decorators: [{
3193
3210
  type: Component,
3194
3211
  args: [{
@@ -4928,7 +4945,7 @@ class ClrCalendar {
4928
4945
  }
4929
4946
  }
4930
4947
  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 });
4931
- 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"] }] });
4948
+ 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"] }] });
4932
4949
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCalendar, decorators: [{
4933
4950
  type: Component,
4934
4951
  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" }]
@@ -5140,7 +5157,7 @@ ClrMonthpicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
5140
5157
  >
5141
5158
  {{ month }}
5142
5159
  </button>
5143
- `, isInline: true, directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5160
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5144
5161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrMonthpicker, decorators: [{
5145
5162
  type: Component,
5146
5163
  args: [{
@@ -5393,7 +5410,7 @@ ClrYearpicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
5393
5410
  {{ year }}
5394
5411
  </button>
5395
5412
  </div>
5396
- `, isInline: true, directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5413
+ `, isInline: true, directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5397
5414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrYearpicker, decorators: [{
5398
5415
  type: Component,
5399
5416
  args: [{
@@ -5548,7 +5565,7 @@ class ClrDatepickerViewManager {
5548
5565
  }
5549
5566
  }
5550
5567
  ClrDatepickerViewManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatepickerViewManager, deps: [{ token: ViewManagerService }], target: i0.ɵɵFactoryTarget.Component });
5551
- 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"] }] });
5568
+ 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"] }] });
5552
5569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
5553
5570
  type: Component,
5554
5571
  args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
@@ -5687,7 +5704,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
5687
5704
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
5688
5705
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
5689
5706
  </div>
5690
- `, 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"] }] });
5707
+ `, 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"] }] });
5691
5708
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDateContainer, decorators: [{
5692
5709
  type: Component,
5693
5710
  args: [{
@@ -6159,7 +6176,7 @@ ClrInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
6159
6176
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6160
6177
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6161
6178
  </div>
6162
- `, 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" }] });
6179
+ `, 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" }] });
6163
6180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrInputContainer, decorators: [{
6164
6181
  type: Component,
6165
6182
  args: [{
@@ -6247,7 +6264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6247
6264
  }], ctorParameters: function () { return []; } });
6248
6265
 
6249
6266
  /**
6250
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
6267
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
6251
6268
  * This software is released under MIT license.
6252
6269
  * The full license information can be found in LICENSE in the root directory of this project.
6253
6270
  */
@@ -6311,6 +6328,9 @@ ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
6311
6328
  [attr.shape]="show ? 'eye-hide' : 'eye'"
6312
6329
  [attr.title]="show ? commonStrings.keys.hide : commonStrings.keys.show"
6313
6330
  ></cds-icon>
6331
+ <span class="clr-sr-only">{{
6332
+ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow
6333
+ }}</span>
6314
6334
  </button>
6315
6335
  </div>
6316
6336
  <cds-icon
@@ -6332,7 +6352,7 @@ ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
6332
6352
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6333
6353
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6334
6354
  </div>
6335
- `, 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" }] });
6355
+ `, 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" }] });
6336
6356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrPasswordContainer, decorators: [{
6337
6357
  type: Component,
6338
6358
  args: [{
@@ -6356,6 +6376,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6356
6376
  [attr.shape]="show ? 'eye-hide' : 'eye'"
6357
6377
  [attr.title]="show ? commonStrings.keys.hide : commonStrings.keys.show"
6358
6378
  ></cds-icon>
6379
+ <span class="clr-sr-only">{{
6380
+ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow
6381
+ }}</span>
6359
6382
  </button>
6360
6383
  </div>
6361
6384
  <cds-icon
@@ -6395,7 +6418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6395
6418
  }], ctorParameters: function () {
6396
6419
  return [{ type: IfControlStateService }, { type: LayoutService, decorators: [{
6397
6420
  type: Optional
6398
- }] }, { type: ControlClassService }, { type: NgControlService }, { type: FocusService$1 }, { type: i3$1.BehaviorSubject, decorators: [{
6421
+ }] }, { type: ControlClassService }, { type: NgControlService }, { type: FocusService$1 }, { type: i3.BehaviorSubject, decorators: [{
6399
6422
  type: Inject,
6400
6423
  args: [TOGGLE_SERVICE]
6401
6424
  }] }, { type: ClrCommonStringsService }];
@@ -6446,7 +6469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
6446
6469
  type: Optional
6447
6470
  }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: FocusService$1, decorators: [{
6448
6471
  type: Optional
6449
- }] }, { type: i3$1.BehaviorSubject, decorators: [{
6472
+ }] }, { type: i3.BehaviorSubject, decorators: [{
6450
6473
  type: Optional
6451
6474
  }, {
6452
6475
  type: Inject,
@@ -6506,7 +6529,7 @@ ClrRadioWrapper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
6506
6529
  <ng-content select="[clrRadio]"></ng-content>
6507
6530
  <ng-content select="label"></ng-content>
6508
6531
  <label *ngIf="!label"></label>
6509
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
6532
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }] });
6510
6533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrRadioWrapper, decorators: [{
6511
6534
  type: Component,
6512
6535
  args: [{
@@ -6613,7 +6636,7 @@ ClrRadioContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
6613
6636
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6614
6637
  </div>
6615
6638
  </div>
6616
- `, 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" }] });
6639
+ `, 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" }] });
6617
6640
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrRadioContainer, decorators: [{
6618
6641
  type: Component,
6619
6642
  args: [{
@@ -6739,7 +6762,7 @@ ClrSelectContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
6739
6762
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6740
6763
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6741
6764
  </div>
6742
- `, 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" }] });
6765
+ `, 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" }] });
6743
6766
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrSelectContainer, decorators: [{
6744
6767
  type: Component,
6745
6768
  args: [{
@@ -6866,7 +6889,7 @@ ClrTextareaContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
6866
6889
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
6867
6890
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
6868
6891
  </div>
6869
- `, 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" }] });
6892
+ `, 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" }] });
6870
6893
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTextareaContainer, decorators: [{
6871
6894
  type: Component,
6872
6895
  args: [{
@@ -7016,7 +7039,7 @@ ClrRangeContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
7016
7039
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
7017
7040
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
7018
7041
  </div>
7019
- `, 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" }] });
7042
+ `, 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" }] });
7020
7043
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrRangeContainer, decorators: [{
7021
7044
  type: Component,
7022
7045
  args: [{
@@ -7189,7 +7212,7 @@ ClrDatalistContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
7189
7212
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
7190
7213
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
7191
7214
  </div>
7192
- `, 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" }] });
7215
+ `, 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" }] });
7193
7216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatalistContainer, decorators: [{
7194
7217
  type: Component,
7195
7218
  args: [{
@@ -7887,7 +7910,7 @@ class ClrOption {
7887
7910
  }
7888
7911
  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 });
7889
7912
  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>
7890
- <span *ngIf="selected" class="clr-sr-only"> {{ commonStrings.keys.comboboxSelected }} </span> `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
7913
+ <span *ngIf="selected" class="clr-sr-only"> {{ commonStrings.keys.comboboxSelected }} </span> `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
7891
7914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrOption, decorators: [{
7892
7915
  type: Component,
7893
7916
  args: [{
@@ -8111,7 +8134,7 @@ ClrOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "1
8111
8134
 
8112
8135
  <!--Option Groups and Options will be projected here-->
8113
8136
  <ng-content></ng-content>
8114
- `, isInline: true, components: [{ type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
8137
+ `, isInline: true, components: [{ type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
8115
8138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrOptions, decorators: [{
8116
8139
  type: Component,
8117
8140
  args: [{
@@ -8225,7 +8248,7 @@ ClrComboboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
8225
8248
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
8226
8249
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
8227
8250
  </div>
8228
- `, 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" }] });
8251
+ `, 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" }] });
8229
8252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrComboboxContainer, decorators: [{
8230
8253
  type: Component,
8231
8254
  args: [{
@@ -8978,7 +9001,7 @@ ClrCombobox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
8978
9001
  ClrPopoverToggleService,
8979
9002
  ClrPopoverEventsService,
8980
9003
  ClrPopoverPositionService,
8981
- ], 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"] }] });
9004
+ ], 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"] }] });
8982
9005
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrCombobox, decorators: [{
8983
9006
  type: Component,
8984
9007
  args: [{ selector: 'clr-combobox', providers: [
@@ -11266,6 +11289,7 @@ DatagridStringFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
11266
11289
  [(ngModel)]="value"
11267
11290
  class="clr-input"
11268
11291
  [attr.aria-label]="commonStrings.keys.filterItems"
11292
+ [placeholder]="commonStrings.keys.filterItems"
11269
11293
  />
11270
11294
  </clr-dg-filter>
11271
11295
  `, 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"] }] });
@@ -11283,6 +11307,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
11283
11307
  [(ngModel)]="value"
11284
11308
  class="clr-input"
11285
11309
  [attr.aria-label]="commonStrings.keys.filterItems"
11310
+ [placeholder]="commonStrings.keys.filterItems"
11286
11311
  />
11287
11312
  </clr-dg-filter>
11288
11313
  `,
@@ -12660,7 +12685,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
12660
12685
 
12661
12686
  <clr-dg-column-separator *ngIf="showSeparator"></clr-dg-column-separator>
12662
12687
  </div>
12663
- `, 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 });
12688
+ `, 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 });
12664
12689
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridColumn, decorators: [{
12665
12690
  type: Component,
12666
12691
  args: [{
@@ -12991,7 +13016,7 @@ ClrDatagridPlaceholder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
12991
13016
  <div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
12992
13017
  <span role="gridcell"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
12993
13018
  </div>
12994
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13019
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12995
13020
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridPlaceholder, decorators: [{
12996
13021
  type: Component,
12997
13022
  args: [{
@@ -13192,7 +13217,7 @@ ClrSignpost.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
13192
13217
  </ng-container>
13193
13218
 
13194
13219
  <ng-content></ng-content>
13195
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
13220
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
13196
13221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrSignpost, decorators: [{
13197
13222
  type: Component,
13198
13223
  args: [{
@@ -13956,7 +13981,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
13956
13981
  DatagridIfExpandService,
13957
13982
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
13958
13983
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
13959
- ], 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" }] });
13984
+ ], 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" }] });
13960
13985
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridRow, decorators: [{
13961
13986
  type: Component,
13962
13987
  args: [{ selector: 'clr-dg-row', host: {
@@ -14363,7 +14388,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
14363
14388
  TableSizeService,
14364
14389
  ColumnsService,
14365
14390
  DisplayModeService,
14366
- ], 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"] }] });
14391
+ ], 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"] }] });
14367
14392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagrid, decorators: [{
14368
14393
  type: Component,
14369
14394
  args: [{ selector: 'clr-datagrid', providers: [
@@ -14840,7 +14865,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14840
14865
  </clr-dg-column-toggle-button>
14841
14866
  </div>
14842
14867
  </div>
14843
- `, 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"] }] });
14868
+ `, 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"] }] });
14844
14869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
14845
14870
  type: Component,
14846
14871
  args: [{
@@ -15046,7 +15071,7 @@ ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15046
15071
  <ng-content></ng-content>
15047
15072
  <div class="clr-sr-only">{{ commonStrings.keys.detailPaneEnd }}</div>
15048
15073
  </div>
15049
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15074
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15050
15075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridDetail, decorators: [{
15051
15076
  type: Component,
15052
15077
  args: [{
@@ -15203,7 +15228,7 @@ ClrDatagridFooter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15203
15228
  </div>
15204
15229
  </ng-container>
15205
15230
  <ng-content select="clr-dg-pagination"></ng-content>
15206
- `, 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"] }] });
15231
+ `, 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"] }] });
15207
15232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridFooter, decorators: [{
15208
15233
  type: Component,
15209
15234
  args: [{
@@ -15334,7 +15359,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
15334
15359
  type: Directive,
15335
15360
  args: [{ selector: '[clrDgHideableColumn]' }]
15336
15361
  }], ctorParameters: function () {
15337
- return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ColumnsService }, { type: i3$1.BehaviorSubject, decorators: [{
15362
+ return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ColumnsService }, { type: i3.BehaviorSubject, decorators: [{
15338
15363
  type: Optional
15339
15364
  }, {
15340
15365
  type: Inject,
@@ -15374,7 +15399,7 @@ ClrDatagridPageSize.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
15374
15399
  <option *ngFor="let option of pageSizeOptions" [ngValue]="option">{{ option }}</option>
15375
15400
  </select>
15376
15401
  </div>
15377
- `, 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"] }] });
15402
+ `, 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"] }] });
15378
15403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridPageSize, decorators: [{
15379
15404
  type: Component,
15380
15405
  args: [{
@@ -15624,7 +15649,7 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
15624
15649
  </button>
15625
15650
  </div>
15626
15651
  </ng-container>
15627
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
15652
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
15628
15653
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrDatagridPagination, decorators: [{
15629
15654
  type: Component,
15630
15655
  args: [{
@@ -15748,7 +15773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
15748
15773
  }] } });
15749
15774
 
15750
15775
  /*
15751
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
15776
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
15752
15777
  * This software is released under MIT license.
15753
15778
  * The full license information can be found in LICENSE in the root directory of this project.
15754
15779
  */
@@ -15781,17 +15806,20 @@ class ClrDatagridRowDetail {
15781
15806
  }
15782
15807
  get beginningOfExpandableContentAriaText() {
15783
15808
  return (this._beginningOfExpandableContentAriaText ||
15784
- `${this.commonStrings.keys.dategridExpandableBeginningOf} ${this.commonStrings.keys.dategridExpandableRowContent}`);
15809
+ `${this.commonStrings.keys.dategridExpandableBeginningOf || this.commonStrings.keys.datagridExpandableBeginningOf}
15810
+ ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
15785
15811
  }
15786
15812
  get endOfExpandableContentAriaText() {
15787
15813
  return (this._endOfExpandableContentAriaText ||
15788
- `${this.commonStrings.keys.dategridExpandableEndOf} ${this.commonStrings.keys.dategridExpandableRowContent}`);
15814
+ `${this.commonStrings.keys.dategridExpandableEndOf || this.commonStrings.keys.datagridExpandableEndOf}
15815
+ ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
15789
15816
  }
15790
15817
  }
15791
15818
  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 });
15792
15819
  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: `
15793
15820
  <div class="clr-sr-only">
15794
- {{ beginningOfExpandableContentAriaText }} {{ commonStrings.keys.dategridExpandableRowsHelperText }}
15821
+ {{ beginningOfExpandableContentAriaText }}
15822
+ {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
15795
15823
  </div>
15796
15824
  <ng-content></ng-content>
15797
15825
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -15800,9 +15828,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
15800
15828
  type: Component,
15801
15829
  args: [{
15802
15830
  selector: 'clr-dg-row-detail',
15831
+ // TODO: @deprecated - dategrid* keys are deprecated. Remove in v14.
15803
15832
  template: `
15804
15833
  <div class="clr-sr-only">
15805
- {{ beginningOfExpandableContentAriaText }} {{ commonStrings.keys.dategridExpandableRowsHelperText }}
15834
+ {{ beginningOfExpandableContentAriaText }}
15835
+ {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
15806
15836
  </div>
15807
15837
  <ng-content></ng-content>
15808
15838
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -16028,7 +16058,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
16028
16058
  type: Directive,
16029
16059
  args: [{ selector: 'clr-dg-column', providers: [ColumnResizerService, COLUMN_STATE_PROVIDER] }]
16030
16060
  }], ctorParameters: function () {
16031
- return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }, { type: DomAdapter }, { type: ColumnResizerService }, { type: ColumnsService }, { type: i3$1.BehaviorSubject, decorators: [{
16061
+ return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }, { type: DomAdapter }, { type: ColumnResizerService }, { type: ColumnsService }, { type: i3.BehaviorSubject, decorators: [{
16032
16062
  type: Inject,
16033
16063
  args: [COLUMN_STATE]
16034
16064
  }] }];
@@ -16618,7 +16648,7 @@ ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
16618
16648
  <ng-content select="clr-stack-block"></ng-content>
16619
16649
  </div>
16620
16650
  </clr-expandable-animation>
16621
- `, 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" }] });
16651
+ `, 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" }] });
16622
16652
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackBlock, decorators: [{
16623
16653
  type: Component,
16624
16654
  args: [{
@@ -16798,7 +16828,7 @@ ClrStackHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
16798
16828
  <!-- End of undocumented experimental feature. -->
16799
16829
  </span>
16800
16830
  </h4>
16801
- `, isInline: true, styles: [":host{display:block}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16831
+ `, isInline: true, styles: [":host{display:block}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16802
16832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackHeader, decorators: [{
16803
16833
  type: Component,
16804
16834
  args: [{
@@ -16869,7 +16899,7 @@ ClrStackInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
16869
16899
  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: `
16870
16900
  <span *ngIf="!stackView.editing">{{ model }}</span>
16871
16901
  <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
16872
- `, 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"] }] });
16902
+ `, 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"] }] });
16873
16903
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackInput, decorators: [{
16874
16904
  type: Component,
16875
16905
  args: [{
@@ -16902,7 +16932,7 @@ ClrStackSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
16902
16932
  <ng-content></ng-content>
16903
16933
  </select>
16904
16934
  </div>
16905
- `, 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"] }] });
16935
+ `, 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"] }] });
16906
16936
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStackSelect, decorators: [{
16907
16937
  type: Component,
16908
16938
  args: [{
@@ -17390,7 +17420,7 @@ RecursiveChildren.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
17390
17420
  <ng-container *ngTemplateOutlet="featuresService.recursion.template; context: getContext(child)"></ng-container>
17391
17421
  </ng-container>
17392
17422
  </ng-container>
17393
- `, 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"] }] });
17423
+ `, 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"] }] });
17394
17424
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RecursiveChildren, decorators: [{
17395
17425
  type: Component,
17396
17426
  args: [{
@@ -17419,7 +17449,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
17419
17449
  }] } });
17420
17450
 
17421
17451
  /*
17422
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
17452
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17423
17453
  * This software is released under MIT license.
17424
17454
  * The full license information can be found in LICENSE in the root directory of this project.
17425
17455
  */
@@ -17612,12 +17642,12 @@ class ClrTreeNode {
17612
17642
  }
17613
17643
  }
17614
17644
  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 });
17615
- 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: [
17645
+ 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: [
17616
17646
  UNIQUE_ID_PROVIDER,
17617
17647
  TREE_FEATURES_PROVIDER,
17618
17648
  IfExpandService,
17619
17649
  { provide: LoadingListener, useExisting: IfExpandService },
17620
- ], 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: [
17650
+ ], 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: [
17621
17651
  trigger('toggleChildrenAnim', [
17622
17652
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
17623
17653
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -17640,7 +17670,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
17640
17670
  state('collapsed', style({ height: 0 })),
17641
17671
  ]),
17642
17672
  ], host: {
17643
- '[attr.role]': '"treeitem"',
17644
17673
  '[class.clr-tree-node]': 'true',
17645
17674
  }, 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" }]
17646
17675
  }], ctorParameters: function () {
@@ -17730,7 +17759,7 @@ ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0
17730
17759
  *ngIf="featuresService.recursion"
17731
17760
  [children]="featuresService.recursion.root"
17732
17761
  ></clr-recursive-children>
17733
- `, isInline: true, components: [{ type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17762
+ `, isInline: true, components: [{ type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17734
17763
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTree, decorators: [{
17735
17764
  type: Component,
17736
17765
  args: [{
@@ -18646,7 +18675,7 @@ class Popover {
18646
18675
  }
18647
18676
 
18648
18677
  /*
18649
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
18678
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18650
18679
  * This software is released under MIT license.
18651
18680
  * The full license information can be found in LICENSE in the root directory of this project.
18652
18681
  */
@@ -18661,6 +18690,13 @@ class AbstractPopover {
18661
18690
  * a separate directive on the host. So let's do dirty but performant for now.
18662
18691
  */
18663
18692
  this.closeOnOutsideClick = false;
18693
+ this.closeOnOutsideClickCallback = event => {
18694
+ // The anchor element containing the click event origin means, the click wasn't triggered outside.
18695
+ if (this.anchorElem.contains(event.target)) {
18696
+ return;
18697
+ }
18698
+ this.toggleService.open = false;
18699
+ };
18664
18700
  this.el = injector.get(ElementRef);
18665
18701
  this.toggleService = injector.get(ClrPopoverToggleService);
18666
18702
  this.renderer = injector.get(Renderer2);
@@ -18684,8 +18720,6 @@ class AbstractPopover {
18684
18720
  }
18685
18721
  anchor() {
18686
18722
  this.updateAnchor = true;
18687
- // Ugh
18688
- this.ignore = this.toggleService.originalEvent;
18689
18723
  }
18690
18724
  release() {
18691
18725
  this.detachOutsideClickListener();
@@ -18732,34 +18766,18 @@ class AbstractPopover {
18732
18766
  }
18733
18767
  }
18734
18768
  attachOutsideClickListener() {
18735
- if (this.closeOnOutsideClick) {
18736
- this.hostClickListener = this.renderer.listen(this.el.nativeElement, 'click', event => (this.ignore = event));
18737
- if (this.ignoredElement) {
18738
- this.ignoredElementClickListener = this.renderer.listen(this.ignoredElement, 'click', event => (this.ignore = event));
18769
+ if (this.closeOnOutsideClick && this.toggleService.open) {
18770
+ if (document && document.addEventListener) {
18771
+ // To listen outside click, the listener should catch the event during the capturing phase.
18772
+ // We have to do this ugly document check as Renderer2.listen doesn't allow passive/useCapture listen.
18773
+ document.addEventListener('click', this.closeOnOutsideClickCallback, true);
18739
18774
  }
18740
- this.documentClickListener = this.renderer.listen('document', 'click', event => {
18741
- if (event === this.ignore) {
18742
- delete this.ignore;
18743
- }
18744
- else {
18745
- this.toggleService.open = false;
18746
- }
18747
- });
18748
18775
  }
18749
18776
  }
18750
18777
  detachOutsideClickListener() {
18751
18778
  if (this.closeOnOutsideClick) {
18752
- if (this.hostClickListener) {
18753
- this.hostClickListener();
18754
- delete this.hostClickListener;
18755
- }
18756
- if (this.ignoredElementClickListener) {
18757
- this.ignoredElementClickListener();
18758
- delete this.ignoredElementClickListener;
18759
- }
18760
- if (this.documentClickListener) {
18761
- this.documentClickListener();
18762
- delete this.documentClickListener;
18779
+ if (document && document.removeEventListener) {
18780
+ document.removeEventListener('click', this.closeOnOutsideClickCallback, true);
18763
18781
  }
18764
18782
  }
18765
18783
  }
@@ -19028,7 +19046,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19028
19046
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }]; } });
19029
19047
 
19030
19048
  /*
19031
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19049
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
19032
19050
  * This software is released under MIT license.
19033
19051
  * The full license information can be found in LICENSE in the root directory of this project.
19034
19052
  */
@@ -19080,16 +19098,33 @@ class MultiAlertService {
19080
19098
  });
19081
19099
  }
19082
19100
  next() {
19083
- this.current = this.current === this.activeAlerts.length - 1 ? 0 : this.current + 1;
19101
+ this._current = this.current === this.activeAlerts.length - 1 ? 0 : this.current + 1;
19102
+ this._change.next(this._current);
19084
19103
  }
19085
19104
  previous() {
19086
19105
  if (this.activeAlerts.length === 0) {
19087
19106
  return;
19088
19107
  }
19089
- this.current = this.current === 0 ? this.activeAlerts.length - 1 : this.current - 1;
19108
+ this._current = this.current === 0 ? this.activeAlerts.length - 1 : this.current - 1;
19109
+ this._change.next(this._current);
19090
19110
  }
19091
- close() {
19092
- this.previous();
19111
+ open() {
19112
+ if (this.activeAlerts.length === 0) {
19113
+ return;
19114
+ }
19115
+ if (!this.currentAlert) {
19116
+ this._current = 0;
19117
+ }
19118
+ this._change.next(this._current);
19119
+ }
19120
+ close(isCurrentAlert) {
19121
+ if (this.activeAlerts.length === 0) {
19122
+ return;
19123
+ }
19124
+ if (isCurrentAlert) {
19125
+ this._current = Math.max(0, this.current - 1);
19126
+ }
19127
+ this._change.next(this._current);
19093
19128
  }
19094
19129
  destroy() {
19095
19130
  if (this.subscription) {
@@ -19104,7 +19139,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19104
19139
  }] });
19105
19140
 
19106
19141
  /*
19107
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19142
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
19108
19143
  * This software is released under MIT license.
19109
19144
  * The full license information can be found in LICENSE in the root directory of this project.
19110
19145
  */
@@ -19133,6 +19168,14 @@ class ClrAlert {
19133
19168
  ngOnDestroy() {
19134
19169
  this.subscriptions.forEach(sub => sub.unsubscribe());
19135
19170
  }
19171
+ set closed(value) {
19172
+ if (value && !this._closed) {
19173
+ this.close();
19174
+ }
19175
+ else if (!value && this._closed) {
19176
+ this.open();
19177
+ }
19178
+ }
19136
19179
  set alertType(val) {
19137
19180
  this.iconService.alertType = val;
19138
19181
  }
@@ -19155,22 +19198,27 @@ class ClrAlert {
19155
19198
  return this._hidden;
19156
19199
  }
19157
19200
  close() {
19201
+ var _a;
19158
19202
  if (!this.closable) {
19159
19203
  return;
19160
19204
  }
19205
+ const isCurrentAlert = ((_a = this.multiAlertService) === null || _a === void 0 ? void 0 : _a.currentAlert) === this;
19161
19206
  this._closed = true;
19162
19207
  if (this.multiAlertService) {
19163
- this.multiAlertService.close();
19208
+ this.multiAlertService.close(isCurrentAlert);
19164
19209
  }
19165
19210
  this._closedChanged.emit(true);
19166
19211
  }
19167
19212
  open() {
19168
19213
  this._closed = false;
19214
+ if (this.multiAlertService) {
19215
+ this.multiAlertService.open();
19216
+ }
19169
19217
  this._closedChanged.emit(false);
19170
19218
  }
19171
19219
  }
19172
19220
  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 });
19173
- 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" }] });
19221
+ 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" }] });
19174
19222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlert, decorators: [{
19175
19223
  type: Component,
19176
19224
  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" }]
@@ -19189,7 +19237,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19189
19237
  args: ['clrAlertAppLevel']
19190
19238
  }], clrCloseButtonAriaLabel: [{
19191
19239
  type: Input
19192
- }], _closed: [{
19240
+ }], closed: [{
19193
19241
  type: Input,
19194
19242
  args: ['clrAlertClosed']
19195
19243
  }], _closedChanged: [{
@@ -19204,7 +19252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19204
19252
  }] } });
19205
19253
 
19206
19254
  /*
19207
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19255
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
19208
19256
  * This software is released under MIT license.
19209
19257
  * The full license information can be found in LICENSE in the root directory of this project.
19210
19258
  */
@@ -19218,8 +19266,9 @@ ClrAlertItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
19218
19266
  <div class="alert-icon-wrapper">
19219
19267
  <cds-icon
19220
19268
  class="alert-icon"
19269
+ role="img"
19221
19270
  [attr.shape]="iconService.alertIconShape"
19222
- [attr.title]="iconService.alertIconTitle"
19271
+ [attr.aria-label]="iconService.alertIconTitle"
19223
19272
  ></cds-icon>
19224
19273
  </div>
19225
19274
  <ng-content></ng-content>
@@ -19232,8 +19281,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19232
19281
  <div class="alert-icon-wrapper">
19233
19282
  <cds-icon
19234
19283
  class="alert-icon"
19284
+ role="img"
19235
19285
  [attr.shape]="iconService.alertIconShape"
19236
- [attr.title]="iconService.alertIconTitle"
19286
+ [attr.aria-label]="iconService.alertIconTitle"
19237
19287
  ></cds-icon>
19238
19288
  </div>
19239
19289
  <ng-content></ng-content>
@@ -19375,7 +19425,7 @@ class ClrAlerts {
19375
19425
  }
19376
19426
  }
19377
19427
  ClrAlerts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlerts, deps: [{ token: MultiAlertService }], target: i0.ɵɵFactoryTarget.Component });
19378
- 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"] }] });
19428
+ 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"] }] });
19379
19429
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAlerts, decorators: [{
19380
19430
  type: Component,
19381
19431
  args: [{ selector: 'clr-alerts', providers: [MultiAlertService], host: {
@@ -19672,7 +19722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19672
19722
  } });
19673
19723
 
19674
19724
  /*
19675
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
19725
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
19676
19726
  * This software is released under MIT license.
19677
19727
  * The full license information can be found in LICENSE in the root directory of this project.
19678
19728
  */
@@ -19690,6 +19740,24 @@ class ClrHeader {
19690
19740
  },
19691
19741
  });
19692
19742
  }
19743
+ get responsiveNavCommonString() {
19744
+ const myCommonStrings = this.commonStrings.keys;
19745
+ if (this.openNavLevel !== this.responsiveNavCodes.NAV_LEVEL_1) {
19746
+ return myCommonStrings.responsiveNavToggleOpen;
19747
+ }
19748
+ else {
19749
+ return myCommonStrings.responsiveNavToggleClose;
19750
+ }
19751
+ }
19752
+ get responsiveOverflowCommonString() {
19753
+ const myCommonStrings = this.commonStrings.keys;
19754
+ if (this.openNavLevel !== this.responsiveNavCodes.NAV_LEVEL_2) {
19755
+ return myCommonStrings.responsiveNavOverflowOpen;
19756
+ }
19757
+ else {
19758
+ return myCommonStrings.responsiveNavOverflowClose;
19759
+ }
19760
+ }
19693
19761
  // reset triggers. handles cases when an application has different nav levels on different pages.
19694
19762
  resetNavTriggers() {
19695
19763
  this.isNavLevel1OnPage = false;
@@ -19730,9 +19798,7 @@ ClrHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
19730
19798
  type="button"
19731
19799
  *ngIf="isNavLevel1OnPage"
19732
19800
  class="header-hamburger-trigger"
19733
- [attr.aria-label]="
19734
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_1 ? commonStrings.keys.open : commonStrings.keys.close
19735
- "
19801
+ [attr.aria-label]="responsiveNavCommonString"
19736
19802
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_1)"
19737
19803
  >
19738
19804
  <span></span>
@@ -19742,15 +19808,13 @@ ClrHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
19742
19808
  type="button"
19743
19809
  *ngIf="isNavLevel2OnPage"
19744
19810
  class="header-overflow-trigger"
19745
- [attr.aria-label]="
19746
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_2 ? commonStrings.keys.open : commonStrings.keys.close
19747
- "
19811
+ [attr.aria-label]="responsiveOverflowCommonString"
19748
19812
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_2)"
19749
19813
  >
19750
19814
  <span></span>
19751
19815
  </button>
19752
19816
  <div class="header-backdrop" (click)="closeOpenNav()"></div>
19753
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19817
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19754
19818
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrHeader, decorators: [{
19755
19819
  type: Component,
19756
19820
  args: [{
@@ -19760,9 +19824,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19760
19824
  type="button"
19761
19825
  *ngIf="isNavLevel1OnPage"
19762
19826
  class="header-hamburger-trigger"
19763
- [attr.aria-label]="
19764
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_1 ? commonStrings.keys.open : commonStrings.keys.close
19765
- "
19827
+ [attr.aria-label]="responsiveNavCommonString"
19766
19828
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_1)"
19767
19829
  >
19768
19830
  <span></span>
@@ -19772,9 +19834,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
19772
19834
  type="button"
19773
19835
  *ngIf="isNavLevel2OnPage"
19774
19836
  class="header-overflow-trigger"
19775
- [attr.aria-label]="
19776
- openNavLevel !== responsiveNavCodes.NAV_LEVEL_2 ? commonStrings.keys.open : commonStrings.keys.close
19777
- "
19837
+ [attr.aria-label]="responsiveOverflowCommonString"
19778
19838
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_2)"
19779
19839
  >
19780
19840
  <span></span>
@@ -20519,7 +20579,7 @@ ClrTabs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0
20519
20579
  </ng-container>
20520
20580
  </ul>
20521
20581
  <ng-container #tabContentViewContainer></ng-container>
20522
- `, 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" }] });
20582
+ `, 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" }] });
20523
20583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTabs, decorators: [{
20524
20584
  type: Component,
20525
20585
  args: [{
@@ -20801,7 +20861,7 @@ class ClrVerticalNav {
20801
20861
  }
20802
20862
  }
20803
20863
  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 });
20804
- 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" }] });
20864
+ 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" }] });
20805
20865
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrVerticalNav, decorators: [{
20806
20866
  type: Component,
20807
20867
  args: [{ selector: 'clr-vertical-nav', providers: [VerticalNavService, VerticalNavIconService, VerticalNavGroupRegistrationService], host: {
@@ -20844,7 +20904,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
20844
20904
  }] });
20845
20905
 
20846
20906
  /*
20847
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
20907
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
20848
20908
  * This software is released under MIT license.
20849
20909
  * The full license information can be found in LICENSE in the root directory of this project.
20850
20910
  */
@@ -20858,6 +20918,7 @@ class ClrVerticalNavGroup {
20858
20918
  this._navService = _navService;
20859
20919
  this.commonStrings = commonStrings;
20860
20920
  this.wasExpanded = false;
20921
+ this.groupLabel = this.commonStrings.keys.verticalNavGroupToggle;
20861
20922
  this.expandedChange = new EventEmitter(true);
20862
20923
  this._subscriptions = [];
20863
20924
  this._expandAnimationState = COLLAPSED_STATE;
@@ -20967,7 +21028,7 @@ class ClrVerticalNavGroup {
20967
21028
  }
20968
21029
  }
20969
21030
  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 });
20970
- 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: [
21031
+ 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: [
20971
21032
  trigger('clrExpand', [
20972
21033
  state(EXPANDED_STATE, style({ height: '*' })),
20973
21034
  state(COLLAPSED_STATE, style({ height: 0, 'overflow-y': 'hidden', visibility: 'hidden' })),
@@ -20982,10 +21043,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
20982
21043
  state(COLLAPSED_STATE, style({ height: 0, 'overflow-y': 'hidden', visibility: 'hidden' })),
20983
21044
  transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, animate('0.2s ease-in-out')),
20984
21045
  ]),
20985
- ], 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" }]
21046
+ ], 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" }]
20986
21047
  }], ctorParameters: function () { return [{ type: IfExpandService }, { type: VerticalNavGroupRegistrationService }, { type: VerticalNavGroupService }, { type: VerticalNavService }, { type: ClrCommonStringsService }]; }, propDecorators: { expanded: [{
20987
21048
  type: HostBinding,
20988
21049
  args: ['class.is-expanded']
21050
+ }], groupLabel: [{
21051
+ type: Input,
21052
+ args: ['clrVerticalNavGroupLabel']
20989
21053
  }], userExpandedInput: [{
20990
21054
  type: Input,
20991
21055
  args: ['clrVerticalNavGroupExpanded']
@@ -21217,7 +21281,7 @@ class ClrModal {
21217
21281
  }
21218
21282
  }
21219
21283
  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 });
21220
- 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: [
21284
+ 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: [
21221
21285
  trigger('fadeDown', [
21222
21286
  transition('* => false', [style({ opacity: 0, transform: 'translate(0, -25%)' }), animate('0.2s ease-in-out')]),
21223
21287
  transition('false => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' }))]),
@@ -21247,7 +21311,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
21247
21311
  transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
21248
21312
  transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
21249
21313
  ]),
21250
- ], 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" }]
21314
+ ], 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" }]
21251
21315
  }], ctorParameters: function () {
21252
21316
  return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
21253
21317
  type: Inject,
@@ -21292,7 +21356,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
21292
21356
  }] } });
21293
21357
 
21294
21358
  /*
21295
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
21359
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21296
21360
  * This software is released under MIT license.
21297
21361
  * The full license information can be found in LICENSE in the root directory of this project.
21298
21362
  */
@@ -21303,18 +21367,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
21303
21367
  * the overflow scroll being focused.
21304
21368
  */
21305
21369
  class ClrModalBody {
21306
- constructor(ngZone, renderer, host) {
21370
+ constructor(renderer, host, ngZone) {
21371
+ this.renderer = renderer;
21372
+ this.host = host;
21307
21373
  this.tabindex = '0';
21308
21374
  this.unlisteners = [];
21309
- renderer.setAttribute(host.nativeElement, 'tabindex', this.tabindex);
21310
21375
  ngZone.runOutsideAngular(() => {
21311
- this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
21376
+ new ResizeObserver(() => this.addOrRemoveTabIndex()).observe(this.host.nativeElement);
21377
+ this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
21312
21378
  // set the tabindex binding back when click is completed with mouseup
21313
- renderer.setAttribute(host.nativeElement, 'tabindex', this.tabindex);
21314
- }), renderer.listen(host.nativeElement, 'mousedown', () => {
21379
+ this.addOrRemoveTabIndex();
21380
+ }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
21315
21381
  // tabindex = 0 binding should be removed
21316
21382
  // so it won't be focused when click starts with mousedown
21317
- renderer.removeAttribute(host.nativeElement, 'tabindex');
21383
+ this.removeTabIndex();
21318
21384
  }));
21319
21385
  });
21320
21386
  }
@@ -21323,13 +21389,28 @@ class ClrModalBody {
21323
21389
  this.unlisteners.pop()();
21324
21390
  }
21325
21391
  }
21392
+ addTabIndex() {
21393
+ this.renderer.setAttribute(this.host.nativeElement, 'tabindex', this.tabindex);
21394
+ }
21395
+ removeTabIndex() {
21396
+ this.renderer.removeAttribute(this.host.nativeElement, 'tabindex');
21397
+ }
21398
+ addOrRemoveTabIndex() {
21399
+ const modalBody = this.host.nativeElement.parentElement;
21400
+ if (modalBody.clientHeight < modalBody.scrollHeight) {
21401
+ this.addTabIndex();
21402
+ }
21403
+ else {
21404
+ this.removeTabIndex();
21405
+ }
21406
+ }
21326
21407
  }
21327
- 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 });
21408
+ 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 });
21328
21409
  ClrModalBody.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ClrModalBody, selector: ".modal-body", ngImport: i0 });
21329
21410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrModalBody, decorators: [{
21330
21411
  type: Directive,
21331
21412
  args: [{ selector: '.modal-body' }]
21332
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; } });
21413
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; } });
21333
21414
 
21334
21415
  /*
21335
21416
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -22254,7 +22335,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
22254
22335
  }] });
22255
22336
 
22256
22337
  /*
22257
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
22338
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22258
22339
  * This software is released under MIT license.
22259
22340
  * The full license information can be found in LICENSE in the root directory of this project.
22260
22341
  */
@@ -22999,7 +23080,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
22999
23080
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
23000
23081
 
23001
23082
  /*
23002
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23083
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23003
23084
  * This software is released under MIT license.
23004
23085
  * The full license information can be found in LICENSE in the root directory of this project.
23005
23086
  */
@@ -23675,129 +23756,468 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
23675
23756
  * This software is released under MIT license.
23676
23757
  * The full license information can be found in LICENSE in the root directory of this project.
23677
23758
  */
23678
- class ClrWizardStepnavItem {
23679
- constructor(navService, pageCollection) {
23680
- this.navService = navService;
23681
- this.pageCollection = pageCollection;
23759
+ const defaultAnimationTiming = '0.2s ease-in-out';
23760
+
23761
+ /*
23762
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23763
+ * This software is released under MIT license.
23764
+ * The full license information can be found in LICENSE in the root directory of this project.
23765
+ */
23766
+ function collapse() {
23767
+ 'use strict';
23768
+ return [
23769
+ state('true', style({ height: 0, 'overflow-y': 'hidden' })),
23770
+ transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),
23771
+ transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),
23772
+ ];
23773
+ }
23774
+
23775
+ /*
23776
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23777
+ * This software is released under MIT license.
23778
+ * The full license information can be found in LICENSE in the root directory of this project.
23779
+ */
23780
+
23781
+ /*
23782
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23783
+ * This software is released under MIT license.
23784
+ * The full license information can be found in LICENSE in the root directory of this project.
23785
+ */
23786
+ function fade(opacity = 1) {
23787
+ return [
23788
+ transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),
23789
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),
23790
+ ];
23791
+ }
23792
+
23793
+ /*
23794
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23795
+ * This software is released under MIT license.
23796
+ * The full license information can be found in LICENSE in the root directory of this project.
23797
+ */
23798
+
23799
+ /*
23800
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23801
+ * This software is released under MIT license.
23802
+ * The full license information can be found in LICENSE in the root directory of this project.
23803
+ */
23804
+ function fadeSlide(direction) {
23805
+ let transform = null;
23806
+ if (direction === 'up') {
23807
+ transform = 'translate(0, 25%)';
23682
23808
  }
23683
- pageGuard() {
23684
- if (!this.page) {
23685
- throw new Error('Wizard stepnav item is not associated with a wizard page.');
23686
- }
23809
+ else if (direction === 'down') {
23810
+ transform = 'translate(0, -25%)';
23687
23811
  }
23688
- get id() {
23689
- this.pageGuard();
23690
- return this.pageCollection.getStepItemIdForPage(this.page);
23812
+ else if (direction === 'left') {
23813
+ transform = 'translate(25%, 0)';
23691
23814
  }
23692
- get stepAriaCurrent() {
23693
- return this.isCurrent && 'step';
23815
+ else if (direction === 'right') {
23816
+ transform = 'translate(-25%, 0)';
23694
23817
  }
23695
- get isDisabled() {
23696
- this.pageGuard();
23697
- return this.page.disabled || this.navService.wizardStopNavigation || this.navService.wizardDisableStepnav;
23818
+ else {
23819
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
23698
23820
  }
23699
- get isCurrent() {
23700
- this.pageGuard();
23701
- return this.page.current;
23821
+ return [
23822
+ transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
23823
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
23824
+ ];
23825
+ }
23826
+
23827
+ /*
23828
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23829
+ * This software is released under MIT license.
23830
+ * The full license information can be found in LICENSE in the root directory of this project.
23831
+ */
23832
+
23833
+ /*
23834
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23835
+ * This software is released under MIT license.
23836
+ * The full license information can be found in LICENSE in the root directory of this project.
23837
+ */
23838
+ function slide(direction) {
23839
+ let transform = null;
23840
+ if (direction === 'up') {
23841
+ transform = 'translate(0, 25%)';
23702
23842
  }
23703
- get isComplete() {
23704
- this.pageGuard();
23705
- return this.page.completed;
23843
+ else if (direction === 'down') {
23844
+ transform = 'translate(0, -25%)';
23706
23845
  }
23707
- get hasError() {
23708
- this.pageGuard();
23709
- return this.page.hasError && this.isComplete;
23846
+ else if (direction === 'left') {
23847
+ transform = 'translate(25%, 0)';
23710
23848
  }
23711
- get canNavigate() {
23712
- this.pageGuard();
23713
- return this.pageCollection.previousPageIsCompleted(this.page);
23849
+ else if (direction === 'right') {
23850
+ transform = 'translate(-25%, 0)';
23714
23851
  }
23715
- click() {
23716
- this.pageGuard();
23717
- // if we click on our own stepnav or a disabled stepnav, we don't want to do anything
23718
- if (this.isDisabled || this.isCurrent) {
23719
- return;
23720
- }
23721
- this.navService.goTo(this.page);
23852
+ else {
23853
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
23722
23854
  }
23855
+ return [
23856
+ transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
23857
+ transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
23858
+ ];
23723
23859
  }
23724
- 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 });
23725
- 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: `
23726
- <button
23727
- type="button"
23728
- class="btn btn-link clr-wizard-stepnav-link"
23729
- (click)="click()"
23730
- [attr.disabled]="isDisabled ? '' : null"
23731
- >
23732
- <span class="clr-wizard-stepnav-link-suffix">
23733
- <cds-icon
23734
- shape="error-standard"
23735
- status="danger"
23736
- class="clr-wizard-stepnav-item-error-icon"
23737
- *ngIf="hasError"
23738
- ></cds-icon>
23739
- <ng-content *ngIf="!hasError"></ng-content>
23740
- </span>
23741
- <span class="clr-wizard-stepnav-link-title">
23742
- <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
23743
- </span>
23744
- </button>
23745
- `, 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"] }] });
23746
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
23747
- type: Component,
23748
- args: [{
23749
- selector: '[clr-wizard-stepnav-item]',
23750
- template: `
23751
- <button
23752
- type="button"
23753
- class="btn btn-link clr-wizard-stepnav-link"
23754
- (click)="click()"
23755
- [attr.disabled]="isDisabled ? '' : null"
23756
- >
23757
- <span class="clr-wizard-stepnav-link-suffix">
23758
- <cds-icon
23759
- shape="error-standard"
23760
- status="danger"
23761
- class="clr-wizard-stepnav-item-error-icon"
23762
- *ngIf="hasError"
23763
- ></cds-icon>
23764
- <ng-content *ngIf="!hasError"></ng-content>
23765
- </span>
23766
- <span class="clr-wizard-stepnav-link-title">
23767
- <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
23768
- </span>
23769
- </button>
23770
- `,
23771
- host: {
23772
- '[id]': 'id',
23773
- '[attr.aria-current]': 'stepAriaCurrent',
23774
- '[attr.aria-controls]': 'id',
23775
- '[class.clr-nav-link]': 'true',
23776
- '[class.nav-item]': 'true',
23777
- '[class.active]': 'isCurrent',
23778
- '[class.disabled]': 'isDisabled',
23779
- '[class.no-click]': '!canNavigate',
23780
- '[class.complete]': 'isComplete',
23781
- '[class.error]': 'hasError',
23782
- },
23783
- }]
23784
- }], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }]; }, propDecorators: { page: [{
23785
- type: Input,
23786
- args: ['page']
23787
- }] } });
23788
23860
 
23789
23861
  /*
23790
23862
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23791
23863
  * This software is released under MIT license.
23792
23864
  * The full license information can be found in LICENSE in the root directory of this project.
23793
23865
  */
23794
- class ClrWizardStepnav {
23795
- constructor(pageService) {
23796
- this.pageService = pageService;
23797
- }
23798
- }
23799
- ClrWizardStepnav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnav, deps: [{ token: PageCollectionService }], target: i0.ɵɵFactoryTarget.Component });
23800
- 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: `
23866
+
23867
+ /*
23868
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23869
+ * This software is released under MIT license.
23870
+ * The full license information can be found in LICENSE in the root directory of this project.
23871
+ */
23872
+
23873
+ /*
23874
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23875
+ * This software is released under MIT license.
23876
+ * The full license information can be found in LICENSE in the root directory of this project.
23877
+ */
23878
+
23879
+ /*
23880
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23881
+ * This software is released under MIT license.
23882
+ * The full license information can be found in LICENSE in the root directory of this project.
23883
+ */
23884
+
23885
+ /*
23886
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23887
+ * This software is released under MIT license.
23888
+ * The full license information can be found in LICENSE in the root directory of this project.
23889
+ */
23890
+
23891
+ /*
23892
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
23893
+ * This software is released under MIT license.
23894
+ * The full license information can be found in LICENSE in the root directory of this project.
23895
+ */
23896
+ var ClrAriaLivePoliteness;
23897
+ (function (ClrAriaLivePoliteness) {
23898
+ ClrAriaLivePoliteness["off"] = "off";
23899
+ ClrAriaLivePoliteness["polite"] = "polite";
23900
+ ClrAriaLivePoliteness["assertive"] = "assertive";
23901
+ })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
23902
+ /**
23903
+ * Time in milliseconds before inserting the content into the container
23904
+ */
23905
+ const ARIA_LIVE_TICK = 100;
23906
+ /**
23907
+ * @deprecated
23908
+ *
23909
+ * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
23910
+ * Please consider using the LiveAnnouncer in the Angular Material CDK
23911
+ * if your project needs this functionality.
23912
+ * More info: https://material.angular.io/cdk/a11y/overview#example-1
23913
+ *
23914
+ * This service handle `aria-live` accessibility attribute. The issue is that you need
23915
+ * to have the DOM Element with attribute `aria-live` before you could insert content
23916
+ * and SR (Screen Reader) pick the change and announce it.
23917
+ *
23918
+ * ```typescript
23919
+ * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
23920
+ *
23921
+ * @Component({
23922
+ * selector: 'clr-demo-component',
23923
+ * providers: [ClrAriaLiveService],
23924
+ * template: `
23925
+ * <ng-content></ng-content>
23926
+ * `,
23927
+ * })
23928
+ * export class DemoComponent {
23929
+ * constructor(ariaLiveService: ClrAriaLiveService) {}
23930
+ *
23931
+ * public actionThatWillTriggerChange() {
23932
+ * this.ariaLiveService.announce('message that I want to announce to SR');
23933
+ * }
23934
+ * }
23935
+ * ```
23936
+ *
23937
+ */
23938
+ class ClrAriaLiveService {
23939
+ constructor(ngZone, _document, platformId) {
23940
+ this.ngZone = ngZone;
23941
+ this.platformId = platformId;
23942
+ this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
23943
+ this.document = _document;
23944
+ }
23945
+ /**
23946
+ * get access to the internal HTML `id` that gonna be used for the AriaLive container.
23947
+ * @return ID of the DOM Element as string.
23948
+ */
23949
+ get id() {
23950
+ return this._id;
23951
+ }
23952
+ /**
23953
+ * Append text content inside the AriaLive Container. This method will check if the
23954
+ * DOM Element is existing if not it will create one for us and the will apply the text.
23955
+ *
23956
+ * ```typescript
23957
+ * this.ariaLiveService.announce(this.el.nativeElement);
23958
+ * // or
23959
+ * this.ariaLiveService.announce('Message to announce to SR');
23960
+ * ```
23961
+ *
23962
+ * @remark
23963
+ * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
23964
+ * The reason for that is that we don't want to do additional work if the SR will ignore it.
23965
+ *
23966
+ * @param message - This could be simple string or HTMLElement
23967
+ * @param politeness - 'polite', 'assertive' or 'off'
23968
+ */
23969
+ announce(message, politeness = ClrAriaLivePoliteness.polite) {
23970
+ if (politeness === ClrAriaLivePoliteness.off) {
23971
+ return;
23972
+ }
23973
+ if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
23974
+ this.ariaLiveElement = this.createContainer();
23975
+ }
23976
+ message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
23977
+ // when there is no message do NOTHING!
23978
+ if (!message) {
23979
+ return;
23980
+ }
23981
+ this.ariaLiveElement.setAttribute('aria-live', politeness);
23982
+ // This 100ms timeout is necessary for some browser + screen-reader combinations:
23983
+ // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
23984
+ // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
23985
+ // second time without clearing and then using a non-zero delay.
23986
+ // (using JAWS 17 at time of this writing).
23987
+ this.ngZone.runOutsideAngular(() => {
23988
+ // This clearTimeout will stop all older messages from announcing
23989
+ // in the case where the messages are comming too fast we gonna try to append only
23990
+ // the last one. That's what the SR will try to do anyway.
23991
+ clearTimeout(this.previousTimeout);
23992
+ this.previousTimeout = setTimeout(() => {
23993
+ this.ariaLiveElement.textContent = message;
23994
+ }, ARIA_LIVE_TICK);
23995
+ });
23996
+ }
23997
+ /**
23998
+ * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
23999
+ * container from the document.
24000
+ */
24001
+ ngOnDestroy() {
24002
+ clearTimeout(this.previousTimeout);
24003
+ if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
24004
+ this.document.body.removeChild(this.ariaLiveElement);
24005
+ this.ariaLiveElement = null;
24006
+ }
24007
+ }
24008
+ /**
24009
+ * Create AriaLive DOM element as a last child of the document.
24010
+ * After the element is created, we gonna apply Clarity class to hide it from
24011
+ * the screen and set the `aria-live` politness.
24012
+ *
24013
+ * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
24014
+ *
24015
+ * @remark
24016
+ * Calling this method multiple times will create multiple DOM Elements, that
24017
+ * won't be tracked and will be GC after the service is destroyed.
24018
+ *
24019
+ * @return AriaLive container as HTMLElement
24020
+ *
24021
+ */
24022
+ createContainer() {
24023
+ const ariaLiveElement = this.document.createElement('div');
24024
+ ariaLiveElement.setAttribute('id', this.id);
24025
+ // Use clarity screen reader class to hide the dom element
24026
+ // and fix the scrollbar shake
24027
+ ariaLiveElement.classList.add('clr-sr-only');
24028
+ ariaLiveElement.setAttribute('aria-atomic', 'true');
24029
+ ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
24030
+ this.document.body.appendChild(ariaLiveElement);
24031
+ return ariaLiveElement;
24032
+ }
24033
+ }
24034
+ 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 });
24035
+ ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
24036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, decorators: [{
24037
+ type: Injectable,
24038
+ args: [{
24039
+ providedIn: 'root',
24040
+ }]
24041
+ }], ctorParameters: function () {
24042
+ return [{ type: i0.NgZone }, { type: undefined, decorators: [{
24043
+ type: Inject,
24044
+ args: [DOCUMENT]
24045
+ }] }, { type: undefined, decorators: [{
24046
+ type: Inject,
24047
+ args: [PLATFORM_ID]
24048
+ }] }];
24049
+ } });
24050
+
24051
+ /*
24052
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24053
+ * This software is released under MIT license.
24054
+ * The full license information can be found in LICENSE in the root directory of this project.
24055
+ */
24056
+
24057
+ /*
24058
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24059
+ * This software is released under MIT license.
24060
+ * The full license information can be found in LICENSE in the root directory of this project.
24061
+ */
24062
+
24063
+ /*
24064
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24065
+ * This software is released under MIT license.
24066
+ * The full license information can be found in LICENSE in the root directory of this project.
24067
+ *
24068
+ */
24069
+
24070
+ /*
24071
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24072
+ * This software is released under MIT license.
24073
+ * The full license information can be found in LICENSE in the root directory of this project.
24074
+ */
24075
+
24076
+ /*
24077
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24078
+ * This software is released under MIT license.
24079
+ * The full license information can be found in LICENSE in the root directory of this project.
24080
+ */
24081
+
24082
+ /*
24083
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24084
+ * This software is released under MIT license.
24085
+ * The full license information can be found in LICENSE in the root directory of this project.
24086
+ */
24087
+
24088
+ /*
24089
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
24090
+ * This software is released under MIT license.
24091
+ * The full license information can be found in LICENSE in the root directory of this project.
24092
+ */
24093
+ class ClrWizardStepnavItem {
24094
+ constructor(navService, pageCollection, commonStrings) {
24095
+ this.navService = navService;
24096
+ this.pageCollection = pageCollection;
24097
+ this.commonStrings = commonStrings;
24098
+ }
24099
+ pageGuard() {
24100
+ if (!this.page) {
24101
+ throw new Error('Wizard stepnav item is not associated with a wizard page.');
24102
+ }
24103
+ }
24104
+ get id() {
24105
+ this.pageGuard();
24106
+ return this.pageCollection.getStepItemIdForPage(this.page);
24107
+ }
24108
+ get stepAriaCurrent() {
24109
+ return this.isCurrent && 'step';
24110
+ }
24111
+ get isDisabled() {
24112
+ this.pageGuard();
24113
+ return this.page.disabled || this.navService.wizardStopNavigation || this.navService.wizardDisableStepnav;
24114
+ }
24115
+ get isCurrent() {
24116
+ this.pageGuard();
24117
+ return this.page.current;
24118
+ }
24119
+ get isComplete() {
24120
+ this.pageGuard();
24121
+ return this.page.completed;
24122
+ }
24123
+ get hasError() {
24124
+ this.pageGuard();
24125
+ return this.page.hasError && this.isComplete;
24126
+ }
24127
+ get canNavigate() {
24128
+ this.pageGuard();
24129
+ return this.pageCollection.previousPageIsCompleted(this.page);
24130
+ }
24131
+ click() {
24132
+ this.pageGuard();
24133
+ // if we click on our own stepnav or a disabled stepnav, we don't want to do anything
24134
+ if (this.isDisabled || this.isCurrent) {
24135
+ return;
24136
+ }
24137
+ this.navService.goTo(this.page);
24138
+ }
24139
+ }
24140
+ 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 });
24141
+ 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: `
24142
+ <button
24143
+ type="button"
24144
+ class="btn btn-link clr-wizard-stepnav-link"
24145
+ (click)="click()"
24146
+ [attr.disabled]="isDisabled ? '' : null"
24147
+ >
24148
+ <span class="clr-wizard-stepnav-link-suffix">
24149
+ <cds-icon
24150
+ shape="error-standard"
24151
+ status="danger"
24152
+ class="clr-wizard-stepnav-item-error-icon"
24153
+ *ngIf="hasError"
24154
+ ></cds-icon>
24155
+ <ng-content *ngIf="!hasError"></ng-content>
24156
+ </span>
24157
+ <span class="clr-wizard-stepnav-link-title">
24158
+ <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
24159
+ </span>
24160
+ <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
24161
+ <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
24162
+ </button>
24163
+ `, 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"] }] });
24164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
24165
+ type: Component,
24166
+ args: [{
24167
+ selector: '[clr-wizard-stepnav-item]',
24168
+ template: `
24169
+ <button
24170
+ type="button"
24171
+ class="btn btn-link clr-wizard-stepnav-link"
24172
+ (click)="click()"
24173
+ [attr.disabled]="isDisabled ? '' : null"
24174
+ >
24175
+ <span class="clr-wizard-stepnav-link-suffix">
24176
+ <cds-icon
24177
+ shape="error-standard"
24178
+ status="danger"
24179
+ class="clr-wizard-stepnav-item-error-icon"
24180
+ *ngIf="hasError"
24181
+ ></cds-icon>
24182
+ <ng-content *ngIf="!hasError"></ng-content>
24183
+ </span>
24184
+ <span class="clr-wizard-stepnav-link-title">
24185
+ <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
24186
+ </span>
24187
+ <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
24188
+ <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
24189
+ </button>
24190
+ `,
24191
+ host: {
24192
+ '[id]': 'id',
24193
+ '[attr.aria-current]': 'stepAriaCurrent',
24194
+ '[attr.aria-controls]': 'id',
24195
+ '[class.clr-nav-link]': 'true',
24196
+ '[class.nav-item]': 'true',
24197
+ '[class.active]': 'isCurrent',
24198
+ '[class.disabled]': 'isDisabled',
24199
+ '[class.no-click]': '!canNavigate',
24200
+ '[class.complete]': 'isComplete',
24201
+ '[class.error]': 'hasError',
24202
+ },
24203
+ }]
24204
+ }], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }]; }, propDecorators: { page: [{
24205
+ type: Input,
24206
+ args: ['page']
24207
+ }] } });
24208
+
24209
+ /*
24210
+ * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24211
+ * This software is released under MIT license.
24212
+ * The full license information can be found in LICENSE in the root directory of this project.
24213
+ */
24214
+ class ClrWizardStepnav {
24215
+ constructor(pageService) {
24216
+ this.pageService = pageService;
24217
+ }
24218
+ }
24219
+ ClrWizardStepnav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnav, deps: [{ token: PageCollectionService }], target: i0.ɵɵFactoryTarget.Component });
24220
+ 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: `
23801
24221
  <div class="clr-wizard-stepnav-list">
23802
24222
  <div
23803
24223
  *ngFor="let page of pageService.pages; let i = index"
@@ -23808,7 +24228,7 @@ ClrWizardStepnav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
23808
24228
  {{ i + 1 }}
23809
24229
  </div>
23810
24230
  </div>
23811
- `, isInline: true, components: [{ type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: ["page"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
24231
+ `, isInline: true, components: [{ type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: ["page"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
23812
24232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizardStepnav, decorators: [{
23813
24233
  type: Component,
23814
24234
  args: [{
@@ -23830,7 +24250,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
23830
24250
  }], ctorParameters: function () { return [{ type: PageCollectionService }]; } });
23831
24251
 
23832
24252
  /*
23833
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24253
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23834
24254
  * This software is released under MIT license.
23835
24255
  * The full license information can be found in LICENSE in the root directory of this project.
23836
24256
  */
@@ -24191,7 +24611,14 @@ class ClrWizard {
24191
24611
  return this.navService.wizardFinished.subscribe(() => this.emitWizardFinished());
24192
24612
  }
24193
24613
  listenForPageChanges() {
24194
- return this.navService.currentPageChanged.subscribe(() => this.currentPageChanged.emit());
24614
+ return this.navService.currentPageChanged.subscribe(() => {
24615
+ var _a;
24616
+ // Added to address VPAT-749:
24617
+ // When clicking on a wizard tab, focus should move to that
24618
+ // tabs content to make the wizard more accessible.
24619
+ (_a = this.wizardTitle) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
24620
+ this.currentPageChanged.emit();
24621
+ });
24195
24622
  }
24196
24623
  updateNavOnPageChanges() {
24197
24624
  const changes = this.differ.diff(this.pages);
@@ -24214,7 +24641,7 @@ class ClrWizard {
24214
24641
  }
24215
24642
  }
24216
24643
  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 });
24217
- 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" }] });
24644
+ 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" }] });
24218
24645
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrWizard, decorators: [{
24219
24646
  type: Component,
24220
24647
  args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
@@ -24552,13 +24979,6 @@ var AccordionStatus;
24552
24979
  AccordionStatus["Complete"] = "complete";
24553
24980
  })(AccordionStatus || (AccordionStatus = {}));
24554
24981
 
24555
- /*
24556
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24557
- * This software is released under MIT license.
24558
- * The full license information can be found in LICENSE in the root directory of this project.
24559
- */
24560
- const defaultAnimationTiming = '0.2s ease-in-out';
24561
-
24562
24982
  /*
24563
24983
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
24564
24984
  * This software is released under MIT license.
@@ -24656,10 +25076,11 @@ class AccordionModel {
24656
25076
  }
24657
25077
  togglePanel(panelId, open) {
24658
25078
  const panelIsOpen = this._panels[panelId].open;
24659
- if (this.strategy === AccordionStrategy.Default) {
25079
+ const newOpenState = open !== undefined ? open : !panelIsOpen;
25080
+ if (newOpenState && this.strategy === AccordionStrategy.Default) {
24660
25081
  this.closeAllPanels();
24661
25082
  }
24662
- this._panels[panelId].open = open !== undefined ? open : !panelIsOpen;
25083
+ this._panels[panelId].open = newOpenState;
24663
25084
  }
24664
25085
  disablePanel(panelId, disabled) {
24665
25086
  this._panels[panelId].disabled = disabled;
@@ -24790,10 +25211,10 @@ class ClrAccordionPanel {
24790
25211
  }
24791
25212
  }
24792
25213
  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 });
24793
- 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 });
25214
+ 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 });
24794
25215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAccordionPanel, decorators: [{
24795
25216
  type: Component,
24796
- 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" }]
25217
+ 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" }]
24797
25218
  }], ctorParameters: function () {
24798
25219
  return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }, { type: undefined, decorators: [{
24799
25220
  type: Inject,
@@ -25226,10 +25647,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
25226
25647
  }
25227
25648
  }
25228
25649
  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 });
25229
- 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 });
25650
+ 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 });
25230
25651
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrStepperPanel, decorators: [{
25231
25652
  type: Component,
25232
- 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" }]
25653
+ 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" }]
25233
25654
  }], ctorParameters: function () {
25234
25655
  return [{ type: undefined, decorators: [{
25235
25656
  type: Inject,
@@ -25545,7 +25966,7 @@ ClrProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version:
25545
25966
  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: `
25546
25967
  <progress [id]="id" [attr.max]="max" [attr.value]="value" [attr.data-displayval]="displayValue"></progress>
25547
25968
  <span *ngIf="displayStringValue()">{{ displayValue }}</span>
25548
- `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
25969
+ `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
25549
25970
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrProgressBar, decorators: [{
25550
25971
  type: Component,
25551
25972
  args: [{
@@ -25823,7 +26244,7 @@ ClrTimelineStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
25823
26244
  <ng-template #processing>
25824
26245
  <clr-spinner clrMedium [attr.aria-label]="iconAriaLabel"></clr-spinner>
25825
26246
  </ng-template>
25826
- `, 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" }] });
26247
+ `, 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" }] });
25827
26248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrTimelineStep, decorators: [{
25828
26249
  type: Component,
25829
26250
  args: [{
@@ -25986,143 +26407,29 @@ ClarityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
25986
26407
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClarityModule, decorators: [{
25987
26408
  type: NgModule,
25988
26409
  args: [{
25989
- exports: [
25990
- ClrEmphasisModule,
25991
- ClrDataModule,
25992
- ClrIconModule,
25993
- ClrModalModule,
25994
- ClrLoadingModule,
25995
- ClrConditionalModule,
25996
- ClrFocusTrapModule,
25997
- ClrFocusOnViewInitModule,
25998
- ClrButtonModule,
25999
- ClrFormsModule,
26000
- ClrLayoutModule,
26001
- ClrPopoverModule,
26002
- ClrWizardModule,
26003
- ClrDragAndDropModule,
26004
- ClrStepperModule,
26005
- ClrSpinnerModule,
26006
- ClrProgressBarModule,
26007
- ClrPopoverModuleNext,
26008
- ClrTimelineModule,
26009
- ],
26010
- }]
26011
- }] });
26012
-
26013
- /*
26014
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26015
- * This software is released under MIT license.
26016
- * The full license information can be found in LICENSE in the root directory of this project.
26017
- */
26018
-
26019
- /*
26020
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26021
- * This software is released under MIT license.
26022
- * The full license information can be found in LICENSE in the root directory of this project.
26023
- */
26024
-
26025
- /*
26026
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26027
- * This software is released under MIT license.
26028
- * The full license information can be found in LICENSE in the root directory of this project.
26029
- */
26030
-
26031
- /*
26032
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26033
- * This software is released under MIT license.
26034
- * The full license information can be found in LICENSE in the root directory of this project.
26035
- */
26036
-
26037
- /*
26038
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26039
- * This software is released under MIT license.
26040
- * The full license information can be found in LICENSE in the root directory of this project.
26041
- */
26042
-
26043
- /*
26044
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26045
- * This software is released under MIT license.
26046
- * The full license information can be found in LICENSE in the root directory of this project.
26047
- */
26048
-
26049
- /*
26050
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26051
- * This software is released under MIT license.
26052
- * The full license information can be found in LICENSE in the root directory of this project.
26053
- */
26054
-
26055
- /*
26056
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26057
- * This software is released under MIT license.
26058
- * The full license information can be found in LICENSE in the root directory of this project.
26059
- */
26060
-
26061
- /*
26062
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26063
- * This software is released under MIT license.
26064
- * The full license information can be found in LICENSE in the root directory of this project.
26065
- */
26066
-
26067
- /*
26068
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26069
- * This software is released under MIT license.
26070
- * The full license information can be found in LICENSE in the root directory of this project.
26071
- */
26072
-
26073
- /*
26074
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26075
- * This software is released under MIT license.
26076
- * The full license information can be found in LICENSE in the root directory of this project.
26077
- */
26078
-
26079
- /*
26080
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26081
- * This software is released under MIT license.
26082
- * The full license information can be found in LICENSE in the root directory of this project.
26083
- */
26084
-
26085
- /*
26086
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26087
- * This software is released under MIT license.
26088
- * The full license information can be found in LICENSE in the root directory of this project.
26089
- */
26090
-
26091
- /*
26092
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26093
- * This software is released under MIT license.
26094
- * The full license information can be found in LICENSE in the root directory of this project.
26095
- */
26096
-
26097
- /*
26098
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26099
- * This software is released under MIT license.
26100
- * The full license information can be found in LICENSE in the root directory of this project.
26101
- */
26102
-
26103
- /*
26104
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26105
- * This software is released under MIT license.
26106
- * The full license information can be found in LICENSE in the root directory of this project.
26107
- */
26108
-
26109
- /*
26110
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26111
- * This software is released under MIT license.
26112
- * The full license information can be found in LICENSE in the root directory of this project.
26113
- */
26114
-
26115
- /*
26116
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26117
- * This software is released under MIT license.
26118
- * The full license information can be found in LICENSE in the root directory of this project.
26119
- */
26120
-
26121
- /*
26122
- * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26123
- * This software is released under MIT license.
26124
- * The full license information can be found in LICENSE in the root directory of this project.
26125
- */
26410
+ exports: [
26411
+ ClrEmphasisModule,
26412
+ ClrDataModule,
26413
+ ClrIconModule,
26414
+ ClrModalModule,
26415
+ ClrLoadingModule,
26416
+ ClrConditionalModule,
26417
+ ClrFocusTrapModule,
26418
+ ClrFocusOnViewInitModule,
26419
+ ClrButtonModule,
26420
+ ClrFormsModule,
26421
+ ClrLayoutModule,
26422
+ ClrPopoverModule,
26423
+ ClrWizardModule,
26424
+ ClrDragAndDropModule,
26425
+ ClrStepperModule,
26426
+ ClrSpinnerModule,
26427
+ ClrProgressBarModule,
26428
+ ClrPopoverModuleNext,
26429
+ ClrTimelineModule,
26430
+ ],
26431
+ }]
26432
+ }] });
26126
26433
 
26127
26434
  /*
26128
26435
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26189,16 +26496,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
26189
26496
  * This software is released under MIT license.
26190
26497
  * The full license information can be found in LICENSE in the root directory of this project.
26191
26498
  */
26192
- const CLR_MENU_POSITIONS = [
26193
- 'bottom-left',
26194
- 'bottom-right',
26195
- 'top-left',
26196
- 'top-right',
26197
- 'left-bottom',
26198
- 'left-top',
26199
- 'right-bottom',
26200
- 'right-top',
26201
- ];
26202
26499
 
26203
26500
  /*
26204
26501
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26229,14 +26526,6 @@ const CLR_MENU_POSITIONS = [
26229
26526
  * This software is released under MIT license.
26230
26527
  * The full license information can be found in LICENSE in the root directory of this project.
26231
26528
  */
26232
- function collapse() {
26233
- 'use strict';
26234
- return [
26235
- state('true', style({ height: 0, 'overflow-y': 'hidden' })),
26236
- transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),
26237
- transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),
26238
- ];
26239
- }
26240
26529
 
26241
26530
  /*
26242
26531
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26249,12 +26538,6 @@ function collapse() {
26249
26538
  * This software is released under MIT license.
26250
26539
  * The full license information can be found in LICENSE in the root directory of this project.
26251
26540
  */
26252
- function fade(opacity = 1) {
26253
- return [
26254
- transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),
26255
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),
26256
- ];
26257
- }
26258
26541
 
26259
26542
  /*
26260
26543
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26267,28 +26550,6 @@ function fade(opacity = 1) {
26267
26550
  * This software is released under MIT license.
26268
26551
  * The full license information can be found in LICENSE in the root directory of this project.
26269
26552
  */
26270
- function fadeSlide(direction) {
26271
- let transform = null;
26272
- if (direction === 'up') {
26273
- transform = 'translate(0, 25%)';
26274
- }
26275
- else if (direction === 'down') {
26276
- transform = 'translate(0, -25%)';
26277
- }
26278
- else if (direction === 'left') {
26279
- transform = 'translate(25%, 0)';
26280
- }
26281
- else if (direction === 'right') {
26282
- transform = 'translate(-25%, 0)';
26283
- }
26284
- else {
26285
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
26286
- }
26287
- return [
26288
- transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
26289
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
26290
- ];
26291
- }
26292
26553
 
26293
26554
  /*
26294
26555
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26301,28 +26562,6 @@ function fadeSlide(direction) {
26301
26562
  * This software is released under MIT license.
26302
26563
  * The full license information can be found in LICENSE in the root directory of this project.
26303
26564
  */
26304
- function slide(direction) {
26305
- let transform = null;
26306
- if (direction === 'up') {
26307
- transform = 'translate(0, 25%)';
26308
- }
26309
- else if (direction === 'down') {
26310
- transform = 'translate(0, -25%)';
26311
- }
26312
- else if (direction === 'left') {
26313
- transform = 'translate(25%, 0)';
26314
- }
26315
- else if (direction === 'right') {
26316
- transform = 'translate(-25%, 0)';
26317
- }
26318
- else {
26319
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
26320
- }
26321
- return [
26322
- transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
26323
- transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
26324
- ];
26325
- }
26326
26565
 
26327
26566
  /*
26328
26567
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26359,160 +26598,6 @@ function slide(direction) {
26359
26598
  * This software is released under MIT license.
26360
26599
  * The full license information can be found in LICENSE in the root directory of this project.
26361
26600
  */
26362
- var ClrAriaLivePoliteness;
26363
- (function (ClrAriaLivePoliteness) {
26364
- ClrAriaLivePoliteness["off"] = "off";
26365
- ClrAriaLivePoliteness["polite"] = "polite";
26366
- ClrAriaLivePoliteness["assertive"] = "assertive";
26367
- })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
26368
- /**
26369
- * Time in milliseconds before inserting the content into the container
26370
- */
26371
- const ARIA_LIVE_TICK = 100;
26372
- /**
26373
- * @deprecated
26374
- *
26375
- * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
26376
- * Please consider using the LiveAnnouncer in the Angular Material CDK
26377
- * if your project needs this functionality.
26378
- * More info: https://material.angular.io/cdk/a11y/overview#example-1
26379
- *
26380
- * This service handle `aria-live` accessibility attribute. The issue is that you need
26381
- * to have the DOM Element with attribute `aria-live` before you could insert content
26382
- * and SR (Screen Reader) pick the change and announce it.
26383
- *
26384
- * ```typescript
26385
- * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
26386
- *
26387
- * @Component({
26388
- * selector: 'clr-demo-component',
26389
- * providers: [ClrAriaLiveService],
26390
- * template: `
26391
- * <ng-content></ng-content>
26392
- * `,
26393
- * })
26394
- * export class DemoComponent {
26395
- * constructor(ariaLiveService: ClrAriaLiveService) {}
26396
- *
26397
- * public actionThatWillTriggerChange() {
26398
- * this.ariaLiveService.announce('message that I want to announce to SR');
26399
- * }
26400
- * }
26401
- * ```
26402
- *
26403
- */
26404
- class ClrAriaLiveService {
26405
- constructor(ngZone, _document, platformId) {
26406
- this.ngZone = ngZone;
26407
- this.platformId = platformId;
26408
- this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
26409
- this.document = _document;
26410
- }
26411
- /**
26412
- * get access to the internal HTML `id` that gonna be used for the AriaLive container.
26413
- * @return ID of the DOM Element as string.
26414
- */
26415
- get id() {
26416
- return this._id;
26417
- }
26418
- /**
26419
- * Append text content inside the AriaLive Container. This method will check if the
26420
- * DOM Element is existing if not it will create one for us and the will apply the text.
26421
- *
26422
- * ```typescript
26423
- * this.ariaLiveService.announce(this.el.nativeElement);
26424
- * // or
26425
- * this.ariaLiveService.announce('Message to announce to SR');
26426
- * ```
26427
- *
26428
- * @remark
26429
- * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
26430
- * The reason for that is that we don't want to do additional work if the SR will ignore it.
26431
- *
26432
- * @param message - This could be simple string or HTMLElement
26433
- * @param politeness - 'polite', 'assertive' or 'off'
26434
- */
26435
- announce(message, politeness = ClrAriaLivePoliteness.polite) {
26436
- if (politeness === ClrAriaLivePoliteness.off) {
26437
- return;
26438
- }
26439
- if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
26440
- this.ariaLiveElement = this.createContainer();
26441
- }
26442
- message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
26443
- // when there is no message do NOTHING!
26444
- if (!message) {
26445
- return;
26446
- }
26447
- this.ariaLiveElement.setAttribute('aria-live', politeness);
26448
- // This 100ms timeout is necessary for some browser + screen-reader combinations:
26449
- // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
26450
- // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
26451
- // second time without clearing and then using a non-zero delay.
26452
- // (using JAWS 17 at time of this writing).
26453
- this.ngZone.runOutsideAngular(() => {
26454
- // This clearTimeout will stop all older messages from announcing
26455
- // in the case where the messages are comming too fast we gonna try to append only
26456
- // the last one. That's what the SR will try to do anyway.
26457
- clearTimeout(this.previousTimeout);
26458
- this.previousTimeout = setTimeout(() => {
26459
- this.ariaLiveElement.textContent = message;
26460
- }, ARIA_LIVE_TICK);
26461
- });
26462
- }
26463
- /**
26464
- * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
26465
- * container from the document.
26466
- */
26467
- ngOnDestroy() {
26468
- clearTimeout(this.previousTimeout);
26469
- if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
26470
- this.document.body.removeChild(this.ariaLiveElement);
26471
- this.ariaLiveElement = null;
26472
- }
26473
- }
26474
- /**
26475
- * Create AriaLive DOM element as a last child of the document.
26476
- * After the element is created, we gonna apply Clarity class to hide it from
26477
- * the screen and set the `aria-live` politness.
26478
- *
26479
- * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
26480
- *
26481
- * @remark
26482
- * Calling this method multiple times will create multiple DOM Elements, that
26483
- * won't be tracked and will be GC after the service is destroyed.
26484
- *
26485
- * @return AriaLive container as HTMLElement
26486
- *
26487
- */
26488
- createContainer() {
26489
- const ariaLiveElement = this.document.createElement('div');
26490
- ariaLiveElement.setAttribute('id', this.id);
26491
- // Use clarity screen reader class to hide the dom element
26492
- // and fix the scrollbar shake
26493
- ariaLiveElement.classList.add('clr-sr-only');
26494
- ariaLiveElement.setAttribute('aria-atomic', 'true');
26495
- ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
26496
- this.document.body.appendChild(ariaLiveElement);
26497
- return ariaLiveElement;
26498
- }
26499
- }
26500
- 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 });
26501
- ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
26502
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ClrAriaLiveService, decorators: [{
26503
- type: Injectable,
26504
- args: [{
26505
- providedIn: 'root',
26506
- }]
26507
- }], ctorParameters: function () {
26508
- return [{ type: i0.NgZone }, { type: undefined, decorators: [{
26509
- type: Inject,
26510
- args: [DOCUMENT]
26511
- }] }, { type: undefined, decorators: [{
26512
- type: Inject,
26513
- args: [PLATFORM_ID]
26514
- }] }];
26515
- } });
26516
26601
 
26517
26602
  /*
26518
26603
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
@@ -26525,12 +26610,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
26525
26610
  * This software is released under MIT license.
26526
26611
  * The full license information can be found in LICENSE in the root directory of this project.
26527
26612
  */
26613
+ const CLR_MENU_POSITIONS = [
26614
+ 'bottom-left',
26615
+ 'bottom-right',
26616
+ 'top-left',
26617
+ 'top-right',
26618
+ 'left-bottom',
26619
+ 'left-top',
26620
+ 'right-bottom',
26621
+ 'right-top',
26622
+ ];
26528
26623
 
26529
26624
  /*
26530
26625
  * Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.
26531
26626
  * This software is released under MIT license.
26532
26627
  * The full license information can be found in LICENSE in the root directory of this project.
26533
- *
26534
26628
  */
26535
26629
 
26536
26630
  /*
@@ -26604,3 +26698,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
26604
26698
  */
26605
26699
 
26606
26700
  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 };
26701
+ //# sourceMappingURL=clr-angular.mjs.map