@cqa-lib/cqa-ui 1.1.557-gamma.30 → 1.1.557-gamma.31
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.
- package/esm2020/lib/custom-input/custom-input.component.mjs +64 -4
- package/esm2020/lib/dialogs/name-prompt-modal.component.mjs +1 -1
- package/esm2020/lib/export-code-modal/export-code-modal.component.mjs +1 -1
- package/esm2020/lib/manage-columns-dialog/manage-columns-dialog.component.mjs +5 -17
- package/esm2020/lib/new-db-config-dialog/new-db-config-dialog.component.mjs +1 -1
- package/esm2020/lib/new-environment-dialog/new-environment-dialog.component.mjs +1 -1
- package/esm2020/lib/new-environment-variable-dialog/new-environment-variable-dialog.component.mjs +9 -14
- package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.component.mjs +9 -14
- package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.mjs +1 -1
- package/esm2020/lib/questionnaire-list/questionnaire-list.component.mjs +1 -1
- package/esm2020/lib/step-builder/advanced-variables-form/advanced-variables-form.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +1 -1
- package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +1 -1
- package/esm2020/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.mjs +1 -1
- package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +1 -1
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +1 -1
- package/esm2020/lib/test-case-details/create-step-group/create-step-group.component.mjs +1 -1
- package/esm2020/lib/test-case-details/element-popup/element-form/element-form.component.mjs +1 -1
- package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer.component.mjs +1 -1
- package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +1 -1
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +1 -1
- package/esm2020/lib/test-suite/move-test-suite-dialog/move-test-suite-dialog.component.mjs +1 -1
- package/esm2020/lib/utils/variable-name.util.mjs +4 -2
- package/esm2020/lib/viewport-selector/viewport-selector.component.mjs +1 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +155 -115
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +154 -115
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/custom-input/custom-input.component.d.ts +12 -1
- package/lib/utils/variable-name.util.d.ts +3 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { INVALID_VAR_NAME_MESSAGE, VAR_NAME_BODY_CHAR_REGEX, isValidVariableName, } from '../utils/variable-name.util';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
import * as i1 from "@angular/material/icon";
|
|
4
5
|
import * as i2 from "@angular/common";
|
|
@@ -16,6 +17,14 @@ export class CustomInputComponent {
|
|
|
16
17
|
this.fullWidth = false;
|
|
17
18
|
this.showCharCount = false;
|
|
18
19
|
this.showPasswordToggle = false;
|
|
20
|
+
/**
|
|
21
|
+
* When true, restricts the input to the canonical variable-name rule
|
|
22
|
+
* (`[A-Za-z_][A-Za-z0-9_]*`). Disallowed printable characters (space, `.`,
|
|
23
|
+
* `-`, brackets, etc.) are blocked at the keystroke level, and the
|
|
24
|
+
* canonical `INVALID_VAR_NAME_MESSAGE` is surfaced inline. Pasted values
|
|
25
|
+
* are also re-validated. See `src/lib/utils/variable-name.util.ts`.
|
|
26
|
+
*/
|
|
27
|
+
this.variableNameValidation = false;
|
|
19
28
|
this.valueChange = new EventEmitter();
|
|
20
29
|
this.blurred = new EventEmitter();
|
|
21
30
|
this.focused = new EventEmitter();
|
|
@@ -23,6 +32,7 @@ export class CustomInputComponent {
|
|
|
23
32
|
this.inputValue = '';
|
|
24
33
|
this.isFocused = false;
|
|
25
34
|
this.passwordVisible = false;
|
|
35
|
+
this.internalNameError = null;
|
|
26
36
|
}
|
|
27
37
|
get effectiveType() {
|
|
28
38
|
return this.type === 'password' && this.passwordVisible ? 'text' : this.type;
|
|
@@ -45,9 +55,19 @@ export class CustomInputComponent {
|
|
|
45
55
|
this.inputValue = newValue;
|
|
46
56
|
}
|
|
47
57
|
}
|
|
58
|
+
if (changes['variableNameValidation'] || changes['value']) {
|
|
59
|
+
this.evaluateNameValidation();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
get displayErrors() {
|
|
63
|
+
const list = this.errors ? [...this.errors] : [];
|
|
64
|
+
if (this.internalNameError && list.indexOf(this.internalNameError) === -1) {
|
|
65
|
+
list.push(this.internalNameError);
|
|
66
|
+
}
|
|
67
|
+
return list;
|
|
48
68
|
}
|
|
49
69
|
get hasError() {
|
|
50
|
-
return this.
|
|
70
|
+
return this.displayErrors.length > 0;
|
|
51
71
|
}
|
|
52
72
|
get inputSizeClasses() {
|
|
53
73
|
switch (this.size) {
|
|
@@ -83,6 +103,7 @@ export class CustomInputComponent {
|
|
|
83
103
|
}
|
|
84
104
|
}
|
|
85
105
|
this.inputValue = nextValue;
|
|
106
|
+
this.evaluateNameValidation();
|
|
86
107
|
this.valueChange.emit(this.inputValue);
|
|
87
108
|
}
|
|
88
109
|
onFocus(event) {
|
|
@@ -91,14 +112,51 @@ export class CustomInputComponent {
|
|
|
91
112
|
}
|
|
92
113
|
onBlur(event) {
|
|
93
114
|
this.isFocused = false;
|
|
115
|
+
// Re-evaluate so a stale "you tried to type a space" error doesn't linger
|
|
116
|
+
// on a value that is currently valid. Critical because keystroke-blocking
|
|
117
|
+
// suppresses the `input` event, which would otherwise clear it.
|
|
118
|
+
this.evaluateNameValidation();
|
|
94
119
|
this.blurred.emit(event);
|
|
95
120
|
}
|
|
96
121
|
onKeyDown(event) {
|
|
97
122
|
if (event.key === 'Enter') {
|
|
98
123
|
event.preventDefault();
|
|
99
124
|
this.enterPressed.emit(this.inputValue.trim());
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (this.variableNameValidation
|
|
128
|
+
&& event.key
|
|
129
|
+
&& event.key.length === 1
|
|
130
|
+
&& !event.ctrlKey
|
|
131
|
+
&& !event.metaKey
|
|
132
|
+
&& !event.altKey) {
|
|
133
|
+
if (VAR_NAME_BODY_CHAR_REGEX.test(event.key)) {
|
|
134
|
+
// A valid char is about to land — proactively clear any stale error
|
|
135
|
+
// from a prior blocked keystroke so the user sees the message
|
|
136
|
+
// disappear the moment the field is moving back to a valid state.
|
|
137
|
+
this.internalNameError = null;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Block the disallowed character (space, `.`, `-`, brackets, etc.) and
|
|
141
|
+
// surface the format error so the user understands why the keystroke
|
|
142
|
+
// didn't take effect.
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
this.internalNameError = INVALID_VAR_NAME_MESSAGE;
|
|
145
|
+
}
|
|
100
146
|
}
|
|
101
147
|
}
|
|
148
|
+
evaluateNameValidation() {
|
|
149
|
+
if (!this.variableNameValidation) {
|
|
150
|
+
this.internalNameError = null;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const trimmed = (this.inputValue ?? '').trim();
|
|
154
|
+
if (!trimmed) {
|
|
155
|
+
this.internalNameError = null;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.internalNameError = isValidVariableName(trimmed) ? null : INVALID_VAR_NAME_MESSAGE;
|
|
159
|
+
}
|
|
102
160
|
get inputStyles() {
|
|
103
161
|
return this.inputInlineStyle || '';
|
|
104
162
|
}
|
|
@@ -107,10 +165,10 @@ export class CustomInputComponent {
|
|
|
107
165
|
}
|
|
108
166
|
}
|
|
109
167
|
CustomInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
-
CustomInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CustomInputComponent, selector: "cqa-custom-input", inputs: { inputId: "inputId", label: "label", type: "type", placeholder: "placeholder", value: "value", disabled: "disabled", errors: "errors", required: "required", ariaLabel: "ariaLabel", size: "size", fullWidth: "fullWidth", maxLength: "maxLength", showCharCount: "showCharCount", inputInlineStyle: "inputInlineStyle", labelInlineStyle: "labelInlineStyle", showPasswordToggle: "showPasswordToggle" }, outputs: { valueChange: "valueChange", blurred: "blurred", focused: "focused", enterPressed: "enterPressed" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <input\n [attr.id]=\"inputId\"\n [attr.name]=\"inputId\"\n [type]=\"effectiveType\"\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none {{ inputSizeClasses }}\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true,\n 'cqa-pr-10': isPasswordToggleVisible\n }\"\n [style]=\"inputStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n autocomplete=\"off\"\n />\n <button\n *ngIf=\"isPasswordToggleVisible\"\n type=\"button\"\n class=\"cqa-absolute cqa-inset-y-0 cqa-right-0 cqa-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-bg-transparent cqa-border-0 cqa-cursor-pointer cqa-text-[#64748B] hover:cqa-text-[#0F172A]\"\n [attr.aria-label]=\"passwordVisible ? 'Hide password' : 'Show password'\"\n [attr.aria-pressed]=\"passwordVisible\"\n tabindex=\"-1\"\n (click)=\"togglePasswordVisible($event)\">\n <mat-icon class=\"cqa-text-[18px] cqa-leading-[18px]\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">\n {{ passwordVisible ? 'visibility_off' : 'visibility' }}\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ inputValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of
|
|
168
|
+
CustomInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CustomInputComponent, selector: "cqa-custom-input", inputs: { inputId: "inputId", label: "label", type: "type", placeholder: "placeholder", value: "value", disabled: "disabled", errors: "errors", required: "required", ariaLabel: "ariaLabel", size: "size", fullWidth: "fullWidth", maxLength: "maxLength", showCharCount: "showCharCount", inputInlineStyle: "inputInlineStyle", labelInlineStyle: "labelInlineStyle", showPasswordToggle: "showPasswordToggle", variableNameValidation: "variableNameValidation" }, outputs: { valueChange: "valueChange", blurred: "blurred", focused: "focused", enterPressed: "enterPressed" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <input\n [attr.id]=\"inputId\"\n [attr.name]=\"inputId\"\n [type]=\"effectiveType\"\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none {{ inputSizeClasses }}\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true,\n 'cqa-pr-10': isPasswordToggleVisible\n }\"\n [style]=\"inputStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n autocomplete=\"off\"\n />\n <button\n *ngIf=\"isPasswordToggleVisible\"\n type=\"button\"\n class=\"cqa-absolute cqa-inset-y-0 cqa-right-0 cqa-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-bg-transparent cqa-border-0 cqa-cursor-pointer cqa-text-[#64748B] hover:cqa-text-[#0F172A]\"\n [attr.aria-label]=\"passwordVisible ? 'Hide password' : 'Show password'\"\n [attr.aria-pressed]=\"passwordVisible\"\n tabindex=\"-1\"\n (click)=\"togglePasswordVisible($event)\">\n <mat-icon class=\"cqa-text-[18px] cqa-leading-[18px]\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">\n {{ passwordVisible ? 'visibility_off' : 'visibility' }}\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ inputValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of displayErrors\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
111
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomInputComponent, decorators: [{
|
|
112
170
|
type: Component,
|
|
113
|
-
args: [{ selector: 'cqa-custom-input', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <input\n [attr.id]=\"inputId\"\n [attr.name]=\"inputId\"\n [type]=\"effectiveType\"\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none {{ inputSizeClasses }}\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true,\n 'cqa-pr-10': isPasswordToggleVisible\n }\"\n [style]=\"inputStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n autocomplete=\"off\"\n />\n <button\n *ngIf=\"isPasswordToggleVisible\"\n type=\"button\"\n class=\"cqa-absolute cqa-inset-y-0 cqa-right-0 cqa-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-bg-transparent cqa-border-0 cqa-cursor-pointer cqa-text-[#64748B] hover:cqa-text-[#0F172A]\"\n [attr.aria-label]=\"passwordVisible ? 'Hide password' : 'Show password'\"\n [attr.aria-pressed]=\"passwordVisible\"\n tabindex=\"-1\"\n (click)=\"togglePasswordVisible($event)\">\n <mat-icon class=\"cqa-text-[18px] cqa-leading-[18px]\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">\n {{ passwordVisible ? 'visibility_off' : 'visibility' }}\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ inputValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of
|
|
171
|
+
args: [{ selector: 'cqa-custom-input', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <input\n [attr.id]=\"inputId\"\n [attr.name]=\"inputId\"\n [type]=\"effectiveType\"\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none {{ inputSizeClasses }}\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true,\n 'cqa-pr-10': isPasswordToggleVisible\n }\"\n [style]=\"inputStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n autocomplete=\"off\"\n />\n <button\n *ngIf=\"isPasswordToggleVisible\"\n type=\"button\"\n class=\"cqa-absolute cqa-inset-y-0 cqa-right-0 cqa-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-bg-transparent cqa-border-0 cqa-cursor-pointer cqa-text-[#64748B] hover:cqa-text-[#0F172A]\"\n [attr.aria-label]=\"passwordVisible ? 'Hide password' : 'Show password'\"\n [attr.aria-pressed]=\"passwordVisible\"\n tabindex=\"-1\"\n (click)=\"togglePasswordVisible($event)\">\n <mat-icon class=\"cqa-text-[18px] cqa-leading-[18px]\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">\n {{ passwordVisible ? 'visibility_off' : 'visibility' }}\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ inputValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of displayErrors\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
114
172
|
}], propDecorators: { inputId: [{
|
|
115
173
|
type: Input
|
|
116
174
|
}], label: [{
|
|
@@ -143,6 +201,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
143
201
|
type: Input
|
|
144
202
|
}], showPasswordToggle: [{
|
|
145
203
|
type: Input
|
|
204
|
+
}], variableNameValidation: [{
|
|
205
|
+
type: Input
|
|
146
206
|
}], valueChange: [{
|
|
147
207
|
type: Output
|
|
148
208
|
}], blurred: [{
|
|
@@ -152,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
152
212
|
}], enterPressed: [{
|
|
153
213
|
type: Output
|
|
154
214
|
}] } });
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY3VzdG9tLWlucHV0L2N1c3RvbS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbS1pbnB1dC9jdXN0b20taW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7QUFXakcsTUFBTSxPQUFPLG9CQUFvQjtJQU5qQztRQVVXLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxTQUFJLEdBQWMsTUFBTSxDQUFDO1FBRXpCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFjLElBQUksQ0FBQztRQUV2QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBTXRCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUxQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFekMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXBELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixvQkFBZSxHQUFHLEtBQUssQ0FBQztLQW1HekI7SUFqR0MsSUFBSSxhQUFhO1FBQ2YsT0FB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O2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBJbnB1dFR5cGUgPSAndGV4dCcgfCAncGFzc3dvcmQnIHwgJ2VtYWlsJyB8ICdudW1iZXInIHwgJ3RlbCcgfCAndXJsJztcbnR5cGUgSW5wdXRTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY3VzdG9tLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgaW5wdXRJZD86IHN0cmluZztcblxuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gIEBJbnB1dCgpIHR5cGU6IElucHV0VHlwZSA9ICd0ZXh0JztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnJztcblxuICBASW5wdXQoKSBzaXplOiBJbnB1dFNpemUgPSAnbWQnO1xuXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcblxuICBASW5wdXQoKSBzaG93Q2hhckNvdW50ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaW5wdXRJbmxpbmVTdHlsZT86IHN0cmluZztcblxuICBASW5wdXQoKSBsYWJlbElubGluZVN0eWxlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNob3dQYXNzd29yZFRvZ2dsZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBPdXRwdXQoKSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKSBlbnRlclByZXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBpbnB1dFZhbHVlID0gJyc7XG4gIGlzRm9jdXNlZCA9IGZhbHNlO1xuICBwYXNzd29yZFZpc2libGUgPSBmYWxzZTtcblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBJbnB1dFR5cGUge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiYgdGhpcy5wYXNzd29yZFZpc2libGUgPyAndGV4dCcgOiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXQgaXNQYXNzd29yZFRvZ2dsZVZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1Bhc3N3b3JkVG9nZ2xlICYmIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJiAhdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIHRvZ2dsZVBhc3N3b3JkVmlzaWJsZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucGFzc3dvcmRWaXNpYmxlID0gIXRoaXMucGFzc3dvcmRWaXNpYmxlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddICYmIGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBuZXdWYWx1ZSA9IGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlID8/ICcnO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgbmV3VmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5zdWJzdHJpbmcoMCwgdGhpcy5tYXhMZW5ndGgpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuaW5wdXRWYWx1ZSkge1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzICYmIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgaW5wdXRTaXplQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbSc6XG4gICAgICAgIHJldHVybiAnY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXRleHQteHMnO1xuICAgICAgY2FzZSAnbWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS1weC00IGNxYS1weS0yLjUgY3FhLXRleHQtc20nO1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgICByZXR1cm4gJ2NxYS1weC01IGNxYS1weS0zIGNxYS10ZXh0LWJhc2UnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtcHgtNCBjcWEtcHktMi41IGNxYS10ZXh0LXNtJztcbiAgICB9XG4gIH1cblxuICBnZXQgbGFiZWxTaXplQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbSc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQteHMgY3FhLW1iLTEnO1xuICAgICAgY2FzZSAnbWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LXNtIGNxYS1tYi0xLjUnO1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LWJhc2UgY3FhLW1iLTInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtdGV4dC1zbSBjcWEtbWItMS41JztcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgbmV4dFZhbHVlID0gdGFyZ2V0Py52YWx1ZSA/PyAnJztcbiAgICBcbiAgICBpZiAodGhpcy5zaG93Q2hhckNvdW50ICYmIHRoaXMubWF4TGVuZ3RoICYmIG5leHRWYWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgbmV4dFZhbHVlID0gbmV4dFZhbHVlLnN1YnN0cmluZygwLCB0aGlzLm1heExlbmd0aCk7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5pbnB1dFZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmlucHV0VmFsdWUpO1xuICB9XG5cbiAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmVudGVyUHJlc3NlZC5lbWl0KHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpbnB1dFN0eWxlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlucHV0SW5saW5lU3R5bGUgfHwgJyc7XG4gIH1cblxuICBnZXQgbGFiZWxTdHlsZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbElubGluZVN0eWxlIHx8ICcnO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiIFtzdHlsZS5kaXNwbGF5XT1cIidibG9jaydcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gICAgPGxhYmVsIFxuICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzM3NDE1MV1cIlxuICAgICAgW25nQ2xhc3NdPVwibGFiZWxTaXplQ2xhc3Nlc1wiXG4gICAgICBbc3R5bGVdPVwibGFiZWxTdHlsZXNcIj5cbiAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmVcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgIFthdHRyLm5hbWVdPVwiaW5wdXRJZFwiXG4gICAgICAgIFt0eXBlXT1cImVmZmVjdGl2ZVR5cGVcIlxuICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGwgIWNxYS1ib3JkZXIgIWNxYS1ib3JkZXItc29saWQgIWNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLXdoaXRlIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBjcWEtZm9udC1ub3JtYWwgY3FhLWxlYWRpbmctbm9ybWFsIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIHBsYWNlaG9sZGVyOmNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWR1cmF0aW9uLTIwMCBjcWEtb3V0bGluZS1ub25lIHt7IGlucHV0U2l6ZUNsYXNzZXMgfX1cIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2NxYS1ib3JkZXItWyNEMUQ1REJdIGZvY3VzOmNxYS1ib3JkZXItWyMzQjgyRjZdIGZvY3VzOmNxYS1yaW5nLTEgZm9jdXM6Y3FhLXJpbmctWyMzQjgyRjZdJzogIWhhc0Vycm9yLFxuICAgICAgICAgICdjcWEtYm9yZGVyLVsjRUY0NDQ0XSBmb2N1czpjcWEtYm9yZGVyLVsjRUY0NDQ0XSBmb2N1czpjcWEtcmluZy0xIGZvY3VzOmNxYS1yaW5nLVsjRUY0NDQ0XSc6IGhhc0Vycm9yLFxuICAgICAgICAgICdjcWEtYmctWyNGOUZBRkJdIGNxYS1jdXJzb3Itbm90LWFsbG93ZWQgY3FhLXRleHQtWyM5Q0EzQUZdJzogZGlzYWJsZWQsXG4gICAgICAgICAgJ2NxYS1vdXRsaW5lLW5vbmUnOiB0cnVlLFxuICAgICAgICAgICdjcWEtcHItMTAnOiBpc1Bhc3N3b3JkVG9nZ2xlVmlzaWJsZVxuICAgICAgICB9XCJcbiAgICAgICAgW3N0eWxlXT1cImlucHV0U3R5bGVzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBsYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvclwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJpc1Bhc3N3b3JkVG9nZ2xlVmlzaWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtaW5zZXQteS0wIGNxYS1yaWdodC0wIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTEwIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLTAgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LVsjNjQ3NDhCXSBob3ZlcjpjcWEtdGV4dC1bIzBGMTcyQV1cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInBhc3N3b3JkVmlzaWJsZSA/ICdIaWRlIHBhc3N3b3JkJyA6ICdTaG93IHBhc3N3b3JkJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJwYXNzd29yZFZpc2libGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkVmlzaWJsZSgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsxOHB4XSBjcWEtbGVhZGluZy1bMThweF1cIiBzdHlsZT1cImZvbnQtc2l6ZToxOHB4O3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7bGluZS1oZWlnaHQ6MThweDtcIj5cbiAgICAgICAgICB7eyBwYXNzd29yZFZpc2libGUgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknIH19XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93Q2hhckNvdW50ICYmIG1heExlbmd0aFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1tdC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlxuICAgICAgICB7eyBpbnB1dFZhbHVlLmxlbmd0aCB9fS97eyBtYXhMZW5ndGggfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJoYXNFcnJvclwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbXQtMS41XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICA8c3ZnIFxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBcbiAgICAgICAgICB3aWR0aD1cIjE0XCIgXG4gICAgICAgICAgaGVpZ2h0PVwiMTRcIiBcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW10LTAuNVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1sZWFkaW5nLVsxOHB4XVwiPlxuICAgICAgICAgIHt7IGVycm9yIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY3VzdG9tLWlucHV0L2N1c3RvbS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbS1pbnB1dC9jdXN0b20taW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsbUJBQW1CLEdBQ3BCLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFXckMsTUFBTSxPQUFPLG9CQUFvQjtJQU5qQztRQVVXLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxTQUFJLEdBQWMsTUFBTSxDQUFDO1FBRXpCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFjLElBQUksQ0FBQztRQUV2QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBTXRCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVwQzs7Ozs7O1dBTUc7UUFDTSwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFFOUIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXpDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRXpDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRXpDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUs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Q0FBQyxDQUFDLHdCQUF3QixDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztJQUNyQyxDQUFDOztpSEF6TVUsb0JBQW9CO3FHQUFwQixvQkFBb0IsMnFCQ2hCakMsMnNIQTRFQTsyRkQ1RGEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGtCQUFrQixRQUd0QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBSXJCLE9BQU87c0JBQWYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBU0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJTlZBTElEX1ZBUl9OQU1FX01FU1NBR0UsXG4gIFZBUl9OQU1FX0JPRFlfQ0hBUl9SRUdFWCxcbiAgaXNWYWxpZFZhcmlhYmxlTmFtZSxcbn0gZnJvbSAnLi4vdXRpbHMvdmFyaWFibGUtbmFtZS51dGlsJztcblxudHlwZSBJbnB1dFR5cGUgPSAndGV4dCcgfCAncGFzc3dvcmQnIHwgJ2VtYWlsJyB8ICdudW1iZXInIHwgJ3RlbCcgfCAndXJsJztcbnR5cGUgSW5wdXRTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY3VzdG9tLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgaW5wdXRJZD86IHN0cmluZztcblxuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gIEBJbnB1dCgpIHR5cGU6IElucHV0VHlwZSA9ICd0ZXh0JztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnJztcblxuICBASW5wdXQoKSBzaXplOiBJbnB1dFNpemUgPSAnbWQnO1xuXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcblxuICBASW5wdXQoKSBzaG93Q2hhckNvdW50ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaW5wdXRJbmxpbmVTdHlsZT86IHN0cmluZztcblxuICBASW5wdXQoKSBsYWJlbElubGluZVN0eWxlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNob3dQYXNzd29yZFRvZ2dsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHJlc3RyaWN0cyB0aGUgaW5wdXQgdG8gdGhlIGNhbm9uaWNhbCB2YXJpYWJsZS1uYW1lIHJ1bGVcbiAgICogKGBbQS1aYS16X11bQS1aYS16MC05X10qYCkuIERpc2FsbG93ZWQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgKHNwYWNlLCBgLmAsXG4gICAqIGAtYCwgYnJhY2tldHMsIGV0Yy4pIGFyZSBibG9ja2VkIGF0IHRoZSBrZXlzdHJva2UgbGV2ZWwsIGFuZCB0aGVcbiAgICogY2Fub25pY2FsIGBJTlZBTElEX1ZBUl9OQU1FX01FU1NBR0VgIGlzIHN1cmZhY2VkIGlubGluZS4gUGFzdGVkIHZhbHVlc1xuICAgKiBhcmUgYWxzbyByZS12YWxpZGF0ZWQuIFNlZSBgc3JjL2xpYi91dGlscy92YXJpYWJsZS1uYW1lLnV0aWwudHNgLlxuICAgKi9cbiAgQElucHV0KCkgdmFyaWFibGVOYW1lVmFsaWRhdGlvbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBPdXRwdXQoKSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKSBlbnRlclByZXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBpbnB1dFZhbHVlID0gJyc7XG4gIGlzRm9jdXNlZCA9IGZhbHNlO1xuICBwYXNzd29yZFZpc2libGUgPSBmYWxzZTtcbiAgaW50ZXJuYWxOYW1lRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IElucHV0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLnBhc3N3b3JkVmlzaWJsZSA/ICd0ZXh0JyA6IHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc1Bhc3N3b3JkVG9nZ2xlVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93UGFzc3dvcmRUb2dnbGUgJiYgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmICF0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgdG9nZ2xlUGFzc3dvcmRWaXNpYmxlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5wYXNzd29yZFZpc2libGUgPSAhdGhpcy5wYXNzd29yZFZpc2libGU7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10gJiYgY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5ld1ZhbHVlID0gY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPz8gJyc7XG5cbiAgICAgIGlmICh0aGlzLm1heExlbmd0aCAmJiBuZXdWYWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlLnN1YnN0cmluZygwLCB0aGlzLm1heExlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sndmFyaWFibGVOYW1lVmFsaWRhdGlvbiddIHx8IGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgIHRoaXMuZXZhbHVhdGVOYW1lVmFsaWRhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNwbGF5RXJyb3JzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogW107XG4gICAgaWYgKHRoaXMuaW50ZXJuYWxOYW1lRXJyb3IgJiYgbGlzdC5pbmRleE9mKHRoaXMuaW50ZXJuYWxOYW1lRXJyb3IpID09PSAtMSkge1xuICAgICAgbGlzdC5wdXNoKHRoaXMuaW50ZXJuYWxOYW1lRXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldCBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5RXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgaW5wdXRTaXplQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbSc6XG4gICAgICAgIHJldHVybiAnY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXRleHQteHMnO1xuICAgICAgY2FzZSAnbWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS1weC00IGNxYS1weS0yLjUgY3FhLXRleHQtc20nO1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgICByZXR1cm4gJ2NxYS1weC01IGNxYS1weS0zIGNxYS10ZXh0LWJhc2UnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtcHgtNCBjcWEtcHktMi41IGNxYS10ZXh0LXNtJztcbiAgICB9XG4gIH1cblxuICBnZXQgbGFiZWxTaXplQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbSc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQteHMgY3FhLW1iLTEnO1xuICAgICAgY2FzZSAnbWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LXNtIGNxYS1tYi0xLjUnO1xuICAgICAgY2FzZSAnbGcnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LWJhc2UgY3FhLW1iLTInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtdGV4dC1zbSBjcWEtbWItMS41JztcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgbmV4dFZhbHVlID0gdGFyZ2V0Py52YWx1ZSA/PyAnJztcbiAgICBcbiAgICBpZiAodGhpcy5zaG93Q2hhckNvdW50ICYmIHRoaXMubWF4TGVuZ3RoICYmIG5leHRWYWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgbmV4dFZhbHVlID0gbmV4dFZhbHVlLnN1YnN0cmluZygwLCB0aGlzLm1heExlbmd0aCk7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5pbnB1dFZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHRoaXMuZXZhbHVhdGVOYW1lVmFsaWRhdGlvbigpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmlucHV0VmFsdWUpO1xuICB9XG5cbiAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIC8vIFJlLWV2YWx1YXRlIHNvIGEgc3RhbGUgXCJ5b3UgdHJpZWQgdG8gdHlwZSBhIHNwYWNlXCIgZXJyb3IgZG9lc24ndCBsaW5nZXJcbiAgICAvLyBvbiBhIHZhbHVlIHRoYXQgaXMgY3VycmVudGx5IHZhbGlkLiBDcml0aWNhbCBiZWNhdXNlIGtleXN0cm9rZS1ibG9ja2luZ1xuICAgIC8vIHN1cHByZXNzZXMgdGhlIGBpbnB1dGAgZXZlbnQsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBjbGVhciBpdC5cbiAgICB0aGlzLmV2YWx1YXRlTmFtZVZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmJsdXJyZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5lbnRlclByZXNzZWQuZW1pdCh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFyaWFibGVOYW1lVmFsaWRhdGlvblxuICAgICAgICAmJiBldmVudC5rZXlcbiAgICAgICAgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMVxuICAgICAgICAmJiAhZXZlbnQuY3RybEtleVxuICAgICAgICAmJiAhZXZlbnQubWV0YUtleVxuICAgICAgICAmJiAhZXZlbnQuYWx0S2V5KSB7XG4gICAgICBpZiAoVkFSX05BTUVfQk9EWV9DSEFSX1JFR0VYLnRlc3QoZXZlbnQua2V5KSkge1xuICAgICAgICAvLyBBIHZhbGlkIGNoYXIgaXMgYWJvdXQgdG8gbGFuZCDigJQgcHJvYWN0aXZlbHkgY2xlYXIgYW55IHN0YWxlIGVycm9yXG4gICAgICAgIC8vIGZyb20gYSBwcmlvciBibG9ja2VkIGtleXN0cm9rZSBzbyB0aGUgdXNlciBzZWVzIHRoZSBtZXNzYWdlXG4gICAgICAgIC8vIGRpc2FwcGVhciB0aGUgbW9tZW50IHRoZSBmaWVsZCBpcyBtb3ZpbmcgYmFjayB0byBhIHZhbGlkIHN0YXRlLlxuICAgICAgICB0aGlzLmludGVybmFsTmFtZUVycm9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJsb2NrIHRoZSBkaXNhbGxvd2VkIGNoYXJhY3RlciAoc3BhY2UsIGAuYCwgYC1gLCBicmFja2V0cywgZXRjLikgYW5kXG4gICAgICAgIC8vIHN1cmZhY2UgdGhlIGZvcm1hdCBlcnJvciBzbyB0aGUgdXNlciB1bmRlcnN0YW5kcyB3aHkgdGhlIGtleXN0cm9rZVxuICAgICAgICAvLyBkaWRuJ3QgdGFrZSBlZmZlY3QuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxOYW1lRXJyb3IgPSBJTlZBTElEX1ZBUl9OQU1FX01FU1NBR0U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZU5hbWVWYWxpZGF0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YXJpYWJsZU5hbWVWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLmludGVybmFsTmFtZUVycm9yID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHJpbW1lZCA9ICh0aGlzLmlucHV0VmFsdWUgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxOYW1lRXJyb3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludGVybmFsTmFtZUVycm9yID0gaXNWYWxpZFZhcmlhYmxlTmFtZSh0cmltbWVkKSA/IG51bGwgOiBJTlZBTElEX1ZBUl9OQU1FX01FU1NBR0U7XG4gIH1cblxuICBnZXQgaW5wdXRTdHlsZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElubGluZVN0eWxlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IGxhYmVsU3R5bGVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxJbmxpbmVTdHlsZSB8fCAnJztcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIiBbc3R5bGUuZGlzcGxheV09XCInYmxvY2snXCIgW3N0eWxlLndpZHRoXT1cImZ1bGxXaWR0aCA/ICcxMDAlJyA6ICdhdXRvJ1wiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgW3N0eWxlLndpZHRoXT1cImZ1bGxXaWR0aCA/ICcxMDAlJyA6ICdhdXRvJ1wiPlxuICAgIDxsYWJlbCBcbiAgICAgICpuZ0lmPVwibGFiZWxcIlxuICAgICAgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMzNzQxNTFdXCJcbiAgICAgIFtuZ0NsYXNzXT1cImxhYmVsU2l6ZUNsYXNzZXNcIlxuICAgICAgW3N0eWxlXT1cImxhYmVsU3R5bGVzXCI+XG4gICAgICB7eyBsYWJlbCB9fVxuICAgICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlXCIgW3N0eWxlLndpZHRoXT1cImZ1bGxXaWR0aCA/ICcxMDAlJyA6ICdhdXRvJ1wiPlxuICAgICAgPGlucHV0XG4gICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cImlucHV0SWRcIlxuICAgICAgICBbdHlwZV09XCJlZmZlY3RpdmVUeXBlXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsICFjcWEtYm9yZGVyICFjcWEtYm9yZGVyLXNvbGlkICFjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1yb3VuZGVkLW1kIGNxYS1iZy13aGl0ZSBjcWEtZm9udC1bJ1NGX1Byb19UZXh0J10gY3FhLWZvbnQtbm9ybWFsIGNxYS1sZWFkaW5nLW5vcm1hbCBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXSBwbGFjZWhvbGRlcjpjcWEtdGV4dC1bIzlDQTNBRl0gY3FhLXRyYW5zaXRpb24tYWxsIGNxYS1kdXJhdGlvbi0yMDAgY3FhLW91dGxpbmUtbm9uZSB7eyBpbnB1dFNpemVDbGFzc2VzIH19XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdjcWEtYm9yZGVyLVsjRDFENURCXSBmb2N1czpjcWEtYm9yZGVyLVsjM0I4MkY2XSBmb2N1czpjcWEtcmluZy0xIGZvY3VzOmNxYS1yaW5nLVsjM0I4MkY2XSc6ICFoYXNFcnJvcixcbiAgICAgICAgICAnY3FhLWJvcmRlci1bI0VGNDQ0NF0gZm9jdXM6Y3FhLWJvcmRlci1bI0VGNDQ0NF0gZm9jdXM6Y3FhLXJpbmctMSBmb2N1czpjcWEtcmluZy1bI0VGNDQ0NF0nOiBoYXNFcnJvcixcbiAgICAgICAgICAnY3FhLWJnLVsjRjlGQUZCXSBjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS10ZXh0LVsjOUNBM0FGXSc6IGRpc2FibGVkLFxuICAgICAgICAgICdjcWEtb3V0bGluZS1ub25lJzogdHJ1ZSxcbiAgICAgICAgICAnY3FhLXByLTEwJzogaXNQYXNzd29yZFRvZ2dsZVZpc2libGVcbiAgICAgICAgfVwiXG4gICAgICAgIFtzdHlsZV09XCJpbnB1dFN0eWxlc1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFt2YWx1ZV09XCJpbnB1dFZhbHVlXCJcbiAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JcIlxuICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiaXNQYXNzd29yZFRvZ2dsZVZpc2libGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWluc2V0LXktMCBjcWEtcmlnaHQtMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy0xMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci0wIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdGV4dC1bIzY0NzQ4Ql0gaG92ZXI6Y3FhLXRleHQtWyMwRjE3MkFdXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwYXNzd29yZFZpc2libGUgPyAnSGlkZSBwYXNzd29yZCcgOiAnU2hvdyBwYXNzd29yZCdcIlxuICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwicGFzc3dvcmRWaXNpYmxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYXNzd29yZFZpc2libGUoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWxlYWRpbmctWzE4cHhdXCIgc3R5bGU9XCJmb250LXNpemU6MThweDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7XCI+XG4gICAgICAgICAge3sgcGFzc3dvcmRWaXNpYmxlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5JyB9fVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0NoYXJDb3VudCAmJiBtYXhMZW5ndGhcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWVuZCBjcWEtbXQtMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzZCNzI4MF1cIj5cbiAgICAgICAge3sgaW5wdXRWYWx1ZS5sZW5ndGggfX0ve3sgbWF4TGVuZ3RoIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaGFzRXJyb3JcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW10LTEuNVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZGlzcGxheUVycm9yc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMS41XCI+XG4gICAgICAgIDxzdmcgXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFxuICAgICAgICAgIHdpZHRoPVwiMTRcIiBcbiAgICAgICAgICBoZWlnaHQ9XCIxNFwiIFxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtbXQtMC41XCI+XG4gICAgICAgICAgPHBhdGggZD1cIk03IDEuNzVDNC4xIDEuNzUgMS43NSA0LjEgMS43NSA3QzEuNzUgOS45IDQuMSAxMi4yNSA3IDEyLjI1QzkuOSAxMi4yNSAxMi4yNSA5LjkgMTIuMjUgN0MxMi4yNSA0LjEgOS45IDEuNzUgNyAxLjc1Wk03IDkuNjI1QzYuNjU2MjUgOS42MjUgNi4zNzUgOS4zNDM3NSA2LjM3NSA5VjdDNi4zNzUgNi42NTYyNSA2LjY1NjI1IDYuMzc1IDcgNi4zNzVDNy4zNDM3NSA2LjM3NSA3LjYyNSA2LjY1NjI1IDcuNjI1IDdWOUM3LjYyNSA5LjM0Mzc1IDcuMzQzNzUgOS42MjUgNyA5LjYyNVpNNy42MjUgNS4yNUg2LjM3NVY0SDcuNjI1VjUuMjVaXCIgZmlsbD1cIiNFRjQ0NDRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|
|
@@ -90,7 +90,7 @@ export class NamePromptModalComponent {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
NamePromptModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NamePromptModalComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
93
|
-
NamePromptModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NamePromptModalComponent, selector: "cqa-name-prompt-modal", inputs: { isOpen: "isOpen", title: "title", description: "description", label: "label", placeholder: "placeholder", submitButtonText: "submitButtonText", cancelButtonText: "cancelButtonText", isSubmitting: "isSubmitting", name: "name" }, outputs: { nameChange: "nameChange", submitted: "submitted", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div *ngIf=\"isOpen\"\n id=\"cqa-ui-root\"\n style=\"position: fixed; inset: 0; z-index: 1000;\">\n <div class=\"cqa-fixed cqa-inset-0 cqa-bg-black/40\"\n (click)=\"onBackdropClick()\"></div>\n\n <div class=\"cqa-fixed cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-p-4 cqa-pointer-events-none\">\n <div class=\"cqa-relative cqa-w-full cqa-max-w-[480px] cqa-bg-white cqa-rounded-2xl cqa-shadow-md cqa-border cqa-border-border-default cqa-pointer-events-auto\"\n (keydown.escape)=\"onEscape($event)\"\n tabindex=\"-1\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-p-6 cqa-pb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-title cqa-m-0\">{{ title }}</h2>\n <p *ngIf=\"description\"\n class=\"cqa-text-sm cqa-text-description cqa-m-0\">\n {{ description }}\n </p>\n </div>\n <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-h-6 cqa-w-6 cqa-rounded cqa-bg-transparent cqa-border-0 cqa-text-description hover:cqa-text-title\"\n [class.cqa-cursor-pointer]=\"!isSubmitting\"\n [class.cqa-cursor-not-allowed]=\"isSubmitting\"\n [class.cqa-opacity-50]=\"isSubmitting\"\n [disabled]=\"isSubmitting\"\n (click)=\"onClose()\"\n aria-label=\"Close\">\n <mat-icon class=\"cqa-text-[20px] cqa-leading-5 cqa-h-5 cqa-w-5\">close</mat-icon>\n </button>\n </div>\n\n <div class=\"cqa-px-6 cqa-pb-5\">\n <cqa-custom-input\n [label]=\"label\"\n [placeholder]=\"placeholder\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrors\"\n (valueChange)=\"onNameChange($event)\"\n (enterPressed)=\"submit()\">\n </cqa-custom-input>\n </div>\n\n <div class=\"cqa-border-t cqa-border-border-default cqa-px-6 cqa-py-4 cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <cqa-button variant=\"outlined\"\n [text]=\"cancelButtonText\"\n btnSize=\"lg\"\n [fullWidth]=\"true\"\n [disabled]=\"isSubmitting\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button variant=\"filled\"\n [text]=\"submitButtonText\"\n btnSize=\"lg\"\n [fullWidth]=\"true\"\n [loading]=\"isSubmitting\"\n [disabled]=\"!isValid || isSubmitting\"\n (clicked)=\"submit()\">\n </cqa-button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.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: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
93
|
+
NamePromptModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NamePromptModalComponent, selector: "cqa-name-prompt-modal", inputs: { isOpen: "isOpen", title: "title", description: "description", label: "label", placeholder: "placeholder", submitButtonText: "submitButtonText", cancelButtonText: "cancelButtonText", isSubmitting: "isSubmitting", name: "name" }, outputs: { nameChange: "nameChange", submitted: "submitted", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div *ngIf=\"isOpen\"\n id=\"cqa-ui-root\"\n style=\"position: fixed; inset: 0; z-index: 1000;\">\n <div class=\"cqa-fixed cqa-inset-0 cqa-bg-black/40\"\n (click)=\"onBackdropClick()\"></div>\n\n <div class=\"cqa-fixed cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-p-4 cqa-pointer-events-none\">\n <div class=\"cqa-relative cqa-w-full cqa-max-w-[480px] cqa-bg-white cqa-rounded-2xl cqa-shadow-md cqa-border cqa-border-border-default cqa-pointer-events-auto\"\n (keydown.escape)=\"onEscape($event)\"\n tabindex=\"-1\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-p-6 cqa-pb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-title cqa-m-0\">{{ title }}</h2>\n <p *ngIf=\"description\"\n class=\"cqa-text-sm cqa-text-description cqa-m-0\">\n {{ description }}\n </p>\n </div>\n <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-h-6 cqa-w-6 cqa-rounded cqa-bg-transparent cqa-border-0 cqa-text-description hover:cqa-text-title\"\n [class.cqa-cursor-pointer]=\"!isSubmitting\"\n [class.cqa-cursor-not-allowed]=\"isSubmitting\"\n [class.cqa-opacity-50]=\"isSubmitting\"\n [disabled]=\"isSubmitting\"\n (click)=\"onClose()\"\n aria-label=\"Close\">\n <mat-icon class=\"cqa-text-[20px] cqa-leading-5 cqa-h-5 cqa-w-5\">close</mat-icon>\n </button>\n </div>\n\n <div class=\"cqa-px-6 cqa-pb-5\">\n <cqa-custom-input\n [label]=\"label\"\n [placeholder]=\"placeholder\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrors\"\n (valueChange)=\"onNameChange($event)\"\n (enterPressed)=\"submit()\">\n </cqa-custom-input>\n </div>\n\n <div class=\"cqa-border-t cqa-border-border-default cqa-px-6 cqa-py-4 cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <cqa-button variant=\"outlined\"\n [text]=\"cancelButtonText\"\n btnSize=\"lg\"\n [fullWidth]=\"true\"\n [disabled]=\"isSubmitting\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button variant=\"filled\"\n [text]=\"submitButtonText\"\n btnSize=\"lg\"\n [fullWidth]=\"true\"\n [loading]=\"isSubmitting\"\n [disabled]=\"!isValid || isSubmitting\"\n (clicked)=\"submit()\">\n </cqa-button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle", "variableNameValidation"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
94
94
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NamePromptModalComponent, decorators: [{
|
|
95
95
|
type: Component,
|
|
96
96
|
args: [{ selector: 'cqa-name-prompt-modal', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div *ngIf=\"isOpen\"\n id=\"cqa-ui-root\"\n style=\"position: fixed; inset: 0; z-index: 1000;\">\n <div class=\"cqa-fixed cqa-inset-0 cqa-bg-black/40\"\n (click)=\"onBackdropClick()\"></div>\n\n <div class=\"cqa-fixed cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-p-4 cqa-pointer-events-none\">\n <div class=\"cqa-relative cqa-w-full cqa-max-w-[480px] cqa-bg-white cqa-rounded-2xl cqa-shadow-md cqa-border cqa-border-border-default cqa-pointer-events-auto\"\n (keydown.escape)=\"onEscape($event)\"\n tabindex=\"-1\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-p-6 cqa-pb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-title cqa-m-0\">{{ title }}</h2>\n <p *ngIf=\"description\"\n class=\"cqa-text-sm cqa-text-description cqa-m-0\">\n {{ description }}\n </p>\n </div>\n <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-h-6 cqa-w-6 cqa-rounded cqa-bg-transparent cqa-border-0 cqa-text-description hover:cqa-text-title\"\n [class.cqa-cursor-pointer]=\"!isSubmitting\"\n [class.cqa-cursor-not-allowed]=\"isSubmitting\"\n [class.cqa-opacity-50]=\"isSubmitting\"\n [disabled]=\"isSubmitting\"\n (click)=\"onClose()\"\n aria-label=\"Close\">\n <mat-icon class=\"cqa-text-[20px] cqa-leading-5 cqa-h-5 cqa-w-5\">close</mat-icon>\n </button>\n </div>\n\n <div class=\"cqa-px-6 cqa-pb-5\">\n <cqa-custom-input\n [label]=\"label\"\n [placeholder]=\"placeholder\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrors\"\n (valueChange)=\"onNameChange($event)\"\n (enterPressed)=\"submit()\">\n </cqa-custom-input>\n </div>\n\n <div class=\"cqa-border-t cqa-border-border-default cqa-px-6 cqa-py-4 cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <cqa-button variant=\"outlined\"\n [text]=\"cancelButtonText\"\n btnSize=\"lg\"\n [fullWidth]=\"true\"\n [disabled]=\"isSubmitting\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button variant=\"filled\"\n [text]=\"submitButtonText\"\n btnSize=\"lg\"\n [fullWidth]=\"true\"\n [loading]=\"isSubmitting\"\n [disabled]=\"!isValid || isSubmitting\"\n (clicked)=\"submit()\">\n </cqa-button>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
@@ -121,7 +121,7 @@ export class ExportCodeModalComponent {
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
ExportCodeModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ExportCodeModalComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }, { token: i1.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
124
|
-
ExportCodeModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: { isOpen: "isOpen", cases: "cases", disabled: "disabled" }, outputs: { closeModal: "closeModal", export: "export" }, ngImport: i0, template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Framework Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2\">Choose automation framework:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-border-gray-300]=\"framework !== 'WEBDRIVER_IO'\"\n (click)=\"framework = 'WEBDRIVER_IO'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'WEBDRIVER_IO'\"\n (click)=\"$event.stopPropagation()\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">WebdriverIO</span>\n </div>\n </div>\n </div>\n\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-border-gray-300]=\"framework !== 'SELENIUM_JAVA'\"\n (click)=\"framework = 'SELENIUM_JAVA'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'SELENIUM_JAVA'\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Selenium Java</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Export Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2 cqa-mt-3\">Choose how you want to export the test case code:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(TC-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.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"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
124
|
+
ExportCodeModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: { isOpen: "isOpen", cases: "cases", disabled: "disabled" }, outputs: { closeModal: "closeModal", export: "export" }, ngImport: i0, template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Framework Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2\">Choose automation framework:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-border-gray-300]=\"framework !== 'WEBDRIVER_IO'\"\n (click)=\"framework = 'WEBDRIVER_IO'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'WEBDRIVER_IO'\"\n (click)=\"$event.stopPropagation()\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">WebdriverIO</span>\n </div>\n </div>\n </div>\n\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-border-gray-300]=\"framework !== 'SELENIUM_JAVA'\"\n (click)=\"framework = 'SELENIUM_JAVA'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'SELENIUM_JAVA'\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Selenium Java</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Export Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2 cqa-mt-3\">Choose how you want to export the test case code:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(TC-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle", "variableNameValidation"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
125
125
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ExportCodeModalComponent, decorators: [{
|
|
126
126
|
type: Component,
|
|
127
127
|
args: [{ selector: 'cqa-export-code-modal', template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Framework Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2\">Choose automation framework:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-border-gray-300]=\"framework !== 'WEBDRIVER_IO'\"\n (click)=\"framework = 'WEBDRIVER_IO'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'WEBDRIVER_IO'\"\n (click)=\"$event.stopPropagation()\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">WebdriverIO</span>\n </div>\n </div>\n </div>\n\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-border-gray-300]=\"framework !== 'SELENIUM_JAVA'\"\n (click)=\"framework = 'SELENIUM_JAVA'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'SELENIUM_JAVA'\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Selenium Java</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Export Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2 cqa-mt-3\">Choose how you want to export the test case code:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(TC-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
@@ -62,13 +62,7 @@ export class ManageColumnsDialogComponent {
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
this.items = this.items.map((it, i) => i === index ? { ...it, name: value } : it);
|
|
65
|
-
|
|
66
|
-
if (trimmed && !isValidVariableName(trimmed)) {
|
|
67
|
-
this.columnsError = INVALID_VAR_NAME_MESSAGE;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
this.columnsError = null;
|
|
71
|
-
}
|
|
65
|
+
this.columnsError = null;
|
|
72
66
|
}
|
|
73
67
|
onRemove(index) {
|
|
74
68
|
const item = this.items[index];
|
|
@@ -80,13 +74,7 @@ export class ManageColumnsDialogComponent {
|
|
|
80
74
|
}
|
|
81
75
|
onNewColNameChange(value) {
|
|
82
76
|
this.newColName = value;
|
|
83
|
-
|
|
84
|
-
if (trimmed && !isValidVariableName(trimmed)) {
|
|
85
|
-
this.columnsError = INVALID_VAR_NAME_MESSAGE;
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
this.columnsError = null;
|
|
89
|
-
}
|
|
77
|
+
this.columnsError = null;
|
|
90
78
|
}
|
|
91
79
|
onAdd() {
|
|
92
80
|
const trimmed = (this.newColName || '').trim();
|
|
@@ -142,13 +130,13 @@ export class ManageColumnsDialogComponent {
|
|
|
142
130
|
}
|
|
143
131
|
}
|
|
144
132
|
ManageColumnsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
-
ManageColumnsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ManageColumnsDialogComponent, selector: "cqa-manage-columns-dialog", inputs: { columns: "columns", lockedColumns: "lockedColumns" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"manage-cols-stack\">\n\n <div class=\"manage-cols-drop-list\"\n [dndDropzone]=\"['col']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n class=\"manage-cols-row\">\n <span class=\"manage-cols-handle\"\n [dndDraggable]=\"item\"\n [dndDisableIf]=\"isLocked(item)\"\n dndType=\"col\"\n dndEffectAllowed=\"move\">\n <mat-icon>drag_indicator</mat-icon>\n </span>\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"item.name\"\n [fullWidth]=\"true\"\n [disabled]=\"isLocked(item)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onRename(i, $event)\">\n </cqa-custom-input>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move up\"\n [disabled]=\"i === 0\"\n (click)=\"onMove(i, -1)\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move down\"\n [disabled]=\"i === items.length - 1\"\n (click)=\"onMove(i, 1)\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n title=\"Delete column\"\n [disabled]=\"isLocked(item)\"\n (click)=\"onRemove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"manage-cols-footer\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"newColName\"\n [fullWidth]=\"true\"\n placeholder=\"New column name (e.g. currency)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNewColNameChange($event)\"\n (enterPressed)=\"onAdd()\">\n </cqa-custom-input>\n <cqa-button\n variant=\"outlined\"\n icon=\"add\"\n text=\"Add column\"\n [disabled]=\"!canAdd\"\n (clicked)=\"onAdd()\">\n </cqa-button>\n </div>\n\n <span *ngIf=\"columnsError\" class=\"manage-cols-error\">{{ columnsError }}</span>\n\n <div class=\"manage-cols-hint\">\n <strong>Heads up:</strong>\n Deleting a column removes its data from every environment. Renaming keeps the data in place.\n </div>\n\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.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: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i4.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i4.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
133
|
+
ManageColumnsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ManageColumnsDialogComponent, selector: "cqa-manage-columns-dialog", inputs: { columns: "columns", lockedColumns: "lockedColumns" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"manage-cols-stack\">\n\n <div class=\"manage-cols-drop-list\"\n [dndDropzone]=\"['col']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n class=\"manage-cols-row\">\n <span class=\"manage-cols-handle\"\n [dndDraggable]=\"item\"\n [dndDisableIf]=\"isLocked(item)\"\n dndType=\"col\"\n dndEffectAllowed=\"move\">\n <mat-icon>drag_indicator</mat-icon>\n </span>\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"item.name\"\n [fullWidth]=\"true\"\n [disabled]=\"isLocked(item)\"\n [variableNameValidation]=\"true\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onRename(i, $event)\">\n </cqa-custom-input>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move up\"\n [disabled]=\"i === 0\"\n (click)=\"onMove(i, -1)\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move down\"\n [disabled]=\"i === items.length - 1\"\n (click)=\"onMove(i, 1)\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n title=\"Delete column\"\n [disabled]=\"isLocked(item)\"\n (click)=\"onRemove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"manage-cols-footer\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"newColName\"\n [fullWidth]=\"true\"\n placeholder=\"New column name (e.g. currency)\"\n [variableNameValidation]=\"true\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNewColNameChange($event)\"\n (enterPressed)=\"onAdd()\">\n </cqa-custom-input>\n <cqa-button\n variant=\"outlined\"\n icon=\"add\"\n text=\"Add column\"\n [disabled]=\"!canAdd\"\n (clicked)=\"onAdd()\">\n </cqa-button>\n </div>\n\n <span *ngIf=\"columnsError\" class=\"manage-cols-error\">{{ columnsError }}</span>\n\n <div class=\"manage-cols-hint\">\n <strong>Heads up:</strong>\n Deleting a column removes its data from every environment. Renaming keeps the data in place.\n </div>\n\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle", "variableNameValidation"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i4.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i4.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
146
134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, decorators: [{
|
|
147
135
|
type: Component,
|
|
148
|
-
args: [{ selector: 'cqa-manage-columns-dialog', host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"manage-cols-stack\">\n\n <div class=\"manage-cols-drop-list\"\n [dndDropzone]=\"['col']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n class=\"manage-cols-row\">\n <span class=\"manage-cols-handle\"\n [dndDraggable]=\"item\"\n [dndDisableIf]=\"isLocked(item)\"\n dndType=\"col\"\n dndEffectAllowed=\"move\">\n <mat-icon>drag_indicator</mat-icon>\n </span>\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"item.name\"\n [fullWidth]=\"true\"\n [disabled]=\"isLocked(item)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onRename(i, $event)\">\n </cqa-custom-input>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move up\"\n [disabled]=\"i === 0\"\n (click)=\"onMove(i, -1)\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move down\"\n [disabled]=\"i === items.length - 1\"\n (click)=\"onMove(i, 1)\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n title=\"Delete column\"\n [disabled]=\"isLocked(item)\"\n (click)=\"onRemove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"manage-cols-footer\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"newColName\"\n [fullWidth]=\"true\"\n placeholder=\"New column name (e.g. currency)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNewColNameChange($event)\"\n (enterPressed)=\"onAdd()\">\n </cqa-custom-input>\n <cqa-button\n variant=\"outlined\"\n icon=\"add\"\n text=\"Add column\"\n [disabled]=\"!canAdd\"\n (clicked)=\"onAdd()\">\n </cqa-button>\n </div>\n\n <span *ngIf=\"columnsError\" class=\"manage-cols-error\">{{ columnsError }}</span>\n\n <div class=\"manage-cols-hint\">\n <strong>Heads up:</strong>\n Deleting a column removes its data from every environment. Renaming keeps the data in place.\n </div>\n\n</div>\n" }]
|
|
136
|
+
args: [{ selector: 'cqa-manage-columns-dialog', host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"manage-cols-stack\">\n\n <div class=\"manage-cols-drop-list\"\n [dndDropzone]=\"['col']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n class=\"manage-cols-row\">\n <span class=\"manage-cols-handle\"\n [dndDraggable]=\"item\"\n [dndDisableIf]=\"isLocked(item)\"\n dndType=\"col\"\n dndEffectAllowed=\"move\">\n <mat-icon>drag_indicator</mat-icon>\n </span>\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"item.name\"\n [fullWidth]=\"true\"\n [disabled]=\"isLocked(item)\"\n [variableNameValidation]=\"true\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onRename(i, $event)\">\n </cqa-custom-input>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move up\"\n [disabled]=\"i === 0\"\n (click)=\"onMove(i, -1)\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move down\"\n [disabled]=\"i === items.length - 1\"\n (click)=\"onMove(i, 1)\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n title=\"Delete column\"\n [disabled]=\"isLocked(item)\"\n (click)=\"onRemove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"manage-cols-footer\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"newColName\"\n [fullWidth]=\"true\"\n placeholder=\"New column name (e.g. currency)\"\n [variableNameValidation]=\"true\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNewColNameChange($event)\"\n (enterPressed)=\"onAdd()\">\n </cqa-custom-input>\n <cqa-button\n variant=\"outlined\"\n icon=\"add\"\n text=\"Add column\"\n [disabled]=\"!canAdd\"\n (clicked)=\"onAdd()\">\n </cqa-button>\n </div>\n\n <span *ngIf=\"columnsError\" class=\"manage-cols-error\">{{ columnsError }}</span>\n\n <div class=\"manage-cols-hint\">\n <strong>Heads up:</strong>\n Deleting a column removes its data from every environment. Renaming keeps the data in place.\n </div>\n\n</div>\n" }]
|
|
149
137
|
}], propDecorators: { columns: [{
|
|
150
138
|
type: Input
|
|
151
139
|
}], lockedColumns: [{
|
|
152
140
|
type: Input
|
|
153
141
|
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbWFuYWdlLWNvbHVtbnMtZGlhbG9nL21hbmFnZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hbmFnZS1jb2x1bW5zLWRpYWxvZy9tYW5hZ2UtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7QUFhNUYsTUFBTSxPQUFPLDRCQUE0QjtJQUx6QztRQU1XLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFFL0IsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFDaEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFFbkMsZUFBVSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQXVCLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFckUsWUFBTyxHQUFHLENBQUMsQ0FBQztLQXNIckI7SUFwSEMsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNuQixZQUFZLEVB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RSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7OEJBR3pELE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEbmREcm9wRXZlbnQgfSBmcm9tICduZ3gtZHJhZy1kcm9wJztcblxuaW1wb3J0IHtcbiAgTWFuYWdlQ29sdW1uc0RpYWxvZ0NvbHVtbixcbiAgTWFuYWdlQ29sdW1uc0RpYWxvZ1ZhbHVlLFxufSBmcm9tICcuL21hbmFnZS1jb2x1bW5zLWRpYWxvZy5tb2RlbHMnO1xuaW1wb3J0IHsgSU5WQUxJRF9WQVJfTkFNRV9NRVNTQUdFLCBpc1ZhbGlkVmFyaWFibGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvdmFyaWFibGUtbmFtZS51dGlsJztcblxuaW50ZXJmYWNlIE1hbmFnZUNvbHVtbnNJdGVtIHtcbiAgdWlkOiBudW1iZXI7XG4gIG9yaWdpbmFsTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbWFuYWdlLWNvbHVtbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hbmFnZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcsIHN0eWxlOiAnZGlzcGxheTpibG9jazt3aWR0aDoxMDAlOycgfSxcbn0pXG5leHBvcnQgY2xhc3MgTWFuYWdlQ29sdW1uc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGxvY2tlZENvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cbiAgcHVibGljIGl0ZW1zOiBNYW5hZ2VDb2x1bW5zSXRlbVtdID0gW107XG4gIHB1YmxpYyBuZXdDb2xOYW1lID0gJyc7XG4gIHB1YmxpYyBjb2x1bW5zRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyB0cmFja0J5VWlkID0gKF86IG51bWJlciwgaXRlbTogTWFuYWdlQ29sdW1uc0l0ZW0pOiBudW1iZXIgPT4gaXRlbS51aWQ7XG5cbiAgcHJpdmF0ZSBuZXh0VWlkID0gMTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbml0aWFsID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpID8gdGhpcy5jb2x1bW5zIDogW107XG4gICAgdGhpcy5pdGVtcyA9IGluaXRpYWwubWFwKG5hbWUgPT4gKHtcbiAgICAgIHVpZDogdGhpcy5uZXh0VWlkKyssXG4gICAgICBvcmlnaW5hbE5hbWU6IG5hbWUsXG4gICAgICBuYW1lLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0xvY2tlZChpdGVtOiBNYW5hZ2VDb2x1bW5zSXRlbSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5sb2NrZWRDb2x1bW5zIHx8IHRoaXMubG9ja2VkQ29sdW1ucy5sZW5ndGggPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKGl0ZW0ub3JpZ2luYWxOYW1lICE9IG51bGwgJiYgdGhpcy5sb2NrZWRDb2x1bW5zLmluZGV4T2YoaXRlbS5vcmlnaW5hbE5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvY2tlZENvbHVtbnMuaW5kZXhPZihpdGVtLm5hbWUpICE9PSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRuZERyb3AoZXZlbnQ6IERuZERyb3BFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGRyYWdnZWQgPSBldmVudC5kYXRhIGFzIE1hbmFnZUNvbHVtbnNJdGVtIHwgbnVsbDtcbiAgICBpZiAoIWRyYWdnZWQgfHwgZXZlbnQuaW5kZXggPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBmcm9tID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXQgPT4gaXQudWlkID09PSBkcmFnZ2VkLnVpZCk7XG4gICAgaWYgKGZyb20gPCAwKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IG5leHQgPSB0aGlzLml0ZW1zLnNsaWNlKCk7XG4gICAgbmV4dC5zcGxpY2UoZnJvbSwgMSk7XG4gICAgY29uc3QgdG8gPSBldmVudC5pbmRleCA+IGZyb20gPyBldmVudC5pbmRleCAtIDEgOiBldmVudC5pbmRleDtcbiAgICBuZXh0LnNwbGljZSh0bywgMCwgZHJhZ2dlZCk7XG4gICAgdGhpcy5pdGVtcyA9IG5leHQ7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlKGluZGV4OiBudW1iZXIsIGRpcjogLTEgfCAxKTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gaW5kZXggKyBkaXI7XG4gICAgaWYgKHRhcmdldCA8IDAgfHwgdGFyZ2V0ID49IHRoaXMuaXRlbXMubGVuZ3RoKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IG5leHQgPSB0aGlzLml0ZW1zLnNsaWNlKCk7XG4gICAgW25leHRbaW5kZXhdLCBuZXh0W3RhcmdldF1dID0gW25leHRbdGFyZ2V0XSwgbmV4dFtpbmRleF1dO1xuICAgIHRoaXMuaXRlbXMgPSBuZXh0O1xuICB9XG5cbiAgcHVibGljIG9uUmVuYW1lKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNbaW5kZXhdKSB7IHJldHVybjsgfVxuICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXQsIGkpID0+IGkgPT09IGluZGV4ID8geyAuLi5pdCwgbmFtZTogdmFsdWUgfSA6IGl0KTtcbiAgICBjb25zdCB0cmltbWVkID0gKHZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQgJiYgIWlzVmFsaWRWYXJpYWJsZU5hbWUodHJpbW1lZCkpIHtcbiAgICAgIHRoaXMuY29sdW1uc0Vycm9yID0gSU5WQUxJRF9WQVJfTkFNRV9NRVNTQUdFO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XG4gICAgaWYgKCFpdGVtIHx8IHRoaXMuaXNMb2NrZWQoaXRlbSkpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uTmV3Q29sTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uZXdDb2xOYW1lID0gdmFsdWU7XG4gICAgY29uc3QgdHJpbW1lZCA9ICh2YWx1ZSA/PyAnJykudHJpbSgpO1xuICAgIGlmICh0cmltbWVkICYmICFpc1ZhbGlkVmFyaWFibGVOYW1lKHRyaW1tZWQpKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9IElOVkFMSURfVkFSX05BTUVfTUVTU0FHRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkFkZCgpOiB2b2lkIHtcbiAgICBjb25zdCB0cmltbWVkID0gKHRoaXMubmV3Q29sTmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZCB8fCB0aGlzLml0ZW1zSGFzTmFtZSh0cmltbWVkKSB8fCAhaXNWYWxpZFZhcmlhYmxlTmFtZSh0cmltbWVkKSkgeyByZXR1cm47IH1cbiAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuaXRlbXMsIHtcbiAgICAgIHVpZDogdGhpcy5uZXh0VWlkKyssXG4gICAgICBvcmlnaW5hbE5hbWU6IG51bGwsXG4gICAgICBuYW1lOiB0cmltbWVkLFxuICAgIH1dO1xuICAgIHRoaXMubmV3Q29sTmFtZSA9ICcnO1xuICAgIHRoaXMuY29sdW1uc0Vycm9yID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuQWRkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSAodGhpcy5uZXdDb2xOYW1lIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICghaXNWYWxpZFZhcmlhYmxlTmFtZSh0cmltbWVkKSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICByZXR1cm4gIXRoaXMuaXRlbXNIYXNOYW1lKHRyaW1tZWQpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKCk6IE1hbmFnZUNvbHVtbnNEaWFsb2dWYWx1ZSB8IG51bGwge1xuICAgIGNvbnN0IHRyaW1tZWQ6IE1hbmFnZUNvbHVtbnNEaWFsb2dDb2x1bW5bXSA9IHRoaXMuaXRlbXMubWFwKGl0ID0+ICh7XG4gICAgICBvcmlnaW5hbE5hbWU6IGl0Lm9yaWdpbmFsTmFtZSxcbiAgICAgIG5hbWU6IChpdC5uYW1lIHx8ICcnKS50cmltKCksXG4gICAgfSkpO1xuXG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9ICdBdCBsZWFzdCBvbmUgY29sdW1uIGlzIHJlcXVpcmVkLic7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWQuc29tZShjID0+IGMubmFtZS5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9ICdDb2x1bW4gbmFtZXMgY2Fubm90IGJlIGVtcHR5Lic7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWQuc29tZShjID0+ICFpc1ZhbGlkVmFyaWFibGVOYW1lKGMubmFtZSkpKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9IElOVkFMSURfVkFSX05BTUVfTUVTU0FHRTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBsb3dlcmVkID0gdHJpbW1lZC5tYXAoYyA9PiBjLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKG5ldyBTZXQobG93ZXJlZCkuc2l6ZSAhPT0gdHJpbW1lZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29sdW1uc0Vycm9yID0gJ0NvbHVtbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS4nO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICAgIHJldHVybiB7IGNvbHVtbnM6IHRyaW1tZWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgaXRlbXNIYXNOYW1lKGNhbmRpZGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXJlZCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzLml0ZW1zLnNvbWUoaXQgPT4gKGl0Lm5hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBsb3dlcmVkKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1hbmFnZS1jb2xzLXN0YWNrXCI+XG5cbiAgPGRpdiBjbGFzcz1cIm1hbmFnZS1jb2xzLWRyb3AtbGlzdFwiXG4gICAgICAgW2RuZERyb3B6b25lXT1cIlsnY29sJ11cIlxuICAgICAgIGRuZEVmZmVjdEFsbG93ZWQ9XCJtb3ZlXCJcbiAgICAgICBkbmREcmFnb3ZlckNsYXNzPVwiZG5kRHJhZ292ZXJcIlxuICAgICAgIChkbmREcm9wKT1cIm9uRG5kRHJvcCgkZXZlbnQpXCI+XG4gICAgPGRpdiBkbmRQbGFjZWhvbGRlclJlZiBjbGFzcz1cIm1hbmFnZS1jb2xzLXBsYWNlaG9sZGVyXCI+RHJvcCBoZXJlPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVVpZFwiXG4gICAgICAgICBjbGFzcz1cIm1hbmFnZS1jb2xzLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYW5hZ2UtY29scy1oYW5kbGVcIlxuICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtkbmREaXNhYmxlSWZdPVwiaXNMb2NrZWQoaXRlbSlcIlxuICAgICAgICAgICAgZG5kVHlwZT1cImNvbFwiXG4gICAgICAgICAgICBkbmRFZmZlY3RBbGxvd2VkPVwibW92ZVwiPlxuICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xXCJcbiAgICAgICAgW3ZhbHVlXT1cIml0ZW0ubmFtZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZChpdGVtKVwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogJ0ludGVyJywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUmVuYW1lKGksICRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFuYWdlLWNvbHMtaWNvbi1idG5cIlxuICAgICAgICAgICAgICB0aXRsZT1cIk1vdmUgdXBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaSA9PT0gMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbk1vdmUoaSwgLTEpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1hbmFnZS1jb2xzLWljb24tYnRuXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJNb3ZlIGRvd25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaSA9PT0gaXRlbXMubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbk1vdmUoaSwgMSlcIj5cbiAgICAgICAgPG1hdC1pY29uPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYW5hZ2UtY29scy1pY29uLWJ0biBtYW5hZ2UtY29scy1pY29uLWJ0bi1kYW5nZXJcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjb2x1bW5cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2NrZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmUoaSlcIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1hbmFnZS1jb2xzLWZvb3RlclwiPlxuICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICBjbGFzcz1cImNxYS1mbGV4LTFcIlxuICAgICAgW3ZhbHVlXT1cIm5ld0NvbE5hbWVcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiTmV3IGNvbHVtbiBuYW1lIChlLmcuIGN1cnJlbmN5KVwiXG4gICAgICBpbnB1dElubGluZVN0eWxlPVwiZm9udC1mYW1pbHk6ICdJbnRlcicsIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlO1wiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25OZXdDb2xOYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGVudGVyUHJlc3NlZCk9XCJvbkFkZCgpXCI+XG4gICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgaWNvbj1cImFkZFwiXG4gICAgICB0ZXh0PVwiQWRkIGNvbHVtblwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZFwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkFkZCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8c3BhbiAqbmdJZj1cImNvbHVtbnNFcnJvclwiIGNsYXNzPVwibWFuYWdlLWNvbHMtZXJyb3JcIj57eyBjb2x1bW5zRXJyb3IgfX08L3NwYW4+XG5cbiAgPGRpdiBjbGFzcz1cIm1hbmFnZS1jb2xzLWhpbnRcIj5cbiAgICA8c3Ryb25nPkhlYWRzIHVwOjwvc3Ryb25nPlxuICAgIERlbGV0aW5nIGEgY29sdW1uIHJlbW92ZXMgaXRzIGRhdGEgZnJvbSBldmVyeSBlbnZpcm9ubWVudC4gUmVuYW1pbmcga2VlcHMgdGhlIGRhdGEgaW4gcGxhY2UuXG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbWFuYWdlLWNvbHVtbnMtZGlhbG9nL21hbmFnZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hbmFnZS1jb2x1bW5zLWRpYWxvZy9tYW5hZ2UtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7QUFhNUYsTUFBTSxPQUFPLDRCQUE0QjtJQUx6QztRQU1XLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFFL0IsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFDaEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFFbkMsZUFBVSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQXVCLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFckUsWUFBTyxHQUFHLENBQUMsQ0FBQztLQTRHckI7SUExR0MsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNuQixZQUFZLEVB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dkQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLDhCQUE4QixDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7eUhBckhVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLHVOQ3BCekMsMnZGQTJFQTsyRkR2RGEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQixRQUUvQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFOzhCQUd6RCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG5kRHJvcEV2ZW50IH0gZnJvbSAnbmd4LWRyYWctZHJvcCc7XG5cbmltcG9ydCB7XG4gIE1hbmFnZUNvbHVtbnNEaWFsb2dDb2x1bW4sXG4gIE1hbmFnZUNvbHVtbnNEaWFsb2dWYWx1ZSxcbn0gZnJvbSAnLi9tYW5hZ2UtY29sdW1ucy1kaWFsb2cubW9kZWxzJztcbmltcG9ydCB7IElOVkFMSURfVkFSX05BTUVfTUVTU0FHRSwgaXNWYWxpZFZhcmlhYmxlTmFtZSB9IGZyb20gJy4uL3V0aWxzL3ZhcmlhYmxlLW5hbWUudXRpbCc7XG5cbmludGVyZmFjZSBNYW5hZ2VDb2x1bW5zSXRlbSB7XG4gIHVpZDogbnVtYmVyO1xuICBvcmlnaW5hbE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW1hbmFnZS1jb2x1bW5zLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnLCBzdHlsZTogJ2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTsnIH0sXG59KVxuZXhwb3J0IGNsYXNzIE1hbmFnZUNvbHVtbnNEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBsb2NrZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHB1YmxpYyBpdGVtczogTWFuYWdlQ29sdW1uc0l0ZW1bXSA9IFtdO1xuICBwdWJsaWMgbmV3Q29sTmFtZSA9ICcnO1xuICBwdWJsaWMgY29sdW1uc0Vycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgdHJhY2tCeVVpZCA9IChfOiBudW1iZXIsIGl0ZW06IE1hbmFnZUNvbHVtbnNJdGVtKTogbnVtYmVyID0+IGl0ZW0udWlkO1xuXG4gIHByaXZhdGUgbmV4dFVpZCA9IDE7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbCA9IEFycmF5LmlzQXJyYXkodGhpcy5jb2x1bW5zKSA/IHRoaXMuY29sdW1ucyA6IFtdO1xuICAgIHRoaXMuaXRlbXMgPSBpbml0aWFsLm1hcChuYW1lID0+ICh7XG4gICAgICB1aWQ6IHRoaXMubmV4dFVpZCsrLFxuICAgICAgb3JpZ2luYWxOYW1lOiBuYW1lLFxuICAgICAgbmFtZSxcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgaXNMb2NrZWQoaXRlbTogTWFuYWdlQ29sdW1uc0l0ZW0pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubG9ja2VkQ29sdW1ucyB8fCB0aGlzLmxvY2tlZENvbHVtbnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmIChpdGVtLm9yaWdpbmFsTmFtZSAhPSBudWxsICYmIHRoaXMubG9ja2VkQ29sdW1ucy5pbmRleE9mKGl0ZW0ub3JpZ2luYWxOYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2NrZWRDb2x1bW5zLmluZGV4T2YoaXRlbS5uYW1lKSAhPT0gLTE7XG4gIH1cblxuICBwdWJsaWMgb25EbmREcm9wKGV2ZW50OiBEbmREcm9wRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnZ2VkID0gZXZlbnQuZGF0YSBhcyBNYW5hZ2VDb2x1bW5zSXRlbSB8IG51bGw7XG4gICAgaWYgKCFkcmFnZ2VkIHx8IGV2ZW50LmluZGV4ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ID0+IGl0LnVpZCA9PT0gZHJhZ2dlZC51aWQpO1xuICAgIGlmIChmcm9tIDwgMCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBuZXh0ID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgIG5leHQuc3BsaWNlKGZyb20sIDEpO1xuICAgIGNvbnN0IHRvID0gZXZlbnQuaW5kZXggPiBmcm9tID8gZXZlbnQuaW5kZXggLSAxIDogZXZlbnQuaW5kZXg7XG4gICAgbmV4dC5zcGxpY2UodG8sIDAsIGRyYWdnZWQpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXh0O1xuICB9XG5cbiAgcHVibGljIG9uTW92ZShpbmRleDogbnVtYmVyLCBkaXI6IC0xIHwgMSk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGluZGV4ICsgZGlyO1xuICAgIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSB0aGlzLml0ZW1zLmxlbmd0aCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBuZXh0ID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgIFtuZXh0W2luZGV4XSwgbmV4dFt0YXJnZXRdXSA9IFtuZXh0W3RhcmdldF0sIG5leHRbaW5kZXhdXTtcbiAgICB0aGlzLml0ZW1zID0gbmV4dDtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbmFtZShpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW1zW2luZGV4XSkgeyByZXR1cm47IH1cbiAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5tYXAoKGl0LCBpKSA9PiBpID09PSBpbmRleCA/IHsgLi4uaXQsIG5hbWU6IHZhbHVlIH0gOiBpdCk7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XG4gICAgaWYgKCFpdGVtIHx8IHRoaXMuaXNMb2NrZWQoaXRlbSkpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uTmV3Q29sTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uZXdDb2xOYW1lID0gdmFsdWU7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uQWRkKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyaW1tZWQgPSAodGhpcy5uZXdDb2xOYW1lIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkIHx8IHRoaXMuaXRlbXNIYXNOYW1lKHRyaW1tZWQpIHx8ICFpc1ZhbGlkVmFyaWFibGVOYW1lKHRyaW1tZWQpKSB7IHJldHVybjsgfVxuICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtcywge1xuICAgICAgdWlkOiB0aGlzLm5leHRVaWQrKyxcbiAgICAgIG9yaWdpbmFsTmFtZTogbnVsbCxcbiAgICAgIG5hbWU6IHRyaW1tZWQsXG4gICAgfV07XG4gICAgdGhpcy5uZXdDb2xOYW1lID0gJyc7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCBjYW5BZGQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHJpbW1lZCA9ICh0aGlzLm5ld0NvbE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKCFpc1ZhbGlkVmFyaWFibGVOYW1lKHRyaW1tZWQpKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiAhdGhpcy5pdGVtc0hhc05hbWUodHJpbW1lZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWUoKTogTWFuYWdlQ29sdW1uc0RpYWxvZ1ZhbHVlIHwgbnVsbCB7XG4gICAgY29uc3QgdHJpbW1lZDogTWFuYWdlQ29sdW1uc0RpYWxvZ0NvbHVtbltdID0gdGhpcy5pdGVtcy5tYXAoaXQgPT4gKHtcbiAgICAgIG9yaWdpbmFsTmFtZTogaXQub3JpZ2luYWxOYW1lLFxuICAgICAgbmFtZTogKGl0Lm5hbWUgfHwgJycpLnRyaW0oKSxcbiAgICB9KSk7XG5cbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY29sdW1uc0Vycm9yID0gJ0F0IGxlYXN0IG9uZSBjb2x1bW4gaXMgcmVxdWlyZWQuJztcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHJpbW1lZC5zb21lKGMgPT4gYy5uYW1lLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHRoaXMuY29sdW1uc0Vycm9yID0gJ0NvbHVtbiBuYW1lcyBjYW5ub3QgYmUgZW1wdHkuJztcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHJpbW1lZC5zb21lKGMgPT4gIWlzVmFsaWRWYXJpYWJsZU5hbWUoYy5uYW1lKSkpIHtcbiAgICAgIHRoaXMuY29sdW1uc0Vycm9yID0gSU5WQUxJRF9WQVJfTkFNRV9NRVNTQUdFO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGxvd2VyZWQgPSB0cmltbWVkLm1hcChjID0+IGMubmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAobmV3IFNldChsb3dlcmVkKS5zaXplICE9PSB0cmltbWVkLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zRXJyb3IgPSAnQ29sdW1uIG5hbWVzIG11c3QgYmUgdW5pcXVlLic7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnNFcnJvciA9IG51bGw7XG4gICAgcmV0dXJuIHsgY29sdW1uczogdHJpbW1lZCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVtc0hhc05hbWUoY2FuZGlkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlcmVkID0gY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuc29tZShpdCA9PiAoaXQubmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyZWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWFuYWdlLWNvbHMtc3RhY2tcIj5cblxuICA8ZGl2IGNsYXNzPVwibWFuYWdlLWNvbHMtZHJvcC1saXN0XCJcbiAgICAgICBbZG5kRHJvcHpvbmVdPVwiWydjb2wnXVwiXG4gICAgICAgZG5kRWZmZWN0QWxsb3dlZD1cIm1vdmVcIlxuICAgICAgIGRuZERyYWdvdmVyQ2xhc3M9XCJkbmREcmFnb3ZlclwiXG4gICAgICAgKGRuZERyb3ApPVwib25EbmREcm9wKCRldmVudClcIj5cbiAgICA8ZGl2IGRuZFBsYWNlaG9sZGVyUmVmIGNsYXNzPVwibWFuYWdlLWNvbHMtcGxhY2Vob2xkZXJcIj5Ecm9wIGhlcmU8L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5VWlkXCJcbiAgICAgICAgIGNsYXNzPVwibWFuYWdlLWNvbHMtcm93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hbmFnZS1jb2xzLWhhbmRsZVwiXG4gICAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cIml0ZW1cIlxuICAgICAgICAgICAgW2RuZERpc2FibGVJZl09XCJpc0xvY2tlZChpdGVtKVwiXG4gICAgICAgICAgICBkbmRUeXBlPVwiY29sXCJcbiAgICAgICAgICAgIGRuZEVmZmVjdEFsbG93ZWQ9XCJtb3ZlXCI+XG4gICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTFcIlxuICAgICAgICBbdmFsdWVdPVwiaXRlbS5uYW1lXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkKGl0ZW0pXCJcbiAgICAgICAgW3ZhcmlhYmxlTmFtZVZhbGlkYXRpb25dPVwidHJ1ZVwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogJ0ludGVyJywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUmVuYW1lKGksICRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFuYWdlLWNvbHMtaWNvbi1idG5cIlxuICAgICAgICAgICAgICB0aXRsZT1cIk1vdmUgdXBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaSA9PT0gMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbk1vdmUoaSwgLTEpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1hbmFnZS1jb2xzLWljb24tYnRuXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJNb3ZlIGRvd25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaSA9PT0gaXRlbXMubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbk1vdmUoaSwgMSlcIj5cbiAgICAgICAgPG1hdC1pY29uPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYW5hZ2UtY29scy1pY29uLWJ0biBtYW5hZ2UtY29scy1pY29uLWJ0bi1kYW5nZXJcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjb2x1bW5cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2NrZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmUoaSlcIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1hbmFnZS1jb2xzLWZvb3RlclwiPlxuICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICBjbGFzcz1cImNxYS1mbGV4LTFcIlxuICAgICAgW3ZhbHVlXT1cIm5ld0NvbE5hbWVcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiTmV3IGNvbHVtbiBuYW1lIChlLmcuIGN1cnJlbmN5KVwiXG4gICAgICBbdmFyaWFibGVOYW1lVmFsaWRhdGlvbl09XCJ0cnVlXCJcbiAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogJ0ludGVyJywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbk5ld0NvbE5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoZW50ZXJQcmVzc2VkKT1cIm9uQWRkKClcIj5cbiAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPGNxYS1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICBpY29uPVwiYWRkXCJcbiAgICAgIHRleHQ9XCJBZGQgY29sdW1uXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQWRkKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxzcGFuICpuZ0lmPVwiY29sdW1uc0Vycm9yXCIgY2xhc3M9XCJtYW5hZ2UtY29scy1lcnJvclwiPnt7IGNvbHVtbnNFcnJvciB9fTwvc3Bhbj5cblxuICA8ZGl2IGNsYXNzPVwibWFuYWdlLWNvbHMtaGludFwiPlxuICAgIDxzdHJvbmc+SGVhZHMgdXA6PC9zdHJvbmc+XG4gICAgRGVsZXRpbmcgYSBjb2x1bW4gcmVtb3ZlcyBpdHMgZGF0YSBmcm9tIGV2ZXJ5IGVudmlyb25tZW50LiBSZW5hbWluZyBrZWVwcyB0aGUgZGF0YSBpbiBwbGFjZS5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
|