@cqa-lib/cqa-ui 1.1.498 → 1.1.499

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/esm2020/lib/button/button.component.mjs +38 -18
  2. package/esm2020/lib/change-history/change-history.component.mjs +1 -1
  3. package/esm2020/lib/column-visibility/column-visibility.component.mjs +1 -1
  4. package/esm2020/lib/compare-runs/compare-runs.component.mjs +228 -35
  5. package/esm2020/lib/compare-runs/view-compare-button.component.mjs +36 -0
  6. package/esm2020/lib/dashboards/coverage-module-card/coverage-module-card.component.mjs +1 -1
  7. package/esm2020/lib/dashboards/dashboard-header/dashboard-header.component.mjs +1 -1
  8. package/esm2020/lib/dashboards/insight-card/insight-card.component.mjs +1 -1
  9. package/esm2020/lib/dialog/dialog.component.mjs +1 -1
  10. package/esm2020/lib/empty-state/empty-state.component.mjs +1 -1
  11. package/esm2020/lib/error-modal/error-modal.component.mjs +1 -1
  12. package/esm2020/lib/execution-result-modal/execution-result-modal.component.mjs +1 -1
  13. package/esm2020/lib/execution-screen/breakpoints-modal/breakpoints-modal.component.mjs +1 -1
  14. package/esm2020/lib/execution-screen/condition-debug-step/condition-branch-editor.component.mjs +1 -1
  15. package/esm2020/lib/execution-screen/main-step-collapse/main-step-collapse.component.mjs +1 -1
  16. package/esm2020/lib/execution-screen/recording-banner/recording-banner.component.mjs +1 -1
  17. package/esm2020/lib/execution-screen/review-recorded-steps-modal/review-recorded-steps-modal.component.mjs +1 -1
  18. package/esm2020/lib/execution-screen/session-changes-modal/session-changes-modal.component.mjs +1 -1
  19. package/esm2020/lib/export-code-modal/export-code-modal.component.mjs +1 -1
  20. package/esm2020/lib/filters/dynamic-filter/dynamic-filter.component.mjs +1 -1
  21. package/esm2020/lib/session-restoration-dialog/session-restoration-dialog.component.mjs +1 -1
  22. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +1 -1
  23. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +1 -1
  24. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +1 -1
  25. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +1 -1
  26. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
  27. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +1 -1
  28. package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +1 -1
  29. package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +1 -1
  30. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +1 -1
  31. package/esm2020/lib/step-builder/step-builder-record-step/step-builder-record-step.component.mjs +1 -1
  32. package/esm2020/lib/sub-steps-confirmation-dialog/sub-steps-confirmation-dialog.component.mjs +1 -1
  33. package/esm2020/lib/templates/table-template.component.mjs +1 -1
  34. package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +1 -1
  35. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +1 -1
  36. package/esm2020/lib/test-case-details/create-step-group/create-step-group.component.mjs +1 -1
  37. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +1 -1
  38. package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +1 -1
  39. package/esm2020/lib/test-case-details/element-popup/element-form/element-form.component.mjs +1 -1
  40. package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +1 -1
  41. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +1 -1
  42. package/esm2020/lib/test-case-details/run-execution-alert/run-execution-alert.component.mjs +1 -1
  43. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer.component.mjs +1 -1
  44. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +1 -1
  45. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +1 -1
  46. package/esm2020/lib/ui-kit.module.mjs +6 -1
  47. package/esm2020/lib/version-history/new-version-history-detail/new-version-history-detail.component.mjs +1 -1
  48. package/esm2020/lib/version-history/version-history-compare/version-history-compare.component.mjs +1 -1
  49. package/esm2020/lib/version-history/version-history-detail/version-history-detail.component.mjs +1 -1
  50. package/esm2020/public-api.mjs +2 -1
  51. package/fesm2015/cqa-lib-cqa-ui.mjs +352 -101
  52. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  53. package/fesm2020/cqa-lib-cqa-ui.mjs +350 -101
  54. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  55. package/lib/button/button.component.d.ts +5 -1
  56. package/lib/compare-runs/compare-runs.component.d.ts +32 -2
  57. package/lib/compare-runs/view-compare-button.component.d.ts +7 -0
  58. package/lib/ui-kit.module.d.ts +102 -101
  59. package/package.json +1 -1
  60. package/public-api.d.ts +1 -0
  61. package/styles.css +1 -1
@@ -1,13 +1,16 @@
1
1
  import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/material/icon";
4
- import * as i2 from "@angular/material/tooltip";
5
- import * as i3 from "@angular/common";
3
+ import * as i1 from "@angular/material/progress-spinner";
4
+ import * as i2 from "@angular/material/icon";
5
+ import * as i3 from "@angular/material/tooltip";
6
+ import * as i4 from "@angular/common";
6
7
  export class ButtonComponent {
7
8
  constructor() {
8
9
  this.variant = 'filled';
9
10
  this.btnSize = 'lg';
10
11
  this.disabled = false;
12
+ /** When true, shows an indeterminate spinner and blocks interaction (same visual treatment as disabled). */
13
+ this.loading = false;
11
14
  this.iconPosition = 'start';
12
15
  this.fullWidth = false;
13
16
  this.type = 'button';
@@ -22,6 +25,20 @@ export class ButtonComponent {
22
25
  get hasIcon() {
23
26
  return !!this.icon;
24
27
  }
28
+ get interactionLocked() {
29
+ return this.disabled || this.loading;
30
+ }
31
+ get spinnerDiameter() {
32
+ switch (this.btnSize) {
33
+ case 'sm':
34
+ return 12;
35
+ case 'md':
36
+ return 16;
37
+ case 'lg':
38
+ default:
39
+ return 18;
40
+ }
41
+ }
25
42
  get buttonClasses() {
26
43
  const baseClasses = [
27
44
  'cqa-inline-flex',
@@ -31,7 +48,7 @@ export class ButtonComponent {
31
48
  'cqa-border',
32
49
  ];
33
50
  baseClasses.push(...this.sizeClasses);
34
- if (this.disabled) {
51
+ if (this.interactionLocked) {
35
52
  baseClasses.push('cqa-cursor-not-allowed');
36
53
  }
37
54
  if (this.fullWidth) {
@@ -54,8 +71,9 @@ export class ButtonComponent {
54
71
  }
55
72
  getVariantClasses() {
56
73
  const classes = [];
74
+ const blocked = this.interactionLocked;
57
75
  if (this.variant === 'filled') {
58
- if (this.disabled) {
76
+ if (blocked) {
59
77
  classes.push('cqa-bg-primary-muted');
60
78
  }
61
79
  else {
@@ -67,7 +85,7 @@ export class ButtonComponent {
67
85
  }
68
86
  else if (this.variant === 'grey-solid') {
69
87
  // Neutral grey solid style
70
- if (this.disabled) {
88
+ if (blocked) {
71
89
  classes.push('cqa-bg-grey-400', 'cqa-border', 'cqa-border-solid', 'cqa-border-primary-muted');
72
90
  }
73
91
  else {
@@ -78,7 +96,7 @@ export class ButtonComponent {
78
96
  }
79
97
  }
80
98
  else if (this.variant === 'outlined') {
81
- if (this.disabled) {
99
+ if (blocked) {
82
100
  classes.push('cqa-bg-transparent', 'cqa-border', 'cqa-border-solid', 'cqa-border-primary-muted');
83
101
  }
84
102
  else {
@@ -94,7 +112,7 @@ export class ButtonComponent {
94
112
  }
95
113
  }
96
114
  else if (this.variant === 'text') {
97
- if (this.disabled) {
115
+ if (blocked) {
98
116
  classes.push('cqa-bg-transparent', 'cqa-border-none');
99
117
  }
100
118
  else {
@@ -105,7 +123,7 @@ export class ButtonComponent {
105
123
  }
106
124
  }
107
125
  else if (this.variant === 'elevated') {
108
- if (this.disabled) {
126
+ if (blocked) {
109
127
  classes.push('cqa-bg-primary-muted', 'cqa-shadow-none');
110
128
  }
111
129
  else {
@@ -124,7 +142,7 @@ export class ButtonComponent {
124
142
  }
125
143
  }
126
144
  else if (this.variant === 'tonal') {
127
- if (this.disabled) {
145
+ if (blocked) {
128
146
  classes.push('cqa-bg-primary-muted');
129
147
  }
130
148
  else {
@@ -139,7 +157,7 @@ export class ButtonComponent {
139
157
  return classes;
140
158
  }
141
159
  get textClass() {
142
- if (this.disabled) {
160
+ if (this.interactionLocked) {
143
161
  if (this.variant === 'outlined' || this.variant === 'text') {
144
162
  return 'cqa-text-ink';
145
163
  }
@@ -165,7 +183,7 @@ export class ButtonComponent {
165
183
  }
166
184
  }
167
185
  onMouseEnter() {
168
- if (!this.disabled) {
186
+ if (!this.interactionLocked) {
169
187
  this.isHovered = true;
170
188
  }
171
189
  }
@@ -174,7 +192,7 @@ export class ButtonComponent {
174
192
  this.isPressed = false;
175
193
  }
176
194
  onMouseDown() {
177
- if (!this.disabled) {
195
+ if (!this.interactionLocked) {
178
196
  this.isPressed = true;
179
197
  }
180
198
  }
@@ -182,7 +200,7 @@ export class ButtonComponent {
182
200
  this.isPressed = false;
183
201
  }
184
202
  onFocus() {
185
- if (!this.disabled) {
203
+ if (!this.interactionLocked) {
186
204
  this.isFocused = true;
187
205
  }
188
206
  }
@@ -191,7 +209,7 @@ export class ButtonComponent {
191
209
  this.isPressed = false;
192
210
  }
193
211
  onClick(event) {
194
- if (!this.disabled) {
212
+ if (!this.interactionLocked) {
195
213
  this.clicked.emit(event);
196
214
  }
197
215
  }
@@ -251,16 +269,18 @@ export class ButtonComponent {
251
269
  }
252
270
  }
253
271
  ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
254
- ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ButtonComponent, selector: "cqa-button", inputs: { variant: "variant", btnSize: "btnSize", disabled: "disabled", icon: "icon", iconPosition: "iconPosition", fullWidth: "fullWidth", iconColor: "iconColor", type: "type", text: "text", customClass: "customClass", inlineStyles: "inlineStyles", tooltip: "tooltip", tooltipPosition: "tooltipPosition" }, outputs: { clicked: "clicked" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "mousedown": "onMouseDown()", "mouseup": "onMouseUp()", "focus": "onFocus()", "blur": "onBlur()" } }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <button\n [style]=\"buttonStyles\"\n [matTooltip]=\"tooltip || ''\"\n [matTooltipDisabled]=\"!tooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngClass]=\"[\n paddingClasses,\n buttonClasses,\n textClass\n ]\"\n [type]=\"type\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n >\n\n <mat-icon *ngIf=\"icon && iconPosition === 'start'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n <!-- Dynamic text support -->\n <span *ngIf=\"text\">{{text}}</span>\n\n <ng-content *ngIf=\"!text\"></ng-content>\n\n <mat-icon *ngIf=\"icon && iconPosition === 'end'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n </button>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
272
+ ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ButtonComponent, selector: "cqa-button", inputs: { variant: "variant", btnSize: "btnSize", disabled: "disabled", loading: "loading", icon: "icon", iconPosition: "iconPosition", fullWidth: "fullWidth", iconColor: "iconColor", type: "type", text: "text", customClass: "customClass", inlineStyles: "inlineStyles", tooltip: "tooltip", tooltipPosition: "tooltipPosition" }, outputs: { clicked: "clicked" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "mousedown": "onMouseDown()", "mouseup": "onMouseUp()", "focus": "onFocus()", "blur": "onBlur()" } }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <button\n [style]=\"buttonStyles\"\n [matTooltip]=\"tooltip || ''\"\n [matTooltipDisabled]=\"!tooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngClass]=\"[\n paddingClasses,\n buttonClasses,\n textClass\n ]\"\n [type]=\"type\"\n [disabled]=\"interactionLocked\"\n [attr.aria-disabled]=\"interactionLocked\"\n [attr.aria-busy]=\"loading\"\n (click)=\"onClick($event)\"\n >\n\n <mat-spinner\n *ngIf=\"loading\"\n [diameter]=\"spinnerDiameter\"\n strokeWidth=\"2\"\n mode=\"indeterminate\"\n class=\"cqa-inline-block cqa-flex-shrink-0 cqa-mr-1.5\"\n ></mat-spinner>\n\n <mat-icon *ngIf=\"!loading && icon && iconPosition === 'start'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n <!-- Dynamic text support -->\n <span *ngIf=\"text\">{{text}}</span>\n\n <ng-content *ngIf=\"!text\"></ng-content>\n\n <mat-icon *ngIf=\"!loading && icon && iconPosition === 'end'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n </button>\n</div>", components: [{ type: i1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
255
273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ButtonComponent, decorators: [{
256
274
  type: Component,
257
- args: [{ selector: 'cqa-button', template: "<div class=\"cqa-ui-root\">\n <button\n [style]=\"buttonStyles\"\n [matTooltip]=\"tooltip || ''\"\n [matTooltipDisabled]=\"!tooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngClass]=\"[\n paddingClasses,\n buttonClasses,\n textClass\n ]\"\n [type]=\"type\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n >\n\n <mat-icon *ngIf=\"icon && iconPosition === 'start'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n <!-- Dynamic text support -->\n <span *ngIf=\"text\">{{text}}</span>\n\n <ng-content *ngIf=\"!text\"></ng-content>\n\n <mat-icon *ngIf=\"icon && iconPosition === 'end'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n </button>\n</div>", styles: [] }]
275
+ args: [{ selector: 'cqa-button', template: "<div class=\"cqa-ui-root\">\n <button\n [style]=\"buttonStyles\"\n [matTooltip]=\"tooltip || ''\"\n [matTooltipDisabled]=\"!tooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngClass]=\"[\n paddingClasses,\n buttonClasses,\n textClass\n ]\"\n [type]=\"type\"\n [disabled]=\"interactionLocked\"\n [attr.aria-disabled]=\"interactionLocked\"\n [attr.aria-busy]=\"loading\"\n (click)=\"onClick($event)\"\n >\n\n <mat-spinner\n *ngIf=\"loading\"\n [diameter]=\"spinnerDiameter\"\n strokeWidth=\"2\"\n mode=\"indeterminate\"\n class=\"cqa-inline-block cqa-flex-shrink-0 cqa-mr-1.5\"\n ></mat-spinner>\n\n <mat-icon *ngIf=\"!loading && icon && iconPosition === 'start'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n <!-- Dynamic text support -->\n <span *ngIf=\"text\">{{text}}</span>\n\n <ng-content *ngIf=\"!text\"></ng-content>\n\n <mat-icon *ngIf=\"!loading && icon && iconPosition === 'end'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n {{ icon }}\n </mat-icon>\n\n </button>\n</div>", styles: [] }]
258
276
  }], propDecorators: { variant: [{
259
277
  type: Input
260
278
  }], btnSize: [{
261
279
  type: Input
262
280
  }], disabled: [{
263
281
  type: Input
282
+ }], loading: [{
283
+ type: Input
264
284
  }], icon: [{
265
285
  type: Input
266
286
  }], iconPosition: [{
@@ -302,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
302
322
  type: HostListener,
303
323
  args: ['blur']
304
324
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBVXJGLE1BQU0sT0FBTyxlQUFlO0lBTDVCO1FBTVcsWUFBTyxHQUFrQixRQUFRLENBQUM7UUFDbEMsWUFBTyxHQUFlLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXRCLGlCQUFZLEdBQW9CLE9BQU8sQ0FBQztRQUN4QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBRS9CLFNBQUksR0FBa0MsUUFBUSxDQUFDO1FBT3hELG1EQUFtRDtRQUMxQyxvQkFBZSxHQUF5QyxPQUFPLENBQUM7UUFDL0QsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFbkQsMEJBQTBCO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixjQUFTLEdBQVksS0FBSyxDQUFDO0tBME81QjtJQXhPQyxJQUFJLE9BQU87UUFDVCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixNQUFNLFdBQVcsR0FBRztZQUNsQixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixpQkFBaUI7WUFDakIsWUFBWTtTQUNiLENBQUM7UUFFRixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXRDLElBQUksSUFBSSxDQUFDLFFBQVEs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RUQsSUFBSSxXQUFXO1FBQ2IsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3BCLEtBQUssSUFBSTtnQkFDUCxPQUFPLDhDQUE4QyxDQUFDO1lBQ3hELEtBQUssSUFBSTtnQkFDUCxPQUFPLDhDQUE4QyxDQUFDO1lBQ3hELEtBQUssSUFBSSxDQUFDO1lBQ1Y7Z0JBQ0UsT0FBTyw4Q0FBOEMsQ0FBQztTQUN6RDtJQUNILENBQUM7OzRHQS9QVSxlQUFlO2dHQUFmLGVBQWUsa2tCQ1Y1Qix5MUJBK0JNOzJGRHJCTyxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFlBQVk7OEJBS2IsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDTyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0QsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNO2dCQXFKUCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFRMUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVk7Z0JBTzFCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXO2dCQVF6QixTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUztnQkFNdkIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU87Z0JBUXJCLE1BQU07c0JBREwsWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBCdXR0b25WYXJpYW50ID0gJ2ZpbGxlZCcgfCAnb3V0bGluZWQnIHwgJ3RleHQnIHwgJ2VsZXZhdGVkJyB8ICd0b25hbCcgfCAnZ3JleS1zb2xpZCc7XG5leHBvcnQgdHlwZSBCdXR0b25TaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdmFyaWFudDogQnV0dG9uVmFyaWFudCA9ICdmaWxsZWQnO1xuICBASW5wdXQoKSBidG5TaXplOiBCdXR0b25TaXplID0gJ2xnJztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaWNvbj86IHN0cmluZztcbiAgICAgIEBJbnB1dCgpIGljb25Qb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcbiAgICAgIEBJbnB1dCgpIGZ1bGxXaWR0aDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpY29uQ29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHR5cGU6ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnID0gJ2J1dHRvbic7XG4gIEBJbnB1dCgpIHRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xuICAvKiogSW5saW5lIHN0eWxlcyBhcyBhIHN0cmluZyAoZS5nLiwgXCJ3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDtcIikgKi9cbiAgQElucHV0KCkgaW5saW5lU3R5bGVzPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgdG9vbHRpcCB0ZXh0OyBpZiBmYWxzeSwgdG9vbHRpcCBpcyBkaXNhYmxlZCAqL1xuICBASW5wdXQoKSB0b29sdGlwPzogc3RyaW5nO1xuICAvKiogVG9vbHRpcCBwb3NpdGlvbjsgbWlycm9ycyBNYXRUb29sdGlwUG9zaXRpb24gKi9cbiAgQElucHV0KCkgdG9vbHRpcFBvc2l0aW9uOiAnYmVsb3cnIHwgJ2Fib3ZlJyB8ICdsZWZ0JyB8ICdyaWdodCcgPSAnYmVsb3cnO1xuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZSB0cmFja2luZ1xuICBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBoYXNJY29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaWNvbjtcbiAgfVxuXG4gIGdldCBidXR0b25DbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBbXG4gICAgICAnY3FhLWlubGluZS1mbGV4JyxcbiAgICAgICdjcWEtaXRlbXMtY2VudGVyJyxcbiAgICAgICdjcWEtanVzdGlmeS1jZW50ZXInLFxuICAgICAgJ2NxYS1mb250LW1lZGl1bScsXG4gICAgICAnY3FhLWJvcmRlcicsXG4gICAgXTtcblxuICAgIGJhc2VDbGFzc2VzLnB1c2goLi4udGhpcy5zaXplQ2xhc3Nlcyk7XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgYmFzZUNsYXNzZXMucHVzaCgnY3FhLWN1cnNvci1ub3QtYWxsb3dlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZ1bGxXaWR0aCkge1xuICAgICAgYmFzZUNsYXNzZXMucHVzaCgnY3FhLXctZnVsbCcpO1xuICAgIH1cblxuICAgIC8vIEFkZCB2YXJpYW50IGFuZCBzdGF0ZSBzcGVjaWZpYyBjbGFzc2VzXG4gICAgY29uc3QgdmFyaWFudENsYXNzZXMgPSB0aGlzLmdldFZhcmlhbnRDbGFzc2VzKCk7XG4gICAgXG4gICAgcmV0dXJuIFsuLi5iYXNlQ2xhc3NlcywgLi4udmFyaWFudENsYXNzZXMsIC4uLih0aGlzLmN1c3RvbUNsYXNzID8gW3RoaXMuY3VzdG9tQ2xhc3NdIDogW10pXS5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBzaXplQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgc3dpdGNoICh0aGlzLmJ0blNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuIFsnY3FhLXB5LVsycHhdJywgJ2NxYS10ZXh0LVsxMHB4XScsICdjcWEtbGVhZGluZy1bMTRweF0nLCAnY3FhLXJvdW5kZWQtWzVweF0nLCAnY3FhLWdhcC0xJ107XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiBbJ2NxYS1weS1bNnB4XScsICdjcWEtdGV4dC1bMTFweF0nLCAnY3FhLWxlYWRpbmctWzE2cHhdJywgJ2NxYS1yb3VuZGVkLVs2cHhdJywgJ2NxYS1nYXAtMS41J107XG4gICAgICBjYXNlICdsZyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gWydjcWEtcHktWzEwcHhdJywgJ2NxYS10ZXh0LVsxMi4zcHhdJywgJ2NxYS1sZWFkaW5nLVsxNy41cHhdJywgJ2NxYS1yb3VuZGVkLVs4cHhdJywgJ2NxYS1nYXAtMiddO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFyaWFudENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnZmlsbGVkJykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeS1tdXRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeSBjcWEtdGV4dC13aGl0ZScpO1xuICAgICAgICBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LWhvdmVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2dyZXktc29saWQnKSB7XG4gICAgICAvLyBOZXV0cmFsIGdyZXkgc29saWQgc3R5bGVcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLWdyZXktNDAwJywgJ2NxYS1ib3JkZXInLCAnY3FhLWJvcmRlci1zb2xpZCcsICdjcWEtYm9yZGVyLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLWdyZXktNDAwJywgJ2NxYS1ib3JkZXInLCAnY3FhLWJvcmRlci1zb2xpZCcsICdjcWEtYm9yZGVyLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctZ3JleS0yMDAnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy10cmFuc3BhcmVudCcsICdjcWEtYm9yZGVyJywgJ2NxYS1ib3JkZXItc29saWQnLCAnY3FhLWJvcmRlci1wcmltYXJ5LW11dGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UtYWx0JywgJ2NxYS1ib3JkZXInLCAnY3FhLWJvcmRlci1zb2xpZCcsICchY3FhLWJvcmRlci1wcmltYXJ5LWhvdmVyJywgJ2NxYS1zaGFkb3ctWzBweF80cHhfNHB4X3JnYmEoMCwwLDAsMC4yNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvdmVyZWQgfHwgdGhpcy5pc1ByZXNzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UnLCAnY3FhLWJvcmRlcicsICdjcWEtYm9yZGVyLXNvbGlkJywgJyFjcWEtYm9yZGVyLXByaW1hcnknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy10cmFuc3BhcmVudCcsICdjcWEtYm9yZGVyJywgJ2NxYS1ib3JkZXItc29saWQnLCAnY3FhLWJvcmRlci1zbGF0ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhcmlhbnQgPT09ICd0ZXh0Jykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctdHJhbnNwYXJlbnQnLCAnY3FhLWJvcmRlci1ub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy10cmFuc3BhcmVudCcsICdjcWEtYm9yZGVyLW5vbmUnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkIHx8IHRoaXMuaXNGb2N1c2VkIHx8IHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeS1zdXJmYWNlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2VsZXZhdGVkJykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeS1tdXRlZCcsICdjcWEtc2hhZG93LW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXByaW1hcnktc3VyZmFjZS1hbHQnLCAnY3FhLXNoYWRvdy1bMHB4XzRweF80cHhfcmdiYSgwLDAsMCwwLjI1KV0nKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUHJlc3NlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXByaW1hcnktc3VyZmFjZScsICdjcWEtc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzFweF8zcHhfMXB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UtYWx0JywgJ2NxYS1zaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMnB4XzZweF8ycHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UnLCAnY3FhLXNoYWRvdy1bMHB4XzFweF8ycHhfcmdiYSgwLDAsMCwwLjMpLDBweF8xcHhfM3B4XzFweF9yZ2JhKDAsMCwwLDAuMTUpXScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhcmlhbnQgPT09ICd0b25hbCcpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzSG92ZXJlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXRvbmFsLWhvdmVyJywgJ2NxYS1zaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMXB4XzNweF8xcHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UtYWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIGdldCB0ZXh0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ291dGxpbmVkJyB8fCB0aGlzLnZhcmlhbnQgPT09ICd0ZXh0Jykge1xuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LWluayc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LWluay1tdXRlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnZhcmlhbnQpIHtcbiAgICAgIGNhc2UgJ2ZpbGxlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtc3VyZmFjZS1kZWZhdWx0JztcbiAgICAgIGNhc2UgJ2dyZXktc29saWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LWJsYWNrLTEwMCc7XG4gICAgICBjYXNlICdvdXRsaW5lZCc6XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCB8fCB0aGlzLmlzSG92ZXJlZCB8fCB0aGlzLmlzUHJlc3NlZCkge1xuICAgICAgICAgIHJldHVybiAnIWNxYS10ZXh0LXByaW1hcnktaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtc2xhdGUnO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICBjYXNlICdlbGV2YXRlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtcHJpbWFyeS1ob3Zlcic7XG4gICAgICBjYXNlICd0b25hbCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtaW5rJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgb25Nb3VzZUVudGVyKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJylcbiAgb25Nb3VzZURvd24oKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzUHJlc3NlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG9uTW91c2VVcCgpIHtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBvbkZvY3VzKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBidXR0b25TdHlsZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlU3R5bGUgPSAncG9pbnRlci1ldmVudHM6IGF1dG87JztcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVTdHlsZXMgPyBgJHtiYXNlU3R5bGV9ICR7dGhpcy5pbmxpbmVTdHlsZXN9YCA6IGJhc2VTdHlsZTtcbiAgfVxuXG4gIGdldCBwYWRkaW5nQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc1RleHRBbmRJY29uU3RhcnQgPSB0aGlzLnRleHQgJiYgdGhpcy5pY29uICYmIHRoaXMuaWNvblBvc2l0aW9uID09PSAnc3RhcnQnO1xuICAgIGNvbnN0IGhhc1RleHRBbmRJY29uRW5kID0gdGhpcy50ZXh0ICYmIHRoaXMuaWNvbiAmJiB0aGlzLmljb25Qb3NpdGlvbiA9PT0gJ2VuZCc7XG4gICAgY29uc3QgaGFzVGV4dE9ubHkgPSB0aGlzLnRleHQgJiYgIXRoaXMuaWNvbjtcbiAgICBjb25zdCBoYXNJY29uT25seSA9ICF0aGlzLnRleHQgJiYgdGhpcy5pY29uO1xuXG4gICAgc3dpdGNoICh0aGlzLmJ0blNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgaWYgKGhhc1RleHRBbmRJY29uU3RhcnQpIHJldHVybiAnY3FhLXByLVs4cHhdIGNxYS1wbC1bOHB4XSc7XG4gICAgICAgIGlmIChoYXNUZXh0QW5kSWNvbkVuZCkgcmV0dXJuICdjcWEtcGwtWzhweF0gY3FhLXByLVs4cHhdJztcbiAgICAgICAgaWYgKGhhc1RleHRPbmx5KSByZXR1cm4gJ2NxYS1weC1bOHB4XSc7XG4gICAgICAgIGlmIChoYXNJY29uT25seSkgcmV0dXJuICdjcWEtcHgtWzhweF0nO1xuICAgICAgICByZXR1cm4gJ2NxYS1weC1bOHB4XSc7XG4gICAgICBcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgaWYgKGhhc1RleHRBbmRJY29uU3RhcnQpIHJldHVybiAnY3FhLXByLVsxNnB4XSBjcWEtcGwtWzE2cHhdJztcbiAgICAgICAgaWYgKGhhc1RleHRBbmRJY29uRW5kKSByZXR1cm4gJ2NxYS1wbC1bMTZweF0gY3FhLXByLVsxNnB4XSc7XG4gICAgICAgIGlmIChoYXNUZXh0T25seSkgcmV0dXJuICdjcWEtcHgtWzE2cHhdJztcbiAgICAgICAgaWYgKGhhc0ljb25Pbmx5KSByZXR1cm4gJ2NxYS1weC1bMTZweF0nO1xuICAgICAgICByZXR1cm4gJ2NxYS1weC1bMTZweF0nO1xuICAgICAgXG4gICAgICBjYXNlICdsZyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoaGFzVGV4dEFuZEljb25TdGFydCkgcmV0dXJuICdjcWEtcHItWzI0cHhdIGNxYS1wbC1bMTZweF0nO1xuICAgICAgICBpZiAoaGFzVGV4dEFuZEljb25FbmQpIHJldHVybiAnY3FhLXBsLVsyNHB4XSBjcWEtcHItWzE2cHhdJztcbiAgICAgICAgaWYgKGhhc1RleHRPbmx5KSByZXR1cm4gJ2NxYS1weC1bMjRweF0nO1xuICAgICAgICBpZiAoaGFzSWNvbk9ubHkpIHJldHVybiAnY3FhLXB4LVsxMnB4XSc7XG4gICAgICAgIHJldHVybiAnY3FhLXB4LVsyNHB4XSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGljb25DbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmJ0blNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICchY3FhLXctWzEwcHhdICFjcWEtaC1bMTBweF0gIWNxYS10ZXh0LVsxMHB4XSc7XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiAnIWNxYS13LVsxNnB4XSAhY3FhLWgtWzE2cHhdICFjcWEtdGV4dC1bMTZweF0nO1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICchY3FhLXctWzE4cHhdICFjcWEtaC1bMThweF0gIWNxYS10ZXh0LVsxOHB4XSc7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8YnV0dG9uXG4gICAgW3N0eWxlXT1cImJ1dHRvblN0eWxlc1wiXG4gICAgW21hdFRvb2x0aXBdPVwidG9vbHRpcCB8fCAnJ1wiXG4gICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhdG9vbHRpcFwiXG4gICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgIHBhZGRpbmdDbGFzc2VzLFxuICAgICAgYnV0dG9uQ2xhc3NlcyxcbiAgICAgIHRleHRDbGFzc1xuICAgIF1cIlxuICAgIFt0eXBlXT1cInR5cGVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gID5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb24gJiYgaWNvblBvc2l0aW9uID09PSAnc3RhcnQnXCIgW25nQ2xhc3NdPVwiaWNvbkNsYXNzZXNcIiBbc3R5bGUuY29sb3JdPVwiaWNvbkNvbG9yXCI+XG4gICAgICB7eyBpY29uIH19XG4gICAgPC9tYXQtaWNvbj5cblxuICAgIDwhLS0gRHluYW1pYyB0ZXh0IHN1cHBvcnQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJ0ZXh0XCI+e3t0ZXh0fX08L3NwYW4+XG5cbiAgICA8bmctY29udGVudCAqbmdJZj1cIiF0ZXh0XCI+PC9uZy1jb250ZW50PlxuXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvbiAmJiBpY29uUG9zaXRpb24gPT09ICdlbmQnXCIgW25nQ2xhc3NdPVwiaWNvbkNsYXNzZXNcIiBbc3R5bGUuY29sb3JdPVwiaWNvbkNvbG9yXCI+XG4gICAgICB7eyBpY29uIH19XG4gICAgPC9tYXQtaWNvbj5cblxuICA8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVVyRixNQUFNLE9BQU8sZUFBZTtJQUw1QjtRQU1XLFlBQU8sR0FBa0IsUUFBUSxDQUFDO1FBQ2xDLFlBQU8sR0FBZSxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNuQyw0R0FBNEc7UUFDbkcsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVyQixpQkFBWSxHQUFvQixPQUFPLENBQUM7UUFDeEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUvQixTQUFJLEdBQWtDLFFBQVEsQ0FBQztRQU94RCxtREFBbUQ7UUFDMUMsb0JBQWUsR0FBeUMsT0FBTyxDQUFDO1FBQy9ELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRW5ELDBCQUEwQjtRQUMxQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztLQTJQNUI7SUF6UEMsSUFBSSxPQUFPO1FBQ1QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEIsS0FBSyxJQUFJO2dCQUNQLE9B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QkFEWCxZQUFZO3VCQUFDLFlBQVk7Z0JBUTFCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQU8xQixXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVztnQkFRekIsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVM7Z0JBTXZCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPO2dCQVFyQixNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgQnV0dG9uVmFyaWFudCA9ICdmaWxsZWQnIHwgJ291dGxpbmVkJyB8ICd0ZXh0JyB8ICdlbGV2YXRlZCcgfCAndG9uYWwnIHwgJ2dyZXktc29saWQnO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IEJ1dHRvblZhcmlhbnQgPSAnZmlsbGVkJztcbiAgQElucHV0KCkgYnRuU2l6ZTogQnV0dG9uU2l6ZSA9ICdsZyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBXaGVuIHRydWUsIHNob3dzIGFuIGluZGV0ZXJtaW5hdGUgc3Bpbm5lciBhbmQgYmxvY2tzIGludGVyYWN0aW9uIChzYW1lIHZpc3VhbCB0cmVhdG1lbnQgYXMgZGlzYWJsZWQpLiAqL1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGljb24/OiBzdHJpbmc7XG4gICAgICBASW5wdXQoKSBpY29uUG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyA9ICdzdGFydCc7XG4gICAgICBASW5wdXQoKSBmdWxsV2lkdGg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaWNvbkNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyA9ICdidXR0b24nO1xuICBASW5wdXQoKSB0ZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgLyoqIElubGluZSBzdHlsZXMgYXMgYSBzdHJpbmcgKGUuZy4sIFwid2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7XCIpICovXG4gIEBJbnB1dCgpIGlubGluZVN0eWxlcz86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHRvb2x0aXAgdGV4dDsgaWYgZmFsc3ksIHRvb2x0aXAgaXMgZGlzYWJsZWQgKi9cbiAgQElucHV0KCkgdG9vbHRpcD86IHN0cmluZztcbiAgLyoqIFRvb2x0aXAgcG9zaXRpb247IG1pcnJvcnMgTWF0VG9vbHRpcFBvc2l0aW9uICovXG4gIEBJbnB1dCgpIHRvb2x0aXBQb3NpdGlvbjogJ2JlbG93JyB8ICdhYm92ZScgfCAnbGVmdCcgfCAncmlnaHQnID0gJ2JlbG93JztcbiAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGUgdHJhY2tpbmdcbiAgaXNIb3ZlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1ByZXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgaGFzSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmljb247XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpb25Mb2NrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHNwaW5uZXJEaWFtZXRlcigpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5idG5TaXplKSB7XG4gICAgICBjYXNlICdzbSc6XG4gICAgICAgIHJldHVybiAxMjtcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDE4O1xuICAgIH1cbiAgfVxuXG4gIGdldCBidXR0b25DbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBbXG4gICAgICAnY3FhLWlubGluZS1mbGV4JyxcbiAgICAgICdjcWEtaXRlbXMtY2VudGVyJyxcbiAgICAgICdjcWEtanVzdGlmeS1jZW50ZXInLFxuICAgICAgJ2NxYS1mb250LW1lZGl1bScsXG4gICAgICAnY3FhLWJvcmRlcicsXG4gICAgXTtcblxuICAgIGJhc2VDbGFzc2VzLnB1c2goLi4udGhpcy5zaXplQ2xhc3Nlcyk7XG5cbiAgICBpZiAodGhpcy5pbnRlcmFjdGlvbkxvY2tlZCkge1xuICAgICAgYmFzZUNsYXNzZXMucHVzaCgnY3FhLWN1cnNvci1ub3QtYWxsb3dlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZ1bGxXaWR0aCkge1xuICAgICAgYmFzZUNsYXNzZXMucHVzaCgnY3FhLXctZnVsbCcpO1xuICAgIH1cblxuICAgIC8vIEFkZCB2YXJpYW50IGFuZCBzdGF0ZSBzcGVjaWZpYyBjbGFzc2VzXG4gICAgY29uc3QgdmFyaWFudENsYXNzZXMgPSB0aGlzLmdldFZhcmlhbnRDbGFzc2VzKCk7XG4gICAgXG4gICAgcmV0dXJuIFsuLi5iYXNlQ2xhc3NlcywgLi4udmFyaWFudENsYXNzZXMsIC4uLih0aGlzLmN1c3RvbUNsYXNzID8gW3RoaXMuY3VzdG9tQ2xhc3NdIDogW10pXS5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBzaXplQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgc3dpdGNoICh0aGlzLmJ0blNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuIFsnY3FhLXB5LVsycHhdJywgJ2NxYS10ZXh0LVsxMHB4XScsICdjcWEtbGVhZGluZy1bMTRweF0nLCAnY3FhLXJvdW5kZWQtWzVweF0nLCAnY3FhLWdhcC0xJ107XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiBbJ2NxYS1weS1bNnB4XScsICdjcWEtdGV4dC1bMTFweF0nLCAnY3FhLWxlYWRpbmctWzE2cHhdJywgJ2NxYS1yb3VuZGVkLVs2cHhdJywgJ2NxYS1nYXAtMS41J107XG4gICAgICBjYXNlICdsZyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gWydjcWEtcHktWzEwcHhdJywgJ2NxYS10ZXh0LVsxMi4zcHhdJywgJ2NxYS1sZWFkaW5nLVsxNy41cHhdJywgJ2NxYS1yb3VuZGVkLVs4cHhdJywgJ2NxYS1nYXAtMiddO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFyaWFudENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYmxvY2tlZCA9IHRoaXMuaW50ZXJhY3Rpb25Mb2NrZWQ7XG5cbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnZmlsbGVkJykge1xuICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeS1tdXRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeSBjcWEtdGV4dC13aGl0ZScpO1xuICAgICAgICBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LWhvdmVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2dyZXktc29saWQnKSB7XG4gICAgICAvLyBOZXV0cmFsIGdyZXkgc29saWQgc3R5bGVcbiAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLWdyZXktNDAwJywgJ2NxYS1ib3JkZXInLCAnY3FhLWJvcmRlci1zb2xpZCcsICdjcWEtYm9yZGVyLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLWdyZXktNDAwJywgJ2NxYS1ib3JkZXInLCAnY3FhLWJvcmRlci1zb2xpZCcsICdjcWEtYm9yZGVyLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctZ3JleS0yMDAnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICBpZiAoYmxvY2tlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy10cmFuc3BhcmVudCcsICdjcWEtYm9yZGVyJywgJ2NxYS1ib3JkZXItc29saWQnLCAnY3FhLWJvcmRlci1wcmltYXJ5LW11dGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UtYWx0JywgJ2NxYS1ib3JkZXInLCAnY3FhLWJvcmRlci1zb2xpZCcsICchY3FhLWJvcmRlci1wcmltYXJ5LWhvdmVyJywgJ2NxYS1zaGFkb3ctWzBweF80cHhfNHB4X3JnYmEoMCwwLDAsMC4yNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvdmVyZWQgfHwgdGhpcy5pc1ByZXNzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UnLCAnY3FhLWJvcmRlcicsICdjcWEtYm9yZGVyLXNvbGlkJywgJyFjcWEtYm9yZGVyLXByaW1hcnknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy10cmFuc3BhcmVudCcsICdjcWEtYm9yZGVyJywgJ2NxYS1ib3JkZXItc29saWQnLCAnY3FhLWJvcmRlci1zbGF0ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhcmlhbnQgPT09ICd0ZXh0Jykge1xuICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctdHJhbnNwYXJlbnQnLCAnY3FhLWJvcmRlci1ub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy10cmFuc3BhcmVudCcsICdjcWEtYm9yZGVyLW5vbmUnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkIHx8IHRoaXMuaXNGb2N1c2VkIHx8IHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeS1zdXJmYWNlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2VsZXZhdGVkJykge1xuICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjcWEtYmctcHJpbWFyeS1tdXRlZCcsICdjcWEtc2hhZG93LW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXByaW1hcnktc3VyZmFjZS1hbHQnLCAnY3FhLXNoYWRvdy1bMHB4XzRweF80cHhfcmdiYSgwLDAsMCwwLjI1KV0nKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUHJlc3NlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXByaW1hcnktc3VyZmFjZScsICdjcWEtc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzFweF8zcHhfMXB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UtYWx0JywgJ2NxYS1zaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMnB4XzZweF8ycHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UnLCAnY3FhLXNoYWRvdy1bMHB4XzFweF8ycHhfcmdiYSgwLDAsMCwwLjMpLDBweF8xcHhfM3B4XzFweF9yZ2JhKDAsMCwwLDAuMTUpXScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhcmlhbnQgPT09ICd0b25hbCcpIHtcbiAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzSG92ZXJlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnY3FhLWJnLXRvbmFsLWhvdmVyJywgJ2NxYS1zaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMXB4XzNweF8xcHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2NxYS1iZy1wcmltYXJ5LXN1cmZhY2UtYWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIGdldCB0ZXh0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pbnRlcmFjdGlvbkxvY2tlZCkge1xuICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ291dGxpbmVkJyB8fCB0aGlzLnZhcmlhbnQgPT09ICd0ZXh0Jykge1xuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LWluayc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LWluay1tdXRlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnZhcmlhbnQpIHtcbiAgICAgIGNhc2UgJ2ZpbGxlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtc3VyZmFjZS1kZWZhdWx0JztcbiAgICAgIGNhc2UgJ2dyZXktc29saWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LWJsYWNrLTEwMCc7XG4gICAgICBjYXNlICdvdXRsaW5lZCc6XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCB8fCB0aGlzLmlzSG92ZXJlZCB8fCB0aGlzLmlzUHJlc3NlZCkge1xuICAgICAgICAgIHJldHVybiAnIWNxYS10ZXh0LXByaW1hcnktaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtc2xhdGUnO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICBjYXNlICdlbGV2YXRlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtcHJpbWFyeS1ob3Zlcic7XG4gICAgICBjYXNlICd0b25hbCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtaW5rJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgb25Nb3VzZUVudGVyKCkge1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkxvY2tlZCkge1xuICAgICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJylcbiAgb25Nb3VzZURvd24oKSB7XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uTG9ja2VkKSB7XG4gICAgICB0aGlzLmlzUHJlc3NlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG9uTW91c2VVcCgpIHtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBvbkZvY3VzKCkge1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkxvY2tlZCkge1xuICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkxvY2tlZCkge1xuICAgICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBidXR0b25TdHlsZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlU3R5bGUgPSAncG9pbnRlci1ldmVudHM6IGF1dG87JztcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVTdHlsZXMgPyBgJHtiYXNlU3R5bGV9ICR7dGhpcy5pbmxpbmVTdHlsZXN9YCA6IGJhc2VTdHlsZTtcbiAgfVxuXG4gIGdldCBwYWRkaW5nQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc1RleHRBbmRJY29uU3RhcnQgPSB0aGlzLnRleHQgJiYgdGhpcy5pY29uICYmIHRoaXMuaWNvblBvc2l0aW9uID09PSAnc3RhcnQnO1xuICAgIGNvbnN0IGhhc1RleHRBbmRJY29uRW5kID0gdGhpcy50ZXh0ICYmIHRoaXMuaWNvbiAmJiB0aGlzLmljb25Qb3NpdGlvbiA9PT0gJ2VuZCc7XG4gICAgY29uc3QgaGFzVGV4dE9ubHkgPSB0aGlzLnRleHQgJiYgIXRoaXMuaWNvbjtcbiAgICBjb25zdCBoYXNJY29uT25seSA9ICF0aGlzLnRleHQgJiYgdGhpcy5pY29uO1xuXG4gICAgc3dpdGNoICh0aGlzLmJ0blNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgaWYgKGhhc1RleHRBbmRJY29uU3RhcnQpIHJldHVybiAnY3FhLXByLVs4cHhdIGNxYS1wbC1bOHB4XSc7XG4gICAgICAgIGlmIChoYXNUZXh0QW5kSWNvbkVuZCkgcmV0dXJuICdjcWEtcGwtWzhweF0gY3FhLXByLVs4cHhdJztcbiAgICAgICAgaWYgKGhhc1RleHRPbmx5KSByZXR1cm4gJ2NxYS1weC1bOHB4XSc7XG4gICAgICAgIGlmIChoYXNJY29uT25seSkgcmV0dXJuICdjcWEtcHgtWzhweF0nO1xuICAgICAgICByZXR1cm4gJ2NxYS1weC1bOHB4XSc7XG4gICAgICBcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgaWYgKGhhc1RleHRBbmRJY29uU3RhcnQpIHJldHVybiAnY3FhLXByLVsxNnB4XSBjcWEtcGwtWzE2cHhdJztcbiAgICAgICAgaWYgKGhhc1RleHRBbmRJY29uRW5kKSByZXR1cm4gJ2NxYS1wbC1bMTZweF0gY3FhLXByLVsxNnB4XSc7XG4gICAgICAgIGlmIChoYXNUZXh0T25seSkgcmV0dXJuICdjcWEtcHgtWzE2cHhdJztcbiAgICAgICAgaWYgKGhhc0ljb25Pbmx5KSByZXR1cm4gJ2NxYS1weC1bMTZweF0nO1xuICAgICAgICByZXR1cm4gJ2NxYS1weC1bMTZweF0nO1xuICAgICAgXG4gICAgICBjYXNlICdsZyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoaGFzVGV4dEFuZEljb25TdGFydCkgcmV0dXJuICdjcWEtcHItWzI0cHhdIGNxYS1wbC1bMTZweF0nO1xuICAgICAgICBpZiAoaGFzVGV4dEFuZEljb25FbmQpIHJldHVybiAnY3FhLXBsLVsyNHB4XSBjcWEtcHItWzE2cHhdJztcbiAgICAgICAgaWYgKGhhc1RleHRPbmx5KSByZXR1cm4gJ2NxYS1weC1bMjRweF0nO1xuICAgICAgICBpZiAoaGFzSWNvbk9ubHkpIHJldHVybiAnY3FhLXB4LVsxMnB4XSc7XG4gICAgICAgIHJldHVybiAnY3FhLXB4LVsyNHB4XSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGljb25DbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmJ0blNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICchY3FhLXctWzEwcHhdICFjcWEtaC1bMTBweF0gIWNxYS10ZXh0LVsxMHB4XSc7XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiAnIWNxYS13LVsxNnB4XSAhY3FhLWgtWzE2cHhdICFjcWEtdGV4dC1bMTZweF0nO1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICchY3FhLXctWzE4cHhdICFjcWEtaC1bMThweF0gIWNxYS10ZXh0LVsxOHB4XSc7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8YnV0dG9uXG4gICAgW3N0eWxlXT1cImJ1dHRvblN0eWxlc1wiXG4gICAgW21hdFRvb2x0aXBdPVwidG9vbHRpcCB8fCAnJ1wiXG4gICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhdG9vbHRpcFwiXG4gICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgIHBhZGRpbmdDbGFzc2VzLFxuICAgICAgYnV0dG9uQ2xhc3NlcyxcbiAgICAgIHRleHRDbGFzc1xuICAgIF1cIlxuICAgIFt0eXBlXT1cInR5cGVcIlxuICAgIFtkaXNhYmxlZF09XCJpbnRlcmFjdGlvbkxvY2tlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpbnRlcmFjdGlvbkxvY2tlZFwiXG4gICAgW2F0dHIuYXJpYS1idXN5XT1cImxvYWRpbmdcIlxuICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICA+XG5cbiAgICA8bWF0LXNwaW5uZXJcbiAgICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICBbZGlhbWV0ZXJdPVwic3Bpbm5lckRpYW1ldGVyXCJcbiAgICAgIHN0cm9rZVdpZHRoPVwiMlwiXG4gICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICBjbGFzcz1cImNxYS1pbmxpbmUtYmxvY2sgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW1yLTEuNVwiXG4gICAgPjwvbWF0LXNwaW5uZXI+XG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhbG9hZGluZyAmJiBpY29uICYmIGljb25Qb3NpdGlvbiA9PT0gJ3N0YXJ0J1wiIFtuZ0NsYXNzXT1cImljb25DbGFzc2VzXCIgW3N0eWxlLmNvbG9yXT1cImljb25Db2xvclwiPlxuICAgICAge3sgaWNvbiB9fVxuICAgIDwvbWF0LWljb24+XG5cbiAgICA8IS0tIER5bmFtaWMgdGV4dCBzdXBwb3J0IC0tPlxuICAgIDxzcGFuICpuZ0lmPVwidGV4dFwiPnt7dGV4dH19PC9zcGFuPlxuXG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhdGV4dFwiPjwvbmctY29udGVudD5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFsb2FkaW5nICYmIGljb24gJiYgaWNvblBvc2l0aW9uID09PSAnZW5kJ1wiIFtuZ0NsYXNzXT1cImljb25DbGFzc2VzXCIgW3N0eWxlLmNvbG9yXT1cImljb25Db2xvclwiPlxuICAgICAge3sgaWNvbiB9fVxuICAgIDwvbWF0LWljb24+XG5cbiAgPC9idXR0b24+XG48L2Rpdj4iXX0=
@@ -64,7 +64,7 @@ export class ChangeHistoryComponent {
64
64
  }
65
65
  }
66
66
  ChangeHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChangeHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
- ChangeHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChangeHistoryComponent, selector: "cqa-change-history", inputs: { items: "items", title: "title" }, outputs: { viewDetails: "viewDetails", revert: "revert" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"ch-wrapper\" role=\"region\" [attr.aria-label]=\"title\">\n\n <!-- Header -->\n <div class=\"ch-header\">\n <span class=\"ch-header-icon\" aria-hidden=\"true\">\n <mat-icon>history</mat-icon>\n </span>\n <div>\n <h2 class=\"ch-title\">{{ title }}</h2>\n <p class=\"ch-subtitle\">{{ items.length }} events recorded</p>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"ch-empty\" *ngIf=\"!items.length\">\n <mat-icon class=\"ch-empty-icon\" aria-hidden=\"true\">history</mat-icon>\n <p>No history events recorded yet.</p>\n </div>\n\n <!-- Timeline -->\n <ol class=\"ch-timeline\" *ngIf=\"items.length\" aria-label=\"Change history events\">\n <li\n class=\"ch-event\"\n *ngFor=\"let item of items; last as isLast; trackBy: trackById\"\n [class.ch-event--last]=\"isLast\"\n >\n <!-- Track: dot + vertical line -->\n <div class=\"ch-track\">\n <span class=\"ch-dot\" aria-hidden=\"true\"></span>\n </div>\n\n <!-- Card -->\n <div class=\"ch-card\">\n\n <!-- Event icon -->\n <span class=\"ch-event-icon\" aria-hidden=\"true\">\n <mat-icon>{{ getEventIcon(item.eventType) }}</mat-icon>\n </span>\n\n <!-- Body -->\n <div class=\"ch-event-body\">\n <span class=\"ch-event-title\">{{ item.title }}</span>\n\n <div class=\"ch-event-meta\">\n <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">person</mat-icon>\n <span class=\"ch-meta-actor\">{{ item.actor }}</span>\n <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">schedule</mat-icon>\n <span class=\"ch-meta-timestamp\">{{ item.timestamp }}</span>\n </div>\n\n <div class=\"ch-badges\" *ngIf=\"item.badges?.length\">\n <span\n *ngFor=\"let badge of item.badges\"\n class=\"ch-badge\"\n [ngClass]=\"'ch-badge--' + badge.variant\"\n >{{ badge.label }}</span>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"ch-actions\">\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"visibility\"\n [text]=\"'View Details'\"\n [attr.aria-label]=\"'View details for ' + item.title\"\n (clicked)=\"onViewDetails(item.id)\"\n ></cqa-button>\n\n <cqa-button\n *ngIf=\"item.canRevert\"\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"history\"\n [text]=\"'Revert'\"\n [attr.aria-label]=\"'Revert ' + item.title\"\n (clicked)=\"onRevert(item.id)\"\n ></cqa-button>\n </div>\n\n </div>\n </li>\n </ol>\n\n</div>\n", styles: [":host{display:block;width:100%}.ch-wrapper{background:#ffffff;border:1px solid #e8eaf0;border-radius:8px;padding:24px;box-shadow:0 1px 4px #0000000f;width:100%;box-sizing:border-box}.ch-header{display:flex;align-items:flex-start;gap:10px;margin-bottom:24px}.ch-header-icon{display:inline-flex;align-items:center;color:#6b7280;flex-shrink:0}.ch-header-icon mat-icon{font-size:20px;width:20px;height:20px}.ch-title{font-size:15px;font-weight:600;color:#1a1d23;margin:0 0 2px;line-height:1.4}.ch-subtitle{font-size:13px;font-weight:400;color:#6b7280;margin:0}.ch-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:12px}.ch-empty p{font-size:14px;color:#9ca3af;margin:0}.ch-empty-icon{font-size:32px;width:32px;height:32px;color:#d1d5db}.ch-timeline{list-style:none;margin:0;padding:0}.ch-event{display:flex;align-items:flex-start}.ch-track{width:24px;display:flex;flex-direction:column;align-items:center;flex-shrink:0}.ch-track:after{content:\"\";width:2px;flex:1;background-color:#e5e7eb;margin-top:4px}.ch-event--last .ch-track:after{display:none}.ch-dot{display:block;width:10px;height:10px;border-radius:50%;background:#ffffff;border:2px solid #d1d5db;margin-top:4px;z-index:1;flex-shrink:0}.ch-card{display:flex;align-items:flex-start;gap:12px;padding:0 0 28px 12px;width:100%}.ch-event-icon{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;background:#f3f4f6;flex-shrink:0}.ch-event-icon mat-icon{font-size:16px;width:16px;height:16px;color:#6b7280}.ch-event-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ch-event-title{font-size:14px;font-weight:600;color:#1a1d23}.ch-event-meta{display:flex;align-items:center;gap:6px;font-size:12px;color:#6b7280}.ch-meta-icon{font-size:12px;width:12px;height:12px;color:#9ca3af}.ch-meta-actor,.ch-meta-timestamp{font-size:12px;color:#6b7280}.ch-badges{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.ch-badge{font-size:12px;font-weight:500;padding:2px 8px;border-radius:4px}.ch-badge--added{background:#dcfce7;color:#15803d}.ch-badge--modified{background:#fef9c3;color:#854d0e}.ch-badge--removed{background:#fee2e2;color:#b91c1c}.ch-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}\n"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
67
+ ChangeHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChangeHistoryComponent, selector: "cqa-change-history", inputs: { items: "items", title: "title" }, outputs: { viewDetails: "viewDetails", revert: "revert" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"ch-wrapper\" role=\"region\" [attr.aria-label]=\"title\">\n\n <!-- Header -->\n <div class=\"ch-header\">\n <span class=\"ch-header-icon\" aria-hidden=\"true\">\n <mat-icon>history</mat-icon>\n </span>\n <div>\n <h2 class=\"ch-title\">{{ title }}</h2>\n <p class=\"ch-subtitle\">{{ items.length }} events recorded</p>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"ch-empty\" *ngIf=\"!items.length\">\n <mat-icon class=\"ch-empty-icon\" aria-hidden=\"true\">history</mat-icon>\n <p>No history events recorded yet.</p>\n </div>\n\n <!-- Timeline -->\n <ol class=\"ch-timeline\" *ngIf=\"items.length\" aria-label=\"Change history events\">\n <li\n class=\"ch-event\"\n *ngFor=\"let item of items; last as isLast; trackBy: trackById\"\n [class.ch-event--last]=\"isLast\"\n >\n <!-- Track: dot + vertical line -->\n <div class=\"ch-track\">\n <span class=\"ch-dot\" aria-hidden=\"true\"></span>\n </div>\n\n <!-- Card -->\n <div class=\"ch-card\">\n\n <!-- Event icon -->\n <span class=\"ch-event-icon\" aria-hidden=\"true\">\n <mat-icon>{{ getEventIcon(item.eventType) }}</mat-icon>\n </span>\n\n <!-- Body -->\n <div class=\"ch-event-body\">\n <span class=\"ch-event-title\">{{ item.title }}</span>\n\n <div class=\"ch-event-meta\">\n <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">person</mat-icon>\n <span class=\"ch-meta-actor\">{{ item.actor }}</span>\n <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">schedule</mat-icon>\n <span class=\"ch-meta-timestamp\">{{ item.timestamp }}</span>\n </div>\n\n <div class=\"ch-badges\" *ngIf=\"item.badges?.length\">\n <span\n *ngFor=\"let badge of item.badges\"\n class=\"ch-badge\"\n [ngClass]=\"'ch-badge--' + badge.variant\"\n >{{ badge.label }}</span>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"ch-actions\">\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"visibility\"\n [text]=\"'View Details'\"\n [attr.aria-label]=\"'View details for ' + item.title\"\n (clicked)=\"onViewDetails(item.id)\"\n ></cqa-button>\n\n <cqa-button\n *ngIf=\"item.canRevert\"\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"history\"\n [text]=\"'Revert'\"\n [attr.aria-label]=\"'Revert ' + item.title\"\n (clicked)=\"onRevert(item.id)\"\n ></cqa-button>\n </div>\n\n </div>\n </li>\n </ol>\n\n</div>\n", styles: [":host{display:block;width:100%}.ch-wrapper{background:#ffffff;border:1px solid #e8eaf0;border-radius:8px;padding:24px;box-shadow:0 1px 4px #0000000f;width:100%;box-sizing:border-box}.ch-header{display:flex;align-items:flex-start;gap:10px;margin-bottom:24px}.ch-header-icon{display:inline-flex;align-items:center;color:#6b7280;flex-shrink:0}.ch-header-icon mat-icon{font-size:20px;width:20px;height:20px}.ch-title{font-size:15px;font-weight:600;color:#1a1d23;margin:0 0 2px;line-height:1.4}.ch-subtitle{font-size:13px;font-weight:400;color:#6b7280;margin:0}.ch-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:12px}.ch-empty p{font-size:14px;color:#9ca3af;margin:0}.ch-empty-icon{font-size:32px;width:32px;height:32px;color:#d1d5db}.ch-timeline{list-style:none;margin:0;padding:0}.ch-event{display:flex;align-items:flex-start}.ch-track{width:24px;display:flex;flex-direction:column;align-items:center;flex-shrink:0}.ch-track:after{content:\"\";width:2px;flex:1;background-color:#e5e7eb;margin-top:4px}.ch-event--last .ch-track:after{display:none}.ch-dot{display:block;width:10px;height:10px;border-radius:50%;background:#ffffff;border:2px solid #d1d5db;margin-top:4px;z-index:1;flex-shrink:0}.ch-card{display:flex;align-items:flex-start;gap:12px;padding:0 0 28px 12px;width:100%}.ch-event-icon{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;background:#f3f4f6;flex-shrink:0}.ch-event-icon mat-icon{font-size:16px;width:16px;height:16px;color:#6b7280}.ch-event-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ch-event-title{font-size:14px;font-weight:600;color:#1a1d23}.ch-event-meta{display:flex;align-items:center;gap:6px;font-size:12px;color:#6b7280}.ch-meta-icon{font-size:12px;width:12px;height:12px;color:#9ca3af}.ch-meta-actor,.ch-meta-timestamp{font-size:12px;color:#6b7280}.ch-badges{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.ch-badge{font-size:12px;font-weight:500;padding:2px 8px;border-radius:4px}.ch-badge--added{background:#dcfce7;color:#15803d}.ch-badge--modified{background:#fef9c3;color:#854d0e}.ch-badge--removed{background:#fee2e2;color:#b91c1c}.ch-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}\n"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
68
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChangeHistoryComponent, decorators: [{
69
69
  type: Component,
70
70
  args: [{ selector: 'cqa-change-history', styles: [CHANGE_HISTORY_STYLES], host: { class: 'cqa-ui-root' }, template: "<div class=\"ch-wrapper\" role=\"region\" [attr.aria-label]=\"title\">\n\n <!-- Header -->\n <div class=\"ch-header\">\n <span class=\"ch-header-icon\" aria-hidden=\"true\">\n <mat-icon>history</mat-icon>\n </span>\n <div>\n <h2 class=\"ch-title\">{{ title }}</h2>\n <p class=\"ch-subtitle\">{{ items.length }} events recorded</p>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"ch-empty\" *ngIf=\"!items.length\">\n <mat-icon class=\"ch-empty-icon\" aria-hidden=\"true\">history</mat-icon>\n <p>No history events recorded yet.</p>\n </div>\n\n <!-- Timeline -->\n <ol class=\"ch-timeline\" *ngIf=\"items.length\" aria-label=\"Change history events\">\n <li\n class=\"ch-event\"\n *ngFor=\"let item of items; last as isLast; trackBy: trackById\"\n [class.ch-event--last]=\"isLast\"\n >\n <!-- Track: dot + vertical line -->\n <div class=\"ch-track\">\n <span class=\"ch-dot\" aria-hidden=\"true\"></span>\n </div>\n\n <!-- Card -->\n <div class=\"ch-card\">\n\n <!-- Event icon -->\n <span class=\"ch-event-icon\" aria-hidden=\"true\">\n <mat-icon>{{ getEventIcon(item.eventType) }}</mat-icon>\n </span>\n\n <!-- Body -->\n <div class=\"ch-event-body\">\n <span class=\"ch-event-title\">{{ item.title }}</span>\n\n <div class=\"ch-event-meta\">\n <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">person</mat-icon>\n <span class=\"ch-meta-actor\">{{ item.actor }}</span>\n <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">schedule</mat-icon>\n <span class=\"ch-meta-timestamp\">{{ item.timestamp }}</span>\n </div>\n\n <div class=\"ch-badges\" *ngIf=\"item.badges?.length\">\n <span\n *ngFor=\"let badge of item.badges\"\n class=\"ch-badge\"\n [ngClass]=\"'ch-badge--' + badge.variant\"\n >{{ badge.label }}</span>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"ch-actions\">\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"visibility\"\n [text]=\"'View Details'\"\n [attr.aria-label]=\"'View details for ' + item.title\"\n (clicked)=\"onViewDetails(item.id)\"\n ></cqa-button>\n\n <cqa-button\n *ngIf=\"item.canRevert\"\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"history\"\n [text]=\"'Revert'\"\n [attr.aria-label]=\"'Revert ' + item.title\"\n (clicked)=\"onRevert(item.id)\"\n ></cqa-button>\n </div>\n\n </div>\n </li>\n </ol>\n\n</div>\n" }]
@@ -49,7 +49,7 @@ export class ColumnVisibilityComponent {
49
49
  }
50
50
  }
51
51
  ColumnVisibilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ColumnVisibilityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
- ColumnVisibilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ColumnVisibilityComponent, selector: "cqa-column-visibility", inputs: { isStepGroup: "isStepGroup", columns: "columns", columnVisibility: "columnVisibility", selectedAutoRefreshInterval: "selectedAutoRefreshInterval" }, outputs: { columnVisibilityChange: "columnVisibilityChange", autoRefreshChange: "autoRefreshChange" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <cqa-button\n variant=\"grey-solid\"\n icon=\"settings\"\n [matMenuTriggerFor]=\"settingsMenu\"\n aria-label=\"Settings\"\n [tooltip]=\"'Column settings'\"\n tooltipPosition=\"below\">\n </cqa-button>\n\n <mat-menu #settingsMenu=\"matMenu\" class=\"cqa-table-settings-menu\">\n <div class=\"settings-menu-content cqa-p-[17px]\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings-section cqa-mb-3\">\n <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Show Columns</h4>\n <div class=\"settings-options cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n <mat-checkbox [checked]=\"areAllColumnsSelected\" (change)=\"toggleAllColumns($event.checked)\"\n class=\"select-all-checkbox\">\n {{ areAllColumnsSelected ? 'Unselect All' : 'Select All' }}\n </mat-checkbox>\n <!-- Dynamic column list -->\n <ng-container *ngIf=\"columns?.length\">\n <mat-checkbox *ngFor=\"let col of columns\" [(ngModel)]=\"columnVisibility[col.id]\"\n (change)=\"saveColumnPreferences()\">\n {{ col.label }}\n </mat-checkbox>\n </ng-container>\n </div>\n </div>\n\n <div class=\"settings-section\">\n <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Auto refresh every</h4>\n <div class=\"refresh-options\">\n <mat-radio-group [(ngModel)]=\"selectedAutoRefreshInterval\" (change)=\"onAutoRefreshChange()\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n <label><mat-radio-button [value]=\"10000\">10 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"20000\">20 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"30000\">30 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"0\">Off</mat-radio-button></label>\n </mat-radio-group>\n </div>\n </div>\n </div>\n </mat-menu>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i4.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }], directives: [{ type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
52
+ ColumnVisibilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ColumnVisibilityComponent, selector: "cqa-column-visibility", inputs: { isStepGroup: "isStepGroup", columns: "columns", columnVisibility: "columnVisibility", selectedAutoRefreshInterval: "selectedAutoRefreshInterval" }, outputs: { columnVisibilityChange: "columnVisibilityChange", autoRefreshChange: "autoRefreshChange" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <cqa-button\n variant=\"grey-solid\"\n icon=\"settings\"\n [matMenuTriggerFor]=\"settingsMenu\"\n aria-label=\"Settings\"\n [tooltip]=\"'Column settings'\"\n tooltipPosition=\"below\">\n </cqa-button>\n\n <mat-menu #settingsMenu=\"matMenu\" class=\"cqa-table-settings-menu\">\n <div class=\"settings-menu-content cqa-p-[17px]\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings-section cqa-mb-3\">\n <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Show Columns</h4>\n <div class=\"settings-options cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n <mat-checkbox [checked]=\"areAllColumnsSelected\" (change)=\"toggleAllColumns($event.checked)\"\n class=\"select-all-checkbox\">\n {{ areAllColumnsSelected ? 'Unselect All' : 'Select All' }}\n </mat-checkbox>\n <!-- Dynamic column list -->\n <ng-container *ngIf=\"columns?.length\">\n <mat-checkbox *ngFor=\"let col of columns\" [(ngModel)]=\"columnVisibility[col.id]\"\n (change)=\"saveColumnPreferences()\">\n {{ col.label }}\n </mat-checkbox>\n </ng-container>\n </div>\n </div>\n\n <div class=\"settings-section\">\n <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Auto refresh every</h4>\n <div class=\"refresh-options\">\n <mat-radio-group [(ngModel)]=\"selectedAutoRefreshInterval\" (change)=\"onAutoRefreshChange()\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n <label><mat-radio-button [value]=\"10000\">10 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"20000\">20 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"30000\">30 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"0\">Off</mat-radio-button></label>\n </mat-radio-group>\n </div>\n </div>\n </div>\n </mat-menu>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i4.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }], directives: [{ type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ColumnVisibilityComponent, decorators: [{
54
54
  type: Component,
55
55
  args: [{ selector: 'cqa-column-visibility', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <cqa-button\n variant=\"grey-solid\"\n icon=\"settings\"\n [matMenuTriggerFor]=\"settingsMenu\"\n aria-label=\"Settings\"\n [tooltip]=\"'Column settings'\"\n tooltipPosition=\"below\">\n </cqa-button>\n\n <mat-menu #settingsMenu=\"matMenu\" class=\"cqa-table-settings-menu\">\n <div class=\"settings-menu-content cqa-p-[17px]\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings-section cqa-mb-3\">\n <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Show Columns</h4>\n <div class=\"settings-options cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n <mat-checkbox [checked]=\"areAllColumnsSelected\" (change)=\"toggleAllColumns($event.checked)\"\n class=\"select-all-checkbox\">\n {{ areAllColumnsSelected ? 'Unselect All' : 'Select All' }}\n </mat-checkbox>\n <!-- Dynamic column list -->\n <ng-container *ngIf=\"columns?.length\">\n <mat-checkbox *ngFor=\"let col of columns\" [(ngModel)]=\"columnVisibility[col.id]\"\n (change)=\"saveColumnPreferences()\">\n {{ col.label }}\n </mat-checkbox>\n </ng-container>\n </div>\n </div>\n\n <div class=\"settings-section\">\n <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Auto refresh every</h4>\n <div class=\"refresh-options\">\n <mat-radio-group [(ngModel)]=\"selectedAutoRefreshInterval\" (change)=\"onAutoRefreshChange()\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n <label><mat-radio-button [value]=\"10000\">10 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"20000\">20 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"30000\">30 Seconds</mat-radio-button></label>\n <label><mat-radio-button [value]=\"0\">Off</mat-radio-button></label>\n </mat-radio-group>\n </div>\n </div>\n </div>\n </mat-menu>", styles: [] }]