@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
@@ -223,19 +223,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
223
223
  }]
224
224
  }] });
225
225
 
226
- /*
227
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
228
- * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
229
- * This software is released under MIT license.
230
- * The full license information can be found in LICENSE in the root directory of this project.
231
- */
232
- var AccordionStatus;
233
- (function (AccordionStatus) {
234
- AccordionStatus["Inactive"] = "inactive";
235
- AccordionStatus["Error"] = "error";
236
- AccordionStatus["Complete"] = "complete";
237
- })(AccordionStatus || (AccordionStatus = {}));
238
-
239
226
  /*
240
227
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
241
228
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -328,6 +315,8 @@ const commonStringsDefault = {
328
315
  datagridFilterDialogAriaLabel: 'Filter dialog',
329
316
  columnSeparatorAriaLabel: 'Column resize handle',
330
317
  columnSeparatorDescription: 'Use left or right key to resize the column',
318
+ fromLabel: 'From',
319
+ toLabel: 'To',
331
320
  // Alert
332
321
  alertCloseButtonAriaLabel: 'Close alert',
333
322
  alertNextAlertAriaLabel: 'Next alert message, {CURRENT} of {COUNT}',
@@ -373,6 +362,7 @@ const commonStringsDefault = {
373
362
  datagridExpandableRowContent: 'Expandable row content',
374
363
  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`,
375
364
  // Wizard
365
+ wizardStep: 'Step',
376
366
  wizardStepSuccess: 'Completed',
377
367
  wizardStepError: 'Error',
378
368
  wizardStepnavAriaLabel: 'Step navigation',
@@ -394,6 +384,9 @@ const commonStringsDefault = {
394
384
  fileCount: '{COUNT} files',
395
385
  clearFile: 'Clear {FILE}',
396
386
  clearFiles: 'Clear {COUNT} files',
387
+ // Tree
388
+ selectedTreeNode: 'selected',
389
+ unselectedTreeNode: 'unselected',
397
390
  };
398
391
 
399
392
  /*
@@ -441,6 +434,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
441
434
  }]
442
435
  }] });
443
436
 
437
+ /*
438
+ * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
439
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
440
+ * This software is released under MIT license.
441
+ * The full license information can be found in LICENSE in the root directory of this project.
442
+ */
443
+ var AccordionStatus;
444
+ (function (AccordionStatus) {
445
+ AccordionStatus["Inactive"] = "inactive";
446
+ AccordionStatus["Error"] = "error";
447
+ AccordionStatus["Complete"] = "complete";
448
+ })(AccordionStatus || (AccordionStatus = {}));
449
+
444
450
  /*
445
451
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
446
452
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -570,8 +576,6 @@ class ClrAccordionPanel {
570
576
  this.disabled = false;
571
577
  this.panelOpen = false;
572
578
  this.panelOpenChange = new EventEmitter();
573
- this.AccordionStatus = AccordionStatus;
574
- this.isAccordion = true;
575
579
  this._id = uniqueIdFactory();
576
580
  }
577
581
  get id() {
@@ -647,10 +651,10 @@ class ClrAccordionPanel {
647
651
  }
648
652
  }
649
653
  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 });
650
- 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 });
654
+ 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 });
651
655
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
652
656
  type: Component,
653
- 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" }]
657
+ 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" }]
654
658
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
655
659
  type: Input,
656
660
  args: ['clrAccordionPanelDisabled']
@@ -968,6 +972,9 @@ class StepperModel extends AccordionModel {
968
972
  this._panels[panelId].open = !this._panels[panelId].open;
969
973
  }
970
974
  }
975
+ navigateToPreviousPanel(currentPanelId) {
976
+ this.openPreviousPanel(this._panels[currentPanelId].id);
977
+ }
971
978
  navigateToNextPanel(currentPanelId, currentPanelValid = true) {
972
979
  if (currentPanelValid) {
973
980
  this.completePanel(currentPanelId);
@@ -1011,6 +1018,9 @@ class StepperModel extends AccordionModel {
1011
1018
  getNextPanel(currentPanelId) {
1012
1019
  return this.panels.find(s => s.index === this._panels[currentPanelId].index + 1);
1013
1020
  }
1021
+ getPreviousPanel(currentPanelId) {
1022
+ return this.panels.find(s => s.index === this._panels[currentPanelId].index - 1);
1023
+ }
1014
1024
  resetAllFuturePanels(panelId) {
1015
1025
  this.panels.filter(panel => panel.index >= this._panels[panelId].index).forEach(panel => this.resetPanel(panel.id));
1016
1026
  }
@@ -1049,6 +1059,15 @@ class StepperModel extends AccordionModel {
1049
1059
  this._panels[nextPanel.id].disabled = true;
1050
1060
  }
1051
1061
  }
1062
+ openPreviousPanel(currentPanelId) {
1063
+ const prevPanel = this.getPreviousPanel(currentPanelId);
1064
+ if (prevPanel) {
1065
+ this._panels[currentPanelId].open = false;
1066
+ this._panels[currentPanelId].disabled = false;
1067
+ this._panels[prevPanel.id].open = true;
1068
+ this._panels[prevPanel.id].disabled = true;
1069
+ }
1070
+ }
1052
1071
  setPanelError(panelId) {
1053
1072
  this.resetAllFuturePanels(panelId);
1054
1073
  this._panels[panelId].open = true;
@@ -1095,6 +1114,11 @@ class StepperService extends AccordionService {
1095
1114
  this.accordion.setPanelsWithErrors(ids);
1096
1115
  this.emitUpdatedPanels();
1097
1116
  }
1117
+ navigateToPreviousPanel(currentPanelId) {
1118
+ this.accordion.navigateToPreviousPanel(currentPanelId);
1119
+ this.updatePreviousStep(currentPanelId);
1120
+ this.emitUpdatedPanels();
1121
+ }
1098
1122
  navigateToNextPanel(currentPanelId, currentPanelValid = true) {
1099
1123
  this.accordion.navigateToNextPanel(currentPanelId, currentPanelValid);
1100
1124
  this.updateNextStep(currentPanelId, currentPanelValid);
@@ -1113,6 +1137,12 @@ class StepperService extends AccordionService {
1113
1137
  this._activeStepChanges.next(currentPanelId);
1114
1138
  }
1115
1139
  }
1140
+ updatePreviousStep(currentPanelId) {
1141
+ const prevPanel = this.accordion.getPreviousPanel(currentPanelId);
1142
+ if (prevPanel) {
1143
+ this._activeStepChanges.next(prevPanel.id);
1144
+ }
1145
+ }
1116
1146
  getAllCompletedPanelChanges() {
1117
1147
  return this._panelsChanges.pipe(map(() => this.accordion.allPanelsCompleted), distinctUntilChanged());
1118
1148
  }
@@ -1137,7 +1167,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1137
1167
  this.formGroupName = formGroupName;
1138
1168
  this.ngModelGroup = ngModelGroup;
1139
1169
  this.stepperService = stepperService;
1140
- this.isAccordion = false;
1170
+ this.AccordionStatus = AccordionStatus;
1141
1171
  this.subscriptions = [];
1142
1172
  }
1143
1173
  get id() {
@@ -1178,9 +1208,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1178
1208
  this.subscriptions.push(this.stepperService.activeStep
1179
1209
  .pipe(filter(panelId => isPlatformBrowser(this.platformId) && panelId === this.id))
1180
1210
  .subscribe(() => {
1181
- //Adding timeout so that the status of the previous step is read by Voice Over on Safari,
1182
- //before focusing on the next stepper panel header
1183
- setTimeout(() => this.headerButton.nativeElement.focus(), 1500);
1211
+ this.headerButton.nativeElement.focus();
1184
1212
  }));
1185
1213
  }
1186
1214
  triggerAllFormControlValidationIfError(panel) {
@@ -1190,10 +1218,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
1190
1218
  }
1191
1219
  }
1192
1220
  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 });
1193
- 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 });
1221
+ 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 });
1194
1222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
1195
1223
  type: Component,
1196
- 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" }]
1224
+ 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" }]
1197
1225
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1198
1226
  type: Inject,
1199
1227
  args: [PLATFORM_ID]
@@ -1215,6 +1243,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
1215
1243
  var ClrStepButtonType;
1216
1244
  (function (ClrStepButtonType) {
1217
1245
  ClrStepButtonType["Next"] = "next";
1246
+ ClrStepButtonType["Previous"] = "previous";
1218
1247
  ClrStepButtonType["Submit"] = "submit";
1219
1248
  })(ClrStepButtonType || (ClrStepButtonType = {}));
1220
1249
  class ClrStepButton {
@@ -1223,16 +1252,22 @@ class ClrStepButton {
1223
1252
  this.stepperService = stepperService;
1224
1253
  this.type = ClrStepButtonType.Next;
1225
1254
  this.submitButton = false;
1255
+ this.previousButton = false;
1226
1256
  }
1227
1257
  ngOnInit() {
1228
1258
  this.submitButton = this.type === ClrStepButtonType.Submit;
1259
+ this.previousButton = this.type === ClrStepButtonType.Previous;
1229
1260
  }
1230
1261
  navigateToNextPanel() {
1262
+ if (this.previousButton) {
1263
+ this.stepperService.navigateToPreviousPanel(this.clrStep.id);
1264
+ return;
1265
+ }
1231
1266
  this.stepperService.navigateToNextPanel(this.clrStep.id, this.clrStep.formGroup.valid);
1232
1267
  }
1233
1268
  }
1234
1269
  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 });
1235
- 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 });
1270
+ 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 });
1236
1271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepButton, decorators: [{
1237
1272
  type: Directive,
1238
1273
  args: [{
@@ -1248,7 +1283,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
1248
1283
  args: ['clrStepButton']
1249
1284
  }], submitButton: [{
1250
1285
  type: HostBinding,
1251
- args: ['class.btn-primary']
1286
+ args: ['class.btn-success']
1287
+ }], previousButton: [{
1288
+ type: HostBinding,
1289
+ args: ['class.btn-link']
1252
1290
  }], navigateToNextPanel: [{
1253
1291
  type: HostListener,
1254
1292
  args: ['click']
@@ -2229,6 +2267,7 @@ class ClrPopoverContent {
2229
2267
  this.subscriptions = [];
2230
2268
  this.removeClickListenerFn = null;
2231
2269
  this.shouldRealign = false;
2270
+ this.previousContentHeight = null;
2232
2271
  // Check-collector pattern:
2233
2272
  // In order to get accurate content height/width values, we cannot calculate alignment offsets until
2234
2273
  // after the projected content has stabilized.
@@ -2250,9 +2289,14 @@ class ClrPopoverContent {
2250
2289
  this.smartEventsService.scrollToClose = !!scrollToClose;
2251
2290
  }
2252
2291
  ngAfterContentChecked() {
2253
- if (this.smartOpenService.open && this.view && this.shouldRealign) {
2254
- // Channel content-check event through the check-collector
2255
- this.checkCollector.emit();
2292
+ if (this.smartOpenService.open && this.view) {
2293
+ const rootNodeOffsetHeight = this.view.rootNodes[0].offsetHeight;
2294
+ if (this.shouldRealign ||
2295
+ (this.previousContentHeight !== null && this.previousContentHeight !== rootNodeOffsetHeight)) {
2296
+ // Channel content-check event through the check-collector
2297
+ this.previousContentHeight = rootNodeOffsetHeight;
2298
+ this.checkCollector.emit();
2299
+ }
2256
2300
  }
2257
2301
  }
2258
2302
  ngAfterViewInit() {
@@ -2368,7 +2412,7 @@ class ClrPopoverOpenCloseButton {
2368
2412
  this.smartOpenService = smartOpenService;
2369
2413
  this.openCloseChange = new EventEmitter();
2370
2414
  this.subscriptions = [];
2371
- this.subscriptions.push(this.smartOpenService.openChange.subscribe(change => {
2415
+ this.subscriptions.push(smartOpenService.openChange.subscribe(change => {
2372
2416
  this.openCloseChange.next(change);
2373
2417
  }));
2374
2418
  }
@@ -3321,7 +3365,7 @@ class ClrIfActive {
3321
3365
  this.activeChange = new EventEmitter(false);
3322
3366
  this.wasActive = false;
3323
3367
  this.checkAndUpdateView(ifActiveService.current);
3324
- this.subscription = this.ifActiveService.currentChange.subscribe(newCurrentId => {
3368
+ this.subscription = ifActiveService.currentChange.subscribe(newCurrentId => {
3325
3369
  this.checkAndUpdateView(newCurrentId);
3326
3370
  });
3327
3371
  }
@@ -3411,7 +3455,7 @@ class ClrIfOpen {
3411
3455
  * used with de-structured / de-sugared syntax.
3412
3456
  */
3413
3457
  this.openChange = new EventEmitter(false);
3414
- this.subscription = this.toggleService.openChange.subscribe(change => {
3458
+ this.subscription = toggleService.openChange.subscribe(change => {
3415
3459
  this.updateView(change);
3416
3460
  this.openChange.emit(change);
3417
3461
  });
@@ -3481,7 +3525,7 @@ class ClrIfExpanded {
3481
3525
  this._subscriptions = [];
3482
3526
  this._subscriptions.push(expand.expandChange.subscribe(() => {
3483
3527
  this.updateView();
3484
- this.expandedChange.emit(this.expand.expanded);
3528
+ this.expandedChange.emit(expand.expanded);
3485
3529
  }));
3486
3530
  }
3487
3531
  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
  }
@@ -4500,12 +4544,11 @@ var CONTROL_STATE;
4500
4544
  })(CONTROL_STATE || (CONTROL_STATE = {}));
4501
4545
  class IfControlStateService {
4502
4546
  constructor(ngControlService) {
4503
- this.ngControlService = ngControlService;
4504
4547
  this.subscriptions = [];
4505
4548
  // Implement our own status changes observable, since Angular controls don't
4506
4549
  this._statusChanges = new BehaviorSubject(CONTROL_STATE.NONE);
4507
4550
  // Wait for the control to be available
4508
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4551
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4509
4552
  if (control) {
4510
4553
  this.control = control;
4511
4554
  // Subscribe to the status change events, only after touched
@@ -4755,14 +4798,14 @@ class ClrAbstractContainer {
4755
4798
  this.ngControlService = ngControlService;
4756
4799
  this._dynamic = false;
4757
4800
  this.subscriptions = [];
4758
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
4801
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
4759
4802
  this.state = state;
4760
4803
  // Make sure everything is updated before dispatching the values for helpers
4761
4804
  setTimeout(() => {
4762
4805
  this.updateHelpers();
4763
4806
  });
4764
4807
  }));
4765
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
4808
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
4766
4809
  this.control = control;
4767
4810
  }));
4768
4811
  }
@@ -5015,10 +5058,10 @@ class WrappedFormControl {
5015
5058
  this.vcr = vcr;
5016
5059
  this.wrapperType = wrapperType;
5017
5060
  this.ngControl = ngControl;
5018
- this.index = 0;
5019
- this.subscriptions = [];
5020
5061
  this.renderer = renderer;
5021
5062
  this.el = el;
5063
+ this.index = 0;
5064
+ this.subscriptions = [];
5022
5065
  if (injector) {
5023
5066
  this.ngControlService = injector.get(NgControlService, null);
5024
5067
  this.ifControlStateService = injector.get(IfControlStateService, null);
@@ -5239,12 +5282,12 @@ class AbstractIfState {
5239
5282
  this.subscriptions = [];
5240
5283
  this.displayedContent = false;
5241
5284
  if (ngControlService) {
5242
- this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => {
5285
+ this.subscriptions.push(ngControlService.controlChanges.subscribe(control => {
5243
5286
  this.control = control;
5244
5287
  }));
5245
5288
  }
5246
5289
  if (ifControlStateService) {
5247
- this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => {
5290
+ this.subscriptions.push(ifControlStateService.statusChanges.subscribe((state) => {
5248
5291
  this.handleState(state);
5249
5292
  }));
5250
5293
  }
@@ -6801,7 +6844,7 @@ class ClrOption {
6801
6844
  this.optionSelectionService = optionSelectionService;
6802
6845
  // A proxy with only the necessary data to be used for a11y and the focus handler service.
6803
6846
  this.optionProxy = new OptionData(null, null);
6804
- this.optionProxy.el = this.elRef.nativeElement;
6847
+ this.optionProxy.el = elRef.nativeElement;
6805
6848
  }
6806
6849
  get optionId() {
6807
6850
  return this._id;
@@ -7065,7 +7108,7 @@ class ClrCombobox extends WrappedFormControl {
7065
7108
  control.valueAccessor = this;
7066
7109
  }
7067
7110
  // default to SingleSelectComboboxModel, in case the optional input [ClrMulti] isn't used
7068
- this.optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7111
+ optionSelectionService.selectionModel = new SingleSelectComboboxModel();
7069
7112
  this.updateControlValue();
7070
7113
  }
7071
7114
  get multiSelect() {
@@ -7361,11 +7404,10 @@ class ClrOptionItems {
7361
7404
  this.differs = differs;
7362
7405
  this.optionService = optionService;
7363
7406
  this.positionService = positionService;
7364
- this.vcr = vcr;
7365
7407
  this.subscriptions = [];
7366
7408
  this.filter = '';
7367
7409
  this.differ = null;
7368
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
7410
+ this.iterableProxy = new NgForOf(vcr, template, differs);
7369
7411
  this.subscriptions.push(optionService.inputChanged.subscribe(filter => {
7370
7412
  this.filter = filter;
7371
7413
  this.updateItems();
@@ -7745,10 +7787,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
7745
7787
  class ClrDatalistContainer extends ClrAbstractContainer {
7746
7788
  constructor(controlClassService, layoutService, ngControlService, focusService, ifControlStateService) {
7747
7789
  super(ifControlStateService, layoutService, controlClassService, ngControlService);
7748
- this.focusService = focusService;
7749
7790
  this.ifControlStateService = ifControlStateService;
7750
7791
  this.focus = false;
7751
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => (this.focus = state)));
7792
+ this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
7752
7793
  }
7753
7794
  }
7754
7795
  ClrDatalistContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatalistContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
@@ -7852,7 +7893,7 @@ class ClrDatalistInput extends WrappedFormControl {
7852
7893
  super(vcr, ClrDatalistContainer, injector, control, renderer, el);
7853
7894
  this.focusService = focusService;
7854
7895
  this.datalistIdService = datalistIdService;
7855
- if (!this.focusService) {
7896
+ if (!focusService) {
7856
7897
  throw new Error('clrDatalist requires being wrapped in <clr-datalist-container>');
7857
7898
  }
7858
7899
  }
@@ -8626,8 +8667,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
8626
8667
  * The full license information can be found in LICENSE in the root directory of this project.
8627
8668
  */
8628
8669
  class DateIOService {
8629
- constructor(_localeHelperService) {
8630
- this._localeHelperService = _localeHelperService;
8670
+ constructor(localeHelperService) {
8631
8671
  this.disabledDates = {
8632
8672
  // This is the default range. It approximates the beginning of time to the end of time.
8633
8673
  // Unless a minDate or maxDate is set with the native HTML5 api the range is all dates
@@ -8638,7 +8678,7 @@ class DateIOService {
8638
8678
  this.cldrLocaleDateFormat = DEFAULT_LOCALE_FORMAT;
8639
8679
  this.localeDisplayFormat = LITTLE_ENDIAN;
8640
8680
  this.delimiters = ['/', '/'];
8641
- this.cldrLocaleDateFormat = this._localeHelperService.localeDateFormat;
8681
+ this.cldrLocaleDateFormat = localeHelperService.localeDateFormat;
8642
8682
  this.initializeLocaleDisplayFormat();
8643
8683
  }
8644
8684
  get placeholderText() {
@@ -9059,7 +9099,7 @@ class DatepickerEnabledService {
9059
9099
  constructor(_document) {
9060
9100
  this._document = _document;
9061
9101
  this._isUserAgentMobile = false;
9062
- if (this._document) {
9102
+ if (_document) {
9063
9103
  this._isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(_document.defaultView.navigator.userAgent);
9064
9104
  this._innerWidth = _document.defaultView.innerWidth;
9065
9105
  }
@@ -9655,18 +9695,17 @@ class ClrDateContainer extends ClrAbstractContainer {
9655
9695
  this.dateFormControlService = dateFormControlService;
9656
9696
  this.dateIOService = dateIOService;
9657
9697
  this.commonStrings = commonStrings;
9658
- this.focusService = focusService;
9659
9698
  this.viewManagerService = viewManagerService;
9660
9699
  this.controlClassService = controlClassService;
9661
9700
  this.layoutService = layoutService;
9662
9701
  this.ngControlService = ngControlService;
9663
9702
  this.ifControlStateService = ifControlStateService;
9664
9703
  this.focus = false;
9665
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
9704
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
9666
9705
  this.focus = state;
9667
9706
  }));
9668
- this.subscriptions.push(this.toggleService.openChange.subscribe(() => {
9669
- this.dateFormControlService.markAsTouched();
9707
+ this.subscriptions.push(toggleService.openChange.subscribe(() => {
9708
+ dateFormControlService.markAsTouched();
9670
9709
  }));
9671
9710
  }
9672
9711
  set clrPosition(position) {
@@ -10666,7 +10705,7 @@ class ClrPasswordContainer extends ClrAbstractContainer {
10666
10705
  this.focus = false;
10667
10706
  this._toggle = true;
10668
10707
  /* The unsubscribe is handle inside the ClrAbstractContainer */
10669
- this.subscriptions.push(this.focusService.focusChange.subscribe(state => {
10708
+ this.subscriptions.push(focusService.focusChange.subscribe(state => {
10670
10709
  this.focus = state;
10671
10710
  }));
10672
10711
  }
@@ -10816,12 +10855,11 @@ class ClrPassword extends WrappedFormControl {
10816
10855
  constructor(vcr, injector, control, renderer, el, focusService, toggleService) {
10817
10856
  super(vcr, ClrPasswordContainer, injector, control, renderer, el);
10818
10857
  this.focusService = focusService;
10819
- this.toggleService = toggleService;
10820
10858
  this.index = 1;
10821
- if (!this.focusService) {
10859
+ if (!focusService) {
10822
10860
  throw new Error('clrPassword requires being wrapped in <clr-password-container>');
10823
10861
  }
10824
- this.subscriptions.push(this.toggleService.subscribe(toggle => {
10862
+ this.subscriptions.push(toggleService.subscribe(toggle => {
10825
10863
  renderer.setProperty(el.nativeElement, 'type', toggle ? 'text' : 'password');
10826
10864
  }));
10827
10865
  }
@@ -12706,6 +12744,12 @@ class DatagridNumericFilter extends DatagridFilterRegistrar {
12706
12744
  get minPlaceholderValue() {
12707
12745
  return this.minPlaceholder || this.commonStrings.keys.minValue;
12708
12746
  }
12747
+ get fromLabelValue() {
12748
+ return this.fromLabel || this.commonStrings.keys.fromLabel;
12749
+ }
12750
+ get toLabelValue() {
12751
+ return this.toLabel || this.commonStrings.keys.toLabel;
12752
+ }
12709
12753
  get low() {
12710
12754
  if (typeof this.filter.low === 'number' && isFinite(this.filter.low)) {
12711
12755
  return this.filter.low;
@@ -12768,31 +12812,40 @@ class DatagridNumericFilter extends DatagridFilterRegistrar {
12768
12812
  }
12769
12813
  }
12770
12814
  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 });
12771
- 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: `
12815
+ 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: `
12772
12816
  <clr-dg-filter [clrDgFilter]="registered" [(clrDgFilterOpen)]="open">
12773
- <input
12774
- class="datagrid-numeric-filter-input"
12775
- #input_low
12776
- type="number"
12777
- autocomplete="off"
12778
- name="low"
12779
- [(ngModel)]="low"
12780
- [placeholder]="minPlaceholderValue"
12781
- [attr.aria-label]="minPlaceholderValue"
12782
- />
12783
- <span class="datagrid-filter-input-spacer"></span>
12784
- <input
12785
- class="datagrid-numeric-filter-input"
12786
- #input_high
12787
- type="number"
12788
- autocomplete="off"
12789
- name="high"
12790
- [(ngModel)]="high"
12791
- [placeholder]="maxPlaceholderValue"
12792
- [attr.aria-label]="maxPlaceholderValue"
12793
- />
12817
+ <div class="datagrid-numeric-filter-form">
12818
+ <div class="clr-form-control">
12819
+ <label class="clr-control-label">{{ fromLabelValue }}</label>
12820
+ <input
12821
+ clrInput
12822
+ class="datagrid-numeric-filter-input"
12823
+ #input_low
12824
+ type="number"
12825
+ autocomplete="off"
12826
+ name="low"
12827
+ [(ngModel)]="low"
12828
+ [placeholder]="minPlaceholderValue"
12829
+ [attr.aria-label]="minPlaceholderValue"
12830
+ />
12831
+ </div>
12832
+ <div class="clr-form-control">
12833
+ <label class="clr-control-label">{{ toLabelValue }}</label>
12834
+ <input
12835
+ clrInput
12836
+ class="datagrid-numeric-filter-input"
12837
+ #input_high
12838
+ type="number"
12839
+ autocomplete="off"
12840
+ name="high"
12841
+ [(ngModel)]="high"
12842
+ [placeholder]="maxPlaceholderValue"
12843
+ [attr.aria-label]="maxPlaceholderValue"
12844
+ />
12845
+ </div>
12846
+ </div>
12794
12847
  </clr-dg-filter>
12795
- `, 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"] }] });
12848
+ `, 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"] }] });
12796
12849
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridNumericFilter, decorators: [{
12797
12850
  type: Component,
12798
12851
  args: [{
@@ -12800,27 +12853,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
12800
12853
  providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],
12801
12854
  template: `
12802
12855
  <clr-dg-filter [clrDgFilter]="registered" [(clrDgFilterOpen)]="open">
12803
- <input
12804
- class="datagrid-numeric-filter-input"
12805
- #input_low
12806
- type="number"
12807
- autocomplete="off"
12808
- name="low"
12809
- [(ngModel)]="low"
12810
- [placeholder]="minPlaceholderValue"
12811
- [attr.aria-label]="minPlaceholderValue"
12812
- />
12813
- <span class="datagrid-filter-input-spacer"></span>
12814
- <input
12815
- class="datagrid-numeric-filter-input"
12816
- #input_high
12817
- type="number"
12818
- autocomplete="off"
12819
- name="high"
12820
- [(ngModel)]="high"
12821
- [placeholder]="maxPlaceholderValue"
12822
- [attr.aria-label]="maxPlaceholderValue"
12823
- />
12856
+ <div class="datagrid-numeric-filter-form">
12857
+ <div class="clr-form-control">
12858
+ <label class="clr-control-label">{{ fromLabelValue }}</label>
12859
+ <input
12860
+ clrInput
12861
+ class="datagrid-numeric-filter-input"
12862
+ #input_low
12863
+ type="number"
12864
+ autocomplete="off"
12865
+ name="low"
12866
+ [(ngModel)]="low"
12867
+ [placeholder]="minPlaceholderValue"
12868
+ [attr.aria-label]="minPlaceholderValue"
12869
+ />
12870
+ </div>
12871
+ <div class="clr-form-control">
12872
+ <label class="clr-control-label">{{ toLabelValue }}</label>
12873
+ <input
12874
+ clrInput
12875
+ class="datagrid-numeric-filter-input"
12876
+ #input_high
12877
+ type="number"
12878
+ autocomplete="off"
12879
+ name="high"
12880
+ [(ngModel)]="high"
12881
+ [placeholder]="maxPlaceholderValue"
12882
+ [attr.aria-label]="maxPlaceholderValue"
12883
+ />
12884
+ </div>
12885
+ </div>
12824
12886
  </clr-dg-filter>
12825
12887
  `,
12826
12888
  }]
@@ -12830,6 +12892,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
12830
12892
  }], maxPlaceholder: [{
12831
12893
  type: Input,
12832
12894
  args: ['clrFilterMaxPlaceholder']
12895
+ }], fromLabel: [{
12896
+ type: Input,
12897
+ args: ['clrFilterFromLabel']
12898
+ }], toLabel: [{
12899
+ type: Input,
12900
+ args: ['clrFilterToLabel']
12833
12901
  }], filterValueChange: [{
12834
12902
  type: Output,
12835
12903
  args: ['clrFilterValueChange']
@@ -13410,6 +13478,19 @@ var ClrDatagridSortOrder;
13410
13478
  ClrDatagridSortOrder[ClrDatagridSortOrder["DESC"] = -1] = "DESC";
13411
13479
  })(ClrDatagridSortOrder || (ClrDatagridSortOrder = {}));
13412
13480
 
13481
+ /*
13482
+ * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
13483
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
13484
+ * This software is released under MIT license.
13485
+ * The full license information can be found in LICENSE in the root directory of this project.
13486
+ */
13487
+ // @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
13488
+ // There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
13489
+ const NO_LAYOUT_CLASS = 'datagrid-no-layout';
13490
+ const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
13491
+ const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
13492
+ const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
13493
+
13413
13494
  /*
13414
13495
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
13415
13496
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -13844,15 +13925,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
13844
13925
  * The full license information can be found in LICENSE in the root directory of this project.
13845
13926
  */
13846
13927
  class ClrDatagridColumn extends DatagridFilterRegistrar {
13847
- constructor(_sort, filters, vcr, detailService, changeDetectorRef) {
13928
+ constructor(el, _sort, filters, vcr, detailService, changeDetectorRef) {
13848
13929
  super(filters);
13930
+ this.el = el;
13849
13931
  this._sort = _sort;
13850
13932
  this.vcr = vcr;
13851
13933
  this.detailService = detailService;
13852
13934
  this.changeDetectorRef = changeDetectorRef;
13853
13935
  this.sortOrderChange = new EventEmitter();
13854
13936
  this.filterValueChange = new EventEmitter();
13855
- this.showSeparator = true;
13856
13937
  /**
13857
13938
  * A custom filter for this column that can be provided in the projected content
13858
13939
  */
@@ -13871,9 +13952,20 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13871
13952
  * Subscription to the sort service changes
13872
13953
  */
13873
13954
  this.subscriptions = [];
13955
+ this._showSeparator = true;
13874
13956
  this.subscriptions.push(this.listenForSortingChanges());
13875
13957
  this.subscriptions.push(this.listenForDetailPaneChanges());
13876
13958
  }
13959
+ get isHidden() {
13960
+ return this.el.nativeElement.classList.contains(HIDDEN_COLUMN_CLASS);
13961
+ }
13962
+ get showSeparator() {
13963
+ return this._showSeparator;
13964
+ }
13965
+ set showSeparator(value) {
13966
+ this._showSeparator = value;
13967
+ this.changeDetectorRef.markForCheck();
13968
+ }
13877
13969
  // TODO: We might want to make this an enum in the future
13878
13970
  get colType() {
13879
13971
  return this._colType;
@@ -14049,8 +14141,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
14049
14141
  return this.detailService.stateChange.subscribe(state => {
14050
14142
  if (this.showSeparator !== !state) {
14051
14143
  this.showSeparator = !state;
14052
- // Have to manually change because of OnPush
14053
- this.changeDetectorRef.markForCheck();
14054
14144
  }
14055
14145
  });
14056
14146
  }
@@ -14083,7 +14173,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
14083
14173
  }
14084
14174
  }
14085
14175
  }
14086
- 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 });
14176
+ 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 });
14087
14177
  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: `
14088
14178
  <div class="datagrid-column-flex">
14089
14179
  <button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
@@ -14124,7 +14214,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
14124
14214
 
14125
14215
  <clr-dg-column-separator *ngIf="showSeparator"></clr-dg-column-separator>
14126
14216
  </div>
14127
- `, 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 });
14217
+ `, 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 });
14128
14218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, decorators: [{
14129
14219
  type: Component,
14130
14220
  args: [{
@@ -14178,7 +14268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14178
14268
  },
14179
14269
  changeDetection: ChangeDetectionStrategy.OnPush,
14180
14270
  }]
14181
- }], ctorParameters: function () { return [{ type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
14271
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
14182
14272
  type: Input,
14183
14273
  args: ['clrFilterStringPlaceholder']
14184
14274
  }], filterNumberMaxPlaceholder: [{
@@ -14391,11 +14481,10 @@ class ClrDatagridItems {
14391
14481
  this.template = template;
14392
14482
  this.differs = differs;
14393
14483
  this.items = items;
14394
- this.vcr = vcr;
14395
14484
  this.differ = null;
14396
14485
  this.subscriptions = [];
14397
14486
  items.smartenUp();
14398
- this.iterableProxy = new NgForOf(this.vcr, this.template, this.differs);
14487
+ this.iterableProxy = new NgForOf(vcr, template, differs);
14399
14488
  this.subscriptions.push(items.change.subscribe(newItems => {
14400
14489
  this.iterableProxy.ngForOf = newItems;
14401
14490
  this.iterableProxy.ngDoCheck();
@@ -14891,9 +14980,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14891
14980
  */
14892
14981
  let nbSelection = 0;
14893
14982
  class Selection {
14894
- constructor(_items, _filters) {
14983
+ constructor(_items, filters) {
14895
14984
  this._items = _items;
14896
- this._filters = _filters;
14897
14985
  this.preserveSelection = false;
14898
14986
  /**
14899
14987
  * Shift key state, for use in range selection.
@@ -14914,13 +15002,13 @@ class Selection {
14914
15002
  */
14915
15003
  this.subscriptions = [];
14916
15004
  this.id = 'clr-dg-selection' + nbSelection++;
14917
- this.subscriptions.push(this._filters.change.subscribe(() => {
15005
+ this.subscriptions.push(filters.change.subscribe(() => {
14918
15006
  if (!this._selectable || this.preserveSelection) {
14919
15007
  return;
14920
15008
  }
14921
15009
  this.clearSelection();
14922
15010
  }));
14923
- this.subscriptions.push(this._items.allChanges.subscribe(updatedItems => {
15011
+ this.subscriptions.push(_items.allChanges.subscribe(updatedItems => {
14924
15012
  // Reset the lockedRefs;
14925
15013
  const updateLockedRef = [];
14926
15014
  switch (this.selectionType) {
@@ -14932,10 +15020,10 @@ class Selection {
14932
15020
  let selectionUpdated = false;
14933
15021
  // if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
14934
15022
  if (this.currentSingle && !this.prevSingleSelectionRef) {
14935
- this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
15023
+ this.prevSingleSelectionRef = _items.trackBy(this.currentSingle);
14936
15024
  }
14937
15025
  updatedItems.forEach(item => {
14938
- const ref = this._items.trackBy(item);
15026
+ const ref = _items.trackBy(item);
14939
15027
  // If one of the updated items is the previously selectedSingle, set it as the new one
14940
15028
  if (this.prevSingleSelectionRef === ref) {
14941
15029
  newSingle = item;
@@ -14949,7 +15037,7 @@ class Selection {
14949
15037
  // Therefore, we should delete the currentSingle if it used to be defined but doesn't exist anymore.
14950
15038
  // No explicit "delete" is required, since newSingle would be undefined at this point.
14951
15039
  // Marking it as selectionUpdated here will set currentSingle to undefined below in the setTimeout.
14952
- if (this._items.smart && !newSingle) {
15040
+ if (_items.smart && !newSingle) {
14953
15041
  selectionUpdated = true;
14954
15042
  }
14955
15043
  // TODO: Discussed this with Eudes and this is fine for now.
@@ -14970,7 +15058,7 @@ class Selection {
14970
15058
  if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
14971
15059
  this.prevSelectionRefs = [];
14972
15060
  this.current.forEach(item => {
14973
- this.prevSelectionRefs.push(this._items.trackBy(item));
15061
+ this.prevSelectionRefs.push(_items.trackBy(item));
14974
15062
  });
14975
15063
  }
14976
15064
  // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that
@@ -14979,7 +15067,7 @@ class Selection {
14979
15067
  //
14980
15068
  // The both loops below that goes over updatedItems could be combined into one.
14981
15069
  updatedItems.forEach(item => {
14982
- const ref = this._items.trackBy(item);
15070
+ const ref = _items.trackBy(item);
14983
15071
  if (this.lockedRefs.indexOf(ref) > -1) {
14984
15072
  updateLockedRef.push(ref);
14985
15073
  }
@@ -14989,7 +15077,7 @@ class Selection {
14989
15077
  // the if statement below results in broken behavior.
14990
15078
  if (leftOver.length > 0) {
14991
15079
  updatedItems.forEach(item => {
14992
- const ref = this._items.trackBy(item);
15080
+ const ref = _items.trackBy(item);
14993
15081
  // Look in current selected refs array if item is selected, and update actual value
14994
15082
  const selectedIndex = this.prevSelectionRefs.indexOf(ref);
14995
15083
  if (selectedIndex > -1) {
@@ -14999,7 +15087,7 @@ class Selection {
14999
15087
  });
15000
15088
  // Filter out any unmatched items if we're using smart datagrids where we expect all items to be
15001
15089
  // present
15002
- if (this._items.smart) {
15090
+ if (_items.smart) {
15003
15091
  leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);
15004
15092
  if (this.current.length !== leftOver.length) {
15005
15093
  selectionUpdated = true;
@@ -15317,8 +15405,6 @@ class ClrDatagridRow {
15317
15405
  this.detailService = detailService;
15318
15406
  this.displayMode = displayMode;
15319
15407
  this.vcr = vcr;
15320
- this.renderer = renderer;
15321
- this.el = el;
15322
15408
  this.commonStrings = commonStrings;
15323
15409
  this.items = items;
15324
15410
  this.document = document;
@@ -15346,17 +15432,17 @@ class ClrDatagridRow {
15346
15432
  this.radioId = 'clr-dg-row-rd' + nbRow;
15347
15433
  this.checkboxId = 'clr-dg-row-cb' + nbRow;
15348
15434
  this.expandableId = expand.expandableId;
15349
- this.subscriptions.push(combineLatest(this.expand.replace, this.expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15435
+ this.subscriptions.push(combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {
15350
15436
  if (expandReplaceValue && expandChangeValue) {
15351
15437
  // replaced and expanding
15352
15438
  this.replaced = true;
15353
- this.renderer.addClass(this.el.nativeElement, 'datagrid-row-replaced');
15439
+ renderer.addClass(el.nativeElement, 'datagrid-row-replaced');
15354
15440
  }
15355
15441
  else {
15356
15442
  this.replaced = false;
15357
15443
  // Handles these cases: not replaced and collapsing & replaced and
15358
15444
  // collapsing and not replaced and expanding.
15359
- this.renderer.removeClass(this.el.nativeElement, 'datagrid-row-replaced');
15445
+ renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');
15360
15446
  }
15361
15447
  }));
15362
15448
  }
@@ -15762,19 +15848,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15762
15848
  type: Injectable
15763
15849
  }], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
15764
15850
 
15765
- /*
15766
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
15767
- * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
15768
- * This software is released under MIT license.
15769
- * The full license information can be found in LICENSE in the root directory of this project.
15770
- */
15771
- // @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
15772
- // There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
15773
- const NO_LAYOUT_CLASS = 'datagrid-no-layout';
15774
- const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
15775
- const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
15776
- const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
15777
-
15778
15851
  /*
15779
15852
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
15780
15853
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -15896,7 +15969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15896
15969
  * The full license information can be found in LICENSE in the root directory of this project.
15897
15970
  */
15898
15971
  class ClrDatagrid {
15899
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
15972
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, document, el, page, commonStrings, keyNavigation, zone) {
15900
15973
  this.organizer = organizer;
15901
15974
  this.items = items;
15902
15975
  this.expandableRows = expandableRows;
@@ -15910,7 +15983,6 @@ class ClrDatagrid {
15910
15983
  this.el = el;
15911
15984
  this.page = page;
15912
15985
  this.commonStrings = commonStrings;
15913
- this.columnsService = columnsService;
15914
15986
  this.keyNavigation = keyNavigation;
15915
15987
  this.zone = zone;
15916
15988
  this.clrDgSingleSelectionAriaLabel = this.commonStrings.keys.singleSelectionAriaLabel;
@@ -15932,7 +16004,7 @@ class ClrDatagrid {
15932
16004
  this._subscriptions = [];
15933
16005
  const datagridId = uniqueIdFactory();
15934
16006
  this.selectAllId = 'clr-dg-select-all-' + datagridId;
15935
- this.detailService.id = datagridId;
16007
+ detailService.id = datagridId;
15936
16008
  }
15937
16009
  /**
15938
16010
  * Freezes the datagrid while data is loading
@@ -16154,7 +16226,7 @@ class ClrDatagrid {
16154
16226
  this.items.refresh();
16155
16227
  }
16156
16228
  }
16157
- ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16229
+ ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16158
16230
  ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
16159
16231
  Selection,
16160
16232
  Sort,
@@ -16197,7 +16269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16197
16269
  }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
16198
16270
  type: Inject,
16199
16271
  args: [DOCUMENT]
16200
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loadingMoreItems: [{
16272
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loadingMoreItems: [{
16201
16273
  type: Input,
16202
16274
  args: ['clrLoadingMoreItems']
16203
16275
  }], clrDgSingleSelectionAriaLabel: [{
@@ -16303,11 +16375,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16303
16375
  */
16304
16376
  let clrDgActionId = 0;
16305
16377
  class ClrDatagridActionOverflow {
16306
- constructor(rowActionService, commonStrings, platformId, zone, smartToggleService) {
16378
+ constructor(rowActionService, commonStrings, platformId, smartToggleService) {
16307
16379
  this.rowActionService = rowActionService;
16308
16380
  this.commonStrings = commonStrings;
16309
16381
  this.platformId = platformId;
16310
- this.zone = zone;
16311
16382
  this.smartToggleService = smartToggleService;
16312
16383
  this.openChange = new EventEmitter(false);
16313
16384
  this.popoverId = uniqueIdFactory();
@@ -16319,10 +16390,10 @@ class ClrDatagridActionOverflow {
16319
16390
  };
16320
16391
  this._open = false;
16321
16392
  this.subscriptions = [];
16322
- this.rowActionService.register();
16323
- this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
16393
+ rowActionService.register();
16394
+ this.subscriptions.push(smartToggleService.openChange.subscribe(openState => {
16324
16395
  this.open = openState;
16325
- }), this.smartToggleService.popoverVisible.subscribe(visible => {
16396
+ }), smartToggleService.popoverVisible.subscribe(visible => {
16326
16397
  if (visible) {
16327
16398
  this.initializeFocus();
16328
16399
  }
@@ -16359,7 +16430,7 @@ class ClrDatagridActionOverflow {
16359
16430
  }
16360
16431
  }
16361
16432
  }
16362
- ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16433
+ ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component });
16363
16434
  ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
16364
16435
  <button
16365
16436
  tabindex="-1"
@@ -16429,7 +16500,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16429
16500
  }], ctorParameters: function () { return [{ type: RowActionService }, { type: ClrCommonStringsService }, { type: undefined, decorators: [{
16430
16501
  type: Inject,
16431
16502
  args: [PLATFORM_ID]
16432
- }] }, { type: i0.NgZone }, { type: ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{
16503
+ }] }, { type: ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{
16433
16504
  type: Input,
16434
16505
  args: ['clrDgActionOverflowButtonLabel']
16435
16506
  }], openChange: [{
@@ -16884,8 +16955,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
16884
16955
  class DatagridDetailRegisterer {
16885
16956
  constructor(expandableRowsCount) {
16886
16957
  this.expandableRowsCount = expandableRowsCount;
16887
- if (this.expandableRowsCount) {
16888
- this.expandableRowsCount.register();
16958
+ if (expandableRowsCount) {
16959
+ expandableRowsCount.register();
16889
16960
  }
16890
16961
  }
16891
16962
  ngOnDestroy() {
@@ -17012,13 +17083,12 @@ const COLUMN_STATE_PROVIDER = {
17012
17083
  class ClrDatagridHideableColumn {
17013
17084
  constructor(titleTemplateRef, viewContainerRef, columnsService, columnState) {
17014
17085
  this.titleTemplateRef = titleTemplateRef;
17015
- this.viewContainerRef = viewContainerRef;
17016
17086
  this.columnsService = columnsService;
17017
17087
  this.columnState = columnState;
17018
17088
  this.hiddenChange = new EventEmitter();
17019
17089
  this.subscriptions = [];
17020
- this.viewContainerRef.createEmbeddedView(this.titleTemplateRef);
17021
- if (!this.columnState) {
17090
+ viewContainerRef.createEmbeddedView(titleTemplateRef);
17091
+ if (!columnState) {
17022
17092
  throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');
17023
17093
  }
17024
17094
  }
@@ -17103,7 +17173,7 @@ class ClrIfDetail {
17103
17173
  this.stateChange = new EventEmitter(null);
17104
17174
  this.subscriptions = [];
17105
17175
  this.skip = false; // This keeps us from resetting the input and calling the toggle twice
17106
- this.detailService.enabled = true;
17176
+ detailService.enabled = true;
17107
17177
  }
17108
17178
  set state(model) {
17109
17179
  if (!this.skip) {
@@ -17241,7 +17311,7 @@ class ClrDatagridPagination {
17241
17311
  this.commonStrings = commonStrings;
17242
17312
  this.detailService = detailService;
17243
17313
  this.currentChanged = new EventEmitter(false);
17244
- this.page.activated = true;
17314
+ page.activated = true;
17245
17315
  }
17246
17316
  /**
17247
17317
  * Page size
@@ -17726,10 +17796,10 @@ class ClrDatagridVirtualScrollDirective {
17726
17796
  this.cdkVirtualForInputs = {
17727
17797
  cdkVirtualForTrackBy: index => index,
17728
17798
  };
17729
- this.items.smartenUp();
17730
- this.datagrid.hasVirtualScroller = true;
17731
- this.datagrid.detailService.preventFocusScroll = true;
17732
- this.datagridElementRef = this.datagrid.el;
17799
+ items.smartenUp();
17800
+ datagrid.hasVirtualScroller = true;
17801
+ datagrid.detailService.preventFocusScroll = true;
17802
+ this.datagridElementRef = datagrid.el;
17733
17803
  // default
17734
17804
  this.cdkVirtualForTemplateCacheSize = 20;
17735
17805
  this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
@@ -17924,7 +17994,6 @@ class DatagridHeaderRenderer {
17924
17994
  constructor(el, renderer, organizer, domAdapter, columnResizerService, columnsService, columnState) {
17925
17995
  this.el = el;
17926
17996
  this.renderer = renderer;
17927
- this.organizer = organizer;
17928
17997
  this.domAdapter = domAdapter;
17929
17998
  this.columnResizerService = columnResizerService;
17930
17999
  this.columnsService = columnsService;
@@ -17936,7 +18005,7 @@ class DatagridHeaderRenderer {
17936
18005
  this.widthSet = false;
17937
18006
  this.autoSet = false;
17938
18007
  this.subscriptions = [];
17939
- this.subscriptions.push(this.organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
18008
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
17940
18009
  }
17941
18010
  ngOnDestroy() {
17942
18011
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -18082,14 +18151,13 @@ const domAdapterFactory = (platformId) => {
18082
18151
  // Fixes build error
18083
18152
  // @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)
18084
18153
  class DatagridMainRenderer {
18085
- constructor(organizer, items, page, domAdapter, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18154
+ constructor(datagrid, organizer, items, page, el, renderer, detailService, tableSizeService, columnsService, ngZone, keyNavigation) {
18155
+ this.datagrid = datagrid;
18086
18156
  this.organizer = organizer;
18087
18157
  this.items = items;
18088
18158
  this.page = page;
18089
- this.domAdapter = domAdapter;
18090
18159
  this.el = el;
18091
18160
  this.renderer = renderer;
18092
- this.detailService = detailService;
18093
18161
  this.tableSizeService = tableSizeService;
18094
18162
  this.columnsService = columnsService;
18095
18163
  this.ngZone = ngZone;
@@ -18103,16 +18171,14 @@ class DatagridMainRenderer {
18103
18171
  * 2) When rows are lazily loaded for the first time
18104
18172
  */
18105
18173
  this.columnsSizesStable = false;
18106
- this.subscriptions.push(this.organizer
18107
- .filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS)
18108
- .subscribe(() => this.computeHeadersWidth()));
18109
- this.subscriptions.push(this.page.sizeChange.subscribe(() => {
18174
+ this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth()));
18175
+ this.subscriptions.push(page.sizeChange.subscribe(() => {
18110
18176
  if (this._heightSet) {
18111
18177
  this.resetDatagridHeight();
18112
18178
  }
18113
18179
  }));
18114
- this.subscriptions.push(this.detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18115
- this.subscriptions.push(this.items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18180
+ this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));
18181
+ this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));
18116
18182
  }
18117
18183
  ngOnInit() {
18118
18184
  this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));
@@ -18132,10 +18198,9 @@ class DatagridMainRenderer {
18132
18198
  this.tableSizeService.table = this.el;
18133
18199
  }
18134
18200
  ngAfterViewChecked() {
18135
- if (this.shouldStabilizeColumns) {
18136
- setTimeout(() => {
18137
- this.stabilizeColumns();
18138
- }, 0);
18201
+ const datagridIsVisible = this.checkAndUpdateVisibility();
18202
+ if (this.shouldStabilizeColumns && datagridIsVisible) {
18203
+ this.stabilizeColumns();
18139
18204
  }
18140
18205
  if (this.shouldComputeHeight()) {
18141
18206
  this.ngZone.runOutsideAngular(() => {
@@ -18254,6 +18319,7 @@ class DatagridMainRenderer {
18254
18319
  row.expandableRow?.cells.get(columnIndex)?.setHidden(state);
18255
18320
  }
18256
18321
  });
18322
+ this.updateColumnSeparatorsVisibility();
18257
18323
  this.keyNavigation.resetKeyGrid();
18258
18324
  break;
18259
18325
  case DatagridColumnChanges.INITIALIZE:
@@ -18286,8 +18352,29 @@ class DatagridMainRenderer {
18286
18352
  this.columnsSizesStable = true;
18287
18353
  }
18288
18354
  }
18355
+ checkAndUpdateVisibility() {
18356
+ if (this.el.nativeElement.offsetParent) {
18357
+ this.datagrid.datagrid.nativeElement.style.visibility = 'visible';
18358
+ return true;
18359
+ }
18360
+ else {
18361
+ this.datagrid.datagrid.nativeElement.style.visibility = 'hidden';
18362
+ return false;
18363
+ }
18364
+ }
18365
+ updateColumnSeparatorsVisibility() {
18366
+ const visibleColumns = this.datagrid.columns.filter(column => !column.isHidden);
18367
+ visibleColumns.forEach((column, index) => {
18368
+ if (index === visibleColumns.length - 1) {
18369
+ column.showSeparator = false;
18370
+ }
18371
+ else if (!column.showSeparator) {
18372
+ column.showSeparator = true;
18373
+ }
18374
+ });
18375
+ }
18289
18376
  }
18290
- DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: DomAdapter }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18377
+ DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: ClrDatagrid }, { token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18291
18378
  DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer }], ngImport: i0 });
18292
18379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, decorators: [{
18293
18380
  type: Directive,
@@ -18295,7 +18382,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
18295
18382
  selector: 'clr-datagrid',
18296
18383
  providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],
18297
18384
  }]
18298
- }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: DomAdapter }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18385
+ }], ctorParameters: function () { return [{ type: ClrDatagrid }, { type: DatagridRenderOrganizer }, { type: Items }, { type: Page }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DetailService }, { type: TableSizeService }, { type: ColumnsService }, { type: i0.NgZone }, { type: KeyNavigationGridController }]; }, propDecorators: { headers: [{
18299
18386
  type: ContentChildren,
18300
18387
  args: [DatagridHeaderRenderer]
18301
18388
  }], rows: [{
@@ -18933,8 +19020,8 @@ class RecursiveChildren {
18933
19020
  this.featuresService = featuresService;
18934
19021
  this.expandService = expandService;
18935
19022
  if (expandService) {
18936
- this.subscription = this.expandService.expandChange.subscribe(value => {
18937
- if (!value && this.parent && !this.featuresService.eager && this.featuresService.recursion) {
19023
+ this.subscription = expandService.expandChange.subscribe(value => {
19024
+ if (!value && this.parent && !featuresService.eager && featuresService.recursion) {
18938
19025
  // In the case of lazy-loading recursive trees, we clear the children on collapse.
18939
19026
  // This is better in case they change between two user interaction, and that way
18940
19027
  // the app itself can decide whether to cache them or not.
@@ -19548,7 +19635,7 @@ class ClrTreeNode {
19548
19635
  this.typeAheadKeyBuffer = '';
19549
19636
  this.typeAheadKeyEvent = new Subject();
19550
19637
  this.subscriptions = [];
19551
- if (this.featuresService.recursion) {
19638
+ if (featuresService.recursion) {
19552
19639
  // I'm completely stuck, we have to hack into private properties until either
19553
19640
  // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998
19554
19641
  // are fixed
@@ -19789,7 +19876,7 @@ class ClrTreeNode {
19789
19876
  }
19790
19877
  }
19791
19878
  ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTreeNode, deps: [{ token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
19792
- ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19879
+ ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { expandable: ["clrExpandable", "expandable"], disabled: ["clrDisabled", "disabled"], selected: ["clrSelected", "selected"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true", "class.disabled": "this._model.disabled" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19793
19880
  trigger('toggleChildrenAnim', [
19794
19881
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19795
19882
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19809,7 +19896,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19809
19896
  ], host: {
19810
19897
  '[class.clr-tree-node]': 'true',
19811
19898
  '[class.disabled]': 'this._model.disabled',
19812
- }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span *ngIf=\"ariaSelected\"> selected</span>\n <span *ngIf=\"!ariaSelected\"> unselected</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19899
+ }, template: "<!--\n ~ Copyright (c) 2016-2024 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div\n class=\"clr-treenode-content\"\n [class.clr-treenode-text-only]=\"treeNodeContentTextOnly\"\n (mouseup)=\"focusTreeNode()\"\n *ngIf=\"!featuresService.selectable\"\n >\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable || ariaSelected\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n" }]
19813
19900
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
19814
19901
  type: Inject,
19815
19902
  args: [PLATFORM_ID]
@@ -19856,18 +19943,21 @@ function trimAndLowerCase(value) {
19856
19943
  * The full license information can be found in LICENSE in the root directory of this project.
19857
19944
  */
19858
19945
  class ClrTree {
19859
- constructor(featuresService, focusManagerService, { nativeElement }, renderer, ngZone) {
19946
+ constructor(featuresService, focusManagerService, renderer, el, ngZone) {
19860
19947
  this.featuresService = featuresService;
19861
19948
  this.focusManagerService = focusManagerService;
19949
+ this.renderer = renderer;
19950
+ this.el = el;
19862
19951
  this.subscriptions = [];
19863
- const subscription = ngZone.runOutsideAngular(() => fromEvent(nativeElement, 'focusin').subscribe((event) => {
19864
- if (event.target === nativeElement) {
19952
+ this._isMultiSelectable = false;
19953
+ const subscription = ngZone.runOutsideAngular(() => fromEvent(el.nativeElement, 'focusin').subscribe((event) => {
19954
+ if (event.target === el.nativeElement) {
19865
19955
  // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.
19866
19956
  // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.
19867
- this.focusManagerService.focusFirstVisibleNode();
19957
+ focusManagerService.focusFirstVisibleNode();
19868
19958
  // when the first child gets focus,
19869
19959
  // tree should no longer have tabindex of 0.
19870
- renderer.removeAttribute(nativeElement, 'tabindex');
19960
+ renderer.removeAttribute(el.nativeElement, 'tabindex');
19871
19961
  }
19872
19962
  }));
19873
19963
  this.subscriptions.push(subscription);
@@ -19876,17 +19966,28 @@ class ClrTree {
19876
19966
  this.featuresService.eager = !value;
19877
19967
  }
19878
19968
  get isMultiSelectable() {
19879
- return this.featuresService.selectable && this.rootNodes.length > 0;
19969
+ return this._isMultiSelectable;
19880
19970
  }
19881
19971
  ngAfterContentInit() {
19882
19972
  this.setRootNodes();
19883
19973
  this.subscriptions.push(this.rootNodes.changes.subscribe(() => {
19974
+ this.setMultiSelectable();
19884
19975
  this.setRootNodes();
19885
19976
  }));
19886
19977
  }
19887
19978
  ngOnDestroy() {
19888
19979
  this.subscriptions.forEach(sub => sub.unsubscribe());
19889
19980
  }
19981
+ setMultiSelectable() {
19982
+ if (this.featuresService.selectable && this.rootNodes.length > 0) {
19983
+ this._isMultiSelectable = true;
19984
+ this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');
19985
+ }
19986
+ else {
19987
+ this._isMultiSelectable = false;
19988
+ this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');
19989
+ }
19990
+ }
19890
19991
  setRootNodes() {
19891
19992
  // if node has no parent, it's a root node
19892
19993
  // for recursive tree, this.rootNodes registers also nested children
@@ -19894,8 +19995,8 @@ class ClrTree {
19894
19995
  this.focusManagerService.rootNodeModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);
19895
19996
  }
19896
19997
  }
19897
- ClrTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTree, deps: [{ token: TreeFeaturesService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
19898
- ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"", "attr.aria-multiselectable": "isMultiSelectable" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
19998
+ 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 });
19999
+ ClrTree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTree, selector: "clr-tree", inputs: { lazy: ["clrLazy", "lazy"] }, host: { attributes: { "tabindex": "0" }, properties: { "attr.role": "\"tree\"" } }, providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService], queries: [{ propertyName: "rootNodes", predicate: ClrTreeNode }], ngImport: i0, template: `
19899
20000
  <ng-content></ng-content>
19900
20001
  <clr-recursive-children
19901
20002
  *ngIf="featuresService.recursion"
@@ -19917,10 +20018,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
19917
20018
  host: {
19918
20019
  tabindex: '0',
19919
20020
  '[attr.role]': '"tree"',
19920
- '[attr.aria-multiselectable]': 'isMultiSelectable',
19921
20021
  },
19922
20022
  }]
19923
- }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
20023
+ }], ctorParameters: function () { return [{ type: TreeFeaturesService }, { type: TreeFocusManagerService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rootNodes: [{
19924
20024
  type: ContentChildren,
19925
20025
  args: [ClrTreeNode]
19926
20026
  }], lazy: [{
@@ -20007,7 +20107,7 @@ class DropdownFocusHandler {
20007
20107
  this._unlistenFuncs = [];
20008
20108
  this.resetChildren();
20009
20109
  this.moveToFirstItemWhenOpen();
20010
- if (!this.parent) {
20110
+ if (!parent) {
20011
20111
  this.handleRootFocus();
20012
20112
  }
20013
20113
  }
@@ -20205,11 +20305,10 @@ class ClrDropdown {
20205
20305
  this.parent = parent;
20206
20306
  this.toggleService = toggleService;
20207
20307
  this.focusHandler = focusHandler;
20208
- this.cdr = cdr;
20209
20308
  this.isMenuClosable = true;
20210
20309
  this.subscriptions = [];
20211
- this.subscriptions.push(dropdownService.changes.subscribe(value => (this.toggleService.open = value)));
20212
- this.subscriptions.push(toggleService.openChange.subscribe(() => this.cdr.markForCheck()));
20310
+ this.subscriptions.push(dropdownService.changes.subscribe(value => (toggleService.open = value)));
20311
+ this.subscriptions.push(toggleService.openChange.subscribe(() => cdr.markForCheck()));
20213
20312
  }
20214
20313
  ngOnDestroy() {
20215
20314
  this.subscriptions.forEach(sub => sub.unsubscribe());
@@ -21835,12 +21934,12 @@ class ClrHeader {
21835
21934
  this.isNavLevel2OnPage = false;
21836
21935
  this.openNavLevel = null;
21837
21936
  this.responsiveNavCodes = ResponsiveNavCodes;
21838
- this._subscription = this.responsiveNavService.registeredNavs.subscribe({
21937
+ this._subscription = responsiveNavService.registeredNavs.subscribe({
21839
21938
  next: (navLevelList) => {
21840
21939
  this.initializeNavTriggers(navLevelList);
21841
21940
  },
21842
21941
  });
21843
- this._subscription.add(this.responsiveNavService.navControl
21942
+ this._subscription.add(responsiveNavService.navControl
21844
21943
  .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL))
21845
21944
  .subscribe(() => {
21846
21945
  this.openNavLevel = null;
@@ -21974,15 +22073,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
21974
22073
  * The full license information can be found in LICENSE in the root directory of this project.
21975
22074
  */
21976
22075
  const createCloseButton = (document, ariaLabel) => {
22076
+ ClarityIcons.addIcons(timesIcon);
21977
22077
  const closeButton = document.createElement('button');
21978
22078
  closeButton.setAttribute('aria-label', ariaLabel);
21979
22079
  closeButton.setAttribute('aria-hidden', 'true');
21980
22080
  closeButton.innerHTML = `
21981
22081
  <cds-icon
21982
22082
  inner-offset="1"
21983
- shape="close"
22083
+ shape="times"
21984
22084
  size="32"
21985
- </cds-icon>
22085
+ ></cds-icon>
21986
22086
  `;
21987
22087
  /**
21988
22088
  * The button is hidden by default based on our Desktop-first approach.
@@ -22457,8 +22557,6 @@ class ClrTabLink {
22457
22557
  this.ifActiveService = ifActiveService;
22458
22558
  this.id = id;
22459
22559
  this.el = el;
22460
- this.cfr = cfr;
22461
- this.viewContainerRef = viewContainerRef;
22462
22560
  this.tabsService = tabsService;
22463
22561
  this.tabsId = tabsId;
22464
22562
  if (!this.tabLinkId) {
@@ -22467,9 +22565,9 @@ class ClrTabLink {
22467
22565
  // Tab links can be rendered in one of two places: in the main area or inside the overflow dropdown menu.
22468
22566
  // Here, we create a container so that its template can be used to create embeddedView on the fly.
22469
22567
  // See TabsService's renderView() method and how it's used in Tabs class for an example.
22470
- const factory = this.cfr.resolveComponentFactory(TemplateRefContainer);
22471
- this.templateRefContainer = this.viewContainerRef.createComponent(factory, undefined, undefined, [
22472
- [this.el.nativeElement],
22568
+ const factory = cfr.resolveComponentFactory(TemplateRefContainer);
22569
+ this.templateRefContainer = viewContainerRef.createComponent(factory, undefined, undefined, [
22570
+ [el.nativeElement],
22473
22571
  ]).instance;
22474
22572
  }
22475
22573
  get inOverflow() {
@@ -23051,7 +23149,7 @@ class ClrVerticalNav {
23051
23149
  this._navGroupRegistrationService = _navGroupRegistrationService;
23052
23150
  this.commonStrings = commonStrings;
23053
23151
  this._collapsedChanged = new EventEmitter(true);
23054
- this._sub = this._navService.collapsedChanged.subscribe(value => {
23152
+ this._sub = _navService.collapsedChanged.subscribe(value => {
23055
23153
  this._collapsedChanged.emit(value);
23056
23154
  });
23057
23155
  }
@@ -23139,27 +23237,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23139
23237
  const EXPANDED_STATE = 'expanded';
23140
23238
  const COLLAPSED_STATE = 'collapsed';
23141
23239
  class ClrVerticalNavGroup {
23142
- constructor(_itemExpand, _navGroupRegistrationService, _navGroupService, _navService, commonStrings) {
23240
+ constructor(_itemExpand, _navGroupRegistrationService, navGroupService, _navService, commonStrings) {
23143
23241
  this._itemExpand = _itemExpand;
23144
23242
  this._navGroupRegistrationService = _navGroupRegistrationService;
23145
- this._navGroupService = _navGroupService;
23146
23243
  this._navService = _navService;
23147
23244
  this.commonStrings = commonStrings;
23148
23245
  this.expandedChange = new EventEmitter(true);
23149
23246
  this.wasExpanded = false;
23150
23247
  this._subscriptions = [];
23151
23248
  this._expandAnimationState = COLLAPSED_STATE;
23152
- this._navGroupRegistrationService.registerNavGroup();
23249
+ _navGroupRegistrationService.registerNavGroup();
23153
23250
  // FIXME: This subscription handles a corner case
23154
23251
  // Vertical Nav collapse requires the animation to run first and then
23155
23252
  // remove the nodes from the DOM. If the user directly sets the input
23156
23253
  // on the clrIfExpanded directive, we have no chance to run the animation
23157
23254
  // and wait for it to complete. This subscription makes sure that the
23158
23255
  // animation states are correct for that edge case.
23159
- this._subscriptions.push(this._itemExpand.expandChange.subscribe(value => {
23256
+ this._subscriptions.push(_itemExpand.expandChange.subscribe(value => {
23160
23257
  if (value && this.expandAnimationState === COLLAPSED_STATE) {
23161
- if (this._navService.collapsed) {
23162
- this._navService.collapsed = false;
23258
+ if (_navService.collapsed) {
23259
+ _navService.collapsed = false;
23163
23260
  }
23164
23261
  this.expandAnimationState = EXPANDED_STATE;
23165
23262
  }
@@ -23169,7 +23266,7 @@ class ClrVerticalNavGroup {
23169
23266
  }));
23170
23267
  // 1. If the nav is collapsing, close the open nav group + save its state
23171
23268
  // 2. If the nav is expanding, expand the nav group if the previous state was expanded
23172
- this._subscriptions.push(this._navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23269
+ this._subscriptions.push(_navService.animateOnCollapsed.subscribe((goingToCollapse) => {
23173
23270
  if (goingToCollapse && this.expanded) {
23174
23271
  this.wasExpanded = true;
23175
23272
  this.expandAnimationState = COLLAPSED_STATE;
@@ -23180,7 +23277,7 @@ class ClrVerticalNavGroup {
23180
23277
  }
23181
23278
  }));
23182
23279
  // If a link is clicked, expand the nav group
23183
- this._subscriptions.push(this._navGroupService.expandChange.subscribe((expand) => {
23280
+ this._subscriptions.push(navGroupService.expandChange.subscribe((expand) => {
23184
23281
  if (expand && !this.expanded) {
23185
23282
  this.expandGroup();
23186
23283
  }
@@ -23309,7 +23406,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
23309
23406
  class ClrVerticalNavIcon {
23310
23407
  constructor(_verticalNavIconService) {
23311
23408
  this._verticalNavIconService = _verticalNavIconService;
23312
- this._verticalNavIconService.registerIcon();
23409
+ _verticalNavIconService.registerIcon();
23313
23410
  }
23314
23411
  ngOnDestroy() {
23315
23412
  this._verticalNavIconService.unregisterIcon();
@@ -23473,9 +23570,10 @@ class ClrModalConfigurationService {
23473
23570
  }
23474
23571
  }
23475
23572
  ClrModalConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23476
- ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService });
23573
+ ClrModalConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, providedIn: 'root' });
23477
23574
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalConfigurationService, decorators: [{
23478
- type: Injectable
23575
+ type: Injectable,
23576
+ args: [{ providedIn: 'root' }]
23479
23577
  }] });
23480
23578
 
23481
23579
  /*
@@ -23657,11 +23755,11 @@ class ClrModalBody {
23657
23755
  this.unlisteners = [];
23658
23756
  ngZone.runOutsideAngular(() => {
23659
23757
  this.observer = new ResizeObserver(() => this.addOrRemoveTabIndex());
23660
- this.observer.observe(this.host.nativeElement);
23661
- this.unlisteners.push(this.renderer.listen(this.host.nativeElement, 'mouseup', () => {
23758
+ this.observer.observe(host.nativeElement);
23759
+ this.unlisteners.push(renderer.listen(host.nativeElement, 'mouseup', () => {
23662
23760
  // set the tabindex binding back when click is completed with mouseup
23663
23761
  this.addOrRemoveTabIndex();
23664
- }), this.renderer.listen(this.host.nativeElement, 'mousedown', () => {
23762
+ }), renderer.listen(host.nativeElement, 'mousedown', () => {
23665
23763
  // tabindex = 0 binding should be removed
23666
23764
  // so it won't be focused when click starts with mousedown
23667
23765
  this.removeTabIndex();
@@ -23714,14 +23812,13 @@ class ClrModalModule {
23714
23812
  }
23715
23813
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23716
23814
  ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrIconModule] });
23717
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, providers: [ClrModalConfigurationService], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23815
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
23718
23816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
23719
23817
  type: NgModule,
23720
23818
  args: [{
23721
23819
  imports: [CommonModule, CdkTrapFocusModule, ClrIconModule],
23722
23820
  declarations: [CLR_MODAL_DIRECTIVES],
23723
23821
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule],
23724
- providers: [ClrModalConfigurationService],
23725
23822
  }]
23726
23823
  }], ctorParameters: function () { return []; } });
23727
23824
 
@@ -23879,7 +23976,6 @@ class ClrSignpostContent extends AbstractPopover {
23879
23976
  constructor(injector, parentHost, commonStrings, signpostIdService, signpostFocusManager, platformId, document) {
23880
23977
  super(injector, parentHost);
23881
23978
  this.commonStrings = commonStrings;
23882
- this.signpostIdService = signpostIdService;
23883
23979
  this.signpostFocusManager = signpostFocusManager;
23884
23980
  this.platformId = platformId;
23885
23981
  this.signpostContentId = uniqueIdFactory();
@@ -23889,7 +23985,7 @@ class ClrSignpostContent extends AbstractPopover {
23889
23985
  // Defaults
23890
23986
  this.position = 'right-middle';
23891
23987
  this.closeOnOutsideClick = true;
23892
- this.signpostIdService.setId(this.signpostContentId);
23988
+ signpostIdService.setId(this.signpostContentId);
23893
23989
  this.document = document;
23894
23990
  }
23895
23991
  /*********
@@ -24274,11 +24370,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
24274
24370
  class ClrTooltipTrigger {
24275
24371
  constructor(toggleService, tooltipIdService, tooltipMouseService) {
24276
24372
  this.toggleService = toggleService;
24277
- this.tooltipIdService = tooltipIdService;
24278
24373
  this.tooltipMouseService = tooltipMouseService;
24279
24374
  this.subs = [];
24280
24375
  // The aria-described by comes from the id of content. It
24281
- this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24376
+ this.subs.push(tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24282
24377
  }
24283
24378
  ngOnDestroy() {
24284
24379
  this.subs.forEach(sub => sub.unsubscribe());
@@ -25390,7 +25485,7 @@ class WizardNavigationService {
25390
25485
  * @memberof WizardNavigationService
25391
25486
  */
25392
25487
  this._cancelWizard = new Subject();
25393
- this.previousButtonSubscription = this.buttonService.previousBtnClicked.subscribe(() => {
25488
+ this.previousButtonSubscription = buttonService.previousBtnClicked.subscribe(() => {
25394
25489
  const currentPage = this.currentPage;
25395
25490
  if (this.currentPageIsFirst || currentPage.previousStepDisabled) {
25396
25491
  return;
@@ -25400,21 +25495,21 @@ class WizardNavigationService {
25400
25495
  this.previous();
25401
25496
  }
25402
25497
  });
25403
- this.nextButtonSubscription = this.buttonService.nextBtnClicked.subscribe(() => {
25498
+ this.nextButtonSubscription = buttonService.nextBtnClicked.subscribe(() => {
25404
25499
  this.checkAndCommitCurrentPage('next');
25405
25500
  });
25406
- this.dangerButtonSubscription = this.buttonService.dangerBtnClicked.subscribe(() => {
25501
+ this.dangerButtonSubscription = buttonService.dangerBtnClicked.subscribe(() => {
25407
25502
  this.checkAndCommitCurrentPage('danger');
25408
25503
  });
25409
- this.finishButtonSubscription = this.buttonService.finishBtnClicked.subscribe(() => {
25504
+ this.finishButtonSubscription = buttonService.finishBtnClicked.subscribe(() => {
25410
25505
  this.checkAndCommitCurrentPage('finish');
25411
25506
  });
25412
- this.customButtonSubscription = this.buttonService.customBtnClicked.subscribe((type) => {
25507
+ this.customButtonSubscription = buttonService.customBtnClicked.subscribe((type) => {
25413
25508
  if (!this.wizardStopNavigation) {
25414
25509
  this.currentPage.customButtonClicked.emit(type);
25415
25510
  }
25416
25511
  });
25417
- this.cancelButtonSubscription = this.buttonService.cancelBtnClicked.subscribe(() => {
25512
+ this.cancelButtonSubscription = buttonService.cancelBtnClicked.subscribe(() => {
25418
25513
  if (this.wizardStopNavigation) {
25419
25514
  return;
25420
25515
  }
@@ -25425,7 +25520,7 @@ class WizardNavigationService {
25425
25520
  this.cancel();
25426
25521
  }
25427
25522
  });
25428
- this.pagesResetSubscription = this.pageCollection.pagesReset.subscribe(() => {
25523
+ this.pagesResetSubscription = pageCollection.pagesReset.subscribe(() => {
25429
25524
  this.setFirstPageCurrent();
25430
25525
  });
25431
25526
  }
@@ -26763,16 +26858,23 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
26763
26858
  [attr.disabled]="isDisabled ? '' : null"
26764
26859
  >
26765
26860
  <div class="clr-wizard-stepnav-link-icon">
26766
- <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26767
- <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
26861
+ <cds-icon
26862
+ *ngIf="hasError"
26863
+ shape="error-standard"
26864
+ [attr.aria-label]="commonStrings.keys.wizardStepError"
26865
+ ></cds-icon>
26866
+ <cds-icon
26867
+ *ngIf="!hasError && isComplete"
26868
+ shape="success-standard"
26869
+ [attr.aria-label]="commonStrings.keys.wizardStepSuccess"
26870
+ ></cds-icon>
26768
26871
  </div>
26769
26872
 
26873
+ <span class="clr-sr-only">{{ commonStrings.keys.wizardStep }}</span>
26770
26874
  <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26771
26875
  <span class="clr-wizard-stepnav-link-title">
26772
26876
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26773
26877
  </span>
26774
- <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
26775
- <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
26776
26878
  </button>
26777
26879
  `, 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" }] });
26778
26880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
@@ -26787,16 +26889,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
26787
26889
  [attr.disabled]="isDisabled ? '' : null"
26788
26890
  >
26789
26891
  <div class="clr-wizard-stepnav-link-icon">
26790
- <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26791
- <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
26892
+ <cds-icon
26893
+ *ngIf="hasError"
26894
+ shape="error-standard"
26895
+ [attr.aria-label]="commonStrings.keys.wizardStepError"
26896
+ ></cds-icon>
26897
+ <cds-icon
26898
+ *ngIf="!hasError && isComplete"
26899
+ shape="success-standard"
26900
+ [attr.aria-label]="commonStrings.keys.wizardStepSuccess"
26901
+ ></cds-icon>
26792
26902
  </div>
26793
26903
 
26904
+ <span class="clr-sr-only">{{ commonStrings.keys.wizardStep }}</span>
26794
26905
  <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26795
26906
  <span class="clr-wizard-stepnav-link-title">
26796
26907
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26797
26908
  </span>
26798
- <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
26799
- <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
26800
26909
  </button>
26801
26910
  `,
26802
26911
  host: {
@@ -27976,5 +28085,5 @@ const CLR_MENU_POSITIONS = [
27976
28085
  * Generated bundle index. Do not edit.
27977
28086
  */
27978
28087
 
27979
- export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
28088
+ export { CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIDEPANEL_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalConfigurationService, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27980
28089
  //# sourceMappingURL=clr-angular.mjs.map