@cqa-lib/cqa-ui 1.1.436 → 1.1.437

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.
@@ -42615,7 +42615,7 @@ class VersionHistoryCompareComponent {
42615
42615
  this.compareFromId = null;
42616
42616
  this.compareToId = null;
42617
42617
  this.formatValueHtmlFn = (v) => String(v !== null && v !== void 0 ? v : '');
42618
- this.fieldLabelMap = {};
42618
+ this.getFieldLabelFn = (f) => f || 'field';
42619
42619
  this.swapVersions = new EventEmitter();
42620
42620
  this.closeComparison = new EventEmitter();
42621
42621
  this.compareFromChange = new EventEmitter();
@@ -42627,12 +42627,6 @@ class VersionHistoryCompareComponent {
42627
42627
  this.groupedStepChanges = this.buildGroupedStepChanges();
42628
42628
  }
42629
42629
  }
42630
- getFieldLabel(field) {
42631
- if (!field) {
42632
- return 'field';
42633
- }
42634
- return this.fieldLabelMap[field] || field;
42635
- }
42636
42630
  buildGroupedStepChanges() {
42637
42631
  var _a;
42638
42632
  const changes = ((_a = this.compareResult) === null || _a === void 0 ? void 0 : _a.stepChanges) || [];
@@ -42664,10 +42658,10 @@ class VersionHistoryCompareComponent {
42664
42658
  }
42665
42659
  }
42666
42660
  VersionHistoryCompareComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryCompareComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42667
- 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 } });
42661
+ 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 } });
42668
42662
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryCompareComponent, decorators: [{
42669
42663
  type: Component,
42670
- 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: [] }]
42664
+ 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: [] }]
42671
42665
  }], propDecorators: { compareResult: [{
42672
42666
  type: Input
42673
42667
  }], versions: [{
@@ -42678,7 +42672,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
42678
42672
  type: Input
42679
42673
  }], formatValueHtmlFn: [{
42680
42674
  type: Input
42681
- }], fieldLabelMap: [{
42675
+ }], getFieldLabelFn: [{
42682
42676
  type: Input
42683
42677
  }], swapVersions: [{
42684
42678
  type: Output
@@ -42706,10 +42700,10 @@ class VersionHistoryDetailComponent {
42706
42700
  }
42707
42701
  }
42708
42702
  VersionHistoryDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42709
- 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 } });
42703
+ 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 } });
42710
42704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryDetailComponent, decorators: [{
42711
42705
  type: Component,
42712
- 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: [] }]
42706
+ 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: [] }]
42713
42707
  }], propDecorators: { selectedVersion: [{
42714
42708
  type: Input
42715
42709
  }], selectedIsCurrent: [{
@@ -42742,7 +42736,6 @@ class VersionHistoryRestoreConfirmComponent {
42742
42736
  this.newVersionNumber = 0;
42743
42737
  this.authorName = '';
42744
42738
  this.getChangeHeadlineFn = null;
42745
- this.fieldLabelMap = {};
42746
42739
  }
42747
42740
  getRestoreToLabel() {
42748
42741
  if (!this.restoringToVersion) {
@@ -42759,58 +42752,30 @@ class VersionHistoryRestoreConfirmComponent {
42759
42752
  d.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' });
42760
42753
  }
42761
42754
  getChangeInfo(change) {
42762
- const rawField = (change === null || change === void 0 ? void 0 : change.field) || 'field';
42763
- const field = this.fieldLabelMap[rawField] || rawField;
42764
42755
  const op = ((change === null || change === void 0 ? void 0 : change.op) || '').toLowerCase();
42765
- const step = (change === null || change === void 0 ? void 0 : change.stepId) != null ? `Step #${change.stepId} ` : '';
42766
- // Plain text versions used only for building the sentence
42767
- const fromText = this.toPlainText(change === null || change === void 0 ? void 0 : change.fromValue);
42768
- const toText = this.toPlainText(change === null || change === void 0 ? void 0 : change.toValue);
42769
- // Raw values preserved for innerHTML detail rows (HTML kept, no truncation)
42756
+ // Sentence comes entirely from the parent via getChangeHeadlineFn
42757
+ const sentence = this.getChangeHeadlineFn
42758
+ ? this.getChangeHeadlineFn(change)
42759
+ : this.fallbackSentence(change);
42770
42760
  const fromDisplay = this.toDisplayHtml(change === null || change === void 0 ? void 0 : change.fromValue);
42771
42761
  const toDisplay = this.toDisplayHtml(change === null || change === void 0 ? void 0 : change.toValue);
42772
- let sentence;
42773
- if (op === 'add') {
42774
- sentence = `${step}${field} added`;
42775
- }
42776
- else if (op === 'remove') {
42777
- sentence = `${step}${field} removed`;
42778
- }
42779
- else if (op === 'replace') {
42780
- if (fromText && toText) {
42781
- sentence = `${step}${field} changed`;
42782
- }
42783
- else if (toText) {
42784
- sentence = `${step}${field} reset to ${toText}`;
42785
- }
42786
- else if (fromText) {
42787
- sentence = `${step}${field} reverted`;
42788
- }
42789
- else {
42790
- sentence = `${step}${field} changed`;
42791
- }
42792
- }
42793
- else {
42794
- sentence = `${step}${field} updated`;
42795
- }
42796
42762
  return { sentence, fromDisplay, toDisplay, op };
42797
42763
  }
42798
- // Strip HTML and truncate used only in the sentence string
42799
- toPlainText(value) {
42800
- if (value == null) {
42801
- return '';
42802
- }
42803
- let text;
42804
- if (typeof value === 'string') {
42805
- text = value.replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();
42764
+ // Basic fallback if no getChangeHeadlineFn is provided
42765
+ fallbackSentence(change) {
42766
+ const field = (change === null || change === void 0 ? void 0 : change.field) || 'Step';
42767
+ const op = ((change === null || change === void 0 ? void 0 : change.op) || '').toLowerCase();
42768
+ const step = (change === null || change === void 0 ? void 0 : change.stepId) != null ? `Step #${change.stepId} ` : '';
42769
+ if (op === 'add') {
42770
+ return `${step}${field} added`;
42806
42771
  }
42807
- else if (typeof value === 'object') {
42808
- text = value.action || value.type || value.name || JSON.stringify(value);
42772
+ if (op === 'remove') {
42773
+ return `${step}${field} removed`;
42809
42774
  }
42810
- else {
42811
- text = String(value);
42775
+ if (op === 'replace') {
42776
+ return `${step}${field} changed`;
42812
42777
  }
42813
- return text.length > 55 ? text.slice(0, 52) + '…' : text;
42778
+ return `${step}${field} updated`;
42814
42779
  }
42815
42780
  // Preserve HTML for detail pills — objects resolved to a readable string
42816
42781
  toDisplayHtml(value) {
@@ -42827,7 +42792,7 @@ class VersionHistoryRestoreConfirmComponent {
42827
42792
  }
42828
42793
  }
42829
42794
  VersionHistoryRestoreConfirmComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryRestoreConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42830
- 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"] }] });
42795
+ 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"] }] });
42831
42796
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryRestoreConfirmComponent, decorators: [{
42832
42797
  type: Component,
42833
42798
  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: [] }]
@@ -42841,8 +42806,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
42841
42806
  type: Input
42842
42807
  }], getChangeHeadlineFn: [{
42843
42808
  type: Input
42844
- }], fieldLabelMap: [{
42845
- type: Input
42846
42809
  }] } });
42847
42810
 
42848
42811
  class UiKitModule {