@clr/angular 17.3.0 → 17.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/accordion/accordion-panel.d.ts +0 -3
  2. package/accordion/stepper/models/stepper.model.d.ts +3 -0
  3. package/accordion/stepper/providers/stepper.service.d.ts +2 -0
  4. package/accordion/stepper/step-button.d.ts +2 -0
  5. package/accordion/stepper/stepper-panel.d.ts +3 -2
  6. package/clarity.api.md +64 -35
  7. package/data/datagrid/built-in/filters/datagrid-numeric-filter.d.ts +5 -1
  8. package/data/datagrid/datagrid-action-overflow.d.ts +2 -3
  9. package/data/datagrid/datagrid-column.d.ts +7 -3
  10. package/data/datagrid/datagrid-hideable-column.d.ts +0 -1
  11. package/data/datagrid/datagrid-items.d.ts +0 -1
  12. package/data/datagrid/datagrid-row.d.ts +0 -2
  13. package/data/datagrid/datagrid.d.ts +1 -3
  14. package/data/datagrid/providers/selection.d.ts +1 -2
  15. package/data/datagrid/providers/table-size.service.d.ts +1 -1
  16. package/data/datagrid/render/header-renderer.d.ts +0 -1
  17. package/data/datagrid/render/main-renderer.d.ts +5 -3
  18. package/data/tree-view/tree.d.ts +5 -1
  19. package/emphasis/alert/alert.d.ts +1 -1
  20. package/esm2020/accordion/accordion-panel.mjs +3 -6
  21. package/esm2020/accordion/stepper/models/stepper.model.mjs +16 -1
  22. package/esm2020/accordion/stepper/providers/stepper.service.mjs +12 -1
  23. package/esm2020/accordion/stepper/step-button.mjs +13 -3
  24. package/esm2020/accordion/stepper/stepper-panel.mjs +5 -7
  25. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +79 -47
  26. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +8 -9
  27. package/esm2020/data/datagrid/datagrid-column.mjs +18 -8
  28. package/esm2020/data/datagrid/datagrid-detail-registerer.mjs +3 -3
  29. package/esm2020/data/datagrid/datagrid-hideable-column.mjs +3 -4
  30. package/esm2020/data/datagrid/datagrid-if-detail.mjs +2 -2
  31. package/esm2020/data/datagrid/datagrid-items.mjs +2 -3
  32. package/esm2020/data/datagrid/datagrid-pagination.mjs +2 -2
  33. package/esm2020/data/datagrid/datagrid-row.mjs +4 -6
  34. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +5 -5
  35. package/esm2020/data/datagrid/datagrid.mjs +19 -21
  36. package/esm2020/data/datagrid/providers/selection.mjs +11 -12
  37. package/esm2020/data/datagrid/providers/table-size.service.mjs +1 -1
  38. package/esm2020/data/datagrid/render/header-renderer.mjs +2 -3
  39. package/esm2020/data/datagrid/render/main-renderer.mjs +38 -20
  40. package/esm2020/data/tree-view/recursive-children.mjs +3 -3
  41. package/esm2020/data/tree-view/tree-node.mjs +4 -4
  42. package/esm2020/data/tree-view/tree.mjs +24 -11
  43. package/esm2020/emphasis/alert/alert.mjs +1 -1
  44. package/esm2020/forms/combobox/combobox-container.mjs +1 -1
  45. package/esm2020/forms/combobox/combobox.mjs +2 -2
  46. package/esm2020/forms/combobox/option-items.directive.mjs +2 -3
  47. package/esm2020/forms/combobox/option.mjs +2 -2
  48. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +1 -1
  49. package/esm2020/forms/common/abstract-container.mjs +3 -3
  50. package/esm2020/forms/common/control.mjs +1 -1
  51. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +3 -3
  52. package/esm2020/forms/common/if-control-state/if-control-state.service.mjs +2 -3
  53. package/esm2020/forms/common/label.mjs +1 -1
  54. package/esm2020/forms/common/wrapped-control.mjs +3 -3
  55. package/esm2020/forms/datalist/datalist-container.mjs +2 -3
  56. package/esm2020/forms/datalist/datalist-input.mjs +2 -2
  57. package/esm2020/forms/datepicker/calendar.mjs +1 -1
  58. package/esm2020/forms/datepicker/date-container.mjs +4 -5
  59. package/esm2020/forms/datepicker/providers/date-io.service.mjs +3 -4
  60. package/esm2020/forms/datepicker/providers/datepicker-enabled.service.mjs +2 -2
  61. package/esm2020/forms/datepicker/providers/datepicker-focus.service.mjs +1 -1
  62. package/esm2020/forms/input/input.mjs +1 -1
  63. package/esm2020/forms/password/password-container.mjs +2 -2
  64. package/esm2020/forms/password/password.mjs +3 -4
  65. package/esm2020/forms/radio/radio.mjs +1 -1
  66. package/esm2020/forms/range/range.mjs +1 -1
  67. package/esm2020/forms/select/select.mjs +1 -1
  68. package/esm2020/forms/textarea/textarea.mjs +1 -1
  69. package/esm2020/layout/main-container/main-container.mjs +1 -1
  70. package/esm2020/layout/nav/header.mjs +3 -3
  71. package/esm2020/layout/nav/nav-level.mjs +5 -3
  72. package/esm2020/layout/tabs/tab-link.directive.mjs +4 -6
  73. package/esm2020/layout/tabs/tabs.mjs +1 -1
  74. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +8 -9
  75. package/esm2020/layout/vertical-nav/vertical-nav-icon.mjs +2 -2
  76. package/esm2020/layout/vertical-nav/vertical-nav.mjs +2 -2
  77. package/esm2020/modal/index.mjs +2 -1
  78. package/esm2020/modal/modal-body.mjs +4 -4
  79. package/esm2020/modal/modal-configuration.service.mjs +4 -3
  80. package/esm2020/modal/modal.module.mjs +2 -4
  81. package/esm2020/popover/common/abstract-popover.mjs +1 -1
  82. package/esm2020/popover/dropdown/dropdown.mjs +3 -4
  83. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +2 -2
  84. package/esm2020/popover/signpost/signpost-content.mjs +2 -3
  85. package/esm2020/popover/tooltip/tooltip-trigger.mjs +2 -3
  86. package/esm2020/utils/conditional/if-active.directive.mjs +2 -2
  87. package/esm2020/utils/conditional/if-expanded.directive.mjs +2 -2
  88. package/esm2020/utils/conditional/if-open.directive.mjs +2 -2
  89. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +4 -4
  90. package/esm2020/utils/focus/key-focus/key-focus.mjs +1 -1
  91. package/esm2020/utils/i18n/common-strings.default.mjs +7 -1
  92. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  93. package/esm2020/utils/popover/popover-anchor.mjs +1 -1
  94. package/esm2020/utils/popover/popover-content.mjs +10 -4
  95. package/esm2020/utils/popover/popover-open-close-button.mjs +2 -2
  96. package/esm2020/wizard/providers/wizard-navigation.service.mjs +8 -8
  97. package/esm2020/wizard/wizard-stepnav-item.mjs +23 -9
  98. package/fesm2015/clr-angular.mjs +358 -249
  99. package/fesm2015/clr-angular.mjs.map +1 -1
  100. package/fesm2020/clr-angular.mjs +358 -249
  101. package/fesm2020/clr-angular.mjs.map +1 -1
  102. package/forms/combobox/combobox-container.d.ts +1 -1
  103. package/forms/combobox/option-items.directive.d.ts +0 -1
  104. package/forms/combobox/providers/combobox-focus-handler.service.d.ts +1 -1
  105. package/forms/common/control.d.ts +1 -1
  106. package/forms/common/if-control-state/if-control-state.service.d.ts +0 -1
  107. package/forms/common/label.d.ts +1 -1
  108. package/forms/common/wrapped-control.d.ts +3 -3
  109. package/forms/datalist/datalist-container.d.ts +0 -1
  110. package/forms/datepicker/calendar.d.ts +1 -1
  111. package/forms/datepicker/date-container.d.ts +1 -2
  112. package/forms/datepicker/providers/date-io.service.d.ts +1 -2
  113. package/forms/datepicker/providers/datepicker-focus.service.d.ts +1 -1
  114. package/forms/input/input.d.ts +1 -1
  115. package/forms/password/password.d.ts +0 -1
  116. package/forms/radio/radio.d.ts +1 -1
  117. package/forms/range/range.d.ts +1 -1
  118. package/forms/select/select.d.ts +1 -1
  119. package/forms/textarea/textarea.d.ts +1 -1
  120. package/layout/main-container/main-container.d.ts +1 -1
  121. package/layout/tabs/tab-link.directive.d.ts +0 -2
  122. package/layout/tabs/tabs.d.ts +1 -1
  123. package/layout/vertical-nav/vertical-nav-group.d.ts +1 -2
  124. package/modal/index.d.ts +1 -0
  125. package/package.json +2 -2
  126. package/popover/common/abstract-popover.d.ts +2 -2
  127. package/popover/dropdown/dropdown.d.ts +0 -1
  128. package/popover/signpost/signpost-content.d.ts +0 -1
  129. package/popover/tooltip/tooltip-trigger.d.ts +0 -1
  130. package/utils/focus/key-focus/key-focus.d.ts +1 -1
  131. package/utils/i18n/common-strings.interface.d.ts +14 -0
  132. package/utils/popover/popover-anchor.d.ts +1 -1
  133. package/utils/popover/popover-content.d.ts +1 -0
@@ -225,19 +225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
225
225
  }]
226
226
  }] });
227
227
 
228
- /*
229
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
230
- * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
231
- * This software is released under MIT license.
232
- * The full license information can be found in LICENSE in the root directory of this project.
233
- */
234
- var AccordionStatus;
235
- (function (AccordionStatus) {
236
- AccordionStatus["Inactive"] = "inactive";
237
- AccordionStatus["Error"] = "error";
238
- AccordionStatus["Complete"] = "complete";
239
- })(AccordionStatus || (AccordionStatus = {}));
240
-
241
228
  /*
242
229
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
243
230
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -330,6 +317,8 @@ const commonStringsDefault = {
330
317
  datagridFilterDialogAriaLabel: 'Filter dialog',
331
318
  columnSeparatorAriaLabel: 'Column resize handle',
332
319
  columnSeparatorDescription: 'Use left or right key to resize the column',
320
+ fromLabel: 'From',
321
+ toLabel: 'To',
333
322
  // Alert
334
323
  alertCloseButtonAriaLabel: 'Close alert',
335
324
  alertNextAlertAriaLabel: 'Next alert message, {CURRENT} of {COUNT}',
@@ -375,6 +364,7 @@ const commonStringsDefault = {
375
364
  datagridExpandableRowContent: 'Expandable row content',
376
365
  datagridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,
377
366
  // Wizard
367
+ wizardStep: 'Step',
378
368
  wizardStepSuccess: 'Completed',
379
369
  wizardStepError: 'Error',
380
370
  wizardStepnavAriaLabel: 'Step navigation',
@@ -396,6 +386,9 @@ const commonStringsDefault = {
396
386
  fileCount: '{COUNT} files',
397
387
  clearFile: 'Clear {FILE}',
398
388
  clearFiles: 'Clear {COUNT} files',
389
+ // Tree
390
+ selectedTreeNode: 'selected',
391
+ unselectedTreeNode: 'unselected',
399
392
  };
400
393
 
401
394
  /*
@@ -443,6 +436,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
443
436
  }]
444
437
  }] });
445
438
 
439
+ /*
440
+ * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
441
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
442
+ * This software is released under MIT license.
443
+ * The full license information can be found in LICENSE in the root directory of this project.
444
+ */
445
+ var AccordionStatus;
446
+ (function (AccordionStatus) {
447
+ AccordionStatus["Inactive"] = "inactive";
448
+ AccordionStatus["Error"] = "error";
449
+ AccordionStatus["Complete"] = "complete";
450
+ })(AccordionStatus || (AccordionStatus = {}));
451
+
446
452
  /*
447
453
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
448
454
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -572,8 +578,6 @@ class ClrAccordionPanel {
572
578
  this.disabled = false;
573
579
  this.panelOpen = false;
574
580
  this.panelOpenChange = new EventEmitter();
575
- this.AccordionStatus = AccordionStatus;
576
- this.isAccordion = true;
577
581
  this._id = uniqueIdFactory();
578
582
  }
579
583
  get id() {
@@ -649,10 +653,10 @@ class ClrAccordionPanel {
649
653
  }
650
654
  }
651
655
  ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: ClrCommonStringsService }, { token: AccordionService }, { token: IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
652
- ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true", "class.clr-accordion-panel-disabled": "this.disabled" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
656
+ ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true", "class.clr-accordion-panel-disabled": "this.disabled" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
653
657
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
654
658
  type: Component,
655
- args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
659
+ args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
656
660
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
657
661
  type: Input,
658
662
  args: ['clrAccordionPanelDisabled']
@@ -972,6 +976,9 @@ class StepperModel extends AccordionModel {
972
976
  this._panels[panelId].open = !this._panels[panelId].open;
973
977
  }
974
978
  }
979
+ navigateToPreviousPanel(currentPanelId) {
980
+ this.openPreviousPanel(this._panels[currentPanelId].id);
981
+ }
975
982
  navigateToNextPanel(currentPanelId, currentPanelValid = true) {
976
983
  if (currentPanelValid) {
977
984
  this.completePanel(currentPanelId);
@@ -1015,6 +1022,9 @@ class StepperModel extends AccordionModel {
1015
1022
  getNextPanel(currentPanelId) {
1016
1023
  return this.panels.find(s => s.index === this._panels[currentPanelId].index + 1);
1017
1024
  }
1025
+ getPreviousPanel(currentPanelId) {
1026
+ return this.panels.find(s => s.index === this._panels[currentPanelId].index - 1);
1027
+ }
1018
1028
  resetAllFuturePanels(panelId) {
1019
1029
  this.panels.filter(panel => panel.index >= this._panels[panelId].index).forEach(panel => this.resetPanel(panel.id));
1020
1030
  }
@@ -1053,6 +1063,15 @@ class StepperModel extends AccordionModel {
1053
1063
  this._panels[nextPanel.id].disabled = true;
1054
1064
  }
1055
1065
  }
1066
+ openPreviousPanel(currentPanelId) {
1067
+ const prevPanel = this.getPreviousPanel(currentPanelId);
1068
+ if (prevPanel) {
1069
+ this._panels[currentPanelId].open = false;
1070
+ this._panels[currentPanelId].disabled = false;
1071
+ this._panels[prevPanel.id].open = true;
1072
+ this._panels[prevPanel.id].disabled = true;
1073
+ }
1074
+ }
1056
1075
  setPanelError(panelId) {
1057
1076
  this.resetAllFuturePanels(panelId);
1058
1077
  this._panels[panelId].open = true;
@@ -1099,6 +1118,11 @@ class StepperService extends AccordionService {
1099
1118
  this.accordion.setPanelsWithErrors(ids);
1100
1119
  this.emitUpdatedPanels();
1101
1120
  }
1121
+ navigateToPreviousPanel(currentPanelId) {
1122
+ this.accordion.navigateToPreviousPanel(currentPanelId);
1123
+ this.updatePreviousStep(currentPanelId);
1124
+ this.emitUpdatedPanels();
1125
+ }
1102
1126
  navigateToNextPanel(currentPanelId, currentPanelValid = true) {
1103
1127
  this.accordion.navigateToNextPanel(currentPanelId, currentPanelValid);
1104
1128
  this.updateNextStep(currentPanelId, currentPanelValid);
@@ -1117,6 +1141,12 @@ class StepperService extends AccordionService {
1117
1141
  this._activeStepChanges.next(currentPanelId);
1118
1142
  }
1119
1143
  }
1144
+ updatePreviousStep(currentPanelId) {
1145
+ const prevPanel = this.accordion.getPreviousPanel(currentPanelId);
1146
+ if (prevPanel) {
1147
+ this._activeStepChanges.next(prevPanel.id);
1148
+ }
1149
+ }
1120
1150
  getAllCompletedPanelChanges() {
1121
1151
  return this._panelsChanges.pipe(map(() => this.accordion.allPanelsCompleted), distinctUntilChanged());
1122
1152
  }
@@ -1141,7 +1171,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1141
1171
  this.formGroupName = formGroupName;
1142
1172
  this.ngModelGroup = ngModelGroup;
1143
1173
  this.stepperService = stepperService;
1144
- this.isAccordion = false;
1174
+ this.AccordionStatus = AccordionStatus;
1145
1175
  this.subscriptions = [];
1146
1176
  }
1147
1177
  get id() {
@@ -1182,9 +1212,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1182
1212
  this.subscriptions.push(this.stepperService.activeStep
1183
1213
  .pipe(filter(panelId => isPlatformBrowser(this.platformId) && panelId === this.id))
1184
1214
  .subscribe(() => {
1185
- //Adding timeout so that the status of the previous step is read by Voice Over on Safari,
1186
- //before focusing on the next stepper panel header
1187
- setTimeout(() => this.headerButton.nativeElement.focus(), 1500);
1215
+ this.headerButton.nativeElement.focus();
1188
1216
  }));
1189
1217
  }
1190
1218
  triggerAllFormControlValidationIfError(panel) {
@@ -1194,10 +1222,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
1194
1222
  }
1195
1223
  }
1196
1224
  ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: i1.FormGroupName, optional: true }, { token: i1.NgModelGroup, optional: true }, { token: StepperService }, { token: IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1197
- ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1225
+ ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-stepper-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1198
1226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
1199
1227
  type: Component,
1200
- args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1228
+ args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-stepper-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1201
1229
  }], ctorParameters: function () {
1202
1230
  return [{ type: undefined, decorators: [{
1203
1231
  type: Inject,
@@ -1221,6 +1249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
1221
1249
  var ClrStepButtonType;
1222
1250
  (function (ClrStepButtonType) {
1223
1251
  ClrStepButtonType["Next"] = "next";
1252
+ ClrStepButtonType["Previous"] = "previous";
1224
1253
  ClrStepButtonType["Submit"] = "submit";
1225
1254
  })(ClrStepButtonType || (ClrStepButtonType = {}));
1226
1255
  class ClrStepButton {
@@ -1229,16 +1258,22 @@ class ClrStepButton {
1229
1258
  this.stepperService = stepperService;
1230
1259
  this.type = ClrStepButtonType.Next;
1231
1260
  this.submitButton = false;
1261
+ this.previousButton = false;
1232
1262
  }
1233
1263
  ngOnInit() {
1234
1264
  this.submitButton = this.type === ClrStepButtonType.Submit;
1265
+ this.previousButton = this.type === ClrStepButtonType.Previous;
1235
1266
  }
1236
1267
  navigateToNextPanel() {
1268
+ if (this.previousButton) {
1269
+ this.stepperService.navigateToPreviousPanel(this.clrStep.id);
1270
+ return;
1271
+ }
1237
1272
  this.stepperService.navigateToNextPanel(this.clrStep.id, this.clrStep.formGroup.valid);
1238
1273
  }
1239
1274
  }
1240
1275
  ClrStepButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepButton, deps: [{ token: ClrStepperPanel }, { token: StepperService }], target: i0.ɵɵFactoryTarget.Directive });
1241
- ClrStepButton.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepButton, selector: "[clrStepButton]", inputs: { type: ["clrStepButton", "type"] }, host: { listeners: { "click": "navigateToNextPanel()" }, properties: { "class.clr-step-button": "true", "class.btn": "true", "type": "'button'", "class.btn-primary": "this.submitButton" } }, ngImport: i0 });
1276
+ ClrStepButton.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepButton, selector: "[clrStepButton]", inputs: { type: ["clrStepButton", "type"] }, host: { listeners: { "click": "navigateToNextPanel()" }, properties: { "class.clr-step-button": "true", "class.btn": "true", "type": "'button'", "class.btn-success": "this.submitButton", "class.btn-link": "this.previousButton" } }, ngImport: i0 });
1242
1277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepButton, decorators: [{
1243
1278
  type: Directive,
1244
1279
  args: [{
@@ -1254,7 +1289,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
1254
1289
  args: ['clrStepButton']
1255
1290
  }], submitButton: [{
1256
1291
  type: HostBinding,
1257
- args: ['class.btn-primary']
1292
+ args: ['class.btn-success']
1293
+ }], previousButton: [{
1294
+ type: HostBinding,
1295
+ args: ['class.btn-link']
1258
1296
  }], navigateToNextPanel: [{
1259
1297
  type: HostListener,
1260
1298
  args: ['click']
@@ -2234,6 +2272,7 @@ class ClrPopoverContent {
2234
2272
  this.subscriptions = [];
2235
2273
  this.removeClickListenerFn = null;
2236
2274
  this.shouldRealign = false;
2275
+ this.previousContentHeight = null;
2237
2276
  // Check-collector pattern:
2238
2277
  // In order to get accurate content height/width values, we cannot calculate alignment offsets until
2239
2278
  // after the projected content has stabilized.
@@ -2255,9 +2294,14 @@ class ClrPopoverContent {
2255
2294
  this.smartEventsService.scrollToClose = !!scrollToClose;
2256
2295
  }
2257
2296
  ngAfterContentChecked() {
2258
- if (this.smartOpenService.open && this.view && this.shouldRealign) {
2259
- // Channel content-check event through the check-collector
2260
- this.checkCollector.emit();
2297
+ if (this.smartOpenService.open && this.view) {
2298
+ const rootNodeOffsetHeight = this.view.rootNodes[0].offsetHeight;
2299
+ if (this.shouldRealign ||
2300
+ (this.previousContentHeight !== null && this.previousContentHeight !== rootNodeOffsetHeight)) {
2301
+ // Channel content-check event through the check-collector
2302
+ this.previousContentHeight = rootNodeOffsetHeight;
2303
+ this.checkCollector.emit();
2304
+ }
2261
2305
  }
2262
2306
  }
2263
2307
  ngAfterViewInit() {
@@ -2375,7 +2419,7 @@ class ClrPopoverOpenCloseButton {
2375
2419
  this.smartOpenService = smartOpenService;
2376
2420
  this.openCloseChange = new EventEmitter();
2377
2421
  this.subscriptions = [];
2378
- this.subscriptions.push(this.smartOpenService.openChange.subscribe(change => {
2422
+ this.subscriptions.push(smartOpenService.openChange.subscribe(change => {
2379
2423
  this.openCloseChange.next(change);
2380
2424
  }));
2381
2425
  }
@@ -3331,7 +3375,7 @@ class ClrIfActive {
3331
3375
  this.activeChange = new EventEmitter(false);
3332
3376
  this.wasActive = false;
3333
3377
  this.checkAndUpdateView(ifActiveService.current);
3334
- this.subscription = this.ifActiveService.currentChange.subscribe(newCurrentId => {
3378
+ this.subscription = ifActiveService.currentChange.subscribe(newCurrentId => {
3335
3379
  this.checkAndUpdateView(newCurrentId);
3336
3380
  });
3337
3381
  }
@@ -3423,7 +3467,7 @@ class ClrIfOpen {
3423
3467
  * used with de-structured / de-sugared syntax.
3424
3468
  */
3425
3469
  this.openChange = new EventEmitter(false);
3426
- this.subscription = this.toggleService.openChange.subscribe(change => {
3470
+ this.subscription = toggleService.openChange.subscribe(change => {
3427
3471
  this.updateView(change);
3428
3472
  this.openChange.emit(change);
3429
3473
  });
@@ -3493,7 +3537,7 @@ class ClrIfExpanded {
3493
3537
  this._subscriptions = [];
3494
3538
  this._subscriptions.push(expand.expandChange.subscribe(() => {
3495
3539
  this.updateView();
3496
- this.expandedChange.emit(this.expand.expanded);
3540
+ this.expandedChange.emit(expand.expanded);
3497
3541
  }));
3498
3542
  }
3499
3543
  get expanded() {
@@ -3638,7 +3682,7 @@ class ClrFocusOnViewInit {
3638
3682
  this.renderer = renderer;
3639
3683
  this.directFocus = true; // true if the element gets focused without need to set tabindex;
3640
3684
  this.destroy$ = new Subject();
3641
- this._isEnabled = this.focusOnViewInit;
3685
+ this._isEnabled = focusOnViewInit;
3642
3686
  // Angular compiler doesn't understand the type Document
3643
3687
  // when working out the metadata for injectable parameters,
3644
3688
  // even though it understands the injection token DOCUMENT
@@ -3649,8 +3693,8 @@ class ClrFocusOnViewInit {
3649
3693
  .subscribe(() => {
3650
3694
  if (!this.directFocus) {
3651
3695
  // manually set attributes and styles should be removed
3652
- this.renderer.removeAttribute(this.el.nativeElement, 'tabindex');
3653
- this.renderer.setStyle(this.el.nativeElement, 'outline', null);
3696
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
3697
+ renderer.setStyle(el.nativeElement, 'outline', null);
3654
3698
  }
3655
3699
  }));
3656
3700
  }
@@ -4510,12 +4554,11 @@ var CONTROL_STATE;
4510
4554
  })(CONTROL_STATE || (CONTROL_STATE = {}));
4511
4555
  class IfControlStateService {
4512
4556
  constructor(ngControlService) {
4513
- this.ngControlService = ngControlService;
4514
4557
  this.subscriptions = [];
4515
4558
  // Implement our own status changes observable, since Angular controls don't
4516
4559
  this._statusChanges = new BehaviorSubject(CONTROL_STATE.NONE);
4517
4560
  // Wait for the control to be available
4518
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4561
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4519
4562
  if (control) {
4520
4563
  this.control = control;
4521
4564
  // Subscribe to the status change events, only after touched
@@ -4771,14 +4814,14 @@ class ClrAbstractContainer {
4771
4814
  this.ngControlService = ngControlService;
4772
4815
  this._dynamic = false;
4773
4816
  this.subscriptions = [];
4774
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
4817
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
4775
4818
  this.state = state;
4776
4819
  // Make sure everything is updated before dispatching the values for helpers
4777
4820
  setTimeout(() => {
4778
4821
  this.updateHelpers();
4779
4822
  });
4780
4823
  }));
4781
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4824
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4782
4825
  this.control = control;
4783
4826
  }));
4784
4827
  }
@@ -5034,10 +5077,10 @@ class WrappedFormControl {
5034
5077
  this.vcr = vcr;
5035
5078
  this.wrapperType = wrapperType;
5036
5079
  this.ngControl = ngControl;
5037
- this.index = 0;
5038
- this.subscriptions = [];
5039
5080
  this.renderer = renderer;
5040
5081
  this.el = el;
5082
+ this.index = 0;
5083
+ this.subscriptions = [];
5041
5084
  if (injector) {
5042
5085
  this.ngControlService = injector.get(NgControlService, null);
5043
5086
  this.ifControlStateService = injector.get(IfControlStateService, null);
@@ -5261,12 +5304,12 @@ class AbstractIfState {
5261
5304
  this.subscriptions = [];
5262
5305
  this.displayedContent = false;
5263
5306
  if (ngControlService) {
5264
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
5307
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
5265
5308
  this.control = control;
5266
5309
  }));
5267
5310
  }
5268
5311
  if (ifControlStateService) {
5269
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
5312
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
5270
5313
  this.handleState(state);
5271
5314
  }));
5272
5315
  }
@@ -6841,7 +6884,7 @@ class ClrOption {
6841
6884
  this.optionSelectionService = optionSelectionService;
6842
6885
  // A proxy with only the necessary data to be used for a11y and the focus handler service.
6843
6886
  this.optionProxy = new OptionData(null, null);
6844
- this.optionProxy.el = this.elRef.nativeElement;
6887
+ this.optionProxy.el = elRef.nativeElement;
6845
6888
  }
6846
6889
  get optionId() {
6847
6890
  return this._id;
@@ -7107,7 +7150,7 @@ class ClrCombobox extends WrappedFormControl {
7107
7150
  control.valueAccessor = this;
7108
7151
  }
7109
7152
  // default to SingleSelectComboboxModel, in case the optional input [ClrMulti] isn't used
7110
- this.optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7153
+ optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7111
7154
  this.updateControlValue();
7112
7155
  }
7113
7156
  get multiSelect() {
@@ -7409,11 +7452,10 @@ class ClrOptionItems {
7409
7452
  this.differs = differs;
7410
7453
  this.optionService = optionService;
7411
7454
  this.positionService = positionService;
7412
- this.vcr = vcr;
7413
7455
  this.subscriptions = [];
7414
7456
  this.filter = '';
7415
7457
  this.differ = null;
7416
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
7458
+ this.iterableProxy = new NgForOf(vcr, template, differs);
7417
7459
  this.subscriptions.push(optionService.inputChanged.subscribe(filter => {
7418
7460
  this.filter = filter;
7419
7461
  this.updateItems();
@@ -7797,10 +7839,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7797
7839
  class ClrDatalistContainer extends ClrAbstractContainer {
7798
7840
  constructor(controlClassService, layoutService, ngControlService, focusService, ifControlStateService) {
7799
7841
  super(ifControlStateService, layoutService, controlClassService, ngControlService);
7800
- this.focusService = focusService;
7801
7842
  this.ifControlStateService = ifControlStateService;
7802
7843
  this.focus = false;
7803
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => (this.focus = state)));
7844
+ this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
7804
7845
  }
7805
7846
  }
7806
7847
  ClrDatalistContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatalistContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
@@ -7906,7 +7947,7 @@ class ClrDatalistInput extends WrappedFormControl {
7906
7947
  super(vcr, ClrDatalistContainer, injector, control, renderer, el);
7907
7948
  this.focusService = focusService;
7908
7949
  this.datalistIdService = datalistIdService;
7909
- if (!this.focusService) {
7950
+ if (!focusService) {
7910
7951
  throw new Error('clrDatalist requires being wrapped in <clr-datalist-container>');
7911
7952
  }
7912
7953
  }
@@ -8688,8 +8729,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
8688
8729
  * The full license information can be found in LICENSE in the root directory of this project.
8689
8730
  */
8690
8731
  class DateIOService {
8691
- constructor(_localeHelperService) {
8692
- this._localeHelperService = _localeHelperService;
8732
+ constructor(localeHelperService) {
8693
8733
  this.disabledDates = {
8694
8734
  // This is the default range. It approximates the beginning of time to the end of time.
8695
8735
  // Unless a minDate or maxDate is set with the native HTML5 api the range is all dates
@@ -8700,7 +8740,7 @@ class DateIOService {
8700
8740
  this.cldrLocaleDateFormat = DEFAULT_LOCALE_FORMAT;
8701
8741
  this.localeDisplayFormat = LITTLE_ENDIAN;
8702
8742
  this.delimiters = ['/', '/'];
8703
- this.cldrLocaleDateFormat = this._localeHelperService.localeDateFormat;
8743
+ this.cldrLocaleDateFormat = localeHelperService.localeDateFormat;
8704
8744
  this.initializeLocaleDisplayFormat();
8705
8745
  }
8706
8746
  get placeholderText() {
@@ -9121,7 +9161,7 @@ class DatepickerEnabledService {
9121
9161
  constructor(_document) {
9122
9162
  this._document = _document;
9123
9163
  this._isUserAgentMobile = false;
9124
- if (this._document) {
9164
+ if (_document) {
9125
9165
  this._isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(_document.defaultView.navigator.userAgent);
9126
9166
  this._innerWidth = _document.defaultView.innerWidth;
9127
9167
  }
@@ -9719,18 +9759,17 @@ class ClrDateContainer extends ClrAbstractContainer {
9719
9759
  this.dateFormControlService = dateFormControlService;
9720
9760
  this.dateIOService = dateIOService;
9721
9761
  this.commonStrings = commonStrings;
9722
- this.focusService = focusService;
9723
9762
  this.viewManagerService = viewManagerService;
9724
9763
  this.controlClassService = controlClassService;
9725
9764
  this.layoutService = layoutService;
9726
9765
  this.ngControlService = ngControlService;
9727
9766
  this.ifControlStateService = ifControlStateService;
9728
9767
  this.focus = false;
9729
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
9768
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
9730
9769
  this.focus = state;
9731
9770
  }));
9732
- this.subscriptions.push(this.toggleService.openChange.subscribe(() => {
9733
- this.dateFormControlService.markAsTouched();
9771
+ this.subscriptions.push(toggleService.openChange.subscribe(() => {
9772
+ dateFormControlService.markAsTouched();
9734
9773
  }));
9735
9774
  }
9736
9775
  set clrPosition(position) {
@@ -10739,7 +10778,7 @@ class ClrPasswordContainer extends ClrAbstractContainer {
10739
10778
  this.focus = false;
10740
10779
  this._toggle = true;
10741
10780
  /* The unsubscribe is handle inside the ClrAbstractContainer */
10742
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
10781
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
10743
10782
  this.focus = state;
10744
10783
  }));
10745
10784
  }
@@ -10891,12 +10930,11 @@ class ClrPassword extends WrappedFormControl {
10891
10930
  constructor(vcr, injector, control, renderer, el, focusService, toggleService) {
10892
10931
  super(vcr, ClrPasswordContainer, injector, control, renderer, el);
10893
10932
  this.focusService = focusService;
10894
- this.toggleService = toggleService;
10895
10933
  this.index = 1;
10896
- if (!this.focusService) {
10934
+ if (!focusService) {
10897
10935
  throw new Error('clrPassword requires being wrapped in <clr-password-container>');
10898
10936
  }
10899
- this.subscriptions.push(this.toggleService.subscribe(toggle => {
10937
+ this.subscriptions.push(toggleService.subscribe(toggle => {
10900
10938
  renderer.setProperty(el.nativeElement, 'type', toggle ? 'text' : 'password');
10901
10939
  }));
10902
10940
  }
@@ -12808,6 +12846,12 @@ class DatagridNumericFilter extends DatagridFilterRegistrar {
12808
12846
  get minPlaceholderValue() {
12809
12847
  return this.minPlaceholder || this.commonStrings.keys.minValue;
12810
12848
  }
12849
+ get fromLabelValue() {
12850
+ return this.fromLabel || this.commonStrings.keys.fromLabel;
12851
+ }
12852
+ get toLabelValue() {
12853
+ return this.toLabel || this.commonStrings.keys.toLabel;
12854
+ }
12811
12855
  get low() {
12812
12856
  if (typeof this.filter.low === 'number' && isFinite(this.filter.low)) {
12813
12857
  return this.filter.low;
@@ -12870,31 +12914,40 @@ class DatagridNumericFilter extends DatagridFilterRegistrar {
12870
12914
  }
12871
12915
  }
12872
12916
  DatagridNumericFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridNumericFilter, deps: [{ token: FiltersProvider }, { token: DomAdapter }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
12873
- DatagridNumericFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: { minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], value: ["clrFilterValue", "value"], customNumericFilter: ["clrDgNumericFilter", "customNumericFilter"] }, outputs: { filterValueChange: "clrFilterValueChange" }, providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input_low"], descendants: true }, { propertyName: "filterContainer", first: true, predicate: ClrDatagridFilter, descendants: true }], usesInheritance: true, ngImport: i0, template: `
12917
+ DatagridNumericFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: { minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], fromLabel: ["clrFilterFromLabel", "fromLabel"], toLabel: ["clrFilterToLabel", "toLabel"], value: ["clrFilterValue", "value"], customNumericFilter: ["clrDgNumericFilter", "customNumericFilter"] }, outputs: { filterValueChange: "clrFilterValueChange" }, providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input_low"], descendants: true }, { propertyName: "filterContainer", first: true, predicate: ClrDatagridFilter, descendants: true }], usesInheritance: true, ngImport: i0, template: `
12874
12918
  <clr-dg-filter [clrDgFilter]="registered" [(clrDgFilterOpen)]="open">
12875
- <input
12876
- class="datagrid-numeric-filter-input"
12877
- #input_low
12878
- type="number"
12879
- autocomplete="off"
12880
- name="low"
12881
- [(ngModel)]="low"
12882
- [placeholder]="minPlaceholderValue"
12883
- [attr.aria-label]="minPlaceholderValue"
12884
- />
12885
- <span class="datagrid-filter-input-spacer"></span>
12886
- <input
12887
- class="datagrid-numeric-filter-input"
12888
- #input_high
12889
- type="number"
12890
- autocomplete="off"
12891
- name="high"
12892
- [(ngModel)]="high"
12893
- [placeholder]="maxPlaceholderValue"
12894
- [attr.aria-label]="maxPlaceholderValue"
12895
- />
12919
+ <div class="datagrid-numeric-filter-form">
12920
+ <div class="clr-form-control">
12921
+ <label class="clr-control-label">{{ fromLabelValue }}</label>
12922
+ <input
12923
+ clrInput
12924
+ class="datagrid-numeric-filter-input"
12925
+ #input_low
12926
+ type="number"
12927
+ autocomplete="off"
12928
+ name="low"
12929
+ [(ngModel)]="low"
12930
+ [placeholder]="minPlaceholderValue"
12931
+ [attr.aria-label]="minPlaceholderValue"
12932
+ />
12933
+ </div>
12934
+ <div class="clr-form-control">
12935
+ <label class="clr-control-label">{{ toLabelValue }}</label>
12936
+ <input
12937
+ clrInput
12938
+ class="datagrid-numeric-filter-input"
12939
+ #input_high
12940
+ type="number"
12941
+ autocomplete="off"
12942
+ name="high"
12943
+ [(ngModel)]="high"
12944
+ [placeholder]="maxPlaceholderValue"
12945
+ [attr.aria-label]="maxPlaceholderValue"
12946
+ />
12947
+ </div>
12948
+ </div>
12896
12949
  </clr-dg-filter>
12897
- `, isInline: true, dependencies: [{ 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][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: ClrDatagridFilter, selector: "clr-dg-filter", inputs: ["clrDgFilterOpen", "clrDgFilter"], outputs: ["clrDgFilterOpenChange"] }] });
12950
+ `, isInline: true, dependencies: [{ kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrInput, selector: "[clrInput]" }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][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: ClrDatagridFilter, selector: "clr-dg-filter", inputs: ["clrDgFilterOpen", "clrDgFilter"], outputs: ["clrDgFilterOpenChange"] }] });
12898
12951
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridNumericFilter, decorators: [{
12899
12952
  type: Component,
12900
12953
  args: [{
@@ -12902,27 +12955,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
12902
12955
  providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],
12903
12956
  template: `
12904
12957
  <clr-dg-filter [clrDgFilter]="registered" [(clrDgFilterOpen)]="open">
12905
- <input
12906
- class="datagrid-numeric-filter-input"
12907
- #input_low
12908
- type="number"
12909
- autocomplete="off"
12910
- name="low"
12911
- [(ngModel)]="low"
12912
- [placeholder]="minPlaceholderValue"
12913
- [attr.aria-label]="minPlaceholderValue"
12914
- />
12915
- <span class="datagrid-filter-input-spacer"></span>
12916
- <input
12917
- class="datagrid-numeric-filter-input"
12918
- #input_high
12919
- type="number"
12920
- autocomplete="off"
12921
- name="high"
12922
- [(ngModel)]="high"
12923
- [placeholder]="maxPlaceholderValue"
12924
- [attr.aria-label]="maxPlaceholderValue"
12925
- />
12958
+ <div class="datagrid-numeric-filter-form">
12959
+ <div class="clr-form-control">
12960
+ <label class="clr-control-label">{{ fromLabelValue }}</label>
12961
+ <input
12962
+ clrInput
12963
+ class="datagrid-numeric-filter-input"
12964
+ #input_low
12965
+ type="number"
12966
+ autocomplete="off"
12967
+ name="low"
12968
+ [(ngModel)]="low"
12969
+ [placeholder]="minPlaceholderValue"
12970
+ [attr.aria-label]="minPlaceholderValue"
12971
+ />
12972
+ </div>
12973
+ <div class="clr-form-control">
12974
+ <label class="clr-control-label">{{ toLabelValue }}</label>
12975
+ <input
12976
+ clrInput
12977
+ class="datagrid-numeric-filter-input"
12978
+ #input_high
12979
+ type="number"
12980
+ autocomplete="off"
12981
+ name="high"
12982
+ [(ngModel)]="high"
12983
+ [placeholder]="maxPlaceholderValue"
12984
+ [attr.aria-label]="maxPlaceholderValue"
12985
+ />
12986
+ </div>
12987
+ </div>
12926
12988
  </clr-dg-filter>
12927
12989
  `,
12928
12990
  }]
@@ -12932,6 +12994,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
12932
12994
  }], maxPlaceholder: [{
12933
12995
  type: Input,
12934
12996
  args: ['clrFilterMaxPlaceholder']
12997
+ }], fromLabel: [{
12998
+ type: Input,
12999
+ args: ['clrFilterFromLabel']
13000
+ }], toLabel: [{
13001
+ type: Input,
13002
+ args: ['clrFilterToLabel']
12935
13003
  }], filterValueChange: [{
12936
13004
  type: Output,
12937
13005
  args: ['clrFilterValueChange']
@@ -13518,6 +13586,19 @@ var ClrDatagridSortOrder;
13518
13586
  ClrDatagridSortOrder[ClrDatagridSortOrder["DESC"] = -1] = "DESC";
13519
13587
  })(ClrDatagridSortOrder || (ClrDatagridSortOrder = {}));
13520
13588
 
13589
+ /*
13590
+ * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
13591
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
13592
+ * This software is released under MIT license.
13593
+ * The full license information can be found in LICENSE in the root directory of this project.
13594
+ */
13595
+ // @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
13596
+ // There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
13597
+ const NO_LAYOUT_CLASS = 'datagrid-no-layout';
13598
+ const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
13599
+ const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
13600
+ const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
13601
+
13521
13602
  /*
13522
13603
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
13523
13604
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -13956,15 +14037,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
13956
14037
  * The full license information can be found in LICENSE in the root directory of this project.
13957
14038
  */
13958
14039
  class ClrDatagridColumn extends DatagridFilterRegistrar {
13959
- constructor(_sort, filters, vcr, detailService, changeDetectorRef) {
14040
+ constructor(el, _sort, filters, vcr, detailService, changeDetectorRef) {
13960
14041
  super(filters);
14042
+ this.el = el;
13961
14043
  this._sort = _sort;
13962
14044
  this.vcr = vcr;
13963
14045
  this.detailService = detailService;
13964
14046
  this.changeDetectorRef = changeDetectorRef;
13965
14047
  this.sortOrderChange = new EventEmitter();
13966
14048
  this.filterValueChange = new EventEmitter();
13967
- this.showSeparator = true;
13968
14049
  /**
13969
14050
  * A custom filter for this column that can be provided in the projected content
13970
14051
  */
@@ -13983,9 +14064,20 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13983
14064
  * Subscription to the sort service changes
13984
14065
  */
13985
14066
  this.subscriptions = [];
14067
+ this._showSeparator = true;
13986
14068
  this.subscriptions.push(this.listenForSortingChanges());
13987
14069
  this.subscriptions.push(this.listenForDetailPaneChanges());
13988
14070
  }
14071
+ get isHidden() {
14072
+ return this.el.nativeElement.classList.contains(HIDDEN_COLUMN_CLASS);
14073
+ }
14074
+ get showSeparator() {
14075
+ return this._showSeparator;
14076
+ }
14077
+ set showSeparator(value) {
14078
+ this._showSeparator = value;
14079
+ this.changeDetectorRef.markForCheck();
14080
+ }
13989
14081
  // TODO: We might want to make this an enum in the future
13990
14082
  get colType() {
13991
14083
  return this._colType;
@@ -14161,8 +14253,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
14161
14253
  return this.detailService.stateChange.subscribe(state => {
14162
14254
  if (this.showSeparator !== !state) {
14163
14255
  this.showSeparator = !state;
14164
- // Have to manually change because of OnPush
14165
- this.changeDetectorRef.markForCheck();
14166
14256
  }
14167
14257
  });
14168
14258
  }
@@ -14195,7 +14285,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
14195
14285
  }
14196
14286
  }
14197
14287
  }
14198
- ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
14288
+ ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: i0.ElementRef }, { token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
14199
14289
  ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
14200
14290
  <div class="datagrid-column-flex">
14201
14291
  <button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
@@ -14236,7 +14326,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
14236
14326
 
14237
14327
  <clr-dg-column-separator *ngIf="showSeparator"></clr-dg-column-separator>
14238
14328
  </div>
14239
- `, isInline: true, 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: ClrDatagridColumnSeparator, selector: "clr-dg-column-separator" }, { kind: "component", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: ["clrFilterMinPlaceholder", "clrFilterMaxPlaceholder", "clrFilterValue", "clrDgNumericFilter"], outputs: ["clrFilterValueChange"] }, { kind: "component", type: DatagridStringFilter, selector: "clr-dg-string-filter", inputs: ["clrFilterPlaceholder", "clrDgStringFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14329
+ `, isInline: true, 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: ClrDatagridColumnSeparator, selector: "clr-dg-column-separator" }, { kind: "component", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: ["clrFilterMinPlaceholder", "clrFilterMaxPlaceholder", "clrFilterFromLabel", "clrFilterToLabel", "clrFilterValue", "clrDgNumericFilter"], outputs: ["clrFilterValueChange"] }, { kind: "component", type: DatagridStringFilter, selector: "clr-dg-string-filter", inputs: ["clrFilterPlaceholder", "clrDgStringFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14240
14330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, decorators: [{
14241
14331
  type: Component,
14242
14332
  args: [{
@@ -14290,7 +14380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14290
14380
  },
14291
14381
  changeDetection: ChangeDetectionStrategy.OnPush,
14292
14382
  }]
14293
- }], ctorParameters: function () { return [{ type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
14383
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
14294
14384
  type: Input,
14295
14385
  args: ['clrFilterStringPlaceholder']
14296
14386
  }], filterNumberMaxPlaceholder: [{
@@ -14503,11 +14593,10 @@ class ClrDatagridItems {
14503
14593
  this.template = template;
14504
14594
  this.differs = differs;
14505
14595
  this.items = items;
14506
- this.vcr = vcr;
14507
14596
  this.differ = null;
14508
14597
  this.subscriptions = [];
14509
14598
  items.smartenUp();
14510
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
14599
+ this.iterableProxy = new NgForOf(vcr, template, differs);
14511
14600
  this.subscriptions.push(items.change.subscribe(newItems => {
14512
14601
  this.iterableProxy.ngForOf = newItems;
14513
14602
  this.iterableProxy.ngDoCheck();
@@ -15005,9 +15094,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15005
15094
  */
15006
15095
  let nbSelection = 0;
15007
15096
  class Selection {
15008
- constructor(_items, _filters) {
15097
+ constructor(_items, filters) {
15009
15098
  this._items = _items;
15010
- this._filters = _filters;
15011
15099
  this.preserveSelection = false;
15012
15100
  /**
15013
15101
  * Shift key state, for use in range selection.
@@ -15028,13 +15116,13 @@ class Selection {
15028
15116
  */
15029
15117
  this.subscriptions = [];
15030
15118
  this.id = 'clr-dg-selection' + nbSelection++;
15031
- this.subscriptions.push(this._filters.change.subscribe(() => {
15119
+ this.subscriptions.push(filters.change.subscribe(() => {
15032
15120
  if (!this._selectable || this.preserveSelection) {
15033
15121
  return;
15034
15122
  }
15035
15123
  this.clearSelection();
15036
15124
  }));
15037
- this.subscriptions.push(this._items.allChanges.subscribe(updatedItems => {
15125
+ this.subscriptions.push(_items.allChanges.subscribe(updatedItems => {
15038
15126
  // Reset the lockedRefs;
15039
15127
  const updateLockedRef = [];
15040
15128
  switch (this.selectionType) {
@@ -15046,10 +15134,10 @@ class Selection {
15046
15134
  let selectionUpdated = false;
15047
15135
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
15048
15136
  if (this.currentSingle && !this.prevSingleSelectionRef) {
15049
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
15137
+ this.prevSingleSelectionRef = _items.trackBy(this.currentSingle);
15050
15138
  }
15051
15139
  updatedItems.forEach(item => {
15052
- const ref = this._items.trackBy(item);
15140
+ const ref = _items.trackBy(item);
15053
15141
  // If one of the updated items is the previously selectedSingle, set it as the new one
15054
15142
  if (this.prevSingleSelectionRef === ref) {
15055
15143
  newSingle = item;
@@ -15063,7 +15151,7 @@ class Selection {
15063
15151
  // Therefore, we should delete the currentSingle if it used to be defined but doesn't exist anymore.
15064
15152
  // No explicit "delete" is required, since newSingle would be undefined at this point.
15065
15153
  // Marking it as selectionUpdated here will set currentSingle to undefined below in the setTimeout.
15066
- if (this._items.smart && !newSingle) {
15154
+ if (_items.smart && !newSingle) {
15067
15155
  selectionUpdated = true;
15068
15156
  }
15069
15157
  // TODO: Discussed this with Eudes and this is fine for now.
@@ -15084,7 +15172,7 @@ class Selection {
15084
15172
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
15085
15173
  this.prevSelectionRefs = [];
15086
15174
  this.current.forEach(item => {
15087
- this.prevSelectionRefs.push(this._items.trackBy(item));
15175
+ this.prevSelectionRefs.push(_items.trackBy(item));
15088
15176
  });
15089
15177
  }
15090
15178
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
@@ -15093,7 +15181,7 @@ class Selection {
15093
15181
  //
15094
15182
  // The both loops below that goes over updatedItems could be combined into one.
15095
15183
  updatedItems.forEach(item => {
15096
- const ref = this._items.trackBy(item);
15184
+ const ref = _items.trackBy(item);
15097
15185
  if (this.lockedRefs.indexOf(ref) > -1) {
15098
15186
  updateLockedRef.push(ref);
15099
15187
  }
@@ -15103,7 +15191,7 @@ class Selection {
15103
15191
  // the if statement below results in broken behavior.
15104
15192
  if (leftOver.length > 0) {
15105
15193
  updatedItems.forEach(item => {
15106
- const ref = this._items.trackBy(item);
15194
+ const ref = _items.trackBy(item);
15107
15195
  // Look in current selected refs array if item is selected, and update actual value
15108
15196
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
15109
15197
  if (selectedIndex > -1) {
@@ -15113,7 +15201,7 @@ class Selection {
15113
15201
  });
15114
15202
  // Filter out any unmatched items if we're using smart datagrids where we expect all items to be
15115
15203
  // present
15116
- if (this._items.smart) {
15204
+ if (_items.smart) {
15117
15205
  leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);
15118
15206
  if (this.current.length !== leftOver.length) {
15119
15207
  selectionUpdated = true;
@@ -15432,8 +15520,6 @@ class ClrDatagridRow {
15432
15520
  this.detailService = detailService;
15433
15521
  this.displayMode = displayMode;
15434
15522
  this.vcr = vcr;
15435
- this.renderer = renderer;
15436
- this.el = el;
15437
15523
  this.commonStrings = commonStrings;
15438
15524
  this.items = items;
15439
15525
  this.document = document;
@@ -15461,17 +15547,17 @@ class ClrDatagridRow {
15461
15547
  this.radioId = 'clr-dg-row-rd' + nbRow;
15462
15548
  this.checkboxId = 'clr-dg-row-cb' + nbRow;
15463
15549
  this.expandableId = expand.expandableId;
15464
- this.subscriptions.push(combineLatest(this.expand.replace, this.expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15550
+ this.subscriptions.push(combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15465
15551
  if (expandReplaceValue && expandChangeValue) {
15466
15552
  // replaced and expanding
15467
15553
  this.replaced = true;
15468
- this.renderer.addClass(this.el.nativeElement, 'datagrid-row-replaced');
15554
+ renderer.addClass(el.nativeElement, 'datagrid-row-replaced');
15469
15555
  }
15470
15556
  else {
15471
15557
  this.replaced = false;
15472
15558
  // Handles these cases: not replaced and collapsing & replaced and
15473
15559
  // collapsing and not replaced and expanding.
15474
- this.renderer.removeClass(this.el.nativeElement, 'datagrid-row-replaced');
15560
+ renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');
15475
15561
  }
15476
15562
  }));
15477
15563
  }
@@ -15879,19 +15965,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15879
15965
  type: Injectable
15880
15966
  }], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
15881
15967
 
15882
- /*
15883
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
15884
- * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
15885
- * This software is released under MIT license.
15886
- * The full license information can be found in LICENSE in the root directory of this project.
15887
- */
15888
- // @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
15889
- // There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
15890
- const NO_LAYOUT_CLASS = 'datagrid-no-layout';
15891
- const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
15892
- const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
15893
- const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
15894
-
15895
15968
  /*
15896
15969
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
15897
15970
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -16013,7 +16086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16013
16086
  * The full license information can be found in LICENSE in the root directory of this project.
16014
16087
  */
16015
16088
  class ClrDatagrid {
16016
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
16089
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, keyNavigation, zone) {
16017
16090
  this.organizer = organizer;
16018
16091
  this.items = items;
16019
16092
  this.expandableRows = expandableRows;
@@ -16027,7 +16100,6 @@ class ClrDatagrid {
16027
16100
  this.el = el;
16028
16101
  this.page = page;
16029
16102
  this.commonStrings = commonStrings;
16030
- this.columnsService = columnsService;
16031
16103
  this.keyNavigation = keyNavigation;
16032
16104
  this.zone = zone;
16033
16105
  this.clrDgSingleSelectionAriaLabel = this.commonStrings.keys.singleSelectionAriaLabel;
@@ -16049,7 +16121,7 @@ class ClrDatagrid {
16049
16121
  this._subscriptions = [];
16050
16122
  const datagridId = uniqueIdFactory();
16051
16123
  this.selectAllId = 'clr-dg-select-all-' + datagridId;
16052
- this.detailService.id = datagridId;
16124
+ detailService.id = datagridId;
16053
16125
  }
16054
16126
  /**
16055
16127
  * Freezes the datagrid while data is loading
@@ -16271,7 +16343,7 @@ class ClrDatagrid {
16271
16343
  this.items.refresh();
16272
16344
  }
16273
16345
  }
16274
- ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16346
+ ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16275
16347
  ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
16276
16348
  Selection,
16277
16349
  Sort,
@@ -16315,7 +16387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16315
16387
  return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
16316
16388
  type: Inject,
16317
16389
  args: [DOCUMENT]
16318
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }];
16390
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }];
16319
16391
  }, propDecorators: { loadingMoreItems: [{
16320
16392
  type: Input,
16321
16393
  args: ['clrLoadingMoreItems']
@@ -16422,11 +16494,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16422
16494
  */
16423
16495
  let clrDgActionId = 0;
16424
16496
  class ClrDatagridActionOverflow {
16425
- constructor(rowActionService, commonStrings, platformId, zone, smartToggleService) {
16497
+ constructor(rowActionService, commonStrings, platformId, smartToggleService) {
16426
16498
  this.rowActionService = rowActionService;
16427
16499
  this.commonStrings = commonStrings;
16428
16500
  this.platformId = platformId;
16429
- this.zone = zone;
16430
16501
  this.smartToggleService = smartToggleService;
16431
16502
  this.openChange = new EventEmitter(false);
16432
16503
  this.popoverId = uniqueIdFactory();
@@ -16438,10 +16509,10 @@ class ClrDatagridActionOverflow {
16438
16509
  };
16439
16510
  this._open = false;
16440
16511
  this.subscriptions = [];
16441
- this.rowActionService.register();
16442
- this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
16512
+ rowActionService.register();
16513
+ this.subscriptions.push(smartToggleService.openChange.subscribe(openState => {
16443
16514
  this.open = openState;
16444
- }), this.smartToggleService.popoverVisible.subscribe(visible => {
16515
+ }), smartToggleService.popoverVisible.subscribe(visible => {
16445
16516
  if (visible) {
16446
16517
  this.initializeFocus();
16447
16518
  }
@@ -16478,7 +16549,7 @@ class ClrDatagridActionOverflow {
16478
16549
  }
16479
16550
  }
16480
16551
  }
16481
- ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16552
+ ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16482
16553
  ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
16483
16554
  <button
16484
16555
  tabindex="-1"
@@ -16549,7 +16620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16549
16620
  return [{ type: RowActionService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
16550
16621
  type: Inject,
16551
16622
  args: [PLATFORM_ID]
16552
- }] }, { type: i0.NgZone }, { type: ClrPopoverToggleService }];
16623
+ }] }, { type: ClrPopoverToggleService }];
16553
16624
  }, propDecorators: { buttonLabel: [{
16554
16625
  type: Input,
16555
16626
  args: ['clrDgActionOverflowButtonLabel']
@@ -17006,8 +17077,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
17006
17077
  class DatagridDetailRegisterer {
17007
17078
  constructor(expandableRowsCount) {
17008
17079
  this.expandableRowsCount = expandableRowsCount;
17009
- if (this.expandableRowsCount) {
17010
- this.expandableRowsCount.register();
17080
+ if (expandableRowsCount) {
17081
+ expandableRowsCount.register();
17011
17082
  }
17012
17083
  }
17013
17084
  ngOnDestroy() {
@@ -17136,13 +17207,12 @@ const COLUMN_STATE_PROVIDER = {
17136
17207
  class ClrDatagridHideableColumn {
17137
17208
  constructor(titleTemplateRef, viewContainerRef, columnsService, columnState) {
17138
17209
  this.titleTemplateRef = titleTemplateRef;
17139
- this.viewContainerRef = viewContainerRef;
17140
17210
  this.columnsService = columnsService;
17141
17211
  this.columnState = columnState;
17142
17212
  this.hiddenChange = new EventEmitter();
17143
17213
  this.subscriptions = [];
17144
- this.viewContainerRef.createEmbeddedView(this.titleTemplateRef);
17145
- if (!this.columnState) {
17214
+ viewContainerRef.createEmbeddedView(titleTemplateRef);
17215
+ if (!columnState) {
17146
17216
  throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');
17147
17217
  }
17148
17218
  }
@@ -17229,7 +17299,7 @@ class ClrIfDetail {
17229
17299
  this.stateChange = new EventEmitter(null);
17230
17300
  this.subscriptions = [];
17231
17301
  this.skip = false; // This keeps us from resetting the input and calling the toggle twice
17232
- this.detailService.enabled = true;
17302
+ detailService.enabled = true;
17233
17303
  }
17234
17304
  set state(model) {
17235
17305
  if (!this.skip) {
@@ -17367,7 +17437,7 @@ class ClrDatagridPagination {
17367
17437
  this.commonStrings = commonStrings;
17368
17438
  this.detailService = detailService;
17369
17439
  this.currentChanged = new EventEmitter(false);
17370
- this.page.activated = true;
17440
+ page.activated = true;
17371
17441
  }
17372
17442
  /**
17373
17443
  * Page size
@@ -17852,10 +17922,10 @@ class ClrDatagridVirtualScrollDirective {
17852
17922
  this.cdkVirtualForInputs = {
17853
17923
  cdkVirtualForTrackBy: index => index,
17854
17924
  };
17855
- this.items.smartenUp();
17856
- this.datagrid.hasVirtualScroller = true;
17857
- this.datagrid.detailService.preventFocusScroll = true;
17858
- this.datagridElementRef = this.datagrid.el;
17925
+ items.smartenUp();
17926
+ datagrid.hasVirtualScroller = true;
17927
+ datagrid.detailService.preventFocusScroll = true;
17928
+ this.datagridElementRef = datagrid.el;
17859
17929
  // default
17860
17930
  this.cdkVirtualForTemplateCacheSize = 20;
17861
17931
  this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
@@ -18057,7 +18127,6 @@ class DatagridHeaderRenderer {
18057
18127
  constructor(el, renderer, organizer, domAdapter, columnResizerService, columnsService, columnState) {
18058
18128
  this.el = el;
18059
18129
  this.renderer = renderer;
18060
- this.organizer = organizer;
18061
18130
  this.domAdapter = domAdapter;
18062
18131
  this.columnResizerService = columnResizerService;
18063
18132
  this.columnsService = columnsService;
@@ -18069,7 +18138,7 @@ class DatagridHeaderRenderer {
18069
18138
  this.widthSet = false;
18070
18139
  this.autoSet = false;
18071
18140
  this.subscriptions = [];
18072
- this.subscriptions.push(this.organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
18141
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
18073
18142
  }
18074
18143
  ngOnDestroy() {
18075
18144
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -18217,14 +18286,13 @@ const domAdapterFactory = (platformId) => {
18217
18286
  // Fixes build error
18218
18287
  // @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)
18219
18288
  class DatagridMainRenderer {
18220
- constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18289
+ constructor(datagrid, organizer, items, page, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18290
+ this.datagrid = datagrid;
18221
18291
  this.organizer = organizer;
18222
18292
  this.items = items;
18223
18293
  this.page = page;
18224
- this.domAdapter = domAdapter;
18225
18294
  this.el = el;
18226
18295
  this.renderer = renderer;
18227
- this.detailService = detailService;
18228
18296
  this.tableSizeService = tableSizeService;
18229
18297
  this.columnsService = columnsService;
18230
18298
  this.ngZone = ngZone;
@@ -18238,16 +18306,14 @@ class DatagridMainRenderer {
18238
18306
  * 2) When rows are lazily loaded for the first time
18239
18307
  */
18240
18308
  this.columnsSizesStable = false;
18241
- this.subscriptions.push(this.organizer
18242
- .filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS)
18243
- .subscribe(() => this.computeHeadersWidth()));
18244
- this.subscriptions.push(this.page.sizeChange.subscribe(() => {
18309
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth()));
18310
+ this.subscriptions.push(page.sizeChange.subscribe(() => {
18245
18311
  if (this._heightSet) {
18246
18312
  this.resetDatagridHeight();
18247
18313
  }
18248
18314
  }));
18249
- this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18250
- this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18315
+ this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18316
+ this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18251
18317
  }
18252
18318
  ngOnInit() {
18253
18319
  this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
@@ -18267,10 +18333,9 @@ class DatagridMainRenderer {
18267
18333
  this.tableSizeService.table = this.el;
18268
18334
  }
18269
18335
  ngAfterViewChecked() {
18270
- if (this.shouldStabilizeColumns) {
18271
- setTimeout(() => {
18272
- this.stabilizeColumns();
18273
- }, 0);
18336
+ const datagridIsVisible = this.checkAndUpdateVisibility();
18337
+ if (this.shouldStabilizeColumns && datagridIsVisible) {
18338
+ this.stabilizeColumns();
18274
18339
  }
18275
18340
  if (this.shouldComputeHeight()) {
18276
18341
  this.ngZone.runOutsideAngular(() => {
@@ -18388,6 +18453,7 @@ class DatagridMainRenderer {
18388
18453
  (_b = (_a = row.expandableRow) === null || _a === void 0 ? void 0 : _a.cells.get(columnIndex)) === null || _b === void 0 ? void 0 : _b.setHidden(state);
18389
18454
  }
18390
18455
  });
18456
+ this.updateColumnSeparatorsVisibility();
18391
18457
  this.keyNavigation.resetKeyGrid();
18392
18458
  break;
18393
18459
  case DatagridColumnChanges.INITIALIZE:
@@ -18421,8 +18487,29 @@ class DatagridMainRenderer {
18421
18487
  this.columnsSizesStable = true;
18422
18488
  }
18423
18489
  }
18490
+ checkAndUpdateVisibility() {
18491
+ if (this.el.nativeElement.offsetParent) {
18492
+ this.datagrid.datagrid.nativeElement.style.visibility = 'visible';
18493
+ return true;
18494
+ }
18495
+ else {
18496
+ this.datagrid.datagrid.nativeElement.style.visibility = 'hidden';
18497
+ return false;
18498
+ }
18499
+ }
18500
+ updateColumnSeparatorsVisibility() {
18501
+ const visibleColumns = this.datagrid.columns.filter(column => !column.isHidden);
18502
+ visibleColumns.forEach((column, index) => {
18503
+ if (index === visibleColumns.length - 1) {
18504
+ column.showSeparator = false;
18505
+ }
18506
+ else if (!column.showSeparator) {
18507
+ column.showSeparator = true;
18508
+ }
18509
+ });
18510
+ }
18424
18511
  }
18425
- DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: DomAdapter }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18512
+ DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: ClrDatagrid }, { token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18426
18513
  DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer }], ngImport: i0 });
18427
18514
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
18428
18515
  type: Directive,
@@ -18430,7 +18517,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
18430
18517
  selector: 'clr-datagrid',
18431
18518
  providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],
18432
18519
  }]
18433
- }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: DomAdapter }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18520
+ }], ctorParameters: function () { return [{ type: ClrDatagrid }, { type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18434
18521
  type: ContentChildren,
18435
18522
  args: [DatagridHeaderRenderer]
18436
18523
  }], rows: [{
@@ -19072,8 +19159,8 @@ class RecursiveChildren {
19072
19159
  this.featuresService = featuresService;
19073
19160
  this.expandService = expandService;
19074
19161
  if (expandService) {
19075
- this.subscription = this.expandService.expandChange.subscribe(value => {
19076
- if (!value && this.parent && !this.featuresService.eager && this.featuresService.recursion) {
19162
+ this.subscription = expandService.expandChange.subscribe(value => {
19163
+ if (!value && this.parent && !featuresService.eager && featuresService.recursion) {
19077
19164
  // In the case of lazy-loading recursive trees, we clear the children on collapse.
19078
19165
  // This is better in case they change between two user interaction, and that way
19079
19166
  // the app itself can decide whether to cache them or not.
@@ -19690,7 +19777,7 @@ class ClrTreeNode {
19690
19777
  this.typeAheadKeyBuffer = '';
19691
19778
  this.typeAheadKeyEvent = new Subject();
19692
19779
  this.subscriptions = [];
19693
- if (this.featuresService.recursion) {
19780
+ if (featuresService.recursion) {
19694
19781
  // I'm completely stuck, we have to hack into private properties until either
19695
19782
  // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998
19696
19783
  // are fixed
@@ -19932,7 +20019,7 @@ class ClrTreeNode {
19932
20019
  }
19933
20020
  }
19934
20021
  ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTreeNode, deps: [{ token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
19935
- ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
20022
+ ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19936
20023
  trigger('toggleChildrenAnim', [
19937
20024
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19938
20025
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19952,7 +20039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19952
20039
  ], host: {
19953
20040
  '[class.clr-tree-node]': 'true',
19954
20041
  '[class.disabled]': 'this._model.disabled',
19955
- }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
20042
+ }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19956
20043
  }], ctorParameters: function () {
19957
20044
  return [{ type: undefined, decorators: [{
19958
20045
  type: Inject,
@@ -20001,18 +20088,21 @@ function trimAndLowerCase(value) {
20001
20088
  * The full license information can be found in LICENSE in the root directory of this project.
20002
20089
  */
20003
20090
  class ClrTree {
20004
- constructor(featuresService, focusManagerService, { nativeElement }, renderer, ngZone) {
20091
+ constructor(featuresService, focusManagerService, renderer, el, ngZone) {
20005
20092
  this.featuresService = featuresService;
20006
20093
  this.focusManagerService = focusManagerService;
20094
+ this.renderer = renderer;
20095
+ this.el = el;
20007
20096
  this.subscriptions = [];
20008
- const subscription = ngZone.runOutsideAngular(() => fromEvent(nativeElement, 'focusin').subscribe((event) => {
20009
- if (event.target === nativeElement) {
20097
+ this._isMultiSelectable = false;
20098
+ const subscription = ngZone.runOutsideAngular(() => fromEvent(el.nativeElement, 'focusin').subscribe((event) => {
20099
+ if (event.target === el.nativeElement) {
20010
20100
  // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.
20011
20101
  // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.
20012
- this.focusManagerService.focusFirstVisibleNode();
20102
+ focusManagerService.focusFirstVisibleNode();
20013
20103
  // when the first child gets focus,
20014
20104
  // tree should no longer have tabindex of 0.
20015
- renderer.removeAttribute(nativeElement, 'tabindex');
20105
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
20016
20106
  }
20017
20107
  }));
20018
20108
  this.subscriptions.push(subscription);
@@ -20021,17 +20111,28 @@ class ClrTree {
20021
20111
  this.featuresService.eager = !value;
20022
20112
  }
20023
20113
  get isMultiSelectable() {
20024
- return this.featuresService.selectable && this.rootNodes.length > 0;
20114
+ return this._isMultiSelectable;
20025
20115
  }
20026
20116
  ngAfterContentInit() {
20027
20117
  this.setRootNodes();
20028
20118
  this.subscriptions.push(this.rootNodes.changes.subscribe(() => {
20119
+ this.setMultiSelectable();
20029
20120
  this.setRootNodes();
20030
20121
  }));
20031
20122
  }
20032
20123
  ngOnDestroy() {
20033
20124
  this.subscriptions.forEach(sub => sub.unsubscribe());
20034
20125
  }
20126
+ setMultiSelectable() {
20127
+ if (this.featuresService.selectable && this.rootNodes.length > 0) {
20128
+ this._isMultiSelectable = true;
20129
+ this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');
20130
+ }
20131
+ else {
20132
+ this._isMultiSelectable = false;
20133
+ this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');
20134
+ }
20135
+ }
20035
20136
  setRootNodes() {
20036
20137
  // if node has no parent, it's a root node
20037
20138
  // for recursive tree, this.rootNodes registers also nested children
@@ -20039,8 +20140,8 @@ class ClrTree {
20039
20140
  this.focusManagerService.rootNodeModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);
20040
20141
  }
20041
20142
  }
20042
- ClrTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTree, deps: [{ token: TreeFeaturesService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
20043
- ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"", "attr.aria-multiselectable": "isMultiSelectable" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
20143
+ 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 });
20144
+ ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
20044
20145
  <ng-content></ng-content>
20045
20146
  <clr-recursive-children
20046
20147
  *ngIf="featuresService.recursion"
@@ -20062,10 +20163,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
20062
20163
  host: {
20063
20164
  tabindex: '0',
20064
20165
  '[attr.role]': '"tree"',
20065
- '[attr.aria-multiselectable]': 'isMultiSelectable',
20066
20166
  },
20067
20167
  }]
20068
- }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
20168
+ }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
20069
20169
  type: ContentChildren,
20070
20170
  args: [ClrTreeNode]
20071
20171
  }], lazy: [{
@@ -20152,7 +20252,7 @@ class DropdownFocusHandler {
20152
20252
  this._unlistenFuncs = [];
20153
20253
  this.resetChildren();
20154
20254
  this.moveToFirstItemWhenOpen();
20155
- if (!this.parent) {
20255
+ if (!parent) {
20156
20256
  this.handleRootFocus();
20157
20257
  }
20158
20258
  }
@@ -20352,11 +20452,10 @@ class ClrDropdown {
20352
20452
  this.parent = parent;
20353
20453
  this.toggleService = toggleService;
20354
20454
  this.focusHandler = focusHandler;
20355
- this.cdr = cdr;
20356
20455
  this.isMenuClosable = true;
20357
20456
  this.subscriptions = [];
20358
- this.subscriptions.push(dropdownService.changes.subscribe(value => (this.toggleService.open = value)));
20359
- this.subscriptions.push(toggleService.openChange.subscribe(() => this.cdr.markForCheck()));
20457
+ this.subscriptions.push(dropdownService.changes.subscribe(value => (toggleService.open = value)));
20458
+ this.subscriptions.push(toggleService.openChange.subscribe(() => cdr.markForCheck()));
20360
20459
  }
20361
20460
  ngOnDestroy() {
20362
20461
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -21995,12 +22094,12 @@ class ClrHeader {
21995
22094
  this.isNavLevel2OnPage = false;
21996
22095
  this.openNavLevel = null;
21997
22096
  this.responsiveNavCodes = ResponsiveNavCodes;
21998
- this._subscription = this.responsiveNavService.registeredNavs.subscribe({
22097
+ this._subscription = responsiveNavService.registeredNavs.subscribe({
21999
22098
  next: (navLevelList) => {
22000
22099
  this.initializeNavTriggers(navLevelList);
22001
22100
  },
22002
22101
  });
22003
- this._subscription.add(this.responsiveNavService.navControl
22102
+ this._subscription.add(responsiveNavService.navControl
22004
22103
  .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
22005
22104
  .subscribe(() => {
22006
22105
  this.openNavLevel = null;
@@ -22134,15 +22233,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
22134
22233
  * The full license information can be found in LICENSE in the root directory of this project.
22135
22234
  */
22136
22235
  const createCloseButton = (document, ariaLabel) => {
22236
+ ClarityIcons.addIcons(timesIcon);
22137
22237
  const closeButton = document.createElement('button');
22138
22238
  closeButton.setAttribute('aria-label', ariaLabel);
22139
22239
  closeButton.setAttribute('aria-hidden', 'true');
22140
22240
  closeButton.innerHTML = `
22141
22241
  <cds-icon
22142
22242
  inner-offset="1"
22143
- shape="close"
22243
+ shape="times"
22144
22244
  size="32"
22145
- </cds-icon>
22245
+ ></cds-icon>
22146
22246
  `;
22147
22247
  /**
22148
22248
  * The button is hidden by default based on our Desktop-first approach.
@@ -22624,8 +22724,6 @@ class ClrTabLink {
22624
22724
  this.ifActiveService = ifActiveService;
22625
22725
  this.id = id;
22626
22726
  this.el = el;
22627
- this.cfr = cfr;
22628
- this.viewContainerRef = viewContainerRef;
22629
22727
  this.tabsService = tabsService;
22630
22728
  this.tabsId = tabsId;
22631
22729
  if (!this.tabLinkId) {
@@ -22634,9 +22732,9 @@ class ClrTabLink {
22634
22732
  // Tab links can be rendered in one of two places: in the main area or inside the overflow dropdown menu.
22635
22733
  // Here, we create a container so that its template can be used to create embeddedView on the fly.
22636
22734
  // See TabsService's renderView() method and how it's used in Tabs class for an example.
22637
- const factory = this.cfr.resolveComponentFactory(TemplateRefContainer);
22638
- this.templateRefContainer = this.viewContainerRef.createComponent(factory, undefined, undefined, [
22639
- [this.el.nativeElement],
22735
+ const factory = cfr.resolveComponentFactory(TemplateRefContainer);
22736
+ this.templateRefContainer = viewContainerRef.createComponent(factory, undefined, undefined, [
22737
+ [el.nativeElement],
22640
22738
  ]).instance;
22641
22739
  }
22642
22740
  get inOverflow() {
@@ -23225,7 +23323,7 @@ class ClrVerticalNav {
23225
23323
  this._navGroupRegistrationService = _navGroupRegistrationService;
23226
23324
  this.commonStrings = commonStrings;
23227
23325
  this._collapsedChanged = new EventEmitter(true);
23228
- this._sub = this._navService.collapsedChanged.subscribe(value => {
23326
+ this._sub = _navService.collapsedChanged.subscribe(value => {
23229
23327
  this._collapsedChanged.emit(value);
23230
23328
  });
23231
23329
  }
@@ -23313,27 +23411,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23313
23411
  const EXPANDED_STATE = 'expanded';
23314
23412
  const COLLAPSED_STATE = 'collapsed';
23315
23413
  class ClrVerticalNavGroup {
23316
- constructor(_itemExpand, _navGroupRegistrationService, _navGroupService, _navService, commonStrings) {
23414
+ constructor(_itemExpand, _navGroupRegistrationService, navGroupService, _navService, commonStrings) {
23317
23415
  this._itemExpand = _itemExpand;
23318
23416
  this._navGroupRegistrationService = _navGroupRegistrationService;
23319
- this._navGroupService = _navGroupService;
23320
23417
  this._navService = _navService;
23321
23418
  this.commonStrings = commonStrings;
23322
23419
  this.expandedChange = new EventEmitter(true);
23323
23420
  this.wasExpanded = false;
23324
23421
  this._subscriptions = [];
23325
23422
  this._expandAnimationState = COLLAPSED_STATE;
23326
- this._navGroupRegistrationService.registerNavGroup();
23423
+ _navGroupRegistrationService.registerNavGroup();
23327
23424
  // FIXME: This subscription handles a corner case
23328
23425
  // Vertical Nav collapse requires the animation to run first and then
23329
23426
  // remove the nodes from the DOM. If the user directly sets the input
23330
23427
  // on the clrIfExpanded directive, we have no chance to run the animation
23331
23428
  // and wait for it to complete. This subscription makes sure that the
23332
23429
  // animation states are correct for that edge case.
23333
- this._subscriptions.push(this._itemExpand.expandChange.subscribe(value => {
23430
+ this._subscriptions.push(_itemExpand.expandChange.subscribe(value => {
23334
23431
  if (value && this.expandAnimationState === COLLAPSED_STATE) {
23335
- if (this._navService.collapsed) {
23336
- this._navService.collapsed = false;
23432
+ if (_navService.collapsed) {
23433
+ _navService.collapsed = false;
23337
23434
  }
23338
23435
  this.expandAnimationState = EXPANDED_STATE;
23339
23436
  }
@@ -23343,7 +23440,7 @@ class ClrVerticalNavGroup {
23343
23440
  }));
23344
23441
  // 1. If the nav is collapsing, close the open nav group + save its state
23345
23442
  // 2. If the nav is expanding, expand the nav group if the previous state was expanded
23346
- this._subscriptions.push(this._navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23443
+ this._subscriptions.push(_navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23347
23444
  if (goingToCollapse && this.expanded) {
23348
23445
  this.wasExpanded = true;
23349
23446
  this.expandAnimationState = COLLAPSED_STATE;
@@ -23354,7 +23451,7 @@ class ClrVerticalNavGroup {
23354
23451
  }
23355
23452
  }));
23356
23453
  // If a link is clicked, expand the nav group
23357
- this._subscriptions.push(this._navGroupService.expandChange.subscribe((expand) => {
23454
+ this._subscriptions.push(navGroupService.expandChange.subscribe((expand) => {
23358
23455
  if (expand && !this.expanded) {
23359
23456
  this.expandGroup();
23360
23457
  }
@@ -23483,7 +23580,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23483
23580
  class ClrVerticalNavIcon {
23484
23581
  constructor(_verticalNavIconService) {
23485
23582
  this._verticalNavIconService = _verticalNavIconService;
23486
- this._verticalNavIconService.registerIcon();
23583
+ _verticalNavIconService.registerIcon();
23487
23584
  }
23488
23585
  ngOnDestroy() {
23489
23586
  this._verticalNavIconService.unregisterIcon();
@@ -23651,9 +23748,10 @@ class ClrModalConfigurationService {
23651
23748
  }
23652
23749
  }
23653
23750
  ClrModalConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23654
- ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService });
23751
+ ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, providedIn: 'root' });
23655
23752
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, decorators: [{
23656
- type: Injectable
23753
+ type: Injectable,
23754
+ args: [{ providedIn: 'root' }]
23657
23755
  }] });
23658
23756
 
23659
23757
  /*
@@ -23835,11 +23933,11 @@ class ClrModalBody {
23835
23933
  this.unlisteners = [];
23836
23934
  ngZone.runOutsideAngular(() => {
23837
23935
  this.observer = new ResizeObserver(() => this.addOrRemoveTabIndex());
23838
- this.observer.observe(this.host.nativeElement);
23839
- this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
23936
+ this.observer.observe(host.nativeElement);
23937
+ this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
23840
23938
  // set the tabindex binding back when click is completed with mouseup
23841
23939
  this.addOrRemoveTabIndex();
23842
- }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
23940
+ }), renderer.listen(host.nativeElement, 'mousedown', () => {
23843
23941
  // tabindex = 0 binding should be removed
23844
23942
  // so it won't be focused when click starts with mousedown
23845
23943
  this.removeTabIndex();
@@ -23892,14 +23990,13 @@ class ClrModalModule {
23892
23990
  }
23893
23991
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23894
23992
  ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrIconModule] });
23895
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, providers: [ClrModalConfigurationService], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23993
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23896
23994
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
23897
23995
  type: NgModule,
23898
23996
  args: [{
23899
23997
  imports: [CommonModule, CdkTrapFocusModule, ClrIconModule],
23900
23998
  declarations: [CLR_MODAL_DIRECTIVES],
23901
23999
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule],
23902
- providers: [ClrModalConfigurationService],
23903
24000
  }]
23904
24001
  }], ctorParameters: function () { return []; } });
23905
24002
 
@@ -24057,7 +24154,6 @@ class ClrSignpostContent extends AbstractPopover {
24057
24154
  constructor(injector, parentHost, commonStrings, signpostIdService, signpostFocusManager, platformId, document) {
24058
24155
  super(injector, parentHost);
24059
24156
  this.commonStrings = commonStrings;
24060
- this.signpostIdService = signpostIdService;
24061
24157
  this.signpostFocusManager = signpostFocusManager;
24062
24158
  this.platformId = platformId;
24063
24159
  this.signpostContentId = uniqueIdFactory();
@@ -24067,7 +24163,7 @@ class ClrSignpostContent extends AbstractPopover {
24067
24163
  // Defaults
24068
24164
  this.position = 'right-middle';
24069
24165
  this.closeOnOutsideClick = true;
24070
- this.signpostIdService.setId(this.signpostContentId);
24166
+ signpostIdService.setId(this.signpostContentId);
24071
24167
  this.document = document;
24072
24168
  }
24073
24169
  /*********
@@ -24456,11 +24552,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
24456
24552
  class ClrTooltipTrigger {
24457
24553
  constructor(toggleService, tooltipIdService, tooltipMouseService) {
24458
24554
  this.toggleService = toggleService;
24459
- this.tooltipIdService = tooltipIdService;
24460
24555
  this.tooltipMouseService = tooltipMouseService;
24461
24556
  this.subs = [];
24462
24557
  // The aria-described by comes from the id of content. It
24463
- this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24558
+ this.subs.push(tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24464
24559
  }
24465
24560
  ngOnDestroy() {
24466
24561
  this.subs.forEach(sub => sub.unsubscribe());
@@ -25574,7 +25669,7 @@ class WizardNavigationService {
25574
25669
  * @memberof WizardNavigationService
25575
25670
  */
25576
25671
  this._cancelWizard = new Subject();
25577
- this.previousButtonSubscription = this.buttonService.previousBtnClicked.subscribe(() => {
25672
+ this.previousButtonSubscription = buttonService.previousBtnClicked.subscribe(() => {
25578
25673
  const currentPage = this.currentPage;
25579
25674
  if (this.currentPageIsFirst || currentPage.previousStepDisabled) {
25580
25675
  return;
@@ -25584,21 +25679,21 @@ class WizardNavigationService {
25584
25679
  this.previous();
25585
25680
  }
25586
25681
  });
25587
- this.nextButtonSubscription = this.buttonService.nextBtnClicked.subscribe(() => {
25682
+ this.nextButtonSubscription = buttonService.nextBtnClicked.subscribe(() => {
25588
25683
  this.checkAndCommitCurrentPage('next');
25589
25684
  });
25590
- this.dangerButtonSubscription = this.buttonService.dangerBtnClicked.subscribe(() => {
25685
+ this.dangerButtonSubscription = buttonService.dangerBtnClicked.subscribe(() => {
25591
25686
  this.checkAndCommitCurrentPage('danger');
25592
25687
  });
25593
- this.finishButtonSubscription = this.buttonService.finishBtnClicked.subscribe(() => {
25688
+ this.finishButtonSubscription = buttonService.finishBtnClicked.subscribe(() => {
25594
25689
  this.checkAndCommitCurrentPage('finish');
25595
25690
  });
25596
- this.customButtonSubscription = this.buttonService.customBtnClicked.subscribe((type) => {
25691
+ this.customButtonSubscription = buttonService.customBtnClicked.subscribe((type) => {
25597
25692
  if (!this.wizardStopNavigation) {
25598
25693
  this.currentPage.customButtonClicked.emit(type);
25599
25694
  }
25600
25695
  });
25601
- this.cancelButtonSubscription = this.buttonService.cancelBtnClicked.subscribe(() => {
25696
+ this.cancelButtonSubscription = buttonService.cancelBtnClicked.subscribe(() => {
25602
25697
  if (this.wizardStopNavigation) {
25603
25698
  return;
25604
25699
  }
@@ -25609,7 +25704,7 @@ class WizardNavigationService {
25609
25704
  this.cancel();
25610
25705
  }
25611
25706
  });
25612
- this.pagesResetSubscription = this.pageCollection.pagesReset.subscribe(() => {
25707
+ this.pagesResetSubscription = pageCollection.pagesReset.subscribe(() => {
25613
25708
  this.setFirstPageCurrent();
25614
25709
  });
25615
25710
  }
@@ -26947,16 +27042,23 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
26947
27042
  [attr.disabled]="isDisabled ? '' : null"
26948
27043
  >
26949
27044
  <div class="clr-wizard-stepnav-link-icon">
26950
- <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26951
- <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
27045
+ <cds-icon
27046
+ *ngIf="hasError"
27047
+ shape="error-standard"
27048
+ [attr.aria-label]="commonStrings.keys.wizardStepError"
27049
+ ></cds-icon>
27050
+ <cds-icon
27051
+ *ngIf="!hasError && isComplete"
27052
+ shape="success-standard"
27053
+ [attr.aria-label]="commonStrings.keys.wizardStepSuccess"
27054
+ ></cds-icon>
26952
27055
  </div>
26953
27056
 
27057
+ <span class="clr-sr-only">{{ commonStrings.keys.wizardStep }}</span>
26954
27058
  <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26955
27059
  <span class="clr-wizard-stepnav-link-title">
26956
27060
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26957
27061
  </span>
26958
- <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
26959
- <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
26960
27062
  </button>
26961
27063
  `, isInline: true, 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" }] });
26962
27064
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
@@ -26971,16 +27073,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
26971
27073
  [attr.disabled]="isDisabled ? '' : null"
26972
27074
  >
26973
27075
  <div class="clr-wizard-stepnav-link-icon">
26974
- <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26975
- <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
27076
+ <cds-icon
27077
+ *ngIf="hasError"
27078
+ shape="error-standard"
27079
+ [attr.aria-label]="commonStrings.keys.wizardStepError"
27080
+ ></cds-icon>
27081
+ <cds-icon
27082
+ *ngIf="!hasError && isComplete"
27083
+ shape="success-standard"
27084
+ [attr.aria-label]="commonStrings.keys.wizardStepSuccess"
27085
+ ></cds-icon>
26976
27086
  </div>
26977
27087
 
27088
+ <span class="clr-sr-only">{{ commonStrings.keys.wizardStep }}</span>
26978
27089
  <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26979
27090
  <span class="clr-wizard-stepnav-link-title">
26980
27091
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26981
27092
  </span>
26982
- <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
26983
- <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
26984
27093
  </button>
26985
27094
  `,
26986
27095
  host: {
@@ -28123,5 +28232,5 @@ const CLR_MENU_POSITIONS = [
28123
28232
  * Generated bundle index. Do not edit.
28124
28233
  */
28125
28234
 
28126
- export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
28235
+ export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalConfigurationService, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
28127
28236
  //# sourceMappingURL=clr-angular.mjs.map