@clr/angular 17.0.0-next.1 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +4 -0
  2. package/accordion/stepper/models/stepper.model.d.ts +2 -0
  3. package/accordion/stepper/providers/stepper.service.d.ts +2 -0
  4. package/clarity.api.md +57 -54
  5. package/data/datagrid/datagrid-if-expanded.service.d.ts +1 -1
  6. package/data/datagrid/datagrid.module.d.ts +36 -37
  7. package/data/datagrid/index.d.ts +0 -1
  8. package/data/datagrid/providers/items.d.ts +2 -11
  9. package/emphasis/alert/alert.d.ts +6 -2
  10. package/emphasis/alert/alert.module.d.ts +2 -1
  11. package/esm2020/accordion/accordion.mjs +3 -3
  12. package/esm2020/accordion/stepper/models/stepper.model.mjs +7 -1
  13. package/esm2020/accordion/stepper/providers/stepper.service.mjs +9 -1
  14. package/esm2020/accordion/stepper/stepper-panel.mjs +11 -6
  15. package/esm2020/button/button-group/button-group.mjs +9 -11
  16. package/esm2020/button/button-loading/loading-button.mjs +25 -15
  17. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +3 -4
  18. package/esm2020/data/datagrid/datagrid-if-expanded.service.mjs +1 -1
  19. package/esm2020/data/datagrid/datagrid-items.mjs +1 -2
  20. package/esm2020/data/datagrid/datagrid.mjs +3 -5
  21. package/esm2020/data/datagrid/datagrid.module.mjs +1 -5
  22. package/esm2020/data/datagrid/index.mjs +1 -2
  23. package/esm2020/data/datagrid/providers/items.mjs +3 -21
  24. package/esm2020/data/datagrid/providers/selection.mjs +16 -22
  25. package/esm2020/emphasis/alert/alert-item.mjs +9 -3
  26. package/esm2020/emphasis/alert/alert.mjs +21 -10
  27. package/esm2020/emphasis/alert/alert.module.mjs +7 -6
  28. package/esm2020/emphasis/alert/alerts.mjs +3 -2
  29. package/esm2020/emphasis/alert/providers/icon-and-types.service.mjs +20 -5
  30. package/esm2020/emphasis/alert/utils/alert-types.mjs +2 -2
  31. package/esm2020/forms/combobox/option-items.directive.mjs +12 -6
  32. package/esm2020/forms/common/wrapped-control.mjs +44 -19
  33. package/esm2020/forms/datepicker/date-input.mjs +10 -1
  34. package/esm2020/forms/datepicker/providers/date-io.service.mjs +2 -2
  35. package/esm2020/forms/password/password-container.mjs +9 -3
  36. package/esm2020/popover/signpost/signpost-trigger.mjs +2 -1
  37. package/esm2020/progress/progress-bars/progress-bar.mjs +8 -26
  38. package/esm2020/utils/chocolate/willy-wonka.mjs +1 -1
  39. package/esm2020/utils/focus/key-focus/key-focus.mjs +2 -2
  40. package/esm2020/utils/i18n/common-strings.default.mjs +5 -3
  41. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  42. package/esm2020/utils/popover/providers/popover-position.service.mjs +11 -3
  43. package/esm2020/wizard/providers/button-hub.service.mjs +1 -1
  44. package/esm2020/wizard/providers/wizard-navigation.service.mjs +1 -1
  45. package/esm2020/wizard/wizard.mjs +2 -2
  46. package/fesm2015/clr-angular.mjs +236 -208
  47. package/fesm2015/clr-angular.mjs.map +1 -1
  48. package/fesm2020/clr-angular.mjs +233 -205
  49. package/fesm2020/clr-angular.mjs.map +1 -1
  50. package/forms/common/wrapped-control.d.ts +10 -3
  51. package/forms/datepicker/date-input.d.ts +1 -0
  52. package/forms/password/password-container.d.ts +2 -0
  53. package/package.json +3 -3
  54. package/progress/progress-bars/progress-bar.d.ts +2 -10
  55. package/utils/chocolate/willy-wonka.d.ts +1 -1
  56. package/utils/i18n/common-strings.interface.d.ts +8 -0
  57. package/wizard/providers/button-hub.service.d.ts +6 -6
  58. package/wizard/providers/wizard-navigation.service.d.ts +1 -1
  59. package/data/datagrid/datagrid-items-trackby.d.ts +0 -10
  60. package/esm2020/data/datagrid/datagrid-items-trackby.mjs +0 -43
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, NgModule, Optional, Input, Injectable, Component, ChangeDetectionStrategy, EventEmitter, HostBinding, Output, ContentChildren, PLATFORM_ID, Inject, ViewChild, HostListener, SkipSelf, Renderer2, InjectionToken, ElementRef, ContentChild, ComponentFactoryResolver, Self, Attribute, LOCALE_ID, ViewContainerRef, NgZone, ChangeDetectorRef, TemplateRef } from '@angular/core';
2
+ import { Directive, NgModule, Optional, Input, Injectable, Component, ChangeDetectionStrategy, EventEmitter, HostBinding, Output, ContentChildren, PLATFORM_ID, Inject, ViewChild, HostListener, SkipSelf, Renderer2, InjectionToken, ElementRef, ContentChild, ComponentFactoryResolver, KeyValueDiffers, Self, Attribute, LOCALE_ID, ViewContainerRef, NgZone, ChangeDetectorRef, TemplateRef } from '@angular/core';
3
3
  import * as i5 from '@angular/common';
4
4
  import { CommonModule, isPlatformBrowser, DOCUMENT, NgForOf, getLocaleDayNames, FormStyle, TranslationWidth, getLocaleMonthNames, getLocaleFirstDayOfWeek, getLocaleDateFormat, FormatWidth } from '@angular/common';
5
- import { ClarityIcons, angleIcon, exclamationCircleIcon, checkCircleIcon, ellipsisHorizontalIcon, windowCloseIcon, eventIcon, calendarIcon, eyeHideIcon, eyeIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, timesIcon, stepForward2Icon, angleDoubleIcon, filterGridCircleIcon, filterGridIcon, infoCircleIcon, exclamationTriangleIcon, circleIcon, dotCircleIcon, errorStandardIcon, successStandardIcon } from '@cds/core/icon';
6
- import { map, tap, startWith, distinctUntilChanged, pairwise, filter, debounceTime, takeUntil, take, first, switchMap } from 'rxjs/operators';
5
+ import { ClarityIcons, angleIcon, exclamationCircleIcon, checkCircleIcon, ellipsisHorizontalIcon, windowCloseIcon, eventIcon, calendarIcon, eyeHideIcon, eyeIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, timesIcon, stepForward2Icon, angleDoubleIcon, filterGridCircleIcon, filterGridIcon, errorStandardIcon, helpIcon, infoStandardIcon, noteIcon, successStandardIcon, warningStandardIcon, infoCircleIcon, circleIcon, dotCircleIcon } from '@cds/core/icon';
6
+ import { map, tap, startWith, distinctUntilChanged, filter, skipUntil, debounceTime, takeUntil, take, first, switchMap } from 'rxjs/operators';
7
7
  import * as i3 from 'rxjs';
8
8
  import { Subject, BehaviorSubject, Observable, fromEvent, isObservable, of, ReplaySubject, combineLatest, merge } from 'rxjs';
9
9
  import { trigger, transition, style, animate, state, keyframes } from '@angular/animations';
@@ -279,6 +279,8 @@ const commonStringsDefault = {
279
279
  success: 'Success',
280
280
  warning: 'Warning',
281
281
  danger: 'Error',
282
+ neutral: 'Neutral',
283
+ unknown: 'Unknown',
282
284
  rowActions: 'Available actions',
283
285
  pickColumns: 'Manage Columns',
284
286
  showColumns: 'Show Columns',
@@ -361,8 +363,8 @@ const commonStringsDefault = {
361
363
  * Password Input
362
364
  * Screen-reader text for the hide/show password field button
363
365
  */
364
- passwordHide: 'Hide password',
365
- passwordShow: 'Show password',
366
+ passwordHide: 'Hide password for {LABEL}',
367
+ passwordShow: 'Show password for {LABEL}',
366
368
  /**
367
369
  * Datagrid footer; sr-only text after the number of selected rows.
368
370
  */
@@ -666,7 +668,7 @@ class ClrAccordion {
666
668
  }
667
669
  }
668
670
  ClrAccordion.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordion, deps: [{ token: AccordionService }], target: i0.ɵɵFactoryTarget.Component });
669
- ClrAccordion.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordion, selector: "clr-accordion", inputs: { multiPanel: ["clrAccordionMultiPanel", "multiPanel"] }, host: { properties: { "class.clr-accordion": "true" } }, providers: [AccordionService], queries: [{ propertyName: "panels", predicate: ClrAccordionPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
671
+ ClrAccordion.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordion, selector: "clr-accordion", inputs: { multiPanel: ["clrAccordionMultiPanel", "multiPanel"] }, host: { properties: { "class.clr-accordion": "true" } }, providers: [AccordionService], queries: [{ propertyName: "panels", predicate: ClrAccordionPanel }], usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
670
672
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordion, decorators: [{
671
673
  type: Component,
672
674
  args: [{
@@ -681,7 +683,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
681
683
  args: ['clrAccordionMultiPanel']
682
684
  }], panels: [{
683
685
  type: ContentChildren,
684
- args: [ClrAccordionPanel, { descendants: true }]
686
+ args: [ClrAccordionPanel]
685
687
  }] } });
686
688
 
687
689
  /*
@@ -945,6 +947,12 @@ class StepperModel extends AccordionModel {
945
947
  }
946
948
  });
947
949
  }
950
+ setPanelValid(panelId) {
951
+ this._panels[panelId].status = AccordionStatus.Complete;
952
+ }
953
+ setPanelInvalid(panelId) {
954
+ this._panels[panelId].status = AccordionStatus.Error;
955
+ }
948
956
  setPanelsWithErrors(ids) {
949
957
  ids.forEach(id => this.setPanelError(id));
950
958
  }
@@ -1028,6 +1036,14 @@ class StepperService extends AccordionService {
1028
1036
  this.accordion.resetPanels();
1029
1037
  this.emitUpdatedPanels();
1030
1038
  }
1039
+ setPanelValid(panelId) {
1040
+ this.accordion.setPanelValid(panelId);
1041
+ this.emitUpdatedPanels();
1042
+ }
1043
+ setPanelInvalid(panelId) {
1044
+ this.accordion.setPanelInvalid(panelId);
1045
+ this.emitUpdatedPanels();
1046
+ }
1031
1047
  setPanelsWithErrors(ids) {
1032
1048
  this.accordion.setPanelsWithErrors(ids);
1033
1049
  this.emitUpdatedPanels();
@@ -1090,11 +1106,16 @@ class ClrStepperPanel extends ClrAccordionPanel {
1090
1106
  this.panel = this.panel.pipe(tap(panel => this.triggerAllFormControlValidationIfError(panel)));
1091
1107
  this.stepperService.disablePanel(this.id, true);
1092
1108
  this.listenToFocusChanges();
1109
+ // not all stepper panels are guaranteed to have a form (i.e. empty template-driven)
1093
1110
  if (this.formGroup) {
1094
- // not all stepper panels are guaranteed to have a form (i.e. empty template-driven)
1095
- this.subscriptions.push(this.formGroup.statusChanges.pipe(pairwise()).subscribe(([prevStatus, newStatus]) => {
1096
- if ('VALID' === prevStatus && 'INVALID' === newStatus) {
1097
- this.stepperService.navigateToNextPanel(this.id, this.formGroup.valid);
1111
+ // set panel status on form status change only after the form becomes invalid
1112
+ const invalidStatusTrigger = this.formGroup.statusChanges.pipe(filter(status => status === 'INVALID'));
1113
+ this.subscriptions.push(this.formGroup.statusChanges.pipe(skipUntil(invalidStatusTrigger), distinctUntilChanged()).subscribe(status => {
1114
+ if (status === 'VALID') {
1115
+ this.stepperService.setPanelValid(this.id);
1116
+ }
1117
+ else if (status === 'INVALID') {
1118
+ this.stepperService.setPanelInvalid(this.id);
1098
1119
  }
1099
1120
  }));
1100
1121
  }
@@ -1940,12 +1961,12 @@ class ClrPopoverPositionService {
1940
1961
  *
1941
1962
  * Note, more than 3 viewport violations and there isn't anything we can do to help. Also when there are two
1942
1963
  * violations, we can't help if the violations are TOP+BOTTOM || LEFT+RIGHT => There is no transformation we
1943
- * can make to the postion that will help.
1964
+ * can make to the position that will help.
1944
1965
  *
1945
1966
  * Some examples:
1946
1967
  * There is only one error and Primary axis is VERTICAL
1947
1968
  * - this.handleVerticalAxisOneViolation has a switch that will use the error sum to apply the correct
1948
- * transform to the postion based on the reduction of visibilityViolations.
1969
+ * transform to the position based on the reduction of visibilityViolations.
1949
1970
  *
1950
1971
  * There are two errors and Primary axis is HORIZONTAL
1951
1972
  * - handleHorizontalAxisTwoViolations has a switch that uses the error sum to apply both transforms needed to
@@ -1977,6 +1998,14 @@ class ClrPopoverPositionService {
1977
1998
  if (this.currentContentCoords.top < 0) {
1978
1999
  this.contentOffsets.yOffset += Math.abs(this.currentContentCoords.top);
1979
2000
  }
2001
+ /**
2002
+ * This detects the condition where the popover is flipped because it would violate the bottom of the viewport, but flipping it results in the
2003
+ * popover rendering above the top of the body (y coordinate outside the body). In that event, it should be rendered within the body
2004
+ * as much as possible, so this logic sets the top of popover to render touching the top of the body.
2005
+ */
2006
+ if (this.contentOffsets.yOffset + this.currentAnchorCoords.y < 0) {
2007
+ this.contentOffsets.yOffset = 0 - this.currentContentCoords.top;
2008
+ }
1980
2009
  return this.contentOffsets;
1981
2010
  }
1982
2011
  handleVerticalAxisOneViolation(errorSum) {
@@ -3802,16 +3831,14 @@ class ClrButtonGroup {
3802
3831
  this.menuButtons = tempInMenuButtons;
3803
3832
  }
3804
3833
  handleFocusOnMenuOpen() {
3805
- if (this.menuButtons.length) {
3806
- this.toggleService.popoverVisible.pipe(takeUntil(this.destroy$)).subscribe(visible => {
3807
- if (visible) {
3808
- this.focusHandler.initialize({
3809
- menu: this.menu.nativeElement,
3810
- menuToggle: this.menuToggle.nativeElement,
3811
- });
3812
- }
3813
- });
3814
- }
3834
+ this.toggleService.popoverVisible.pipe(takeUntil(this.destroy$)).subscribe(visible => {
3835
+ if (visible) {
3836
+ this.focusHandler.initialize({
3837
+ menu: this.menu.nativeElement,
3838
+ menuToggle: this.menuToggle.nativeElement,
3839
+ });
3840
+ }
3841
+ });
3815
3842
  }
3816
3843
  }
3817
3844
  ClrButtonGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrButtonGroup, deps: [{ token: ButtonInGroupService }, { token: ClrPopoverToggleService }, { token: ClrCommonStringsService }, { token: ClrDestroyService }, { token: ButtonGroupFocusHandler }], target: i0.ɵɵFactoryTarget.Component });
@@ -3910,22 +3937,27 @@ class ClrLoadingButton {
3910
3937
  }
3911
3938
  ClrLoadingButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrLoadingButton, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
3912
3939
  ClrLoadingButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrLoadingButton, selector: "button[clrLoading]", inputs: { disabled: "disabled" }, outputs: { clrLoadingChange: "clrLoadingChange" }, host: { properties: { "attr.disabled": "disabled? '' : null" } }, providers: [{ provide: LoadingListener, useExisting: ClrLoadingButton }], ngImport: i0, template: `
3913
- <ng-container [ngSwitch]="state">
3914
- <span *ngSwitchCase="buttonState.LOADING">
3940
+ <span @parent [ngSwitch]="state">
3941
+ <ng-container *ngSwitchCase="buttonState.LOADING">
3915
3942
  <span @spinner class="spinner spinner-inline"></span>
3916
- </span>
3917
- <span *ngSwitchCase="buttonState.SUCCESS">
3943
+ </ng-container>
3944
+ <ng-container *ngSwitchCase="buttonState.SUCCESS">
3918
3945
  <span
3919
3946
  @validated
3920
3947
  (@validated.done)="this.loadingStateChange(this.buttonState.DEFAULT)"
3921
3948
  class="spinner spinner-inline spinner-check"
3922
3949
  ></span>
3923
- </span>
3924
- <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton>
3950
+ </ng-container>
3951
+ <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton class="clr-loading-btn-content">
3925
3952
  <ng-content></ng-content>
3926
3953
  </span>
3927
- </ng-container>
3954
+ </span>
3928
3955
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
3956
+ trigger('parent', [
3957
+ // Skip :enter animation on first render.
3958
+ // The button text/content should only be faded when transitioning to or from a non-default state.
3959
+ transition(':enter', []),
3960
+ ]),
3929
3961
  trigger('defaultButton', [
3930
3962
  transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
3931
3963
  // TODO: see if we can get leave animation to work before spinner's enter animation
@@ -3953,24 +3985,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
3953
3985
  args: [{
3954
3986
  selector: 'button[clrLoading]',
3955
3987
  template: `
3956
- <ng-container [ngSwitch]="state">
3957
- <span *ngSwitchCase="buttonState.LOADING">
3988
+ <span @parent [ngSwitch]="state">
3989
+ <ng-container *ngSwitchCase="buttonState.LOADING">
3958
3990
  <span @spinner class="spinner spinner-inline"></span>
3959
- </span>
3960
- <span *ngSwitchCase="buttonState.SUCCESS">
3991
+ </ng-container>
3992
+ <ng-container *ngSwitchCase="buttonState.SUCCESS">
3961
3993
  <span
3962
3994
  @validated
3963
3995
  (@validated.done)="this.loadingStateChange(this.buttonState.DEFAULT)"
3964
3996
  class="spinner spinner-inline spinner-check"
3965
3997
  ></span>
3966
- </span>
3967
- <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton>
3998
+ </ng-container>
3999
+ <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton class="clr-loading-btn-content">
3968
4000
  <ng-content></ng-content>
3969
4001
  </span>
3970
- </ng-container>
4002
+ </span>
3971
4003
  `,
3972
4004
  providers: [{ provide: LoadingListener, useExisting: ClrLoadingButton }],
3973
4005
  animations: [
4006
+ trigger('parent', [
4007
+ // Skip :enter animation on first render.
4008
+ // The button text/content should only be faded when transitioning to or from a non-default state.
4009
+ transition(':enter', []),
4010
+ ]),
3974
4011
  trigger('defaultButton', [
3975
4012
  transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
3976
4013
  // TODO: see if we can get leave animation to work before spinner's enter animation
@@ -4786,6 +4823,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
4786
4823
  * This software is released under MIT license.
4787
4824
  * The full license information can be found in LICENSE in the root directory of this project.
4788
4825
  */
4826
+ var CHANGE_KEYS;
4827
+ (function (CHANGE_KEYS) {
4828
+ CHANGE_KEYS["FORM"] = "form";
4829
+ CHANGE_KEYS["MODEL"] = "model";
4830
+ })(CHANGE_KEYS || (CHANGE_KEYS = {}));
4789
4831
  class WrappedFormControl {
4790
4832
  // I lost way too much time trying to make this work without injecting the ViewContainerRef and the Injector,
4791
4833
  // I'm giving up. So we have to inject these two manually for now.
@@ -4802,6 +4844,7 @@ class WrappedFormControl {
4802
4844
  this.ifControlStateService = injector.get(IfControlStateService, null);
4803
4845
  this.controlClassService = injector.get(ControlClassService, null);
4804
4846
  this.markControlService = injector.get(MarkControlService, null);
4847
+ this.differs = injector.get(KeyValueDiffers, null);
4805
4848
  }
4806
4849
  if (this.controlClassService) {
4807
4850
  this.controlClassService.initControlClass(renderer, el.nativeElement);
@@ -4816,6 +4859,9 @@ class WrappedFormControl {
4816
4859
  this.setAriaDescribedBy(state);
4817
4860
  }));
4818
4861
  }
4862
+ if (ngControl) {
4863
+ this.differ = this.differs.find(ngControl).create();
4864
+ }
4819
4865
  }
4820
4866
  get id() {
4821
4867
  return this._id;
@@ -4839,10 +4885,23 @@ class WrappedFormControl {
4839
4885
  else {
4840
4886
  this._id = this.controlIdService.id;
4841
4887
  }
4842
- if (this.ngControlService) {
4888
+ if (this.ngControlService && this.ngControl) {
4843
4889
  this.ngControlService.setControl(this.ngControl);
4844
4890
  }
4845
4891
  }
4892
+ ngDoCheck() {
4893
+ if (this.differ) {
4894
+ const changes = this.differ.diff(this.ngControl);
4895
+ if (changes) {
4896
+ changes.forEachChangedItem(change => {
4897
+ if ((change.key === CHANGE_KEYS.FORM || change.key === CHANGE_KEYS.MODEL) &&
4898
+ change.currentValue !== change.previousValue) {
4899
+ this.triggerValidation();
4900
+ }
4901
+ });
4902
+ }
4903
+ }
4904
+ }
4846
4905
  ngOnDestroy() {
4847
4906
  this.subscriptions.forEach(sub => sub.unsubscribe());
4848
4907
  }
@@ -4864,8 +4923,10 @@ class WrappedFormControl {
4864
4923
  }
4865
4924
  }
4866
4925
  markAsTouched() {
4867
- this.ngControl.control.markAsTouched();
4868
- this.ngControl.control.updateValueAndValidity();
4926
+ if (this.ngControl) {
4927
+ this.ngControl.control.markAsTouched();
4928
+ this.ngControl.control.updateValueAndValidity();
4929
+ }
4869
4930
  }
4870
4931
  setAriaDescribedBy(helpers) {
4871
4932
  if (helpers.show) {
@@ -4878,24 +4939,25 @@ class WrappedFormControl {
4878
4939
  this.renderer.removeAttribute(this.el.nativeElement, 'aria-describedby');
4879
4940
  }
4880
4941
  getAriaDescribedById(helpers) {
4881
- let suffix = CONTROL_SUFFIX.HELPER;
4882
- if (helpers.showInvalid) {
4883
- suffix = CONTROL_SUFFIX.ERROR;
4884
- }
4885
- else if (helpers.showValid) {
4886
- suffix = CONTROL_SUFFIX.SUCCESS;
4887
- }
4888
- if (this.containerIdService) {
4889
- return this.containerIdService.id.concat('-', suffix);
4890
- }
4891
- if (this.controlIdService) {
4892
- return this.controlIdService.id.concat('-', suffix);
4893
- }
4942
+ const elementId = this.containerIdService?.id || this.controlIdService?.id;
4894
4943
  /**
4895
4944
  * If ContainerIdService or ControlIdService are missing don't try to guess
4896
4945
  * Don't set anything.
4897
4946
  */
4898
- return null;
4947
+ if (!elementId) {
4948
+ return null;
4949
+ }
4950
+ /**
4951
+ * As the helper text is now always visible. If we have error/success then we should use both ids.
4952
+ */
4953
+ const describedByIds = [`${elementId}-${CONTROL_SUFFIX.HELPER}`];
4954
+ if (helpers.showInvalid) {
4955
+ describedByIds.push(`${elementId}-${CONTROL_SUFFIX.ERROR}`);
4956
+ }
4957
+ else if (helpers.showValid) {
4958
+ describedByIds.push(`${elementId}-${CONTROL_SUFFIX.SUCCESS}`);
4959
+ }
4960
+ return describedByIds.join(' ');
4899
4961
  }
4900
4962
  }
4901
4963
  WrappedFormControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: WrappedFormControl, deps: [{ token: i0.ViewContainerRef }, { token: i0.Type }, { token: i0.Injector }, { token: i1.NgControl }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
@@ -5739,7 +5801,7 @@ class ClrKeyFocus {
5739
5801
  }
5740
5802
  if (this.focusOnLoad) {
5741
5803
  this.currentItem.focus();
5742
- this.focusChange.next();
5804
+ this.focusChange.emit();
5743
5805
  }
5744
5806
  }
5745
5807
  }
@@ -7115,25 +7177,24 @@ class ClrOptionItems {
7115
7177
  if (!this._rawItems || this.filter === undefined || this.filter === null) {
7116
7178
  return;
7117
7179
  }
7180
+ const normalizedFilterValue = normalizeValue(this.filter);
7118
7181
  if (this.optionService.showAllOptions) {
7119
7182
  this.filteredItems = this._rawItems;
7120
7183
  }
7121
7184
  else if (this._filterField) {
7122
7185
  this.filteredItems = this._rawItems.filter(item => {
7123
7186
  const objValue = item[this._filterField];
7124
- return objValue ? objValue.toString().toLowerCase().indexOf(this.filter.toLowerCase().toString()) > -1 : false;
7187
+ return objValue ? normalizeValue(objValue).includes(normalizedFilterValue) : false;
7125
7188
  });
7126
7189
  }
7127
7190
  else {
7128
7191
  // Filter by all item object values
7129
7192
  this.filteredItems = this._rawItems.filter(item => {
7130
7193
  if (typeof item !== 'object') {
7131
- return item.toString().toLowerCase().indexOf(this.filter.toString().toLowerCase()) > -1;
7194
+ return normalizeValue(item).includes(normalizedFilterValue);
7132
7195
  }
7133
7196
  const objValues = Object.values(item).filter(value => {
7134
- return value !== null && value !== undefined
7135
- ? value.toString().toLowerCase().indexOf(this.filter.toString().toLowerCase()) > -1
7136
- : false;
7197
+ return value !== null && value !== undefined ? normalizeValue(value).includes(normalizedFilterValue) : false;
7137
7198
  });
7138
7199
  return objValues.length > 0;
7139
7200
  });
@@ -7158,6 +7219,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7158
7219
  type: Input,
7159
7220
  args: ['clrOptionItemsField']
7160
7221
  }] } });
7222
+ function normalizeValue(value) {
7223
+ return value
7224
+ .toString()
7225
+ .normalize('NFD')
7226
+ .replace(/\p{Diacritic}/gu, '')
7227
+ .toLowerCase();
7228
+ }
7161
7229
 
7162
7230
  /*
7163
7231
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
@@ -8367,7 +8435,7 @@ class DateIOService {
8367
8435
  return '';
8368
8436
  }
8369
8437
  getDateValueFromDateString(date) {
8370
- if (!date) {
8438
+ if (!date || typeof date !== 'string') {
8371
8439
  return null;
8372
8440
  }
8373
8441
  const dateParts = date.match(USER_INPUT_REGEX);
@@ -9573,9 +9641,11 @@ class ClrDateInput extends WrappedFormControl {
9573
9641
  }
9574
9642
  set min(dateString) {
9575
9643
  this.dateIOService.setMinDate(dateString);
9644
+ this.triggerControlValidation();
9576
9645
  }
9577
9646
  set max(dateString) {
9578
9647
  this.dateIOService.setMaxDate(dateString);
9648
+ this.triggerControlValidation();
9579
9649
  }
9580
9650
  get disabled() {
9581
9651
  if (this.dateFormControlService) {
@@ -9640,6 +9710,13 @@ class ClrDateInput extends WrappedFormControl {
9640
9710
  this.focusService.focused = focus;
9641
9711
  }
9642
9712
  }
9713
+ triggerControlValidation() {
9714
+ if (this.datepickerHasFormControl()) {
9715
+ // Set `emitEvent` to false to prevent unnecessary value change event. Status change event will be emitted by `setErrors` below.
9716
+ this.control.control?.updateValueAndValidity({ emitEvent: false });
9717
+ this.control.control?.setErrors(this.control.control.errors);
9718
+ }
9719
+ }
9643
9720
  populateServicesFromContainerComponent() {
9644
9721
  if (!this.container) {
9645
9722
  this.dateIOService = this.getProviderFromContainer(DateIOService);
@@ -9945,6 +10022,12 @@ class ClrPasswordContainer extends ClrAbstractContainer {
9945
10022
  this.show = !this.show;
9946
10023
  this.toggleService.next(this.show);
9947
10024
  }
10025
+ showPasswordText(label) {
10026
+ return this.commonStrings.parse(this.commonStrings.keys.passwordShow, { LABEL: label });
10027
+ }
10028
+ hidePasswordText(label) {
10029
+ return this.commonStrings.parse(this.commonStrings.keys.passwordHide, { LABEL: label });
10030
+ }
9948
10031
  }
9949
10032
  ClrPasswordContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrPasswordContainer, deps: [{ token: IfControlStateService }, { token: LayoutService, optional: true }, { token: ControlClassService }, { token: NgControlService }, { token: FocusService }, { token: TOGGLE_SERVICE }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
9950
10033
  ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrPasswordContainer, selector: "clr-password-container", inputs: { clrToggle: "clrToggle" }, host: { properties: { "class.clr-form-control": "true", "class.clr-form-control-disabled": "control?.disabled", "class.clr-row": "addGrid()" } }, providers: [
@@ -9970,7 +10053,7 @@ ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
9970
10053
  >
9971
10054
  <cds-icon class="clr-password-eye-icon" [attr.shape]="show ? 'eye-hide' : 'eye'"></cds-icon>
9972
10055
  <span class="clr-sr-only">
9973
- {{ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow }}
10056
+ {{ show ? hidePasswordText(label?.labelText) : showPasswordText(label?.labelText) }}
9974
10057
  </span>
9975
10058
  </button>
9976
10059
  </div>
@@ -10014,7 +10097,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
10014
10097
  >
10015
10098
  <cds-icon class="clr-password-eye-icon" [attr.shape]="show ? 'eye-hide' : 'eye'"></cds-icon>
10016
10099
  <span class="clr-sr-only">
10017
- {{ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow }}
10100
+ {{ show ? hidePasswordText(label?.labelText) : showPasswordText(label?.labelText) }}
10018
10101
  </span>
10019
10102
  </button>
10020
10103
  </div>
@@ -13194,11 +13277,9 @@ class Items {
13194
13277
  this._change = new Subject();
13195
13278
  this._allChanges = new Subject();
13196
13279
  /**
13197
- * Tracking function to identify objects. Default is reference equality.
13198
- *
13199
- * @deprecated in v15 and scheduled for removal in v17 (CDE-71)
13280
+ * Tracking function to identify objects.
13200
13281
  */
13201
- this.iteratorTrackBy = (_index, item) => item;
13282
+ this.trackBy = item => item;
13202
13283
  }
13203
13284
  get smart() {
13204
13285
  return this._smart;
@@ -13275,22 +13356,6 @@ class Items {
13275
13356
  this._filterItems();
13276
13357
  }
13277
13358
  }
13278
- canTrackBy() {
13279
- // all items are needed unless `datagridTrackBy` is set because `iteratorTrackBy` requires the item's index
13280
- return !!this.datagridTrackBy || Array.isArray(this.all);
13281
- }
13282
- trackBy(item, index) {
13283
- if (this.datagridTrackBy) {
13284
- return this.datagridTrackBy(item);
13285
- }
13286
- else if (Array.isArray(this.all)) {
13287
- index = index ?? this.all.indexOf(item);
13288
- return this.iteratorTrackBy(index, item);
13289
- }
13290
- else {
13291
- throw new Error('improper call to Items#trackBy');
13292
- }
13293
- }
13294
13359
  emitChange() {
13295
13360
  this._change.next(this.displayed);
13296
13361
  }
@@ -13373,7 +13438,6 @@ class ClrDatagridItems {
13373
13438
  this._rawItems = items ? items : []; // local copy for ngOnChange diffing
13374
13439
  }
13375
13440
  set trackBy(value) {
13376
- this.items.iteratorTrackBy = value;
13377
13441
  this.iterableProxy.ngForTrackBy = value;
13378
13442
  }
13379
13443
  /**
@@ -13517,6 +13581,7 @@ class ClrSignpostTrigger {
13517
13581
  this.signpostIdService = signpostIdService;
13518
13582
  this.signpostFocusManager = signpostFocusManager;
13519
13583
  this.platformId = platformId;
13584
+ this.ariaExpanded = false;
13520
13585
  this.subscriptions = [];
13521
13586
  this.document = document;
13522
13587
  }
@@ -13888,12 +13953,10 @@ class Selection {
13888
13953
  let selectionUpdated = false;
13889
13954
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
13890
13955
  if (this.currentSingle && !this.prevSingleSelectionRef) {
13891
- if (this._items.canTrackBy()) {
13892
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
13893
- }
13956
+ this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
13894
13957
  }
13895
- updatedItems.forEach((item, index) => {
13896
- const ref = this._items.trackBy(item, index);
13958
+ updatedItems.forEach(item => {
13959
+ const ref = this._items.trackBy(item);
13897
13960
  // If one of the updated items is the previously selectedSingle, set it as the new one
13898
13961
  if (this.prevSingleSelectionRef === ref) {
13899
13962
  newSingle = item;
@@ -13926,20 +13989,18 @@ class Selection {
13926
13989
  let selectionUpdated = false;
13927
13990
  // if the current has been set before data was loaded, we look up and save the ref from current data set
13928
13991
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
13929
- if (this._items.canTrackBy()) {
13930
- this.prevSelectionRefs = [];
13931
- this.current.forEach(item => {
13932
- this.prevSelectionRefs.push(this._items.trackBy(item));
13933
- });
13934
- }
13992
+ this.prevSelectionRefs = [];
13993
+ this.current.forEach(item => {
13994
+ this.prevSelectionRefs.push(this._items.trackBy(item));
13995
+ });
13935
13996
  }
13936
13997
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
13937
13998
  // we need to go over every updated item and check to see if there are valid to be
13938
13999
  // locked or not and update it. When only add items that are found in the lockedRefs back.
13939
14000
  //
13940
14001
  // The both loops below that goes over updatedItems could be combined into one.
13941
- updatedItems.forEach((item, index) => {
13942
- const ref = this._items.trackBy(item, index);
14002
+ updatedItems.forEach(item => {
14003
+ const ref = this._items.trackBy(item);
13943
14004
  if (this.lockedRefs.indexOf(ref) > -1) {
13944
14005
  updateLockedRef.push(ref);
13945
14006
  }
@@ -13948,8 +14009,8 @@ class Selection {
13948
14009
  // currently, the selection is cleared when filter is applied, so the logic inside
13949
14010
  // the if statement below results in broken behavior.
13950
14011
  if (leftOver.length > 0) {
13951
- updatedItems.forEach((item, index) => {
13952
- const ref = this._items.trackBy(item, index);
14012
+ updatedItems.forEach(item => {
14013
+ const ref = this._items.trackBy(item);
13953
14014
  // Look in current selected refs array if item is selected, and update actual value
13954
14015
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
13955
14016
  if (selectedIndex > -1) {
@@ -14015,7 +14076,7 @@ class Selection {
14015
14076
  return;
14016
14077
  }
14017
14078
  this._currentSingle = value;
14018
- if (this._items.canTrackBy() && value) {
14079
+ if (value) {
14019
14080
  this.prevSingleSelectionRef = this._items.trackBy(value);
14020
14081
  }
14021
14082
  this.emitChange();
@@ -14161,10 +14222,8 @@ class Selection {
14161
14222
  */
14162
14223
  selectItem(item) {
14163
14224
  this.current = this.current.concat(item);
14164
- if (this._items.canTrackBy()) {
14165
- // Push selected ref onto array
14166
- this.prevSelectionRefs.push(this._items.trackBy(item));
14167
- }
14225
+ // Push selected ref onto array
14226
+ this.prevSelectionRefs.push(this._items.trackBy(item));
14168
14227
  }
14169
14228
  /**
14170
14229
  * Deselects an item
@@ -14182,7 +14241,7 @@ class Selection {
14182
14241
  * Make sure that it could be locked
14183
14242
  */
14184
14243
  canItBeLocked() {
14185
- return this._selectionType !== SelectionType.None && this._items.canTrackBy();
14244
+ return this._selectionType !== SelectionType.None;
14186
14245
  }
14187
14246
  emitChange() {
14188
14247
  if (this._selectionType === SelectionType.Single) {
@@ -14964,7 +15023,7 @@ class ClrDatagrid {
14964
15023
  this.selection.rowSelectionMode = value;
14965
15024
  }
14966
15025
  set trackBy(value) {
14967
- this.items.datagridTrackBy = value;
15026
+ this.items.trackBy = value;
14968
15027
  }
14969
15028
  /**
14970
15029
  * Indicates if all currently displayed items are selected
@@ -15006,9 +15065,7 @@ class ClrDatagrid {
15006
15065
  });
15007
15066
  // Try to update only when there is something cached and its open.
15008
15067
  if (this.detailService.state && this.detailService.isOpen) {
15009
- const row = this.items.canTrackBy()
15010
- ? this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state))
15011
- : undefined;
15068
+ const row = this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state));
15012
15069
  /**
15013
15070
  * Reopen updated row or close it
15014
15071
  */
@@ -15391,45 +15448,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15391
15448
  */
15392
15449
  const columnToggleTrackByFn = index => index;
15393
15450
 
15394
- /*
15395
- * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
15396
- * This software is released under MIT license.
15397
- * The full license information can be found in LICENSE in the root directory of this project.
15398
- */
15399
- class ClrDatagridItemsTrackBy {
15400
- constructor(_items) {
15401
- this._items = _items;
15402
- }
15403
- set trackBy(value) {
15404
- /**
15405
- * This is a workaround to prevent the items `trackBy` function from
15406
- * being replaced when the "manage columns" button is clicked. This is
15407
- * not a complete solution. If there is another `ngForTrackBy` function
15408
- * within the datagrid in application code, it could sill replace the
15409
- * items `trackBy` function whether it is the row iterator or not.
15410
- */
15411
- if (value === columnToggleTrackByFn) {
15412
- return;
15413
- }
15414
- if (this._items) {
15415
- this._items.iteratorTrackBy = value;
15416
- }
15417
- }
15418
- }
15419
- ClrDatagridItemsTrackBy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridItemsTrackBy, deps: [{ token: Items, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
15420
- ClrDatagridItemsTrackBy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: { trackBy: ["ngForTrackBy", "trackBy"] }, ngImport: i0 });
15421
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridItemsTrackBy, decorators: [{
15422
- type: Directive,
15423
- args: [{
15424
- selector: '[ngForTrackBy]',
15425
- }]
15426
- }], ctorParameters: function () { return [{ type: Items, decorators: [{
15427
- type: Optional
15428
- }] }]; }, propDecorators: { trackBy: [{
15429
- type: Input,
15430
- args: ['ngForTrackBy']
15431
- }] } });
15432
-
15433
15451
  /*
15434
15452
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
15435
15453
  * This software is released under MIT license.
@@ -15598,7 +15616,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
15598
15616
  <clr-dg-column-toggle-button (clrAllSelected)="allColumnsSelected()"></clr-dg-column-toggle-button>
15599
15617
  </div>
15600
15618
  </div>
15601
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "component", type: ClrDatagridColumnToggleButton, selector: "clr-dg-column-toggle-button", outputs: ["clrAllSelected"] }] });
15619
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrDatagridColumnToggleButton, selector: "clr-dg-column-toggle-button", outputs: ["clrAllSelected"] }] });
15602
15620
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
15603
15621
  type: Component,
15604
15622
  args: [{
@@ -17115,7 +17133,6 @@ const CLR_DATAGRID_DIRECTIVES = [
17115
17133
  ClrDatagridFooter,
17116
17134
  ClrDatagridHideableColumn,
17117
17135
  ClrDatagridItems,
17118
- ClrDatagridItemsTrackBy,
17119
17136
  ClrDatagridPageSize,
17120
17137
  ClrDatagridPagination,
17121
17138
  ClrDatagridPlaceholder,
@@ -17162,7 +17179,6 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
17162
17179
  ClrDatagridFooter,
17163
17180
  ClrDatagridHideableColumn,
17164
17181
  ClrDatagridItems,
17165
- ClrDatagridItemsTrackBy,
17166
17182
  ClrDatagridPageSize,
17167
17183
  ClrDatagridPagination,
17168
17184
  ClrDatagridPlaceholder,
@@ -17212,7 +17228,6 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
17212
17228
  ClrDatagridFooter,
17213
17229
  ClrDatagridHideableColumn,
17214
17230
  ClrDatagridItems,
17215
- ClrDatagridItemsTrackBy,
17216
17231
  ClrDatagridPageSize,
17217
17232
  ClrDatagridPagination,
17218
17233
  ClrDatagridPlaceholder,
@@ -19667,13 +19682,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19667
19682
  }]
19668
19683
  }] });
19669
19684
 
19685
+ /*
19686
+ * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
19687
+ * This software is released under MIT license.
19688
+ * The full license information can be found in LICENSE in the root directory of this project.
19689
+ */
19690
+
19670
19691
  /*
19671
19692
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
19672
19693
  * This software is released under MIT license.
19673
19694
  * The full license information can be found in LICENSE in the root directory of this project.
19674
19695
  */
19675
19696
  // @TODO Make this an enum
19676
- const ALERT_TYPES = ['info', 'warning', 'danger', 'success'];
19697
+ const ALERT_TYPES = ['info', 'warning', 'danger', 'success', 'neutral', 'unknown', 'loading'];
19677
19698
 
19678
19699
  /*
19679
19700
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
@@ -19683,7 +19704,7 @@ const ALERT_TYPES = ['info', 'warning', 'danger', 'success'];
19683
19704
  class AlertIconAndTypesService {
19684
19705
  constructor(commonStrings) {
19685
19706
  this.commonStrings = commonStrings;
19686
- this.defaultIconShape = 'info-circle';
19707
+ this.defaultIconShape = 'info-standard';
19687
19708
  this._alertIconShape = '';
19688
19709
  this._alertType = 'info';
19689
19710
  }
@@ -19716,20 +19737,35 @@ class AlertIconAndTypesService {
19716
19737
  const returnObj = { shape: '', cssClass: '', title: '' };
19717
19738
  switch (type) {
19718
19739
  case 'warning':
19719
- returnObj.shape = 'exclamation-triangle';
19740
+ returnObj.shape = 'warning-standard';
19720
19741
  returnObj.cssClass = 'alert-warning';
19721
19742
  returnObj.title = this.commonStrings.keys.warning;
19722
19743
  break;
19723
19744
  case 'danger':
19724
- returnObj.shape = 'exclamation-circle';
19745
+ returnObj.shape = 'error-standard';
19725
19746
  returnObj.cssClass = 'alert-danger';
19726
19747
  returnObj.title = this.commonStrings.keys.danger;
19727
19748
  break;
19728
19749
  case 'success':
19729
- returnObj.shape = 'check-circle';
19750
+ returnObj.shape = 'success-standard';
19730
19751
  returnObj.cssClass = 'alert-success';
19731
19752
  returnObj.title = this.commonStrings.keys.success;
19732
19753
  break;
19754
+ case 'neutral':
19755
+ returnObj.shape = 'note';
19756
+ returnObj.cssClass = 'alert-neutral';
19757
+ returnObj.title = this.commonStrings.keys.neutral;
19758
+ break;
19759
+ case 'unknown':
19760
+ returnObj.shape = 'help';
19761
+ returnObj.cssClass = 'alert-neutral';
19762
+ returnObj.title = this.commonStrings.keys.unknown;
19763
+ break;
19764
+ case 'loading':
19765
+ returnObj.shape = 'loading';
19766
+ returnObj.cssClass = 'alert-neutral';
19767
+ returnObj.title = this.commonStrings.keys.unknown;
19768
+ break;
19733
19769
  default:
19734
19770
  returnObj.shape = this.defaultIconShape;
19735
19771
  returnObj.cssClass = 'alert-info';
@@ -19851,7 +19887,6 @@ class ClrAlert {
19851
19887
  this.commonStrings = commonStrings;
19852
19888
  this.renderer = renderer;
19853
19889
  this.hostElement = hostElement;
19854
- this.isLight = false;
19855
19890
  this.isSmall = false;
19856
19891
  this.closable = true;
19857
19892
  this.isAppLevel = false;
@@ -19859,12 +19894,21 @@ class ClrAlert {
19859
19894
  this._closedChanged = new EventEmitter(false);
19860
19895
  this._closed = false;
19861
19896
  this.subscriptions = [];
19897
+ this._isLightweight = false;
19898
+ }
19899
+ get isLightweight() {
19900
+ return this._isLightweight;
19901
+ }
19902
+ set isLightweight(val) {
19903
+ this._isLightweight = val;
19904
+ this.configAlertType(this._origAlertType);
19862
19905
  }
19863
19906
  get alertType() {
19864
19907
  return this.iconService.alertType;
19865
19908
  }
19866
19909
  set alertType(val) {
19867
- this.iconService.alertType = val;
19910
+ this._origAlertType = val;
19911
+ this.configAlertType(val);
19868
19912
  }
19869
19913
  set alertIconShape(value) {
19870
19914
  this.iconService.alertIconShape = value;
@@ -19906,6 +19950,9 @@ class ClrAlert {
19906
19950
  ngOnDestroy() {
19907
19951
  this.subscriptions.forEach(sub => sub.unsubscribe());
19908
19952
  }
19953
+ configAlertType(val) {
19954
+ this.iconService.alertType = val;
19955
+ }
19909
19956
  open() {
19910
19957
  this._closed = false;
19911
19958
  if (this.multiAlertService) {
@@ -19919,23 +19966,20 @@ class ClrAlert {
19919
19966
  }
19920
19967
  const isCurrentAlert = this.multiAlertService?.currentAlert === this;
19921
19968
  this._closed = true;
19922
- if (this.multiAlertService) {
19969
+ if (this.multiAlertService?.activeAlerts) {
19923
19970
  this.multiAlertService.close(isCurrentAlert);
19924
19971
  }
19925
19972
  this._closedChanged.emit(true);
19926
19973
  }
19927
19974
  }
19928
19975
  ClrAlert.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, deps: [{ token: AlertIconAndTypesService }, { token: i0.ChangeDetectorRef }, { token: MultiAlertService, optional: true }, { token: ClrCommonStringsService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
19929
- ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlert, selector: "clr-alert", inputs: { isLight: ["clrAlertLightweight", "isLight"], isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"], closed: ["clrAlertClosed", "closed"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2023 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-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLight\"\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", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }] });
19976
+ ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", isLightweight: ["clrAlertLightweight", "isLightweight"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"], closed: ["clrAlertClosed", "closed"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2023 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-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }] });
19930
19977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, decorators: [{
19931
19978
  type: Component,
19932
- args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], template: "<!--\n ~ Copyright (c) 2016-2023 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-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLight\"\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" }]
19979
+ args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], template: "<!--\n ~ Copyright (c) 2016-2023 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-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n</div>\n" }]
19933
19980
  }], ctorParameters: function () { return [{ type: AlertIconAndTypesService }, { type: i0.ChangeDetectorRef }, { type: MultiAlertService, decorators: [{
19934
19981
  type: Optional
19935
- }] }, { type: ClrCommonStringsService }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { isLight: [{
19936
- type: Input,
19937
- args: ['clrAlertLightweight']
19938
- }], isSmall: [{
19982
+ }] }, { type: ClrCommonStringsService }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { isSmall: [{
19939
19983
  type: Input,
19940
19984
  args: ['clrAlertSizeSmall']
19941
19985
  }], closable: [{
@@ -19949,6 +19993,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19949
19993
  }], _closedChanged: [{
19950
19994
  type: Output,
19951
19995
  args: ['clrAlertClosedChange']
19996
+ }], isLightweight: [{
19997
+ type: Input,
19998
+ args: ['clrAlertLightweight']
19952
19999
  }], alertType: [{
19953
20000
  type: Input,
19954
20001
  args: ['clrAlertType']
@@ -19973,24 +20020,28 @@ class ClrAlertItem {
19973
20020
  ClrAlertItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertItem, deps: [{ token: AlertIconAndTypesService }], target: i0.ɵɵFactoryTarget.Component });
19974
20021
  ClrAlertItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlertItem, selector: "clr-alert-item", host: { classAttribute: "alert-item" }, ngImport: i0, template: `
19975
20022
  <div class="alert-icon-wrapper">
20023
+ <clr-spinner class="alert-spinner" clrInline *ngIf="iconService.alertIconShape === 'loading'"></clr-spinner>
19976
20024
  <cds-icon
19977
20025
  class="alert-icon"
19978
20026
  role="img"
20027
+ *ngIf="iconService.alertIconShape !== 'loading'"
19979
20028
  [attr.shape]="iconService.alertIconShape"
19980
20029
  [attr.aria-label]="iconService.alertIconTitle"
19981
20030
  ></cds-icon>
19982
20031
  </div>
19983
20032
  <ng-content></ng-content>
19984
- `, isInline: true, dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }] });
20033
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }] });
19985
20034
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertItem, decorators: [{
19986
20035
  type: Component,
19987
20036
  args: [{
19988
20037
  selector: 'clr-alert-item',
19989
20038
  template: `
19990
20039
  <div class="alert-icon-wrapper">
20040
+ <clr-spinner class="alert-spinner" clrInline *ngIf="iconService.alertIconShape === 'loading'"></clr-spinner>
19991
20041
  <cds-icon
19992
20042
  class="alert-icon"
19993
20043
  role="img"
20044
+ *ngIf="iconService.alertIconShape !== 'loading'"
19994
20045
  [attr.shape]="iconService.alertIconShape"
19995
20046
  [attr.aria-label]="iconService.alertIconTitle"
19996
20047
  ></cds-icon>
@@ -20168,7 +20219,7 @@ class ClrAlerts {
20168
20219
  }
20169
20220
  }
20170
20221
  ClrAlerts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlerts, deps: [{ token: MultiAlertService }], target: i0.ɵɵFactoryTarget.Component });
20171
- ClrAlerts.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlerts, selector: "clr-alerts", inputs: { _inputCurrentIndex: ["clrCurrentAlertIndex", "_inputCurrentIndex"], currentAlert: ["clrCurrentAlert", "currentAlert"] }, outputs: { currentAlertChange: "clrCurrentAlertChange", currentAlertIndexChange: "clrCurrentAlertIndexChange" }, 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-2023 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<div class=\"alerts-wrapper\">\n <clr-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"></clr-alerts-pager>\n <ng-content select=\"clr-alert\"></ng-content>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ClrAlertsPager, selector: "clr-alerts-pager", inputs: ["clrCurrentAlert", "clrCurrentAlertIndex"], outputs: ["clrCurrentAlertChange", "clrCurrentAlertIndexChange"] }] });
20222
+ ClrAlerts.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlerts, selector: "clr-alerts", inputs: { _inputCurrentIndex: ["clrCurrentAlertIndex", "_inputCurrentIndex"], currentAlert: ["clrCurrentAlert", "currentAlert"] }, outputs: { currentAlertChange: "clrCurrentAlertChange", currentAlertIndexChange: "clrCurrentAlertIndexChange" }, 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'", "class.alert-neutral": "this.currentAlertType == 'neutral'" } }, providers: [MultiAlertService], queries: [{ propertyName: "allAlerts", predicate: ClrAlert }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2023 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<div class=\"alerts-wrapper\">\n <clr-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"></clr-alerts-pager>\n <ng-content select=\"clr-alert\"></ng-content>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ClrAlertsPager, selector: "clr-alerts-pager", inputs: ["clrCurrentAlert", "clrCurrentAlertIndex"], outputs: ["clrCurrentAlertChange", "clrCurrentAlertIndexChange"] }] });
20172
20223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlerts, decorators: [{
20173
20224
  type: Component,
20174
20225
  args: [{ selector: 'clr-alerts', providers: [MultiAlertService], host: {
@@ -20177,6 +20228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20177
20228
  '[class.alert-info]': "this.currentAlertType == 'info'",
20178
20229
  '[class.alert-success]': "this.currentAlertType == 'success'",
20179
20230
  '[class.alert-warning]': "this.currentAlertType == 'warning'",
20231
+ '[class.alert-neutral]': "this.currentAlertType == 'neutral'",
20180
20232
  }, template: "<!--\n ~ Copyright (c) 2016-2023 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<div class=\"alerts-wrapper\">\n <clr-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"></clr-alerts-pager>\n <ng-content select=\"clr-alert\"></ng-content>\n</div>\n", styles: [":host{display:block}\n"] }]
20181
20233
  }], ctorParameters: function () { return [{ type: MultiAlertService }]; }, propDecorators: { currentAlertChange: [{
20182
20234
  type: Output,
@@ -20203,16 +20255,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20203
20255
  const CLR_ALERT_DIRECTIVES = [ClrAlert, ClrAlertItem, ClrAlerts, ClrAlertsPager, ClrAlertText];
20204
20256
  class ClrAlertModule {
20205
20257
  constructor() {
20206
- ClarityIcons.addIcons(checkCircleIcon, infoCircleIcon, exclamationCircleIcon, exclamationTriangleIcon, windowCloseIcon);
20258
+ ClarityIcons.addIcons(errorStandardIcon, helpIcon, infoStandardIcon, noteIcon, successStandardIcon, warningStandardIcon, windowCloseIcon);
20207
20259
  }
20208
20260
  }
20209
20261
  ClrAlertModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20210
- ClrAlertModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, declarations: [ClrAlert, ClrAlertItem, ClrAlerts, ClrAlertsPager, ClrAlertText], imports: [CommonModule, ClrIconModule, ClrDropdownModule], exports: [ClrAlert, ClrAlertItem, ClrAlerts, ClrAlertsPager, ClrAlertText] });
20211
- ClrAlertModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, imports: [CommonModule, ClrIconModule, ClrDropdownModule] });
20262
+ ClrAlertModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, declarations: [ClrAlert, ClrAlertItem, ClrAlerts, ClrAlertsPager, ClrAlertText], imports: [CommonModule, ClrIconModule, ClrDropdownModule, ClrSpinnerModule], exports: [ClrAlert, ClrAlertItem, ClrAlerts, ClrAlertsPager, ClrAlertText] });
20263
+ ClrAlertModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, imports: [CommonModule, ClrIconModule, ClrDropdownModule, ClrSpinnerModule] });
20212
20264
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, decorators: [{
20213
20265
  type: NgModule,
20214
20266
  args: [{
20215
- imports: [CommonModule, ClrIconModule, ClrDropdownModule],
20267
+ imports: [CommonModule, ClrIconModule, ClrDropdownModule, ClrSpinnerModule],
20216
20268
  declarations: [CLR_ALERT_DIRECTIVES],
20217
20269
  exports: [CLR_ALERT_DIRECTIVES],
20218
20270
  }]
@@ -22861,26 +22913,14 @@ class ClrProgressBar {
22861
22913
  get loopClass() {
22862
22914
  return this._loop;
22863
22915
  }
22864
- /** @deprecated since 2.0, remove in 4.0 */
22865
- set clrWarning(value) {
22866
- this._warning = isBooleanAttributeSet(value);
22867
- }
22868
22916
  get warningClass() {
22869
- return this._warning;
22870
- }
22871
- /** @deprecated since 2.0, remove in 4.0 */
22872
- set clrSuccess(value) {
22873
- this._success = isBooleanAttributeSet(value);
22917
+ return this.color === 'warning';
22874
22918
  }
22875
22919
  get successClass() {
22876
- return this._success;
22877
- }
22878
- /** @deprecated since 2.0, remove in 4.0 */
22879
- set clrDanger(value) {
22880
- this._danger = isBooleanAttributeSet(value);
22920
+ return this.color === 'success';
22881
22921
  }
22882
22922
  get dangerClass() {
22883
- return this._danger;
22923
+ return this.color === 'danger';
22884
22924
  }
22885
22925
  set clrFlash(value) {
22886
22926
  this._flash = isBooleanAttributeSet(value);
@@ -22913,7 +22953,7 @@ class ClrProgressBar {
22913
22953
  }
22914
22954
  }
22915
22955
  ClrProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
22916
- ClrProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrProgressBar, selector: "clr-progress-bar", inputs: { max: ["clrMax", "max"], displayval: ["clrDisplayval", "displayval"], value: ["clrValue", "value"], id: "id", clrCompact: "clrCompact", clrLabeled: "clrLabeled", clrFade: "clrFade", clrLoop: "clrLoop", clrWarning: "clrWarning", clrSuccess: "clrSuccess", clrDanger: "clrDanger", clrFlash: "clrFlash", clrFlashDanger: "clrFlashDanger" }, host: { properties: { "attr.id": "this.externalId", "class.progress": "this.progressClass", "class.compact": "this.compactClass", "class.labeled": "this.labeledClass", "class.progress-fade": "this.fadeClass", "class.loop": "this.loopClass", "class.warning": "this.warningClass", "class.success": "this.successClass", "class.danger": "this.dangerClass", "class.flash": "this.flashClass", "class.flash-danger": "this.flashDangerClass" } }, ngImport: i0, template: `
22956
+ ClrProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrProgressBar, selector: "clr-progress-bar", inputs: { max: ["clrMax", "max"], displayval: ["clrDisplayval", "displayval"], color: ["clrColor", "color"], value: ["clrValue", "value"], id: "id", clrCompact: "clrCompact", clrLabeled: "clrLabeled", clrFade: "clrFade", clrLoop: "clrLoop", clrFlash: "clrFlash", clrFlashDanger: "clrFlashDanger" }, host: { properties: { "attr.id": "this.externalId", "class.progress": "this.progressClass", "class.compact": "this.compactClass", "class.labeled": "this.labeledClass", "class.progress-fade": "this.fadeClass", "class.loop": "this.loopClass", "class.warning": "this.warningClass", "class.success": "this.successClass", "class.danger": "this.dangerClass", "class.flash": "this.flashClass", "class.flash-danger": "this.flashDangerClass" } }, ngImport: i0, template: `
22917
22957
  <progress [id]="id" [attr.max]="max" [attr.value]="value" [attr.data-displayval]="displayValue"></progress>
22918
22958
  <span *ngIf="displayStringValue()">{{ displayValue }}</span>
22919
22959
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -22932,6 +22972,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
22932
22972
  }], displayval: [{
22933
22973
  type: Input,
22934
22974
  args: ['clrDisplayval']
22975
+ }], color: [{
22976
+ type: Input,
22977
+ args: ['clrColor']
22935
22978
  }], value: [{
22936
22979
  type: Input,
22937
22980
  args: ['clrValue']
@@ -22967,21 +23010,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
22967
23010
  }], loopClass: [{
22968
23011
  type: HostBinding,
22969
23012
  args: ['class.loop']
22970
- }], clrWarning: [{
22971
- type: Input,
22972
- args: ['clrWarning']
22973
23013
  }], warningClass: [{
22974
23014
  type: HostBinding,
22975
23015
  args: ['class.warning']
22976
- }], clrSuccess: [{
22977
- type: Input,
22978
- args: ['clrSuccess']
22979
23016
  }], successClass: [{
22980
23017
  type: HostBinding,
22981
23018
  args: ['class.success']
22982
- }], clrDanger: [{
22983
- type: Input,
22984
- args: ['clrDanger']
22985
23019
  }], dangerClass: [{
22986
23020
  type: HostBinding,
22987
23021
  args: ['class.danger']
@@ -25640,7 +25674,7 @@ class ClrWizard {
25640
25674
  */
25641
25675
  reset() {
25642
25676
  this.pageCollection.reset();
25643
- this.onReset.next();
25677
+ this.onReset.emit();
25644
25678
  }
25645
25679
  listenForNextPageChanges() {
25646
25680
  return this.navService.movedToNextPage.pipe(filter(() => isPlatformBrowser(this.platformId))).subscribe(() => {
@@ -26350,15 +26384,9 @@ const CLR_MENU_POSITIONS = [
26350
26384
  * The full license information can be found in LICENSE in the root directory of this project.
26351
26385
  */
26352
26386
 
26353
- /*
26354
- * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
26355
- * This software is released under MIT license.
26356
- * The full license information can be found in LICENSE in the root directory of this project.
26357
- */
26358
-
26359
26387
  /**
26360
26388
  * Generated bundle index. Do not edit.
26361
26389
  */
26362
26390
 
26363
- export { CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridItemsTrackBy, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
26391
+ export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
26364
26392
  //# sourceMappingURL=clr-angular.mjs.map