@clr/angular 17.3.1 → 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.
@@ -225,19 +225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
225
225
  }]
226
226
  }] });
227
227
 
228
- /*
229
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
230
- * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
231
- * This software is released under MIT license.
232
- * The full license information can be found in LICENSE in the root directory of this project.
233
- */
234
- var AccordionStatus;
235
- (function (AccordionStatus) {
236
- AccordionStatus["Inactive"] = "inactive";
237
- AccordionStatus["Error"] = "error";
238
- AccordionStatus["Complete"] = "complete";
239
- })(AccordionStatus || (AccordionStatus = {}));
240
-
241
228
  /*
242
229
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
243
230
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -330,6 +317,8 @@ const commonStringsDefault = {
330
317
  datagridFilterDialogAriaLabel: 'Filter dialog',
331
318
  columnSeparatorAriaLabel: 'Column resize handle',
332
319
  columnSeparatorDescription: 'Use left or right key to resize the column',
320
+ fromLabel: 'From',
321
+ toLabel: 'To',
333
322
  // Alert
334
323
  alertCloseButtonAriaLabel: 'Close alert',
335
324
  alertNextAlertAriaLabel: 'Next alert message, {CURRENT} of {COUNT}',
@@ -375,6 +364,7 @@ const commonStringsDefault = {
375
364
  datagridExpandableRowContent: 'Expandable row content',
376
365
  datagridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,
377
366
  // Wizard
367
+ wizardStep: 'Step',
378
368
  wizardStepSuccess: 'Completed',
379
369
  wizardStepError: 'Error',
380
370
  wizardStepnavAriaLabel: 'Step navigation',
@@ -446,6 +436,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
446
436
  }]
447
437
  }] });
448
438
 
439
+ /*
440
+ * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
441
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
442
+ * This software is released under MIT license.
443
+ * The full license information can be found in LICENSE in the root directory of this project.
444
+ */
445
+ var AccordionStatus;
446
+ (function (AccordionStatus) {
447
+ AccordionStatus["Inactive"] = "inactive";
448
+ AccordionStatus["Error"] = "error";
449
+ AccordionStatus["Complete"] = "complete";
450
+ })(AccordionStatus || (AccordionStatus = {}));
451
+
449
452
  /*
450
453
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
451
454
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -575,8 +578,6 @@ class ClrAccordionPanel {
575
578
  this.disabled = false;
576
579
  this.panelOpen = false;
577
580
  this.panelOpenChange = new EventEmitter();
578
- this.AccordionStatus = AccordionStatus;
579
- this.isAccordion = true;
580
581
  this._id = uniqueIdFactory();
581
582
  }
582
583
  get id() {
@@ -652,10 +653,10 @@ class ClrAccordionPanel {
652
653
  }
653
654
  }
654
655
  ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: ClrCommonStringsService }, { token: AccordionService }, { token: IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
655
- ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true", "class.clr-accordion-panel-disabled": "this.disabled" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
656
+ ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true", "class.clr-accordion-panel-disabled": "this.disabled" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
656
657
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
657
658
  type: Component,
658
- args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
659
+ args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
659
660
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
660
661
  type: Input,
661
662
  args: ['clrAccordionPanelDisabled']
@@ -975,6 +976,9 @@ class StepperModel extends AccordionModel {
975
976
  this._panels[panelId].open = !this._panels[panelId].open;
976
977
  }
977
978
  }
979
+ navigateToPreviousPanel(currentPanelId) {
980
+ this.openPreviousPanel(this._panels[currentPanelId].id);
981
+ }
978
982
  navigateToNextPanel(currentPanelId, currentPanelValid = true) {
979
983
  if (currentPanelValid) {
980
984
  this.completePanel(currentPanelId);
@@ -1018,6 +1022,9 @@ class StepperModel extends AccordionModel {
1018
1022
  getNextPanel(currentPanelId) {
1019
1023
  return this.panels.find(s => s.index === this._panels[currentPanelId].index + 1);
1020
1024
  }
1025
+ getPreviousPanel(currentPanelId) {
1026
+ return this.panels.find(s => s.index === this._panels[currentPanelId].index - 1);
1027
+ }
1021
1028
  resetAllFuturePanels(panelId) {
1022
1029
  this.panels.filter(panel => panel.index >= this._panels[panelId].index).forEach(panel => this.resetPanel(panel.id));
1023
1030
  }
@@ -1056,6 +1063,15 @@ class StepperModel extends AccordionModel {
1056
1063
  this._panels[nextPanel.id].disabled = true;
1057
1064
  }
1058
1065
  }
1066
+ openPreviousPanel(currentPanelId) {
1067
+ const prevPanel = this.getPreviousPanel(currentPanelId);
1068
+ if (prevPanel) {
1069
+ this._panels[currentPanelId].open = false;
1070
+ this._panels[currentPanelId].disabled = false;
1071
+ this._panels[prevPanel.id].open = true;
1072
+ this._panels[prevPanel.id].disabled = true;
1073
+ }
1074
+ }
1059
1075
  setPanelError(panelId) {
1060
1076
  this.resetAllFuturePanels(panelId);
1061
1077
  this._panels[panelId].open = true;
@@ -1102,6 +1118,11 @@ class StepperService extends AccordionService {
1102
1118
  this.accordion.setPanelsWithErrors(ids);
1103
1119
  this.emitUpdatedPanels();
1104
1120
  }
1121
+ navigateToPreviousPanel(currentPanelId) {
1122
+ this.accordion.navigateToPreviousPanel(currentPanelId);
1123
+ this.updatePreviousStep(currentPanelId);
1124
+ this.emitUpdatedPanels();
1125
+ }
1105
1126
  navigateToNextPanel(currentPanelId, currentPanelValid = true) {
1106
1127
  this.accordion.navigateToNextPanel(currentPanelId, currentPanelValid);
1107
1128
  this.updateNextStep(currentPanelId, currentPanelValid);
@@ -1120,6 +1141,12 @@ class StepperService extends AccordionService {
1120
1141
  this._activeStepChanges.next(currentPanelId);
1121
1142
  }
1122
1143
  }
1144
+ updatePreviousStep(currentPanelId) {
1145
+ const prevPanel = this.accordion.getPreviousPanel(currentPanelId);
1146
+ if (prevPanel) {
1147
+ this._activeStepChanges.next(prevPanel.id);
1148
+ }
1149
+ }
1123
1150
  getAllCompletedPanelChanges() {
1124
1151
  return this._panelsChanges.pipe(map(() => this.accordion.allPanelsCompleted), distinctUntilChanged());
1125
1152
  }
@@ -1144,7 +1171,7 @@ class ClrStepperPanel extends ClrAccordionPanel {
1144
1171
  this.formGroupName = formGroupName;
1145
1172
  this.ngModelGroup = ngModelGroup;
1146
1173
  this.stepperService = stepperService;
1147
- this.isAccordion = false;
1174
+ this.AccordionStatus = AccordionStatus;
1148
1175
  this.subscriptions = [];
1149
1176
  }
1150
1177
  get id() {
@@ -1195,10 +1222,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
1195
1222
  }
1196
1223
  }
1197
1224
  ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: i1.FormGroupName, optional: true }, { token: i1.NgModelGroup, optional: true }, { token: StepperService }, { token: IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1198
- ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1225
+ ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-stepper-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1199
1226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
1200
1227
  type: Component,
1201
- args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1228
+ args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-stepper-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1202
1229
  }], ctorParameters: function () {
1203
1230
  return [{ type: undefined, decorators: [{
1204
1231
  type: Inject,
@@ -1222,6 +1249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
1222
1249
  var ClrStepButtonType;
1223
1250
  (function (ClrStepButtonType) {
1224
1251
  ClrStepButtonType["Next"] = "next";
1252
+ ClrStepButtonType["Previous"] = "previous";
1225
1253
  ClrStepButtonType["Submit"] = "submit";
1226
1254
  })(ClrStepButtonType || (ClrStepButtonType = {}));
1227
1255
  class ClrStepButton {
@@ -1230,16 +1258,22 @@ class ClrStepButton {
1230
1258
  this.stepperService = stepperService;
1231
1259
  this.type = ClrStepButtonType.Next;
1232
1260
  this.submitButton = false;
1261
+ this.previousButton = false;
1233
1262
  }
1234
1263
  ngOnInit() {
1235
1264
  this.submitButton = this.type === ClrStepButtonType.Submit;
1265
+ this.previousButton = this.type === ClrStepButtonType.Previous;
1236
1266
  }
1237
1267
  navigateToNextPanel() {
1268
+ if (this.previousButton) {
1269
+ this.stepperService.navigateToPreviousPanel(this.clrStep.id);
1270
+ return;
1271
+ }
1238
1272
  this.stepperService.navigateToNextPanel(this.clrStep.id, this.clrStep.formGroup.valid);
1239
1273
  }
1240
1274
  }
1241
1275
  ClrStepButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepButton, deps: [{ token: ClrStepperPanel }, { token: StepperService }], target: i0.ɵɵFactoryTarget.Directive });
1242
- ClrStepButton.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepButton, selector: "[clrStepButton]", inputs: { type: ["clrStepButton", "type"] }, host: { listeners: { "click": "navigateToNextPanel()" }, properties: { "class.clr-step-button": "true", "class.btn": "true", "type": "'button'", "class.btn-primary": "this.submitButton" } }, ngImport: i0 });
1276
+ ClrStepButton.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepButton, selector: "[clrStepButton]", inputs: { type: ["clrStepButton", "type"] }, host: { listeners: { "click": "navigateToNextPanel()" }, properties: { "class.clr-step-button": "true", "class.btn": "true", "type": "'button'", "class.btn-success": "this.submitButton", "class.btn-link": "this.previousButton" } }, ngImport: i0 });
1243
1277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepButton, decorators: [{
1244
1278
  type: Directive,
1245
1279
  args: [{
@@ -1255,7 +1289,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
1255
1289
  args: ['clrStepButton']
1256
1290
  }], submitButton: [{
1257
1291
  type: HostBinding,
1258
- args: ['class.btn-primary']
1292
+ args: ['class.btn-success']
1293
+ }], previousButton: [{
1294
+ type: HostBinding,
1295
+ args: ['class.btn-link']
1259
1296
  }], navigateToNextPanel: [{
1260
1297
  type: HostListener,
1261
1298
  args: ['click']
@@ -12809,6 +12846,12 @@ class DatagridNumericFilter extends DatagridFilterRegistrar {
12809
12846
  get minPlaceholderValue() {
12810
12847
  return this.minPlaceholder || this.commonStrings.keys.minValue;
12811
12848
  }
12849
+ get fromLabelValue() {
12850
+ return this.fromLabel || this.commonStrings.keys.fromLabel;
12851
+ }
12852
+ get toLabelValue() {
12853
+ return this.toLabel || this.commonStrings.keys.toLabel;
12854
+ }
12812
12855
  get low() {
12813
12856
  if (typeof this.filter.low === 'number' && isFinite(this.filter.low)) {
12814
12857
  return this.filter.low;
@@ -12871,31 +12914,40 @@ class DatagridNumericFilter extends DatagridFilterRegistrar {
12871
12914
  }
12872
12915
  }
12873
12916
  DatagridNumericFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridNumericFilter, deps: [{ token: FiltersProvider }, { token: DomAdapter }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
12874
- DatagridNumericFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: { minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], value: ["clrFilterValue", "value"], customNumericFilter: ["clrDgNumericFilter", "customNumericFilter"] }, outputs: { filterValueChange: "clrFilterValueChange" }, providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input_low"], descendants: true }, { propertyName: "filterContainer", first: true, predicate: ClrDatagridFilter, descendants: true }], usesInheritance: true, ngImport: i0, template: `
12917
+ DatagridNumericFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: { minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], fromLabel: ["clrFilterFromLabel", "fromLabel"], toLabel: ["clrFilterToLabel", "toLabel"], value: ["clrFilterValue", "value"], customNumericFilter: ["clrDgNumericFilter", "customNumericFilter"] }, outputs: { filterValueChange: "clrFilterValueChange" }, providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input_low"], descendants: true }, { propertyName: "filterContainer", first: true, predicate: ClrDatagridFilter, descendants: true }], usesInheritance: true, ngImport: i0, template: `
12875
12918
  <clr-dg-filter [clrDgFilter]="registered" [(clrDgFilterOpen)]="open">
12876
- <input
12877
- class="datagrid-numeric-filter-input"
12878
- #input_low
12879
- type="number"
12880
- autocomplete="off"
12881
- name="low"
12882
- [(ngModel)]="low"
12883
- [placeholder]="minPlaceholderValue"
12884
- [attr.aria-label]="minPlaceholderValue"
12885
- />
12886
- <span class="datagrid-filter-input-spacer"></span>
12887
- <input
12888
- class="datagrid-numeric-filter-input"
12889
- #input_high
12890
- type="number"
12891
- autocomplete="off"
12892
- name="high"
12893
- [(ngModel)]="high"
12894
- [placeholder]="maxPlaceholderValue"
12895
- [attr.aria-label]="maxPlaceholderValue"
12896
- />
12919
+ <div class="datagrid-numeric-filter-form">
12920
+ <div class="clr-form-control">
12921
+ <label class="clr-control-label">{{ fromLabelValue }}</label>
12922
+ <input
12923
+ clrInput
12924
+ class="datagrid-numeric-filter-input"
12925
+ #input_low
12926
+ type="number"
12927
+ autocomplete="off"
12928
+ name="low"
12929
+ [(ngModel)]="low"
12930
+ [placeholder]="minPlaceholderValue"
12931
+ [attr.aria-label]="minPlaceholderValue"
12932
+ />
12933
+ </div>
12934
+ <div class="clr-form-control">
12935
+ <label class="clr-control-label">{{ toLabelValue }}</label>
12936
+ <input
12937
+ clrInput
12938
+ class="datagrid-numeric-filter-input"
12939
+ #input_high
12940
+ type="number"
12941
+ autocomplete="off"
12942
+ name="high"
12943
+ [(ngModel)]="high"
12944
+ [placeholder]="maxPlaceholderValue"
12945
+ [attr.aria-label]="maxPlaceholderValue"
12946
+ />
12947
+ </div>
12948
+ </div>
12897
12949
  </clr-dg-filter>
12898
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: ["clrDgFilterOpen", "clrDgFilter"], outputs: ["clrDgFilterOpenChange"] }] });
12950
+ `, isInline: true, dependencies: [{ kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrInput, selector: "[clrInput]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: ["clrDgFilterOpen", "clrDgFilter"], outputs: ["clrDgFilterOpenChange"] }] });
12899
12951
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridNumericFilter, decorators: [{
12900
12952
  type: Component,
12901
12953
  args: [{
@@ -12903,27 +12955,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
12903
12955
  providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],
12904
12956
  template: `
12905
12957
  <clr-dg-filter [clrDgFilter]="registered" [(clrDgFilterOpen)]="open">
12906
- <input
12907
- class="datagrid-numeric-filter-input"
12908
- #input_low
12909
- type="number"
12910
- autocomplete="off"
12911
- name="low"
12912
- [(ngModel)]="low"
12913
- [placeholder]="minPlaceholderValue"
12914
- [attr.aria-label]="minPlaceholderValue"
12915
- />
12916
- <span class="datagrid-filter-input-spacer"></span>
12917
- <input
12918
- class="datagrid-numeric-filter-input"
12919
- #input_high
12920
- type="number"
12921
- autocomplete="off"
12922
- name="high"
12923
- [(ngModel)]="high"
12924
- [placeholder]="maxPlaceholderValue"
12925
- [attr.aria-label]="maxPlaceholderValue"
12926
- />
12958
+ <div class="datagrid-numeric-filter-form">
12959
+ <div class="clr-form-control">
12960
+ <label class="clr-control-label">{{ fromLabelValue }}</label>
12961
+ <input
12962
+ clrInput
12963
+ class="datagrid-numeric-filter-input"
12964
+ #input_low
12965
+ type="number"
12966
+ autocomplete="off"
12967
+ name="low"
12968
+ [(ngModel)]="low"
12969
+ [placeholder]="minPlaceholderValue"
12970
+ [attr.aria-label]="minPlaceholderValue"
12971
+ />
12972
+ </div>
12973
+ <div class="clr-form-control">
12974
+ <label class="clr-control-label">{{ toLabelValue }}</label>
12975
+ <input
12976
+ clrInput
12977
+ class="datagrid-numeric-filter-input"
12978
+ #input_high
12979
+ type="number"
12980
+ autocomplete="off"
12981
+ name="high"
12982
+ [(ngModel)]="high"
12983
+ [placeholder]="maxPlaceholderValue"
12984
+ [attr.aria-label]="maxPlaceholderValue"
12985
+ />
12986
+ </div>
12987
+ </div>
12927
12988
  </clr-dg-filter>
12928
12989
  `,
12929
12990
  }]
@@ -12933,6 +12994,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
12933
12994
  }], maxPlaceholder: [{
12934
12995
  type: Input,
12935
12996
  args: ['clrFilterMaxPlaceholder']
12997
+ }], fromLabel: [{
12998
+ type: Input,
12999
+ args: ['clrFilterFromLabel']
13000
+ }], toLabel: [{
13001
+ type: Input,
13002
+ args: ['clrFilterToLabel']
12936
13003
  }], filterValueChange: [{
12937
13004
  type: Output,
12938
13005
  args: ['clrFilterValueChange']
@@ -13519,6 +13586,19 @@ var ClrDatagridSortOrder;
13519
13586
  ClrDatagridSortOrder[ClrDatagridSortOrder["DESC"] = -1] = "DESC";
13520
13587
  })(ClrDatagridSortOrder || (ClrDatagridSortOrder = {}));
13521
13588
 
13589
+ /*
13590
+ * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
13591
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
13592
+ * This software is released under MIT license.
13593
+ * The full license information can be found in LICENSE in the root directory of this project.
13594
+ */
13595
+ // @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
13596
+ // There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
13597
+ const NO_LAYOUT_CLASS = 'datagrid-no-layout';
13598
+ const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
13599
+ const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
13600
+ const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
13601
+
13522
13602
  /*
13523
13603
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
13524
13604
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -13957,15 +14037,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
13957
14037
  * The full license information can be found in LICENSE in the root directory of this project.
13958
14038
  */
13959
14039
  class ClrDatagridColumn extends DatagridFilterRegistrar {
13960
- constructor(_sort, filters, vcr, detailService, changeDetectorRef) {
14040
+ constructor(el, _sort, filters, vcr, detailService, changeDetectorRef) {
13961
14041
  super(filters);
14042
+ this.el = el;
13962
14043
  this._sort = _sort;
13963
14044
  this.vcr = vcr;
13964
14045
  this.detailService = detailService;
13965
14046
  this.changeDetectorRef = changeDetectorRef;
13966
14047
  this.sortOrderChange = new EventEmitter();
13967
14048
  this.filterValueChange = new EventEmitter();
13968
- this.showSeparator = true;
13969
14049
  /**
13970
14050
  * A custom filter for this column that can be provided in the projected content
13971
14051
  */
@@ -13984,9 +14064,20 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13984
14064
  * Subscription to the sort service changes
13985
14065
  */
13986
14066
  this.subscriptions = [];
14067
+ this._showSeparator = true;
13987
14068
  this.subscriptions.push(this.listenForSortingChanges());
13988
14069
  this.subscriptions.push(this.listenForDetailPaneChanges());
13989
14070
  }
14071
+ get isHidden() {
14072
+ return this.el.nativeElement.classList.contains(HIDDEN_COLUMN_CLASS);
14073
+ }
14074
+ get showSeparator() {
14075
+ return this._showSeparator;
14076
+ }
14077
+ set showSeparator(value) {
14078
+ this._showSeparator = value;
14079
+ this.changeDetectorRef.markForCheck();
14080
+ }
13990
14081
  // TODO: We might want to make this an enum in the future
13991
14082
  get colType() {
13992
14083
  return this._colType;
@@ -14162,8 +14253,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
14162
14253
  return this.detailService.stateChange.subscribe(state => {
14163
14254
  if (this.showSeparator !== !state) {
14164
14255
  this.showSeparator = !state;
14165
- // Have to manually change because of OnPush
14166
- this.changeDetectorRef.markForCheck();
14167
14256
  }
14168
14257
  });
14169
14258
  }
@@ -14196,7 +14285,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
14196
14285
  }
14197
14286
  }
14198
14287
  }
14199
- ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
14288
+ ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: i0.ElementRef }, { token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
14200
14289
  ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
14201
14290
  <div class="datagrid-column-flex">
14202
14291
  <button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
@@ -14237,7 +14326,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
14237
14326
 
14238
14327
  <clr-dg-column-separator *ngIf="showSeparator"></clr-dg-column-separator>
14239
14328
  </div>
14240
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrDatagridColumnSeparator, selector: "clr-dg-column-separator" }, { kind: "component", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: ["clrFilterMinPlaceholder", "clrFilterMaxPlaceholder", "clrFilterValue", "clrDgNumericFilter"], outputs: ["clrFilterValueChange"] }, { kind: "component", type: DatagridStringFilter, selector: "clr-dg-string-filter", inputs: ["clrFilterPlaceholder", "clrDgStringFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14329
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrDatagridColumnSeparator, selector: "clr-dg-column-separator" }, { kind: "component", type: DatagridNumericFilter, selector: "clr-dg-numeric-filter", inputs: ["clrFilterMinPlaceholder", "clrFilterMaxPlaceholder", "clrFilterFromLabel", "clrFilterToLabel", "clrFilterValue", "clrDgNumericFilter"], outputs: ["clrFilterValueChange"] }, { kind: "component", type: DatagridStringFilter, selector: "clr-dg-string-filter", inputs: ["clrFilterPlaceholder", "clrDgStringFilter", "clrFilterValue"], outputs: ["clrFilterValueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14241
14330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, decorators: [{
14242
14331
  type: Component,
14243
14332
  args: [{
@@ -14291,7 +14380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
14291
14380
  },
14292
14381
  changeDetection: ChangeDetectionStrategy.OnPush,
14293
14382
  }]
14294
- }], ctorParameters: function () { return [{ type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
14383
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
14295
14384
  type: Input,
14296
14385
  args: ['clrFilterStringPlaceholder']
14297
14386
  }], filterNumberMaxPlaceholder: [{
@@ -15876,19 +15965,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
15876
15965
  type: Injectable
15877
15966
  }], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
15878
15967
 
15879
- /*
15880
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
15881
- * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
15882
- * This software is released under MIT license.
15883
- * The full license information can be found in LICENSE in the root directory of this project.
15884
- */
15885
- // @TODO The top two are not used now, which is probably a performance drag that was broken along the way.
15886
- // There was a previous pattern to hide everything to do computation then display, for Firefox, needs revisiting.
15887
- const NO_LAYOUT_CLASS = 'datagrid-no-layout';
15888
- const COMPUTE_WIDTH_CLASS = 'datagrid-computing-columns-width';
15889
- const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';
15890
- const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';
15891
-
15892
15968
  /*
15893
15969
  * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
15894
15970
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
@@ -18377,6 +18453,7 @@ class DatagridMainRenderer {
18377
18453
  (_b = (_a = row.expandableRow) === null || _a === void 0 ? void 0 : _a.cells.get(columnIndex)) === null || _b === void 0 ? void 0 : _b.setHidden(state);
18378
18454
  }
18379
18455
  });
18456
+ this.updateColumnSeparatorsVisibility();
18380
18457
  this.keyNavigation.resetKeyGrid();
18381
18458
  break;
18382
18459
  case DatagridColumnChanges.INITIALIZE:
@@ -18420,6 +18497,17 @@ class DatagridMainRenderer {
18420
18497
  return false;
18421
18498
  }
18422
18499
  }
18500
+ updateColumnSeparatorsVisibility() {
18501
+ const visibleColumns = this.datagrid.columns.filter(column => !column.isHidden);
18502
+ visibleColumns.forEach((column, index) => {
18503
+ if (index === visibleColumns.length - 1) {
18504
+ column.showSeparator = false;
18505
+ }
18506
+ else if (!column.showSeparator) {
18507
+ column.showSeparator = true;
18508
+ }
18509
+ });
18510
+ }
18423
18511
  }
18424
18512
  DatagridMainRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridMainRenderer, deps: [{ token: ClrDatagrid }, { token: DatagridRenderOrganizer }, { token: Items }, { token: Page }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DetailService }, { token: TableSizeService }, { token: ColumnsService }, { token: i0.NgZone }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Directive });
18425
18513
  DatagridMainRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridMainRenderer, selector: "clr-datagrid", providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }], queries: [{ propertyName: "headers", predicate: DatagridHeaderRenderer }, { propertyName: "rows", predicate: DatagridRowRenderer }], ngImport: i0 });
@@ -22145,15 +22233,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
22145
22233
  * The full license information can be found in LICENSE in the root directory of this project.
22146
22234
  */
22147
22235
  const createCloseButton = (document, ariaLabel) => {
22236
+ ClarityIcons.addIcons(timesIcon);
22148
22237
  const closeButton = document.createElement('button');
22149
22238
  closeButton.setAttribute('aria-label', ariaLabel);
22150
22239
  closeButton.setAttribute('aria-hidden', 'true');
22151
22240
  closeButton.innerHTML = `
22152
22241
  <cds-icon
22153
22242
  inner-offset="1"
22154
- shape="close"
22243
+ shape="times"
22155
22244
  size="32"
22156
- </cds-icon>
22245
+ ></cds-icon>
22157
22246
  `;
22158
22247
  /**
22159
22248
  * The button is hidden by default based on our Desktop-first approach.
@@ -26953,16 +27042,23 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
26953
27042
  [attr.disabled]="isDisabled ? '' : null"
26954
27043
  >
26955
27044
  <div class="clr-wizard-stepnav-link-icon">
26956
- <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26957
- <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
27045
+ <cds-icon
27046
+ *ngIf="hasError"
27047
+ shape="error-standard"
27048
+ [attr.aria-label]="commonStrings.keys.wizardStepError"
27049
+ ></cds-icon>
27050
+ <cds-icon
27051
+ *ngIf="!hasError && isComplete"
27052
+ shape="success-standard"
27053
+ [attr.aria-label]="commonStrings.keys.wizardStepSuccess"
27054
+ ></cds-icon>
26958
27055
  </div>
26959
27056
 
27057
+ <span class="clr-sr-only">{{ commonStrings.keys.wizardStep }}</span>
26960
27058
  <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26961
27059
  <span class="clr-wizard-stepnav-link-title">
26962
27060
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26963
27061
  </span>
26964
- <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
26965
- <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
26966
27062
  </button>
26967
27063
  `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }] });
26968
27064
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, decorators: [{
@@ -26977,16 +27073,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
26977
27073
  [attr.disabled]="isDisabled ? '' : null"
26978
27074
  >
26979
27075
  <div class="clr-wizard-stepnav-link-icon">
26980
- <cds-icon *ngIf="hasError" shape="error-standard" aria-label="error"></cds-icon>
26981
- <cds-icon *ngIf="!hasError && isComplete" shape="success-standard" aria-label="complete"></cds-icon>
27076
+ <cds-icon
27077
+ *ngIf="hasError"
27078
+ shape="error-standard"
27079
+ [attr.aria-label]="commonStrings.keys.wizardStepError"
27080
+ ></cds-icon>
27081
+ <cds-icon
27082
+ *ngIf="!hasError && isComplete"
27083
+ shape="success-standard"
27084
+ [attr.aria-label]="commonStrings.keys.wizardStepSuccess"
27085
+ ></cds-icon>
26982
27086
  </div>
26983
27087
 
27088
+ <span class="clr-sr-only">{{ commonStrings.keys.wizardStep }}</span>
26984
27089
  <div class="clr-wizard-stepnav-link-page-number"><ng-content></ng-content></div>
26985
27090
  <span class="clr-wizard-stepnav-link-title">
26986
27091
  <ng-template [ngTemplateOutlet]="page.navTitle"></ng-template>
26987
27092
  </span>
26988
- <span *ngIf="hasError" class="clr-sr-only">{{ commonStrings.keys.wizardStepError }}</span>
26989
- <span *ngIf="!hasError && isComplete" class="clr-sr-only">{{ commonStrings.keys.wizardStepSuccess }}</span>
26990
27093
  </button>
26991
27094
  `,
26992
27095
  host: {