@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.
Files changed (32) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +156 -0
  2. package/esm2020/lib/autocomplete/autocomplete.model.mjs +2 -0
  3. package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +610 -11
  4. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +505 -17
  5. package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +32 -11
  6. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +131 -9
  7. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer-data.mjs +67 -1
  8. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.mjs +66 -1
  9. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer.component.mjs +112 -191
  10. package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +31 -3
  11. package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +128 -6
  12. package/esm2020/lib/ui-kit.module.mjs +6 -1
  13. package/esm2020/public-api.mjs +3 -1
  14. package/fesm2015/cqa-lib-cqa-ui.mjs +2153 -582
  15. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/fesm2020/cqa-lib-cqa-ui.mjs +2038 -451
  17. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  18. package/lib/autocomplete/autocomplete.component.d.ts +48 -0
  19. package/lib/autocomplete/autocomplete.model.d.ts +10 -0
  20. package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +96 -8
  21. package/lib/test-case-details/condition-step/condition-step.component.d.ts +73 -4
  22. package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +18 -2
  23. package/lib/test-case-details/loop-step/loop-step.component.d.ts +34 -4
  24. package/lib/test-case-details/step-details-drawer/step-details-drawer-data.d.ts +56 -0
  25. package/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.d.ts +6 -0
  26. package/lib/test-case-details/step-details-drawer/step-details-drawer.component.d.ts +33 -27
  27. package/lib/test-case-details/step-group/step-group.component.d.ts +15 -1
  28. package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts +31 -5
  29. package/lib/ui-kit.module.d.ts +127 -126
  30. package/package.json +1 -1
  31. package/public-api.d.ts +2 -0
  32. 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