@clr/angular 17.2.1 → 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 (190) hide show
  1. package/accordion/stepper/stepper-panel.d.ts +1 -1
  2. package/button/button-loading/loading-button.d.ts +2 -2
  3. package/clarity.api.md +98 -72
  4. package/data/datagrid/built-in/filters/datagrid-numeric-filter.d.ts +1 -1
  5. package/data/datagrid/built-in/filters/datagrid-string-filter.d.ts +1 -1
  6. package/data/datagrid/datagrid-action-overflow.d.ts +2 -3
  7. package/data/datagrid/datagrid-detail-header.d.ts +1 -1
  8. package/data/datagrid/datagrid-filter.d.ts +1 -1
  9. package/data/datagrid/datagrid-hideable-column.d.ts +0 -1
  10. package/data/datagrid/datagrid-items.d.ts +0 -1
  11. package/data/datagrid/datagrid-pagination.d.ts +1 -1
  12. package/data/datagrid/datagrid-row.d.ts +5 -5
  13. package/data/datagrid/datagrid.d.ts +8 -5
  14. package/data/datagrid/providers/column-resizer.service.d.ts +1 -1
  15. package/data/datagrid/providers/selection.d.ts +1 -2
  16. package/data/datagrid/providers/table-size.service.d.ts +1 -1
  17. package/data/datagrid/render/cell-renderer.d.ts +1 -1
  18. package/data/datagrid/render/header-renderer.d.ts +1 -2
  19. package/data/datagrid/render/main-renderer.d.ts +4 -3
  20. package/data/datagrid/render/row-renderer.d.ts +2 -1
  21. package/data/tree-view/tree.d.ts +5 -1
  22. package/emphasis/alert/alert.d.ts +1 -1
  23. package/esm2020/accordion/stepper/stepper-panel.mjs +5 -4
  24. package/esm2020/button/button-loading/loading-button.mjs +1 -1
  25. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +1 -1
  26. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +1 -1
  27. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +8 -9
  28. package/esm2020/data/datagrid/datagrid-column-separator.mjs +1 -1
  29. package/esm2020/data/datagrid/datagrid-detail-header.mjs +1 -1
  30. package/esm2020/data/datagrid/datagrid-detail-registerer.mjs +3 -3
  31. package/esm2020/data/datagrid/datagrid-filter.mjs +1 -1
  32. package/esm2020/data/datagrid/datagrid-hideable-column.mjs +3 -4
  33. package/esm2020/data/datagrid/datagrid-if-detail.mjs +2 -2
  34. package/esm2020/data/datagrid/datagrid-items.mjs +2 -3
  35. package/esm2020/data/datagrid/datagrid-pagination.mjs +3 -3
  36. package/esm2020/data/datagrid/datagrid-placeholder.mjs +5 -5
  37. package/esm2020/data/datagrid/datagrid-row.mjs +15 -9
  38. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +5 -5
  39. package/esm2020/data/datagrid/datagrid.mjs +51 -42
  40. package/esm2020/data/datagrid/providers/column-resizer.service.mjs +1 -1
  41. package/esm2020/data/datagrid/providers/selection.mjs +11 -12
  42. package/esm2020/data/datagrid/providers/table-size.service.mjs +1 -1
  43. package/esm2020/data/datagrid/render/cell-renderer.mjs +1 -1
  44. package/esm2020/data/datagrid/render/header-renderer.mjs +2 -3
  45. package/esm2020/data/datagrid/render/main-renderer.mjs +30 -19
  46. package/esm2020/data/datagrid/render/row-renderer.mjs +6 -3
  47. package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +2 -2
  48. package/esm2020/data/stack-view/stack-block.mjs +4 -2
  49. package/esm2020/data/tree-view/recursive-children.mjs +3 -3
  50. package/esm2020/data/tree-view/tree-node.mjs +5 -5
  51. package/esm2020/data/tree-view/tree.mjs +24 -11
  52. package/esm2020/emphasis/alert/alert.mjs +1 -1
  53. package/esm2020/forms/checkbox/checkbox-container.mjs +9 -5
  54. package/esm2020/forms/checkbox/checkbox.mjs +1 -1
  55. package/esm2020/forms/combobox/combobox-container.mjs +1 -1
  56. package/esm2020/forms/combobox/combobox.mjs +2 -2
  57. package/esm2020/forms/combobox/option-items.directive.mjs +2 -3
  58. package/esm2020/forms/combobox/option.mjs +6 -5
  59. package/esm2020/forms/combobox/options.mjs +1 -1
  60. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +1 -1
  61. package/esm2020/forms/common/abstract-container.mjs +3 -3
  62. package/esm2020/forms/common/control.mjs +1 -1
  63. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +3 -3
  64. package/esm2020/forms/common/if-control-state/if-control-state.service.mjs +2 -3
  65. package/esm2020/forms/common/label.mjs +1 -1
  66. package/esm2020/forms/common/wrapped-control.mjs +3 -3
  67. package/esm2020/forms/datalist/datalist-container.mjs +2 -3
  68. package/esm2020/forms/datalist/datalist-input.mjs +2 -2
  69. package/esm2020/forms/datepicker/calendar.mjs +1 -1
  70. package/esm2020/forms/datepicker/date-container.mjs +4 -5
  71. package/esm2020/forms/datepicker/date-input.mjs +1 -1
  72. package/esm2020/forms/datepicker/monthpicker.mjs +1 -1
  73. package/esm2020/forms/datepicker/providers/date-io.service.mjs +3 -4
  74. package/esm2020/forms/datepicker/providers/datepicker-enabled.service.mjs +2 -2
  75. package/esm2020/forms/datepicker/providers/datepicker-focus.service.mjs +1 -1
  76. package/esm2020/forms/datepicker/yearpicker.mjs +1 -1
  77. package/esm2020/forms/input/input.mjs +1 -1
  78. package/esm2020/forms/password/password-container.mjs +2 -2
  79. package/esm2020/forms/password/password.mjs +3 -4
  80. package/esm2020/forms/radio/radio-container.mjs +9 -5
  81. package/esm2020/forms/radio/radio.mjs +1 -1
  82. package/esm2020/forms/range/range.mjs +1 -1
  83. package/esm2020/forms/select/select.mjs +1 -1
  84. package/esm2020/forms/textarea/textarea.mjs +1 -1
  85. package/esm2020/layout/main-container/main-container.mjs +1 -1
  86. package/esm2020/layout/nav/header.mjs +3 -3
  87. package/esm2020/layout/nav/nav-level.mjs +16 -12
  88. package/esm2020/layout/tabs/tab-link.directive.mjs +4 -6
  89. package/esm2020/layout/tabs/tabs.mjs +1 -1
  90. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +8 -9
  91. package/esm2020/layout/vertical-nav/vertical-nav-icon.mjs +2 -2
  92. package/esm2020/layout/vertical-nav/vertical-nav.mjs +2 -2
  93. package/esm2020/modal/index.mjs +2 -1
  94. package/esm2020/modal/modal-body.mjs +4 -4
  95. package/esm2020/modal/modal-configuration.service.mjs +4 -3
  96. package/esm2020/modal/modal.mjs +15 -5
  97. package/esm2020/modal/modal.module.mjs +2 -4
  98. package/esm2020/modal/side-panel.mjs +4 -2
  99. package/esm2020/popover/common/abstract-popover.mjs +1 -1
  100. package/esm2020/popover/dropdown/dropdown.mjs +3 -4
  101. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +2 -2
  102. package/esm2020/popover/signpost/signpost-content.mjs +2 -3
  103. package/esm2020/popover/signpost/signpost-trigger.mjs +1 -1
  104. package/esm2020/popover/tooltip/tooltip-content.mjs +1 -1
  105. package/esm2020/popover/tooltip/tooltip-trigger.mjs +2 -3
  106. package/esm2020/timeline/timeline-step.mjs +1 -1
  107. package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +1 -1
  108. package/esm2020/utils/cdk/cdk-drag.module.mjs +1 -1
  109. package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +1 -1
  110. package/esm2020/utils/conditional/if-active.directive.mjs +2 -2
  111. package/esm2020/utils/conditional/if-expanded.directive.mjs +2 -2
  112. package/esm2020/utils/conditional/if-open.directive.mjs +2 -2
  113. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +4 -4
  114. package/esm2020/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.mjs +1 -1
  115. package/esm2020/utils/focus/key-focus/key-focus-item.mjs +1 -1
  116. package/esm2020/utils/focus/key-focus/key-focus.mjs +1 -1
  117. package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +1 -1
  118. package/esm2020/utils/i18n/common-strings.default.mjs +4 -1
  119. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  120. package/esm2020/utils/popover/popover-anchor.mjs +1 -1
  121. package/esm2020/utils/popover/popover-close-button.mjs +1 -1
  122. package/esm2020/utils/popover/popover-content.mjs +10 -4
  123. package/esm2020/utils/popover/popover-open-close-button.mjs +2 -2
  124. package/esm2020/utils/popover/providers/popover-events.service.mjs +1 -1
  125. package/esm2020/wizard/providers/wizard-navigation.service.mjs +8 -8
  126. package/esm2020/wizard/wizard-stepnav-item.mjs +13 -19
  127. package/esm2020/wizard/wizard.mjs +3 -3
  128. package/esm2020/wizard/wizard.module.mjs +3 -3
  129. package/fesm2015/clr-angular.mjs +293 -233
  130. package/fesm2015/clr-angular.mjs.map +1 -1
  131. package/fesm2020/clr-angular.mjs +290 -233
  132. package/fesm2020/clr-angular.mjs.map +1 -1
  133. package/forms/checkbox/checkbox.d.ts +1 -1
  134. package/forms/combobox/combobox-container.d.ts +2 -2
  135. package/forms/combobox/combobox.d.ts +4 -4
  136. package/forms/combobox/option-items.directive.d.ts +0 -1
  137. package/forms/combobox/option.d.ts +3 -3
  138. package/forms/combobox/options.d.ts +1 -1
  139. package/forms/combobox/providers/combobox-focus-handler.service.d.ts +1 -1
  140. package/forms/common/control.d.ts +1 -1
  141. package/forms/common/if-control-state/if-control-state.service.d.ts +0 -1
  142. package/forms/common/label.d.ts +1 -1
  143. package/forms/common/wrapped-control.d.ts +3 -3
  144. package/forms/datalist/datalist-container.d.ts +0 -1
  145. package/forms/datalist/datalist-input.d.ts +1 -1
  146. package/forms/datepicker/calendar.d.ts +1 -1
  147. package/forms/datepicker/date-container.d.ts +1 -2
  148. package/forms/datepicker/date-input.d.ts +2 -2
  149. package/forms/datepicker/monthpicker.d.ts +1 -1
  150. package/forms/datepicker/providers/date-io.service.d.ts +1 -2
  151. package/forms/datepicker/providers/datepicker-focus.service.d.ts +1 -1
  152. package/forms/datepicker/yearpicker.d.ts +1 -1
  153. package/forms/input/input.d.ts +1 -1
  154. package/forms/password/password.d.ts +1 -2
  155. package/forms/radio/radio.d.ts +1 -1
  156. package/forms/range/range.d.ts +1 -1
  157. package/forms/select/select.d.ts +1 -1
  158. package/forms/textarea/textarea.d.ts +1 -1
  159. package/layout/main-container/main-container.d.ts +1 -1
  160. package/layout/nav/nav-level.d.ts +0 -1
  161. package/layout/tabs/tab-link.directive.d.ts +2 -4
  162. package/layout/tabs/tabs.d.ts +1 -1
  163. package/layout/vertical-nav/vertical-nav-group.d.ts +1 -2
  164. package/modal/index.d.ts +1 -0
  165. package/modal/modal.d.ts +3 -1
  166. package/modal/side-panel.d.ts +1 -1
  167. package/package.json +5 -5
  168. package/popover/common/abstract-popover.d.ts +3 -3
  169. package/popover/dropdown/dropdown.d.ts +0 -1
  170. package/popover/signpost/signpost-content.d.ts +1 -2
  171. package/popover/signpost/signpost-trigger.d.ts +1 -1
  172. package/popover/tooltip/tooltip-content.d.ts +1 -1
  173. package/popover/tooltip/tooltip-trigger.d.ts +0 -1
  174. package/src/utils/popover/README.md +1 -1
  175. package/timeline/timeline-step.d.ts +1 -1
  176. package/utils/animations/expandable-animation/expandable-animation.d.ts +1 -1
  177. package/utils/cdk/cdk-drag.module.d.ts +1 -1
  178. package/utils/cdk/cdk-trap-focus.module.d.ts +1 -1
  179. package/utils/conditional/if-expanded.directive.d.ts +1 -1
  180. package/utils/focus/focus-on-view-init/focus-on-view-init.d.ts +1 -1
  181. package/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.d.ts +1 -1
  182. package/utils/focus/key-focus/key-focus-item.d.ts +2 -2
  183. package/utils/focus/key-focus/key-focus.d.ts +1 -1
  184. package/utils/focus/key-focus/roving-tabindex.d.ts +1 -1
  185. package/utils/i18n/common-strings.interface.d.ts +2 -0
  186. package/utils/popover/popover-anchor.d.ts +1 -1
  187. package/utils/popover/popover-close-button.d.ts +1 -1
  188. package/utils/popover/popover-content.d.ts +1 -0
  189. package/utils/popover/providers/popover-events.service.d.ts +3 -3
  190. package/wizard/wizard.d.ts +1 -1
@@ -19,7 +19,6 @@ import { _RecycleViewRepeaterStrategy } from '@angular/cdk/collections';
19
19
  import * as i3$1 from '@angular/cdk/scrolling';
20
20
  import { FixedSizeVirtualScrollStrategy, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
21
21
  import * as i1$3 from '@angular/router';
22
- import '@cds/core/internal-components/close-button/register.js';
23
22
  import '@cds/core/icon/register';
24
23
 
25
24
  /*
@@ -395,6 +394,9 @@ const commonStringsDefault = {
395
394
  fileCount: '{COUNT} files',
396
395
  clearFile: 'Clear {FILE}',
397
396
  clearFiles: 'Clear {COUNT} files',
397
+ // Tree
398
+ selectedTreeNode: 'selected',
399
+ unselectedTreeNode: 'unselected',
398
400
  };
399
401
 
400
402
  /*
@@ -1160,6 +1162,9 @@ class ClrStepperPanel extends ClrAccordionPanel {
1160
1162
  // set panel status on form status change only after the form becomes invalid
1161
1163
  const invalidStatusTrigger = this.formGroup.statusChanges.pipe(filter(status => status === 'INVALID'));
1162
1164
  this.subscriptions.push(this.formGroup.statusChanges.pipe(skipUntil(invalidStatusTrigger), distinctUntilChanged()).subscribe(status => {
1165
+ if (!this.formGroup.touched) {
1166
+ return;
1167
+ }
1163
1168
  if (status === 'VALID') {
1164
1169
  this.stepperService.setPanelValid(this.id);
1165
1170
  }
@@ -1176,9 +1181,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1176
1181
  this.subscriptions.push(this.stepperService.activeStep
1177
1182
  .pipe(filter(panelId => isPlatformBrowser(this.platformId) && panelId === this.id))
1178
1183
  .subscribe(() => {
1179
- //Adding timeout so that the status of the previous step is read by Voice Over on Safari,
1180
- //before focusing on the next stepper panel header
1181
- setTimeout(() => this.headerButton.nativeElement.focus(), 1500);
1184
+ this.headerButton.nativeElement.focus();
1182
1185
  }));
1183
1186
  }
1184
1187
  triggerAllFormControlValidationIfError(panel) {
@@ -2227,6 +2230,7 @@ class ClrPopoverContent {
2227
2230
  this.subscriptions = [];
2228
2231
  this.removeClickListenerFn = null;
2229
2232
  this.shouldRealign = false;
2233
+ this.previousContentHeight = null;
2230
2234
  // Check-collector pattern:
2231
2235
  // In order to get accurate content height/width values, we cannot calculate alignment offsets until
2232
2236
  // after the projected content has stabilized.
@@ -2248,9 +2252,14 @@ class ClrPopoverContent {
2248
2252
  this.smartEventsService.scrollToClose = !!scrollToClose;
2249
2253
  }
2250
2254
  ngAfterContentChecked() {
2251
- if (this.smartOpenService.open && this.view && this.shouldRealign) {
2252
- // Channel content-check event through the check-collector
2253
- this.checkCollector.emit();
2255
+ if (this.smartOpenService.open && this.view) {
2256
+ const rootNodeOffsetHeight = this.view.rootNodes[0].offsetHeight;
2257
+ if (this.shouldRealign ||
2258
+ (this.previousContentHeight !== null && this.previousContentHeight !== rootNodeOffsetHeight)) {
2259
+ // Channel content-check event through the check-collector
2260
+ this.previousContentHeight = rootNodeOffsetHeight;
2261
+ this.checkCollector.emit();
2262
+ }
2254
2263
  }
2255
2264
  }
2256
2265
  ngAfterViewInit() {
@@ -2366,7 +2375,7 @@ class ClrPopoverOpenCloseButton {
2366
2375
  this.smartOpenService = smartOpenService;
2367
2376
  this.openCloseChange = new EventEmitter();
2368
2377
  this.subscriptions = [];
2369
- this.subscriptions.push(this.smartOpenService.openChange.subscribe(change => {
2378
+ this.subscriptions.push(smartOpenService.openChange.subscribe(change => {
2370
2379
  this.openCloseChange.next(change);
2371
2380
  }));
2372
2381
  }
@@ -3319,7 +3328,7 @@ class ClrIfActive {
3319
3328
  this.activeChange = new EventEmitter(false);
3320
3329
  this.wasActive = false;
3321
3330
  this.checkAndUpdateView(ifActiveService.current);
3322
- this.subscription = this.ifActiveService.currentChange.subscribe(newCurrentId => {
3331
+ this.subscription = ifActiveService.currentChange.subscribe(newCurrentId => {
3323
3332
  this.checkAndUpdateView(newCurrentId);
3324
3333
  });
3325
3334
  }
@@ -3409,7 +3418,7 @@ class ClrIfOpen {
3409
3418
  * used with de-structured / de-sugared syntax.
3410
3419
  */
3411
3420
  this.openChange = new EventEmitter(false);
3412
- this.subscription = this.toggleService.openChange.subscribe(change => {
3421
+ this.subscription = toggleService.openChange.subscribe(change => {
3413
3422
  this.updateView(change);
3414
3423
  this.openChange.emit(change);
3415
3424
  });
@@ -3479,7 +3488,7 @@ class ClrIfExpanded {
3479
3488
  this._subscriptions = [];
3480
3489
  this._subscriptions.push(expand.expandChange.subscribe(() => {
3481
3490
  this.updateView();
3482
- this.expandedChange.emit(this.expand.expanded);
3491
+ this.expandedChange.emit(expand.expanded);
3483
3492
  }));
3484
3493
  }
3485
3494
  get expanded() {
@@ -3636,7 +3645,7 @@ class ClrFocusOnViewInit {
3636
3645
  this.renderer = renderer;
3637
3646
  this.directFocus = true; // true if the element gets focused without need to set tabindex;
3638
3647
  this.destroy$ = new Subject();
3639
- this._isEnabled = this.focusOnViewInit;
3648
+ this._isEnabled = focusOnViewInit;
3640
3649
  // Angular compiler doesn't understand the type Document
3641
3650
  // when working out the metadata for injectable parameters,
3642
3651
  // even though it understands the injection token DOCUMENT
@@ -3647,8 +3656,8 @@ class ClrFocusOnViewInit {
3647
3656
  .subscribe(() => {
3648
3657
  if (!this.directFocus) {
3649
3658
  // manually set attributes and styles should be removed
3650
- this.renderer.removeAttribute(this.el.nativeElement, 'tabindex');
3651
- this.renderer.setStyle(this.el.nativeElement, 'outline', null);
3659
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
3660
+ renderer.setStyle(el.nativeElement, 'outline', null);
3652
3661
  }
3653
3662
  }));
3654
3663
  }
@@ -4498,12 +4507,11 @@ var CONTROL_STATE;
4498
4507
  })(CONTROL_STATE || (CONTROL_STATE = {}));
4499
4508
  class IfControlStateService {
4500
4509
  constructor(ngControlService) {
4501
- this.ngControlService = ngControlService;
4502
4510
  this.subscriptions = [];
4503
4511
  // Implement our own status changes observable, since Angular controls don't
4504
4512
  this._statusChanges = new BehaviorSubject(CONTROL_STATE.NONE);
4505
4513
  // Wait for the control to be available
4506
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4514
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4507
4515
  if (control) {
4508
4516
  this.control = control;
4509
4517
  // Subscribe to the status change events, only after touched
@@ -4753,14 +4761,14 @@ class ClrAbstractContainer {
4753
4761
  this.ngControlService = ngControlService;
4754
4762
  this._dynamic = false;
4755
4763
  this.subscriptions = [];
4756
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
4764
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
4757
4765
  this.state = state;
4758
4766
  // Make sure everything is updated before dispatching the values for helpers
4759
4767
  setTimeout(() => {
4760
4768
  this.updateHelpers();
4761
4769
  });
4762
4770
  }));
4763
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4771
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4764
4772
  this.control = control;
4765
4773
  }));
4766
4774
  }
@@ -5013,10 +5021,10 @@ class WrappedFormControl {
5013
5021
  this.vcr = vcr;
5014
5022
  this.wrapperType = wrapperType;
5015
5023
  this.ngControl = ngControl;
5016
- this.index = 0;
5017
- this.subscriptions = [];
5018
5024
  this.renderer = renderer;
5019
5025
  this.el = el;
5026
+ this.index = 0;
5027
+ this.subscriptions = [];
5020
5028
  if (injector) {
5021
5029
  this.ngControlService = injector.get(NgControlService, null);
5022
5030
  this.ifControlStateService = injector.get(IfControlStateService, null);
@@ -5237,12 +5245,12 @@ class AbstractIfState {
5237
5245
  this.subscriptions = [];
5238
5246
  this.displayedContent = false;
5239
5247
  if (ngControlService) {
5240
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
5248
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
5241
5249
  this.control = control;
5242
5250
  }));
5243
5251
  }
5244
5252
  if (ifControlStateService) {
5245
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
5253
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
5246
5254
  this.handleState(state);
5247
5255
  }));
5248
5256
  }
@@ -5610,8 +5618,10 @@ ClrCheckboxContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
5610
5618
  <label *ngIf="!label && addGrid()"></label>
5611
5619
  <div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
5612
5620
  <ng-content select="clr-checkbox-wrapper,clr-toggle-wrapper"></ng-content>
5613
- <div class="clr-subtext-wrapper">
5614
- <ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content>
5621
+ <div *ngIf="showHelper" class="clr-subtext-wrapper">
5622
+ <ng-content select="clr-control-helper"></ng-content>
5623
+ </div>
5624
+ <div *ngIf="showInvalid || showValid" class="clr-subtext-wrapper">
5615
5625
  <cds-icon
5616
5626
  *ngIf="showInvalid"
5617
5627
  class="clr-validate-icon"
@@ -5640,8 +5650,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
5640
5650
  <label *ngIf="!label && addGrid()"></label>
5641
5651
  <div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
5642
5652
  <ng-content select="clr-checkbox-wrapper,clr-toggle-wrapper"></ng-content>
5643
- <div class="clr-subtext-wrapper">
5644
- <ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content>
5653
+ <div *ngIf="showHelper" class="clr-subtext-wrapper">
5654
+ <ng-content select="clr-control-helper"></ng-content>
5655
+ </div>
5656
+ <div *ngIf="showInvalid || showValid" class="clr-subtext-wrapper">
5645
5657
  <cds-icon
5646
5658
  *ngIf="showInvalid"
5647
5659
  class="clr-validate-icon"
@@ -6795,7 +6807,7 @@ class ClrOption {
6795
6807
  this.optionSelectionService = optionSelectionService;
6796
6808
  // A proxy with only the necessary data to be used for a11y and the focus handler service.
6797
6809
  this.optionProxy = new OptionData(null, null);
6798
- this.optionProxy.el = this.elRef.nativeElement;
6810
+ this.optionProxy.el = elRef.nativeElement;
6799
6811
  }
6800
6812
  get optionId() {
6801
6813
  return this._id;
@@ -6823,7 +6835,8 @@ class ClrOption {
6823
6835
  this.optionProxy.id = this._id;
6824
6836
  }
6825
6837
  }
6826
- onClick() {
6838
+ onClick(event) {
6839
+ event.stopPropagation();
6827
6840
  if (this.optionSelectionService.multiselectable) {
6828
6841
  this.optionSelectionService.toggle(this.value);
6829
6842
  }
@@ -6838,7 +6851,7 @@ class ClrOption {
6838
6851
  }
6839
6852
  }
6840
6853
  ClrOption.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOption, deps: [{ token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: ComboboxFocusHandler }, { token: OptionSelectionService }], target: i0.ɵɵFactoryTarget.Component });
6841
- ClrOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOption, selector: "clr-option", inputs: { optionId: ["id", "optionId"], value: ["clrValue", "value"] }, host: { listeners: { "click": "onClick()" }, properties: { "class.clr-combobox-option": "true", "attr.role": "\"option\"", "attr.tabindex": "-1", "attr.id": "optionId", "class.active": "this.selected", "class.clr-focus": "this.focusClass" } }, ngImport: i0, template: `
6854
+ ClrOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOption, selector: "clr-option", inputs: { optionId: ["id", "optionId"], value: ["clrValue", "value"] }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.clr-combobox-option": "true", "attr.role": "\"option\"", "attr.tabindex": "-1", "attr.id": "optionId", "class.active": "this.selected", "class.clr-focus": "this.focusClass" } }, ngImport: i0, template: `
6842
6855
  <ng-content></ng-content>
6843
6856
  <span *ngIf="selected" class="clr-sr-only">{{ commonStrings.keys.comboboxSelected }}</span>
6844
6857
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -6872,7 +6885,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
6872
6885
  args: ['class.clr-focus']
6873
6886
  }], onClick: [{
6874
6887
  type: HostListener,
6875
- args: ['click']
6888
+ args: ['click', ['$event']]
6876
6889
  }] } });
6877
6890
 
6878
6891
  /*
@@ -7058,7 +7071,7 @@ class ClrCombobox extends WrappedFormControl {
7058
7071
  control.valueAccessor = this;
7059
7072
  }
7060
7073
  // default to SingleSelectComboboxModel, in case the optional input [ClrMulti] isn't used
7061
- this.optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7074
+ optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7062
7075
  this.updateControlValue();
7063
7076
  }
7064
7077
  get multiSelect() {
@@ -7354,11 +7367,10 @@ class ClrOptionItems {
7354
7367
  this.differs = differs;
7355
7368
  this.optionService = optionService;
7356
7369
  this.positionService = positionService;
7357
- this.vcr = vcr;
7358
7370
  this.subscriptions = [];
7359
7371
  this.filter = '';
7360
7372
  this.differ = null;
7361
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
7373
+ this.iterableProxy = new NgForOf(vcr, template, differs);
7362
7374
  this.subscriptions.push(optionService.inputChanged.subscribe(filter => {
7363
7375
  this.filter = filter;
7364
7376
  this.updateItems();
@@ -7738,10 +7750,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7738
7750
  class ClrDatalistContainer extends ClrAbstractContainer {
7739
7751
  constructor(controlClassService, layoutService, ngControlService, focusService, ifControlStateService) {
7740
7752
  super(ifControlStateService, layoutService, controlClassService, ngControlService);
7741
- this.focusService = focusService;
7742
7753
  this.ifControlStateService = ifControlStateService;
7743
7754
  this.focus = false;
7744
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => (this.focus = state)));
7755
+ this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
7745
7756
  }
7746
7757
  }
7747
7758
  ClrDatalistContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatalistContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
@@ -7845,7 +7856,7 @@ class ClrDatalistInput extends WrappedFormControl {
7845
7856
  super(vcr, ClrDatalistContainer, injector, control, renderer, el);
7846
7857
  this.focusService = focusService;
7847
7858
  this.datalistIdService = datalistIdService;
7848
- if (!this.focusService) {
7859
+ if (!focusService) {
7849
7860
  throw new Error('clrDatalist requires being wrapped in <clr-datalist-container>');
7850
7861
  }
7851
7862
  }
@@ -8619,8 +8630,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
8619
8630
  * The full license information can be found in LICENSE in the root directory of this project.
8620
8631
  */
8621
8632
  class DateIOService {
8622
- constructor(_localeHelperService) {
8623
- this._localeHelperService = _localeHelperService;
8633
+ constructor(localeHelperService) {
8624
8634
  this.disabledDates = {
8625
8635
  // This is the default range. It approximates the beginning of time to the end of time.
8626
8636
  // Unless a minDate or maxDate is set with the native HTML5 api the range is all dates
@@ -8631,7 +8641,7 @@ class DateIOService {
8631
8641
  this.cldrLocaleDateFormat = DEFAULT_LOCALE_FORMAT;
8632
8642
  this.localeDisplayFormat = LITTLE_ENDIAN;
8633
8643
  this.delimiters = ['/', '/'];
8634
- this.cldrLocaleDateFormat = this._localeHelperService.localeDateFormat;
8644
+ this.cldrLocaleDateFormat = localeHelperService.localeDateFormat;
8635
8645
  this.initializeLocaleDisplayFormat();
8636
8646
  }
8637
8647
  get placeholderText() {
@@ -9052,7 +9062,7 @@ class DatepickerEnabledService {
9052
9062
  constructor(_document) {
9053
9063
  this._document = _document;
9054
9064
  this._isUserAgentMobile = false;
9055
- if (this._document) {
9065
+ if (_document) {
9056
9066
  this._isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(_document.defaultView.navigator.userAgent);
9057
9067
  this._innerWidth = _document.defaultView.innerWidth;
9058
9068
  }
@@ -9648,18 +9658,17 @@ class ClrDateContainer extends ClrAbstractContainer {
9648
9658
  this.dateFormControlService = dateFormControlService;
9649
9659
  this.dateIOService = dateIOService;
9650
9660
  this.commonStrings = commonStrings;
9651
- this.focusService = focusService;
9652
9661
  this.viewManagerService = viewManagerService;
9653
9662
  this.controlClassService = controlClassService;
9654
9663
  this.layoutService = layoutService;
9655
9664
  this.ngControlService = ngControlService;
9656
9665
  this.ifControlStateService = ifControlStateService;
9657
9666
  this.focus = false;
9658
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
9667
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
9659
9668
  this.focus = state;
9660
9669
  }));
9661
- this.subscriptions.push(this.toggleService.openChange.subscribe(() => {
9662
- this.dateFormControlService.markAsTouched();
9670
+ this.subscriptions.push(toggleService.openChange.subscribe(() => {
9671
+ dateFormControlService.markAsTouched();
9663
9672
  }));
9664
9673
  }
9665
9674
  set clrPosition(position) {
@@ -10659,7 +10668,7 @@ class ClrPasswordContainer extends ClrAbstractContainer {
10659
10668
  this.focus = false;
10660
10669
  this._toggle = true;
10661
10670
  /* The unsubscribe is handle inside the ClrAbstractContainer */
10662
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
10671
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
10663
10672
  this.focus = state;
10664
10673
  }));
10665
10674
  }
@@ -10809,12 +10818,11 @@ class ClrPassword extends WrappedFormControl {
10809
10818
  constructor(vcr, injector, control, renderer, el, focusService, toggleService) {
10810
10819
  super(vcr, ClrPasswordContainer, injector, control, renderer, el);
10811
10820
  this.focusService = focusService;
10812
- this.toggleService = toggleService;
10813
10821
  this.index = 1;
10814
- if (!this.focusService) {
10822
+ if (!focusService) {
10815
10823
  throw new Error('clrPassword requires being wrapped in <clr-password-container>');
10816
10824
  }
10817
- this.subscriptions.push(this.toggleService.subscribe(toggle => {
10825
+ this.subscriptions.push(toggleService.subscribe(toggle => {
10818
10826
  renderer.setProperty(el.nativeElement, 'type', toggle ? 'text' : 'password');
10819
10827
  }));
10820
10828
  }
@@ -11012,8 +11020,10 @@ ClrRadioContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
11012
11020
  <label *ngIf="!label && addGrid()"></label>
11013
11021
  <div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
11014
11022
  <ng-content select="clr-radio-wrapper"></ng-content>
11015
- <div class="clr-subtext-wrapper">
11016
- <ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content>
11023
+ <div *ngIf="showHelper" class="clr-subtext-wrapper">
11024
+ <ng-content select="clr-control-helper"></ng-content>
11025
+ </div>
11026
+ <div *ngIf="showValid || showInvalid" class="clr-subtext-wrapper">
11017
11027
  <cds-icon
11018
11028
  *ngIf="showInvalid"
11019
11029
  class="clr-validate-icon"
@@ -11042,8 +11052,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
11042
11052
  <label *ngIf="!label && addGrid()"></label>
11043
11053
  <div class="clr-control-container" [class.clr-control-inline]="clrInline" [ngClass]="controlClass()">
11044
11054
  <ng-content select="clr-radio-wrapper"></ng-content>
11045
- <div class="clr-subtext-wrapper">
11046
- <ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content>
11055
+ <div *ngIf="showHelper" class="clr-subtext-wrapper">
11056
+ <ng-content select="clr-control-helper"></ng-content>
11057
+ </div>
11058
+ <div *ngIf="showValid || showInvalid" class="clr-subtext-wrapper">
11047
11059
  <cds-icon
11048
11060
  *ngIf="showInvalid"
11049
11061
  class="clr-validate-icon"
@@ -12113,7 +12125,7 @@ function getTabableItems(el) {
12113
12125
  'iframe',
12114
12126
  'object',
12115
12127
  'embed',
12116
- '*[tabindex]',
12128
+ '*[tabindex]:not([disabled])',
12117
12129
  '*[contenteditable=true]',
12118
12130
  '[role=button]:not([disabled])',
12119
12131
  ].join(',');
@@ -14380,11 +14392,10 @@ class ClrDatagridItems {
14380
14392
  this.template = template;
14381
14393
  this.differs = differs;
14382
14394
  this.items = items;
14383
- this.vcr = vcr;
14384
14395
  this.differ = null;
14385
14396
  this.subscriptions = [];
14386
14397
  items.smartenUp();
14387
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
14398
+ this.iterableProxy = new NgForOf(vcr, template, differs);
14388
14399
  this.subscriptions.push(items.change.subscribe(newItems => {
14389
14400
  this.iterableProxy.ngForOf = newItems;
14390
14401
  this.iterableProxy.ngDoCheck();
@@ -14457,9 +14468,9 @@ class ClrDatagridPlaceholder {
14457
14468
  }
14458
14469
  ClrDatagridPlaceholder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPlaceholder, deps: [{ token: Items }], target: i0.ɵɵFactoryTarget.Component });
14459
14470
  ClrDatagridPlaceholder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder", host: { properties: { "class.datagrid-placeholder-container": "true" } }, ngImport: i0, template: `
14460
- <div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid" role="row">
14471
+ <div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid">
14461
14472
  <div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
14462
- <span role="gridcell" class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
14473
+ <span class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
14463
14474
  </div>
14464
14475
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
14465
14476
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPlaceholder, decorators: [{
@@ -14467,9 +14478,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14467
14478
  args: [{
14468
14479
  selector: 'clr-dg-placeholder',
14469
14480
  template: `
14470
- <div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid" role="row">
14481
+ <div class="datagrid-placeholder" [class.datagrid-empty]="emptyDatagrid">
14471
14482
  <div class="datagrid-placeholder-image" *ngIf="emptyDatagrid"></div>
14472
- <span role="gridcell" class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
14483
+ <span class="datagrid-placeholder-content"><ng-content *ngIf="emptyDatagrid"></ng-content></span>
14473
14484
  </div>
14474
14485
  `,
14475
14486
  host: { '[class.datagrid-placeholder-container]': 'true' },
@@ -14880,9 +14891,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14880
14891
  */
14881
14892
  let nbSelection = 0;
14882
14893
  class Selection {
14883
- constructor(_items, _filters) {
14894
+ constructor(_items, filters) {
14884
14895
  this._items = _items;
14885
- this._filters = _filters;
14886
14896
  this.preserveSelection = false;
14887
14897
  /**
14888
14898
  * Shift key state, for use in range selection.
@@ -14903,13 +14913,13 @@ class Selection {
14903
14913
  */
14904
14914
  this.subscriptions = [];
14905
14915
  this.id = 'clr-dg-selection' + nbSelection++;
14906
- this.subscriptions.push(this._filters.change.subscribe(() => {
14916
+ this.subscriptions.push(filters.change.subscribe(() => {
14907
14917
  if (!this._selectable || this.preserveSelection) {
14908
14918
  return;
14909
14919
  }
14910
14920
  this.clearSelection();
14911
14921
  }));
14912
- this.subscriptions.push(this._items.allChanges.subscribe(updatedItems => {
14922
+ this.subscriptions.push(_items.allChanges.subscribe(updatedItems => {
14913
14923
  // Reset the lockedRefs;
14914
14924
  const updateLockedRef = [];
14915
14925
  switch (this.selectionType) {
@@ -14921,10 +14931,10 @@ class Selection {
14921
14931
  let selectionUpdated = false;
14922
14932
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
14923
14933
  if (this.currentSingle && !this.prevSingleSelectionRef) {
14924
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
14934
+ this.prevSingleSelectionRef = _items.trackBy(this.currentSingle);
14925
14935
  }
14926
14936
  updatedItems.forEach(item => {
14927
- const ref = this._items.trackBy(item);
14937
+ const ref = _items.trackBy(item);
14928
14938
  // If one of the updated items is the previously selectedSingle, set it as the new one
14929
14939
  if (this.prevSingleSelectionRef === ref) {
14930
14940
  newSingle = item;
@@ -14938,7 +14948,7 @@ class Selection {
14938
14948
  // Therefore, we should delete the currentSingle if it used to be defined but doesn't exist anymore.
14939
14949
  // No explicit "delete" is required, since newSingle would be undefined at this point.
14940
14950
  // Marking it as selectionUpdated here will set currentSingle to undefined below in the setTimeout.
14941
- if (this._items.smart && !newSingle) {
14951
+ if (_items.smart && !newSingle) {
14942
14952
  selectionUpdated = true;
14943
14953
  }
14944
14954
  // TODO: Discussed this with Eudes and this is fine for now.
@@ -14959,7 +14969,7 @@ class Selection {
14959
14969
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
14960
14970
  this.prevSelectionRefs = [];
14961
14971
  this.current.forEach(item => {
14962
- this.prevSelectionRefs.push(this._items.trackBy(item));
14972
+ this.prevSelectionRefs.push(_items.trackBy(item));
14963
14973
  });
14964
14974
  }
14965
14975
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
@@ -14968,7 +14978,7 @@ class Selection {
14968
14978
  //
14969
14979
  // The both loops below that goes over updatedItems could be combined into one.
14970
14980
  updatedItems.forEach(item => {
14971
- const ref = this._items.trackBy(item);
14981
+ const ref = _items.trackBy(item);
14972
14982
  if (this.lockedRefs.indexOf(ref) > -1) {
14973
14983
  updateLockedRef.push(ref);
14974
14984
  }
@@ -14978,7 +14988,7 @@ class Selection {
14978
14988
  // the if statement below results in broken behavior.
14979
14989
  if (leftOver.length > 0) {
14980
14990
  updatedItems.forEach(item => {
14981
- const ref = this._items.trackBy(item);
14991
+ const ref = _items.trackBy(item);
14982
14992
  // Look in current selected refs array if item is selected, and update actual value
14983
14993
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
14984
14994
  if (selectedIndex > -1) {
@@ -14988,7 +14998,7 @@ class Selection {
14988
14998
  });
14989
14999
  // Filter out any unmatched items if we're using smart datagrids where we expect all items to be
14990
15000
  // present
14991
- if (this._items.smart) {
15001
+ if (_items.smart) {
14992
15002
  leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);
14993
15003
  if (this.current.length !== leftOver.length) {
14994
15004
  selectionUpdated = true;
@@ -15306,13 +15316,13 @@ class ClrDatagridRow {
15306
15316
  this.detailService = detailService;
15307
15317
  this.displayMode = displayMode;
15308
15318
  this.vcr = vcr;
15309
- this.renderer = renderer;
15310
- this.el = el;
15311
15319
  this.commonStrings = commonStrings;
15312
15320
  this.items = items;
15313
15321
  this.document = document;
15314
15322
  this.selectedChanged = new EventEmitter(false);
15315
15323
  this.expandedChange = new EventEmitter(false);
15324
+ this.detailDisabled = false;
15325
+ this.detailHidden = false;
15316
15326
  this.displayCells = false;
15317
15327
  this.expandAnimationTrigger = false;
15318
15328
  /* reference to the enum so that template can access */
@@ -15333,17 +15343,17 @@ class ClrDatagridRow {
15333
15343
  this.radioId = 'clr-dg-row-rd' + nbRow;
15334
15344
  this.checkboxId = 'clr-dg-row-cb' + nbRow;
15335
15345
  this.expandableId = expand.expandableId;
15336
- this.subscriptions.push(combineLatest(this.expand.replace, this.expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15346
+ this.subscriptions.push(combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15337
15347
  if (expandReplaceValue && expandChangeValue) {
15338
15348
  // replaced and expanding
15339
15349
  this.replaced = true;
15340
- this.renderer.addClass(this.el.nativeElement, 'datagrid-row-replaced');
15350
+ renderer.addClass(el.nativeElement, 'datagrid-row-replaced');
15341
15351
  }
15342
15352
  else {
15343
15353
  this.replaced = false;
15344
15354
  // Handles these cases: not replaced and collapsing & replaced and
15345
15355
  // collapsing and not replaced and expanding.
15346
- this.renderer.removeClass(this.el.nativeElement, 'datagrid-row-replaced');
15356
+ renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');
15347
15357
  }
15348
15358
  }));
15349
15359
  }
@@ -15540,11 +15550,11 @@ class ClrDatagridRow {
15540
15550
  }
15541
15551
  }
15542
15552
  ClrDatagridRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, deps: [{ token: Selection }, { token: RowActionService }, { token: ExpandableRowsCount }, { token: DatagridIfExpandService }, { token: DetailService }, { token: DisplayModeService }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: Items }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
15543
- ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridRow, selector: "clr-dg-row", inputs: { item: ["clrDgItem", "item"], clrDgSelectable: "clrDgSelectable", selected: ["clrDgSelected", "selected"], expanded: ["clrDgExpanded", "expanded"], clrDgDetailOpenLabel: "clrDgDetailOpenLabel", clrDgDetailCloseLabel: "clrDgDetailCloseLabel", clrDgRowSelectionLabel: "clrDgRowSelectionLabel" }, outputs: { selectedChanged: "clrDgSelectedChange", expandedChange: "clrDgExpandedChange" }, host: { attributes: { "role": "rowgroup" }, properties: { "class.datagrid-row": "true", "class.datagrid-selected": "selected", "attr.aria-owns": "id" } }, providers: [
15553
+ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridRow, selector: "clr-dg-row", inputs: { detailDisabled: ["clrDgDetailDisabled", "detailDisabled"], detailHidden: ["clrDgDetailHidden", "detailHidden"], item: ["clrDgItem", "item"], clrDgSelectable: "clrDgSelectable", selected: ["clrDgSelected", "selected"], expanded: ["clrDgExpanded", "expanded"], clrDgDetailOpenLabel: "clrDgDetailOpenLabel", clrDgDetailCloseLabel: "clrDgDetailCloseLabel", clrDgRowSelectionLabel: "clrDgRowSelectionLabel" }, outputs: { selectedChanged: "clrDgSelectedChange", expandedChange: "clrDgExpandedChange" }, host: { attributes: { "role": "rowgroup" }, properties: { "class.datagrid-row": "true", "class.datagrid-selected": "selected", "attr.aria-owns": "id" } }, providers: [
15544
15554
  DatagridIfExpandService,
15545
15555
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15546
15556
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15547
- ], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
15557
+ ], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
15548
15558
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
15549
15559
  type: Component,
15550
15560
  args: [{ selector: 'clr-dg-row', host: {
@@ -15556,7 +15566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15556
15566
  DatagridIfExpandService,
15557
15567
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15558
15568
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15559
- ], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
15569
+ ], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<div\n class=\"datagrid-row-clickable\"\n *ngIf=\"selection.rowSelectionMode\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n>\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</div>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-checkbox-wrapper>\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n clrCheckbox\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </clr-checkbox-wrapper>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n tabindex=\"-1\"\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
15560
15570
  }], ctorParameters: function () { return [{ type: Selection }, { type: RowActionService }, { type: ExpandableRowsCount }, { type: DatagridIfExpandService }, { type: DetailService }, { type: DisplayModeService }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: ClrCommonStringsService }, { type: Items }, { type: undefined, decorators: [{
15561
15571
  type: Inject,
15562
15572
  args: [DOCUMENT]
@@ -15566,6 +15576,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15566
15576
  }], expandedChange: [{
15567
15577
  type: Output,
15568
15578
  args: ['clrDgExpandedChange']
15579
+ }], detailDisabled: [{
15580
+ type: Input,
15581
+ args: ['clrDgDetailDisabled']
15582
+ }], detailHidden: [{
15583
+ type: Input,
15584
+ args: ['clrDgDetailHidden']
15569
15585
  }], dgCells: [{
15570
15586
  type: ContentChildren,
15571
15587
  args: [ClrDatagridCell]
@@ -15856,7 +15872,7 @@ class DatagridRowRenderer {
15856
15872
  }
15857
15873
  }
15858
15874
  DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
15859
- DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail", queries: [{ propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
15875
+ DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail", queries: [{ propertyName: "expandableRow", first: true, predicate: i0.forwardRef(function () { return DatagridRowRenderer; }), descendants: true }, { propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
15860
15876
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
15861
15877
  type: Directive,
15862
15878
  args: [{
@@ -15865,6 +15881,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15865
15881
  }], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
15866
15882
  type: ContentChildren,
15867
15883
  args: [DatagridCellRenderer]
15884
+ }], expandableRow: [{
15885
+ type: ContentChild,
15886
+ args: [forwardRef(() => DatagridRowRenderer)]
15868
15887
  }] } });
15869
15888
 
15870
15889
  /*
@@ -15874,7 +15893,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15874
15893
  * The full license information can be found in LICENSE in the root directory of this project.
15875
15894
  */
15876
15895
  class ClrDatagrid {
15877
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
15896
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, keyNavigation, zone) {
15878
15897
  this.organizer = organizer;
15879
15898
  this.items = items;
15880
15899
  this.expandableRows = expandableRows;
@@ -15888,7 +15907,6 @@ class ClrDatagrid {
15888
15907
  this.el = el;
15889
15908
  this.page = page;
15890
15909
  this.commonStrings = commonStrings;
15891
- this.columnsService = columnsService;
15892
15910
  this.keyNavigation = keyNavigation;
15893
15911
  this.zone = zone;
15894
15912
  this.clrDgSingleSelectionAriaLabel = this.commonStrings.keys.singleSelectionAriaLabel;
@@ -15910,7 +15928,7 @@ class ClrDatagrid {
15910
15928
  this._subscriptions = [];
15911
15929
  const datagridId = uniqueIdFactory();
15912
15930
  this.selectAllId = 'clr-dg-select-all-' + datagridId;
15913
- this.detailService.id = datagridId;
15931
+ detailService.id = datagridId;
15914
15932
  }
15915
15933
  /**
15916
15934
  * Freezes the datagrid while data is loading
@@ -16000,30 +16018,17 @@ class ClrDatagrid {
16000
16018
  this.rows.forEach(row => {
16001
16019
  this._displayedRows.insert(row._view);
16002
16020
  });
16003
- // Try to update only when there is something cached and its open.
16004
- if (this.detailService.state && this.detailService.isOpen) {
16005
- const row = this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state));
16006
- /**
16007
- * Reopen updated row or close it
16008
- */
16009
- if (row) {
16010
- this.detailService.open(row.item, row.detailButton.nativeElement);
16011
- // always keep open when virtual scroll is available otherwise close it
16012
- }
16013
- else if (!this.hasVirtualScroller) {
16014
- // Using setTimeout to make sure the inner cycles in rows are done
16015
- setTimeout(() => {
16016
- this.detailService.close();
16021
+ this.updateDetailState();
16022
+ // retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
16023
+ if (this.hasVirtualScroller) {
16024
+ const active = this.keyNavigation.getActiveCell();
16025
+ const isFocusInsideDatagrid = this.datagrid.nativeElement.contains(document.activeElement);
16026
+ if (active && isFocusInsideDatagrid) {
16027
+ this.zone.runOutsideAngular(() => {
16028
+ setTimeout(() => this.keyNavigation.setActiveCell(active));
16017
16029
  });
16018
16030
  }
16019
16031
  }
16020
- // retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
16021
- const active = this.keyNavigation.getActiveCell();
16022
- if (active) {
16023
- this.zone.runOutsideAngular(() => {
16024
- setTimeout(() => this.keyNavigation.setActiveCell(active));
16025
- });
16026
- }
16027
16032
  }));
16028
16033
  }
16029
16034
  /**
@@ -16031,6 +16036,7 @@ class ClrDatagrid {
16031
16036
  */
16032
16037
  ngAfterViewInit() {
16033
16038
  this.keyNavigation.initializeKeyGrid(this.el.nativeElement);
16039
+ this.updateDetailState();
16034
16040
  // TODO: determine if we can get rid of provider wiring in view init so that subscriptions can be done earlier
16035
16041
  this.refresh.emit(this.stateProvider.state);
16036
16042
  this._subscriptions.push(this.stateProvider.change.subscribe(state => this.refresh.emit(state)), this.selection.change.subscribe(s => {
@@ -16114,6 +16120,29 @@ class ClrDatagrid {
16114
16120
  resize() {
16115
16121
  this.organizer.resize();
16116
16122
  }
16123
+ /**
16124
+ * Checks the state of detail panel and if it's opened then
16125
+ * find the matching row and trigger the detail panel
16126
+ */
16127
+ updateDetailState() {
16128
+ // Try to update only when there is something cached and its open.
16129
+ if (this.detailService.state && this.detailService.isOpen) {
16130
+ const row = this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state));
16131
+ /**
16132
+ * Reopen updated row or close it
16133
+ */
16134
+ if (row) {
16135
+ this.detailService.open(row.item, row.detailButton.nativeElement);
16136
+ // always keep open when virtual scroll is available otherwise close it
16137
+ }
16138
+ else if (!this.hasVirtualScroller) {
16139
+ // Using setTimeout to make sure the inner cycles in rows are done
16140
+ setTimeout(() => {
16141
+ this.detailService.close();
16142
+ });
16143
+ }
16144
+ }
16145
+ }
16117
16146
  /**
16118
16147
  * Public method to re-trigger the computation of displayed items manually
16119
16148
  */
@@ -16121,7 +16150,7 @@ class ClrDatagrid {
16121
16150
  this.items.refresh();
16122
16151
  }
16123
16152
  }
16124
- ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16153
+ ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16125
16154
  ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
16126
16155
  Selection,
16127
16156
  Sort,
@@ -16138,7 +16167,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
16138
16167
  ColumnsService,
16139
16168
  DisplayModeService,
16140
16169
  KeyNavigationGridController,
16141
- ], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }], 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<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!hasVirtualScroller\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "component", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { kind: "component", type: ClrDatagridRow, selector: "clr-dg-row", inputs: ["clrDgItem", "clrDgSelectable", "clrDgSelected", "clrDgExpanded", "clrDgDetailOpenLabel", "clrDgDetailCloseLabel", "clrDgRowSelectionLabel"], outputs: ["clrDgSelectedChange", "clrDgExpandedChange"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }, { kind: "directive", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail" }, { kind: "directive", type: ActionableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }, { kind: "directive", type: ExpandableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }] });
16170
+ ], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }], 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<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!hasVirtualScroller\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "component", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { kind: "component", type: ClrDatagridRow, selector: "clr-dg-row", inputs: ["clrDgDetailDisabled", "clrDgDetailHidden", "clrDgItem", "clrDgSelectable", "clrDgSelected", "clrDgExpanded", "clrDgDetailOpenLabel", "clrDgDetailCloseLabel", "clrDgRowSelectionLabel"], outputs: ["clrDgSelectedChange", "clrDgExpandedChange"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }, { kind: "directive", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail" }, { kind: "directive", type: ActionableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }, { kind: "directive", type: ExpandableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }] });
16142
16171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
16143
16172
  type: Component,
16144
16173
  args: [{ selector: 'clr-datagrid', providers: [
@@ -16164,7 +16193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16164
16193
  }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
16165
16194
  type: Inject,
16166
16195
  args: [DOCUMENT]
16167
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loadingMoreItems: [{
16196
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loadingMoreItems: [{
16168
16197
  type: Input,
16169
16198
  args: ['clrLoadingMoreItems']
16170
16199
  }], clrDgSingleSelectionAriaLabel: [{
@@ -16270,11 +16299,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16270
16299
  */
16271
16300
  let clrDgActionId = 0;
16272
16301
  class ClrDatagridActionOverflow {
16273
- constructor(rowActionService, commonStrings, platformId, zone, smartToggleService) {
16302
+ constructor(rowActionService, commonStrings, platformId, smartToggleService) {
16274
16303
  this.rowActionService = rowActionService;
16275
16304
  this.commonStrings = commonStrings;
16276
16305
  this.platformId = platformId;
16277
- this.zone = zone;
16278
16306
  this.smartToggleService = smartToggleService;
16279
16307
  this.openChange = new EventEmitter(false);
16280
16308
  this.popoverId = uniqueIdFactory();
@@ -16286,10 +16314,10 @@ class ClrDatagridActionOverflow {
16286
16314
  };
16287
16315
  this._open = false;
16288
16316
  this.subscriptions = [];
16289
- this.rowActionService.register();
16290
- this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
16317
+ rowActionService.register();
16318
+ this.subscriptions.push(smartToggleService.openChange.subscribe(openState => {
16291
16319
  this.open = openState;
16292
- }), this.smartToggleService.popoverVisible.subscribe(visible => {
16320
+ }), smartToggleService.popoverVisible.subscribe(visible => {
16293
16321
  if (visible) {
16294
16322
  this.initializeFocus();
16295
16323
  }
@@ -16326,7 +16354,7 @@ class ClrDatagridActionOverflow {
16326
16354
  }
16327
16355
  }
16328
16356
  }
16329
- ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16357
+ ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16330
16358
  ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
16331
16359
  <button
16332
16360
  tabindex="-1"
@@ -16396,7 +16424,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16396
16424
  }], ctorParameters: function () { return [{ type: RowActionService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
16397
16425
  type: Inject,
16398
16426
  args: [PLATFORM_ID]
16399
- }] }, { type: i0.NgZone }, { type: ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{
16427
+ }] }, { type: ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{
16400
16428
  type: Input,
16401
16429
  args: ['clrDgActionOverflowButtonLabel']
16402
16430
  }], openChange: [{
@@ -16851,8 +16879,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16851
16879
  class DatagridDetailRegisterer {
16852
16880
  constructor(expandableRowsCount) {
16853
16881
  this.expandableRowsCount = expandableRowsCount;
16854
- if (this.expandableRowsCount) {
16855
- this.expandableRowsCount.register();
16882
+ if (expandableRowsCount) {
16883
+ expandableRowsCount.register();
16856
16884
  }
16857
16885
  }
16858
16886
  ngOnDestroy() {
@@ -16979,13 +17007,12 @@ const COLUMN_STATE_PROVIDER = {
16979
17007
  class ClrDatagridHideableColumn {
16980
17008
  constructor(titleTemplateRef, viewContainerRef, columnsService, columnState) {
16981
17009
  this.titleTemplateRef = titleTemplateRef;
16982
- this.viewContainerRef = viewContainerRef;
16983
17010
  this.columnsService = columnsService;
16984
17011
  this.columnState = columnState;
16985
17012
  this.hiddenChange = new EventEmitter();
16986
17013
  this.subscriptions = [];
16987
- this.viewContainerRef.createEmbeddedView(this.titleTemplateRef);
16988
- if (!this.columnState) {
17014
+ viewContainerRef.createEmbeddedView(titleTemplateRef);
17015
+ if (!columnState) {
16989
17016
  throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');
16990
17017
  }
16991
17018
  }
@@ -17070,7 +17097,7 @@ class ClrIfDetail {
17070
17097
  this.stateChange = new EventEmitter(null);
17071
17098
  this.subscriptions = [];
17072
17099
  this.skip = false; // This keeps us from resetting the input and calling the toggle twice
17073
- this.detailService.enabled = true;
17100
+ detailService.enabled = true;
17074
17101
  }
17075
17102
  set state(model) {
17076
17103
  if (!this.skip) {
@@ -17208,7 +17235,7 @@ class ClrDatagridPagination {
17208
17235
  this.commonStrings = commonStrings;
17209
17236
  this.detailService = detailService;
17210
17237
  this.currentChanged = new EventEmitter(false);
17211
- this.page.activated = true;
17238
+ page.activated = true;
17212
17239
  }
17213
17240
  /**
17214
17241
  * Page size
@@ -17344,7 +17371,7 @@ class ClrDatagridPagination {
17344
17371
  * Set the input's value to the new current page. This is needed because the code
17345
17372
  * above may have changed the value from what the user entered in.
17346
17373
  */
17347
- this.currentPageInputRef.nativeElement.value = this.page.current;
17374
+ this.currentPageInputRef.nativeElement.value = this.page.current.toString();
17348
17375
  }
17349
17376
  }
17350
17377
  ClrDatagridPagination.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridPagination, deps: [{ token: Page }, { token: ClrCommonStringsService }, { token: DetailService }], target: i0.ɵɵFactoryTarget.Component });
@@ -17693,10 +17720,10 @@ class ClrDatagridVirtualScrollDirective {
17693
17720
  this.cdkVirtualForInputs = {
17694
17721
  cdkVirtualForTrackBy: index => index,
17695
17722
  };
17696
- this.items.smartenUp();
17697
- this.datagrid.hasVirtualScroller = true;
17698
- this.datagrid.detailService.preventFocusScroll = true;
17699
- this.datagridElementRef = this.datagrid.el;
17723
+ items.smartenUp();
17724
+ datagrid.hasVirtualScroller = true;
17725
+ datagrid.detailService.preventFocusScroll = true;
17726
+ this.datagridElementRef = datagrid.el;
17700
17727
  // default
17701
17728
  this.cdkVirtualForTemplateCacheSize = 20;
17702
17729
  this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
@@ -17891,7 +17918,6 @@ class DatagridHeaderRenderer {
17891
17918
  constructor(el, renderer, organizer, domAdapter, columnResizerService, columnsService, columnState) {
17892
17919
  this.el = el;
17893
17920
  this.renderer = renderer;
17894
- this.organizer = organizer;
17895
17921
  this.domAdapter = domAdapter;
17896
17922
  this.columnResizerService = columnResizerService;
17897
17923
  this.columnsService = columnsService;
@@ -17903,7 +17929,7 @@ class DatagridHeaderRenderer {
17903
17929
  this.widthSet = false;
17904
17930
  this.autoSet = false;
17905
17931
  this.subscriptions = [];
17906
- this.subscriptions.push(this.organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
17932
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
17907
17933
  }
17908
17934
  ngOnDestroy() {
17909
17935
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -18049,14 +18075,13 @@ const domAdapterFactory = (platformId) => {
18049
18075
  // Fixes build error
18050
18076
  // @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)
18051
18077
  class DatagridMainRenderer {
18052
- constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18078
+ constructor(datagrid, organizer, items, page, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18079
+ this.datagrid = datagrid;
18053
18080
  this.organizer = organizer;
18054
18081
  this.items = items;
18055
18082
  this.page = page;
18056
- this.domAdapter = domAdapter;
18057
18083
  this.el = el;
18058
18084
  this.renderer = renderer;
18059
- this.detailService = detailService;
18060
18085
  this.tableSizeService = tableSizeService;
18061
18086
  this.columnsService = columnsService;
18062
18087
  this.ngZone = ngZone;
@@ -18070,16 +18095,14 @@ class DatagridMainRenderer {
18070
18095
  * 2) When rows are lazily loaded for the first time
18071
18096
  */
18072
18097
  this.columnsSizesStable = false;
18073
- this.subscriptions.push(this.organizer
18074
- .filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS)
18075
- .subscribe(() => this.computeHeadersWidth()));
18076
- this.subscriptions.push(this.page.sizeChange.subscribe(() => {
18098
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth()));
18099
+ this.subscriptions.push(page.sizeChange.subscribe(() => {
18077
18100
  if (this._heightSet) {
18078
18101
  this.resetDatagridHeight();
18079
18102
  }
18080
18103
  }));
18081
- this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18082
- this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18104
+ this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18105
+ this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18083
18106
  }
18084
18107
  ngOnInit() {
18085
18108
  this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
@@ -18099,7 +18122,8 @@ class DatagridMainRenderer {
18099
18122
  this.tableSizeService.table = this.el;
18100
18123
  }
18101
18124
  ngAfterViewChecked() {
18102
- if (this.shouldStabilizeColumns) {
18125
+ const datagridIsVisible = this.checkAndUpdateVisibility();
18126
+ if (this.shouldStabilizeColumns && datagridIsVisible) {
18103
18127
  this.stabilizeColumns();
18104
18128
  }
18105
18129
  if (this.shouldComputeHeight()) {
@@ -18207,6 +18231,7 @@ class DatagridMainRenderer {
18207
18231
  this.rows.forEach(row => {
18208
18232
  if (row?.cells.length === this.columnsService.columns.length) {
18209
18233
  row.cells.get(columnIndex).setWidth(state);
18234
+ row.expandableRow?.cells.get(columnIndex)?.setWidth(state);
18210
18235
  }
18211
18236
  });
18212
18237
  break;
@@ -18215,6 +18240,7 @@ class DatagridMainRenderer {
18215
18240
  this.rows.forEach(row => {
18216
18241
  if (row.cells && row.cells.length) {
18217
18242
  row.cells.get(columnIndex).setHidden(state);
18243
+ row.expandableRow?.cells.get(columnIndex)?.setHidden(state);
18218
18244
  }
18219
18245
  });
18220
18246
  this.keyNavigation.resetKeyGrid();
@@ -18224,6 +18250,7 @@ class DatagridMainRenderer {
18224
18250
  this.headers.get(columnIndex).setHidden(state);
18225
18251
  this.rows.forEach(row => {
18226
18252
  row.setCellsState();
18253
+ row.expandableRow?.setCellsState();
18227
18254
  });
18228
18255
  }
18229
18256
  break;
@@ -18248,21 +18275,31 @@ class DatagridMainRenderer {
18248
18275
  this.columnsSizesStable = true;
18249
18276
  }
18250
18277
  }
18278
+ checkAndUpdateVisibility() {
18279
+ if (this.el.nativeElement.offsetParent) {
18280
+ this.datagrid.datagrid.nativeElement.style.visibility = 'visible';
18281
+ return true;
18282
+ }
18283
+ else {
18284
+ this.datagrid.datagrid.nativeElement.style.visibility = 'hidden';
18285
+ return false;
18286
+ }
18287
+ }
18251
18288
  }
18252
- 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 });
18253
- 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, descendants: true }], ngImport: i0 });
18289
+ DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: ClrDatagrid }, { token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18290
+ DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer }], ngImport: i0 });
18254
18291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
18255
18292
  type: Directive,
18256
18293
  args: [{
18257
18294
  selector: 'clr-datagrid',
18258
18295
  providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],
18259
18296
  }]
18260
- }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: DomAdapter }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18297
+ }], ctorParameters: function () { return [{ type: ClrDatagrid }, { type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18261
18298
  type: ContentChildren,
18262
18299
  args: [DatagridHeaderRenderer]
18263
18300
  }], rows: [{
18264
18301
  type: ContentChildren,
18265
- args: [DatagridRowRenderer, { descendants: true }]
18302
+ args: [DatagridRowRenderer]
18266
18303
  }] } });
18267
18304
 
18268
18305
  /*
@@ -18720,7 +18757,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
18720
18757
  }] } });
18721
18758
  function eventIsInputEvent(event) {
18722
18759
  const targetElement = event?.target;
18723
- return targetElement?.tagName === 'INPUT';
18760
+ return targetElement?.tagName
18761
+ ? ['INPUT', 'TEXTAREA', 'BUTTON', 'A', 'SELECT', 'OPTION'].includes(targetElement.tagName)
18762
+ : false;
18724
18763
  }
18725
18764
 
18726
18765
  /*
@@ -18893,8 +18932,8 @@ class RecursiveChildren {
18893
18932
  this.featuresService = featuresService;
18894
18933
  this.expandService = expandService;
18895
18934
  if (expandService) {
18896
- this.subscription = this.expandService.expandChange.subscribe(value => {
18897
- if (!value && this.parent && !this.featuresService.eager && this.featuresService.recursion) {
18935
+ this.subscription = expandService.expandChange.subscribe(value => {
18936
+ if (!value && this.parent && !featuresService.eager && featuresService.recursion) {
18898
18937
  // In the case of lazy-loading recursive trees, we clear the children on collapse.
18899
18938
  // This is better in case they change between two user interaction, and that way
18900
18939
  // the app itself can decide whether to cache them or not.
@@ -19508,7 +19547,7 @@ class ClrTreeNode {
19508
19547
  this.typeAheadKeyBuffer = '';
19509
19548
  this.typeAheadKeyEvent = new Subject();
19510
19549
  this.subscriptions = [];
19511
- if (this.featuresService.recursion) {
19550
+ if (featuresService.recursion) {
19512
19551
  // I'm completely stuck, we have to hack into private properties until either
19513
19552
  // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998
19514
19553
  // are fixed
@@ -19690,7 +19729,7 @@ class ClrTreeNode {
19690
19729
  }
19691
19730
  setTabIndex(value) {
19692
19731
  this.contentContainerTabindex = value;
19693
- this.contentContainer.nativeElement.setAttribute('tabindex', value);
19732
+ this.contentContainer.nativeElement.setAttribute('tabindex', value.toString());
19694
19733
  }
19695
19734
  checkTabIndex(nodeId) {
19696
19735
  if (isPlatformBrowser(this.platformId) && this.nodeId !== nodeId && this.contentContainerTabindex !== -1) {
@@ -19749,7 +19788,7 @@ class ClrTreeNode {
19749
19788
  }
19750
19789
  }
19751
19790
  ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTreeNode, deps: [{ token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
19752
- ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19791
+ ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19753
19792
  trigger('toggleChildrenAnim', [
19754
19793
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19755
19794
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19769,7 +19808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19769
19808
  ], host: {
19770
19809
  '[class.clr-tree-node]': 'true',
19771
19810
  '[class.disabled]': 'this._model.disabled',
19772
- }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19811
+ }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19773
19812
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
19774
19813
  type: Inject,
19775
19814
  args: [PLATFORM_ID]
@@ -19816,18 +19855,21 @@ function trimAndLowerCase(value) {
19816
19855
  * The full license information can be found in LICENSE in the root directory of this project.
19817
19856
  */
19818
19857
  class ClrTree {
19819
- constructor(featuresService, focusManagerService, { nativeElement }, renderer, ngZone) {
19858
+ constructor(featuresService, focusManagerService, renderer, el, ngZone) {
19820
19859
  this.featuresService = featuresService;
19821
19860
  this.focusManagerService = focusManagerService;
19861
+ this.renderer = renderer;
19862
+ this.el = el;
19822
19863
  this.subscriptions = [];
19823
- const subscription = ngZone.runOutsideAngular(() => fromEvent(nativeElement, 'focusin').subscribe((event) => {
19824
- if (event.target === nativeElement) {
19864
+ this._isMultiSelectable = false;
19865
+ const subscription = ngZone.runOutsideAngular(() => fromEvent(el.nativeElement, 'focusin').subscribe((event) => {
19866
+ if (event.target === el.nativeElement) {
19825
19867
  // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.
19826
19868
  // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.
19827
- this.focusManagerService.focusFirstVisibleNode();
19869
+ focusManagerService.focusFirstVisibleNode();
19828
19870
  // when the first child gets focus,
19829
19871
  // tree should no longer have tabindex of 0.
19830
- renderer.removeAttribute(nativeElement, 'tabindex');
19872
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
19831
19873
  }
19832
19874
  }));
19833
19875
  this.subscriptions.push(subscription);
@@ -19836,17 +19878,28 @@ class ClrTree {
19836
19878
  this.featuresService.eager = !value;
19837
19879
  }
19838
19880
  get isMultiSelectable() {
19839
- return this.featuresService.selectable && this.rootNodes.length > 0;
19881
+ return this._isMultiSelectable;
19840
19882
  }
19841
19883
  ngAfterContentInit() {
19842
19884
  this.setRootNodes();
19843
19885
  this.subscriptions.push(this.rootNodes.changes.subscribe(() => {
19886
+ this.setMultiSelectable();
19844
19887
  this.setRootNodes();
19845
19888
  }));
19846
19889
  }
19847
19890
  ngOnDestroy() {
19848
19891
  this.subscriptions.forEach(sub => sub.unsubscribe());
19849
19892
  }
19893
+ setMultiSelectable() {
19894
+ if (this.featuresService.selectable && this.rootNodes.length > 0) {
19895
+ this._isMultiSelectable = true;
19896
+ this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');
19897
+ }
19898
+ else {
19899
+ this._isMultiSelectable = false;
19900
+ this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');
19901
+ }
19902
+ }
19850
19903
  setRootNodes() {
19851
19904
  // if node has no parent, it's a root node
19852
19905
  // for recursive tree, this.rootNodes registers also nested children
@@ -19854,8 +19907,8 @@ class ClrTree {
19854
19907
  this.focusManagerService.rootNodeModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);
19855
19908
  }
19856
19909
  }
19857
- 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 });
19858
- ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"", "attr.aria-multiselectable": "isMultiSelectable" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
19910
+ ClrTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTree, deps: [{ token: TreeFeaturesService }, { token: TreeFocusManagerService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
19911
+ ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
19859
19912
  <ng-content></ng-content>
19860
19913
  <clr-recursive-children
19861
19914
  *ngIf="featuresService.recursion"
@@ -19877,10 +19930,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19877
19930
  host: {
19878
19931
  tabindex: '0',
19879
19932
  '[attr.role]': '"tree"',
19880
- '[attr.aria-multiselectable]': 'isMultiSelectable',
19881
19933
  },
19882
19934
  }]
19883
- }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
19935
+ }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
19884
19936
  type: ContentChildren,
19885
19937
  args: [ClrTreeNode]
19886
19938
  }], lazy: [{
@@ -19967,7 +20019,7 @@ class DropdownFocusHandler {
19967
20019
  this._unlistenFuncs = [];
19968
20020
  this.resetChildren();
19969
20021
  this.moveToFirstItemWhenOpen();
19970
- if (!this.parent) {
20022
+ if (!parent) {
19971
20023
  this.handleRootFocus();
19972
20024
  }
19973
20025
  }
@@ -20165,11 +20217,10 @@ class ClrDropdown {
20165
20217
  this.parent = parent;
20166
20218
  this.toggleService = toggleService;
20167
20219
  this.focusHandler = focusHandler;
20168
- this.cdr = cdr;
20169
20220
  this.isMenuClosable = true;
20170
20221
  this.subscriptions = [];
20171
- this.subscriptions.push(dropdownService.changes.subscribe(value => (this.toggleService.open = value)));
20172
- this.subscriptions.push(toggleService.openChange.subscribe(() => this.cdr.markForCheck()));
20222
+ this.subscriptions.push(dropdownService.changes.subscribe(value => (toggleService.open = value)));
20223
+ this.subscriptions.push(toggleService.openChange.subscribe(() => cdr.markForCheck()));
20173
20224
  }
20174
20225
  ngOnDestroy() {
20175
20226
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -21795,12 +21846,12 @@ class ClrHeader {
21795
21846
  this.isNavLevel2OnPage = false;
21796
21847
  this.openNavLevel = null;
21797
21848
  this.responsiveNavCodes = ResponsiveNavCodes;
21798
- this._subscription = this.responsiveNavService.registeredNavs.subscribe({
21849
+ this._subscription = responsiveNavService.registeredNavs.subscribe({
21799
21850
  next: (navLevelList) => {
21800
21851
  this.initializeNavTriggers(navLevelList);
21801
21852
  },
21802
21853
  });
21803
- this._subscription.add(this.responsiveNavService.navControl
21854
+ this._subscription.add(responsiveNavService.navControl
21804
21855
  .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
21805
21856
  .subscribe(() => {
21806
21857
  this.openNavLevel = null;
@@ -21933,18 +21984,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
21933
21984
  * This software is released under MIT license.
21934
21985
  * The full license information can be found in LICENSE in the root directory of this project.
21935
21986
  */
21936
- const createCdsCloseButton = (document, ariaLabel) => {
21937
- const cdsCloseButton = document.createElement('cds-internal-close-button');
21938
- cdsCloseButton.setAttribute('icon-size', '32');
21939
- cdsCloseButton.setAttribute('aria-label', ariaLabel);
21940
- cdsCloseButton.setAttribute('aria-hidden', 'true');
21941
- cdsCloseButton.setAttribute('type', 'button');
21987
+ const createCloseButton = (document, ariaLabel) => {
21988
+ const closeButton = document.createElement('button');
21989
+ closeButton.setAttribute('aria-label', ariaLabel);
21990
+ closeButton.setAttribute('aria-hidden', 'true');
21991
+ closeButton.innerHTML = `
21992
+ <cds-icon
21993
+ inner-offset="1"
21994
+ shape="close"
21995
+ size="32"
21996
+ </cds-icon>
21997
+ `;
21942
21998
  /**
21943
21999
  * The button is hidden by default based on our Desktop-first approach.
21944
22000
  */
21945
- cdsCloseButton.setAttribute('hidden', 'true');
21946
- cdsCloseButton.className = 'clr-nav-close';
21947
- return cdsCloseButton;
22001
+ closeButton.setAttribute('hidden', 'true');
22002
+ closeButton.className = 'clr-nav-close';
22003
+ return closeButton;
21948
22004
  };
21949
22005
  class ClrNavLevel {
21950
22006
  constructor(platformId, cdkTrapFocus, responsiveNavService, elementRef, renderer, injector) {
@@ -21996,7 +22052,7 @@ class ClrNavLevel {
21996
22052
  this.addNavClass(this.level);
21997
22053
  }
21998
22054
  ngAfterViewInit() {
21999
- const closeButton = createCdsCloseButton(this._document, this.closeButtonAriaLabel);
22055
+ const closeButton = createCloseButton(this._document, this.closeButtonAriaLabel);
22000
22056
  this.renderer.listen(closeButton, 'click', this.close.bind(this));
22001
22057
  this.renderer.insertBefore(this.elementRef.nativeElement, closeButton, this.elementRef.nativeElement.firstChild); // Adding the button at the top of the nav
22002
22058
  if (this._document.body.clientWidth < LARGE_BREAKPOINT) {
@@ -22412,8 +22468,6 @@ class ClrTabLink {
22412
22468
  this.ifActiveService = ifActiveService;
22413
22469
  this.id = id;
22414
22470
  this.el = el;
22415
- this.cfr = cfr;
22416
- this.viewContainerRef = viewContainerRef;
22417
22471
  this.tabsService = tabsService;
22418
22472
  this.tabsId = tabsId;
22419
22473
  if (!this.tabLinkId) {
@@ -22422,9 +22476,9 @@ class ClrTabLink {
22422
22476
  // Tab links can be rendered in one of two places: in the main area or inside the overflow dropdown menu.
22423
22477
  // Here, we create a container so that its template can be used to create embeddedView on the fly.
22424
22478
  // See TabsService's renderView() method and how it's used in Tabs class for an example.
22425
- const factory = this.cfr.resolveComponentFactory(TemplateRefContainer);
22426
- this.templateRefContainer = this.viewContainerRef.createComponent(factory, undefined, undefined, [
22427
- [this.el.nativeElement],
22479
+ const factory = cfr.resolveComponentFactory(TemplateRefContainer);
22480
+ this.templateRefContainer = viewContainerRef.createComponent(factory, undefined, undefined, [
22481
+ [el.nativeElement],
22428
22482
  ]).instance;
22429
22483
  }
22430
22484
  get inOverflow() {
@@ -23006,7 +23060,7 @@ class ClrVerticalNav {
23006
23060
  this._navGroupRegistrationService = _navGroupRegistrationService;
23007
23061
  this.commonStrings = commonStrings;
23008
23062
  this._collapsedChanged = new EventEmitter(true);
23009
- this._sub = this._navService.collapsedChanged.subscribe(value => {
23063
+ this._sub = _navService.collapsedChanged.subscribe(value => {
23010
23064
  this._collapsedChanged.emit(value);
23011
23065
  });
23012
23066
  }
@@ -23094,27 +23148,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23094
23148
  const EXPANDED_STATE = 'expanded';
23095
23149
  const COLLAPSED_STATE = 'collapsed';
23096
23150
  class ClrVerticalNavGroup {
23097
- constructor(_itemExpand, _navGroupRegistrationService, _navGroupService, _navService, commonStrings) {
23151
+ constructor(_itemExpand, _navGroupRegistrationService, navGroupService, _navService, commonStrings) {
23098
23152
  this._itemExpand = _itemExpand;
23099
23153
  this._navGroupRegistrationService = _navGroupRegistrationService;
23100
- this._navGroupService = _navGroupService;
23101
23154
  this._navService = _navService;
23102
23155
  this.commonStrings = commonStrings;
23103
23156
  this.expandedChange = new EventEmitter(true);
23104
23157
  this.wasExpanded = false;
23105
23158
  this._subscriptions = [];
23106
23159
  this._expandAnimationState = COLLAPSED_STATE;
23107
- this._navGroupRegistrationService.registerNavGroup();
23160
+ _navGroupRegistrationService.registerNavGroup();
23108
23161
  // FIXME: This subscription handles a corner case
23109
23162
  // Vertical Nav collapse requires the animation to run first and then
23110
23163
  // remove the nodes from the DOM. If the user directly sets the input
23111
23164
  // on the clrIfExpanded directive, we have no chance to run the animation
23112
23165
  // and wait for it to complete. This subscription makes sure that the
23113
23166
  // animation states are correct for that edge case.
23114
- this._subscriptions.push(this._itemExpand.expandChange.subscribe(value => {
23167
+ this._subscriptions.push(_itemExpand.expandChange.subscribe(value => {
23115
23168
  if (value && this.expandAnimationState === COLLAPSED_STATE) {
23116
- if (this._navService.collapsed) {
23117
- this._navService.collapsed = false;
23169
+ if (_navService.collapsed) {
23170
+ _navService.collapsed = false;
23118
23171
  }
23119
23172
  this.expandAnimationState = EXPANDED_STATE;
23120
23173
  }
@@ -23124,7 +23177,7 @@ class ClrVerticalNavGroup {
23124
23177
  }));
23125
23178
  // 1. If the nav is collapsing, close the open nav group + save its state
23126
23179
  // 2. If the nav is expanding, expand the nav group if the previous state was expanded
23127
- this._subscriptions.push(this._navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23180
+ this._subscriptions.push(_navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23128
23181
  if (goingToCollapse && this.expanded) {
23129
23182
  this.wasExpanded = true;
23130
23183
  this.expandAnimationState = COLLAPSED_STATE;
@@ -23135,7 +23188,7 @@ class ClrVerticalNavGroup {
23135
23188
  }
23136
23189
  }));
23137
23190
  // If a link is clicked, expand the nav group
23138
- this._subscriptions.push(this._navGroupService.expandChange.subscribe((expand) => {
23191
+ this._subscriptions.push(navGroupService.expandChange.subscribe((expand) => {
23139
23192
  if (expand && !this.expanded) {
23140
23193
  this.expandGroup();
23141
23194
  }
@@ -23264,7 +23317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23264
23317
  class ClrVerticalNavIcon {
23265
23318
  constructor(_verticalNavIconService) {
23266
23319
  this._verticalNavIconService = _verticalNavIconService;
23267
- this._verticalNavIconService.registerIcon();
23320
+ _verticalNavIconService.registerIcon();
23268
23321
  }
23269
23322
  ngOnDestroy() {
23270
23323
  this._verticalNavIconService.unregisterIcon();
@@ -23428,9 +23481,10 @@ class ClrModalConfigurationService {
23428
23481
  }
23429
23482
  }
23430
23483
  ClrModalConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23431
- ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService });
23484
+ ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, providedIn: 'root' });
23432
23485
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, decorators: [{
23433
- type: Injectable
23486
+ type: Injectable,
23487
+ args: [{ providedIn: 'root' }]
23434
23488
  }] });
23435
23489
 
23436
23490
  /*
@@ -23489,6 +23543,13 @@ class ClrModal {
23489
23543
  this._openChanged.emit(true);
23490
23544
  this.modalStackService.trackModalOpen(this);
23491
23545
  }
23546
+ backdropClick() {
23547
+ if (this.staticBackdrop) {
23548
+ this.title.nativeElement.focus();
23549
+ return;
23550
+ }
23551
+ this.close();
23552
+ }
23492
23553
  close() {
23493
23554
  if (this.stopClose) {
23494
23555
  this.altClose.emit(false);
@@ -23508,7 +23569,7 @@ class ClrModal {
23508
23569
  }
23509
23570
  }
23510
23571
  ClrModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModal, deps: [{ token: ScrollingService }, { token: ClrCommonStringsService }, { token: ModalStackService }, { token: ClrModalConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
23511
- ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, usesOnChanges: 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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }], viewProviders: [ScrollingService], animations: [
23572
+ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }], usesOnChanges: 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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }], viewProviders: [ScrollingService], animations: [
23512
23573
  trigger('fadeMove', [
23513
23574
  transition('* => fadeDown', [
23514
23575
  style({ opacity: 0, transform: 'translate(0, -25%)' }),
@@ -23543,8 +23604,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23543
23604
  transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
23544
23605
  transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
23545
23606
  ]),
23546
- ], 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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
23547
- }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { _open: [{
23607
+ ], 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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title id=\"{{modalId}}\" cdkFocusInitial tabindex=\"-1\">\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
23608
+ }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
23609
+ type: ViewChild,
23610
+ args: ['title']
23611
+ }], _open: [{
23548
23612
  type: Input,
23549
23613
  args: ['clrModalOpen']
23550
23614
  }, {
@@ -23602,11 +23666,11 @@ class ClrModalBody {
23602
23666
  this.unlisteners = [];
23603
23667
  ngZone.runOutsideAngular(() => {
23604
23668
  this.observer = new ResizeObserver(() => this.addOrRemoveTabIndex());
23605
- this.observer.observe(this.host.nativeElement);
23606
- this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
23669
+ this.observer.observe(host.nativeElement);
23670
+ this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
23607
23671
  // set the tabindex binding back when click is completed with mouseup
23608
23672
  this.addOrRemoveTabIndex();
23609
- }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
23673
+ }), renderer.listen(host.nativeElement, 'mousedown', () => {
23610
23674
  // tabindex = 0 binding should be removed
23611
23675
  // so it won't be focused when click starts with mousedown
23612
23676
  this.removeTabIndex();
@@ -23659,14 +23723,13 @@ class ClrModalModule {
23659
23723
  }
23660
23724
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23661
23725
  ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrIconModule] });
23662
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, providers: [ClrModalConfigurationService], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23726
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23663
23727
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
23664
23728
  type: NgModule,
23665
23729
  args: [{
23666
23730
  imports: [CommonModule, CdkTrapFocusModule, ClrIconModule],
23667
23731
  declarations: [CLR_MODAL_DIRECTIVES],
23668
23732
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule],
23669
- providers: [ClrModalConfigurationService],
23670
23733
  }]
23671
23734
  }], ctorParameters: function () { return []; } });
23672
23735
 
@@ -23705,7 +23768,9 @@ class ClrSidePanel {
23705
23768
  this.modal.close();
23706
23769
  }
23707
23770
  documentClick(event) {
23708
- if (!this.element.nativeElement.contains(event.target) && this.modal._open && !this.configuration.backdrop) {
23771
+ if (!this.element.nativeElement.contains(event.target) &&
23772
+ this.modal._open &&
23773
+ !this.configuration.backdrop) {
23709
23774
  this.modal.close();
23710
23775
  }
23711
23776
  }
@@ -23822,7 +23887,6 @@ class ClrSignpostContent extends AbstractPopover {
23822
23887
  constructor(injector, parentHost, commonStrings, signpostIdService, signpostFocusManager, platformId, document) {
23823
23888
  super(injector, parentHost);
23824
23889
  this.commonStrings = commonStrings;
23825
- this.signpostIdService = signpostIdService;
23826
23890
  this.signpostFocusManager = signpostFocusManager;
23827
23891
  this.platformId = platformId;
23828
23892
  this.signpostContentId = uniqueIdFactory();
@@ -23832,7 +23896,7 @@ class ClrSignpostContent extends AbstractPopover {
23832
23896
  // Defaults
23833
23897
  this.position = 'right-middle';
23834
23898
  this.closeOnOutsideClick = true;
23835
- this.signpostIdService.setId(this.signpostContentId);
23899
+ signpostIdService.setId(this.signpostContentId);
23836
23900
  this.document = document;
23837
23901
  }
23838
23902
  /*********
@@ -24217,11 +24281,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
24217
24281
  class ClrTooltipTrigger {
24218
24282
  constructor(toggleService, tooltipIdService, tooltipMouseService) {
24219
24283
  this.toggleService = toggleService;
24220
- this.tooltipIdService = tooltipIdService;
24221
24284
  this.tooltipMouseService = tooltipMouseService;
24222
24285
  this.subs = [];
24223
24286
  // The aria-described by comes from the id of content. It
24224
- this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24287
+ this.subs.push(tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24225
24288
  }
24226
24289
  ngOnDestroy() {
24227
24290
  this.subs.forEach(sub => sub.unsubscribe());
@@ -25333,7 +25396,7 @@ class WizardNavigationService {
25333
25396
  * @memberof WizardNavigationService
25334
25397
  */
25335
25398
  this._cancelWizard = new Subject();
25336
- this.previousButtonSubscription = this.buttonService.previousBtnClicked.subscribe(() => {
25399
+ this.previousButtonSubscription = buttonService.previousBtnClicked.subscribe(() => {
25337
25400
  const currentPage = this.currentPage;
25338
25401
  if (this.currentPageIsFirst || currentPage.previousStepDisabled) {
25339
25402
  return;
@@ -25343,21 +25406,21 @@ class WizardNavigationService {
25343
25406
  this.previous();
25344
25407
  }
25345
25408
  });
25346
- this.nextButtonSubscription = this.buttonService.nextBtnClicked.subscribe(() => {
25409
+ this.nextButtonSubscription = buttonService.nextBtnClicked.subscribe(() => {
25347
25410
  this.checkAndCommitCurrentPage('next');
25348
25411
  });
25349
- this.dangerButtonSubscription = this.buttonService.dangerBtnClicked.subscribe(() => {
25412
+ this.dangerButtonSubscription = buttonService.dangerBtnClicked.subscribe(() => {
25350
25413
  this.checkAndCommitCurrentPage('danger');
25351
25414
  });
25352
- this.finishButtonSubscription = this.buttonService.finishBtnClicked.subscribe(() => {
25415
+ this.finishButtonSubscription = buttonService.finishBtnClicked.subscribe(() => {
25353
25416
  this.checkAndCommitCurrentPage('finish');
25354
25417
  });
25355
- this.customButtonSubscription = this.buttonService.customBtnClicked.subscribe((type) => {
25418
+ this.customButtonSubscription = buttonService.customBtnClicked.subscribe((type) => {
25356
25419
  if (!this.wizardStopNavigation) {
25357
25420
  this.currentPage.customButtonClicked.emit(type);
25358
25421
  }
25359
25422
  });
25360
- this.cancelButtonSubscription = this.buttonService.cancelBtnClicked.subscribe(() => {
25423
+ this.cancelButtonSubscription = buttonService.cancelBtnClicked.subscribe(() => {
25361
25424
  if (this.wizardStopNavigation) {
25362
25425
  return;
25363
25426
  }
@@ -25368,7 +25431,7 @@ class WizardNavigationService {
25368
25431
  this.cancel();
25369
25432
  }
25370
25433
  });
25371
- this.pagesResetSubscription = this.pageCollection.pagesReset.subscribe(() => {
25434
+ this.pagesResetSubscription = pageCollection.pagesReset.subscribe(() => {
25372
25435
  this.setFirstPageCurrent();
25373
25436
  });
25374
25437
  }
@@ -26705,15 +26768,12 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
26705
26768
  (click)="click()"
26706
26769
  [attr.disabled]="isDisabled ? '' : null"
26707
26770
  >
26708
- <span class="clr-wizard-stepnav-link-suffix">
26709
- <cds-icon
26710
- shape="error-standard"
26711
- status="danger"
26712
- class="clr-wizard-stepnav-item-error-icon"
26713
- *ngIf="hasError"
26714
- ></cds-icon>
26715
- <ng-content *ngIf="!hasError"></ng-content>
26716
- </span>
26771
+ <div class="clr-wizard-stepnav-link-icon">
26772
+ <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26773
+ <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
26774
+ </div>
26775
+
26776
+ <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26717
26777
  <span class="clr-wizard-stepnav-link-title">
26718
26778
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26719
26779
  </span>
@@ -26732,15 +26792,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
26732
26792
  (click)="click()"
26733
26793
  [attr.disabled]="isDisabled ? '' : null"
26734
26794
  >
26735
- <span class="clr-wizard-stepnav-link-suffix">
26736
- <cds-icon
26737
- shape="error-standard"
26738
- status="danger"
26739
- class="clr-wizard-stepnav-item-error-icon"
26740
- *ngIf="hasError"
26741
- ></cds-icon>
26742
- <ng-content *ngIf="!hasError"></ng-content>
26743
- </span>
26795
+ <div class="clr-wizard-stepnav-link-icon">
26796
+ <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26797
+ <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
26798
+ </div>
26799
+
26800
+ <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26744
26801
  <span class="clr-wizard-stepnav-link-title">
26745
26802
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26746
26803
  </span>
@@ -27207,7 +27264,7 @@ class ClrWizard {
27207
27264
  }
27208
27265
  }
27209
27266
  ClrWizard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: WizardNavigationService }, { token: PageCollectionService }, { token: ButtonHubService }, { token: HeaderActionService }, { token: i0.ElementRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
27210
- ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\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: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById", "clrModalOverrideScrollService"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
27267
+ ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\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: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById", "clrModalOverrideScrollService"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
27211
27268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
27212
27269
  type: Component,
27213
27270
  args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
@@ -27216,7 +27273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
27216
27273
  '[class.wizard-lg]': "size == 'lg'",
27217
27274
  '[class.wizard-xl]': "size == 'xl'",
27218
27275
  '[class.lastPage]': 'navService.currentPageIsLast',
27219
- }, 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
27276
+ }, 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\" [attr.aria-label]=\"stepnavAriaLabel\">\n <div class=\"clr-wizard-title\" id=\"{{wizardId}}\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-title\" role=\"heading\" [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\">\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
27220
27277
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
27221
27278
  type: Inject,
27222
27279
  args: [PLATFORM_ID]
@@ -27490,7 +27547,7 @@ const CLR_WIZARD_DIRECTIVES = [
27490
27547
  ];
27491
27548
  class ClrWizardModule {
27492
27549
  constructor() {
27493
- ClarityIcons.addIcons(errorStandardIcon);
27550
+ ClarityIcons.addIcons(errorStandardIcon, successStandardIcon);
27494
27551
  }
27495
27552
  }
27496
27553
  ClrWizardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -27925,5 +27982,5 @@ const CLR_MENU_POSITIONS = [
27925
27982
  * Generated bundle index. Do not edit.
27926
27983
  */
27927
27984
 
27928
- export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27985
+ export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalConfigurationService, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27929
27986
  //# sourceMappingURL=clr-angular.mjs.map