@cqa-lib/cqa-ui 1.1.436 → 1.1.438

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.
@@ -42486,7 +42486,7 @@ class VersionHistoryCompareComponent {
42486
42486
  this.compareFromId = null;
42487
42487
  this.compareToId = null;
42488
42488
  this.formatValueHtmlFn = (v) => String(v ?? '');
42489
- this.fieldLabelMap = {};
42489
+ this.getFieldLabelFn = (f) => f || 'field';
42490
42490
  this.swapVersions = new EventEmitter();
42491
42491
  this.closeComparison = new EventEmitter();
42492
42492
  this.compareFromChange = new EventEmitter();
@@ -42498,12 +42498,6 @@ class VersionHistoryCompareComponent {
42498
42498
  this.groupedStepChanges = this.buildGroupedStepChanges();
42499
42499
  }
42500
42500
  }
42501
- getFieldLabel(field) {
42502
- if (!field) {
42503
- return 'field';
42504
- }
42505
- return this.fieldLabelMap[field] || field;
42506
- }
42507
42501
  buildGroupedStepChanges() {
42508
42502
  const changes = this.compareResult?.stepChanges || [];
42509
42503
  if (!changes.length) {
@@ -42534,10 +42528,10 @@ class VersionHistoryCompareComponent {
42534
42528
  }
42535
42529
  }
42536
42530
  VersionHistoryCompareComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryCompareComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42537
- VersionHistoryCompareComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryCompareComponent, selector: "cqa-version-history-compare", inputs: { compareResult: "compareResult", versions: "versions", compareFromId: "compareFromId", compareToId: "compareToId", formatValueHtmlFn: "formatValueHtmlFn", fieldLabelMap: "fieldLabelMap" }, outputs: { swapVersions: "swapVersions", closeComparison: "closeComparison", compareFromChange: "compareFromChange", compareToChange: "compareToChange" }, usesOnChanges: true, ngImport: i0, template: "<div>\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-header\">\n <div class=\"d-flex align-items-center\" style=\"gap: 10px;\">\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap versions\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 2L4 14M4 14L1 11M4 14L7 11M12 14L12 2M12 2L9 5M12 2L15 5\" stroke=\"#667085\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span class=\"cqa-vh-compare-title\">Version Comparison</span>\n <cqa-badge *ngIf=\"compareResult\" [label]=\"compareResult.totalDifferences + ' differences'\" size=\"small\"\n variant=\"info\" backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <cqa-button variant=\"outlined\" text=\"Close\" (clicked)=\"closeComparison.emit()\"></cqa-button>\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-selectors\">\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; flex: 1; min-width: 0;\">\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareFromId\" (ngModelChange)=\"compareFromChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5H14M14 5L11 2M14 5L11 8M14 11H2M2 11L5 8M2 11L5 14\" stroke=\"#3f43ee\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareToId\" (ngModelChange)=\"compareToChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n </div>\n </div>\n\n <div *ngIf=\"!compareResult\" class=\"cqa-vh-compare-loading\">\n Loading comparison...\n </div>\n\n <ng-container *ngIf=\"compareResult\">\n <div class=\"d-flex align-items-center cqa-vh-compare-summary-badges\">\n <cqa-badge [label]=\"'+ ' + compareResult.summary.added + ' added'\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n <cqa-badge [label]=\"'~ ' + compareResult.summary.modified + ' modified'\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n <cqa-badge [label]=\"'- ' + compareResult.summary.removed + ' removed'\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n <cqa-badge [label]=\"'= ' + compareResult.summary.unchanged + ' unchanged'\" size=\"small\" backgroundColor=\"#F2F4F7\"\n textColor=\"#344054\" borderColor=\"#E4E7EC\"></cqa-badge>\n </div>\n\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length || compareResult.stepChanges?.length; else noDiffs\">\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\">\n <span>Test Case Changes</span>\n <cqa-badge [label]=\"compareResult.testCaseChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div *ngFor=\"let change of compareResult.testCaseChanges\" class=\"cqa-vh-compare-diff-row\">\n <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabel(change.field) }}</div>\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0;\">\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"compareResult.stepChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\"\n [style.margin-top.px]=\"compareResult.testCaseChanges?.length ? 20 : 0\">\n <span>Step Changes</span>\n <cqa-badge [label]=\"compareResult.stepChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <ng-container *ngFor=\"let stepGroup of groupedStepChanges; let sgi = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"cqa-vh-detail-step-group-header\" [style.margin-top.px]=\"sgi > 0 ? 14 : 4\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\" textColor=\"#636A71\"\n borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n\n <!-- Changes within this step -->\n <div class=\"cqa-vh-compare-diff-row-container\">\n <div *ngFor=\"let change of stepGroup.changes\"\n class=\"cqa-vh-compare-diff-row cqa-vh-compare-diff-row--indented\">\n <!-- <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabel(change.field) }}</div> -->\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0; flex-grow:1;\">\n <div *ngIf=\"change.fromValue != null\"\n class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #noDiffs>\n <div class=\"cqa-vh-compare-empty\">\n <cqa-empty-state title=\"No differences\" description=\"No differences between these versions.\"></cqa-empty-state>\n </div>\n </ng-template>\n </ng-container>\n</div>", components: [{ type: BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "date": i2.DatePipe } });
42531
+ VersionHistoryCompareComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryCompareComponent, selector: "cqa-version-history-compare", inputs: { compareResult: "compareResult", versions: "versions", compareFromId: "compareFromId", compareToId: "compareToId", formatValueHtmlFn: "formatValueHtmlFn", getFieldLabelFn: "getFieldLabelFn" }, outputs: { swapVersions: "swapVersions", closeComparison: "closeComparison", compareFromChange: "compareFromChange", compareToChange: "compareToChange" }, usesOnChanges: true, ngImport: i0, template: "<div>\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-header\">\n <div class=\"d-flex align-items-center\" style=\"gap: 10px;\">\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap versions\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 2L4 14M4 14L1 11M4 14L7 11M12 14L12 2M12 2L9 5M12 2L15 5\" stroke=\"#667085\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span class=\"cqa-vh-compare-title\">Version Comparison</span>\n <cqa-badge *ngIf=\"compareResult\" [label]=\"compareResult.totalDifferences + ' differences'\" size=\"small\"\n variant=\"info\" backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <cqa-button variant=\"outlined\" text=\"Close\" (clicked)=\"closeComparison.emit()\"></cqa-button>\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-selectors\">\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; flex: 1; min-width: 0;\">\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareFromId\" (ngModelChange)=\"compareFromChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5H14M14 5L11 2M14 5L11 8M14 11H2M2 11L5 8M2 11L5 14\" stroke=\"#3f43ee\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareToId\" (ngModelChange)=\"compareToChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n </div>\n </div>\n\n <div *ngIf=\"!compareResult\" class=\"cqa-vh-compare-loading\">\n Loading comparison...\n </div>\n\n <ng-container *ngIf=\"compareResult\">\n <div class=\"d-flex align-items-center cqa-vh-compare-summary-badges\">\n <cqa-badge [label]=\"'+ ' + compareResult.summary.added + ' added'\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n <cqa-badge [label]=\"'~ ' + compareResult.summary.modified + ' modified'\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n <cqa-badge [label]=\"'- ' + compareResult.summary.removed + ' removed'\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n <cqa-badge [label]=\"'= ' + compareResult.summary.unchanged + ' unchanged'\" size=\"small\" backgroundColor=\"#F2F4F7\"\n textColor=\"#344054\" borderColor=\"#E4E7EC\"></cqa-badge>\n </div>\n\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length || compareResult.stepChanges?.length; else noDiffs\">\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\">\n <span>Test Case Changes</span>\n <cqa-badge [label]=\"compareResult.testCaseChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div *ngFor=\"let change of compareResult.testCaseChanges\" class=\"cqa-vh-compare-diff-row\">\n <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabelFn(change.field) }}</div>\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0;\">\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"compareResult.stepChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\"\n [style.margin-top.px]=\"compareResult.testCaseChanges?.length ? 20 : 0\">\n <span>Step Changes</span>\n <cqa-badge [label]=\"compareResult.stepChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <ng-container *ngFor=\"let stepGroup of groupedStepChanges; let sgi = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"cqa-vh-detail-step-group-header\" [style.margin-top.px]=\"sgi > 0 ? 14 : 4\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\" textColor=\"#636A71\"\n borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n\n <!-- Changes within this step -->\n <div class=\"cqa-vh-compare-diff-row-container\">\n <div *ngFor=\"let change of stepGroup.changes\"\n class=\"cqa-vh-compare-diff-row cqa-vh-compare-diff-row--indented\">\n <!-- <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabelFn(change.field) }}</div> -->\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0; flex-grow:1;\">\n <div *ngIf=\"change.fromValue != null\"\n class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #noDiffs>\n <div class=\"cqa-vh-compare-empty\">\n <cqa-empty-state title=\"No differences\" description=\"No differences between these versions.\"></cqa-empty-state>\n </div>\n </ng-template>\n </ng-container>\n</div>", components: [{ type: BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "date": i2.DatePipe } });
42538
42532
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryCompareComponent, decorators: [{
42539
42533
  type: Component,
42540
- args: [{ selector: 'cqa-version-history-compare', template: "<div>\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-header\">\n <div class=\"d-flex align-items-center\" style=\"gap: 10px;\">\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap versions\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 2L4 14M4 14L1 11M4 14L7 11M12 14L12 2M12 2L9 5M12 2L15 5\" stroke=\"#667085\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span class=\"cqa-vh-compare-title\">Version Comparison</span>\n <cqa-badge *ngIf=\"compareResult\" [label]=\"compareResult.totalDifferences + ' differences'\" size=\"small\"\n variant=\"info\" backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <cqa-button variant=\"outlined\" text=\"Close\" (clicked)=\"closeComparison.emit()\"></cqa-button>\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-selectors\">\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; flex: 1; min-width: 0;\">\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareFromId\" (ngModelChange)=\"compareFromChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5H14M14 5L11 2M14 5L11 8M14 11H2M2 11L5 8M2 11L5 14\" stroke=\"#3f43ee\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareToId\" (ngModelChange)=\"compareToChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n </div>\n </div>\n\n <div *ngIf=\"!compareResult\" class=\"cqa-vh-compare-loading\">\n Loading comparison...\n </div>\n\n <ng-container *ngIf=\"compareResult\">\n <div class=\"d-flex align-items-center cqa-vh-compare-summary-badges\">\n <cqa-badge [label]=\"'+ ' + compareResult.summary.added + ' added'\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n <cqa-badge [label]=\"'~ ' + compareResult.summary.modified + ' modified'\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n <cqa-badge [label]=\"'- ' + compareResult.summary.removed + ' removed'\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n <cqa-badge [label]=\"'= ' + compareResult.summary.unchanged + ' unchanged'\" size=\"small\" backgroundColor=\"#F2F4F7\"\n textColor=\"#344054\" borderColor=\"#E4E7EC\"></cqa-badge>\n </div>\n\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length || compareResult.stepChanges?.length; else noDiffs\">\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\">\n <span>Test Case Changes</span>\n <cqa-badge [label]=\"compareResult.testCaseChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div *ngFor=\"let change of compareResult.testCaseChanges\" class=\"cqa-vh-compare-diff-row\">\n <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabel(change.field) }}</div>\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0;\">\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"compareResult.stepChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\"\n [style.margin-top.px]=\"compareResult.testCaseChanges?.length ? 20 : 0\">\n <span>Step Changes</span>\n <cqa-badge [label]=\"compareResult.stepChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <ng-container *ngFor=\"let stepGroup of groupedStepChanges; let sgi = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"cqa-vh-detail-step-group-header\" [style.margin-top.px]=\"sgi > 0 ? 14 : 4\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\" textColor=\"#636A71\"\n borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n\n <!-- Changes within this step -->\n <div class=\"cqa-vh-compare-diff-row-container\">\n <div *ngFor=\"let change of stepGroup.changes\"\n class=\"cqa-vh-compare-diff-row cqa-vh-compare-diff-row--indented\">\n <!-- <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabel(change.field) }}</div> -->\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0; flex-grow:1;\">\n <div *ngIf=\"change.fromValue != null\"\n class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #noDiffs>\n <div class=\"cqa-vh-compare-empty\">\n <cqa-empty-state title=\"No differences\" description=\"No differences between these versions.\"></cqa-empty-state>\n </div>\n </ng-template>\n </ng-container>\n</div>", styles: [] }]
42534
+ args: [{ selector: 'cqa-version-history-compare', template: "<div>\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-header\">\n <div class=\"d-flex align-items-center\" style=\"gap: 10px;\">\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap versions\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 2L4 14M4 14L1 11M4 14L7 11M12 14L12 2M12 2L9 5M12 2L15 5\" stroke=\"#667085\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span class=\"cqa-vh-compare-title\">Version Comparison</span>\n <cqa-badge *ngIf=\"compareResult\" [label]=\"compareResult.totalDifferences + ' differences'\" size=\"small\"\n variant=\"info\" backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <cqa-button variant=\"outlined\" text=\"Close\" (clicked)=\"closeComparison.emit()\"></cqa-button>\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-selectors\">\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; flex: 1; min-width: 0;\">\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareFromId\" (ngModelChange)=\"compareFromChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5H14M14 5L11 2M14 5L11 8M14 11H2M2 11L5 8M2 11L5 14\" stroke=\"#3f43ee\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareToId\" (ngModelChange)=\"compareToChange.emit($event)\">\n <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} \u00B7 {{ v.displayDate | date:'MMM d,\n yyyy \u00B7 h:mm a' }}</option>\n </select>\n </div>\n </div>\n\n <div *ngIf=\"!compareResult\" class=\"cqa-vh-compare-loading\">\n Loading comparison...\n </div>\n\n <ng-container *ngIf=\"compareResult\">\n <div class=\"d-flex align-items-center cqa-vh-compare-summary-badges\">\n <cqa-badge [label]=\"'+ ' + compareResult.summary.added + ' added'\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n <cqa-badge [label]=\"'~ ' + compareResult.summary.modified + ' modified'\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n <cqa-badge [label]=\"'- ' + compareResult.summary.removed + ' removed'\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n <cqa-badge [label]=\"'= ' + compareResult.summary.unchanged + ' unchanged'\" size=\"small\" backgroundColor=\"#F2F4F7\"\n textColor=\"#344054\" borderColor=\"#E4E7EC\"></cqa-badge>\n </div>\n\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length || compareResult.stepChanges?.length; else noDiffs\">\n <ng-container *ngIf=\"compareResult.testCaseChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\">\n <span>Test Case Changes</span>\n <cqa-badge [label]=\"compareResult.testCaseChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div *ngFor=\"let change of compareResult.testCaseChanges\" class=\"cqa-vh-compare-diff-row\">\n <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabelFn(change.field) }}</div>\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0;\">\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"compareResult.stepChanges?.length\">\n <div class=\"d-flex align-items-center cqa-vh-compare-section-header\"\n [style.margin-top.px]=\"compareResult.testCaseChanges?.length ? 20 : 0\">\n <span>Step Changes</span>\n <cqa-badge [label]=\"compareResult.stepChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <ng-container *ngFor=\"let stepGroup of groupedStepChanges; let sgi = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"cqa-vh-detail-step-group-header\" [style.margin-top.px]=\"sgi > 0 ? 14 : 4\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\" textColor=\"#636A71\"\n borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n\n <!-- Changes within this step -->\n <div class=\"cqa-vh-compare-diff-row-container\">\n <div *ngFor=\"let change of stepGroup.changes\"\n class=\"cqa-vh-compare-diff-row cqa-vh-compare-diff-row--indented\">\n <!-- <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabelFn(change.field) }}</div> -->\n <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0; flex-grow:1;\">\n <div *ngIf=\"change.fromValue != null\"\n class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></div>\n </div>\n <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n </div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #noDiffs>\n <div class=\"cqa-vh-compare-empty\">\n <cqa-empty-state title=\"No differences\" description=\"No differences between these versions.\"></cqa-empty-state>\n </div>\n </ng-template>\n </ng-container>\n</div>", styles: [] }]
42541
42535
  }], propDecorators: { compareResult: [{
42542
42536
  type: Input
42543
42537
  }], versions: [{
@@ -42548,7 +42542,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
42548
42542
  type: Input
42549
42543
  }], formatValueHtmlFn: [{
42550
42544
  type: Input
42551
- }], fieldLabelMap: [{
42545
+ }], getFieldLabelFn: [{
42552
42546
  type: Input
42553
42547
  }], swapVersions: [{
42554
42548
  type: Output
@@ -42576,10 +42570,10 @@ class VersionHistoryDetailComponent {
42576
42570
  }
42577
42571
  }
42578
42572
  VersionHistoryDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42579
- VersionHistoryDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryDetailComponent, selector: "cqa-version-history-detail", inputs: { selectedVersion: "selectedVersion", selectedIsCurrent: "selectedIsCurrent", selectedVersionGroupedChanges: "selectedVersionGroupedChanges", isRestoring: "isRestoring", getAuthorLabelFn: "getAuthorLabelFn", getOpBadgeFn: "getOpBadgeFn", getChangeHeadlineFn: "getChangeHeadlineFn", formatValueHtmlFn: "formatValueHtmlFn", trackByGroupCategoryFn: "trackByGroupCategoryFn", trackByChangeFn: "trackByChangeFn" }, outputs: { compare: "compare", restore: "restore" }, ngImport: i0, template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <div class=\"d-flex align-items-start justify-content-between cqa-vh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-vh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-vh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.displayDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-vh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-vh-detail-actions\">\n <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button>\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <ng-container *ngFor=\"let group of selectedVersionGroupedChanges; let gi = index; trackBy: trackByGroupCategoryFn\">\n\n <!-- Category header -->\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 10px;\"\n [style.margin-top.px]=\"gi > 0 ? 20 : 0\">\n <span class=\"cqa-vh-detail-group-label\">{{ group.label }}</span>\n <cqa-badge [label]=\"'' + group.changes.length\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <!-- STEP category: second-level grouping by stepId -->\n <ng-container *ngIf=\"group.category === 'STEP' && group.stepGroups?.length; else flatChanges\">\n <ng-container *ngFor=\"let stepGroup of group.stepGroups; let si = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"\" [style.margin-top.px]=\"si > 0 ? 12 : 0\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n <!-- Changes within this step \u2014 no Step badge (step is already in the sub-header) -->\n <div class=\"cqa-vh-detail-change-row-container\">\n <div *ngFor=\"let change of stepGroup.changes; trackBy: trackByChangeFn\"\n class=\"cqa-vh-detail-change-row cqa-vh-detail-change-row--indented\">\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n\n </ng-container>\n </ng-container>\n\n <!-- All other categories: flat list (also fallback for STEP if no stepGroups) -->\n <ng-template #flatChanges>\n <div *ngFor=\"let change of group.changes; trackBy: trackByChangeFn\" class=\"cqa-vh-detail-change-row\">\n <div *ngIf=\"change.stepId != null\" class=\"cqa-vh-detail-change-step-col\">\n <cqa-badge [label]=\"'Step #' + change.stepId\" size=\"small\" [backgroundColor]=\"'#EDF1F3'\"\n [textColor]=\"'#636A71'\" [borderColor]=\"'#DBDEE1'\"></cqa-badge>\n </div>\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></span>\n </div>\n </div>\n </div>\n </ng-template>\n\n </ng-container>\n\n <div *ngIf=\"!selectedVersion.changes?.length\" class=\"cqa-vh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-vh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>", components: [{ type: BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i2.DatePipe } });
42573
+ VersionHistoryDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryDetailComponent, selector: "cqa-version-history-detail", inputs: { selectedVersion: "selectedVersion", selectedIsCurrent: "selectedIsCurrent", selectedVersionGroupedChanges: "selectedVersionGroupedChanges", isRestoring: "isRestoring", getAuthorLabelFn: "getAuthorLabelFn", getOpBadgeFn: "getOpBadgeFn", getChangeHeadlineFn: "getChangeHeadlineFn", formatValueHtmlFn: "formatValueHtmlFn", trackByGroupCategoryFn: "trackByGroupCategoryFn", trackByChangeFn: "trackByChangeFn" }, outputs: { compare: "compare", restore: "restore" }, ngImport: i0, template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <div class=\"d-flex align-items-start justify-content-between cqa-vh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-vh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-vh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.displayDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-vh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-vh-detail-actions\">\n <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button>\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <ng-container *ngFor=\"let group of selectedVersionGroupedChanges; let gi = index; trackBy: trackByGroupCategoryFn\">\n\n <!-- Category header -->\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 10px;\"\n [style.margin-top.px]=\"gi > 0 ? 20 : 0\">\n <span class=\"cqa-vh-detail-group-label\">{{ group.label }}</span>\n <cqa-badge [label]=\"'' + group.changes.length\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <!-- STEP category: second-level grouping by stepId -->\n <ng-container *ngIf=\"group.category === 'STEP' && group.stepGroups?.length; else flatChanges\">\n <ng-container *ngFor=\"let stepGroup of group.stepGroups; let si = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"\" [style.margin-top.px]=\"si > 0 ? 12 : 0\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n <!-- Changes within this step \u2014 no Step badge (step is already in the sub-header) -->\n <div class=\"cqa-vh-detail-change-row-container\">\n <div *ngFor=\"let change of stepGroup.changes; trackBy: trackByChangeFn\"\n class=\"cqa-vh-detail-change-row cqa-vh-detail-change-row--indented\">\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n\n </ng-container>\n </ng-container>\n\n <!-- All other categories: flat list (also fallback for STEP if no stepGroups) -->\n <ng-template #flatChanges>\n <div *ngFor=\"let change of group.changes; trackBy: trackByChangeFn\" class=\"cqa-vh-detail-change-row\">\n <div *ngIf=\"change.stepId != null\" class=\"cqa-vh-detail-change-step-col\">\n <cqa-badge [label]=\"'Step #' + change.stepId\" size=\"small\" [backgroundColor]=\"'#EDF1F3'\"\n [textColor]=\"'#636A71'\" [borderColor]=\"'#DBDEE1'\"></cqa-badge>\n </div>\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></span>\n </div>\n </div>\n </div>\n </ng-template>\n\n </ng-container>\n\n <div *ngIf=\"!selectedVersion.changes?.length\" class=\"cqa-vh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-vh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>", components: [{ type: BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i2.DatePipe } });
42580
42574
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryDetailComponent, decorators: [{
42581
42575
  type: Component,
42582
- args: [{ selector: 'cqa-version-history-detail', template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <div class=\"d-flex align-items-start justify-content-between cqa-vh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-vh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-vh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.displayDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-vh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-vh-detail-actions\">\n <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button>\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <ng-container *ngFor=\"let group of selectedVersionGroupedChanges; let gi = index; trackBy: trackByGroupCategoryFn\">\n\n <!-- Category header -->\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 10px;\"\n [style.margin-top.px]=\"gi > 0 ? 20 : 0\">\n <span class=\"cqa-vh-detail-group-label\">{{ group.label }}</span>\n <cqa-badge [label]=\"'' + group.changes.length\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <!-- STEP category: second-level grouping by stepId -->\n <ng-container *ngIf=\"group.category === 'STEP' && group.stepGroups?.length; else flatChanges\">\n <ng-container *ngFor=\"let stepGroup of group.stepGroups; let si = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"\" [style.margin-top.px]=\"si > 0 ? 12 : 0\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n <!-- Changes within this step \u2014 no Step badge (step is already in the sub-header) -->\n <div class=\"cqa-vh-detail-change-row-container\">\n <div *ngFor=\"let change of stepGroup.changes; trackBy: trackByChangeFn\"\n class=\"cqa-vh-detail-change-row cqa-vh-detail-change-row--indented\">\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n\n </ng-container>\n </ng-container>\n\n <!-- All other categories: flat list (also fallback for STEP if no stepGroups) -->\n <ng-template #flatChanges>\n <div *ngFor=\"let change of group.changes; trackBy: trackByChangeFn\" class=\"cqa-vh-detail-change-row\">\n <div *ngIf=\"change.stepId != null\" class=\"cqa-vh-detail-change-step-col\">\n <cqa-badge [label]=\"'Step #' + change.stepId\" size=\"small\" [backgroundColor]=\"'#EDF1F3'\"\n [textColor]=\"'#636A71'\" [borderColor]=\"'#DBDEE1'\"></cqa-badge>\n </div>\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue)\"></span>\n </div>\n </div>\n </div>\n </ng-template>\n\n </ng-container>\n\n <div *ngIf=\"!selectedVersion.changes?.length\" class=\"cqa-vh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-vh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>", styles: [] }]
42576
+ args: [{ selector: 'cqa-version-history-detail', template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <div class=\"d-flex align-items-start justify-content-between cqa-vh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-vh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-vh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.displayDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-vh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-vh-detail-actions\">\n <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button>\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <ng-container *ngFor=\"let group of selectedVersionGroupedChanges; let gi = index; trackBy: trackByGroupCategoryFn\">\n\n <!-- Category header -->\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 10px;\"\n [style.margin-top.px]=\"gi > 0 ? 20 : 0\">\n <span class=\"cqa-vh-detail-group-label\">{{ group.label }}</span>\n <cqa-badge [label]=\"'' + group.changes.length\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <!-- STEP category: second-level grouping by stepId -->\n <ng-container *ngIf=\"group.category === 'STEP' && group.stepGroups?.length; else flatChanges\">\n <ng-container *ngFor=\"let stepGroup of group.stepGroups; let si = index\">\n <div class=\"d-flex gap-2\">\n <!-- Step sub-group header -->\n <div class=\"\" [style.margin-top.px]=\"si > 0 ? 12 : 0\">\n <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n </div>\n <!-- Changes within this step \u2014 no Step badge (step is already in the sub-header) -->\n <div class=\"cqa-vh-detail-change-row-container\">\n <div *ngFor=\"let change of stepGroup.changes; trackBy: trackByChangeFn\"\n class=\"cqa-vh-detail-change-row cqa-vh-detail-change-row--indented\">\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n\n </ng-container>\n </ng-container>\n\n <!-- All other categories: flat list (also fallback for STEP if no stepGroups) -->\n <ng-template #flatChanges>\n <div *ngFor=\"let change of group.changes; trackBy: trackByChangeFn\" class=\"cqa-vh-detail-change-row\">\n <div *ngIf=\"change.stepId != null\" class=\"cqa-vh-detail-change-step-col\">\n <cqa-badge [label]=\"'Step #' + change.stepId\" size=\"small\" [backgroundColor]=\"'#EDF1F3'\"\n [textColor]=\"'#636A71'\" [borderColor]=\"'#DBDEE1'\"></cqa-badge>\n </div>\n <div>\n <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n [textColor]=\"getOpBadgeFn(change.op).textColor\"\n [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n </div>\n\n <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></span>\n </div>\n\n <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></span>\n </div>\n </div>\n </div>\n </ng-template>\n\n </ng-container>\n\n <div *ngIf=\"!selectedVersion.changes?.length\" class=\"cqa-vh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-vh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>", styles: [] }]
42583
42577
  }], propDecorators: { selectedVersion: [{
42584
42578
  type: Input
42585
42579
  }], selectedIsCurrent: [{
@@ -42612,7 +42606,6 @@ class VersionHistoryRestoreConfirmComponent {
42612
42606
  this.newVersionNumber = 0;
42613
42607
  this.authorName = '';
42614
42608
  this.getChangeHeadlineFn = null;
42615
- this.fieldLabelMap = {};
42616
42609
  }
42617
42610
  getRestoreToLabel() {
42618
42611
  if (!this.restoringToVersion) {
@@ -42629,58 +42622,30 @@ class VersionHistoryRestoreConfirmComponent {
42629
42622
  d.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' });
42630
42623
  }
42631
42624
  getChangeInfo(change) {
42632
- const rawField = change?.field || 'field';
42633
- const field = this.fieldLabelMap[rawField] || rawField;
42634
42625
  const op = (change?.op || '').toLowerCase();
42635
- const step = change?.stepId != null ? `Step #${change.stepId} ` : '';
42636
- // Plain text versions used only for building the sentence
42637
- const fromText = this.toPlainText(change?.fromValue);
42638
- const toText = this.toPlainText(change?.toValue);
42639
- // Raw values preserved for innerHTML detail rows (HTML kept, no truncation)
42626
+ // Sentence comes entirely from the parent via getChangeHeadlineFn
42627
+ const sentence = this.getChangeHeadlineFn
42628
+ ? this.getChangeHeadlineFn(change)
42629
+ : this.fallbackSentence(change);
42640
42630
  const fromDisplay = this.toDisplayHtml(change?.fromValue);
42641
42631
  const toDisplay = this.toDisplayHtml(change?.toValue);
42642
- let sentence;
42643
- if (op === 'add') {
42644
- sentence = `${step}${field} added`;
42645
- }
42646
- else if (op === 'remove') {
42647
- sentence = `${step}${field} removed`;
42648
- }
42649
- else if (op === 'replace') {
42650
- if (fromText && toText) {
42651
- sentence = `${step}${field} changed`;
42652
- }
42653
- else if (toText) {
42654
- sentence = `${step}${field} reset to ${toText}`;
42655
- }
42656
- else if (fromText) {
42657
- sentence = `${step}${field} reverted`;
42658
- }
42659
- else {
42660
- sentence = `${step}${field} changed`;
42661
- }
42662
- }
42663
- else {
42664
- sentence = `${step}${field} updated`;
42665
- }
42666
42632
  return { sentence, fromDisplay, toDisplay, op };
42667
42633
  }
42668
- // Strip HTML and truncate used only in the sentence string
42669
- toPlainText(value) {
42670
- if (value == null) {
42671
- return '';
42672
- }
42673
- let text;
42674
- if (typeof value === 'string') {
42675
- text = value.replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();
42634
+ // Basic fallback if no getChangeHeadlineFn is provided
42635
+ fallbackSentence(change) {
42636
+ const field = change?.field || 'Step';
42637
+ const op = (change?.op || '').toLowerCase();
42638
+ const step = change?.stepId != null ? `Step #${change.stepId} ` : '';
42639
+ if (op === 'add') {
42640
+ return `${step}${field} added`;
42676
42641
  }
42677
- else if (typeof value === 'object') {
42678
- text = value.action || value.type || value.name || JSON.stringify(value);
42642
+ if (op === 'remove') {
42643
+ return `${step}${field} removed`;
42679
42644
  }
42680
- else {
42681
- text = String(value);
42645
+ if (op === 'replace') {
42646
+ return `${step}${field} changed`;
42682
42647
  }
42683
- return text.length > 55 ? text.slice(0, 52) + '…' : text;
42648
+ return `${step}${field} updated`;
42684
42649
  }
42685
42650
  // Preserve HTML for detail pills — objects resolved to a readable string
42686
42651
  toDisplayHtml(value) {
@@ -42697,7 +42662,7 @@ class VersionHistoryRestoreConfirmComponent {
42697
42662
  }
42698
42663
  }
42699
42664
  VersionHistoryRestoreConfirmComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryRestoreConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42700
- VersionHistoryRestoreConfirmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryRestoreConfirmComponent, selector: "cqa-version-history-restore-confirm", inputs: { restoringToVersion: "restoringToVersion", currentVersionNumber: "currentVersionNumber", newVersionNumber: "newVersionNumber", authorName: "authorName", getChangeHeadlineFn: "getChangeHeadlineFn", fieldLabelMap: "fieldLabelMap" }, ngImport: i0, template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of restoringToVersion.changes; let i = index\"\n class=\"cqa-vh-restore-change-item\">\n\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n\n <ng-container *ngIf=\"getChangeInfo(change) as info\">\n <div class=\"cqa-vh-restore-change-body\">\n\n <!-- Primary sentence -->\n <span class=\"cqa-vh-restore-change-sentence\">{{ info.sentence }}</span>\n\n <!-- From \u2192 To detail (replace only) -->\n <div *ngIf=\"info.op === 'replace' && info.fromDisplay && info.toDisplay\"\n class=\"cqa-vh-restore-change-detail\">\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--from\" [innerHTML]=\"info.fromDisplay\"></span>\n <span class=\"cqa-vh-restore-change-detail-arrow\">\u2192</span>\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--to\" [innerHTML]=\"info.toDisplay\"></span>\n </div>\n\n <!-- Was: (remove only) -->\n <div *ngIf=\"info.op === 'remove' && info.fromDisplay\" class=\"cqa-vh-restore-change-detail\">\n <span class=\"cqa-vh-restore-change-detail-label\">Was:</span>\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--from\" [innerHTML]=\"info.fromDisplay\"></span>\n </div>\n\n </div>\n </ng-container>\n\n </div>\n </div>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
42665
+ VersionHistoryRestoreConfirmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryRestoreConfirmComponent, selector: "cqa-version-history-restore-confirm", inputs: { restoringToVersion: "restoringToVersion", currentVersionNumber: "currentVersionNumber", newVersionNumber: "newVersionNumber", authorName: "authorName", getChangeHeadlineFn: "getChangeHeadlineFn" }, ngImport: i0, template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of restoringToVersion.changes; let i = index\"\n class=\"cqa-vh-restore-change-item\">\n\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n\n <ng-container *ngIf=\"getChangeInfo(change) as info\">\n <div class=\"cqa-vh-restore-change-body\">\n\n <!-- Primary sentence -->\n <span class=\"cqa-vh-restore-change-sentence\">{{ info.sentence }}</span>\n\n <!-- From \u2192 To detail (replace only) -->\n <div *ngIf=\"info.op === 'replace' && info.fromDisplay && info.toDisplay\"\n class=\"cqa-vh-restore-change-detail\">\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--from\" [innerHTML]=\"info.fromDisplay\"></span>\n <span class=\"cqa-vh-restore-change-detail-arrow\">\u2192</span>\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--to\" [innerHTML]=\"info.toDisplay\"></span>\n </div>\n\n <!-- Was: (remove only) -->\n <div *ngIf=\"info.op === 'remove' && info.fromDisplay\" class=\"cqa-vh-restore-change-detail\">\n <span class=\"cqa-vh-restore-change-detail-label\">Was:</span>\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--from\" [innerHTML]=\"info.fromDisplay\"></span>\n </div>\n\n </div>\n </ng-container>\n\n </div>\n </div>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
42701
42666
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryRestoreConfirmComponent, decorators: [{
42702
42667
  type: Component,
42703
42668
  args: [{ selector: 'cqa-version-history-restore-confirm', template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of restoringToVersion.changes; let i = index\"\n class=\"cqa-vh-restore-change-item\">\n\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n\n <ng-container *ngIf=\"getChangeInfo(change) as info\">\n <div class=\"cqa-vh-restore-change-body\">\n\n <!-- Primary sentence -->\n <span class=\"cqa-vh-restore-change-sentence\">{{ info.sentence }}</span>\n\n <!-- From \u2192 To detail (replace only) -->\n <div *ngIf=\"info.op === 'replace' && info.fromDisplay && info.toDisplay\"\n class=\"cqa-vh-restore-change-detail\">\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--from\" [innerHTML]=\"info.fromDisplay\"></span>\n <span class=\"cqa-vh-restore-change-detail-arrow\">\u2192</span>\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--to\" [innerHTML]=\"info.toDisplay\"></span>\n </div>\n\n <!-- Was: (remove only) -->\n <div *ngIf=\"info.op === 'remove' && info.fromDisplay\" class=\"cqa-vh-restore-change-detail\">\n <span class=\"cqa-vh-restore-change-detail-label\">Was:</span>\n <span class=\"cqa-vh-restore-change-detail-value cqa-vh-restore-change-detail-value--from\" [innerHTML]=\"info.fromDisplay\"></span>\n </div>\n\n </div>\n </ng-container>\n\n </div>\n </div>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", styles: [] }]
@@ -42711,8 +42676,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
42711
42676
  type: Input
42712
42677
  }], getChangeHeadlineFn: [{
42713
42678
  type: Input
42714
- }], fieldLabelMap: [{
42715
- type: Input
42716
42679
  }] } });
42717
42680
 
42718
42681
  class UiKitModule {