@clr/angular 17.3.0 → 17.3.1

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 (118) hide show
  1. package/clarity.api.md +38 -23
  2. package/data/datagrid/datagrid-action-overflow.d.ts +2 -3
  3. package/data/datagrid/datagrid-hideable-column.d.ts +0 -1
  4. package/data/datagrid/datagrid-items.d.ts +0 -1
  5. package/data/datagrid/datagrid-row.d.ts +0 -2
  6. package/data/datagrid/datagrid.d.ts +1 -3
  7. package/data/datagrid/providers/selection.d.ts +1 -2
  8. package/data/datagrid/providers/table-size.service.d.ts +1 -1
  9. package/data/datagrid/render/header-renderer.d.ts +0 -1
  10. package/data/datagrid/render/main-renderer.d.ts +4 -3
  11. package/data/tree-view/tree.d.ts +5 -1
  12. package/emphasis/alert/alert.d.ts +1 -1
  13. package/esm2020/accordion/stepper/stepper-panel.mjs +2 -4
  14. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +8 -9
  15. package/esm2020/data/datagrid/datagrid-detail-registerer.mjs +3 -3
  16. package/esm2020/data/datagrid/datagrid-hideable-column.mjs +3 -4
  17. package/esm2020/data/datagrid/datagrid-if-detail.mjs +2 -2
  18. package/esm2020/data/datagrid/datagrid-items.mjs +2 -3
  19. package/esm2020/data/datagrid/datagrid-pagination.mjs +2 -2
  20. package/esm2020/data/datagrid/datagrid-row.mjs +4 -6
  21. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +5 -5
  22. package/esm2020/data/datagrid/datagrid.mjs +19 -21
  23. package/esm2020/data/datagrid/providers/selection.mjs +11 -12
  24. package/esm2020/data/datagrid/providers/table-size.service.mjs +1 -1
  25. package/esm2020/data/datagrid/render/header-renderer.mjs +2 -3
  26. package/esm2020/data/datagrid/render/main-renderer.mjs +26 -20
  27. package/esm2020/data/tree-view/recursive-children.mjs +3 -3
  28. package/esm2020/data/tree-view/tree-node.mjs +4 -4
  29. package/esm2020/data/tree-view/tree.mjs +24 -11
  30. package/esm2020/emphasis/alert/alert.mjs +1 -1
  31. package/esm2020/forms/combobox/combobox-container.mjs +1 -1
  32. package/esm2020/forms/combobox/combobox.mjs +2 -2
  33. package/esm2020/forms/combobox/option-items.directive.mjs +2 -3
  34. package/esm2020/forms/combobox/option.mjs +2 -2
  35. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +1 -1
  36. package/esm2020/forms/common/abstract-container.mjs +3 -3
  37. package/esm2020/forms/common/control.mjs +1 -1
  38. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +3 -3
  39. package/esm2020/forms/common/if-control-state/if-control-state.service.mjs +2 -3
  40. package/esm2020/forms/common/label.mjs +1 -1
  41. package/esm2020/forms/common/wrapped-control.mjs +3 -3
  42. package/esm2020/forms/datalist/datalist-container.mjs +2 -3
  43. package/esm2020/forms/datalist/datalist-input.mjs +2 -2
  44. package/esm2020/forms/datepicker/calendar.mjs +1 -1
  45. package/esm2020/forms/datepicker/date-container.mjs +4 -5
  46. package/esm2020/forms/datepicker/providers/date-io.service.mjs +3 -4
  47. package/esm2020/forms/datepicker/providers/datepicker-enabled.service.mjs +2 -2
  48. package/esm2020/forms/datepicker/providers/datepicker-focus.service.mjs +1 -1
  49. package/esm2020/forms/input/input.mjs +1 -1
  50. package/esm2020/forms/password/password-container.mjs +2 -2
  51. package/esm2020/forms/password/password.mjs +3 -4
  52. package/esm2020/forms/radio/radio.mjs +1 -1
  53. package/esm2020/forms/range/range.mjs +1 -1
  54. package/esm2020/forms/select/select.mjs +1 -1
  55. package/esm2020/forms/textarea/textarea.mjs +1 -1
  56. package/esm2020/layout/main-container/main-container.mjs +1 -1
  57. package/esm2020/layout/nav/header.mjs +3 -3
  58. package/esm2020/layout/tabs/tab-link.directive.mjs +4 -6
  59. package/esm2020/layout/tabs/tabs.mjs +1 -1
  60. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +8 -9
  61. package/esm2020/layout/vertical-nav/vertical-nav-icon.mjs +2 -2
  62. package/esm2020/layout/vertical-nav/vertical-nav.mjs +2 -2
  63. package/esm2020/modal/index.mjs +2 -1
  64. package/esm2020/modal/modal-body.mjs +4 -4
  65. package/esm2020/modal/modal-configuration.service.mjs +4 -3
  66. package/esm2020/modal/modal.module.mjs +2 -4
  67. package/esm2020/popover/common/abstract-popover.mjs +1 -1
  68. package/esm2020/popover/dropdown/dropdown.mjs +3 -4
  69. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +2 -2
  70. package/esm2020/popover/signpost/signpost-content.mjs +2 -3
  71. package/esm2020/popover/tooltip/tooltip-trigger.mjs +2 -3
  72. package/esm2020/utils/conditional/if-active.directive.mjs +2 -2
  73. package/esm2020/utils/conditional/if-expanded.directive.mjs +2 -2
  74. package/esm2020/utils/conditional/if-open.directive.mjs +2 -2
  75. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +4 -4
  76. package/esm2020/utils/focus/key-focus/key-focus.mjs +1 -1
  77. package/esm2020/utils/i18n/common-strings.default.mjs +4 -1
  78. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  79. package/esm2020/utils/popover/popover-anchor.mjs +1 -1
  80. package/esm2020/utils/popover/popover-content.mjs +10 -4
  81. package/esm2020/utils/popover/popover-open-close-button.mjs +2 -2
  82. package/esm2020/wizard/providers/wizard-navigation.service.mjs +8 -8
  83. package/fesm2015/clr-angular.mjs +159 -153
  84. package/fesm2015/clr-angular.mjs.map +1 -1
  85. package/fesm2020/clr-angular.mjs +159 -153
  86. package/fesm2020/clr-angular.mjs.map +1 -1
  87. package/forms/combobox/combobox-container.d.ts +1 -1
  88. package/forms/combobox/option-items.directive.d.ts +0 -1
  89. package/forms/combobox/providers/combobox-focus-handler.service.d.ts +1 -1
  90. package/forms/common/control.d.ts +1 -1
  91. package/forms/common/if-control-state/if-control-state.service.d.ts +0 -1
  92. package/forms/common/label.d.ts +1 -1
  93. package/forms/common/wrapped-control.d.ts +3 -3
  94. package/forms/datalist/datalist-container.d.ts +0 -1
  95. package/forms/datepicker/calendar.d.ts +1 -1
  96. package/forms/datepicker/date-container.d.ts +1 -2
  97. package/forms/datepicker/providers/date-io.service.d.ts +1 -2
  98. package/forms/datepicker/providers/datepicker-focus.service.d.ts +1 -1
  99. package/forms/input/input.d.ts +1 -1
  100. package/forms/password/password.d.ts +0 -1
  101. package/forms/radio/radio.d.ts +1 -1
  102. package/forms/range/range.d.ts +1 -1
  103. package/forms/select/select.d.ts +1 -1
  104. package/forms/textarea/textarea.d.ts +1 -1
  105. package/layout/main-container/main-container.d.ts +1 -1
  106. package/layout/tabs/tab-link.directive.d.ts +0 -2
  107. package/layout/tabs/tabs.d.ts +1 -1
  108. package/layout/vertical-nav/vertical-nav-group.d.ts +1 -2
  109. package/modal/index.d.ts +1 -0
  110. package/package.json +2 -2
  111. package/popover/common/abstract-popover.d.ts +2 -2
  112. package/popover/dropdown/dropdown.d.ts +0 -1
  113. package/popover/signpost/signpost-content.d.ts +0 -1
  114. package/popover/tooltip/tooltip-trigger.d.ts +0 -1
  115. package/utils/focus/key-focus/key-focus.d.ts +1 -1
  116. package/utils/i18n/common-strings.interface.d.ts +2 -0
  117. package/utils/popover/popover-anchor.d.ts +1 -1
  118. package/utils/popover/popover-content.d.ts +1 -0
@@ -394,6 +394,9 @@ const commonStringsDefault = {
394
394
  fileCount: '{COUNT} files',
395
395
  clearFile: 'Clear {FILE}',
396
396
  clearFiles: 'Clear {COUNT} files',
397
+ // Tree
398
+ selectedTreeNode: 'selected',
399
+ unselectedTreeNode: 'unselected',
397
400
  };
398
401
 
399
402
  /*
@@ -1178,9 +1181,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1178
1181
  this.subscriptions.push(this.stepperService.activeStep
1179
1182
  .pipe(filter(panelId => isPlatformBrowser(this.platformId) && panelId === this.id))
1180
1183
  .subscribe(() => {
1181
- //Adding timeout so that the status of the previous step is read by Voice Over on Safari,
1182
- //before focusing on the next stepper panel header
1183
- setTimeout(() => this.headerButton.nativeElement.focus(), 1500);
1184
+ this.headerButton.nativeElement.focus();
1184
1185
  }));
1185
1186
  }
1186
1187
  triggerAllFormControlValidationIfError(panel) {
@@ -2229,6 +2230,7 @@ class ClrPopoverContent {
2229
2230
  this.subscriptions = [];
2230
2231
  this.removeClickListenerFn = null;
2231
2232
  this.shouldRealign = false;
2233
+ this.previousContentHeight = null;
2232
2234
  // Check-collector pattern:
2233
2235
  // In order to get accurate content height/width values, we cannot calculate alignment offsets until
2234
2236
  // after the projected content has stabilized.
@@ -2250,9 +2252,14 @@ class ClrPopoverContent {
2250
2252
  this.smartEventsService.scrollToClose = !!scrollToClose;
2251
2253
  }
2252
2254
  ngAfterContentChecked() {
2253
- if (this.smartOpenService.open && this.view && this.shouldRealign) {
2254
- // Channel content-check event through the check-collector
2255
- this.checkCollector.emit();
2255
+ if (this.smartOpenService.open && this.view) {
2256
+ const rootNodeOffsetHeight = this.view.rootNodes[0].offsetHeight;
2257
+ if (this.shouldRealign ||
2258
+ (this.previousContentHeight !== null && this.previousContentHeight !== rootNodeOffsetHeight)) {
2259
+ // Channel content-check event through the check-collector
2260
+ this.previousContentHeight = rootNodeOffsetHeight;
2261
+ this.checkCollector.emit();
2262
+ }
2256
2263
  }
2257
2264
  }
2258
2265
  ngAfterViewInit() {
@@ -2368,7 +2375,7 @@ class ClrPopoverOpenCloseButton {
2368
2375
  this.smartOpenService = smartOpenService;
2369
2376
  this.openCloseChange = new EventEmitter();
2370
2377
  this.subscriptions = [];
2371
- this.subscriptions.push(this.smartOpenService.openChange.subscribe(change => {
2378
+ this.subscriptions.push(smartOpenService.openChange.subscribe(change => {
2372
2379
  this.openCloseChange.next(change);
2373
2380
  }));
2374
2381
  }
@@ -3321,7 +3328,7 @@ class ClrIfActive {
3321
3328
  this.activeChange = new EventEmitter(false);
3322
3329
  this.wasActive = false;
3323
3330
  this.checkAndUpdateView(ifActiveService.current);
3324
- this.subscription = this.ifActiveService.currentChange.subscribe(newCurrentId => {
3331
+ this.subscription = ifActiveService.currentChange.subscribe(newCurrentId => {
3325
3332
  this.checkAndUpdateView(newCurrentId);
3326
3333
  });
3327
3334
  }
@@ -3411,7 +3418,7 @@ class ClrIfOpen {
3411
3418
  * used with de-structured / de-sugared syntax.
3412
3419
  */
3413
3420
  this.openChange = new EventEmitter(false);
3414
- this.subscription = this.toggleService.openChange.subscribe(change => {
3421
+ this.subscription = toggleService.openChange.subscribe(change => {
3415
3422
  this.updateView(change);
3416
3423
  this.openChange.emit(change);
3417
3424
  });
@@ -3481,7 +3488,7 @@ class ClrIfExpanded {
3481
3488
  this._subscriptions = [];
3482
3489
  this._subscriptions.push(expand.expandChange.subscribe(() => {
3483
3490
  this.updateView();
3484
- this.expandedChange.emit(this.expand.expanded);
3491
+ this.expandedChange.emit(expand.expanded);
3485
3492
  }));
3486
3493
  }
3487
3494
  get expanded() {
@@ -3638,7 +3645,7 @@ class ClrFocusOnViewInit {
3638
3645
  this.renderer = renderer;
3639
3646
  this.directFocus = true; // true if the element gets focused without need to set tabindex;
3640
3647
  this.destroy$ = new Subject();
3641
- this._isEnabled = this.focusOnViewInit;
3648
+ this._isEnabled = focusOnViewInit;
3642
3649
  // Angular compiler doesn't understand the type Document
3643
3650
  // when working out the metadata for injectable parameters,
3644
3651
  // even though it understands the injection token DOCUMENT
@@ -3649,8 +3656,8 @@ class ClrFocusOnViewInit {
3649
3656
  .subscribe(() => {
3650
3657
  if (!this.directFocus) {
3651
3658
  // manually set attributes and styles should be removed
3652
- this.renderer.removeAttribute(this.el.nativeElement, 'tabindex');
3653
- this.renderer.setStyle(this.el.nativeElement, 'outline', null);
3659
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
3660
+ renderer.setStyle(el.nativeElement, 'outline', null);
3654
3661
  }
3655
3662
  }));
3656
3663
  }
@@ -4500,12 +4507,11 @@ var CONTROL_STATE;
4500
4507
  })(CONTROL_STATE || (CONTROL_STATE = {}));
4501
4508
  class IfControlStateService {
4502
4509
  constructor(ngControlService) {
4503
- this.ngControlService = ngControlService;
4504
4510
  this.subscriptions = [];
4505
4511
  // Implement our own status changes observable, since Angular controls don't
4506
4512
  this._statusChanges = new BehaviorSubject(CONTROL_STATE.NONE);
4507
4513
  // Wait for the control to be available
4508
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4514
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4509
4515
  if (control) {
4510
4516
  this.control = control;
4511
4517
  // Subscribe to the status change events, only after touched
@@ -4755,14 +4761,14 @@ class ClrAbstractContainer {
4755
4761
  this.ngControlService = ngControlService;
4756
4762
  this._dynamic = false;
4757
4763
  this.subscriptions = [];
4758
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
4764
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
4759
4765
  this.state = state;
4760
4766
  // Make sure everything is updated before dispatching the values for helpers
4761
4767
  setTimeout(() => {
4762
4768
  this.updateHelpers();
4763
4769
  });
4764
4770
  }));
4765
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4771
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4766
4772
  this.control = control;
4767
4773
  }));
4768
4774
  }
@@ -5015,10 +5021,10 @@ class WrappedFormControl {
5015
5021
  this.vcr = vcr;
5016
5022
  this.wrapperType = wrapperType;
5017
5023
  this.ngControl = ngControl;
5018
- this.index = 0;
5019
- this.subscriptions = [];
5020
5024
  this.renderer = renderer;
5021
5025
  this.el = el;
5026
+ this.index = 0;
5027
+ this.subscriptions = [];
5022
5028
  if (injector) {
5023
5029
  this.ngControlService = injector.get(NgControlService, null);
5024
5030
  this.ifControlStateService = injector.get(IfControlStateService, null);
@@ -5239,12 +5245,12 @@ class AbstractIfState {
5239
5245
  this.subscriptions = [];
5240
5246
  this.displayedContent = false;
5241
5247
  if (ngControlService) {
5242
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
5248
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
5243
5249
  this.control = control;
5244
5250
  }));
5245
5251
  }
5246
5252
  if (ifControlStateService) {
5247
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
5253
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
5248
5254
  this.handleState(state);
5249
5255
  }));
5250
5256
  }
@@ -6801,7 +6807,7 @@ class ClrOption {
6801
6807
  this.optionSelectionService = optionSelectionService;
6802
6808
  // A proxy with only the necessary data to be used for a11y and the focus handler service.
6803
6809
  this.optionProxy = new OptionData(null, null);
6804
- this.optionProxy.el = this.elRef.nativeElement;
6810
+ this.optionProxy.el = elRef.nativeElement;
6805
6811
  }
6806
6812
  get optionId() {
6807
6813
  return this._id;
@@ -7065,7 +7071,7 @@ class ClrCombobox extends WrappedFormControl {
7065
7071
  control.valueAccessor = this;
7066
7072
  }
7067
7073
  // default to SingleSelectComboboxModel, in case the optional input [ClrMulti] isn't used
7068
- this.optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7074
+ optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7069
7075
  this.updateControlValue();
7070
7076
  }
7071
7077
  get multiSelect() {
@@ -7361,11 +7367,10 @@ class ClrOptionItems {
7361
7367
  this.differs = differs;
7362
7368
  this.optionService = optionService;
7363
7369
  this.positionService = positionService;
7364
- this.vcr = vcr;
7365
7370
  this.subscriptions = [];
7366
7371
  this.filter = '';
7367
7372
  this.differ = null;
7368
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
7373
+ this.iterableProxy = new NgForOf(vcr, template, differs);
7369
7374
  this.subscriptions.push(optionService.inputChanged.subscribe(filter => {
7370
7375
  this.filter = filter;
7371
7376
  this.updateItems();
@@ -7745,10 +7750,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7745
7750
  class ClrDatalistContainer extends ClrAbstractContainer {
7746
7751
  constructor(controlClassService, layoutService, ngControlService, focusService, ifControlStateService) {
7747
7752
  super(ifControlStateService, layoutService, controlClassService, ngControlService);
7748
- this.focusService = focusService;
7749
7753
  this.ifControlStateService = ifControlStateService;
7750
7754
  this.focus = false;
7751
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => (this.focus = state)));
7755
+ this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
7752
7756
  }
7753
7757
  }
7754
7758
  ClrDatalistContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatalistContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
@@ -7852,7 +7856,7 @@ class ClrDatalistInput extends WrappedFormControl {
7852
7856
  super(vcr, ClrDatalistContainer, injector, control, renderer, el);
7853
7857
  this.focusService = focusService;
7854
7858
  this.datalistIdService = datalistIdService;
7855
- if (!this.focusService) {
7859
+ if (!focusService) {
7856
7860
  throw new Error('clrDatalist requires being wrapped in <clr-datalist-container>');
7857
7861
  }
7858
7862
  }
@@ -8626,8 +8630,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
8626
8630
  * The full license information can be found in LICENSE in the root directory of this project.
8627
8631
  */
8628
8632
  class DateIOService {
8629
- constructor(_localeHelperService) {
8630
- this._localeHelperService = _localeHelperService;
8633
+ constructor(localeHelperService) {
8631
8634
  this.disabledDates = {
8632
8635
  // This is the default range. It approximates the beginning of time to the end of time.
8633
8636
  // Unless a minDate or maxDate is set with the native HTML5 api the range is all dates
@@ -8638,7 +8641,7 @@ class DateIOService {
8638
8641
  this.cldrLocaleDateFormat = DEFAULT_LOCALE_FORMAT;
8639
8642
  this.localeDisplayFormat = LITTLE_ENDIAN;
8640
8643
  this.delimiters = ['/', '/'];
8641
- this.cldrLocaleDateFormat = this._localeHelperService.localeDateFormat;
8644
+ this.cldrLocaleDateFormat = localeHelperService.localeDateFormat;
8642
8645
  this.initializeLocaleDisplayFormat();
8643
8646
  }
8644
8647
  get placeholderText() {
@@ -9059,7 +9062,7 @@ class DatepickerEnabledService {
9059
9062
  constructor(_document) {
9060
9063
  this._document = _document;
9061
9064
  this._isUserAgentMobile = false;
9062
- if (this._document) {
9065
+ if (_document) {
9063
9066
  this._isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(_document.defaultView.navigator.userAgent);
9064
9067
  this._innerWidth = _document.defaultView.innerWidth;
9065
9068
  }
@@ -9655,18 +9658,17 @@ class ClrDateContainer extends ClrAbstractContainer {
9655
9658
  this.dateFormControlService = dateFormControlService;
9656
9659
  this.dateIOService = dateIOService;
9657
9660
  this.commonStrings = commonStrings;
9658
- this.focusService = focusService;
9659
9661
  this.viewManagerService = viewManagerService;
9660
9662
  this.controlClassService = controlClassService;
9661
9663
  this.layoutService = layoutService;
9662
9664
  this.ngControlService = ngControlService;
9663
9665
  this.ifControlStateService = ifControlStateService;
9664
9666
  this.focus = false;
9665
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
9667
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
9666
9668
  this.focus = state;
9667
9669
  }));
9668
- this.subscriptions.push(this.toggleService.openChange.subscribe(() => {
9669
- this.dateFormControlService.markAsTouched();
9670
+ this.subscriptions.push(toggleService.openChange.subscribe(() => {
9671
+ dateFormControlService.markAsTouched();
9670
9672
  }));
9671
9673
  }
9672
9674
  set clrPosition(position) {
@@ -10666,7 +10668,7 @@ class ClrPasswordContainer extends ClrAbstractContainer {
10666
10668
  this.focus = false;
10667
10669
  this._toggle = true;
10668
10670
  /* The unsubscribe is handle inside the ClrAbstractContainer */
10669
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
10671
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
10670
10672
  this.focus = state;
10671
10673
  }));
10672
10674
  }
@@ -10816,12 +10818,11 @@ class ClrPassword extends WrappedFormControl {
10816
10818
  constructor(vcr, injector, control, renderer, el, focusService, toggleService) {
10817
10819
  super(vcr, ClrPasswordContainer, injector, control, renderer, el);
10818
10820
  this.focusService = focusService;
10819
- this.toggleService = toggleService;
10820
10821
  this.index = 1;
10821
- if (!this.focusService) {
10822
+ if (!focusService) {
10822
10823
  throw new Error('clrPassword requires being wrapped in <clr-password-container>');
10823
10824
  }
10824
- this.subscriptions.push(this.toggleService.subscribe(toggle => {
10825
+ this.subscriptions.push(toggleService.subscribe(toggle => {
10825
10826
  renderer.setProperty(el.nativeElement, 'type', toggle ? 'text' : 'password');
10826
10827
  }));
10827
10828
  }
@@ -14391,11 +14392,10 @@ class ClrDatagridItems {
14391
14392
  this.template = template;
14392
14393
  this.differs = differs;
14393
14394
  this.items = items;
14394
- this.vcr = vcr;
14395
14395
  this.differ = null;
14396
14396
  this.subscriptions = [];
14397
14397
  items.smartenUp();
14398
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
14398
+ this.iterableProxy = new NgForOf(vcr, template, differs);
14399
14399
  this.subscriptions.push(items.change.subscribe(newItems => {
14400
14400
  this.iterableProxy.ngForOf = newItems;
14401
14401
  this.iterableProxy.ngDoCheck();
@@ -14891,9 +14891,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14891
14891
  */
14892
14892
  let nbSelection = 0;
14893
14893
  class Selection {
14894
- constructor(_items, _filters) {
14894
+ constructor(_items, filters) {
14895
14895
  this._items = _items;
14896
- this._filters = _filters;
14897
14896
  this.preserveSelection = false;
14898
14897
  /**
14899
14898
  * Shift key state, for use in range selection.
@@ -14914,13 +14913,13 @@ class Selection {
14914
14913
  */
14915
14914
  this.subscriptions = [];
14916
14915
  this.id = 'clr-dg-selection' + nbSelection++;
14917
- this.subscriptions.push(this._filters.change.subscribe(() => {
14916
+ this.subscriptions.push(filters.change.subscribe(() => {
14918
14917
  if (!this._selectable || this.preserveSelection) {
14919
14918
  return;
14920
14919
  }
14921
14920
  this.clearSelection();
14922
14921
  }));
14923
- this.subscriptions.push(this._items.allChanges.subscribe(updatedItems => {
14922
+ this.subscriptions.push(_items.allChanges.subscribe(updatedItems => {
14924
14923
  // Reset the lockedRefs;
14925
14924
  const updateLockedRef = [];
14926
14925
  switch (this.selectionType) {
@@ -14932,10 +14931,10 @@ class Selection {
14932
14931
  let selectionUpdated = false;
14933
14932
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
14934
14933
  if (this.currentSingle && !this.prevSingleSelectionRef) {
14935
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
14934
+ this.prevSingleSelectionRef = _items.trackBy(this.currentSingle);
14936
14935
  }
14937
14936
  updatedItems.forEach(item => {
14938
- const ref = this._items.trackBy(item);
14937
+ const ref = _items.trackBy(item);
14939
14938
  // If one of the updated items is the previously selectedSingle, set it as the new one
14940
14939
  if (this.prevSingleSelectionRef === ref) {
14941
14940
  newSingle = item;
@@ -14949,7 +14948,7 @@ class Selection {
14949
14948
  // Therefore, we should delete the currentSingle if it used to be defined but doesn't exist anymore.
14950
14949
  // No explicit "delete" is required, since newSingle would be undefined at this point.
14951
14950
  // Marking it as selectionUpdated here will set currentSingle to undefined below in the setTimeout.
14952
- if (this._items.smart && !newSingle) {
14951
+ if (_items.smart && !newSingle) {
14953
14952
  selectionUpdated = true;
14954
14953
  }
14955
14954
  // TODO: Discussed this with Eudes and this is fine for now.
@@ -14970,7 +14969,7 @@ class Selection {
14970
14969
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
14971
14970
  this.prevSelectionRefs = [];
14972
14971
  this.current.forEach(item => {
14973
- this.prevSelectionRefs.push(this._items.trackBy(item));
14972
+ this.prevSelectionRefs.push(_items.trackBy(item));
14974
14973
  });
14975
14974
  }
14976
14975
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
@@ -14979,7 +14978,7 @@ class Selection {
14979
14978
  //
14980
14979
  // The both loops below that goes over updatedItems could be combined into one.
14981
14980
  updatedItems.forEach(item => {
14982
- const ref = this._items.trackBy(item);
14981
+ const ref = _items.trackBy(item);
14983
14982
  if (this.lockedRefs.indexOf(ref) > -1) {
14984
14983
  updateLockedRef.push(ref);
14985
14984
  }
@@ -14989,7 +14988,7 @@ class Selection {
14989
14988
  // the if statement below results in broken behavior.
14990
14989
  if (leftOver.length > 0) {
14991
14990
  updatedItems.forEach(item => {
14992
- const ref = this._items.trackBy(item);
14991
+ const ref = _items.trackBy(item);
14993
14992
  // Look in current selected refs array if item is selected, and update actual value
14994
14993
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
14995
14994
  if (selectedIndex > -1) {
@@ -14999,7 +14998,7 @@ class Selection {
14999
14998
  });
15000
14999
  // Filter out any unmatched items if we're using smart datagrids where we expect all items to be
15001
15000
  // present
15002
- if (this._items.smart) {
15001
+ if (_items.smart) {
15003
15002
  leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);
15004
15003
  if (this.current.length !== leftOver.length) {
15005
15004
  selectionUpdated = true;
@@ -15317,8 +15316,6 @@ class ClrDatagridRow {
15317
15316
  this.detailService = detailService;
15318
15317
  this.displayMode = displayMode;
15319
15318
  this.vcr = vcr;
15320
- this.renderer = renderer;
15321
- this.el = el;
15322
15319
  this.commonStrings = commonStrings;
15323
15320
  this.items = items;
15324
15321
  this.document = document;
@@ -15346,17 +15343,17 @@ class ClrDatagridRow {
15346
15343
  this.radioId = 'clr-dg-row-rd' + nbRow;
15347
15344
  this.checkboxId = 'clr-dg-row-cb' + nbRow;
15348
15345
  this.expandableId = expand.expandableId;
15349
- this.subscriptions.push(combineLatest(this.expand.replace, this.expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15346
+ this.subscriptions.push(combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15350
15347
  if (expandReplaceValue && expandChangeValue) {
15351
15348
  // replaced and expanding
15352
15349
  this.replaced = true;
15353
- this.renderer.addClass(this.el.nativeElement, 'datagrid-row-replaced');
15350
+ renderer.addClass(el.nativeElement, 'datagrid-row-replaced');
15354
15351
  }
15355
15352
  else {
15356
15353
  this.replaced = false;
15357
15354
  // Handles these cases: not replaced and collapsing & replaced and
15358
15355
  // collapsing and not replaced and expanding.
15359
- this.renderer.removeClass(this.el.nativeElement, 'datagrid-row-replaced');
15356
+ renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');
15360
15357
  }
15361
15358
  }));
15362
15359
  }
@@ -15896,7 +15893,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15896
15893
  * The full license information can be found in LICENSE in the root directory of this project.
15897
15894
  */
15898
15895
  class ClrDatagrid {
15899
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
15896
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, keyNavigation, zone) {
15900
15897
  this.organizer = organizer;
15901
15898
  this.items = items;
15902
15899
  this.expandableRows = expandableRows;
@@ -15910,7 +15907,6 @@ class ClrDatagrid {
15910
15907
  this.el = el;
15911
15908
  this.page = page;
15912
15909
  this.commonStrings = commonStrings;
15913
- this.columnsService = columnsService;
15914
15910
  this.keyNavigation = keyNavigation;
15915
15911
  this.zone = zone;
15916
15912
  this.clrDgSingleSelectionAriaLabel = this.commonStrings.keys.singleSelectionAriaLabel;
@@ -15932,7 +15928,7 @@ class ClrDatagrid {
15932
15928
  this._subscriptions = [];
15933
15929
  const datagridId = uniqueIdFactory();
15934
15930
  this.selectAllId = 'clr-dg-select-all-' + datagridId;
15935
- this.detailService.id = datagridId;
15931
+ detailService.id = datagridId;
15936
15932
  }
15937
15933
  /**
15938
15934
  * Freezes the datagrid while data is loading
@@ -16154,7 +16150,7 @@ class ClrDatagrid {
16154
16150
  this.items.refresh();
16155
16151
  }
16156
16152
  }
16157
- ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16153
+ ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16158
16154
  ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
16159
16155
  Selection,
16160
16156
  Sort,
@@ -16197,7 +16193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16197
16193
  }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
16198
16194
  type: Inject,
16199
16195
  args: [DOCUMENT]
16200
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loadingMoreItems: [{
16196
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loadingMoreItems: [{
16201
16197
  type: Input,
16202
16198
  args: ['clrLoadingMoreItems']
16203
16199
  }], clrDgSingleSelectionAriaLabel: [{
@@ -16303,11 +16299,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16303
16299
  */
16304
16300
  let clrDgActionId = 0;
16305
16301
  class ClrDatagridActionOverflow {
16306
- constructor(rowActionService, commonStrings, platformId, zone, smartToggleService) {
16302
+ constructor(rowActionService, commonStrings, platformId, smartToggleService) {
16307
16303
  this.rowActionService = rowActionService;
16308
16304
  this.commonStrings = commonStrings;
16309
16305
  this.platformId = platformId;
16310
- this.zone = zone;
16311
16306
  this.smartToggleService = smartToggleService;
16312
16307
  this.openChange = new EventEmitter(false);
16313
16308
  this.popoverId = uniqueIdFactory();
@@ -16319,10 +16314,10 @@ class ClrDatagridActionOverflow {
16319
16314
  };
16320
16315
  this._open = false;
16321
16316
  this.subscriptions = [];
16322
- this.rowActionService.register();
16323
- this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
16317
+ rowActionService.register();
16318
+ this.subscriptions.push(smartToggleService.openChange.subscribe(openState => {
16324
16319
  this.open = openState;
16325
- }), this.smartToggleService.popoverVisible.subscribe(visible => {
16320
+ }), smartToggleService.popoverVisible.subscribe(visible => {
16326
16321
  if (visible) {
16327
16322
  this.initializeFocus();
16328
16323
  }
@@ -16359,7 +16354,7 @@ class ClrDatagridActionOverflow {
16359
16354
  }
16360
16355
  }
16361
16356
  }
16362
- ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16357
+ ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16363
16358
  ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
16364
16359
  <button
16365
16360
  tabindex="-1"
@@ -16429,7 +16424,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16429
16424
  }], ctorParameters: function () { return [{ type: RowActionService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
16430
16425
  type: Inject,
16431
16426
  args: [PLATFORM_ID]
16432
- }] }, { type: i0.NgZone }, { type: ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{
16427
+ }] }, { type: ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{
16433
16428
  type: Input,
16434
16429
  args: ['clrDgActionOverflowButtonLabel']
16435
16430
  }], openChange: [{
@@ -16884,8 +16879,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16884
16879
  class DatagridDetailRegisterer {
16885
16880
  constructor(expandableRowsCount) {
16886
16881
  this.expandableRowsCount = expandableRowsCount;
16887
- if (this.expandableRowsCount) {
16888
- this.expandableRowsCount.register();
16882
+ if (expandableRowsCount) {
16883
+ expandableRowsCount.register();
16889
16884
  }
16890
16885
  }
16891
16886
  ngOnDestroy() {
@@ -17012,13 +17007,12 @@ const COLUMN_STATE_PROVIDER = {
17012
17007
  class ClrDatagridHideableColumn {
17013
17008
  constructor(titleTemplateRef, viewContainerRef, columnsService, columnState) {
17014
17009
  this.titleTemplateRef = titleTemplateRef;
17015
- this.viewContainerRef = viewContainerRef;
17016
17010
  this.columnsService = columnsService;
17017
17011
  this.columnState = columnState;
17018
17012
  this.hiddenChange = new EventEmitter();
17019
17013
  this.subscriptions = [];
17020
- this.viewContainerRef.createEmbeddedView(this.titleTemplateRef);
17021
- if (!this.columnState) {
17014
+ viewContainerRef.createEmbeddedView(titleTemplateRef);
17015
+ if (!columnState) {
17022
17016
  throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');
17023
17017
  }
17024
17018
  }
@@ -17103,7 +17097,7 @@ class ClrIfDetail {
17103
17097
  this.stateChange = new EventEmitter(null);
17104
17098
  this.subscriptions = [];
17105
17099
  this.skip = false; // This keeps us from resetting the input and calling the toggle twice
17106
- this.detailService.enabled = true;
17100
+ detailService.enabled = true;
17107
17101
  }
17108
17102
  set state(model) {
17109
17103
  if (!this.skip) {
@@ -17241,7 +17235,7 @@ class ClrDatagridPagination {
17241
17235
  this.commonStrings = commonStrings;
17242
17236
  this.detailService = detailService;
17243
17237
  this.currentChanged = new EventEmitter(false);
17244
- this.page.activated = true;
17238
+ page.activated = true;
17245
17239
  }
17246
17240
  /**
17247
17241
  * Page size
@@ -17726,10 +17720,10 @@ class ClrDatagridVirtualScrollDirective {
17726
17720
  this.cdkVirtualForInputs = {
17727
17721
  cdkVirtualForTrackBy: index => index,
17728
17722
  };
17729
- this.items.smartenUp();
17730
- this.datagrid.hasVirtualScroller = true;
17731
- this.datagrid.detailService.preventFocusScroll = true;
17732
- this.datagridElementRef = this.datagrid.el;
17723
+ items.smartenUp();
17724
+ datagrid.hasVirtualScroller = true;
17725
+ datagrid.detailService.preventFocusScroll = true;
17726
+ this.datagridElementRef = datagrid.el;
17733
17727
  // default
17734
17728
  this.cdkVirtualForTemplateCacheSize = 20;
17735
17729
  this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
@@ -17924,7 +17918,6 @@ class DatagridHeaderRenderer {
17924
17918
  constructor(el, renderer, organizer, domAdapter, columnResizerService, columnsService, columnState) {
17925
17919
  this.el = el;
17926
17920
  this.renderer = renderer;
17927
- this.organizer = organizer;
17928
17921
  this.domAdapter = domAdapter;
17929
17922
  this.columnResizerService = columnResizerService;
17930
17923
  this.columnsService = columnsService;
@@ -17936,7 +17929,7 @@ class DatagridHeaderRenderer {
17936
17929
  this.widthSet = false;
17937
17930
  this.autoSet = false;
17938
17931
  this.subscriptions = [];
17939
- this.subscriptions.push(this.organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
17932
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
17940
17933
  }
17941
17934
  ngOnDestroy() {
17942
17935
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -18082,14 +18075,13 @@ const domAdapterFactory = (platformId) => {
18082
18075
  // Fixes build error
18083
18076
  // @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)
18084
18077
  class DatagridMainRenderer {
18085
- constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18078
+ constructor(datagrid, organizer, items, page, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18079
+ this.datagrid = datagrid;
18086
18080
  this.organizer = organizer;
18087
18081
  this.items = items;
18088
18082
  this.page = page;
18089
- this.domAdapter = domAdapter;
18090
18083
  this.el = el;
18091
18084
  this.renderer = renderer;
18092
- this.detailService = detailService;
18093
18085
  this.tableSizeService = tableSizeService;
18094
18086
  this.columnsService = columnsService;
18095
18087
  this.ngZone = ngZone;
@@ -18103,16 +18095,14 @@ class DatagridMainRenderer {
18103
18095
  * 2) When rows are lazily loaded for the first time
18104
18096
  */
18105
18097
  this.columnsSizesStable = false;
18106
- this.subscriptions.push(this.organizer
18107
- .filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS)
18108
- .subscribe(() => this.computeHeadersWidth()));
18109
- this.subscriptions.push(this.page.sizeChange.subscribe(() => {
18098
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth()));
18099
+ this.subscriptions.push(page.sizeChange.subscribe(() => {
18110
18100
  if (this._heightSet) {
18111
18101
  this.resetDatagridHeight();
18112
18102
  }
18113
18103
  }));
18114
- this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18115
- this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18104
+ this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18105
+ this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18116
18106
  }
18117
18107
  ngOnInit() {
18118
18108
  this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
@@ -18132,10 +18122,9 @@ class DatagridMainRenderer {
18132
18122
  this.tableSizeService.table = this.el;
18133
18123
  }
18134
18124
  ngAfterViewChecked() {
18135
- if (this.shouldStabilizeColumns) {
18136
- setTimeout(() => {
18137
- this.stabilizeColumns();
18138
- }, 0);
18125
+ const datagridIsVisible = this.checkAndUpdateVisibility();
18126
+ if (this.shouldStabilizeColumns && datagridIsVisible) {
18127
+ this.stabilizeColumns();
18139
18128
  }
18140
18129
  if (this.shouldComputeHeight()) {
18141
18130
  this.ngZone.runOutsideAngular(() => {
@@ -18286,8 +18275,18 @@ class DatagridMainRenderer {
18286
18275
  this.columnsSizesStable = true;
18287
18276
  }
18288
18277
  }
18278
+ checkAndUpdateVisibility() {
18279
+ if (this.el.nativeElement.offsetParent) {
18280
+ this.datagrid.datagrid.nativeElement.style.visibility = 'visible';
18281
+ return true;
18282
+ }
18283
+ else {
18284
+ this.datagrid.datagrid.nativeElement.style.visibility = 'hidden';
18285
+ return false;
18286
+ }
18287
+ }
18289
18288
  }
18290
- DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: DomAdapter }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18289
+ DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: ClrDatagrid }, { token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18291
18290
  DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer }], ngImport: i0 });
18292
18291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
18293
18292
  type: Directive,
@@ -18295,7 +18294,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
18295
18294
  selector: 'clr-datagrid',
18296
18295
  providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],
18297
18296
  }]
18298
- }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: DomAdapter }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18297
+ }], ctorParameters: function () { return [{ type: ClrDatagrid }, { type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18299
18298
  type: ContentChildren,
18300
18299
  args: [DatagridHeaderRenderer]
18301
18300
  }], rows: [{
@@ -18933,8 +18932,8 @@ class RecursiveChildren {
18933
18932
  this.featuresService = featuresService;
18934
18933
  this.expandService = expandService;
18935
18934
  if (expandService) {
18936
- this.subscription = this.expandService.expandChange.subscribe(value => {
18937
- if (!value && this.parent && !this.featuresService.eager && this.featuresService.recursion) {
18935
+ this.subscription = expandService.expandChange.subscribe(value => {
18936
+ if (!value && this.parent && !featuresService.eager && featuresService.recursion) {
18938
18937
  // In the case of lazy-loading recursive trees, we clear the children on collapse.
18939
18938
  // This is better in case they change between two user interaction, and that way
18940
18939
  // the app itself can decide whether to cache them or not.
@@ -19548,7 +19547,7 @@ class ClrTreeNode {
19548
19547
  this.typeAheadKeyBuffer = '';
19549
19548
  this.typeAheadKeyEvent = new Subject();
19550
19549
  this.subscriptions = [];
19551
- if (this.featuresService.recursion) {
19550
+ if (featuresService.recursion) {
19552
19551
  // I'm completely stuck, we have to hack into private properties until either
19553
19552
  // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998
19554
19553
  // are fixed
@@ -19789,7 +19788,7 @@ class ClrTreeNode {
19789
19788
  }
19790
19789
  }
19791
19790
  ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTreeNode, deps: [{ token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
19792
- ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19791
+ ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19793
19792
  trigger('toggleChildrenAnim', [
19794
19793
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19795
19794
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19809,7 +19808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19809
19808
  ], host: {
19810
19809
  '[class.clr-tree-node]': 'true',
19811
19810
  '[class.disabled]': 'this._model.disabled',
19812
- }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19811
+ }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19813
19812
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
19814
19813
  type: Inject,
19815
19814
  args: [PLATFORM_ID]
@@ -19856,18 +19855,21 @@ function trimAndLowerCase(value) {
19856
19855
  * The full license information can be found in LICENSE in the root directory of this project.
19857
19856
  */
19858
19857
  class ClrTree {
19859
- constructor(featuresService, focusManagerService, { nativeElement }, renderer, ngZone) {
19858
+ constructor(featuresService, focusManagerService, renderer, el, ngZone) {
19860
19859
  this.featuresService = featuresService;
19861
19860
  this.focusManagerService = focusManagerService;
19861
+ this.renderer = renderer;
19862
+ this.el = el;
19862
19863
  this.subscriptions = [];
19863
- const subscription = ngZone.runOutsideAngular(() => fromEvent(nativeElement, 'focusin').subscribe((event) => {
19864
- if (event.target === nativeElement) {
19864
+ this._isMultiSelectable = false;
19865
+ const subscription = ngZone.runOutsideAngular(() => fromEvent(el.nativeElement, 'focusin').subscribe((event) => {
19866
+ if (event.target === el.nativeElement) {
19865
19867
  // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.
19866
19868
  // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.
19867
- this.focusManagerService.focusFirstVisibleNode();
19869
+ focusManagerService.focusFirstVisibleNode();
19868
19870
  // when the first child gets focus,
19869
19871
  // tree should no longer have tabindex of 0.
19870
- renderer.removeAttribute(nativeElement, 'tabindex');
19872
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
19871
19873
  }
19872
19874
  }));
19873
19875
  this.subscriptions.push(subscription);
@@ -19876,17 +19878,28 @@ class ClrTree {
19876
19878
  this.featuresService.eager = !value;
19877
19879
  }
19878
19880
  get isMultiSelectable() {
19879
- return this.featuresService.selectable && this.rootNodes.length > 0;
19881
+ return this._isMultiSelectable;
19880
19882
  }
19881
19883
  ngAfterContentInit() {
19882
19884
  this.setRootNodes();
19883
19885
  this.subscriptions.push(this.rootNodes.changes.subscribe(() => {
19886
+ this.setMultiSelectable();
19884
19887
  this.setRootNodes();
19885
19888
  }));
19886
19889
  }
19887
19890
  ngOnDestroy() {
19888
19891
  this.subscriptions.forEach(sub => sub.unsubscribe());
19889
19892
  }
19893
+ setMultiSelectable() {
19894
+ if (this.featuresService.selectable && this.rootNodes.length > 0) {
19895
+ this._isMultiSelectable = true;
19896
+ this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');
19897
+ }
19898
+ else {
19899
+ this._isMultiSelectable = false;
19900
+ this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');
19901
+ }
19902
+ }
19890
19903
  setRootNodes() {
19891
19904
  // if node has no parent, it's a root node
19892
19905
  // for recursive tree, this.rootNodes registers also nested children
@@ -19894,8 +19907,8 @@ class ClrTree {
19894
19907
  this.focusManagerService.rootNodeModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);
19895
19908
  }
19896
19909
  }
19897
- ClrTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTree, deps: [{ token: TreeFeaturesService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
19898
- ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"", "attr.aria-multiselectable": "isMultiSelectable" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
19910
+ ClrTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTree, deps: [{ token: TreeFeaturesService }, { token: TreeFocusManagerService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
19911
+ ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
19899
19912
  <ng-content></ng-content>
19900
19913
  <clr-recursive-children
19901
19914
  *ngIf="featuresService.recursion"
@@ -19917,10 +19930,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19917
19930
  host: {
19918
19931
  tabindex: '0',
19919
19932
  '[attr.role]': '"tree"',
19920
- '[attr.aria-multiselectable]': 'isMultiSelectable',
19921
19933
  },
19922
19934
  }]
19923
- }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
19935
+ }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
19924
19936
  type: ContentChildren,
19925
19937
  args: [ClrTreeNode]
19926
19938
  }], lazy: [{
@@ -20007,7 +20019,7 @@ class DropdownFocusHandler {
20007
20019
  this._unlistenFuncs = [];
20008
20020
  this.resetChildren();
20009
20021
  this.moveToFirstItemWhenOpen();
20010
- if (!this.parent) {
20022
+ if (!parent) {
20011
20023
  this.handleRootFocus();
20012
20024
  }
20013
20025
  }
@@ -20205,11 +20217,10 @@ class ClrDropdown {
20205
20217
  this.parent = parent;
20206
20218
  this.toggleService = toggleService;
20207
20219
  this.focusHandler = focusHandler;
20208
- this.cdr = cdr;
20209
20220
  this.isMenuClosable = true;
20210
20221
  this.subscriptions = [];
20211
- this.subscriptions.push(dropdownService.changes.subscribe(value => (this.toggleService.open = value)));
20212
- this.subscriptions.push(toggleService.openChange.subscribe(() => this.cdr.markForCheck()));
20222
+ this.subscriptions.push(dropdownService.changes.subscribe(value => (toggleService.open = value)));
20223
+ this.subscriptions.push(toggleService.openChange.subscribe(() => cdr.markForCheck()));
20213
20224
  }
20214
20225
  ngOnDestroy() {
20215
20226
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -21835,12 +21846,12 @@ class ClrHeader {
21835
21846
  this.isNavLevel2OnPage = false;
21836
21847
  this.openNavLevel = null;
21837
21848
  this.responsiveNavCodes = ResponsiveNavCodes;
21838
- this._subscription = this.responsiveNavService.registeredNavs.subscribe({
21849
+ this._subscription = responsiveNavService.registeredNavs.subscribe({
21839
21850
  next: (navLevelList) => {
21840
21851
  this.initializeNavTriggers(navLevelList);
21841
21852
  },
21842
21853
  });
21843
- this._subscription.add(this.responsiveNavService.navControl
21854
+ this._subscription.add(responsiveNavService.navControl
21844
21855
  .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
21845
21856
  .subscribe(() => {
21846
21857
  this.openNavLevel = null;
@@ -22457,8 +22468,6 @@ class ClrTabLink {
22457
22468
  this.ifActiveService = ifActiveService;
22458
22469
  this.id = id;
22459
22470
  this.el = el;
22460
- this.cfr = cfr;
22461
- this.viewContainerRef = viewContainerRef;
22462
22471
  this.tabsService = tabsService;
22463
22472
  this.tabsId = tabsId;
22464
22473
  if (!this.tabLinkId) {
@@ -22467,9 +22476,9 @@ class ClrTabLink {
22467
22476
  // Tab links can be rendered in one of two places: in the main area or inside the overflow dropdown menu.
22468
22477
  // Here, we create a container so that its template can be used to create embeddedView on the fly.
22469
22478
  // See TabsService's renderView() method and how it's used in Tabs class for an example.
22470
- const factory = this.cfr.resolveComponentFactory(TemplateRefContainer);
22471
- this.templateRefContainer = this.viewContainerRef.createComponent(factory, undefined, undefined, [
22472
- [this.el.nativeElement],
22479
+ const factory = cfr.resolveComponentFactory(TemplateRefContainer);
22480
+ this.templateRefContainer = viewContainerRef.createComponent(factory, undefined, undefined, [
22481
+ [el.nativeElement],
22473
22482
  ]).instance;
22474
22483
  }
22475
22484
  get inOverflow() {
@@ -23051,7 +23060,7 @@ class ClrVerticalNav {
23051
23060
  this._navGroupRegistrationService = _navGroupRegistrationService;
23052
23061
  this.commonStrings = commonStrings;
23053
23062
  this._collapsedChanged = new EventEmitter(true);
23054
- this._sub = this._navService.collapsedChanged.subscribe(value => {
23063
+ this._sub = _navService.collapsedChanged.subscribe(value => {
23055
23064
  this._collapsedChanged.emit(value);
23056
23065
  });
23057
23066
  }
@@ -23139,27 +23148,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23139
23148
  const EXPANDED_STATE = 'expanded';
23140
23149
  const COLLAPSED_STATE = 'collapsed';
23141
23150
  class ClrVerticalNavGroup {
23142
- constructor(_itemExpand, _navGroupRegistrationService, _navGroupService, _navService, commonStrings) {
23151
+ constructor(_itemExpand, _navGroupRegistrationService, navGroupService, _navService, commonStrings) {
23143
23152
  this._itemExpand = _itemExpand;
23144
23153
  this._navGroupRegistrationService = _navGroupRegistrationService;
23145
- this._navGroupService = _navGroupService;
23146
23154
  this._navService = _navService;
23147
23155
  this.commonStrings = commonStrings;
23148
23156
  this.expandedChange = new EventEmitter(true);
23149
23157
  this.wasExpanded = false;
23150
23158
  this._subscriptions = [];
23151
23159
  this._expandAnimationState = COLLAPSED_STATE;
23152
- this._navGroupRegistrationService.registerNavGroup();
23160
+ _navGroupRegistrationService.registerNavGroup();
23153
23161
  // FIXME: This subscription handles a corner case
23154
23162
  // Vertical Nav collapse requires the animation to run first and then
23155
23163
  // remove the nodes from the DOM. If the user directly sets the input
23156
23164
  // on the clrIfExpanded directive, we have no chance to run the animation
23157
23165
  // and wait for it to complete. This subscription makes sure that the
23158
23166
  // animation states are correct for that edge case.
23159
- this._subscriptions.push(this._itemExpand.expandChange.subscribe(value => {
23167
+ this._subscriptions.push(_itemExpand.expandChange.subscribe(value => {
23160
23168
  if (value && this.expandAnimationState === COLLAPSED_STATE) {
23161
- if (this._navService.collapsed) {
23162
- this._navService.collapsed = false;
23169
+ if (_navService.collapsed) {
23170
+ _navService.collapsed = false;
23163
23171
  }
23164
23172
  this.expandAnimationState = EXPANDED_STATE;
23165
23173
  }
@@ -23169,7 +23177,7 @@ class ClrVerticalNavGroup {
23169
23177
  }));
23170
23178
  // 1. If the nav is collapsing, close the open nav group + save its state
23171
23179
  // 2. If the nav is expanding, expand the nav group if the previous state was expanded
23172
- this._subscriptions.push(this._navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23180
+ this._subscriptions.push(_navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23173
23181
  if (goingToCollapse && this.expanded) {
23174
23182
  this.wasExpanded = true;
23175
23183
  this.expandAnimationState = COLLAPSED_STATE;
@@ -23180,7 +23188,7 @@ class ClrVerticalNavGroup {
23180
23188
  }
23181
23189
  }));
23182
23190
  // If a link is clicked, expand the nav group
23183
- this._subscriptions.push(this._navGroupService.expandChange.subscribe((expand) => {
23191
+ this._subscriptions.push(navGroupService.expandChange.subscribe((expand) => {
23184
23192
  if (expand && !this.expanded) {
23185
23193
  this.expandGroup();
23186
23194
  }
@@ -23309,7 +23317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23309
23317
  class ClrVerticalNavIcon {
23310
23318
  constructor(_verticalNavIconService) {
23311
23319
  this._verticalNavIconService = _verticalNavIconService;
23312
- this._verticalNavIconService.registerIcon();
23320
+ _verticalNavIconService.registerIcon();
23313
23321
  }
23314
23322
  ngOnDestroy() {
23315
23323
  this._verticalNavIconService.unregisterIcon();
@@ -23473,9 +23481,10 @@ class ClrModalConfigurationService {
23473
23481
  }
23474
23482
  }
23475
23483
  ClrModalConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23476
- ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService });
23484
+ ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, providedIn: 'root' });
23477
23485
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, decorators: [{
23478
- type: Injectable
23486
+ type: Injectable,
23487
+ args: [{ providedIn: 'root' }]
23479
23488
  }] });
23480
23489
 
23481
23490
  /*
@@ -23657,11 +23666,11 @@ class ClrModalBody {
23657
23666
  this.unlisteners = [];
23658
23667
  ngZone.runOutsideAngular(() => {
23659
23668
  this.observer = new ResizeObserver(() => this.addOrRemoveTabIndex());
23660
- this.observer.observe(this.host.nativeElement);
23661
- this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
23669
+ this.observer.observe(host.nativeElement);
23670
+ this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
23662
23671
  // set the tabindex binding back when click is completed with mouseup
23663
23672
  this.addOrRemoveTabIndex();
23664
- }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
23673
+ }), renderer.listen(host.nativeElement, 'mousedown', () => {
23665
23674
  // tabindex = 0 binding should be removed
23666
23675
  // so it won't be focused when click starts with mousedown
23667
23676
  this.removeTabIndex();
@@ -23714,14 +23723,13 @@ class ClrModalModule {
23714
23723
  }
23715
23724
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23716
23725
  ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrIconModule] });
23717
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, providers: [ClrModalConfigurationService], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23726
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23718
23727
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
23719
23728
  type: NgModule,
23720
23729
  args: [{
23721
23730
  imports: [CommonModule, CdkTrapFocusModule, ClrIconModule],
23722
23731
  declarations: [CLR_MODAL_DIRECTIVES],
23723
23732
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule],
23724
- providers: [ClrModalConfigurationService],
23725
23733
  }]
23726
23734
  }], ctorParameters: function () { return []; } });
23727
23735
 
@@ -23879,7 +23887,6 @@ class ClrSignpostContent extends AbstractPopover {
23879
23887
  constructor(injector, parentHost, commonStrings, signpostIdService, signpostFocusManager, platformId, document) {
23880
23888
  super(injector, parentHost);
23881
23889
  this.commonStrings = commonStrings;
23882
- this.signpostIdService = signpostIdService;
23883
23890
  this.signpostFocusManager = signpostFocusManager;
23884
23891
  this.platformId = platformId;
23885
23892
  this.signpostContentId = uniqueIdFactory();
@@ -23889,7 +23896,7 @@ class ClrSignpostContent extends AbstractPopover {
23889
23896
  // Defaults
23890
23897
  this.position = 'right-middle';
23891
23898
  this.closeOnOutsideClick = true;
23892
- this.signpostIdService.setId(this.signpostContentId);
23899
+ signpostIdService.setId(this.signpostContentId);
23893
23900
  this.document = document;
23894
23901
  }
23895
23902
  /*********
@@ -24274,11 +24281,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
24274
24281
  class ClrTooltipTrigger {
24275
24282
  constructor(toggleService, tooltipIdService, tooltipMouseService) {
24276
24283
  this.toggleService = toggleService;
24277
- this.tooltipIdService = tooltipIdService;
24278
24284
  this.tooltipMouseService = tooltipMouseService;
24279
24285
  this.subs = [];
24280
24286
  // The aria-described by comes from the id of content. It
24281
- this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24287
+ this.subs.push(tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24282
24288
  }
24283
24289
  ngOnDestroy() {
24284
24290
  this.subs.forEach(sub => sub.unsubscribe());
@@ -25390,7 +25396,7 @@ class WizardNavigationService {
25390
25396
  * @memberof WizardNavigationService
25391
25397
  */
25392
25398
  this._cancelWizard = new Subject();
25393
- this.previousButtonSubscription = this.buttonService.previousBtnClicked.subscribe(() => {
25399
+ this.previousButtonSubscription = buttonService.previousBtnClicked.subscribe(() => {
25394
25400
  const currentPage = this.currentPage;
25395
25401
  if (this.currentPageIsFirst || currentPage.previousStepDisabled) {
25396
25402
  return;
@@ -25400,21 +25406,21 @@ class WizardNavigationService {
25400
25406
  this.previous();
25401
25407
  }
25402
25408
  });
25403
- this.nextButtonSubscription = this.buttonService.nextBtnClicked.subscribe(() => {
25409
+ this.nextButtonSubscription = buttonService.nextBtnClicked.subscribe(() => {
25404
25410
  this.checkAndCommitCurrentPage('next');
25405
25411
  });
25406
- this.dangerButtonSubscription = this.buttonService.dangerBtnClicked.subscribe(() => {
25412
+ this.dangerButtonSubscription = buttonService.dangerBtnClicked.subscribe(() => {
25407
25413
  this.checkAndCommitCurrentPage('danger');
25408
25414
  });
25409
- this.finishButtonSubscription = this.buttonService.finishBtnClicked.subscribe(() => {
25415
+ this.finishButtonSubscription = buttonService.finishBtnClicked.subscribe(() => {
25410
25416
  this.checkAndCommitCurrentPage('finish');
25411
25417
  });
25412
- this.customButtonSubscription = this.buttonService.customBtnClicked.subscribe((type) => {
25418
+ this.customButtonSubscription = buttonService.customBtnClicked.subscribe((type) => {
25413
25419
  if (!this.wizardStopNavigation) {
25414
25420
  this.currentPage.customButtonClicked.emit(type);
25415
25421
  }
25416
25422
  });
25417
- this.cancelButtonSubscription = this.buttonService.cancelBtnClicked.subscribe(() => {
25423
+ this.cancelButtonSubscription = buttonService.cancelBtnClicked.subscribe(() => {
25418
25424
  if (this.wizardStopNavigation) {
25419
25425
  return;
25420
25426
  }
@@ -25425,7 +25431,7 @@ class WizardNavigationService {
25425
25431
  this.cancel();
25426
25432
  }
25427
25433
  });
25428
- this.pagesResetSubscription = this.pageCollection.pagesReset.subscribe(() => {
25434
+ this.pagesResetSubscription = pageCollection.pagesReset.subscribe(() => {
25429
25435
  this.setFirstPageCurrent();
25430
25436
  });
25431
25437
  }
@@ -27976,5 +27982,5 @@ const CLR_MENU_POSITIONS = [
27976
27982
  * Generated bundle index. Do not edit.
27977
27983
  */
27978
27984
 
27979
- 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_SIDEPANEL_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, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, 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, ClrSidePanel, ClrSidePanelModule, 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, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27985
+ 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_SIDEPANEL_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, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, 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, ClrModalConfigurationService, 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, ClrSidePanel, ClrSidePanelModule, 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, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27980
27986
  //# sourceMappingURL=clr-angular.mjs.map