@clr/angular 12.0.13 → 12.0.14

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.
@@ -7,6 +7,8 @@ import { Subject, fromEvent, BehaviorSubject, of, ReplaySubject, isObservable, c
7
7
  import { filter, debounceTime, first, startWith, switchMap, take, map, tap, distinctUntilChanged, pairwise } from 'rxjs/operators';
8
8
  import { trigger, transition, style, animate, keyframes, state } from '@angular/animations';
9
9
  import { NgControl, FormsModule, SelectMultipleControlValueAccessor, FormControl, FormGroup, FormGroupName, NgModelGroup, FormGroupDirective, NgForm } from '@angular/forms';
10
+ import { FocusTrapTrackerService, createId, isFocusable, isHTMLElement } from '@cds/core/internal';
11
+ import '@cds/core/internal-components/close-button/register.js';
10
12
  import '@cds/core/icon/register';
11
13
 
12
14
  /*
@@ -1297,6 +1299,19 @@ const commonStringsDefault = {
1297
1299
  datagridExpandableEndOf: 'End of',
1298
1300
  datagridExpandableRowContent: 'Expandable row content',
1299
1301
  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`,
1302
+ responsiveNavToggleOpen: 'Navigation menu',
1303
+ responsiveNavToggleClose: 'Navigation menu',
1304
+ responsiveNavOverflowOpen: 'Navigation overflow menu',
1305
+ responsiveNavOverflowClose: 'Navigation overflow menu',
1306
+ // Wizard
1307
+ wizardStepSuccess: 'Completed',
1308
+ wizardStepError: 'Error',
1309
+ /**
1310
+ * Password Input
1311
+ * Screen-reader text for the hide/show password field button
1312
+ */
1313
+ passwordHide: 'Hide password',
1314
+ passwordShow: 'Show password',
1300
1315
  };
1301
1316
 
1302
1317
  /*
@@ -4497,7 +4512,7 @@ class ClrCalendar {
4497
4512
  }
4498
4513
  }
4499
4514
  ClrCalendar.decorators = [
4500
- { type: Component, 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" },] }
4515
+ { type: Component, args: [{ selector: 'clr-calendar', template: "<table class=\"calendar-table\">\n <tr class=\"calendar-row weekdays\">\n <th *ngFor=\"let day of localeDays\" class=\"calendar-cell weekday\" role=\"heading\" [attr.aria-label]=\"day.day\">\n {{day.narrow}}\n </th>\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" },] }
4501
4516
  ];
4502
4517
  ClrCalendar.ctorParameters = () => [
4503
4518
  { type: LocaleHelperService },
@@ -4566,9 +4581,23 @@ DateFormControlService.decorators = [
4566
4581
  * This software is released under MIT license.
4567
4582
  * The full license information can be found in LICENSE in the root directory of this project.
4568
4583
  */
4584
+ /**
4585
+ * TODO:
4586
+ * Using core functions like:
4587
+ * - pluckPixelValue
4588
+ * - getCssPropertyValue
4589
+ *
4590
+ * to get the value of the design token.
4591
+ *
4592
+ * Note: Memoization/Cache usage possible.
4593
+ */
4569
4594
  // iPad mini screen width
4570
4595
  // http://stephen.io/mediaqueries/#iPadMini
4571
4596
  const DATEPICKER_ENABLE_BREAKPOINT = 768;
4597
+ const SMALL_BREAKPOINT = 576;
4598
+ const MEDIUM_BREAKPOINT = 768;
4599
+ const LARGE_BREAKPOINT = 992;
4600
+ const EXTRA_LARGE_BREAKPOINT = 1200;
4572
4601
 
4573
4602
  /*
4574
4603
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -5828,6 +5857,9 @@ ClrPasswordContainer.decorators = [
5828
5857
  [attr.shape]="show ? 'eye-hide' : 'eye'"
5829
5858
  [attr.title]="show ? commonStrings.keys.hide : commonStrings.keys.show"
5830
5859
  ></cds-icon>
5860
+ <span class="clr-sr-only">{{
5861
+ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow
5862
+ }}</span>
5831
5863
  </button>
5832
5864
  </div>
5833
5865
  <cds-icon
@@ -12709,10 +12741,10 @@ var DatagridColumnChanges;
12709
12741
  DatagridColumnChanges[DatagridColumnChanges["WIDTH"] = 0] = "WIDTH";
12710
12742
  DatagridColumnChanges[DatagridColumnChanges["HIDDEN"] = 1] = "HIDDEN";
12711
12743
  })(DatagridColumnChanges || (DatagridColumnChanges = {}));
12712
- const ɵ1 = key => DatagridColumnChanges[key], ɵ0 = key => key === parseInt(key, 10);
12744
+ const ɵ1 = key => DatagridColumnChanges[key], ɵ0$1 = key => key === parseInt(key, 10);
12713
12745
  const ALL_COLUMN_CHANGES = Object.keys(DatagridColumnChanges)
12714
12746
  .map(ɵ1)
12715
- .filter(ɵ0); // extracts only integer keys
12747
+ .filter(ɵ0$1); // extracts only integer keys
12716
12748
 
12717
12749
  /*
12718
12750
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -13508,7 +13540,9 @@ ClrDatagridColumnToggle.decorators = [
13508
13540
  >
13509
13541
  <div class="switch-header">
13510
13542
  <div class="clr-sr-only" tabindex="-1" #allSelected>{{ commonStrings.keys.allColumnsSelected }}</div>
13511
- <ng-container *ngIf="!customToggleTitle">{{ commonStrings.keys.showColumns }}</ng-container>
13543
+ <ng-container *ngIf="!customToggleTitle">
13544
+ <h2>{{ commonStrings.keys.showColumns }}</h2>
13545
+ </ng-container>
13512
13546
  <ng-content select="clr-dg-column-toggle-title"></ng-content>
13513
13547
  <button
13514
13548
  class="btn btn-sm btn-link toggle-switch-close-button"
@@ -17878,6 +17912,11 @@ class ClrHeader {
17878
17912
  this.initializeNavTriggers(navLevelList);
17879
17913
  },
17880
17914
  });
17915
+ this._subscription.add(this.responsiveNavService.navControl
17916
+ .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
17917
+ .subscribe(() => {
17918
+ this.openNavLevel = null;
17919
+ }));
17881
17920
  }
17882
17921
  // reset triggers. handles cases when an application has different nav levels on different pages.
17883
17922
  resetNavTriggers() {
@@ -17904,10 +17943,21 @@ class ClrHeader {
17904
17943
  closeOpenNav() {
17905
17944
  this.responsiveNavService.closeAllNavs();
17906
17945
  }
17907
- // toggles the nav that is open
17946
+ /**
17947
+ * @deprecated Will be removed in with @clr/angular v15.0.0
17948
+ *
17949
+ * Use `openNav(navLevel)` instead to open the navigation and ResponsiveNavService to close it.
17950
+ */
17908
17951
  toggleNav(navLevel) {
17909
- this.openNavLevel = this.openNavLevel === navLevel ? null : navLevel;
17910
- this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_TOGGLE, navLevel);
17952
+ if (this.openNavLevel === navLevel) {
17953
+ this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, navLevel);
17954
+ return;
17955
+ }
17956
+ this.openNav(navLevel);
17957
+ }
17958
+ openNav(navLevel) {
17959
+ this.openNavLevel = navLevel;
17960
+ this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, navLevel);
17911
17961
  }
17912
17962
  ngOnDestroy() {
17913
17963
  this._subscription.unsubscribe();
@@ -17925,6 +17975,8 @@ ClrHeader.decorators = [
17925
17975
  openNavLevel !== responsiveNavCodes.NAV_LEVEL_1 ? commonStrings.keys.open : commonStrings.keys.close
17926
17976
  "
17927
17977
  (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_1)"
17978
+ [attr.aria-expanded]="openNavLevel === 1 ? 'true' : 'false'"
17979
+ (click)="openNav(responsiveNavCodes.NAV_LEVEL_1)"
17928
17980
  >
17929
17981
  <span></span>
17930
17982
  </button>
@@ -17936,7 +17988,8 @@ ClrHeader.decorators = [
17936
17988
  [attr.aria-label]="
17937
17989
  openNavLevel !== responsiveNavCodes.NAV_LEVEL_2 ? commonStrings.keys.open : commonStrings.keys.close
17938
17990
  "
17939
- (click)="toggleNav(responsiveNavCodes.NAV_LEVEL_2)"
17991
+ [attr.aria-expanded]="openNavLevel === 2 ? 'true' : 'false'"
17992
+ (click)="openNav(responsiveNavCodes.NAV_LEVEL_2)"
17940
17993
  >
17941
17994
  <span></span>
17942
17995
  </button>
@@ -17955,257 +18008,838 @@ ClrHeader.ctorParameters = () => [
17955
18008
  * This software is released under MIT license.
17956
18009
  * The full license information can be found in LICENSE in the root directory of this project.
17957
18010
  */
17958
- class ClrNavLevel {
17959
- constructor(responsiveNavService, elementRef) {
17960
- this.responsiveNavService = responsiveNavService;
17961
- this.elementRef = elementRef;
17962
- }
17963
- ngOnInit() {
17964
- if (this.level !== ResponsiveNavCodes.NAV_LEVEL_1 && this.level !== ResponsiveNavCodes.NAV_LEVEL_2) {
17965
- console.error('Nav Level can only be 1 or 2');
17966
- return;
17967
- }
17968
- this.responsiveNavService.registerNav(this.level);
17969
- this.addNavClass(this.level);
18011
+ function refocusIfOutsideFocusTrapElement(focusedElement, focusTrapElement, elementToRefocus) {
18012
+ const focusTrapIsCurrent = FocusTrapTrackerService.getCurrent() === focusTrapElement;
18013
+ const elementToFocusIsOutsideFocusTrap = elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement);
18014
+ if (focusTrapIsCurrent && elementToFocusIsOutsideFocusTrap) {
18015
+ elementToRefocus = elementToRefocus || focusTrapElement;
18016
+ elementToRefocus.focus();
17970
18017
  }
17971
- addNavClass(level) {
17972
- const navHostClassList = this.elementRef.nativeElement.classList;
17973
- if (level === ResponsiveNavCodes.NAV_LEVEL_1) {
17974
- navHostClassList.add(ResponsiveNavCodes.NAV_CLASS_LEVEL_1);
17975
- }
17976
- else if (level === ResponsiveNavCodes.NAV_LEVEL_2) {
17977
- navHostClassList.add(ResponsiveNavCodes.NAV_CLASS_LEVEL_2);
17978
- }
18018
+ else {
18019
+ focusedElement.focus();
17979
18020
  }
17980
- get level() {
17981
- return this._level;
18021
+ }
18022
+ function elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement) {
18023
+ if (focusedElement === focusTrapElement.topReboundElement ||
18024
+ focusedElement === focusTrapElement.bottomReboundElement) {
18025
+ return true;
17982
18026
  }
17983
- // getter to access the responsive navigation codes from the template
17984
- get responsiveNavCodes() {
17985
- return ResponsiveNavCodes;
18027
+ const elementIsInFocusTrapLightDom = focusTrapElement.contains(focusedElement);
18028
+ if (elementIsInFocusTrapLightDom) {
18029
+ return false;
17986
18030
  }
17987
- open() {
17988
- this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, this.level);
18031
+ if (focusTrapElement !== null && focusTrapElement.contains(focusedElement)) {
18032
+ return false;
17989
18033
  }
17990
- close() {
17991
- this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, this.level);
18034
+ return true;
18035
+ }
18036
+ function createFocusTrapReboundElement(document) {
18037
+ const offScreenSpan = document.createElement('span');
18038
+ offScreenSpan.setAttribute('tabindex', '0');
18039
+ offScreenSpan.classList.add('offscreen-focus-rebounder');
18040
+ return offScreenSpan;
18041
+ }
18042
+ function addReboundElementsToFocusTrapElement(document, focusTrapElement) {
18043
+ if (focusTrapElement && !focusTrapElement.topReboundElement && !focusTrapElement.bottomReboundElement) {
18044
+ focusTrapElement.topReboundElement = createFocusTrapReboundElement(document);
18045
+ focusTrapElement.bottomReboundElement = createFocusTrapReboundElement(document);
18046
+ const parent = focusTrapElement.parentElement;
18047
+ const sibling = focusTrapElement.nextSibling;
18048
+ if (parent) {
18049
+ parent.insertBefore(focusTrapElement.topReboundElement, focusTrapElement);
18050
+ if (sibling) {
18051
+ parent.insertBefore(focusTrapElement.bottomReboundElement, sibling);
18052
+ }
18053
+ else {
18054
+ parent.appendChild(focusTrapElement.bottomReboundElement);
18055
+ }
18056
+ }
17992
18057
  }
17993
- // TODO: Figure out whats the best way to do this. Possible methods
17994
- // 1. HostListener (current solution)
17995
- // 2. Directives on the .nav-link class. We discussed on moving away from class selectors but I forget the reason
17996
- // why
17997
- onMouseClick(target) {
17998
- let current = target; // Get the element in the DOM on which the mouse was clicked
17999
- const navHost = this.elementRef.nativeElement; // Get the current nav native HTML element
18000
- // Start checking if current and navHost are equal.
18001
- // If not traverse to the parentNode and check again.
18002
- while (current) {
18003
- if (current === navHost) {
18004
- return;
18058
+ }
18059
+ function removeReboundElementsFromFocusTrapElement(focusTrapElement) {
18060
+ if (focusTrapElement) {
18061
+ const parent = focusTrapElement.parentElement;
18062
+ if (parent) {
18063
+ const topRebound = focusTrapElement.topReboundElement;
18064
+ const bottomRebound = focusTrapElement.bottomReboundElement;
18065
+ if (topRebound) {
18066
+ parent.removeChild(topRebound);
18005
18067
  }
18006
- else if (current.classList.contains('nav-link')) {
18007
- this.close();
18008
- return;
18068
+ if (bottomRebound) {
18069
+ parent.removeChild(bottomRebound);
18009
18070
  }
18010
- current = current.parentNode;
18011
18071
  }
18072
+ // These are here to to make sure that we completely delete all traces of the removed DOM objects.
18073
+ delete focusTrapElement.topReboundElement;
18074
+ delete focusTrapElement.bottomReboundElement;
18012
18075
  }
18013
- ngOnDestroy() {
18014
- this.responsiveNavService.unregisterNav(this.level);
18076
+ }
18077
+ // this helper exists to enable the focus trap class to handle vanilla html elements
18078
+ // it's primary concern is to keep TS happy.
18079
+ function castHtmlElementToFocusTrapElement(el) {
18080
+ return el;
18081
+ }
18082
+ class FocusTrap {
18083
+ constructor(renderer, injector, platformId, hostElement) {
18084
+ this.renderer = renderer;
18085
+ this.active = false;
18086
+ if (isPlatformBrowser(platformId)) {
18087
+ this._document = injector.get(DOCUMENT);
18088
+ }
18089
+ hostElement = castHtmlElementToFocusTrapElement(hostElement);
18090
+ if (!hostElement.focusTrapId) {
18091
+ hostElement.focusTrapId = createId();
18092
+ }
18093
+ this.focusTrapElement = hostElement;
18094
+ }
18095
+ enableFocusTrap() {
18096
+ const fte = this.focusTrapElement;
18097
+ const firstFocusElement = fte.querySelector('[cds-first-focus]');
18098
+ const activeEl = this._document.activeElement;
18099
+ if (FocusTrapTrackerService.getCurrent() === fte) {
18100
+ throw new Error('Focus trap is already enabled for this instance.');
18101
+ }
18102
+ this.firstFocusElement = firstFocusElement || this.focusTrapElement;
18103
+ addReboundElementsToFocusTrapElement(this._document, fte);
18104
+ if (!isFocusable(fte)) {
18105
+ fte.setAttribute('tabindex', '-1');
18106
+ }
18107
+ if (activeEl && isHTMLElement(activeEl)) {
18108
+ this.previousFocus = activeEl;
18109
+ }
18110
+ FocusTrapTrackerService.setCurrent(fte);
18111
+ // setTimeout here is required for Safari which may try to set focus on
18112
+ // element before it is visible...
18113
+ const focusTimer = setTimeout(() => {
18114
+ this.firstFocusElement.focus();
18115
+ clearTimeout(focusTimer);
18116
+ }, 10);
18117
+ this.onFocusInEvent = this.onFocusIn.bind(this);
18118
+ this.unlisten = this.renderer.listen(this._document, 'focusin', this.onFocusInEvent);
18119
+ this.active = true;
18120
+ }
18121
+ removeFocusTrap() {
18122
+ if (this.unlisten) {
18123
+ this.unlisten();
18124
+ }
18125
+ removeReboundElementsFromFocusTrapElement(this.focusTrapElement);
18126
+ this.renderer.removeAttribute(this.focusTrapElement, 'tabindex');
18127
+ FocusTrapTrackerService.activatePreviousCurrent();
18128
+ this.active = false;
18129
+ if (this.previousFocus) {
18130
+ this.previousFocus.focus();
18131
+ }
18132
+ }
18133
+ onFocusIn(event) {
18134
+ refocusIfOutsideFocusTrapElement(event.composedPath()[0], this.focusTrapElement, this.firstFocusElement);
18015
18135
  }
18016
18136
  }
18017
- ClrNavLevel.decorators = [
18018
- { type: Directive, args: [{ selector: '[clr-nav-level]' },] }
18137
+ FocusTrap.decorators = [
18138
+ { type: Injectable }
18019
18139
  ];
18020
- ClrNavLevel.ctorParameters = () => [
18021
- { type: ResponsiveNavigationService },
18022
- { type: ElementRef }
18140
+ FocusTrap.ctorParameters = () => [
18141
+ { type: Renderer2 },
18142
+ { type: Injector },
18143
+ { type: undefined },
18144
+ { type: undefined }
18023
18145
  ];
18024
- ClrNavLevel.propDecorators = {
18025
- _level: [{ type: Input, args: ['clr-nav-level',] }],
18026
- onMouseClick: [{ type: HostListener, args: ['click', ['$event.target'],] }]
18027
- };
18028
18146
 
18029
18147
  /*
18030
18148
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18031
18149
  * This software is released under MIT license.
18032
18150
  * The full license information can be found in LICENSE in the root directory of this project.
18033
18151
  */
18034
- const CLR_NAVIGATION_DIRECTIVES = [
18035
- ClrHeader,
18036
- ClrNavLevel,
18037
- NavDetectionOompaLoompa,
18038
- MainContainerWillyWonka,
18039
- ];
18040
- class ClrNavigationModule {
18041
- }
18042
- ClrNavigationModule.decorators = [
18043
- { type: NgModule, args: [{
18044
- imports: [CommonModule, ClrIconModule, ClrDropdownModule],
18045
- declarations: [CLR_NAVIGATION_DIRECTIVES],
18046
- exports: [CLR_NAVIGATION_DIRECTIVES],
18047
- },] }
18048
- ];
18152
+ const defaultAnimationTiming = '0.2s ease-in-out';
18049
18153
 
18050
18154
  /*
18051
18155
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18052
18156
  * This software is released under MIT license.
18053
18157
  * The full license information can be found in LICENSE in the root directory of this project.
18054
18158
  */
18055
- class TemplateRefContainer {
18159
+ function collapse() {
18160
+ 'use strict';
18161
+ return [
18162
+ state('true', style({ height: 0, 'overflow-y': 'hidden' })),
18163
+ transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),
18164
+ transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),
18165
+ ];
18056
18166
  }
18057
- TemplateRefContainer.decorators = [
18058
- { type: Component, args: [{
18059
- template: `
18060
- <ng-template>
18061
- <ng-content></ng-content>
18062
- </ng-template>
18063
- `
18064
- },] }
18065
- ];
18066
- TemplateRefContainer.propDecorators = {
18067
- template: [{ type: ViewChild, args: [TemplateRef,] }]
18068
- };
18069
18167
 
18070
18168
  /*
18071
18169
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18072
18170
  * This software is released under MIT license.
18073
18171
  * The full license information can be found in LICENSE in the root directory of this project.
18074
18172
  */
18075
- const TEMPLATE_REF_DIRECTIVES = [TemplateRefContainer];
18076
18173
 
18077
18174
  /*
18078
18175
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18079
18176
  * This software is released under MIT license.
18080
18177
  * The full license information can be found in LICENSE in the root directory of this project.
18081
18178
  */
18082
- class ClrTemplateRefModule {
18179
+ function fade(opacity = 1) {
18180
+ return [
18181
+ transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),
18182
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),
18183
+ ];
18083
18184
  }
18084
- ClrTemplateRefModule.decorators = [
18085
- { type: NgModule, args: [{
18086
- imports: [CommonModule],
18087
- declarations: [TEMPLATE_REF_DIRECTIVES],
18088
- entryComponents: [TEMPLATE_REF_DIRECTIVES],
18089
- exports: [TEMPLATE_REF_DIRECTIVES],
18090
- },] }
18091
- ];
18092
18185
 
18093
18186
  /*
18094
18187
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18095
18188
  * This software is released under MIT license.
18096
18189
  * The full license information can be found in LICENSE in the root directory of this project.
18097
18190
  */
18098
- class TabsWillyWonka extends WillyWonka {
18099
- }
18100
- TabsWillyWonka.decorators = [
18101
- { type: Directive, args: [{ selector: 'clr-tabs' },] }
18102
- ];
18103
18191
 
18104
18192
  /*
18105
18193
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18106
18194
  * This software is released under MIT license.
18107
18195
  * The full license information can be found in LICENSE in the root directory of this project.
18108
18196
  */
18109
- class ActiveOompaLoompa extends OompaLoompa {
18110
- constructor(cdr, willyWonka, id, ifActive) {
18111
- if (!willyWonka) {
18112
- throw new Error('clrTabLink and clr-tab-content should only be used inside of a clr-tabs');
18113
- }
18114
- super(cdr, willyWonka);
18115
- this.ifActive = ifActive;
18116
- this.id = id;
18197
+ function fadeSlide(direction) {
18198
+ let transform = null;
18199
+ if (direction === 'up') {
18200
+ transform = 'translate(0, 25%)';
18117
18201
  }
18118
- get flavor() {
18119
- return this.ifActive.current === this.id;
18202
+ else if (direction === 'down') {
18203
+ transform = 'translate(0, -25%)';
18204
+ }
18205
+ else if (direction === 'left') {
18206
+ transform = 'translate(25%, 0)';
18207
+ }
18208
+ else if (direction === 'right') {
18209
+ transform = 'translate(-25%, 0)';
18210
+ }
18211
+ else {
18212
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
18120
18213
  }
18214
+ return [
18215
+ transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
18216
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
18217
+ ];
18121
18218
  }
18122
- ActiveOompaLoompa.decorators = [
18123
- { type: Directive, args: [{ selector: '[clrTabLink], clr-tab-content' },] }
18124
- ];
18125
- ActiveOompaLoompa.ctorParameters = () => [
18126
- { type: ChangeDetectorRef },
18127
- { type: TabsWillyWonka, decorators: [{ type: Optional }] },
18128
- { type: Number, decorators: [{ type: Inject, args: [IF_ACTIVE_ID,] }] },
18129
- { type: IfActiveService }
18130
- ];
18131
18219
 
18132
18220
  /*
18133
18221
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18134
18222
  * This software is released under MIT license.
18135
18223
  * The full license information can be found in LICENSE in the root directory of this project.
18136
18224
  */
18137
- var TabsLayout;
18138
- (function (TabsLayout) {
18139
- TabsLayout["HORIZONTAL"] = "horizontal";
18140
- TabsLayout["VERTICAL"] = "vertical";
18141
- })(TabsLayout || (TabsLayout = {}));
18142
18225
 
18143
18226
  /*
18144
18227
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18145
18228
  * This software is released under MIT license.
18146
18229
  * The full license information can be found in LICENSE in the root directory of this project.
18147
18230
  */
18148
- class TabsService {
18149
- constructor() {
18150
- this._children = [];
18151
- this.layout = TabsLayout.HORIZONTAL;
18152
- }
18153
- register(tab) {
18154
- this._children.push(tab);
18231
+ function slide(direction) {
18232
+ let transform = null;
18233
+ if (direction === 'up') {
18234
+ transform = 'translate(0, 25%)';
18155
18235
  }
18156
- get children() {
18157
- return this._children;
18236
+ else if (direction === 'down') {
18237
+ transform = 'translate(0, -25%)';
18158
18238
  }
18159
- get activeTab() {
18160
- return this.children.find((tab) => {
18161
- return tab.active;
18162
- });
18239
+ else if (direction === 'left') {
18240
+ transform = 'translate(25%, 0)';
18163
18241
  }
18164
- get overflowTabs() {
18165
- if (this.layout === TabsLayout.VERTICAL) {
18166
- return [];
18167
- }
18168
- else {
18169
- return this.children.filter((tab) => tab.tabLink.inOverflow === true);
18170
- }
18242
+ else if (direction === 'right') {
18243
+ transform = 'translate(-25%, 0)';
18171
18244
  }
18172
- unregister(tab) {
18173
- const index = this.children.indexOf(tab);
18174
- if (index > -1) {
18175
- this.children.splice(index, 1);
18176
- }
18245
+ else {
18246
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
18177
18247
  }
18248
+ return [
18249
+ transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
18250
+ transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
18251
+ ];
18178
18252
  }
18179
- TabsService.decorators = [
18180
- { type: Injectable }
18181
- ];
18182
18253
 
18183
18254
  /*
18184
18255
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18185
18256
  * This software is released under MIT license.
18186
18257
  * The full license information can be found in LICENSE in the root directory of this project.
18187
18258
  */
18188
- let nbTabContentComponents = 0;
18189
- class ClrTabContent {
18190
- constructor(ifActiveService, id, ariaService, tabsService) {
18191
- this.ifActiveService = ifActiveService;
18192
- this.id = id;
18193
- this.ariaService = ariaService;
18194
- this.tabsService = tabsService;
18195
- if (!this.tabContentId) {
18196
- this.tabContentId = 'clr-tab-content-' + nbTabContentComponents++;
18197
- }
18198
- }
18199
- // The template must be applied on the top-down phase of view-child initialization to prevent
18200
- // components in the content from initializing before a content container exists.
18201
- // Some child components need their container for sizing calculations.
18202
- set templateRef(value) {
18203
- this.viewRef = this.tabsService.tabContentViewContainer.createEmbeddedView(value);
18204
- }
18205
- get ariaLabelledBy() {
18206
- return this.ariaService.ariaLabelledBy;
18207
- }
18208
- get tabContentId() {
18259
+
18260
+ /*
18261
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18262
+ * This software is released under MIT license.
18263
+ * The full license information can be found in LICENSE in the root directory of this project.
18264
+ */
18265
+
18266
+ /*
18267
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18268
+ * This software is released under MIT license.
18269
+ * The full license information can be found in LICENSE in the root directory of this project.
18270
+ */
18271
+
18272
+ /*
18273
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18274
+ * This software is released under MIT license.
18275
+ * The full license information can be found in LICENSE in the root directory of this project.
18276
+ */
18277
+
18278
+ /*
18279
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18280
+ * This software is released under MIT license.
18281
+ * The full license information can be found in LICENSE in the root directory of this project.
18282
+ */
18283
+
18284
+ /*
18285
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18286
+ * This software is released under MIT license.
18287
+ * The full license information can be found in LICENSE in the root directory of this project.
18288
+ */
18289
+
18290
+ /*
18291
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18292
+ * This software is released under MIT license.
18293
+ * The full license information can be found in LICENSE in the root directory of this project.
18294
+ */
18295
+ var ClrAriaLivePoliteness;
18296
+ (function (ClrAriaLivePoliteness) {
18297
+ ClrAriaLivePoliteness["off"] = "off";
18298
+ ClrAriaLivePoliteness["polite"] = "polite";
18299
+ ClrAriaLivePoliteness["assertive"] = "assertive";
18300
+ })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
18301
+ /**
18302
+ * Time in milliseconds before inserting the content into the container
18303
+ */
18304
+ const ARIA_LIVE_TICK = 100;
18305
+ /**
18306
+ * @deprecated
18307
+ *
18308
+ * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
18309
+ * Please consider using the LiveAnnouncer in the Angular Material CDK
18310
+ * if your project needs this functionality.
18311
+ * More info: https://material.angular.io/cdk/a11y/overview#example-1
18312
+ *
18313
+ * This service handle `aria-live` accessibility attribute. The issue is that you need
18314
+ * to have the DOM Element with attribute `aria-live` before you could insert content
18315
+ * and SR (Screen Reader) pick the change and announce it.
18316
+ *
18317
+ * ```typescript
18318
+ * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
18319
+ *
18320
+ * @Component({
18321
+ * selector: 'clr-demo-component',
18322
+ * providers: [ClrAriaLiveService],
18323
+ * template: `
18324
+ * <ng-content></ng-content>
18325
+ * `,
18326
+ * })
18327
+ * export class DemoComponent {
18328
+ * constructor(ariaLiveService: ClrAriaLiveService) {}
18329
+ *
18330
+ * public actionThatWillTriggerChange() {
18331
+ * this.ariaLiveService.announce('message that I want to announce to SR');
18332
+ * }
18333
+ * }
18334
+ * ```
18335
+ *
18336
+ */
18337
+ class ClrAriaLiveService {
18338
+ constructor(ngZone, _document, platformId) {
18339
+ this.ngZone = ngZone;
18340
+ this.platformId = platformId;
18341
+ this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
18342
+ this.document = _document;
18343
+ }
18344
+ /**
18345
+ * get access to the internal HTML `id` that gonna be used for the AriaLive container.
18346
+ * @return ID of the DOM Element as string.
18347
+ */
18348
+ get id() {
18349
+ return this._id;
18350
+ }
18351
+ /**
18352
+ * Append text content inside the AriaLive Container. This method will check if the
18353
+ * DOM Element is existing if not it will create one for us and the will apply the text.
18354
+ *
18355
+ * ```typescript
18356
+ * this.ariaLiveService.announce(this.el.nativeElement);
18357
+ * // or
18358
+ * this.ariaLiveService.announce('Message to announce to SR');
18359
+ * ```
18360
+ *
18361
+ * @remark
18362
+ * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
18363
+ * The reason for that is that we don't want to do additional work if the SR will ignore it.
18364
+ *
18365
+ * @param message - This could be simple string or HTMLElement
18366
+ * @param politeness - 'polite', 'assertive' or 'off'
18367
+ */
18368
+ announce(message, politeness = ClrAriaLivePoliteness.polite) {
18369
+ if (politeness === ClrAriaLivePoliteness.off) {
18370
+ return;
18371
+ }
18372
+ if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
18373
+ this.ariaLiveElement = this.createContainer();
18374
+ }
18375
+ message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
18376
+ // when there is no message do NOTHING!
18377
+ if (!message) {
18378
+ return;
18379
+ }
18380
+ this.ariaLiveElement.setAttribute('aria-live', politeness);
18381
+ // This 100ms timeout is necessary for some browser + screen-reader combinations:
18382
+ // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
18383
+ // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
18384
+ // second time without clearing and then using a non-zero delay.
18385
+ // (using JAWS 17 at time of this writing).
18386
+ this.ngZone.runOutsideAngular(() => {
18387
+ // This clearTimeout will stop all older messages from announcing
18388
+ // in the case where the messages are comming too fast we gonna try to append only
18389
+ // the last one. That's what the SR will try to do anyway.
18390
+ clearTimeout(this.previousTimeout);
18391
+ this.previousTimeout = setTimeout(() => {
18392
+ this.ariaLiveElement.textContent = message;
18393
+ }, ARIA_LIVE_TICK);
18394
+ });
18395
+ }
18396
+ /**
18397
+ * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
18398
+ * container from the document.
18399
+ */
18400
+ ngOnDestroy() {
18401
+ clearTimeout(this.previousTimeout);
18402
+ if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
18403
+ this.document.body.removeChild(this.ariaLiveElement);
18404
+ this.ariaLiveElement = null;
18405
+ }
18406
+ }
18407
+ /**
18408
+ * Create AriaLive DOM element as a last child of the document.
18409
+ * After the element is created, we gonna apply Clarity class to hide it from
18410
+ * the screen and set the `aria-live` politness.
18411
+ *
18412
+ * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
18413
+ *
18414
+ * @remark
18415
+ * Calling this method multiple times will create multiple DOM Elements, that
18416
+ * won't be tracked and will be GC after the service is destroyed.
18417
+ *
18418
+ * @return AriaLive container as HTMLElement
18419
+ *
18420
+ */
18421
+ createContainer() {
18422
+ const ariaLiveElement = this.document.createElement('div');
18423
+ ariaLiveElement.setAttribute('id', this.id);
18424
+ // Use clarity screen reader class to hide the dom element
18425
+ // and fix the scrollbar shake
18426
+ ariaLiveElement.classList.add('clr-sr-only');
18427
+ ariaLiveElement.setAttribute('aria-atomic', 'true');
18428
+ ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
18429
+ this.document.body.appendChild(ariaLiveElement);
18430
+ return ariaLiveElement;
18431
+ }
18432
+ }
18433
+ ClrAriaLiveService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ClrAriaLiveService_Factory() { return new ClrAriaLiveService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.PLATFORM_ID)); }, token: ClrAriaLiveService, providedIn: "root" });
18434
+ ClrAriaLiveService.decorators = [
18435
+ { type: Injectable, args: [{
18436
+ providedIn: 'root',
18437
+ },] }
18438
+ ];
18439
+ ClrAriaLiveService.ctorParameters = () => [
18440
+ { type: NgZone },
18441
+ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
18442
+ { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
18443
+ ];
18444
+
18445
+ /*
18446
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18447
+ * This software is released under MIT license.
18448
+ * The full license information can be found in LICENSE in the root directory of this project.
18449
+ */
18450
+
18451
+ /*
18452
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18453
+ * This software is released under MIT license.
18454
+ * The full license information can be found in LICENSE in the root directory of this project.
18455
+ */
18456
+
18457
+ /*
18458
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18459
+ * This software is released under MIT license.
18460
+ * The full license information can be found in LICENSE in the root directory of this project.
18461
+ */
18462
+
18463
+ /*
18464
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18465
+ * This software is released under MIT license.
18466
+ * The full license information can be found in LICENSE in the root directory of this project.
18467
+ */
18468
+
18469
+ /*
18470
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18471
+ * This software is released under MIT license.
18472
+ * The full license information can be found in LICENSE in the root directory of this project.
18473
+ */
18474
+
18475
+ /*
18476
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18477
+ * This software is released under MIT license.
18478
+ * The full license information can be found in LICENSE in the root directory of this project.
18479
+ */
18480
+
18481
+ /*
18482
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18483
+ * This software is released under MIT license.
18484
+ * The full license information can be found in LICENSE in the root directory of this project.
18485
+ */
18486
+
18487
+ /*
18488
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18489
+ * This software is released under MIT license.
18490
+ * The full license information can be found in LICENSE in the root directory of this project.
18491
+ */
18492
+
18493
+ /*
18494
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18495
+ * This software is released under MIT license.
18496
+ * The full license information can be found in LICENSE in the root directory of this project.
18497
+ */
18498
+ const createCdsCloseButton = (document, ariaLabel) => {
18499
+ const cdsCloseButton = document.createElement('cds-internal-close-button');
18500
+ cdsCloseButton.setAttribute('icon-size', '32');
18501
+ console.log(ariaLabel);
18502
+ cdsCloseButton.setAttribute('aria-label', ariaLabel);
18503
+ cdsCloseButton.setAttribute('aria-hidden', 'true');
18504
+ cdsCloseButton.setAttribute('type', 'button');
18505
+ /**
18506
+ * The button is hidden by default based on our Desktop-first approach.
18507
+ */
18508
+ cdsCloseButton.setAttribute('hidden', 'true');
18509
+ cdsCloseButton.className = 'clr-nav-close';
18510
+ return cdsCloseButton;
18511
+ };
18512
+ const ɵ0 = createCdsCloseButton;
18513
+ class ClrNavLevel extends FocusTrap {
18514
+ constructor(platformId, responsiveNavService, elementRef, renderer, injector) {
18515
+ super(renderer, injector, platformId, elementRef.nativeElement);
18516
+ this.responsiveNavService = responsiveNavService;
18517
+ this.elementRef = elementRef;
18518
+ this._isOpen = false;
18519
+ if (isPlatformBrowser(platformId)) {
18520
+ this._document = injector.get(DOCUMENT);
18521
+ }
18522
+ this._subscription = responsiveNavService.navControl
18523
+ .pipe(filter(x => x.navLevel === this.level), filter(({ controlCode }) => (controlCode === ResponsiveNavCodes.NAV_OPEN && !this.isOpen) ||
18524
+ (controlCode === ResponsiveNavCodes.NAV_CLOSE && this.isOpen)))
18525
+ .subscribe(({ controlCode }) => {
18526
+ if (controlCode === ResponsiveNavCodes.NAV_OPEN) {
18527
+ this.open();
18528
+ return;
18529
+ }
18530
+ this.close();
18531
+ });
18532
+ this._subscription.add(responsiveNavService.navControl
18533
+ .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
18534
+ .subscribe(() => this.close()));
18535
+ }
18536
+ ngOnInit() {
18537
+ if (!this.closeButtonAriaLabel) {
18538
+ this.closeButtonAriaLabel =
18539
+ this._level === ResponsiveNavCodes.NAV_LEVEL_1
18540
+ ? commonStringsDefault.responsiveNavToggleClose
18541
+ : commonStringsDefault.responsiveNavOverflowClose;
18542
+ }
18543
+ if (this.level !== ResponsiveNavCodes.NAV_LEVEL_1 && this.level !== ResponsiveNavCodes.NAV_LEVEL_2) {
18544
+ console.error('Nav Level can only be 1 or 2');
18545
+ return;
18546
+ }
18547
+ this.responsiveNavService.registerNav(this.level);
18548
+ this.addNavClass(this.level);
18549
+ }
18550
+ ngAfterViewInit() {
18551
+ const closeButton = createCdsCloseButton(this._document, this.closeButtonAriaLabel);
18552
+ this.renderer.listen(closeButton, 'click', this.close.bind(this));
18553
+ this.renderer.insertBefore(this.elementRef.nativeElement, closeButton, this.elementRef.nativeElement.firstChild); // Adding the button at the top of the nav
18554
+ if (this._document.body.clientWidth < LARGE_BREAKPOINT) {
18555
+ /**
18556
+ * Close if the document body is smaller than the large breakpoint for example:
18557
+ * - Refreshing the page
18558
+ * - Browser window size is changed when opening the applicaiton
18559
+ * - Browser zoom is turned on and zoomed to a size that makes the document smaller than the large breakpoint
18560
+ */
18561
+ this.close();
18562
+ }
18563
+ }
18564
+ addNavClass(level) {
18565
+ const navHostClassList = this.elementRef.nativeElement.classList;
18566
+ if (level === ResponsiveNavCodes.NAV_LEVEL_1) {
18567
+ navHostClassList.add(ResponsiveNavCodes.NAV_CLASS_LEVEL_1);
18568
+ }
18569
+ else if (level === ResponsiveNavCodes.NAV_LEVEL_2) {
18570
+ navHostClassList.add(ResponsiveNavCodes.NAV_CLASS_LEVEL_2);
18571
+ }
18572
+ }
18573
+ get level() {
18574
+ return this._level;
18575
+ }
18576
+ // getter to access the responsive navigation codes from the template
18577
+ get responsiveNavCodes() {
18578
+ return ResponsiveNavCodes;
18579
+ }
18580
+ get isOpen() {
18581
+ return this._isOpen;
18582
+ }
18583
+ onResize(event) {
18584
+ const target = event.target;
18585
+ if (target.innerWidth < LARGE_BREAKPOINT && this.isOpen) {
18586
+ this.close();
18587
+ return;
18588
+ }
18589
+ this.showNavigation();
18590
+ }
18591
+ open() {
18592
+ this._isOpen = true;
18593
+ this.showNavigation();
18594
+ this.enableFocusTrap();
18595
+ this.showCloseButton();
18596
+ this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, this.level);
18597
+ }
18598
+ close() {
18599
+ this._isOpen = false;
18600
+ this.hideNavigation();
18601
+ this.removeFocusTrap();
18602
+ this.hideCloseButton();
18603
+ this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, this.level);
18604
+ }
18605
+ // TODO: Figure out whats the best way to do this. Possible methods
18606
+ // 1. HostListener (current solution)
18607
+ // 2. Directives on the .nav-link class. We discussed on moving away from class selectors but I forget the reason
18608
+ // why
18609
+ onMouseClick(target) {
18610
+ let current = target; // Get the element in the DOM on which the mouse was clicked
18611
+ const navHost = this.elementRef.nativeElement; // Get the current nav native HTML element
18612
+ // Start checking if current and navHost are equal.
18613
+ // If not traverse to the parentNode and check again.
18614
+ while (current) {
18615
+ if (current === navHost) {
18616
+ return;
18617
+ }
18618
+ else if (current.classList.contains('nav-link')) {
18619
+ this.close();
18620
+ return;
18621
+ }
18622
+ current = current.parentNode;
18623
+ }
18624
+ }
18625
+ hideNavigation() {
18626
+ this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-hidden', 'true');
18627
+ this.renderer.setAttribute(this.elementRef.nativeElement, 'hidden', 'true');
18628
+ }
18629
+ showNavigation() {
18630
+ this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-hidden', 'false');
18631
+ this.renderer.removeAttribute(this.elementRef.nativeElement, 'hidden');
18632
+ }
18633
+ hideCloseButton() {
18634
+ this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-hidden', 'true');
18635
+ this.renderer.setAttribute(this.elementRef.nativeElement.querySelector('.clr-nav-close'), 'hidden', 'true');
18636
+ }
18637
+ showCloseButton() {
18638
+ this.renderer.setAttribute(this.elementRef.nativeElement.querySelector('.clr-nav-close'), 'aria-hidden', 'false');
18639
+ this.renderer.removeAttribute(this.elementRef.nativeElement.querySelector('.clr-nav-close'), 'hidden');
18640
+ }
18641
+ ngOnDestroy() {
18642
+ this.responsiveNavService.unregisterNav(this.level);
18643
+ this._subscription.unsubscribe();
18644
+ }
18645
+ }
18646
+ ClrNavLevel.decorators = [
18647
+ { type: Directive, args: [{ selector: '[clr-nav-level]' },] }
18648
+ ];
18649
+ ClrNavLevel.ctorParameters = () => [
18650
+ { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
18651
+ { type: ResponsiveNavigationService },
18652
+ { type: ElementRef },
18653
+ { type: Renderer2 },
18654
+ { type: Injector }
18655
+ ];
18656
+ ClrNavLevel.propDecorators = {
18657
+ _level: [{ type: Input, args: ['clr-nav-level',] }],
18658
+ closeButtonAriaLabel: [{ type: Input, args: ['closeAriaLabel',] }],
18659
+ onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }],
18660
+ onMouseClick: [{ type: HostListener, args: ['click', ['$event.target'],] }]
18661
+ };
18662
+
18663
+ /*
18664
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18665
+ * This software is released under MIT license.
18666
+ * The full license information can be found in LICENSE in the root directory of this project.
18667
+ */
18668
+ const CLR_NAVIGATION_DIRECTIVES = [
18669
+ ClrHeader,
18670
+ ClrNavLevel,
18671
+ NavDetectionOompaLoompa,
18672
+ MainContainerWillyWonka,
18673
+ ];
18674
+ class ClrNavigationModule {
18675
+ }
18676
+ ClrNavigationModule.decorators = [
18677
+ { type: NgModule, args: [{
18678
+ imports: [CommonModule, ClrIconModule, ClrDropdownModule],
18679
+ declarations: [CLR_NAVIGATION_DIRECTIVES],
18680
+ exports: [CLR_NAVIGATION_DIRECTIVES],
18681
+ },] }
18682
+ ];
18683
+
18684
+ /*
18685
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18686
+ * This software is released under MIT license.
18687
+ * The full license information can be found in LICENSE in the root directory of this project.
18688
+ */
18689
+ class TemplateRefContainer {
18690
+ }
18691
+ TemplateRefContainer.decorators = [
18692
+ { type: Component, args: [{
18693
+ template: `
18694
+ <ng-template>
18695
+ <ng-content></ng-content>
18696
+ </ng-template>
18697
+ `
18698
+ },] }
18699
+ ];
18700
+ TemplateRefContainer.propDecorators = {
18701
+ template: [{ type: ViewChild, args: [TemplateRef,] }]
18702
+ };
18703
+
18704
+ /*
18705
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18706
+ * This software is released under MIT license.
18707
+ * The full license information can be found in LICENSE in the root directory of this project.
18708
+ */
18709
+ const TEMPLATE_REF_DIRECTIVES = [TemplateRefContainer];
18710
+
18711
+ /*
18712
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18713
+ * This software is released under MIT license.
18714
+ * The full license information can be found in LICENSE in the root directory of this project.
18715
+ */
18716
+ class ClrTemplateRefModule {
18717
+ }
18718
+ ClrTemplateRefModule.decorators = [
18719
+ { type: NgModule, args: [{
18720
+ imports: [CommonModule],
18721
+ declarations: [TEMPLATE_REF_DIRECTIVES],
18722
+ entryComponents: [TEMPLATE_REF_DIRECTIVES],
18723
+ exports: [TEMPLATE_REF_DIRECTIVES],
18724
+ },] }
18725
+ ];
18726
+
18727
+ /*
18728
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18729
+ * This software is released under MIT license.
18730
+ * The full license information can be found in LICENSE in the root directory of this project.
18731
+ */
18732
+ class TabsWillyWonka extends WillyWonka {
18733
+ }
18734
+ TabsWillyWonka.decorators = [
18735
+ { type: Directive, args: [{ selector: 'clr-tabs' },] }
18736
+ ];
18737
+
18738
+ /*
18739
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18740
+ * This software is released under MIT license.
18741
+ * The full license information can be found in LICENSE in the root directory of this project.
18742
+ */
18743
+ class ActiveOompaLoompa extends OompaLoompa {
18744
+ constructor(cdr, willyWonka, id, ifActive) {
18745
+ if (!willyWonka) {
18746
+ throw new Error('clrTabLink and clr-tab-content should only be used inside of a clr-tabs');
18747
+ }
18748
+ super(cdr, willyWonka);
18749
+ this.ifActive = ifActive;
18750
+ this.id = id;
18751
+ }
18752
+ get flavor() {
18753
+ return this.ifActive.current === this.id;
18754
+ }
18755
+ }
18756
+ ActiveOompaLoompa.decorators = [
18757
+ { type: Directive, args: [{ selector: '[clrTabLink], clr-tab-content' },] }
18758
+ ];
18759
+ ActiveOompaLoompa.ctorParameters = () => [
18760
+ { type: ChangeDetectorRef },
18761
+ { type: TabsWillyWonka, decorators: [{ type: Optional }] },
18762
+ { type: Number, decorators: [{ type: Inject, args: [IF_ACTIVE_ID,] }] },
18763
+ { type: IfActiveService }
18764
+ ];
18765
+
18766
+ /*
18767
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18768
+ * This software is released under MIT license.
18769
+ * The full license information can be found in LICENSE in the root directory of this project.
18770
+ */
18771
+ var TabsLayout;
18772
+ (function (TabsLayout) {
18773
+ TabsLayout["HORIZONTAL"] = "horizontal";
18774
+ TabsLayout["VERTICAL"] = "vertical";
18775
+ })(TabsLayout || (TabsLayout = {}));
18776
+
18777
+ /*
18778
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18779
+ * This software is released under MIT license.
18780
+ * The full license information can be found in LICENSE in the root directory of this project.
18781
+ */
18782
+ class TabsService {
18783
+ constructor() {
18784
+ this._children = [];
18785
+ this.layout = TabsLayout.HORIZONTAL;
18786
+ }
18787
+ register(tab) {
18788
+ this._children.push(tab);
18789
+ }
18790
+ get children() {
18791
+ return this._children;
18792
+ }
18793
+ get activeTab() {
18794
+ return this.children.find((tab) => {
18795
+ return tab.active;
18796
+ });
18797
+ }
18798
+ get overflowTabs() {
18799
+ if (this.layout === TabsLayout.VERTICAL) {
18800
+ return [];
18801
+ }
18802
+ else {
18803
+ return this.children.filter((tab) => tab.tabLink.inOverflow === true);
18804
+ }
18805
+ }
18806
+ unregister(tab) {
18807
+ const index = this.children.indexOf(tab);
18808
+ if (index > -1) {
18809
+ this.children.splice(index, 1);
18810
+ }
18811
+ }
18812
+ }
18813
+ TabsService.decorators = [
18814
+ { type: Injectable }
18815
+ ];
18816
+
18817
+ /*
18818
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18819
+ * This software is released under MIT license.
18820
+ * The full license information can be found in LICENSE in the root directory of this project.
18821
+ */
18822
+ let nbTabContentComponents = 0;
18823
+ class ClrTabContent {
18824
+ constructor(ifActiveService, id, ariaService, tabsService) {
18825
+ this.ifActiveService = ifActiveService;
18826
+ this.id = id;
18827
+ this.ariaService = ariaService;
18828
+ this.tabsService = tabsService;
18829
+ if (!this.tabContentId) {
18830
+ this.tabContentId = 'clr-tab-content-' + nbTabContentComponents++;
18831
+ }
18832
+ }
18833
+ // The template must be applied on the top-down phase of view-child initialization to prevent
18834
+ // components in the content from initializing before a content container exists.
18835
+ // Some child components need their container for sizing calculations.
18836
+ set templateRef(value) {
18837
+ this.viewRef = this.tabsService.tabContentViewContainer.createEmbeddedView(value);
18838
+ }
18839
+ get ariaLabelledBy() {
18840
+ return this.ariaService.ariaLabelledBy;
18841
+ }
18842
+ get tabContentId() {
18209
18843
  return this.ariaService.ariaControls;
18210
18844
  }
18211
18845
  set tabContentId(id) {
@@ -21857,7 +22491,14 @@ class ClrWizard {
21857
22491
  return this.navService.wizardFinished.subscribe(() => this.emitWizardFinished());
21858
22492
  }
21859
22493
  listenForPageChanges() {
21860
- return this.navService.currentPageChanged.subscribe(() => this.currentPageChanged.emit());
22494
+ return this.navService.currentPageChanged.subscribe(() => {
22495
+ var _a;
22496
+ // Added to address VPAT-749:
22497
+ // When clicking on a wizard tab, focus should move to that
22498
+ // tabs content to make the wizard more accessible.
22499
+ (_a = this.wizardTitle) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
22500
+ this.currentPageChanged.emit();
22501
+ });
21861
22502
  }
21862
22503
  updateNavOnPageChanges() {
21863
22504
  const changes = this.differ.diff(this.pages);
@@ -22377,13 +23018,6 @@ AccordionService.decorators = [
22377
23018
  { type: Injectable }
22378
23019
  ];
22379
23020
 
22380
- /*
22381
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22382
- * This software is released under MIT license.
22383
- * The full license information can be found in LICENSE in the root directory of this project.
22384
- */
22385
- const defaultAnimationTiming = '0.2s ease-in-out';
22386
-
22387
23021
  /*
22388
23022
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22389
23023
  * This software is released under MIT license.
@@ -23501,173 +24135,41 @@ ClrTimelineModule.decorators = [
23501
24135
  exports: [...CLR_TIMELINE_DIRECTIVES, ClrIconModule, ClrSpinnerModule],
23502
24136
  declarations: [CLR_TIMELINE_DIRECTIVES],
23503
24137
  },] }
23504
- ];
23505
- ClrTimelineModule.ctorParameters = () => [];
23506
-
23507
- /*
23508
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23509
- * This software is released under MIT license.
23510
- * The full license information can be found in LICENSE in the root directory of this project.
23511
- */
23512
- class ClarityModule {
23513
- }
23514
- ClarityModule.decorators = [
23515
- { type: NgModule, args: [{
23516
- exports: [
23517
- ClrEmphasisModule,
23518
- ClrDataModule,
23519
- ClrIconModule,
23520
- ClrModalModule,
23521
- ClrLoadingModule,
23522
- ClrConditionalModule,
23523
- ClrFocusTrapModule,
23524
- ClrFocusOnViewInitModule,
23525
- ClrButtonModule,
23526
- ClrFormsModule,
23527
- ClrLayoutModule,
23528
- ClrPopoverModule,
23529
- ClrWizardModule,
23530
- ClrDragAndDropModule,
23531
- ClrStepperModule,
23532
- ClrSpinnerModule,
23533
- ClrProgressBarModule,
23534
- ClrPopoverModuleNext,
23535
- ClrTimelineModule,
23536
- ],
23537
- },] }
23538
- ];
23539
-
23540
- /*
23541
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23542
- * This software is released under MIT license.
23543
- * The full license information can be found in LICENSE in the root directory of this project.
23544
- */
23545
-
23546
- /*
23547
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23548
- * This software is released under MIT license.
23549
- * The full license information can be found in LICENSE in the root directory of this project.
23550
- */
23551
-
23552
- /*
23553
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23554
- * This software is released under MIT license.
23555
- * The full license information can be found in LICENSE in the root directory of this project.
23556
- */
23557
-
23558
- /*
23559
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23560
- * This software is released under MIT license.
23561
- * The full license information can be found in LICENSE in the root directory of this project.
23562
- */
23563
-
23564
- /*
23565
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23566
- * This software is released under MIT license.
23567
- * The full license information can be found in LICENSE in the root directory of this project.
23568
- */
23569
-
23570
- /*
23571
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23572
- * This software is released under MIT license.
23573
- * The full license information can be found in LICENSE in the root directory of this project.
23574
- */
23575
-
23576
- /*
23577
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23578
- * This software is released under MIT license.
23579
- * The full license information can be found in LICENSE in the root directory of this project.
23580
- */
23581
-
23582
- /*
23583
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23584
- * This software is released under MIT license.
23585
- * The full license information can be found in LICENSE in the root directory of this project.
23586
- */
23587
-
23588
- /*
23589
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23590
- * This software is released under MIT license.
23591
- * The full license information can be found in LICENSE in the root directory of this project.
23592
- */
23593
-
23594
- /*
23595
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23596
- * This software is released under MIT license.
23597
- * The full license information can be found in LICENSE in the root directory of this project.
23598
- */
23599
-
23600
- /*
23601
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23602
- * This software is released under MIT license.
23603
- * The full license information can be found in LICENSE in the root directory of this project.
23604
- */
23605
-
23606
- /*
23607
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23608
- * This software is released under MIT license.
23609
- * The full license information can be found in LICENSE in the root directory of this project.
23610
- */
23611
-
23612
- /*
23613
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23614
- * This software is released under MIT license.
23615
- * The full license information can be found in LICENSE in the root directory of this project.
23616
- */
23617
-
23618
- /*
23619
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23620
- * This software is released under MIT license.
23621
- * The full license information can be found in LICENSE in the root directory of this project.
23622
- */
23623
-
23624
- /*
23625
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23626
- * This software is released under MIT license.
23627
- * The full license information can be found in LICENSE in the root directory of this project.
23628
- */
23629
-
23630
- /*
23631
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23632
- * This software is released under MIT license.
23633
- * The full license information can be found in LICENSE in the root directory of this project.
23634
- */
23635
-
23636
- /*
23637
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23638
- * This software is released under MIT license.
23639
- * The full license information can be found in LICENSE in the root directory of this project.
23640
- */
23641
-
23642
- /*
23643
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23644
- * This software is released under MIT license.
23645
- * The full license information can be found in LICENSE in the root directory of this project.
23646
- */
23647
-
23648
- /*
23649
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23650
- * This software is released under MIT license.
23651
- * The full license information can be found in LICENSE in the root directory of this project.
23652
- */
23653
-
23654
- /*
23655
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23656
- * This software is released under MIT license.
23657
- * The full license information can be found in LICENSE in the root directory of this project.
23658
- */
23659
-
23660
- /*
23661
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23662
- * This software is released under MIT license.
23663
- * The full license information can be found in LICENSE in the root directory of this project.
23664
- */
24138
+ ];
24139
+ ClrTimelineModule.ctorParameters = () => [];
23665
24140
 
23666
24141
  /*
23667
24142
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23668
24143
  * This software is released under MIT license.
23669
24144
  * The full license information can be found in LICENSE in the root directory of this project.
23670
24145
  */
24146
+ class ClarityModule {
24147
+ }
24148
+ ClarityModule.decorators = [
24149
+ { type: NgModule, args: [{
24150
+ exports: [
24151
+ ClrEmphasisModule,
24152
+ ClrDataModule,
24153
+ ClrIconModule,
24154
+ ClrModalModule,
24155
+ ClrLoadingModule,
24156
+ ClrConditionalModule,
24157
+ ClrFocusTrapModule,
24158
+ ClrFocusOnViewInitModule,
24159
+ ClrButtonModule,
24160
+ ClrFormsModule,
24161
+ ClrLayoutModule,
24162
+ ClrPopoverModule,
24163
+ ClrWizardModule,
24164
+ ClrDragAndDropModule,
24165
+ ClrStepperModule,
24166
+ ClrSpinnerModule,
24167
+ ClrProgressBarModule,
24168
+ ClrPopoverModuleNext,
24169
+ ClrTimelineModule,
24170
+ ],
24171
+ },] }
24172
+ ];
23671
24173
 
23672
24174
  /*
23673
24175
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -23746,16 +24248,6 @@ ClarityModule.decorators = [
23746
24248
  * This software is released under MIT license.
23747
24249
  * The full license information can be found in LICENSE in the root directory of this project.
23748
24250
  */
23749
- const CLR_MENU_POSITIONS = [
23750
- 'bottom-left',
23751
- 'bottom-right',
23752
- 'top-left',
23753
- 'top-right',
23754
- 'left-bottom',
23755
- 'left-top',
23756
- 'right-bottom',
23757
- 'right-top',
23758
- ];
23759
24251
 
23760
24252
  /*
23761
24253
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -23786,14 +24278,6 @@ const CLR_MENU_POSITIONS = [
23786
24278
  * This software is released under MIT license.
23787
24279
  * The full license information can be found in LICENSE in the root directory of this project.
23788
24280
  */
23789
- function collapse() {
23790
- 'use strict';
23791
- return [
23792
- state('true', style({ height: 0, 'overflow-y': 'hidden' })),
23793
- transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),
23794
- transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),
23795
- ];
23796
- }
23797
24281
 
23798
24282
  /*
23799
24283
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -23806,12 +24290,6 @@ function collapse() {
23806
24290
  * This software is released under MIT license.
23807
24291
  * The full license information can be found in LICENSE in the root directory of this project.
23808
24292
  */
23809
- function fade(opacity = 1) {
23810
- return [
23811
- transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),
23812
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),
23813
- ];
23814
- }
23815
24293
 
23816
24294
  /*
23817
24295
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -23824,28 +24302,6 @@ function fade(opacity = 1) {
23824
24302
  * This software is released under MIT license.
23825
24303
  * The full license information can be found in LICENSE in the root directory of this project.
23826
24304
  */
23827
- function fadeSlide(direction) {
23828
- let transform = null;
23829
- if (direction === 'up') {
23830
- transform = 'translate(0, 25%)';
23831
- }
23832
- else if (direction === 'down') {
23833
- transform = 'translate(0, -25%)';
23834
- }
23835
- else if (direction === 'left') {
23836
- transform = 'translate(25%, 0)';
23837
- }
23838
- else if (direction === 'right') {
23839
- transform = 'translate(-25%, 0)';
23840
- }
23841
- else {
23842
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
23843
- }
23844
- return [
23845
- transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
23846
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
23847
- ];
23848
- }
23849
24305
 
23850
24306
  /*
23851
24307
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -23858,28 +24314,6 @@ function fadeSlide(direction) {
23858
24314
  * This software is released under MIT license.
23859
24315
  * The full license information can be found in LICENSE in the root directory of this project.
23860
24316
  */
23861
- function slide(direction) {
23862
- let transform = null;
23863
- if (direction === 'up') {
23864
- transform = 'translate(0, 25%)';
23865
- }
23866
- else if (direction === 'down') {
23867
- transform = 'translate(0, -25%)';
23868
- }
23869
- else if (direction === 'left') {
23870
- transform = 'translate(25%, 0)';
23871
- }
23872
- else if (direction === 'right') {
23873
- transform = 'translate(-25%, 0)';
23874
- }
23875
- else {
23876
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
23877
- }
23878
- return [
23879
- transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
23880
- transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
23881
- ];
23882
- }
23883
24317
 
23884
24318
  /*
23885
24319
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -23922,155 +24356,6 @@ function slide(direction) {
23922
24356
  * This software is released under MIT license.
23923
24357
  * The full license information can be found in LICENSE in the root directory of this project.
23924
24358
  */
23925
- var ClrAriaLivePoliteness;
23926
- (function (ClrAriaLivePoliteness) {
23927
- ClrAriaLivePoliteness["off"] = "off";
23928
- ClrAriaLivePoliteness["polite"] = "polite";
23929
- ClrAriaLivePoliteness["assertive"] = "assertive";
23930
- })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
23931
- /**
23932
- * Time in milliseconds before inserting the content into the container
23933
- */
23934
- const ARIA_LIVE_TICK = 100;
23935
- /**
23936
- * @deprecated
23937
- *
23938
- * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
23939
- * Please consider using the LiveAnnouncer in the Angular Material CDK
23940
- * if your project needs this functionality.
23941
- * More info: https://material.angular.io/cdk/a11y/overview#example-1
23942
- *
23943
- * This service handle `aria-live` accessibility attribute. The issue is that you need
23944
- * to have the DOM Element with attribute `aria-live` before you could insert content
23945
- * and SR (Screen Reader) pick the change and announce it.
23946
- *
23947
- * ```typescript
23948
- * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
23949
- *
23950
- * @Component({
23951
- * selector: 'clr-demo-component',
23952
- * providers: [ClrAriaLiveService],
23953
- * template: `
23954
- * <ng-content></ng-content>
23955
- * `,
23956
- * })
23957
- * export class DemoComponent {
23958
- * constructor(ariaLiveService: ClrAriaLiveService) {}
23959
- *
23960
- * public actionThatWillTriggerChange() {
23961
- * this.ariaLiveService.announce('message that I want to announce to SR');
23962
- * }
23963
- * }
23964
- * ```
23965
- *
23966
- */
23967
- class ClrAriaLiveService {
23968
- constructor(ngZone, _document, platformId) {
23969
- this.ngZone = ngZone;
23970
- this.platformId = platformId;
23971
- this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
23972
- this.document = _document;
23973
- }
23974
- /**
23975
- * get access to the internal HTML `id` that gonna be used for the AriaLive container.
23976
- * @return ID of the DOM Element as string.
23977
- */
23978
- get id() {
23979
- return this._id;
23980
- }
23981
- /**
23982
- * Append text content inside the AriaLive Container. This method will check if the
23983
- * DOM Element is existing if not it will create one for us and the will apply the text.
23984
- *
23985
- * ```typescript
23986
- * this.ariaLiveService.announce(this.el.nativeElement);
23987
- * // or
23988
- * this.ariaLiveService.announce('Message to announce to SR');
23989
- * ```
23990
- *
23991
- * @remark
23992
- * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
23993
- * The reason for that is that we don't want to do additional work if the SR will ignore it.
23994
- *
23995
- * @param message - This could be simple string or HTMLElement
23996
- * @param politeness - 'polite', 'assertive' or 'off'
23997
- */
23998
- announce(message, politeness = ClrAriaLivePoliteness.polite) {
23999
- if (politeness === ClrAriaLivePoliteness.off) {
24000
- return;
24001
- }
24002
- if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
24003
- this.ariaLiveElement = this.createContainer();
24004
- }
24005
- message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
24006
- // when there is no message do NOTHING!
24007
- if (!message) {
24008
- return;
24009
- }
24010
- this.ariaLiveElement.setAttribute('aria-live', politeness);
24011
- // This 100ms timeout is necessary for some browser + screen-reader combinations:
24012
- // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
24013
- // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
24014
- // second time without clearing and then using a non-zero delay.
24015
- // (using JAWS 17 at time of this writing).
24016
- this.ngZone.runOutsideAngular(() => {
24017
- // This clearTimeout will stop all older messages from announcing
24018
- // in the case where the messages are comming too fast we gonna try to append only
24019
- // the last one. That's what the SR will try to do anyway.
24020
- clearTimeout(this.previousTimeout);
24021
- this.previousTimeout = setTimeout(() => {
24022
- this.ariaLiveElement.textContent = message;
24023
- }, ARIA_LIVE_TICK);
24024
- });
24025
- }
24026
- /**
24027
- * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
24028
- * container from the document.
24029
- */
24030
- ngOnDestroy() {
24031
- clearTimeout(this.previousTimeout);
24032
- if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
24033
- this.document.body.removeChild(this.ariaLiveElement);
24034
- this.ariaLiveElement = null;
24035
- }
24036
- }
24037
- /**
24038
- * Create AriaLive DOM element as a last child of the document.
24039
- * After the element is created, we gonna apply Clarity class to hide it from
24040
- * the screen and set the `aria-live` politness.
24041
- *
24042
- * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
24043
- *
24044
- * @remark
24045
- * Calling this method multiple times will create multiple DOM Elements, that
24046
- * won't be tracked and will be GC after the service is destroyed.
24047
- *
24048
- * @return AriaLive container as HTMLElement
24049
- *
24050
- */
24051
- createContainer() {
24052
- const ariaLiveElement = this.document.createElement('div');
24053
- ariaLiveElement.setAttribute('id', this.id);
24054
- // Use clarity screen reader class to hide the dom element
24055
- // and fix the scrollbar shake
24056
- ariaLiveElement.classList.add('clr-sr-only');
24057
- ariaLiveElement.setAttribute('aria-atomic', 'true');
24058
- ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
24059
- this.document.body.appendChild(ariaLiveElement);
24060
- return ariaLiveElement;
24061
- }
24062
- }
24063
- ClrAriaLiveService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ClrAriaLiveService_Factory() { return new ClrAriaLiveService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.PLATFORM_ID)); }, token: ClrAriaLiveService, providedIn: "root" });
24064
- ClrAriaLiveService.decorators = [
24065
- { type: Injectable, args: [{
24066
- providedIn: 'root',
24067
- },] }
24068
- ];
24069
- ClrAriaLiveService.ctorParameters = () => [
24070
- { type: NgZone },
24071
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
24072
- { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
24073
- ];
24074
24359
 
24075
24360
  /*
24076
24361
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -24095,6 +24380,16 @@ ClrAriaLiveService.ctorParameters = () => [
24095
24380
  * This software is released under MIT license.
24096
24381
  * The full license information can be found in LICENSE in the root directory of this project.
24097
24382
  */
24383
+ const CLR_MENU_POSITIONS = [
24384
+ 'bottom-left',
24385
+ 'bottom-right',
24386
+ 'top-left',
24387
+ 'top-right',
24388
+ 'left-bottom',
24389
+ 'left-top',
24390
+ 'right-bottom',
24391
+ 'right-top',
24392
+ ];
24098
24393
 
24099
24394
  /*
24100
24395
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -24172,5 +24467,5 @@ ClrAriaLiveService.ctorParameters = () => [
24172
24467
  * Generated bundle index. Do not edit.
24173
24468
  */
24174
24469
 
24175
- 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, ClrStackViewLabel, 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, domAdapterFactory as ɵa, LayoutService as ɵb, AlertIconAndTypesService as ɵba, MultiAlertService as ɵbb, ControlIdService as ɵbc, NgControlService as ɵbd, ClrAbstractControl as ɵbe, ContainerIdService as ɵbf, AbstractIfState as ɵbg, IfControlStateService as ɵbh, MarkControlService as ɵbi, ControlClassService as ɵbj, ClrHostWrappingModule as ɵbk, EmptyAnchor as ɵbl, ClrKeyFocusModule as ɵbm, ClrKeyFocus as ɵbn, ClrKeyFocusItem as ɵbo, ClrRovingTabindex as ɵbp, OptionSelectionService as ɵbq, AriaService as ɵbr, ComboboxFocusHandler as ɵbs, COMBOBOX_FOCUS_HANDLER_PROVIDER as ɵbt, ComboboxContainerService as ɵbu, DateNavigationService as ɵbv, DateFormControlService as ɵbw, LocaleHelperService as ɵbx, FocusService$1 as ɵby, DateIOService as ɵbz, FOCUS_ON_VIEW_INIT_PROVIDER as ɵc, DatepickerEnabledService as ɵca, ViewManagerService as ɵcb, DatepickerFocusService as ɵcc, DatalistIdService as ɵcd, ClrOutsideClickModule as ɵce, OUSTIDE_CLICK_DIRECTIVES as ɵcf, OutsideClick as ɵcg, ClrExpandableAnimationModule as ɵch, DomAdapter as ɵci, DragEventListenerService as ɵcj, DragAndDropEventBusService as ɵck, DragHandleRegistrarService as ɵcl, DraggableSnapshotService as ɵcm, GlobalDragModeService as ɵcn, Selection as ɵco, Items as ɵcp, FiltersProvider as ɵcq, Page as ɵcr, StateDebouncer as ɵcs, Sort as ɵct, DatagridRenderOrganizer as ɵcu, RowActionService as ɵcv, ExpandableRowsCount as ɵcw, DetailService as ɵcx, StateProvider as ɵcy, TableSizeService as ɵcz, FOCUS_TRAP_DIRECTIVES as ɵd, ColumnsService as ɵda, DisplayModeService as ɵdb, DatagridFilterRegistrar as ɵdc, CustomFilter as ɵdd, DatagridIfExpandService as ɵde, SignpostFocusManager as ɵdf, SignpostIdService as ɵdg, ColumnResizerService as ɵdh, COLUMN_STATE as ɵdi, columnStateFactory as ɵdj, COLUMN_STATE_PROVIDER as ɵdk, WillyWonka as ɵdm, OompaLoompa as ɵdn, StackControl as ɵdo, TreeFeaturesService as ɵdp, treeFeaturesFactory as ɵdq, TREE_FEATURES_PROVIDER as ɵdr, TreeFocusManagerService as ɵds, RecursiveChildren as ɵdt, ScrollingService as ɵdu, ButtonInGroupService as ɵdv, ResponsiveNavigationService as ɵdw, ClrTemplateRefModule as ɵdx, TEMPLATE_REF_DIRECTIVES as ɵdy, TemplateRefContainer as ɵdz, RootDropdownService as ɵe, TabsService as ɵea, TABS_ID as ɵeb, tokenFactory as ɵec, TABS_ID_PROVIDER as ɵed, VerticalNavService as ɵee, VerticalNavIconService as ɵef, VerticalNavGroupRegistrationService as ɵeg, VerticalNavGroupService as ɵeh, TooltipIdService as ɵei, WizardNavigationService as ɵej, PageCollectionService as ɵek, ButtonHubService as ɵel, HeaderActionService as ɵem, AccordionService as ɵen, panelAnimation as ɵeo, stepAnimation as ɵep, defaultAnimationTiming as ɵeq, StepperService as ɵer, TimelineIconAttributeService as ɵes, clrRootDropdownFactory as ɵf, ROOT_DROPDOWN_PROVIDER as ɵg, POPOVER_HOST_ANCHOR as ɵh, FocusService as ɵi, clrFocusServiceFactory as ɵj, FOCUS_SERVICE_PROVIDER as ɵk, DropdownFocusHandler as ɵl, DROPDOWN_FOCUS_HANDLER_PROVIDER as ɵm, customFocusableItemProvider as ɵn, UNIQUE_ID as ɵo, uniqueIdFactory as ɵp, UNIQUE_ID_PROVIDER as ɵq, FocusableItem as ɵr, AbstractPopover as ɵs, BasicFocusableItem as ɵt, BASIC_FOCUSABLE_ITEM_PROVIDER as ɵu, IF_ACTIVE_ID as ɵv, tokenFactory$1 as ɵw, IF_ACTIVE_ID_PROVIDER as ɵx, IfActiveService as ɵy, IfExpandService as ɵz };
24470
+ 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, ClrStackViewLabel, 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, ɵ0, domAdapterFactory as ɵa, LayoutService as ɵb, AlertIconAndTypesService as ɵba, MultiAlertService as ɵbb, ControlIdService as ɵbc, NgControlService as ɵbd, ClrAbstractControl as ɵbe, ContainerIdService as ɵbf, AbstractIfState as ɵbg, IfControlStateService as ɵbh, MarkControlService as ɵbi, ControlClassService as ɵbj, ClrHostWrappingModule as ɵbk, EmptyAnchor as ɵbl, ClrKeyFocusModule as ɵbm, ClrKeyFocus as ɵbn, ClrKeyFocusItem as ɵbo, ClrRovingTabindex as ɵbp, OptionSelectionService as ɵbq, AriaService as ɵbr, ComboboxFocusHandler as ɵbs, COMBOBOX_FOCUS_HANDLER_PROVIDER as ɵbt, ComboboxContainerService as ɵbu, DateNavigationService as ɵbv, DateFormControlService as ɵbw, LocaleHelperService as ɵbx, FocusService$1 as ɵby, DateIOService as ɵbz, FOCUS_ON_VIEW_INIT_PROVIDER as ɵc, DatepickerEnabledService as ɵca, ViewManagerService as ɵcb, DatepickerFocusService as ɵcc, DatalistIdService as ɵcd, ClrOutsideClickModule as ɵce, OUSTIDE_CLICK_DIRECTIVES as ɵcf, OutsideClick as ɵcg, ClrExpandableAnimationModule as ɵch, DomAdapter as ɵci, DragEventListenerService as ɵcj, DragAndDropEventBusService as ɵck, DragHandleRegistrarService as ɵcl, DraggableSnapshotService as ɵcm, GlobalDragModeService as ɵcn, Selection as ɵco, Items as ɵcp, FiltersProvider as ɵcq, Page as ɵcr, StateDebouncer as ɵcs, Sort as ɵct, DatagridRenderOrganizer as ɵcu, RowActionService as ɵcv, ExpandableRowsCount as ɵcw, DetailService as ɵcx, StateProvider as ɵcy, TableSizeService as ɵcz, FOCUS_TRAP_DIRECTIVES as ɵd, ColumnsService as ɵda, DisplayModeService as ɵdb, DatagridFilterRegistrar as ɵdc, CustomFilter as ɵdd, DatagridIfExpandService as ɵde, SignpostFocusManager as ɵdf, SignpostIdService as ɵdg, ColumnResizerService as ɵdh, COLUMN_STATE as ɵdi, columnStateFactory as ɵdj, COLUMN_STATE_PROVIDER as ɵdk, WillyWonka as ɵdm, OompaLoompa as ɵdn, StackControl as ɵdo, TreeFeaturesService as ɵdp, treeFeaturesFactory as ɵdq, TREE_FEATURES_PROVIDER as ɵdr, TreeFocusManagerService as ɵds, RecursiveChildren as ɵdt, ScrollingService as ɵdu, ButtonInGroupService as ɵdv, ResponsiveNavigationService as ɵdw, FocusTrap as ɵdy, ClrTemplateRefModule as ɵdz, RootDropdownService as ɵe, TEMPLATE_REF_DIRECTIVES as ɵea, TemplateRefContainer as ɵeb, TabsService as ɵec, TABS_ID as ɵed, tokenFactory as ɵee, TABS_ID_PROVIDER as ɵef, VerticalNavService as ɵeg, VerticalNavIconService as ɵeh, VerticalNavGroupRegistrationService as ɵei, VerticalNavGroupService as ɵej, TooltipIdService as ɵek, WizardNavigationService as ɵel, PageCollectionService as ɵem, ButtonHubService as ɵen, HeaderActionService as ɵeo, AccordionService as ɵep, panelAnimation as ɵeq, stepAnimation as ɵer, defaultAnimationTiming as ɵes, StepperService as ɵet, TimelineIconAttributeService as ɵeu, clrRootDropdownFactory as ɵf, ROOT_DROPDOWN_PROVIDER as ɵg, POPOVER_HOST_ANCHOR as ɵh, FocusService as ɵi, clrFocusServiceFactory as ɵj, FOCUS_SERVICE_PROVIDER as ɵk, DropdownFocusHandler as ɵl, DROPDOWN_FOCUS_HANDLER_PROVIDER as ɵm, customFocusableItemProvider as ɵn, UNIQUE_ID as ɵo, uniqueIdFactory as ɵp, UNIQUE_ID_PROVIDER as ɵq, FocusableItem as ɵr, AbstractPopover as ɵs, BasicFocusableItem as ɵt, BASIC_FOCUSABLE_ITEM_PROVIDER as ɵu, IF_ACTIVE_ID as ɵv, tokenFactory$1 as ɵw, IF_ACTIVE_ID_PROVIDER as ɵx, IfActiveService as ɵy, IfExpandService as ɵz };
24176
24471
  //# sourceMappingURL=clr-angular.js.map