@cqa-lib/cqa-ui 1.1.548-gamma.19 → 1.1.548-gamma.21

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 (39) hide show
  1. package/esm2020/lib/custom-input/custom-input.component.mjs +20 -4
  2. package/esm2020/lib/dialogs/name-prompt-modal.component.mjs +1 -1
  3. package/esm2020/lib/export-code-modal/export-code-modal.component.mjs +1 -1
  4. package/esm2020/lib/manage-columns-dialog/manage-columns-dialog.component.mjs +1 -1
  5. package/esm2020/lib/new-db-config-dialog/new-db-config-dialog.component.mjs +1 -1
  6. package/esm2020/lib/new-environment-dialog/new-environment-dialog.component.mjs +1 -1
  7. package/esm2020/lib/new-environment-variable-dialog/new-environment-variable-dialog.component.mjs +5 -13
  8. package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.component.mjs +1 -1
  9. package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.mjs +180 -16
  10. package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.mjs +1 -1
  11. package/esm2020/lib/questionnaire-list/questionnaire-list.component.mjs +1 -1
  12. package/esm2020/lib/step-builder/advanced-variables-form/advanced-variables-form.component.mjs +1 -1
  13. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +1 -1
  14. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +1 -1
  15. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
  16. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +1 -1
  17. package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +1 -1
  18. package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +1 -1
  19. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +1 -1
  20. package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +1 -1
  21. package/esm2020/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.mjs +1 -1
  22. package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +1 -1
  23. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +1 -1
  24. package/esm2020/lib/test-case-details/create-step-group/create-step-group.component.mjs +1 -1
  25. package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.component.mjs +3 -3
  26. package/esm2020/lib/test-case-details/element-popup/element-form/element-form.component.mjs +1 -1
  27. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer.component.mjs +1 -1
  28. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +1 -1
  29. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +1 -1
  30. package/esm2020/lib/viewport-selector/viewport-selector.component.mjs +1 -1
  31. package/fesm2015/cqa-lib-cqa-ui.mjs +223 -54
  32. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  33. package/fesm2020/cqa-lib-cqa-ui.mjs +222 -54
  34. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  35. package/lib/custom-input/custom-input.component.d.ts +6 -1
  36. package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.d.ts +39 -5
  37. package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.d.ts +18 -0
  38. package/package.json +1 -1
  39. package/styles.css +1 -1
@@ -34,9 +34,6 @@ export class NewEnvironmentVariableDialogComponent {
34
34
  if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {
35
35
  this.value = 'false';
36
36
  }
37
- if (this.mode === 'edit' && this.type === 'Password') {
38
- this.value = '';
39
- }
40
37
  }
41
38
  get title() {
42
39
  return this.mode === 'edit' ? 'Edit variable' : 'New variable';
@@ -51,9 +48,6 @@ export class NewEnvironmentVariableDialogComponent {
51
48
  get isPassword() { return this.type === 'Password'; }
52
49
  get isNumber() { return this.type === 'Number'; }
53
50
  get valuePlaceholder() {
54
- if (this.isPassword && this.mode === 'edit') {
55
- return '•••••• (leave blank to keep existing)';
56
- }
57
51
  if (this.readWriteMode === 'RW') {
58
52
  return 'Leave blank to populate during test execution';
59
53
  }
@@ -109,11 +103,9 @@ export class NewEnvironmentVariableDialogComponent {
109
103
  if (next === 'Number' && this.value && !this.isValidNumber(this.value)) {
110
104
  this.value = '';
111
105
  }
112
- if (next === 'Password') {
106
+ if (next === 'Password' && prev !== 'Password') {
113
107
  this.passwordTouched = false;
114
- if (this.mode === 'edit') {
115
- this.value = '';
116
- }
108
+ this.value = '';
117
109
  }
118
110
  this.valueError = null;
119
111
  this.cdr.markForCheck();
@@ -198,10 +190,10 @@ export class NewEnvironmentVariableDialogComponent {
198
190
  }
199
191
  }
200
192
  NewEnvironmentVariableDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentVariableDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
201
- NewEnvironmentVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewEnvironmentVariableDialogComponent, selector: "cqa-new-environment-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "displayOnly", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
193
+ NewEnvironmentVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewEnvironmentVariableDialogComponent, selector: "cqa-new-environment-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n [showPasswordToggle]=\"isPassword\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "displayOnly", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
202
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentVariableDialogComponent, decorators: [{
203
195
  type: Component,
204
- args: [{ selector: 'cqa-new-environment-variable-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n" }]
196
+ args: [{ selector: 'cqa-new-environment-variable-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n [showPasswordToggle]=\"isPassword\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n" }]
205
197
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
206
198
  type: Input
207
199
  }], initialValue: [{
@@ -211,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
211
203
  }], envName: [{
212
204
  type: Input
213
205
  }] } });
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWFyRyxNQUFNLE9BQU8scUNBQXFDO0lBc0JoRCxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXJCMUMsU0FBSSxHQUFzQixRQUFRLENBQUM7UUFFbkMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix3QkFBbUIsR0FBa0Q7WUFDNUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDekMsQ0FBQztRQUVGLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixTQUFJLEdBQXNCLFFBQVEsQ0FBQztRQUNuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsa0JBQWEsR0FBNEIsSUFBSSxDQUFDO1FBQzlDLG9CQUFlLEdBQUcsS0FB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M0Q7UUFDRCxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFXO1FBQy9CLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7U0FBRTtRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDOztrSUF6TVUscUNBQXFDO3NIQUFyQyxxQ0FBcUMsNlFDYmxELDZpRkFxRUE7MkZEeERhLHFDQUFxQztrQkFOakQsU0FBUzsrQkFDRSxxQ0FBcUMsbUJBRTlCLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRTt3R0FHekQsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRW52VmFyaWFibGVEaWFsb2dWYWx1ZSxcbiAgRW52VmFyaWFibGVVSVBlcm1pc3Npb24sXG4gIEVudlZhcmlhYmxlVUlUeXBlLFxufSBmcm9tICcuL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW5ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnLCBzdHlsZTogJ2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTsnIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ld0Vudmlyb25tZW50VmFyaWFibGVEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtb2RlOiAnY3JlYXRlJyB8ICdlZGl0JyA9ICdjcmVhdGUnO1xuICBASW5wdXQoKSBpbml0aWFsVmFsdWU/OiBQYXJ0aWFsPEVudlZhcmlhYmxlRGlhbG9nVmFsdWU+O1xuICBASW5wdXQoKSBleGlzdGluZ05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBlbnZOYW1lOiBzdHJpbmcgPSAnJztcblxuICByZWFkb25seSB0eXBlRHJvcGRvd25PcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBFbnZWYXJpYWJsZVVJVHlwZSB9W10gPSBbXG4gICAgeyBsYWJlbDogJ1N0cmluZycsIHZhbHVlOiAnU3RyaW5nJyB9LFxuICAgIHsgbGFiZWw6ICdOdW1iZXInLCB2YWx1ZTogJ051bWJlcicgfSxcbiAgICB7IGxhYmVsOiAnQm9vbGVhbicsIHZhbHVlOiAnQm9vbGVhbicgfSxcbiAgICB7IGxhYmVsOiAnUGFzc3dvcmQnLCB2YWx1ZTogJ1Bhc3N3b3JkJyB9LFxuICBdO1xuXG4gIG5hbWUgPSAnJztcbiAgdHlwZTogRW52VmFyaWFibGVVSVR5cGUgPSAnU3RyaW5nJztcbiAgdmFsdWUgPSAnJztcbiAgcmVhZFdyaXRlTW9kZTogRW52VmFyaWFibGVVSVBlcm1pc3Npb24gPSAnUlcnO1xuICBwYXNzd29yZFRvdWNoZWQgPSBmYWxzZTtcblxuICBuYW1lRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB2YWx1ZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLmluaXRpYWxWYWx1ZS5uYW1lID8/ICcnO1xuICAgICAgdGhpcy50eXBlID0gdGhpcy5pbml0aWFsVmFsdWUudHlwZSA/PyAnU3RyaW5nJztcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZS52YWx1ZSA/PyAnJztcbiAgICAgIHRoaXMucmVhZFdyaXRlTW9kZSA9IHRoaXMuaW5pdGlhbFZhbHVlLnJlYWRXcml0ZU1vZGUgPz8gJ1JXJztcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ0Jvb2xlYW4nICYmIHRoaXMudmFsdWUgIT09ICd0cnVlJyAmJiB0aGlzLnZhbHVlICE9PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJ2ZhbHNlJztcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXQnICYmIHRoaXMudHlwZSA9PT0gJ1Bhc3N3b3JkJykge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0JyA/ICdFZGl0IHZhcmlhYmxlJyA6ICdOZXcgdmFyaWFibGUnO1xuICB9XG5cbiAgZ2V0IHN1YnRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW52TmFtZSA/IGBTY29wZWQgdG8gdGhlICR7dGhpcy5lbnZOYW1lfSBlbnZpcm9ubWVudC5gIDogJ1Njb3BlZCB0byB0aGlzIGVudmlyb25tZW50Lic7XG4gIH1cblxuICBnZXQgcHJpbWFyeUJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ1NhdmUgY2hhbmdlcycgOiAnQWRkIHZhcmlhYmxlJztcbiAgfVxuXG4gIGdldCBpc0Jvb2xlYW4oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT09ICdCb29sZWFuJzsgfVxuICBnZXQgaXNQYXNzd29yZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ1Bhc3N3b3JkJzsgfVxuICBnZXQgaXNOdW1iZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT09ICdOdW1iZXInOyB9XG5cbiAgZ2V0IHZhbHVlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc1Bhc3N3b3JkICYmIHRoaXMubW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICByZXR1cm4gJ+KAouKAouKAouKAouKAouKAoiAobGVhdmUgYmxhbmsgdG8ga2VlcCBleGlzdGluZyknO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWFkV3JpdGVNb2RlID09PSAnUlcnKSB7XG4gICAgICByZXR1cm4gJ0xlYXZlIGJsYW5rIHRvIHBvcHVsYXRlIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbic7XG4gICAgfVxuICAgIHJldHVybiAnRW50ZXIgYSB2YWx1ZSc7XG4gIH1cblxuICBnZXQgbmFtZUhlbHBlclRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5uYW1lRXJyb3IpIHsgcmV0dXJuIHRoaXMubmFtZUVycm9yOyB9XG4gICAgcmV0dXJuICdWYXJpYWJsZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGVudmlyb25tZW50Lic7XG4gIH1cblxuICBnZXQgcGVybWlzc2lvbkhlbHBlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkV3JpdGVNb2RlID09PSAnUk8nXG4gICAgICA/ICdSZWFkIG9ubHkg4oCUIHRlc3Qgc3RlcHMgY2FuIHJlYWQgYnV0IG5vdCBvdmVyd3JpdGUuJ1xuICAgICAgOiAnUmVhZC93cml0ZSDigJQgdGVzdCBjYXNlcyBjYW4gY2FwdHVyZSB2YWx1ZXMgaGVyZS4nO1xuICB9XG5cbiAgZ2V0IG5hbWVFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLm5hbWVFcnJvciA/IFt0aGlzLm5hbWVFcnJvcl0gOiBbXTsgfVxuICBnZXQgdmFsdWVFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLnZhbHVlRXJyb3IgPyBbdGhpcy52YWx1ZUVycm9yXSA6IFtdOyB9XG5cbiAgZ2V0IGJvb2xlYW5Ecm9wZG93bk9wdGlvbnMoKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgbGFiZWw6ICd0cnVlJywgdmFsdWU6ICd0cnVlJyB9LFxuICAgICAgeyBsYWJlbDogJ2ZhbHNlJywgdmFsdWU6ICdmYWxzZScgfSxcbiAgICBdO1xuICB9XG5cbiAgZ2V0IGlzVmFsdWVSZXF1aXJlZFZpc3VhbGx5KCk6IGJvb2xlYW4ge1xuICAgIC8vIEJvb2xlYW4gaXMgc2VsZWN0ZWQgdmlhIGRyb3Bkb3duIChhbHdheXMgaGFzIGEgdmFsdWUpOyBwYXNzd29yZCBlZGl0LW1vZGVcbiAgICAvLyBhbGxvd3MgYmxhbmsgdG8gbWVhbiBcImtlZXAgZXhpc3Rpbmcgc2VjcmV0XCIg4oCUIGJvdGggcmVuZGVyIHdpdGhvdXQgdGhlIGFzdGVyaXNrLlxuICAgIGlmICh0aGlzLmlzQm9vbGVhbikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodGhpcy5pc1Bhc3N3b3JkICYmIHRoaXMubW9kZSA9PT0gJ2VkaXQnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25OYW1lQ2hhbmdlKG5leHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubmFtZSA9IG5leHQ7XG4gICAgdGhpcy5uYW1lRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25UeXBlQ2hhbmdlKG5leHQ6IEVudlZhcmlhYmxlVUlUeXBlKTogdm9pZCB7XG4gICAgaWYgKCFuZXh0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHByZXYgPSB0aGlzLnR5cGU7XG4gICAgdGhpcy50eXBlID0gbmV4dDtcbiAgICBpZiAocHJldiA9PT0gJ0Jvb2xlYW4nICYmIG5leHQgIT09ICdCb29sZWFuJykge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gJ0Jvb2xlYW4nICYmIHRoaXMudmFsdWUgIT09ICd0cnVlJyAmJiB0aGlzLnZhbHVlICE9PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJ2ZhbHNlJztcbiAgICB9XG4gICAgaWYgKG5leHQgPT09ICdOdW1iZXInICYmIHRoaXMudmFsdWUgJiYgIXRoaXMuaXNWYWxpZE51bWJlcih0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gJ1Bhc3N3b3JkJykge1xuICAgICAgdGhpcy5wYXNzd29yZFRvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0JykgeyB0aGlzLnZhbHVlID0gJyc7IH1cbiAgICB9XG4gICAgdGhpcy52YWx1ZUVycm9yID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUGVybWlzc2lvbkNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWRXcml0ZU1vZGUgPSBuZXh0ID09PSAnUk8nID8gJ1JPJyA6ICdSVyc7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblZhbHVlQ2hhbmdlKG5leHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXh0O1xuICAgIGlmICh0aGlzLmlzUGFzc3dvcmQpIHsgdGhpcy5wYXNzd29yZFRvdWNoZWQgPSB0cnVlOyB9XG4gICAgdGhpcy52YWx1ZUVycm9yID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQm9vbGVhblZhbHVlQ2hhbmdlKG5leHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXh0O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvc3QgcmVhZHMgdmlhIERpYWxvZ1JlZi5nZXRDb21wb25lbnRJbnN0YW5jZSgpLiBSZXR1cm5zIG51bGwgb24gdmFsaWRhdGlvblxuICAgKiBmYWlsdXJlIOKAlCBob3N0IGtlZXBzIHRoZSBkaWFsb2cgb3BlbiBhbmQgc3VyZmFjZXMgdGhlIGlubGluZSBlcnJvciBhbHJlYWR5XG4gICAqIHdyaXR0ZW4gb250byBuYW1lRXJyb3IgLyB2YWx1ZUVycm9yLlxuICAgKi9cbiAgZ2V0VmFsdWUoKTogRW52VmFyaWFibGVEaWFsb2dWYWx1ZSB8IG51bGwge1xuICAgIGNvbnN0IHRyaW1tZWROYW1lID0gdGhpcy5uYW1lLnRyaW0oKTtcblxuICAgIGlmICghdHJpbW1lZE5hbWUpIHtcbiAgICAgIHRoaXMubmFtZUVycm9yID0gJ05hbWUgaXMgcmVxdWlyZWQuJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEdXBsaWNhdGVOYW1lKHRyaW1tZWROYW1lKSkge1xuICAgICAgdGhpcy5uYW1lRXJyb3IgPSAnQSB2YXJpYWJsZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIGVudmlyb25tZW50Lic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmFtZUVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdWYWx1ZSA9ICh0aGlzLnZhbHVlID8/ICcnKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHZhbHVlSXNCbGFuayA9ICF0aGlzLmlzQm9vbGVhbiAmJiByYXdWYWx1ZS50cmltKCkgPT09ICcnO1xuICAgIGNvbnN0IGFsbG93QmxhbmtQYXNzd29yZE9uRWRpdCA9IHRoaXMuaXNQYXNzd29yZCAmJiB0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiAhdGhpcy5wYXNzd29yZFRvdWNoZWQ7XG5cbiAgICBpZiAodmFsdWVJc0JsYW5rICYmICFhbGxvd0JsYW5rUGFzc3dvcmRPbkVkaXQpIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9ICdWYWx1ZSBpcyByZXF1aXJlZC4nO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc051bWJlciAmJiByYXdWYWx1ZSAmJiAhdGhpcy5pc1ZhbGlkTnVtYmVyKHJhd1ZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZUVycm9yID0gJ1ZhbHVlIG11c3QgYmUgYSBudW1iZXIuJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZUVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYW1lRXJyb3IgfHwgdGhpcy52YWx1ZUVycm9yKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG9taXRQYXNzd29yZFZhbHVlID0gdGhpcy5pc1Bhc3N3b3JkICYmIHRoaXMubW9kZSA9PT0gJ2VkaXQnICYmICF0aGlzLnBhc3N3b3JkVG91Y2hlZDtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0cmltbWVkTmFtZSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHZhbHVlOiBvbWl0UGFzc3dvcmRWYWx1ZSA/IG51bGwgOiB0aGlzLnNlcmlhbGl6ZVZhbHVlKCksXG4gICAgICByZWFkV3JpdGVNb2RlOiB0aGlzLnJlYWRXcml0ZU1vZGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplVmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuaXNCb29sZWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gJ3RydWUnID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPz8gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzRHVwbGljYXRlTmFtZShjYW5kaWRhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gKHRoaXMuZXhpc3RpbmdOYW1lcyA/PyBbXSkubWFwKG4gPT4gKG4gPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBsb3dlcmVkID0gY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9ICh0aGlzLmluaXRpYWxWYWx1ZT8ubmFtZSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbG93ZXJlZCAhPT0gb3JpZ2luYWwgJiYgZXhpc3RpbmcuaW5jbHVkZXMobG93ZXJlZCk7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZy5pbmNsdWRlcyhsb3dlcmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZE51bWJlcihyYXc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSByYXcudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKE51bWJlcih0cmltbWVkKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS13LWZ1bGxcIj5cblxuICA8IS0tIE5hbWUgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgbGFiZWw9XCJOYW1lXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBvcmRlcl9pZFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbdmFsdWVdPVwibmFtZVwiXG4gICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgW2Vycm9yc109XCJuYW1lRXJyb3JzQXJyYXlcIlxuICAgICAgaW5wdXRJbmxpbmVTdHlsZT1cImZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uTmFtZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDxzcGFuICpuZ0lmPVwiIW5hbWVFcnJvclwiXG4gICAgICBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LWdyYXktNTAwIGNxYS1tdC0xXCI+XG4gICAgICB7eyBuYW1lSGVscGVyVGV4dCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUeXBlICsgUGVybWlzc2lvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1ncmlkIGNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbWItMS41IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMFwiPlR5cGU8L2xhYmVsPlxuICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwidHlwZURyb3Bkb3duT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInR5cGVcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVHlwZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1kcm9wZG93bi1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLW1iLTEuNSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5QZXJtaXNzaW9uPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHQtMC41XCI+XG4gICAgICAgIDxjcWEtcGVybWlzc2lvbi10b2dnbGVcbiAgICAgICAgICBbdmFsdWVdPVwicmVhZFdyaXRlTW9kZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUGVybWlzc2lvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvY3FhLXBlcm1pc3Npb24tdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LWdyYXktNTAwIGNxYS1tdC0xXCI+e3sgcGVybWlzc2lvbkhlbHBlclRleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVmFsdWUgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCb29sZWFuOyBlbHNlIG5vbkJvb2xlYW5WYWx1ZVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLW1iLTEuNSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5WYWx1ZTwvbGFiZWw+XG4gICAgICA8Y3FhLWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICBbb3B0aW9uc109XCJib29sZWFuRHJvcGRvd25PcHRpb25zXCJcbiAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQm9vbGVhblZhbHVlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWRyb3Bkb3duLWJ1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vbkJvb2xlYW5WYWx1ZT5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIGxhYmVsPVwiVmFsdWVcIlxuICAgICAgICBbdHlwZV09XCJpc1Bhc3N3b3JkID8gJ3Bhc3N3b3JkJyA6IChpc051bWJlciA/ICdudW1iZXInIDogJ3RleHQnKVwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJ2YWx1ZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImlzVmFsdWVSZXF1aXJlZFZpc3VhbGx5XCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJ2YWx1ZUVycm9yc0FycmF5XCJcbiAgICAgICAgaW5wdXRJbmxpbmVTdHlsZT1cImZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWFyRyxNQUFNLE9BQU8scUNBQXFDO0lBc0JoRCxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXJCMUMsU0FBSSxHQUFzQixRQUFRLENBQUM7UUFFbkMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix3QkFBbUIsR0FBa0Q7WUFDNUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDekMsQ0FBQztRQUVGLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixTQUFJLEdBQXNCLFFBQVEsQ0FBQztRQUNuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsa0JBQWEsR0FBNEIsSUFBSSxDQUFDO1FBQzlDLG9CQUFlLEdBQUcsS0FB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Q0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7a0lBbk1VLHFDQUFxQztzSEFBckMscUNBQXFDLDZRQ2JsRCwwbEZBc0VBOzJGRHpEYSxxQ0FBcUM7a0JBTmpELFNBQVM7K0JBQ0UscUNBQXFDLG1CQUU5Qix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7d0dBR3pELElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVudlZhcmlhYmxlRGlhbG9nVmFsdWUsXG4gIEVudlZhcmlhYmxlVUlQZXJtaXNzaW9uLFxuICBFbnZWYXJpYWJsZVVJVHlwZSxcbn0gZnJvbSAnLi9uZXctZW52aXJvbm1lbnQtdmFyaWFibGUtZGlhbG9nLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1uZXctZW52aXJvbm1lbnQtdmFyaWFibGUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290Jywgc3R5bGU6ICdkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZXdFbnZpcm9ubWVudFZhcmlhYmxlRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZTogJ2NyZWF0ZScgfCAnZWRpdCcgPSAnY3JlYXRlJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlPzogUGFydGlhbDxFbnZWYXJpYWJsZURpYWxvZ1ZhbHVlPjtcbiAgQElucHV0KCkgZXhpc3RpbmdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZW52TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcmVhZG9ubHkgdHlwZURyb3Bkb3duT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogRW52VmFyaWFibGVVSVR5cGUgfVtdID0gW1xuICAgIHsgbGFiZWw6ICdTdHJpbmcnLCB2YWx1ZTogJ1N0cmluZycgfSxcbiAgICB7IGxhYmVsOiAnTnVtYmVyJywgdmFsdWU6ICdOdW1iZXInIH0sXG4gICAgeyBsYWJlbDogJ0Jvb2xlYW4nLCB2YWx1ZTogJ0Jvb2xlYW4nIH0sXG4gICAgeyBsYWJlbDogJ1Bhc3N3b3JkJywgdmFsdWU6ICdQYXNzd29yZCcgfSxcbiAgXTtcblxuICBuYW1lID0gJyc7XG4gIHR5cGU6IEVudlZhcmlhYmxlVUlUeXBlID0gJ1N0cmluZyc7XG4gIHZhbHVlID0gJyc7XG4gIHJlYWRXcml0ZU1vZGU6IEVudlZhcmlhYmxlVUlQZXJtaXNzaW9uID0gJ1JXJztcbiAgcGFzc3dvcmRUb3VjaGVkID0gZmFsc2U7XG5cbiAgbmFtZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdmFsdWVFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5uYW1lID0gdGhpcy5pbml0aWFsVmFsdWUubmFtZSA/PyAnJztcbiAgICAgIHRoaXMudHlwZSA9IHRoaXMuaW5pdGlhbFZhbHVlLnR5cGUgPz8gJ1N0cmluZyc7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWUudmFsdWUgPz8gJyc7XG4gICAgICB0aGlzLnJlYWRXcml0ZU1vZGUgPSB0aGlzLmluaXRpYWxWYWx1ZS5yZWFkV3JpdGVNb2RlID8/ICdSVyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdCb29sZWFuJyAmJiB0aGlzLnZhbHVlICE9PSAndHJ1ZScgJiYgdGhpcy52YWx1ZSAhPT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy52YWx1ZSA9ICdmYWxzZSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ0VkaXQgdmFyaWFibGUnIDogJ05ldyB2YXJpYWJsZSc7XG4gIH1cblxuICBnZXQgc3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbnZOYW1lID8gYFNjb3BlZCB0byB0aGUgJHt0aGlzLmVudk5hbWV9IGVudmlyb25tZW50LmAgOiAnU2NvcGVkIHRvIHRoaXMgZW52aXJvbm1lbnQuJztcbiAgfVxuXG4gIGdldCBwcmltYXJ5QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCcgPyAnU2F2ZSBjaGFuZ2VzJyA6ICdBZGQgdmFyaWFibGUnO1xuICB9XG5cbiAgZ2V0IGlzQm9vbGVhbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ0Jvb2xlYW4nOyB9XG4gIGdldCBpc1Bhc3N3b3JkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50eXBlID09PSAnUGFzc3dvcmQnOyB9XG4gIGdldCBpc051bWJlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ051bWJlcic7IH1cblxuICBnZXQgdmFsdWVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlYWRXcml0ZU1vZGUgPT09ICdSVycpIHtcbiAgICAgIHJldHVybiAnTGVhdmUgYmxhbmsgdG8gcG9wdWxhdGUgZHVyaW5nIHRlc3QgZXhlY3V0aW9uJztcbiAgICB9XG4gICAgcmV0dXJuICdFbnRlciBhIHZhbHVlJztcbiAgfVxuXG4gIGdldCBuYW1lSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm5hbWVFcnJvcikgeyByZXR1cm4gdGhpcy5uYW1lRXJyb3I7IH1cbiAgICByZXR1cm4gJ1ZhcmlhYmxlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQuJztcbiAgfVxuXG4gIGdldCBwZXJtaXNzaW9uSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRXcml0ZU1vZGUgPT09ICdSTydcbiAgICAgID8gJ1JlYWQgb25seSDigJQgdGVzdCBzdGVwcyBjYW4gcmVhZCBidXQgbm90IG92ZXJ3cml0ZS4nXG4gICAgICA6ICdSZWFkL3dyaXRlIOKAlCB0ZXN0IGNhc2VzIGNhbiBjYXB0dXJlIHZhbHVlcyBoZXJlLic7XG4gIH1cblxuICBnZXQgbmFtZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMubmFtZUVycm9yID8gW3RoaXMubmFtZUVycm9yXSA6IFtdOyB9XG4gIGdldCB2YWx1ZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMudmFsdWVFcnJvciA/IFt0aGlzLnZhbHVlRXJyb3JdIDogW107IH1cblxuICBnZXQgYm9vbGVhbkRyb3Bkb3duT3B0aW9ucygpOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyBsYWJlbDogJ3RydWUnLCB2YWx1ZTogJ3RydWUnIH0sXG4gICAgICB7IGxhYmVsOiAnZmFsc2UnLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICAgIF07XG4gIH1cblxuICBnZXQgaXNWYWx1ZVJlcXVpcmVkVmlzdWFsbHkoKTogYm9vbGVhbiB7XG4gICAgLy8gQm9vbGVhbiBpcyBzZWxlY3RlZCB2aWEgZHJvcGRvd24gKGFsd2F5cyBoYXMgYSB2YWx1ZSk7IHBhc3N3b3JkIGVkaXQtbW9kZVxuICAgIC8vIGFsbG93cyBibGFuayB0byBtZWFuIFwia2VlcCBleGlzdGluZyBzZWNyZXRcIiDigJQgYm90aCByZW5kZXIgd2l0aG91dCB0aGUgYXN0ZXJpc2suXG4gICAgaWYgKHRoaXMuaXNCb29sZWFuKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0aGlzLmlzUGFzc3dvcmQgJiYgdGhpcy5tb2RlID09PSAnZWRpdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbk5hbWVDaGFuZ2UobmV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uYW1lID0gbmV4dDtcbiAgICB0aGlzLm5hbWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblR5cGVDaGFuZ2UobmV4dDogRW52VmFyaWFibGVVSVR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIW5leHQpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgcHJldiA9IHRoaXMudHlwZTtcbiAgICB0aGlzLnR5cGUgPSBuZXh0O1xuICAgIGlmIChwcmV2ID09PSAnQm9vbGVhbicgJiYgbmV4dCAhPT0gJ0Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSAnQm9vbGVhbicgJiYgdGhpcy52YWx1ZSAhPT0gJ3RydWUnICYmIHRoaXMudmFsdWUgIT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnZmFsc2UnO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gJ051bWJlcicgJiYgdGhpcy52YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkTnVtYmVyKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmIChuZXh0ID09PSAnUGFzc3dvcmQnICYmIHByZXYgIT09ICdQYXNzd29yZCcpIHtcbiAgICAgIHRoaXMucGFzc3dvcmRUb3VjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBlcm1pc3Npb25DaGFuZ2UobmV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkV3JpdGVNb2RlID0gbmV4dCA9PT0gJ1JPJyA/ICdSTycgOiAnUlcnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICBpZiAodGhpcy5pc1Bhc3N3b3JkKSB7IHRoaXMucGFzc3dvcmRUb3VjaGVkID0gdHJ1ZTsgfVxuICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3N0IHJlYWRzIHZpYSBEaWFsb2dSZWYuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS4gUmV0dXJucyBudWxsIG9uIHZhbGlkYXRpb25cbiAgICogZmFpbHVyZSDigJQgaG9zdCBrZWVwcyB0aGUgZGlhbG9nIG9wZW4gYW5kIHN1cmZhY2VzIHRoZSBpbmxpbmUgZXJyb3IgYWxyZWFkeVxuICAgKiB3cml0dGVuIG9udG8gbmFtZUVycm9yIC8gdmFsdWVFcnJvci5cbiAgICovXG4gIGdldFZhbHVlKCk6IEVudlZhcmlhYmxlRGlhbG9nVmFsdWUgfCBudWxsIHtcbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IHRoaXMubmFtZS50cmltKCk7XG5cbiAgICBpZiAoIXRyaW1tZWROYW1lKSB7XG4gICAgICB0aGlzLm5hbWVFcnJvciA9ICdOYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRHVwbGljYXRlTmFtZSh0cmltbWVkTmFtZSkpIHtcbiAgICAgIHRoaXMubmFtZUVycm9yID0gJ0EgdmFyaWFibGUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBlbnZpcm9ubWVudC4nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3VmFsdWUgPSAodGhpcy52YWx1ZSA/PyAnJykudG9TdHJpbmcoKTtcbiAgICBjb25zdCB2YWx1ZUlzQmxhbmsgPSAhdGhpcy5pc0Jvb2xlYW4gJiYgcmF3VmFsdWUudHJpbSgpID09PSAnJztcbiAgICBjb25zdCBhbGxvd0JsYW5rUGFzc3dvcmRPbkVkaXQgPSB0aGlzLmlzUGFzc3dvcmQgJiYgdGhpcy5tb2RlID09PSAnZWRpdCcgJiYgIXRoaXMucGFzc3dvcmRUb3VjaGVkO1xuXG4gICAgaWYgKHZhbHVlSXNCbGFuayAmJiAhYWxsb3dCbGFua1Bhc3N3b3JkT25FZGl0KSB7XG4gICAgICB0aGlzLnZhbHVlRXJyb3IgPSAnVmFsdWUgaXMgcmVxdWlyZWQuJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXIgJiYgcmF3VmFsdWUgJiYgIXRoaXMuaXNWYWxpZE51bWJlcihyYXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9ICdWYWx1ZSBtdXN0IGJlIGEgbnVtYmVyLic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFtZUVycm9yIHx8IHRoaXMudmFsdWVFcnJvcikge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBvbWl0UGFzc3dvcmRWYWx1ZSA9IHRoaXMuaXNQYXNzd29yZCAmJiB0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiAhdGhpcy5wYXNzd29yZFRvdWNoZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdHJpbW1lZE5hbWUsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2YWx1ZTogb21pdFBhc3N3b3JkVmFsdWUgPyBudWxsIDogdGhpcy5zZXJpYWxpemVWYWx1ZSgpLFxuICAgICAgcmVhZFdyaXRlTW9kZTogdGhpcy5yZWFkV3JpdGVNb2RlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmlzQm9vbGVhbikge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09ICd0cnVlJyA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0R1cGxpY2F0ZU5hbWUoY2FuZGlkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdGluZyA9ICh0aGlzLmV4aXN0aW5nTmFtZXMgPz8gW10pLm1hcChuID0+IChuID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgbG93ZXJlZCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSAodGhpcy5pbml0aWFsVmFsdWU/Lm5hbWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGxvd2VyZWQgIT09IG9yaWdpbmFsICYmIGV4aXN0aW5nLmluY2x1ZGVzKGxvd2VyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3RpbmcuaW5jbHVkZXMobG93ZXJlZCk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWROdW1iZXIocmF3OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0cmltbWVkID0gcmF3LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHsgcmV0dXJuIHRydWU7IH1cbiAgICByZXR1cm4gIU51bWJlci5pc05hTihOdW1iZXIodHJpbW1lZCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtdy1mdWxsXCI+XG5cbiAgPCEtLSBOYW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgIGxhYmVsPVwiTmFtZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cImUuZy4gb3JkZXJfaWRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxuICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIFtlcnJvcnNdPVwibmFtZUVycm9yc0FycmF5XCJcbiAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbk5hbWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8c3BhbiAqbmdJZj1cIiFuYW1lRXJyb3JcIlxuICAgICAgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTUwMCBjcWEtbXQtMVwiPlxuICAgICAge3sgbmFtZUhlbHBlclRleHQgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVHlwZSArIFBlcm1pc3Npb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLW1iLTEuNSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5UeXBlPC9sYWJlbD5cbiAgICAgIDxjcWEtZHJvcGRvd24tYnV0dG9uXG4gICAgICAgIFtvcHRpb25zXT1cInR5cGVEcm9wZG93bk9wdGlvbnNcIlxuICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJ0eXBlXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZHJvcGRvd24tYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1tYi0xLjUgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+UGVybWlzc2lvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXB0LTAuNVwiPlxuICAgICAgICA8Y3FhLXBlcm1pc3Npb24tdG9nZ2xlXG4gICAgICAgICAgW3ZhbHVlXT1cInJlYWRXcml0ZU1vZGVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblBlcm1pc3Npb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1wZXJtaXNzaW9uLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTUwMCBjcWEtbXQtMVwiPnt7IHBlcm1pc3Npb25IZWxwZXJUZXh0IH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFZhbHVlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQm9vbGVhbjsgZWxzZSBub25Cb29sZWFuVmFsdWVcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1tYi0xLjUgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+VmFsdWU8L2xhYmVsPlxuICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwiYm9vbGVhbkRyb3Bkb3duT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1kcm9wZG93bi1idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub25Cb29sZWFuVmFsdWU+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBsYWJlbD1cIlZhbHVlXCJcbiAgICAgICAgW3R5cGVdPVwiaXNQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAoaXNOdW1iZXIgPyAnbnVtYmVyJyA6ICd0ZXh0JylcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwidmFsdWVQbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1ZhbHVlUmVxdWlyZWRWaXN1YWxseVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwidmFsdWVFcnJvcnNBcnJheVwiXG4gICAgICAgIFtzaG93UGFzc3dvcmRUb2dnbGVdPVwiaXNQYXNzd29yZFwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
@@ -221,7 +221,7 @@ export class NewGlobalVariableDialogComponent {
221
221
  }
222
222
  }
223
223
  NewGlobalVariableDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewGlobalVariableDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
224
- NewGlobalVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewGlobalVariableDialogComponent, selector: "cqa-new-global-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", availableTags: "availableTags" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. api_key\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n Names must be unique across the entire workspace (primary key \u2014 no duplicates).\n </span>\n </div>\n\n <!-- Type + Permission row -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n <!-- Tags (optional) \u2014 between Value and Description per design -->\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">\n Tags <span class=\"cqa-text-xs cqa-font-normal cqa-text-gray-500\">(optional \u2014 for filtering &amp; grouping)</span>\n </label>\n <lib-global-variable-tags-input\n [tags]=\"tags\"\n [availableTags]=\"availableTags\"\n (tagsChange)=\"onTagsChange($event)\">\n </lib-global-variable-tags-input>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-textarea\n label=\"Description\"\n placeholder=\"What is this variable used for?\"\n [value]=\"description\"\n [rows]=\"2\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-textarea>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "displayOnly", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }, { type: i4.GlobalVariableTagsInputComponent, selector: "lib-global-variable-tags-input", inputs: ["tags", "availableTags"], outputs: ["tagsChange"] }, { type: i5.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
224
+ NewGlobalVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewGlobalVariableDialogComponent, selector: "cqa-new-global-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", availableTags: "availableTags" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. api_key\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n Names must be unique across the entire workspace (primary key \u2014 no duplicates).\n </span>\n </div>\n\n <!-- Type + Permission row -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n <!-- Tags (optional) \u2014 between Value and Description per design -->\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">\n Tags <span class=\"cqa-text-xs cqa-font-normal cqa-text-gray-500\">(optional \u2014 for filtering &amp; grouping)</span>\n </label>\n <lib-global-variable-tags-input\n [tags]=\"tags\"\n [availableTags]=\"availableTags\"\n (tagsChange)=\"onTagsChange($event)\">\n </lib-global-variable-tags-input>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-textarea\n label=\"Description\"\n placeholder=\"What is this variable used for?\"\n [value]=\"description\"\n [rows]=\"2\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-textarea>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "displayOnly", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }, { type: i4.GlobalVariableTagsInputComponent, selector: "lib-global-variable-tags-input", inputs: ["tags", "availableTags"], outputs: ["tagsChange"] }, { type: i5.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
225
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewGlobalVariableDialogComponent, decorators: [{
226
226
  type: Component,
227
227
  args: [{ selector: 'cqa-new-global-variable-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. api_key\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n Names must be unique across the entire workspace (primary key \u2014 no duplicates).\n </span>\n </div>\n\n <!-- Type + Permission row -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n <!-- Tags (optional) \u2014 between Value and Description per design -->\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">\n Tags <span class=\"cqa-text-xs cqa-font-normal cqa-text-gray-500\">(optional \u2014 for filtering &amp; grouping)</span>\n </label>\n <lib-global-variable-tags-input\n [tags]=\"tags\"\n [availableTags]=\"availableTags\"\n (tagsChange)=\"onTagsChange($event)\">\n </lib-global-variable-tags-input>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-textarea\n label=\"Description\"\n placeholder=\"What is this variable used for?\"\n [value]=\"description\"\n [rows]=\"2\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-textarea>\n </div>\n\n</div>\n" }]