@cqa-lib/cqa-ui 1.1.191 → 1.1.193
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/autocomplete/autocomplete.component.mjs +156 -0
- package/esm2020/lib/autocomplete/autocomplete.model.mjs +2 -0
- package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +610 -11
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +505 -17
- package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +32 -11
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +131 -9
- package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer-data.mjs +67 -1
- package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.mjs +66 -1
- package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer.component.mjs +112 -191
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +31 -3
- package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +128 -6
- package/esm2020/lib/ui-kit.module.mjs +6 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +2153 -582
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +2038 -451
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/autocomplete/autocomplete.component.d.ts +48 -0
- package/lib/autocomplete/autocomplete.model.d.ts +10 -0
- package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +96 -8
- package/lib/test-case-details/condition-step/condition-step.component.d.ts +73 -4
- package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +18 -2
- package/lib/test-case-details/loop-step/loop-step.component.d.ts +34 -4
- package/lib/test-case-details/step-details-drawer/step-details-drawer-data.d.ts +56 -0
- package/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.d.ts +6 -0
- package/lib/test-case-details/step-details-drawer/step-details-drawer.component.d.ts +33 -27
- package/lib/test-case-details/step-group/step-group.component.d.ts +15 -1
- package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts +31 -5
- package/lib/ui-kit.module.d.ts +127 -126
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/styles.css +1 -1
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/icon";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class AutocompleteComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
/** Placeholder text for the input */
|
|
8
|
+
this.placeholder = 'Search or select...';
|
|
9
|
+
/** Options shown in the dropdown (filtered by input when open) */
|
|
10
|
+
this.options = [];
|
|
11
|
+
/** Initial or controlled value (displayed in the input) */
|
|
12
|
+
this.value = '';
|
|
13
|
+
/** Disable the input */
|
|
14
|
+
this.disabled = false;
|
|
15
|
+
/** Whether to show the clear button when there is text */
|
|
16
|
+
this.showClear = true;
|
|
17
|
+
/** Accessible label for the input */
|
|
18
|
+
this.ariaLabel = 'Auto-complete';
|
|
19
|
+
/** Auto focus the input when rendered */
|
|
20
|
+
this.autoFocus = false;
|
|
21
|
+
/** Size variant (matches search bar widths) */
|
|
22
|
+
this.size = 'md';
|
|
23
|
+
/** Stretch to full width of container */
|
|
24
|
+
this.fullWidth = false;
|
|
25
|
+
/** Emit when the input value changes (e.g. for two-way binding) */
|
|
26
|
+
this.valueChange = new EventEmitter();
|
|
27
|
+
/** Emit when an option is selected from the list (value from option) */
|
|
28
|
+
this.optionSelect = new EventEmitter();
|
|
29
|
+
/** Emit when the value is cleared via the clear button */
|
|
30
|
+
this.cleared = new EventEmitter();
|
|
31
|
+
this.inputValue = '';
|
|
32
|
+
this.panelOpen = false;
|
|
33
|
+
this.blurTimeout = null;
|
|
34
|
+
this.widthClasses = {
|
|
35
|
+
sm: 'cqa-w-[295px]',
|
|
36
|
+
md: 'cqa-w-[395px]',
|
|
37
|
+
lg: 'cqa-w-[495px]',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
// Initialize inputValue from value input
|
|
42
|
+
if (this.value !== undefined && this.value !== null && this.value !== '') {
|
|
43
|
+
this.inputValue = String(this.value);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.inputValue = '';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
ngOnChanges(changes) {
|
|
50
|
+
if (changes['value']) {
|
|
51
|
+
const newValue = changes['value'].currentValue;
|
|
52
|
+
if (newValue !== undefined && newValue !== null && newValue !== '') {
|
|
53
|
+
const stringValue = String(newValue);
|
|
54
|
+
if (stringValue !== this.inputValue) {
|
|
55
|
+
this.inputValue = stringValue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Clear input if value is empty/null/undefined
|
|
60
|
+
if (this.inputValue !== '') {
|
|
61
|
+
this.inputValue = '';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
get displayOptions() {
|
|
67
|
+
const list = this.options ?? [];
|
|
68
|
+
const q = (this.inputValue ?? '').toLowerCase().trim();
|
|
69
|
+
if (!q) {
|
|
70
|
+
return list;
|
|
71
|
+
}
|
|
72
|
+
return list.filter((opt) => {
|
|
73
|
+
const label = (opt.label ?? opt.value ?? '').toLowerCase();
|
|
74
|
+
return label.includes(q);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
onInput(event) {
|
|
78
|
+
const target = event.target;
|
|
79
|
+
const nextValue = target?.value ?? '';
|
|
80
|
+
this.inputValue = nextValue;
|
|
81
|
+
this.valueChange.emit(this.inputValue);
|
|
82
|
+
this.panelOpen = true;
|
|
83
|
+
}
|
|
84
|
+
onFocus() {
|
|
85
|
+
if (this.blurTimeout) {
|
|
86
|
+
clearTimeout(this.blurTimeout);
|
|
87
|
+
this.blurTimeout = null;
|
|
88
|
+
}
|
|
89
|
+
this.panelOpen = true;
|
|
90
|
+
}
|
|
91
|
+
onBlur() {
|
|
92
|
+
this.blurTimeout = setTimeout(() => {
|
|
93
|
+
this.panelOpen = false;
|
|
94
|
+
this.blurTimeout = null;
|
|
95
|
+
}, 150);
|
|
96
|
+
}
|
|
97
|
+
selectOption(option) {
|
|
98
|
+
const displayLabel = option.label ?? option.value;
|
|
99
|
+
this.inputValue = displayLabel;
|
|
100
|
+
this.valueChange.emit(this.inputValue);
|
|
101
|
+
this.optionSelect.emit(option);
|
|
102
|
+
this.panelOpen = false;
|
|
103
|
+
}
|
|
104
|
+
clear() {
|
|
105
|
+
if (this.disabled || this.inputValue === '') {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.inputValue = '';
|
|
109
|
+
this.valueChange.emit('');
|
|
110
|
+
this.cleared.emit();
|
|
111
|
+
this.panelOpen = false;
|
|
112
|
+
}
|
|
113
|
+
getOptionLabel(option) {
|
|
114
|
+
return option.label ?? option.value ?? '';
|
|
115
|
+
}
|
|
116
|
+
trackByValue(_index, option) {
|
|
117
|
+
return option.value;
|
|
118
|
+
}
|
|
119
|
+
onEscape() {
|
|
120
|
+
this.panelOpen = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
AutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
124
|
+
AutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AutocompleteComponent, selector: "cqa-autocomplete", inputs: { placeholder: "placeholder", options: "options", value: "value", disabled: "disabled", showClear: "showClear", ariaLabel: "ariaLabel", autoFocus: "autoFocus", size: "size", fullWidth: "fullWidth" }, outputs: { valueChange: "valueChange", optionSelect: "optionSelect", cleared: "cleared" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"cqa-autocomplete-root cqa-relative\"\n [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <!-- Field: same styling as search bar -->\n <div\n class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size]]\">\n <input\n type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear\">\n <mat-icon\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n close\n </mat-icon>\n </button>\n </div>\n <!-- List box: below field, same width as field -->\n <ul\n *ngIf=\"panelOpen\"\n role=\"listbox\"\n class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-10 cqa-list-none cqa-m-0 cqa-p-0\"\n [class.cqa-w-full]=\"fullWidth\">\n <li\n *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n role=\"option\"\n (mousedown)=\"selectOption(option); $event.preventDefault()\"\n class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n {{ getOptionLabel(option) }}\n </li>\n <li\n *ngIf=\"displayOptions.length === 0\"\n class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n No matches\n </li>\n </ul>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
126
|
+
type: Component,
|
|
127
|
+
args: [{ selector: 'cqa-autocomplete', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-autocomplete-root cqa-relative\"\n [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <!-- Field: same styling as search bar -->\n <div\n class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size]]\">\n <input\n type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear\">\n <mat-icon\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n close\n </mat-icon>\n </button>\n </div>\n <!-- List box: below field, same width as field -->\n <ul\n *ngIf=\"panelOpen\"\n role=\"listbox\"\n class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-10 cqa-list-none cqa-m-0 cqa-p-0\"\n [class.cqa-w-full]=\"fullWidth\">\n <li\n *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n role=\"option\"\n (mousedown)=\"selectOption(option); $event.preventDefault()\"\n class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n {{ getOptionLabel(option) }}\n </li>\n <li\n *ngIf=\"displayOptions.length === 0\"\n class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n No matches\n </li>\n </ul>\n</div>\n" }]
|
|
128
|
+
}], propDecorators: { placeholder: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}], options: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], value: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], disabled: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], showClear: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], ariaLabel: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], autoFocus: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], size: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], fullWidth: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], valueChange: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}], optionSelect: [{
|
|
149
|
+
type: Output
|
|
150
|
+
}], cleared: [{
|
|
151
|
+
type: Output
|
|
152
|
+
}], onEscape: [{
|
|
153
|
+
type: HostListener,
|
|
154
|
+
args: ['document:keydown.escape']
|
|
155
|
+
}] } });
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7Ozs7QUFVdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQU1FLHFDQUFxQztRQUM1QixnQkFBVyxHQUFHLHFCQUFxQixDQUFDO1FBRTdDLGtFQUFrRTtRQUN6RCxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUUvQywyREFBMkQ7UUFDbEQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQix3QkFBd0I7UUFDZixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCLDBEQUEwRDtRQUNqRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRTFCLHFDQUFxQztRQUM1QixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBRXJDLHlDQUF5QztRQUNoQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCLCtDQUErQztRQUN0QyxTQUFJLEdBQXFCLElBQUksQ0FBQztRQUV2Qyx5Q0FBeUM7UUFDaEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQixtRUFBbUU7UUFDekQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRW5ELHdFQUF3RTtRQUM5RCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRW5FLDBEQUEwRDtRQUNoRCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3QyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFD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LEVBQUUsYUFBYSxFQUFFOzhCQUlyQixXQUFXO3NCQUFuQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csT0FBTztzQkFBaEIsTUFBTTtnQkFvR1AsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENxYUF1dG9jb21wbGV0ZU9wdGlvbiB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLm1vZGVsJztcblxudHlwZSBBdXRvY29tcGxldGVTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0ICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlYXJjaCBvciBzZWxlY3QuLi4nO1xuXG4gIC8qKiBPcHRpb25zIHNob3duIGluIHRoZSBkcm9wZG93biAoZmlsdGVyZWQgYnkgaW5wdXQgd2hlbiBvcGVuKSAqL1xuICBASW5wdXQoKSBvcHRpb25zOiBDcWFBdXRvY29tcGxldGVPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIG9yIGNvbnRyb2xsZWQgdmFsdWUgKGRpc3BsYXllZCBpbiB0aGUgaW5wdXQpICovXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgLyoqIERpc2FibGUgdGhlIGlucHV0ICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgY2xlYXIgYnV0dG9uIHdoZW4gdGhlcmUgaXMgdGV4dCAqL1xuICBASW5wdXQoKSBzaG93Q2xlYXIgPSB0cnVlO1xuXG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgaW5wdXQgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJ0F1dG8tY29tcGxldGUnO1xuXG4gIC8qKiBBdXRvIGZvY3VzIHRoZSBpbnB1dCB3aGVuIHJlbmRlcmVkICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTaXplIHZhcmlhbnQgKG1hdGNoZXMgc2VhcmNoIGJhciB3aWR0aHMpICovXG4gIEBJbnB1dCgpIHNpemU6IEF1dG9jb21wbGV0ZVNpemUgPSAnbWQnO1xuXG4gIC8qKiBTdHJldGNoIHRvIGZ1bGwgd2lkdGggb2YgY29udGFpbmVyICovXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMgKGUuZy4gZm9yIHR3by13YXkgYmluZGluZykgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdCAodmFsdWUgZnJvbSBvcHRpb24pICovXG4gIEBPdXRwdXQoKSBvcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENxYUF1dG9jb21wbGV0ZU9wdGlvbj4oKTtcblxuICAvKiogRW1pdCB3aGVuIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHZpYSB0aGUgY2xlYXIgYnV0dG9uICovXG4gIEBPdXRwdXQoKSBjbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGlucHV0VmFsdWUgPSAnJztcbiAgcGFuZWxPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgYmx1clRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSBpbnB1dFZhbHVlIGZyb20gdmFsdWUgaW5wdXRcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IG51bGwgJiYgbmV3VmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gU3RyaW5nKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKHN0cmluZ1ZhbHVlICE9PSB0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgaW5wdXQgaWYgdmFsdWUgaXMgZW1wdHkvbnVsbC91bmRlZmluZWRcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRWYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IHdpZHRoQ2xhc3NlczogUmVjb3JkPEF1dG9jb21wbGV0ZVNpemUsIHN0cmluZz4gPSB7XG4gICAgc206ICdjcWEtdy1bMjk1cHhdJyxcbiAgICBtZDogJ2NxYS13LVszOTVweF0nLFxuICAgIGxnOiAnY3FhLXctWzQ5NXB4XScsXG4gIH07XG5cbiAgZ2V0IGRpc3BsYXlPcHRpb25zKCk6IENxYUF1dG9jb21wbGV0ZU9wdGlvbltdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5vcHRpb25zID8/IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5pbnB1dFZhbHVlID8/ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoIXEpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSAob3B0LmxhYmVsID8/IG9wdC52YWx1ZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBsYWJlbC5pbmNsdWRlcyhxKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmlucHV0VmFsdWUpO1xuICAgIHRoaXMucGFuZWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnBhbmVsT3BlbiA9IHRydWU7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5ibHVyVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBDcWFBdXRvY29tcGxldGVPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBkaXNwbGF5TGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGRpc3BsYXlMYWJlbDtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5pbnB1dFZhbHVlKTtcbiAgICB0aGlzLm9wdGlvblNlbGVjdC5lbWl0KG9wdGlvbik7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaW5wdXRWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KCcnKTtcbiAgICB0aGlzLmNsZWFyZWQuZW1pdCgpO1xuICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBnZXRPcHRpb25MYWJlbChvcHRpb246IENxYUF1dG9jb21wbGV0ZU9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWUgPz8gJyc7XG4gIH1cblxuICB0cmFja0J5VmFsdWUoX2luZGV4OiBudW1iZXIsIG9wdGlvbjogQ3FhQXV0b2NvbXBsZXRlT3B0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhbmVsT3BlbiA9IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWF1dG9jb21wbGV0ZS1yb290IGNxYS1yZWxhdGl2ZVwiXG4gIFtzdHlsZS5kaXNwbGF5XT1cImZ1bGxXaWR0aCA/ICdibG9jaycgOiAnaW5saW5lLWJsb2NrJ1wiXG4gIFtzdHlsZS53aWR0aF09XCJmdWxsV2lkdGggPyAnMTAwJScgOiAnYXV0bydcIj5cbiAgPCEtLSBGaWVsZDogc2FtZSBzdHlsaW5nIGFzIHNlYXJjaCBiYXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtNiBjcWEtcHktMyBjcWEtdGV4dC1bMTRweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLXdoaXRlIGNxYS1zaGFkb3ctc20gY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICBbbmdDbGFzc109XCJbZnVsbFdpZHRoID8gJ2NxYS13LWZ1bGwnIDogd2lkdGhDbGFzc2VzW3NpemVdXVwiPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wIGNxYS1ib3JkZXItbm9uZSBjcWEtb3V0bGluZS1ub25lIGNxYS1iZy10cmFuc3BhcmVudCBwbGFjZWhvbGRlcjpjcWEtdGV4dC1ncmF5LTMwMCBkaXNhYmxlZDpjcWEtdGV4dC1ncmF5LTQwMCBkaXNhYmxlZDpjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWzEyLjNweF0gY3FhLWxlYWRpbmctbm9uZSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS1hbGlnbi1taWRkbGUgY3FhLXRleHQtYmxhY2stMTAwXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWxPcGVuXCJcbiAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgYXV0b2NhcGl0YWxpemU9XCJub25lXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBbYXR0ci5hdXRvZm9jdXNdPVwiYXV0b0ZvY3VzID8gJycgOiBudWxsXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd0NsZWFyICYmIGlucHV0VmFsdWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1wLTAgY3FhLXctNCBjcWEtaC00IGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LWdyYXktNTAwIGNxYS1ob3ZlcjpjcWEtdGV4dC1ncmF5LTcwMCBkaXNhYmxlZDpjcWEtdGV4dC1ncmF5LTMwMCBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLWxlYWRpbmctbm9uZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCI+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbGVhZGluZy1ub25lIGNxYS1wLTBcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiMTZcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIjE2XCJcbiAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cIjE2XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnY3FhLW9wYWNpdHktWzAuMzhdJzogZGlzYWJsZWQgfVwiPlxuICAgICAgICBjbG9zZVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDwhLS0gTGlzdCBib3g6IGJlbG93IGZpZWxkLCBzYW1lIHdpZHRoIGFzIGZpZWxkIC0tPlxuICA8dWxcbiAgICAqbmdJZj1cInBhbmVsT3BlblwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIGNsYXNzPVwiY3FhLWF1dG9jb21wbGV0ZS1saXN0IGNxYS1hYnNvbHV0ZSBjcWEtbGVmdC0wIGNxYS1yaWdodC0wIGNxYS10b3AtZnVsbCBjcWEtbXQtMSBjcWEtcHktMSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1tZCBjcWEtYmctd2hpdGUgY3FhLXNoYWRvdy1zbSBjcWEtbWF4LWgtWzI0MHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtei0xMCBjcWEtbGlzdC1ub25lIGNxYS1tLTAgY3FhLXAtMFwiXG4gICAgW2NsYXNzLmNxYS13LWZ1bGxdPVwiZnVsbFdpZHRoXCI+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRpc3BsYXlPcHRpb25zOyB0cmFja0J5OiB0cmFja0J5VmFsdWVcIlxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdE9wdGlvbihvcHRpb24pOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMi4zcHhdIGNxYS1sZWFkaW5nLW5vbmUgY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBob3ZlcjpjcWEtYmctZ3JheS0xMDAgY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICB7eyBnZXRPcHRpb25MYWJlbChvcHRpb24pIH19XG4gICAgPC9saT5cbiAgICA8bGlcbiAgICAgICpuZ0lmPVwiZGlzcGxheU9wdGlvbnMubGVuZ3RoID09PSAwXCJcbiAgICAgIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTMgY3FhLXRleHQtWzEyLjNweF0gY3FhLXRleHQtZ3JheS00MDAgY3FhLWN1cnNvci1kZWZhdWx0XCI+XG4gICAgICBObyBtYXRjaGVzXG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wdGlvbiBmb3IgdGhlIGF1dG9jb21wbGV0ZSBkcm9wZG93bi5cbiAqIFVzZSBsYWJlbCBmb3IgZGlzcGxheSBhbmQgdmFsdWUgZm9yIHRoZSBzZWxlY3RlZCB2YWx1ZSAoZS5nLiBmb3IgSURzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcWFBdXRvY29tcGxldGVPcHRpb24ge1xuICAvKiogVmFsdWUgZW1pdHRlZCBvbiBzZWxlY3Rpb24gKGUuZy4gaWQgb3IgY29kZSkgKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgLyoqIFRleHQgc2hvd24gaW4gdGhlIGxpc3QgKGRlZmF1bHRzIHRvIHZhbHVlIGlmIG9taXR0ZWQpICovXG4gIGxhYmVsPzogc3RyaW5nO1xufVxuIl19
|