@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
@@ -396,6 +396,9 @@ const commonStringsDefault = {
396
396
  fileCount: '{COUNT} files',
397
397
  clearFile: 'Clear {FILE}',
398
398
  clearFiles: 'Clear {COUNT} files',
399
+ // Tree
400
+ selectedTreeNode: 'selected',
401
+ unselectedTreeNode: 'unselected',
399
402
  };
400
403
 
401
404
  /*
@@ -1182,9 +1185,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1182
1185
  this.subscriptions.push(this.stepperService.activeStep
1183
1186
  .pipe(filter(panelId => isPlatformBrowser(this.platformId) && panelId === this.id))
1184
1187
  .subscribe(() => {
1185
- //Adding timeout so that the status of the previous step is read by Voice Over on Safari,
1186
- //before focusing on the next stepper panel header
1187
- setTimeout(() => this.headerButton.nativeElement.focus(), 1500);
1188
+ this.headerButton.nativeElement.focus();
1188
1189
  }));
1189
1190
  }
1190
1191
  triggerAllFormControlValidationIfError(panel) {
@@ -2234,6 +2235,7 @@ class ClrPopoverContent {
2234
2235
  this.subscriptions = [];
2235
2236
  this.removeClickListenerFn = null;
2236
2237
  this.shouldRealign = false;
2238
+ this.previousContentHeight = null;
2237
2239
  // Check-collector pattern:
2238
2240
  // In order to get accurate content height/width values, we cannot calculate alignment offsets until
2239
2241
  // after the projected content has stabilized.
@@ -2255,9 +2257,14 @@ class ClrPopoverContent {
2255
2257
  this.smartEventsService.scrollToClose = !!scrollToClose;
2256
2258
  }
2257
2259
  ngAfterContentChecked() {
2258
- if (this.smartOpenService.open && this.view && this.shouldRealign) {
2259
- // Channel content-check event through the check-collector
2260
- this.checkCollector.emit();
2260
+ if (this.smartOpenService.open && this.view) {
2261
+ const rootNodeOffsetHeight = this.view.rootNodes[0].offsetHeight;
2262
+ if (this.shouldRealign ||
2263
+ (this.previousContentHeight !== null && this.previousContentHeight !== rootNodeOffsetHeight)) {
2264
+ // Channel content-check event through the check-collector
2265
+ this.previousContentHeight = rootNodeOffsetHeight;
2266
+ this.checkCollector.emit();
2267
+ }
2261
2268
  }
2262
2269
  }
2263
2270
  ngAfterViewInit() {
@@ -2375,7 +2382,7 @@ class ClrPopoverOpenCloseButton {
2375
2382
  this.smartOpenService = smartOpenService;
2376
2383
  this.openCloseChange = new EventEmitter();
2377
2384
  this.subscriptions = [];
2378
- this.subscriptions.push(this.smartOpenService.openChange.subscribe(change => {
2385
+ this.subscriptions.push(smartOpenService.openChange.subscribe(change => {
2379
2386
  this.openCloseChange.next(change);
2380
2387
  }));
2381
2388
  }
@@ -3331,7 +3338,7 @@ class ClrIfActive {
3331
3338
  this.activeChange = new EventEmitter(false);
3332
3339
  this.wasActive = false;
3333
3340
  this.checkAndUpdateView(ifActiveService.current);
3334
- this.subscription = this.ifActiveService.currentChange.subscribe(newCurrentId => {
3341
+ this.subscription = ifActiveService.currentChange.subscribe(newCurrentId => {
3335
3342
  this.checkAndUpdateView(newCurrentId);
3336
3343
  });
3337
3344
  }
@@ -3423,7 +3430,7 @@ class ClrIfOpen {
3423
3430
  * used with de-structured / de-sugared syntax.
3424
3431
  */
3425
3432
  this.openChange = new EventEmitter(false);
3426
- this.subscription = this.toggleService.openChange.subscribe(change => {
3433
+ this.subscription = toggleService.openChange.subscribe(change => {
3427
3434
  this.updateView(change);
3428
3435
  this.openChange.emit(change);
3429
3436
  });
@@ -3493,7 +3500,7 @@ class ClrIfExpanded {
3493
3500
  this._subscriptions = [];
3494
3501
  this._subscriptions.push(expand.expandChange.subscribe(() => {
3495
3502
  this.updateView();
3496
- this.expandedChange.emit(this.expand.expanded);
3503
+ this.expandedChange.emit(expand.expanded);
3497
3504
  }));
3498
3505
  }
3499
3506
  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
  }
@@ -4510,12 +4517,11 @@ var CONTROL_STATE;
4510
4517
  })(CONTROL_STATE || (CONTROL_STATE = {}));
4511
4518
  class IfControlStateService {
4512
4519
  constructor(ngControlService) {
4513
- this.ngControlService = ngControlService;
4514
4520
  this.subscriptions = [];
4515
4521
  // Implement our own status changes observable, since Angular controls don't
4516
4522
  this._statusChanges = new BehaviorSubject(CONTROL_STATE.NONE);
4517
4523
  // Wait for the control to be available
4518
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4524
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4519
4525
  if (control) {
4520
4526
  this.control = control;
4521
4527
  // Subscribe to the status change events, only after touched
@@ -4771,14 +4777,14 @@ class ClrAbstractContainer {
4771
4777
  this.ngControlService = ngControlService;
4772
4778
  this._dynamic = false;
4773
4779
  this.subscriptions = [];
4774
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
4780
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
4775
4781
  this.state = state;
4776
4782
  // Make sure everything is updated before dispatching the values for helpers
4777
4783
  setTimeout(() => {
4778
4784
  this.updateHelpers();
4779
4785
  });
4780
4786
  }));
4781
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4787
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4782
4788
  this.control = control;
4783
4789
  }));
4784
4790
  }
@@ -5034,10 +5040,10 @@ class WrappedFormControl {
5034
5040
  this.vcr = vcr;
5035
5041
  this.wrapperType = wrapperType;
5036
5042
  this.ngControl = ngControl;
5037
- this.index = 0;
5038
- this.subscriptions = [];
5039
5043
  this.renderer = renderer;
5040
5044
  this.el = el;
5045
+ this.index = 0;
5046
+ this.subscriptions = [];
5041
5047
  if (injector) {
5042
5048
  this.ngControlService = injector.get(NgControlService, null);
5043
5049
  this.ifControlStateService = injector.get(IfControlStateService, null);
@@ -5261,12 +5267,12 @@ class AbstractIfState {
5261
5267
  this.subscriptions = [];
5262
5268
  this.displayedContent = false;
5263
5269
  if (ngControlService) {
5264
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
5270
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
5265
5271
  this.control = control;
5266
5272
  }));
5267
5273
  }
5268
5274
  if (ifControlStateService) {
5269
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
5275
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
5270
5276
  this.handleState(state);
5271
5277
  }));
5272
5278
  }
@@ -6841,7 +6847,7 @@ class ClrOption {
6841
6847
  this.optionSelectionService = optionSelectionService;
6842
6848
  // A proxy with only the necessary data to be used for a11y and the focus handler service.
6843
6849
  this.optionProxy = new OptionData(null, null);
6844
- this.optionProxy.el = this.elRef.nativeElement;
6850
+ this.optionProxy.el = elRef.nativeElement;
6845
6851
  }
6846
6852
  get optionId() {
6847
6853
  return this._id;
@@ -7107,7 +7113,7 @@ class ClrCombobox extends WrappedFormControl {
7107
7113
  control.valueAccessor = this;
7108
7114
  }
7109
7115
  // default to SingleSelectComboboxModel, in case the optional input [ClrMulti] isn't used
7110
- this.optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7116
+ optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7111
7117
  this.updateControlValue();
7112
7118
  }
7113
7119
  get multiSelect() {
@@ -7409,11 +7415,10 @@ class ClrOptionItems {
7409
7415
  this.differs = differs;
7410
7416
  this.optionService = optionService;
7411
7417
  this.positionService = positionService;
7412
- this.vcr = vcr;
7413
7418
  this.subscriptions = [];
7414
7419
  this.filter = '';
7415
7420
  this.differ = null;
7416
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
7421
+ this.iterableProxy = new NgForOf(vcr, template, differs);
7417
7422
  this.subscriptions.push(optionService.inputChanged.subscribe(filter => {
7418
7423
  this.filter = filter;
7419
7424
  this.updateItems();
@@ -7797,10 +7802,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7797
7802
  class ClrDatalistContainer extends ClrAbstractContainer {
7798
7803
  constructor(controlClassService, layoutService, ngControlService, focusService, ifControlStateService) {
7799
7804
  super(ifControlStateService, layoutService, controlClassService, ngControlService);
7800
- this.focusService = focusService;
7801
7805
  this.ifControlStateService = ifControlStateService;
7802
7806
  this.focus = false;
7803
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => (this.focus = state)));
7807
+ this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
7804
7808
  }
7805
7809
  }
7806
7810
  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 });
@@ -7906,7 +7910,7 @@ class ClrDatalistInput extends WrappedFormControl {
7906
7910
  super(vcr, ClrDatalistContainer, injector, control, renderer, el);
7907
7911
  this.focusService = focusService;
7908
7912
  this.datalistIdService = datalistIdService;
7909
- if (!this.focusService) {
7913
+ if (!focusService) {
7910
7914
  throw new Error('clrDatalist requires being wrapped in <clr-datalist-container>');
7911
7915
  }
7912
7916
  }
@@ -8688,8 +8692,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
8688
8692
  * The full license information can be found in LICENSE in the root directory of this project.
8689
8693
  */
8690
8694
  class DateIOService {
8691
- constructor(_localeHelperService) {
8692
- this._localeHelperService = _localeHelperService;
8695
+ constructor(localeHelperService) {
8693
8696
  this.disabledDates = {
8694
8697
  // This is the default range. It approximates the beginning of time to the end of time.
8695
8698
  // Unless a minDate or maxDate is set with the native HTML5 api the range is all dates
@@ -8700,7 +8703,7 @@ class DateIOService {
8700
8703
  this.cldrLocaleDateFormat = DEFAULT_LOCALE_FORMAT;
8701
8704
  this.localeDisplayFormat = LITTLE_ENDIAN;
8702
8705
  this.delimiters = ['/', '/'];
8703
- this.cldrLocaleDateFormat = this._localeHelperService.localeDateFormat;
8706
+ this.cldrLocaleDateFormat = localeHelperService.localeDateFormat;
8704
8707
  this.initializeLocaleDisplayFormat();
8705
8708
  }
8706
8709
  get placeholderText() {
@@ -9121,7 +9124,7 @@ class DatepickerEnabledService {
9121
9124
  constructor(_document) {
9122
9125
  this._document = _document;
9123
9126
  this._isUserAgentMobile = false;
9124
- if (this._document) {
9127
+ if (_document) {
9125
9128
  this._isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(_document.defaultView.navigator.userAgent);
9126
9129
  this._innerWidth = _document.defaultView.innerWidth;
9127
9130
  }
@@ -9719,18 +9722,17 @@ class ClrDateContainer extends ClrAbstractContainer {
9719
9722
  this.dateFormControlService = dateFormControlService;
9720
9723
  this.dateIOService = dateIOService;
9721
9724
  this.commonStrings = commonStrings;
9722
- this.focusService = focusService;
9723
9725
  this.viewManagerService = viewManagerService;
9724
9726
  this.controlClassService = controlClassService;
9725
9727
  this.layoutService = layoutService;
9726
9728
  this.ngControlService = ngControlService;
9727
9729
  this.ifControlStateService = ifControlStateService;
9728
9730
  this.focus = false;
9729
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
9731
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
9730
9732
  this.focus = state;
9731
9733
  }));
9732
- this.subscriptions.push(this.toggleService.openChange.subscribe(() => {
9733
- this.dateFormControlService.markAsTouched();
9734
+ this.subscriptions.push(toggleService.openChange.subscribe(() => {
9735
+ dateFormControlService.markAsTouched();
9734
9736
  }));
9735
9737
  }
9736
9738
  set clrPosition(position) {
@@ -10739,7 +10741,7 @@ class ClrPasswordContainer extends ClrAbstractContainer {
10739
10741
  this.focus = false;
10740
10742
  this._toggle = true;
10741
10743
  /* The unsubscribe is handle inside the ClrAbstractContainer */
10742
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
10744
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
10743
10745
  this.focus = state;
10744
10746
  }));
10745
10747
  }
@@ -10891,12 +10893,11 @@ class ClrPassword extends WrappedFormControl {
10891
10893
  constructor(vcr, injector, control, renderer, el, focusService, toggleService) {
10892
10894
  super(vcr, ClrPasswordContainer, injector, control, renderer, el);
10893
10895
  this.focusService = focusService;
10894
- this.toggleService = toggleService;
10895
10896
  this.index = 1;
10896
- if (!this.focusService) {
10897
+ if (!focusService) {
10897
10898
  throw new Error('clrPassword requires being wrapped in <clr-password-container>');
10898
10899
  }
10899
- this.subscriptions.push(this.toggleService.subscribe(toggle => {
10900
+ this.subscriptions.push(toggleService.subscribe(toggle => {
10900
10901
  renderer.setProperty(el.nativeElement, 'type', toggle ? 'text' : 'password');
10901
10902
  }));
10902
10903
  }
@@ -14503,11 +14504,10 @@ class ClrDatagridItems {
14503
14504
  this.template = template;
14504
14505
  this.differs = differs;
14505
14506
  this.items = items;
14506
- this.vcr = vcr;
14507
14507
  this.differ = null;
14508
14508
  this.subscriptions = [];
14509
14509
  items.smartenUp();
14510
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
14510
+ this.iterableProxy = new NgForOf(vcr, template, differs);
14511
14511
  this.subscriptions.push(items.change.subscribe(newItems => {
14512
14512
  this.iterableProxy.ngForOf = newItems;
14513
14513
  this.iterableProxy.ngDoCheck();
@@ -15005,9 +15005,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15005
15005
  */
15006
15006
  let nbSelection = 0;
15007
15007
  class Selection {
15008
- constructor(_items, _filters) {
15008
+ constructor(_items, filters) {
15009
15009
  this._items = _items;
15010
- this._filters = _filters;
15011
15010
  this.preserveSelection = false;
15012
15011
  /**
15013
15012
  * Shift key state, for use in range selection.
@@ -15028,13 +15027,13 @@ class Selection {
15028
15027
  */
15029
15028
  this.subscriptions = [];
15030
15029
  this.id = 'clr-dg-selection' + nbSelection++;
15031
- this.subscriptions.push(this._filters.change.subscribe(() => {
15030
+ this.subscriptions.push(filters.change.subscribe(() => {
15032
15031
  if (!this._selectable || this.preserveSelection) {
15033
15032
  return;
15034
15033
  }
15035
15034
  this.clearSelection();
15036
15035
  }));
15037
- this.subscriptions.push(this._items.allChanges.subscribe(updatedItems => {
15036
+ this.subscriptions.push(_items.allChanges.subscribe(updatedItems => {
15038
15037
  // Reset the lockedRefs;
15039
15038
  const updateLockedRef = [];
15040
15039
  switch (this.selectionType) {
@@ -15046,10 +15045,10 @@ class Selection {
15046
15045
  let selectionUpdated = false;
15047
15046
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
15048
15047
  if (this.currentSingle && !this.prevSingleSelectionRef) {
15049
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
15048
+ this.prevSingleSelectionRef = _items.trackBy(this.currentSingle);
15050
15049
  }
15051
15050
  updatedItems.forEach(item => {
15052
- const ref = this._items.trackBy(item);
15051
+ const ref = _items.trackBy(item);
15053
15052
  // If one of the updated items is the previously selectedSingle, set it as the new one
15054
15053
  if (this.prevSingleSelectionRef === ref) {
15055
15054
  newSingle = item;
@@ -15063,7 +15062,7 @@ class Selection {
15063
15062
  // Therefore, we should delete the currentSingle if it used to be defined but doesn't exist anymore.
15064
15063
  // No explicit "delete" is required, since newSingle would be undefined at this point.
15065
15064
  // Marking it as selectionUpdated here will set currentSingle to undefined below in the setTimeout.
15066
- if (this._items.smart && !newSingle) {
15065
+ if (_items.smart && !newSingle) {
15067
15066
  selectionUpdated = true;
15068
15067
  }
15069
15068
  // TODO: Discussed this with Eudes and this is fine for now.
@@ -15084,7 +15083,7 @@ class Selection {
15084
15083
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
15085
15084
  this.prevSelectionRefs = [];
15086
15085
  this.current.forEach(item => {
15087
- this.prevSelectionRefs.push(this._items.trackBy(item));
15086
+ this.prevSelectionRefs.push(_items.trackBy(item));
15088
15087
  });
15089
15088
  }
15090
15089
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
@@ -15093,7 +15092,7 @@ class Selection {
15093
15092
  //
15094
15093
  // The both loops below that goes over updatedItems could be combined into one.
15095
15094
  updatedItems.forEach(item => {
15096
- const ref = this._items.trackBy(item);
15095
+ const ref = _items.trackBy(item);
15097
15096
  if (this.lockedRefs.indexOf(ref) > -1) {
15098
15097
  updateLockedRef.push(ref);
15099
15098
  }
@@ -15103,7 +15102,7 @@ class Selection {
15103
15102
  // the if statement below results in broken behavior.
15104
15103
  if (leftOver.length > 0) {
15105
15104
  updatedItems.forEach(item => {
15106
- const ref = this._items.trackBy(item);
15105
+ const ref = _items.trackBy(item);
15107
15106
  // Look in current selected refs array if item is selected, and update actual value
15108
15107
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
15109
15108
  if (selectedIndex > -1) {
@@ -15113,7 +15112,7 @@ class Selection {
15113
15112
  });
15114
15113
  // Filter out any unmatched items if we're using smart datagrids where we expect all items to be
15115
15114
  // present
15116
- if (this._items.smart) {
15115
+ if (_items.smart) {
15117
15116
  leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);
15118
15117
  if (this.current.length !== leftOver.length) {
15119
15118
  selectionUpdated = true;
@@ -15432,8 +15431,6 @@ class ClrDatagridRow {
15432
15431
  this.detailService = detailService;
15433
15432
  this.displayMode = displayMode;
15434
15433
  this.vcr = vcr;
15435
- this.renderer = renderer;
15436
- this.el = el;
15437
15434
  this.commonStrings = commonStrings;
15438
15435
  this.items = items;
15439
15436
  this.document = document;
@@ -15461,17 +15458,17 @@ class ClrDatagridRow {
15461
15458
  this.radioId = 'clr-dg-row-rd' + nbRow;
15462
15459
  this.checkboxId = 'clr-dg-row-cb' + nbRow;
15463
15460
  this.expandableId = expand.expandableId;
15464
- this.subscriptions.push(combineLatest(this.expand.replace, this.expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15461
+ this.subscriptions.push(combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15465
15462
  if (expandReplaceValue && expandChangeValue) {
15466
15463
  // replaced and expanding
15467
15464
  this.replaced = true;
15468
- this.renderer.addClass(this.el.nativeElement, 'datagrid-row-replaced');
15465
+ renderer.addClass(el.nativeElement, 'datagrid-row-replaced');
15469
15466
  }
15470
15467
  else {
15471
15468
  this.replaced = false;
15472
15469
  // Handles these cases: not replaced and collapsing & replaced and
15473
15470
  // collapsing and not replaced and expanding.
15474
- this.renderer.removeClass(this.el.nativeElement, 'datagrid-row-replaced');
15471
+ renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');
15475
15472
  }
15476
15473
  }));
15477
15474
  }
@@ -16013,7 +16010,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16013
16010
  * The full license information can be found in LICENSE in the root directory of this project.
16014
16011
  */
16015
16012
  class ClrDatagrid {
16016
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
16013
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, keyNavigation, zone) {
16017
16014
  this.organizer = organizer;
16018
16015
  this.items = items;
16019
16016
  this.expandableRows = expandableRows;
@@ -16027,7 +16024,6 @@ class ClrDatagrid {
16027
16024
  this.el = el;
16028
16025
  this.page = page;
16029
16026
  this.commonStrings = commonStrings;
16030
- this.columnsService = columnsService;
16031
16027
  this.keyNavigation = keyNavigation;
16032
16028
  this.zone = zone;
16033
16029
  this.clrDgSingleSelectionAriaLabel = this.commonStrings.keys.singleSelectionAriaLabel;
@@ -16049,7 +16045,7 @@ class ClrDatagrid {
16049
16045
  this._subscriptions = [];
16050
16046
  const datagridId = uniqueIdFactory();
16051
16047
  this.selectAllId = 'clr-dg-select-all-' + datagridId;
16052
- this.detailService.id = datagridId;
16048
+ detailService.id = datagridId;
16053
16049
  }
16054
16050
  /**
16055
16051
  * Freezes the datagrid while data is loading
@@ -16271,7 +16267,7 @@ class ClrDatagrid {
16271
16267
  this.items.refresh();
16272
16268
  }
16273
16269
  }
16274
- 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 });
16270
+ 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 });
16275
16271
  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: [
16276
16272
  Selection,
16277
16273
  Sort,
@@ -16315,7 +16311,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16315
16311
  return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
16316
16312
  type: Inject,
16317
16313
  args: [DOCUMENT]
16318
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }];
16314
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }];
16319
16315
  }, propDecorators: { loadingMoreItems: [{
16320
16316
  type: Input,
16321
16317
  args: ['clrLoadingMoreItems']
@@ -16422,11 +16418,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16422
16418
  */
16423
16419
  let clrDgActionId = 0;
16424
16420
  class ClrDatagridActionOverflow {
16425
- constructor(rowActionService, commonStrings, platformId, zone, smartToggleService) {
16421
+ constructor(rowActionService, commonStrings, platformId, smartToggleService) {
16426
16422
  this.rowActionService = rowActionService;
16427
16423
  this.commonStrings = commonStrings;
16428
16424
  this.platformId = platformId;
16429
- this.zone = zone;
16430
16425
  this.smartToggleService = smartToggleService;
16431
16426
  this.openChange = new EventEmitter(false);
16432
16427
  this.popoverId = uniqueIdFactory();
@@ -16438,10 +16433,10 @@ class ClrDatagridActionOverflow {
16438
16433
  };
16439
16434
  this._open = false;
16440
16435
  this.subscriptions = [];
16441
- this.rowActionService.register();
16442
- this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
16436
+ rowActionService.register();
16437
+ this.subscriptions.push(smartToggleService.openChange.subscribe(openState => {
16443
16438
  this.open = openState;
16444
- }), this.smartToggleService.popoverVisible.subscribe(visible => {
16439
+ }), smartToggleService.popoverVisible.subscribe(visible => {
16445
16440
  if (visible) {
16446
16441
  this.initializeFocus();
16447
16442
  }
@@ -16478,7 +16473,7 @@ class ClrDatagridActionOverflow {
16478
16473
  }
16479
16474
  }
16480
16475
  }
16481
- 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 });
16476
+ 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 });
16482
16477
  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: `
16483
16478
  <button
16484
16479
  tabindex="-1"
@@ -16549,7 +16544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16549
16544
  return [{ type: RowActionService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
16550
16545
  type: Inject,
16551
16546
  args: [PLATFORM_ID]
16552
- }] }, { type: i0.NgZone }, { type: ClrPopoverToggleService }];
16547
+ }] }, { type: ClrPopoverToggleService }];
16553
16548
  }, propDecorators: { buttonLabel: [{
16554
16549
  type: Input,
16555
16550
  args: ['clrDgActionOverflowButtonLabel']
@@ -17006,8 +17001,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
17006
17001
  class DatagridDetailRegisterer {
17007
17002
  constructor(expandableRowsCount) {
17008
17003
  this.expandableRowsCount = expandableRowsCount;
17009
- if (this.expandableRowsCount) {
17010
- this.expandableRowsCount.register();
17004
+ if (expandableRowsCount) {
17005
+ expandableRowsCount.register();
17011
17006
  }
17012
17007
  }
17013
17008
  ngOnDestroy() {
@@ -17136,13 +17131,12 @@ const COLUMN_STATE_PROVIDER = {
17136
17131
  class ClrDatagridHideableColumn {
17137
17132
  constructor(titleTemplateRef, viewContainerRef, columnsService, columnState) {
17138
17133
  this.titleTemplateRef = titleTemplateRef;
17139
- this.viewContainerRef = viewContainerRef;
17140
17134
  this.columnsService = columnsService;
17141
17135
  this.columnState = columnState;
17142
17136
  this.hiddenChange = new EventEmitter();
17143
17137
  this.subscriptions = [];
17144
- this.viewContainerRef.createEmbeddedView(this.titleTemplateRef);
17145
- if (!this.columnState) {
17138
+ viewContainerRef.createEmbeddedView(titleTemplateRef);
17139
+ if (!columnState) {
17146
17140
  throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');
17147
17141
  }
17148
17142
  }
@@ -17229,7 +17223,7 @@ class ClrIfDetail {
17229
17223
  this.stateChange = new EventEmitter(null);
17230
17224
  this.subscriptions = [];
17231
17225
  this.skip = false; // This keeps us from resetting the input and calling the toggle twice
17232
- this.detailService.enabled = true;
17226
+ detailService.enabled = true;
17233
17227
  }
17234
17228
  set state(model) {
17235
17229
  if (!this.skip) {
@@ -17367,7 +17361,7 @@ class ClrDatagridPagination {
17367
17361
  this.commonStrings = commonStrings;
17368
17362
  this.detailService = detailService;
17369
17363
  this.currentChanged = new EventEmitter(false);
17370
- this.page.activated = true;
17364
+ page.activated = true;
17371
17365
  }
17372
17366
  /**
17373
17367
  * Page size
@@ -17852,10 +17846,10 @@ class ClrDatagridVirtualScrollDirective {
17852
17846
  this.cdkVirtualForInputs = {
17853
17847
  cdkVirtualForTrackBy: index => index,
17854
17848
  };
17855
- this.items.smartenUp();
17856
- this.datagrid.hasVirtualScroller = true;
17857
- this.datagrid.detailService.preventFocusScroll = true;
17858
- this.datagridElementRef = this.datagrid.el;
17849
+ items.smartenUp();
17850
+ datagrid.hasVirtualScroller = true;
17851
+ datagrid.detailService.preventFocusScroll = true;
17852
+ this.datagridElementRef = datagrid.el;
17859
17853
  // default
17860
17854
  this.cdkVirtualForTemplateCacheSize = 20;
17861
17855
  this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
@@ -18057,7 +18051,6 @@ class DatagridHeaderRenderer {
18057
18051
  constructor(el, renderer, organizer, domAdapter, columnResizerService, columnsService, columnState) {
18058
18052
  this.el = el;
18059
18053
  this.renderer = renderer;
18060
- this.organizer = organizer;
18061
18054
  this.domAdapter = domAdapter;
18062
18055
  this.columnResizerService = columnResizerService;
18063
18056
  this.columnsService = columnsService;
@@ -18069,7 +18062,7 @@ class DatagridHeaderRenderer {
18069
18062
  this.widthSet = false;
18070
18063
  this.autoSet = false;
18071
18064
  this.subscriptions = [];
18072
- this.subscriptions.push(this.organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
18065
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
18073
18066
  }
18074
18067
  ngOnDestroy() {
18075
18068
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -18217,14 +18210,13 @@ const domAdapterFactory = (platformId) => {
18217
18210
  // Fixes build error
18218
18211
  // @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)
18219
18212
  class DatagridMainRenderer {
18220
- constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18213
+ constructor(datagrid, organizer, items, page, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18214
+ this.datagrid = datagrid;
18221
18215
  this.organizer = organizer;
18222
18216
  this.items = items;
18223
18217
  this.page = page;
18224
- this.domAdapter = domAdapter;
18225
18218
  this.el = el;
18226
18219
  this.renderer = renderer;
18227
- this.detailService = detailService;
18228
18220
  this.tableSizeService = tableSizeService;
18229
18221
  this.columnsService = columnsService;
18230
18222
  this.ngZone = ngZone;
@@ -18238,16 +18230,14 @@ class DatagridMainRenderer {
18238
18230
  * 2) When rows are lazily loaded for the first time
18239
18231
  */
18240
18232
  this.columnsSizesStable = false;
18241
- this.subscriptions.push(this.organizer
18242
- .filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS)
18243
- .subscribe(() => this.computeHeadersWidth()));
18244
- this.subscriptions.push(this.page.sizeChange.subscribe(() => {
18233
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth()));
18234
+ this.subscriptions.push(page.sizeChange.subscribe(() => {
18245
18235
  if (this._heightSet) {
18246
18236
  this.resetDatagridHeight();
18247
18237
  }
18248
18238
  }));
18249
- this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18250
- this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18239
+ this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18240
+ this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18251
18241
  }
18252
18242
  ngOnInit() {
18253
18243
  this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
@@ -18267,10 +18257,9 @@ class DatagridMainRenderer {
18267
18257
  this.tableSizeService.table = this.el;
18268
18258
  }
18269
18259
  ngAfterViewChecked() {
18270
- if (this.shouldStabilizeColumns) {
18271
- setTimeout(() => {
18272
- this.stabilizeColumns();
18273
- }, 0);
18260
+ const datagridIsVisible = this.checkAndUpdateVisibility();
18261
+ if (this.shouldStabilizeColumns && datagridIsVisible) {
18262
+ this.stabilizeColumns();
18274
18263
  }
18275
18264
  if (this.shouldComputeHeight()) {
18276
18265
  this.ngZone.runOutsideAngular(() => {
@@ -18421,8 +18410,18 @@ class DatagridMainRenderer {
18421
18410
  this.columnsSizesStable = true;
18422
18411
  }
18423
18412
  }
18413
+ checkAndUpdateVisibility() {
18414
+ if (this.el.nativeElement.offsetParent) {
18415
+ this.datagrid.datagrid.nativeElement.style.visibility = 'visible';
18416
+ return true;
18417
+ }
18418
+ else {
18419
+ this.datagrid.datagrid.nativeElement.style.visibility = 'hidden';
18420
+ return false;
18421
+ }
18422
+ }
18424
18423
  }
18425
- 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 });
18424
+ 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 });
18426
18425
  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 });
18427
18426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
18428
18427
  type: Directive,
@@ -18430,7 +18429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
18430
18429
  selector: 'clr-datagrid',
18431
18430
  providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],
18432
18431
  }]
18433
- }], 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: [{
18432
+ }], 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: [{
18434
18433
  type: ContentChildren,
18435
18434
  args: [DatagridHeaderRenderer]
18436
18435
  }], rows: [{
@@ -19072,8 +19071,8 @@ class RecursiveChildren {
19072
19071
  this.featuresService = featuresService;
19073
19072
  this.expandService = expandService;
19074
19073
  if (expandService) {
19075
- this.subscription = this.expandService.expandChange.subscribe(value => {
19076
- if (!value && this.parent && !this.featuresService.eager && this.featuresService.recursion) {
19074
+ this.subscription = expandService.expandChange.subscribe(value => {
19075
+ if (!value && this.parent && !featuresService.eager && featuresService.recursion) {
19077
19076
  // In the case of lazy-loading recursive trees, we clear the children on collapse.
19078
19077
  // This is better in case they change between two user interaction, and that way
19079
19078
  // the app itself can decide whether to cache them or not.
@@ -19690,7 +19689,7 @@ class ClrTreeNode {
19690
19689
  this.typeAheadKeyBuffer = '';
19691
19690
  this.typeAheadKeyEvent = new Subject();
19692
19691
  this.subscriptions = [];
19693
- if (this.featuresService.recursion) {
19692
+ if (featuresService.recursion) {
19694
19693
  // I'm completely stuck, we have to hack into private properties until either
19695
19694
  // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998
19696
19695
  // are fixed
@@ -19932,7 +19931,7 @@ class ClrTreeNode {
19932
19931
  }
19933
19932
  }
19934
19933
  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 });
19935
- 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: [
19934
+ 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: [
19936
19935
  trigger('toggleChildrenAnim', [
19937
19936
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19938
19937
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19952,7 +19951,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19952
19951
  ], host: {
19953
19952
  '[class.clr-tree-node]': 'true',
19954
19953
  '[class.disabled]': 'this._model.disabled',
19955
- }, 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" }]
19954
+ }, 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" }]
19956
19955
  }], ctorParameters: function () {
19957
19956
  return [{ type: undefined, decorators: [{
19958
19957
  type: Inject,
@@ -20001,18 +20000,21 @@ function trimAndLowerCase(value) {
20001
20000
  * The full license information can be found in LICENSE in the root directory of this project.
20002
20001
  */
20003
20002
  class ClrTree {
20004
- constructor(featuresService, focusManagerService, { nativeElement }, renderer, ngZone) {
20003
+ constructor(featuresService, focusManagerService, renderer, el, ngZone) {
20005
20004
  this.featuresService = featuresService;
20006
20005
  this.focusManagerService = focusManagerService;
20006
+ this.renderer = renderer;
20007
+ this.el = el;
20007
20008
  this.subscriptions = [];
20008
- const subscription = ngZone.runOutsideAngular(() => fromEvent(nativeElement, 'focusin').subscribe((event) => {
20009
- if (event.target === nativeElement) {
20009
+ this._isMultiSelectable = false;
20010
+ const subscription = ngZone.runOutsideAngular(() => fromEvent(el.nativeElement, 'focusin').subscribe((event) => {
20011
+ if (event.target === el.nativeElement) {
20010
20012
  // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.
20011
20013
  // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.
20012
- this.focusManagerService.focusFirstVisibleNode();
20014
+ focusManagerService.focusFirstVisibleNode();
20013
20015
  // when the first child gets focus,
20014
20016
  // tree should no longer have tabindex of 0.
20015
- renderer.removeAttribute(nativeElement, 'tabindex');
20017
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
20016
20018
  }
20017
20019
  }));
20018
20020
  this.subscriptions.push(subscription);
@@ -20021,17 +20023,28 @@ class ClrTree {
20021
20023
  this.featuresService.eager = !value;
20022
20024
  }
20023
20025
  get isMultiSelectable() {
20024
- return this.featuresService.selectable && this.rootNodes.length > 0;
20026
+ return this._isMultiSelectable;
20025
20027
  }
20026
20028
  ngAfterContentInit() {
20027
20029
  this.setRootNodes();
20028
20030
  this.subscriptions.push(this.rootNodes.changes.subscribe(() => {
20031
+ this.setMultiSelectable();
20029
20032
  this.setRootNodes();
20030
20033
  }));
20031
20034
  }
20032
20035
  ngOnDestroy() {
20033
20036
  this.subscriptions.forEach(sub => sub.unsubscribe());
20034
20037
  }
20038
+ setMultiSelectable() {
20039
+ if (this.featuresService.selectable && this.rootNodes.length > 0) {
20040
+ this._isMultiSelectable = true;
20041
+ this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');
20042
+ }
20043
+ else {
20044
+ this._isMultiSelectable = false;
20045
+ this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');
20046
+ }
20047
+ }
20035
20048
  setRootNodes() {
20036
20049
  // if node has no parent, it's a root node
20037
20050
  // for recursive tree, this.rootNodes registers also nested children
@@ -20039,8 +20052,8 @@ class ClrTree {
20039
20052
  this.focusManagerService.rootNodeModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);
20040
20053
  }
20041
20054
  }
20042
- 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 });
20043
- 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: `
20055
+ 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 });
20056
+ 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: `
20044
20057
  <ng-content></ng-content>
20045
20058
  <clr-recursive-children
20046
20059
  *ngIf="featuresService.recursion"
@@ -20062,10 +20075,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20062
20075
  host: {
20063
20076
  tabindex: '0',
20064
20077
  '[attr.role]': '"tree"',
20065
- '[attr.aria-multiselectable]': 'isMultiSelectable',
20066
20078
  },
20067
20079
  }]
20068
- }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
20080
+ }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
20069
20081
  type: ContentChildren,
20070
20082
  args: [ClrTreeNode]
20071
20083
  }], lazy: [{
@@ -20152,7 +20164,7 @@ class DropdownFocusHandler {
20152
20164
  this._unlistenFuncs = [];
20153
20165
  this.resetChildren();
20154
20166
  this.moveToFirstItemWhenOpen();
20155
- if (!this.parent) {
20167
+ if (!parent) {
20156
20168
  this.handleRootFocus();
20157
20169
  }
20158
20170
  }
@@ -20352,11 +20364,10 @@ class ClrDropdown {
20352
20364
  this.parent = parent;
20353
20365
  this.toggleService = toggleService;
20354
20366
  this.focusHandler = focusHandler;
20355
- this.cdr = cdr;
20356
20367
  this.isMenuClosable = true;
20357
20368
  this.subscriptions = [];
20358
- this.subscriptions.push(dropdownService.changes.subscribe(value => (this.toggleService.open = value)));
20359
- this.subscriptions.push(toggleService.openChange.subscribe(() => this.cdr.markForCheck()));
20369
+ this.subscriptions.push(dropdownService.changes.subscribe(value => (toggleService.open = value)));
20370
+ this.subscriptions.push(toggleService.openChange.subscribe(() => cdr.markForCheck()));
20360
20371
  }
20361
20372
  ngOnDestroy() {
20362
20373
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -21995,12 +22006,12 @@ class ClrHeader {
21995
22006
  this.isNavLevel2OnPage = false;
21996
22007
  this.openNavLevel = null;
21997
22008
  this.responsiveNavCodes = ResponsiveNavCodes;
21998
- this._subscription = this.responsiveNavService.registeredNavs.subscribe({
22009
+ this._subscription = responsiveNavService.registeredNavs.subscribe({
21999
22010
  next: (navLevelList) => {
22000
22011
  this.initializeNavTriggers(navLevelList);
22001
22012
  },
22002
22013
  });
22003
- this._subscription.add(this.responsiveNavService.navControl
22014
+ this._subscription.add(responsiveNavService.navControl
22004
22015
  .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
22005
22016
  .subscribe(() => {
22006
22017
  this.openNavLevel = null;
@@ -22624,8 +22635,6 @@ class ClrTabLink {
22624
22635
  this.ifActiveService = ifActiveService;
22625
22636
  this.id = id;
22626
22637
  this.el = el;
22627
- this.cfr = cfr;
22628
- this.viewContainerRef = viewContainerRef;
22629
22638
  this.tabsService = tabsService;
22630
22639
  this.tabsId = tabsId;
22631
22640
  if (!this.tabLinkId) {
@@ -22634,9 +22643,9 @@ class ClrTabLink {
22634
22643
  // Tab links can be rendered in one of two places: in the main area or inside the overflow dropdown menu.
22635
22644
  // Here, we create a container so that its template can be used to create embeddedView on the fly.
22636
22645
  // See TabsService's renderView() method and how it's used in Tabs class for an example.
22637
- const factory = this.cfr.resolveComponentFactory(TemplateRefContainer);
22638
- this.templateRefContainer = this.viewContainerRef.createComponent(factory, undefined, undefined, [
22639
- [this.el.nativeElement],
22646
+ const factory = cfr.resolveComponentFactory(TemplateRefContainer);
22647
+ this.templateRefContainer = viewContainerRef.createComponent(factory, undefined, undefined, [
22648
+ [el.nativeElement],
22640
22649
  ]).instance;
22641
22650
  }
22642
22651
  get inOverflow() {
@@ -23225,7 +23234,7 @@ class ClrVerticalNav {
23225
23234
  this._navGroupRegistrationService = _navGroupRegistrationService;
23226
23235
  this.commonStrings = commonStrings;
23227
23236
  this._collapsedChanged = new EventEmitter(true);
23228
- this._sub = this._navService.collapsedChanged.subscribe(value => {
23237
+ this._sub = _navService.collapsedChanged.subscribe(value => {
23229
23238
  this._collapsedChanged.emit(value);
23230
23239
  });
23231
23240
  }
@@ -23313,27 +23322,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23313
23322
  const EXPANDED_STATE = 'expanded';
23314
23323
  const COLLAPSED_STATE = 'collapsed';
23315
23324
  class ClrVerticalNavGroup {
23316
- constructor(_itemExpand, _navGroupRegistrationService, _navGroupService, _navService, commonStrings) {
23325
+ constructor(_itemExpand, _navGroupRegistrationService, navGroupService, _navService, commonStrings) {
23317
23326
  this._itemExpand = _itemExpand;
23318
23327
  this._navGroupRegistrationService = _navGroupRegistrationService;
23319
- this._navGroupService = _navGroupService;
23320
23328
  this._navService = _navService;
23321
23329
  this.commonStrings = commonStrings;
23322
23330
  this.expandedChange = new EventEmitter(true);
23323
23331
  this.wasExpanded = false;
23324
23332
  this._subscriptions = [];
23325
23333
  this._expandAnimationState = COLLAPSED_STATE;
23326
- this._navGroupRegistrationService.registerNavGroup();
23334
+ _navGroupRegistrationService.registerNavGroup();
23327
23335
  // FIXME: This subscription handles a corner case
23328
23336
  // Vertical Nav collapse requires the animation to run first and then
23329
23337
  // remove the nodes from the DOM. If the user directly sets the input
23330
23338
  // on the clrIfExpanded directive, we have no chance to run the animation
23331
23339
  // and wait for it to complete. This subscription makes sure that the
23332
23340
  // animation states are correct for that edge case.
23333
- this._subscriptions.push(this._itemExpand.expandChange.subscribe(value => {
23341
+ this._subscriptions.push(_itemExpand.expandChange.subscribe(value => {
23334
23342
  if (value && this.expandAnimationState === COLLAPSED_STATE) {
23335
- if (this._navService.collapsed) {
23336
- this._navService.collapsed = false;
23343
+ if (_navService.collapsed) {
23344
+ _navService.collapsed = false;
23337
23345
  }
23338
23346
  this.expandAnimationState = EXPANDED_STATE;
23339
23347
  }
@@ -23343,7 +23351,7 @@ class ClrVerticalNavGroup {
23343
23351
  }));
23344
23352
  // 1. If the nav is collapsing, close the open nav group + save its state
23345
23353
  // 2. If the nav is expanding, expand the nav group if the previous state was expanded
23346
- this._subscriptions.push(this._navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23354
+ this._subscriptions.push(_navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23347
23355
  if (goingToCollapse && this.expanded) {
23348
23356
  this.wasExpanded = true;
23349
23357
  this.expandAnimationState = COLLAPSED_STATE;
@@ -23354,7 +23362,7 @@ class ClrVerticalNavGroup {
23354
23362
  }
23355
23363
  }));
23356
23364
  // If a link is clicked, expand the nav group
23357
- this._subscriptions.push(this._navGroupService.expandChange.subscribe((expand) => {
23365
+ this._subscriptions.push(navGroupService.expandChange.subscribe((expand) => {
23358
23366
  if (expand && !this.expanded) {
23359
23367
  this.expandGroup();
23360
23368
  }
@@ -23483,7 +23491,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23483
23491
  class ClrVerticalNavIcon {
23484
23492
  constructor(_verticalNavIconService) {
23485
23493
  this._verticalNavIconService = _verticalNavIconService;
23486
- this._verticalNavIconService.registerIcon();
23494
+ _verticalNavIconService.registerIcon();
23487
23495
  }
23488
23496
  ngOnDestroy() {
23489
23497
  this._verticalNavIconService.unregisterIcon();
@@ -23651,9 +23659,10 @@ class ClrModalConfigurationService {
23651
23659
  }
23652
23660
  }
23653
23661
  ClrModalConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23654
- ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService });
23662
+ ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, providedIn: 'root' });
23655
23663
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, decorators: [{
23656
- type: Injectable
23664
+ type: Injectable,
23665
+ args: [{ providedIn: 'root' }]
23657
23666
  }] });
23658
23667
 
23659
23668
  /*
@@ -23835,11 +23844,11 @@ class ClrModalBody {
23835
23844
  this.unlisteners = [];
23836
23845
  ngZone.runOutsideAngular(() => {
23837
23846
  this.observer = new ResizeObserver(() => this.addOrRemoveTabIndex());
23838
- this.observer.observe(this.host.nativeElement);
23839
- this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
23847
+ this.observer.observe(host.nativeElement);
23848
+ this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
23840
23849
  // set the tabindex binding back when click is completed with mouseup
23841
23850
  this.addOrRemoveTabIndex();
23842
- }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
23851
+ }), renderer.listen(host.nativeElement, 'mousedown', () => {
23843
23852
  // tabindex = 0 binding should be removed
23844
23853
  // so it won't be focused when click starts with mousedown
23845
23854
  this.removeTabIndex();
@@ -23892,14 +23901,13 @@ class ClrModalModule {
23892
23901
  }
23893
23902
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23894
23903
  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] });
23895
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, providers: [ClrModalConfigurationService], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23904
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23896
23905
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
23897
23906
  type: NgModule,
23898
23907
  args: [{
23899
23908
  imports: [CommonModule, CdkTrapFocusModule, ClrIconModule],
23900
23909
  declarations: [CLR_MODAL_DIRECTIVES],
23901
23910
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule],
23902
- providers: [ClrModalConfigurationService],
23903
23911
  }]
23904
23912
  }], ctorParameters: function () { return []; } });
23905
23913
 
@@ -24057,7 +24065,6 @@ class ClrSignpostContent extends AbstractPopover {
24057
24065
  constructor(injector, parentHost, commonStrings, signpostIdService, signpostFocusManager, platformId, document) {
24058
24066
  super(injector, parentHost);
24059
24067
  this.commonStrings = commonStrings;
24060
- this.signpostIdService = signpostIdService;
24061
24068
  this.signpostFocusManager = signpostFocusManager;
24062
24069
  this.platformId = platformId;
24063
24070
  this.signpostContentId = uniqueIdFactory();
@@ -24067,7 +24074,7 @@ class ClrSignpostContent extends AbstractPopover {
24067
24074
  // Defaults
24068
24075
  this.position = 'right-middle';
24069
24076
  this.closeOnOutsideClick = true;
24070
- this.signpostIdService.setId(this.signpostContentId);
24077
+ signpostIdService.setId(this.signpostContentId);
24071
24078
  this.document = document;
24072
24079
  }
24073
24080
  /*********
@@ -24456,11 +24463,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
24456
24463
  class ClrTooltipTrigger {
24457
24464
  constructor(toggleService, tooltipIdService, tooltipMouseService) {
24458
24465
  this.toggleService = toggleService;
24459
- this.tooltipIdService = tooltipIdService;
24460
24466
  this.tooltipMouseService = tooltipMouseService;
24461
24467
  this.subs = [];
24462
24468
  // The aria-described by comes from the id of content. It
24463
- this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24469
+ this.subs.push(tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24464
24470
  }
24465
24471
  ngOnDestroy() {
24466
24472
  this.subs.forEach(sub => sub.unsubscribe());
@@ -25574,7 +25580,7 @@ class WizardNavigationService {
25574
25580
  * @memberof WizardNavigationService
25575
25581
  */
25576
25582
  this._cancelWizard = new Subject();
25577
- this.previousButtonSubscription = this.buttonService.previousBtnClicked.subscribe(() => {
25583
+ this.previousButtonSubscription = buttonService.previousBtnClicked.subscribe(() => {
25578
25584
  const currentPage = this.currentPage;
25579
25585
  if (this.currentPageIsFirst || currentPage.previousStepDisabled) {
25580
25586
  return;
@@ -25584,21 +25590,21 @@ class WizardNavigationService {
25584
25590
  this.previous();
25585
25591
  }
25586
25592
  });
25587
- this.nextButtonSubscription = this.buttonService.nextBtnClicked.subscribe(() => {
25593
+ this.nextButtonSubscription = buttonService.nextBtnClicked.subscribe(() => {
25588
25594
  this.checkAndCommitCurrentPage('next');
25589
25595
  });
25590
- this.dangerButtonSubscription = this.buttonService.dangerBtnClicked.subscribe(() => {
25596
+ this.dangerButtonSubscription = buttonService.dangerBtnClicked.subscribe(() => {
25591
25597
  this.checkAndCommitCurrentPage('danger');
25592
25598
  });
25593
- this.finishButtonSubscription = this.buttonService.finishBtnClicked.subscribe(() => {
25599
+ this.finishButtonSubscription = buttonService.finishBtnClicked.subscribe(() => {
25594
25600
  this.checkAndCommitCurrentPage('finish');
25595
25601
  });
25596
- this.customButtonSubscription = this.buttonService.customBtnClicked.subscribe((type) => {
25602
+ this.customButtonSubscription = buttonService.customBtnClicked.subscribe((type) => {
25597
25603
  if (!this.wizardStopNavigation) {
25598
25604
  this.currentPage.customButtonClicked.emit(type);
25599
25605
  }
25600
25606
  });
25601
- this.cancelButtonSubscription = this.buttonService.cancelBtnClicked.subscribe(() => {
25607
+ this.cancelButtonSubscription = buttonService.cancelBtnClicked.subscribe(() => {
25602
25608
  if (this.wizardStopNavigation) {
25603
25609
  return;
25604
25610
  }
@@ -25609,7 +25615,7 @@ class WizardNavigationService {
25609
25615
  this.cancel();
25610
25616
  }
25611
25617
  });
25612
- this.pagesResetSubscription = this.pageCollection.pagesReset.subscribe(() => {
25618
+ this.pagesResetSubscription = pageCollection.pagesReset.subscribe(() => {
25613
25619
  this.setFirstPageCurrent();
25614
25620
  });
25615
25621
  }
@@ -28123,5 +28129,5 @@ const CLR_MENU_POSITIONS = [
28123
28129
  * Generated bundle index. Do not edit.
28124
28130
  */
28125
28131
 
28126
- 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 };
28132
+ 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 };
28127
28133
  //# sourceMappingURL=clr-angular.mjs.map