@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';
@@ -281,6 +281,8 @@ const commonStringsDefault = {
281
281
  success: 'Success',
282
282
  warning: 'Warning',
283
283
  danger: 'Error',
284
+ neutral: 'Neutral',
285
+ unknown: 'Unknown',
284
286
  rowActions: 'Available actions',
285
287
  pickColumns: 'Manage Columns',
286
288
  showColumns: 'Show Columns',
@@ -363,8 +365,8 @@ const commonStringsDefault = {
363
365
  * Password Input
364
366
  * Screen-reader text for the hide/show password field button
365
367
  */
366
- passwordHide: 'Hide password',
367
- passwordShow: 'Show password',
368
+ passwordHide: 'Hide password for {LABEL}',
369
+ passwordShow: 'Show password for {LABEL}',
368
370
  /**
369
371
  * Datagrid footer; sr-only text after the number of selected rows.
370
372
  */
@@ -668,7 +670,7 @@ class ClrAccordion {
668
670
  }
669
671
  }
670
672
  ClrAccordion.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordion, deps: [{ token: AccordionService }], target: i0.ɵɵFactoryTarget.Component });
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, descendants: true }], usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
673
+ 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 });
672
674
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordion, decorators: [{
673
675
  type: Component,
674
676
  args: [{
@@ -683,7 +685,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
683
685
  args: ['clrAccordionMultiPanel']
684
686
  }], panels: [{
685
687
  type: ContentChildren,
686
- args: [ClrAccordionPanel, { descendants: true }]
688
+ args: [ClrAccordionPanel]
687
689
  }] } });
688
690
 
689
691
  /*
@@ -949,6 +951,12 @@ class StepperModel extends AccordionModel {
949
951
  }
950
952
  });
951
953
  }
954
+ setPanelValid(panelId) {
955
+ this._panels[panelId].status = AccordionStatus.Complete;
956
+ }
957
+ setPanelInvalid(panelId) {
958
+ this._panels[panelId].status = AccordionStatus.Error;
959
+ }
952
960
  setPanelsWithErrors(ids) {
953
961
  ids.forEach(id => this.setPanelError(id));
954
962
  }
@@ -1032,6 +1040,14 @@ class StepperService extends AccordionService {
1032
1040
  this.accordion.resetPanels();
1033
1041
  this.emitUpdatedPanels();
1034
1042
  }
1043
+ setPanelValid(panelId) {
1044
+ this.accordion.setPanelValid(panelId);
1045
+ this.emitUpdatedPanels();
1046
+ }
1047
+ setPanelInvalid(panelId) {
1048
+ this.accordion.setPanelInvalid(panelId);
1049
+ this.emitUpdatedPanels();
1050
+ }
1035
1051
  setPanelsWithErrors(ids) {
1036
1052
  this.accordion.setPanelsWithErrors(ids);
1037
1053
  this.emitUpdatedPanels();
@@ -1094,11 +1110,16 @@ class ClrStepperPanel extends ClrAccordionPanel {
1094
1110
  this.panel = this.panel.pipe(tap(panel => this.triggerAllFormControlValidationIfError(panel)));
1095
1111
  this.stepperService.disablePanel(this.id, true);
1096
1112
  this.listenToFocusChanges();
1113
+ // not all stepper panels are guaranteed to have a form (i.e. empty template-driven)
1097
1114
  if (this.formGroup) {
1098
- // not all stepper panels are guaranteed to have a form (i.e. empty template-driven)
1099
- this.subscriptions.push(this.formGroup.statusChanges.pipe(pairwise()).subscribe(([prevStatus, newStatus]) => {
1100
- if ('VALID' === prevStatus && 'INVALID' === newStatus) {
1101
- this.stepperService.navigateToNextPanel(this.id, this.formGroup.valid);
1115
+ // set panel status on form status change only after the form becomes invalid
1116
+ const invalidStatusTrigger = this.formGroup.statusChanges.pipe(filter(status => status === 'INVALID'));
1117
+ this.subscriptions.push(this.formGroup.statusChanges.pipe(skipUntil(invalidStatusTrigger), distinctUntilChanged()).subscribe(status => {
1118
+ if (status === 'VALID') {
1119
+ this.stepperService.setPanelValid(this.id);
1120
+ }
1121
+ else if (status === 'INVALID') {
1122
+ this.stepperService.setPanelInvalid(this.id);
1102
1123
  }
1103
1124
  }));
1104
1125
  }
@@ -1943,12 +1964,12 @@ class ClrPopoverPositionService {
1943
1964
  *
1944
1965
  * Note, more than 3 viewport violations and there isn't anything we can do to help. Also when there are two
1945
1966
  * violations, we can't help if the violations are TOP+BOTTOM || LEFT+RIGHT => There is no transformation we
1946
- * can make to the postion that will help.
1967
+ * can make to the position that will help.
1947
1968
  *
1948
1969
  * Some examples:
1949
1970
  * There is only one error and Primary axis is VERTICAL
1950
1971
  * - this.handleVerticalAxisOneViolation has a switch that will use the error sum to apply the correct
1951
- * transform to the postion based on the reduction of visibilityViolations.
1972
+ * transform to the position based on the reduction of visibilityViolations.
1952
1973
  *
1953
1974
  * There are two errors and Primary axis is HORIZONTAL
1954
1975
  * - handleHorizontalAxisTwoViolations has a switch that uses the error sum to apply both transforms needed to
@@ -1980,6 +2001,14 @@ class ClrPopoverPositionService {
1980
2001
  if (this.currentContentCoords.top < 0) {
1981
2002
  this.contentOffsets.yOffset += Math.abs(this.currentContentCoords.top);
1982
2003
  }
2004
+ /**
2005
+ * This detects the condition where the popover is flipped because it would violate the bottom of the viewport, but flipping it results in the
2006
+ * popover rendering above the top of the body (y coordinate outside the body). In that event, it should be rendered within the body
2007
+ * as much as possible, so this logic sets the top of popover to render touching the top of the body.
2008
+ */
2009
+ if (this.contentOffsets.yOffset + this.currentAnchorCoords.y < 0) {
2010
+ this.contentOffsets.yOffset = 0 - this.currentContentCoords.top;
2011
+ }
1983
2012
  return this.contentOffsets;
1984
2013
  }
1985
2014
  handleVerticalAxisOneViolation(errorSum) {
@@ -3806,16 +3835,14 @@ class ClrButtonGroup {
3806
3835
  this.menuButtons = tempInMenuButtons;
3807
3836
  }
3808
3837
  handleFocusOnMenuOpen() {
3809
- if (this.menuButtons.length) {
3810
- this.toggleService.popoverVisible.pipe(takeUntil(this.destroy$)).subscribe(visible => {
3811
- if (visible) {
3812
- this.focusHandler.initialize({
3813
- menu: this.menu.nativeElement,
3814
- menuToggle: this.menuToggle.nativeElement,
3815
- });
3816
- }
3817
- });
3818
- }
3838
+ this.toggleService.popoverVisible.pipe(takeUntil(this.destroy$)).subscribe(visible => {
3839
+ if (visible) {
3840
+ this.focusHandler.initialize({
3841
+ menu: this.menu.nativeElement,
3842
+ menuToggle: this.menuToggle.nativeElement,
3843
+ });
3844
+ }
3845
+ });
3819
3846
  }
3820
3847
  }
3821
3848
  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 });
@@ -3914,22 +3941,27 @@ class ClrLoadingButton {
3914
3941
  }
3915
3942
  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 });
3916
3943
  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: `
3917
- <ng-container [ngSwitch]="state">
3918
- <span *ngSwitchCase="buttonState.LOADING">
3944
+ <span @parent [ngSwitch]="state">
3945
+ <ng-container *ngSwitchCase="buttonState.LOADING">
3919
3946
  <span @spinner class="spinner spinner-inline"></span>
3920
- </span>
3921
- <span *ngSwitchCase="buttonState.SUCCESS">
3947
+ </ng-container>
3948
+ <ng-container *ngSwitchCase="buttonState.SUCCESS">
3922
3949
  <span
3923
3950
  @validated
3924
3951
  (@validated.done)="this.loadingStateChange(this.buttonState.DEFAULT)"
3925
3952
  class="spinner spinner-inline spinner-check"
3926
3953
  ></span>
3927
- </span>
3928
- <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton>
3954
+ </ng-container>
3955
+ <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton class="clr-loading-btn-content">
3929
3956
  <ng-content></ng-content>
3930
3957
  </span>
3931
- </ng-container>
3958
+ </span>
3932
3959
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
3960
+ trigger('parent', [
3961
+ // Skip :enter animation on first render.
3962
+ // The button text/content should only be faded when transitioning to or from a non-default state.
3963
+ transition(':enter', []),
3964
+ ]),
3933
3965
  trigger('defaultButton', [
3934
3966
  transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
3935
3967
  // TODO: see if we can get leave animation to work before spinner's enter animation
@@ -3957,24 +3989,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
3957
3989
  args: [{
3958
3990
  selector: 'button[clrLoading]',
3959
3991
  template: `
3960
- <ng-container [ngSwitch]="state">
3961
- <span *ngSwitchCase="buttonState.LOADING">
3992
+ <span @parent [ngSwitch]="state">
3993
+ <ng-container *ngSwitchCase="buttonState.LOADING">
3962
3994
  <span @spinner class="spinner spinner-inline"></span>
3963
- </span>
3964
- <span *ngSwitchCase="buttonState.SUCCESS">
3995
+ </ng-container>
3996
+ <ng-container *ngSwitchCase="buttonState.SUCCESS">
3965
3997
  <span
3966
3998
  @validated
3967
3999
  (@validated.done)="this.loadingStateChange(this.buttonState.DEFAULT)"
3968
4000
  class="spinner spinner-inline spinner-check"
3969
4001
  ></span>
3970
- </span>
3971
- <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton>
4002
+ </ng-container>
4003
+ <span *ngSwitchCase="buttonState.DEFAULT" @defaultButton class="clr-loading-btn-content">
3972
4004
  <ng-content></ng-content>
3973
4005
  </span>
3974
- </ng-container>
4006
+ </span>
3975
4007
  `,
3976
4008
  providers: [{ provide: LoadingListener, useExisting: ClrLoadingButton }],
3977
4009
  animations: [
4010
+ trigger('parent', [
4011
+ // Skip :enter animation on first render.
4012
+ // The button text/content should only be faded when transitioning to or from a non-default state.
4013
+ transition(':enter', []),
4014
+ ]),
3978
4015
  trigger('defaultButton', [
3979
4016
  transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
3980
4017
  // TODO: see if we can get leave animation to work before spinner's enter animation
@@ -4805,6 +4842,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
4805
4842
  * This software is released under MIT license.
4806
4843
  * The full license information can be found in LICENSE in the root directory of this project.
4807
4844
  */
4845
+ var CHANGE_KEYS;
4846
+ (function (CHANGE_KEYS) {
4847
+ CHANGE_KEYS["FORM"] = "form";
4848
+ CHANGE_KEYS["MODEL"] = "model";
4849
+ })(CHANGE_KEYS || (CHANGE_KEYS = {}));
4808
4850
  class WrappedFormControl {
4809
4851
  // I lost way too much time trying to make this work without injecting the ViewContainerRef and the Injector,
4810
4852
  // I'm giving up. So we have to inject these two manually for now.
@@ -4821,6 +4863,7 @@ class WrappedFormControl {
4821
4863
  this.ifControlStateService = injector.get(IfControlStateService, null);
4822
4864
  this.controlClassService = injector.get(ControlClassService, null);
4823
4865
  this.markControlService = injector.get(MarkControlService, null);
4866
+ this.differs = injector.get(KeyValueDiffers, null);
4824
4867
  }
4825
4868
  if (this.controlClassService) {
4826
4869
  this.controlClassService.initControlClass(renderer, el.nativeElement);
@@ -4835,6 +4878,9 @@ class WrappedFormControl {
4835
4878
  this.setAriaDescribedBy(state);
4836
4879
  }));
4837
4880
  }
4881
+ if (ngControl) {
4882
+ this.differ = this.differs.find(ngControl).create();
4883
+ }
4838
4884
  }
4839
4885
  get id() {
4840
4886
  return this._id;
@@ -4858,10 +4904,23 @@ class WrappedFormControl {
4858
4904
  else {
4859
4905
  this._id = this.controlIdService.id;
4860
4906
  }
4861
- if (this.ngControlService) {
4907
+ if (this.ngControlService && this.ngControl) {
4862
4908
  this.ngControlService.setControl(this.ngControl);
4863
4909
  }
4864
4910
  }
4911
+ ngDoCheck() {
4912
+ if (this.differ) {
4913
+ const changes = this.differ.diff(this.ngControl);
4914
+ if (changes) {
4915
+ changes.forEachChangedItem(change => {
4916
+ if ((change.key === CHANGE_KEYS.FORM || change.key === CHANGE_KEYS.MODEL) &&
4917
+ change.currentValue !== change.previousValue) {
4918
+ this.triggerValidation();
4919
+ }
4920
+ });
4921
+ }
4922
+ }
4923
+ }
4865
4924
  ngOnDestroy() {
4866
4925
  this.subscriptions.forEach(sub => sub.unsubscribe());
4867
4926
  }
@@ -4883,8 +4942,10 @@ class WrappedFormControl {
4883
4942
  }
4884
4943
  }
4885
4944
  markAsTouched() {
4886
- this.ngControl.control.markAsTouched();
4887
- this.ngControl.control.updateValueAndValidity();
4945
+ if (this.ngControl) {
4946
+ this.ngControl.control.markAsTouched();
4947
+ this.ngControl.control.updateValueAndValidity();
4948
+ }
4888
4949
  }
4889
4950
  setAriaDescribedBy(helpers) {
4890
4951
  if (helpers.show) {
@@ -4897,24 +4958,26 @@ class WrappedFormControl {
4897
4958
  this.renderer.removeAttribute(this.el.nativeElement, 'aria-describedby');
4898
4959
  }
4899
4960
  getAriaDescribedById(helpers) {
4900
- let suffix = CONTROL_SUFFIX.HELPER;
4901
- if (helpers.showInvalid) {
4902
- suffix = CONTROL_SUFFIX.ERROR;
4903
- }
4904
- else if (helpers.showValid) {
4905
- suffix = CONTROL_SUFFIX.SUCCESS;
4906
- }
4907
- if (this.containerIdService) {
4908
- return this.containerIdService.id.concat('-', suffix);
4909
- }
4910
- if (this.controlIdService) {
4911
- return this.controlIdService.id.concat('-', suffix);
4912
- }
4961
+ var _a, _b;
4962
+ const elementId = ((_a = this.containerIdService) === null || _a === void 0 ? void 0 : _a.id) || ((_b = this.controlIdService) === null || _b === void 0 ? void 0 : _b.id);
4913
4963
  /**
4914
4964
  * If ContainerIdService or ControlIdService are missing don't try to guess
4915
4965
  * Don't set anything.
4916
4966
  */
4917
- return null;
4967
+ if (!elementId) {
4968
+ return null;
4969
+ }
4970
+ /**
4971
+ * As the helper text is now always visible. If we have error/success then we should use both ids.
4972
+ */
4973
+ const describedByIds = [`${elementId}-${CONTROL_SUFFIX.HELPER}`];
4974
+ if (helpers.showInvalid) {
4975
+ describedByIds.push(`${elementId}-${CONTROL_SUFFIX.ERROR}`);
4976
+ }
4977
+ else if (helpers.showValid) {
4978
+ describedByIds.push(`${elementId}-${CONTROL_SUFFIX.SUCCESS}`);
4979
+ }
4980
+ return describedByIds.join(' ');
4918
4981
  }
4919
4982
  }
4920
4983
  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 });
@@ -5774,7 +5837,7 @@ class ClrKeyFocus {
5774
5837
  }
5775
5838
  if (this.focusOnLoad) {
5776
5839
  this.currentItem.focus();
5777
- this.focusChange.next();
5840
+ this.focusChange.emit();
5778
5841
  }
5779
5842
  }
5780
5843
  }
@@ -7160,25 +7223,24 @@ class ClrOptionItems {
7160
7223
  if (!this._rawItems || this.filter === undefined || this.filter === null) {
7161
7224
  return;
7162
7225
  }
7226
+ const normalizedFilterValue = normalizeValue(this.filter);
7163
7227
  if (this.optionService.showAllOptions) {
7164
7228
  this.filteredItems = this._rawItems;
7165
7229
  }
7166
7230
  else if (this._filterField) {
7167
7231
  this.filteredItems = this._rawItems.filter(item => {
7168
7232
  const objValue = item[this._filterField];
7169
- return objValue ? objValue.toString().toLowerCase().indexOf(this.filter.toLowerCase().toString()) > -1 : false;
7233
+ return objValue ? normalizeValue(objValue).includes(normalizedFilterValue) : false;
7170
7234
  });
7171
7235
  }
7172
7236
  else {
7173
7237
  // Filter by all item object values
7174
7238
  this.filteredItems = this._rawItems.filter(item => {
7175
7239
  if (typeof item !== 'object') {
7176
- return item.toString().toLowerCase().indexOf(this.filter.toString().toLowerCase()) > -1;
7240
+ return normalizeValue(item).includes(normalizedFilterValue);
7177
7241
  }
7178
7242
  const objValues = Object.values(item).filter(value => {
7179
- return value !== null && value !== undefined
7180
- ? value.toString().toLowerCase().indexOf(this.filter.toString().toLowerCase()) > -1
7181
- : false;
7243
+ return value !== null && value !== undefined ? normalizeValue(value).includes(normalizedFilterValue) : false;
7182
7244
  });
7183
7245
  return objValues.length > 0;
7184
7246
  });
@@ -7203,6 +7265,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7203
7265
  type: Input,
7204
7266
  args: ['clrOptionItemsField']
7205
7267
  }] } });
7268
+ function normalizeValue(value) {
7269
+ return value
7270
+ .toString()
7271
+ .normalize('NFD')
7272
+ .replace(/\p{Diacritic}/gu, '')
7273
+ .toLowerCase();
7274
+ }
7206
7275
 
7207
7276
  /*
7208
7277
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
@@ -8424,7 +8493,7 @@ class DateIOService {
8424
8493
  return '';
8425
8494
  }
8426
8495
  getDateValueFromDateString(date) {
8427
- if (!date) {
8496
+ if (!date || typeof date !== 'string') {
8428
8497
  return null;
8429
8498
  }
8430
8499
  const dateParts = date.match(USER_INPUT_REGEX);
@@ -9634,9 +9703,11 @@ class ClrDateInput extends WrappedFormControl {
9634
9703
  }
9635
9704
  set min(dateString) {
9636
9705
  this.dateIOService.setMinDate(dateString);
9706
+ this.triggerControlValidation();
9637
9707
  }
9638
9708
  set max(dateString) {
9639
9709
  this.dateIOService.setMaxDate(dateString);
9710
+ this.triggerControlValidation();
9640
9711
  }
9641
9712
  get disabled() {
9642
9713
  if (this.dateFormControlService) {
@@ -9701,6 +9772,14 @@ class ClrDateInput extends WrappedFormControl {
9701
9772
  this.focusService.focused = focus;
9702
9773
  }
9703
9774
  }
9775
+ triggerControlValidation() {
9776
+ var _a, _b;
9777
+ if (this.datepickerHasFormControl()) {
9778
+ // Set `emitEvent` to false to prevent unnecessary value change event. Status change event will be emitted by `setErrors` below.
9779
+ (_a = this.control.control) === null || _a === void 0 ? void 0 : _a.updateValueAndValidity({ emitEvent: false });
9780
+ (_b = this.control.control) === null || _b === void 0 ? void 0 : _b.setErrors(this.control.control.errors);
9781
+ }
9782
+ }
9704
9783
  populateServicesFromContainerComponent() {
9705
9784
  if (!this.container) {
9706
9785
  this.dateIOService = this.getProviderFromContainer(DateIOService);
@@ -10010,6 +10089,12 @@ class ClrPasswordContainer extends ClrAbstractContainer {
10010
10089
  this.show = !this.show;
10011
10090
  this.toggleService.next(this.show);
10012
10091
  }
10092
+ showPasswordText(label) {
10093
+ return this.commonStrings.parse(this.commonStrings.keys.passwordShow, { LABEL: label });
10094
+ }
10095
+ hidePasswordText(label) {
10096
+ return this.commonStrings.parse(this.commonStrings.keys.passwordHide, { LABEL: label });
10097
+ }
10013
10098
  }
10014
10099
  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 });
10015
10100
  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: [
@@ -10035,7 +10120,7 @@ ClrPasswordContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
10035
10120
  >
10036
10121
  <cds-icon class="clr-password-eye-icon" [attr.shape]="show ? 'eye-hide' : 'eye'"></cds-icon>
10037
10122
  <span class="clr-sr-only">
10038
- {{ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow }}
10123
+ {{ show ? hidePasswordText(label?.labelText) : showPasswordText(label?.labelText) }}
10039
10124
  </span>
10040
10125
  </button>
10041
10126
  </div>
@@ -10079,7 +10164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
10079
10164
  >
10080
10165
  <cds-icon class="clr-password-eye-icon" [attr.shape]="show ? 'eye-hide' : 'eye'"></cds-icon>
10081
10166
  <span class="clr-sr-only">
10082
- {{ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow }}
10167
+ {{ show ? hidePasswordText(label?.labelText) : showPasswordText(label?.labelText) }}
10083
10168
  </span>
10084
10169
  </button>
10085
10170
  </div>
@@ -13290,11 +13375,9 @@ class Items {
13290
13375
  this._change = new Subject();
13291
13376
  this._allChanges = new Subject();
13292
13377
  /**
13293
- * Tracking function to identify objects. Default is reference equality.
13294
- *
13295
- * @deprecated in v15 and scheduled for removal in v17 (CDE-71)
13378
+ * Tracking function to identify objects.
13296
13379
  */
13297
- this.iteratorTrackBy = (_index, item) => item;
13380
+ this.trackBy = item => item;
13298
13381
  }
13299
13382
  get smart() {
13300
13383
  return this._smart;
@@ -13371,22 +13454,6 @@ class Items {
13371
13454
  this._filterItems();
13372
13455
  }
13373
13456
  }
13374
- canTrackBy() {
13375
- // all items are needed unless `datagridTrackBy` is set because `iteratorTrackBy` requires the item's index
13376
- return !!this.datagridTrackBy || Array.isArray(this.all);
13377
- }
13378
- trackBy(item, index) {
13379
- if (this.datagridTrackBy) {
13380
- return this.datagridTrackBy(item);
13381
- }
13382
- else if (Array.isArray(this.all)) {
13383
- index = index !== null && index !== void 0 ? index : this.all.indexOf(item);
13384
- return this.iteratorTrackBy(index, item);
13385
- }
13386
- else {
13387
- throw new Error('improper call to Items#trackBy');
13388
- }
13389
- }
13390
13457
  emitChange() {
13391
13458
  this._change.next(this.displayed);
13392
13459
  }
@@ -13469,7 +13536,6 @@ class ClrDatagridItems {
13469
13536
  this._rawItems = items ? items : []; // local copy for ngOnChange diffing
13470
13537
  }
13471
13538
  set trackBy(value) {
13472
- this.items.iteratorTrackBy = value;
13473
13539
  this.iterableProxy.ngForTrackBy = value;
13474
13540
  }
13475
13541
  /**
@@ -13613,6 +13679,7 @@ class ClrSignpostTrigger {
13613
13679
  this.signpostIdService = signpostIdService;
13614
13680
  this.signpostFocusManager = signpostFocusManager;
13615
13681
  this.platformId = platformId;
13682
+ this.ariaExpanded = false;
13616
13683
  this.subscriptions = [];
13617
13684
  this.document = document;
13618
13685
  }
@@ -13986,12 +14053,10 @@ class Selection {
13986
14053
  let selectionUpdated = false;
13987
14054
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
13988
14055
  if (this.currentSingle && !this.prevSingleSelectionRef) {
13989
- if (this._items.canTrackBy()) {
13990
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
13991
- }
14056
+ this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
13992
14057
  }
13993
- updatedItems.forEach((item, index) => {
13994
- const ref = this._items.trackBy(item, index);
14058
+ updatedItems.forEach(item => {
14059
+ const ref = this._items.trackBy(item);
13995
14060
  // If one of the updated items is the previously selectedSingle, set it as the new one
13996
14061
  if (this.prevSingleSelectionRef === ref) {
13997
14062
  newSingle = item;
@@ -14024,20 +14089,18 @@ class Selection {
14024
14089
  let selectionUpdated = false;
14025
14090
  // if the current has been set before data was loaded, we look up and save the ref from current data set
14026
14091
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
14027
- if (this._items.canTrackBy()) {
14028
- this.prevSelectionRefs = [];
14029
- this.current.forEach(item => {
14030
- this.prevSelectionRefs.push(this._items.trackBy(item));
14031
- });
14032
- }
14092
+ this.prevSelectionRefs = [];
14093
+ this.current.forEach(item => {
14094
+ this.prevSelectionRefs.push(this._items.trackBy(item));
14095
+ });
14033
14096
  }
14034
14097
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
14035
14098
  // we need to go over every updated item and check to see if there are valid to be
14036
14099
  // locked or not and update it. When only add items that are found in the lockedRefs back.
14037
14100
  //
14038
14101
  // The both loops below that goes over updatedItems could be combined into one.
14039
- updatedItems.forEach((item, index) => {
14040
- const ref = this._items.trackBy(item, index);
14102
+ updatedItems.forEach(item => {
14103
+ const ref = this._items.trackBy(item);
14041
14104
  if (this.lockedRefs.indexOf(ref) > -1) {
14042
14105
  updateLockedRef.push(ref);
14043
14106
  }
@@ -14046,8 +14109,8 @@ class Selection {
14046
14109
  // currently, the selection is cleared when filter is applied, so the logic inside
14047
14110
  // the if statement below results in broken behavior.
14048
14111
  if (leftOver.length > 0) {
14049
- updatedItems.forEach((item, index) => {
14050
- const ref = this._items.trackBy(item, index);
14112
+ updatedItems.forEach(item => {
14113
+ const ref = this._items.trackBy(item);
14051
14114
  // Look in current selected refs array if item is selected, and update actual value
14052
14115
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
14053
14116
  if (selectedIndex > -1) {
@@ -14113,7 +14176,7 @@ class Selection {
14113
14176
  return;
14114
14177
  }
14115
14178
  this._currentSingle = value;
14116
- if (this._items.canTrackBy() && value) {
14179
+ if (value) {
14117
14180
  this.prevSingleSelectionRef = this._items.trackBy(value);
14118
14181
  }
14119
14182
  this.emitChange();
@@ -14259,10 +14322,8 @@ class Selection {
14259
14322
  */
14260
14323
  selectItem(item) {
14261
14324
  this.current = this.current.concat(item);
14262
- if (this._items.canTrackBy()) {
14263
- // Push selected ref onto array
14264
- this.prevSelectionRefs.push(this._items.trackBy(item));
14265
- }
14325
+ // Push selected ref onto array
14326
+ this.prevSelectionRefs.push(this._items.trackBy(item));
14266
14327
  }
14267
14328
  /**
14268
14329
  * Deselects an item
@@ -14280,7 +14341,7 @@ class Selection {
14280
14341
  * Make sure that it could be locked
14281
14342
  */
14282
14343
  canItBeLocked() {
14283
- return this._selectionType !== SelectionType.None && this._items.canTrackBy();
14344
+ return this._selectionType !== SelectionType.None;
14284
14345
  }
14285
14346
  emitChange() {
14286
14347
  if (this._selectionType === SelectionType.Single) {
@@ -15068,7 +15129,7 @@ class ClrDatagrid {
15068
15129
  this.selection.rowSelectionMode = value;
15069
15130
  }
15070
15131
  set trackBy(value) {
15071
- this.items.datagridTrackBy = value;
15132
+ this.items.trackBy = value;
15072
15133
  }
15073
15134
  /**
15074
15135
  * Indicates if all currently displayed items are selected
@@ -15110,9 +15171,7 @@ class ClrDatagrid {
15110
15171
  });
15111
15172
  // Try to update only when there is something cached and its open.
15112
15173
  if (this.detailService.state && this.detailService.isOpen) {
15113
- const row = this.items.canTrackBy()
15114
- ? this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state))
15115
- : undefined;
15174
+ const row = this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state));
15116
15175
  /**
15117
15176
  * Reopen updated row or close it
15118
15177
  */
@@ -15499,47 +15558,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15499
15558
  */
15500
15559
  const columnToggleTrackByFn = index => index;
15501
15560
 
15502
- /*
15503
- * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
15504
- * This software is released under MIT license.
15505
- * The full license information can be found in LICENSE in the root directory of this project.
15506
- */
15507
- class ClrDatagridItemsTrackBy {
15508
- constructor(_items) {
15509
- this._items = _items;
15510
- }
15511
- set trackBy(value) {
15512
- /**
15513
- * This is a workaround to prevent the items `trackBy` function from
15514
- * being replaced when the "manage columns" button is clicked. This is
15515
- * not a complete solution. If there is another `ngForTrackBy` function
15516
- * within the datagrid in application code, it could sill replace the
15517
- * items `trackBy` function whether it is the row iterator or not.
15518
- */
15519
- if (value === columnToggleTrackByFn) {
15520
- return;
15521
- }
15522
- if (this._items) {
15523
- this._items.iteratorTrackBy = value;
15524
- }
15525
- }
15526
- }
15527
- 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 });
15528
- ClrDatagridItemsTrackBy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: { trackBy: ["ngForTrackBy", "trackBy"] }, ngImport: i0 });
15529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridItemsTrackBy, decorators: [{
15530
- type: Directive,
15531
- args: [{
15532
- selector: '[ngForTrackBy]',
15533
- }]
15534
- }], ctorParameters: function () {
15535
- return [{ type: Items, decorators: [{
15536
- type: Optional
15537
- }] }];
15538
- }, propDecorators: { trackBy: [{
15539
- type: Input,
15540
- args: ['ngForTrackBy']
15541
- }] } });
15542
-
15543
15561
  /*
15544
15562
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
15545
15563
  * This software is released under MIT license.
@@ -15708,7 +15726,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
15708
15726
  <clr-dg-column-toggle-button (clrAllSelected)="allColumnsSelected()"></clr-dg-column-toggle-button>
15709
15727
  </div>
15710
15728
  </div>
15711
- `, 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"] }] });
15729
+ `, 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"] }] });
15712
15730
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
15713
15731
  type: Component,
15714
15732
  args: [{
@@ -17228,7 +17246,6 @@ const CLR_DATAGRID_DIRECTIVES = [
17228
17246
  ClrDatagridFooter,
17229
17247
  ClrDatagridHideableColumn,
17230
17248
  ClrDatagridItems,
17231
- ClrDatagridItemsTrackBy,
17232
17249
  ClrDatagridPageSize,
17233
17250
  ClrDatagridPagination,
17234
17251
  ClrDatagridPlaceholder,
@@ -17275,7 +17292,6 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
17275
17292
  ClrDatagridFooter,
17276
17293
  ClrDatagridHideableColumn,
17277
17294
  ClrDatagridItems,
17278
- ClrDatagridItemsTrackBy,
17279
17295
  ClrDatagridPageSize,
17280
17296
  ClrDatagridPagination,
17281
17297
  ClrDatagridPlaceholder,
@@ -17326,7 +17342,6 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
17326
17342
  ClrDatagridFooter,
17327
17343
  ClrDatagridHideableColumn,
17328
17344
  ClrDatagridItems,
17329
- ClrDatagridItemsTrackBy,
17330
17345
  ClrDatagridPageSize,
17331
17346
  ClrDatagridPagination,
17332
17347
  ClrDatagridPlaceholder,
@@ -19799,13 +19814,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19799
19814
  }]
19800
19815
  }] });
19801
19816
 
19817
+ /*
19818
+ * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
19819
+ * This software is released under MIT license.
19820
+ * The full license information can be found in LICENSE in the root directory of this project.
19821
+ */
19822
+
19802
19823
  /*
19803
19824
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
19804
19825
  * This software is released under MIT license.
19805
19826
  * The full license information can be found in LICENSE in the root directory of this project.
19806
19827
  */
19807
19828
  // @TODO Make this an enum
19808
- const ALERT_TYPES = ['info', 'warning', 'danger', 'success'];
19829
+ const ALERT_TYPES = ['info', 'warning', 'danger', 'success', 'neutral', 'unknown', 'loading'];
19809
19830
 
19810
19831
  /*
19811
19832
  * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
@@ -19815,7 +19836,7 @@ const ALERT_TYPES = ['info', 'warning', 'danger', 'success'];
19815
19836
  class AlertIconAndTypesService {
19816
19837
  constructor(commonStrings) {
19817
19838
  this.commonStrings = commonStrings;
19818
- this.defaultIconShape = 'info-circle';
19839
+ this.defaultIconShape = 'info-standard';
19819
19840
  this._alertIconShape = '';
19820
19841
  this._alertType = 'info';
19821
19842
  }
@@ -19848,20 +19869,35 @@ class AlertIconAndTypesService {
19848
19869
  const returnObj = { shape: '', cssClass: '', title: '' };
19849
19870
  switch (type) {
19850
19871
  case 'warning':
19851
- returnObj.shape = 'exclamation-triangle';
19872
+ returnObj.shape = 'warning-standard';
19852
19873
  returnObj.cssClass = 'alert-warning';
19853
19874
  returnObj.title = this.commonStrings.keys.warning;
19854
19875
  break;
19855
19876
  case 'danger':
19856
- returnObj.shape = 'exclamation-circle';
19877
+ returnObj.shape = 'error-standard';
19857
19878
  returnObj.cssClass = 'alert-danger';
19858
19879
  returnObj.title = this.commonStrings.keys.danger;
19859
19880
  break;
19860
19881
  case 'success':
19861
- returnObj.shape = 'check-circle';
19882
+ returnObj.shape = 'success-standard';
19862
19883
  returnObj.cssClass = 'alert-success';
19863
19884
  returnObj.title = this.commonStrings.keys.success;
19864
19885
  break;
19886
+ case 'neutral':
19887
+ returnObj.shape = 'note';
19888
+ returnObj.cssClass = 'alert-neutral';
19889
+ returnObj.title = this.commonStrings.keys.neutral;
19890
+ break;
19891
+ case 'unknown':
19892
+ returnObj.shape = 'help';
19893
+ returnObj.cssClass = 'alert-neutral';
19894
+ returnObj.title = this.commonStrings.keys.unknown;
19895
+ break;
19896
+ case 'loading':
19897
+ returnObj.shape = 'loading';
19898
+ returnObj.cssClass = 'alert-neutral';
19899
+ returnObj.title = this.commonStrings.keys.unknown;
19900
+ break;
19865
19901
  default:
19866
19902
  returnObj.shape = this.defaultIconShape;
19867
19903
  returnObj.cssClass = 'alert-info';
@@ -19983,7 +20019,6 @@ class ClrAlert {
19983
20019
  this.commonStrings = commonStrings;
19984
20020
  this.renderer = renderer;
19985
20021
  this.hostElement = hostElement;
19986
- this.isLight = false;
19987
20022
  this.isSmall = false;
19988
20023
  this.closable = true;
19989
20024
  this.isAppLevel = false;
@@ -19991,12 +20026,21 @@ class ClrAlert {
19991
20026
  this._closedChanged = new EventEmitter(false);
19992
20027
  this._closed = false;
19993
20028
  this.subscriptions = [];
20029
+ this._isLightweight = false;
20030
+ }
20031
+ get isLightweight() {
20032
+ return this._isLightweight;
20033
+ }
20034
+ set isLightweight(val) {
20035
+ this._isLightweight = val;
20036
+ this.configAlertType(this._origAlertType);
19994
20037
  }
19995
20038
  get alertType() {
19996
20039
  return this.iconService.alertType;
19997
20040
  }
19998
20041
  set alertType(val) {
19999
- this.iconService.alertType = val;
20042
+ this._origAlertType = val;
20043
+ this.configAlertType(val);
20000
20044
  }
20001
20045
  set alertIconShape(value) {
20002
20046
  this.iconService.alertIconShape = value;
@@ -20038,6 +20082,9 @@ class ClrAlert {
20038
20082
  ngOnDestroy() {
20039
20083
  this.subscriptions.forEach(sub => sub.unsubscribe());
20040
20084
  }
20085
+ configAlertType(val) {
20086
+ this.iconService.alertType = val;
20087
+ }
20041
20088
  open() {
20042
20089
  this._closed = false;
20043
20090
  if (this.multiAlertService) {
@@ -20046,31 +20093,28 @@ class ClrAlert {
20046
20093
  this._closedChanged.emit(false);
20047
20094
  }
20048
20095
  close() {
20049
- var _a;
20096
+ var _a, _b;
20050
20097
  if (!this.closable) {
20051
20098
  return;
20052
20099
  }
20053
20100
  const isCurrentAlert = ((_a = this.multiAlertService) === null || _a === void 0 ? void 0 : _a.currentAlert) === this;
20054
20101
  this._closed = true;
20055
- if (this.multiAlertService) {
20102
+ if ((_b = this.multiAlertService) === null || _b === void 0 ? void 0 : _b.activeAlerts) {
20056
20103
  this.multiAlertService.close(isCurrentAlert);
20057
20104
  }
20058
20105
  this._closedChanged.emit(true);
20059
20106
  }
20060
20107
  }
20061
20108
  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 });
20062
- 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" }] });
20109
+ 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" }] });
20063
20110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, decorators: [{
20064
20111
  type: Component,
20065
- 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" }]
20112
+ 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" }]
20066
20113
  }], ctorParameters: function () {
20067
20114
  return [{ type: AlertIconAndTypesService }, { type: i0.ChangeDetectorRef }, { type: MultiAlertService, decorators: [{
20068
20115
  type: Optional
20069
20116
  }] }, { type: ClrCommonStringsService }, { type: i0.Renderer2 }, { type: i0.ElementRef }];
20070
- }, propDecorators: { isLight: [{
20071
- type: Input,
20072
- args: ['clrAlertLightweight']
20073
- }], isSmall: [{
20117
+ }, propDecorators: { isSmall: [{
20074
20118
  type: Input,
20075
20119
  args: ['clrAlertSizeSmall']
20076
20120
  }], closable: [{
@@ -20084,6 +20128,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20084
20128
  }], _closedChanged: [{
20085
20129
  type: Output,
20086
20130
  args: ['clrAlertClosedChange']
20131
+ }], isLightweight: [{
20132
+ type: Input,
20133
+ args: ['clrAlertLightweight']
20087
20134
  }], alertType: [{
20088
20135
  type: Input,
20089
20136
  args: ['clrAlertType']
@@ -20108,24 +20155,28 @@ class ClrAlertItem {
20108
20155
  ClrAlertItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertItem, deps: [{ token: AlertIconAndTypesService }], target: i0.ɵɵFactoryTarget.Component });
20109
20156
  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: `
20110
20157
  <div class="alert-icon-wrapper">
20158
+ <clr-spinner class="alert-spinner" clrInline *ngIf="iconService.alertIconShape === 'loading'"></clr-spinner>
20111
20159
  <cds-icon
20112
20160
  class="alert-icon"
20113
20161
  role="img"
20162
+ *ngIf="iconService.alertIconShape !== 'loading'"
20114
20163
  [attr.shape]="iconService.alertIconShape"
20115
20164
  [attr.aria-label]="iconService.alertIconTitle"
20116
20165
  ></cds-icon>
20117
20166
  </div>
20118
20167
  <ng-content></ng-content>
20119
- `, isInline: true, dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }] });
20168
+ `, 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"] }] });
20120
20169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertItem, decorators: [{
20121
20170
  type: Component,
20122
20171
  args: [{
20123
20172
  selector: 'clr-alert-item',
20124
20173
  template: `
20125
20174
  <div class="alert-icon-wrapper">
20175
+ <clr-spinner class="alert-spinner" clrInline *ngIf="iconService.alertIconShape === 'loading'"></clr-spinner>
20126
20176
  <cds-icon
20127
20177
  class="alert-icon"
20128
20178
  role="img"
20179
+ *ngIf="iconService.alertIconShape !== 'loading'"
20129
20180
  [attr.shape]="iconService.alertIconShape"
20130
20181
  [attr.aria-label]="iconService.alertIconTitle"
20131
20182
  ></cds-icon>
@@ -20303,7 +20354,7 @@ class ClrAlerts {
20303
20354
  }
20304
20355
  }
20305
20356
  ClrAlerts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlerts, deps: [{ token: MultiAlertService }], target: i0.ɵɵFactoryTarget.Component });
20306
- 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"] }] });
20357
+ 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"] }] });
20307
20358
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlerts, decorators: [{
20308
20359
  type: Component,
20309
20360
  args: [{ selector: 'clr-alerts', providers: [MultiAlertService], host: {
@@ -20312,6 +20363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20312
20363
  '[class.alert-info]': "this.currentAlertType == 'info'",
20313
20364
  '[class.alert-success]': "this.currentAlertType == 'success'",
20314
20365
  '[class.alert-warning]': "this.currentAlertType == 'warning'",
20366
+ '[class.alert-neutral]': "this.currentAlertType == 'neutral'",
20315
20367
  }, 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"] }]
20316
20368
  }], ctorParameters: function () { return [{ type: MultiAlertService }]; }, propDecorators: { currentAlertChange: [{
20317
20369
  type: Output,
@@ -20338,16 +20390,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20338
20390
  const CLR_ALERT_DIRECTIVES = [ClrAlert, ClrAlertItem, ClrAlerts, ClrAlertsPager, ClrAlertText];
20339
20391
  class ClrAlertModule {
20340
20392
  constructor() {
20341
- ClarityIcons.addIcons(checkCircleIcon, infoCircleIcon, exclamationCircleIcon, exclamationTriangleIcon, windowCloseIcon);
20393
+ ClarityIcons.addIcons(errorStandardIcon, helpIcon, infoStandardIcon, noteIcon, successStandardIcon, warningStandardIcon, windowCloseIcon);
20342
20394
  }
20343
20395
  }
20344
20396
  ClrAlertModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20345
- 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] });
20346
- ClrAlertModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, imports: [CommonModule, ClrIconModule, ClrDropdownModule] });
20397
+ 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] });
20398
+ ClrAlertModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, imports: [CommonModule, ClrIconModule, ClrDropdownModule, ClrSpinnerModule] });
20347
20399
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertModule, decorators: [{
20348
20400
  type: NgModule,
20349
20401
  args: [{
20350
- imports: [CommonModule, ClrIconModule, ClrDropdownModule],
20402
+ imports: [CommonModule, ClrIconModule, ClrDropdownModule, ClrSpinnerModule],
20351
20403
  declarations: [CLR_ALERT_DIRECTIVES],
20352
20404
  exports: [CLR_ALERT_DIRECTIVES],
20353
20405
  }]
@@ -23020,26 +23072,14 @@ class ClrProgressBar {
23020
23072
  get loopClass() {
23021
23073
  return this._loop;
23022
23074
  }
23023
- /** @deprecated since 2.0, remove in 4.0 */
23024
- set clrWarning(value) {
23025
- this._warning = isBooleanAttributeSet(value);
23026
- }
23027
23075
  get warningClass() {
23028
- return this._warning;
23029
- }
23030
- /** @deprecated since 2.0, remove in 4.0 */
23031
- set clrSuccess(value) {
23032
- this._success = isBooleanAttributeSet(value);
23076
+ return this.color === 'warning';
23033
23077
  }
23034
23078
  get successClass() {
23035
- return this._success;
23036
- }
23037
- /** @deprecated since 2.0, remove in 4.0 */
23038
- set clrDanger(value) {
23039
- this._danger = isBooleanAttributeSet(value);
23079
+ return this.color === 'success';
23040
23080
  }
23041
23081
  get dangerClass() {
23042
- return this._danger;
23082
+ return this.color === 'danger';
23043
23083
  }
23044
23084
  set clrFlash(value) {
23045
23085
  this._flash = isBooleanAttributeSet(value);
@@ -23072,7 +23112,7 @@ class ClrProgressBar {
23072
23112
  }
23073
23113
  }
23074
23114
  ClrProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
23075
- 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: `
23115
+ 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: `
23076
23116
  <progress [id]="id" [attr.max]="max" [attr.value]="value" [attr.data-displayval]="displayValue"></progress>
23077
23117
  <span *ngIf="displayStringValue()">{{ displayValue }}</span>
23078
23118
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -23091,6 +23131,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23091
23131
  }], displayval: [{
23092
23132
  type: Input,
23093
23133
  args: ['clrDisplayval']
23134
+ }], color: [{
23135
+ type: Input,
23136
+ args: ['clrColor']
23094
23137
  }], value: [{
23095
23138
  type: Input,
23096
23139
  args: ['clrValue']
@@ -23126,21 +23169,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23126
23169
  }], loopClass: [{
23127
23170
  type: HostBinding,
23128
23171
  args: ['class.loop']
23129
- }], clrWarning: [{
23130
- type: Input,
23131
- args: ['clrWarning']
23132
23172
  }], warningClass: [{
23133
23173
  type: HostBinding,
23134
23174
  args: ['class.warning']
23135
- }], clrSuccess: [{
23136
- type: Input,
23137
- args: ['clrSuccess']
23138
23175
  }], successClass: [{
23139
23176
  type: HostBinding,
23140
23177
  args: ['class.success']
23141
- }], clrDanger: [{
23142
- type: Input,
23143
- args: ['clrDanger']
23144
23178
  }], dangerClass: [{
23145
23179
  type: HostBinding,
23146
23180
  args: ['class.danger']
@@ -25801,7 +25835,7 @@ class ClrWizard {
25801
25835
  */
25802
25836
  reset() {
25803
25837
  this.pageCollection.reset();
25804
- this.onReset.next();
25838
+ this.onReset.emit();
25805
25839
  }
25806
25840
  listenForNextPageChanges() {
25807
25841
  return this.navService.movedToNextPage.pipe(filter(() => isPlatformBrowser(this.platformId))).subscribe(() => {
@@ -26480,15 +26514,9 @@ const CLR_MENU_POSITIONS = [
26480
26514
  * The full license information can be found in LICENSE in the root directory of this project.
26481
26515
  */
26482
26516
 
26483
- /*
26484
- * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
26485
- * This software is released under MIT license.
26486
- * The full license information can be found in LICENSE in the root directory of this project.
26487
- */
26488
-
26489
26517
  /**
26490
26518
  * Generated bundle index. Do not edit.
26491
26519
  */
26492
26520
 
26493
- 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 };
26521
+ 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 };
26494
26522
  //# sourceMappingURL=clr-angular.mjs.map