@cqa-lib/cqa-ui 1.1.554 → 1.1.555
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/test-suite/move-test-suite-dialog/move-test-suite-dialog.component.mjs +307 -0
- package/esm2020/lib/test-suite/test-suite.models.mjs +11 -0
- package/esm2020/lib/ui-kit.module.mjs +6 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +319 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +317 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/test-suite/move-test-suite-dialog/move-test-suite-dialog.component.d.ts +106 -0
- package/lib/test-suite/test-suite.models.d.ts +19 -0
- package/lib/ui-kit.module.d.ts +156 -155
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { DEFAULT_MODULAR_LABELS, } from '../../templates/modular-table-template/modular-table-template.models';
|
|
3
|
+
import { DEFAULT_TEST_SUITE_LABELS } from '../test-suite.models';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../custom-input/custom-input.component";
|
|
6
|
+
import * as i2 from "../../templates/modular-table-template/dialogs/move-to-folder-dialog.component";
|
|
7
|
+
/**
|
|
8
|
+
* Body of the "Move Test Suite" dialog.
|
|
9
|
+
*
|
|
10
|
+
* Reuses `<cqa-move-to-folder-dialog>` as the tree picker (same embedding pattern
|
|
11
|
+
* as `NewFolderDialogComponent`) so consumers get the same folder-tree UX, while
|
|
12
|
+
* adding two read-only rows above it: the suite's **current folder** (source)
|
|
13
|
+
* and the **destination folder** the user has picked (live-updates).
|
|
14
|
+
*
|
|
15
|
+
* Two integration paths:
|
|
16
|
+
*
|
|
17
|
+
* 1. **From within this library** via `DialogService.open(...)`. The outer
|
|
18
|
+
* `cqa-dialog` supplies title/description/Cancel/Move buttons; the Move
|
|
19
|
+
* button reads `pickedFolderId` via `dialogRef.getComponentInstance()` and
|
|
20
|
+
* checks `isValid` before closing.
|
|
21
|
+
*
|
|
22
|
+
* 2. **Host-driven** — host renders `<cqa-move-test-suite-dialog>` inside its
|
|
23
|
+
* own modal and listens to `(submitted)` / `(cancelled)` / `(pickedFolderIdChange)`.
|
|
24
|
+
*/
|
|
25
|
+
export class MoveTestSuiteDialogComponent {
|
|
26
|
+
constructor(cdr) {
|
|
27
|
+
this.cdr = cdr;
|
|
28
|
+
// NOTE: `folders` and `labels` are declared as setters (instead of plain @Input fields)
|
|
29
|
+
// because `DialogService.open(...)` assigns the `inputs` map via direct property
|
|
30
|
+
// assignment *after* `attachComponent` has already run the component's lifecycle
|
|
31
|
+
// hooks — direct assignment bypasses `ngOnChanges`, so setters keep derived state
|
|
32
|
+
// in sync no matter the assignment order. Same pattern as `NewFolderDialogComponent`.
|
|
33
|
+
this._folders = [];
|
|
34
|
+
this._labels = { ...DEFAULT_MODULAR_LABELS };
|
|
35
|
+
/** Test-suite-section labels (title, description, button text, field labels,
|
|
36
|
+
* placeholder). Kept separate from `labels` (ModularLabels) so the embedded
|
|
37
|
+
* picker can keep its modular-table-template label model. Same setter
|
|
38
|
+
* pattern as `labels` for DialogService property-assignment compatibility. */
|
|
39
|
+
this._testSuiteLabels = { ...DEFAULT_TEST_SUITE_LABELS };
|
|
40
|
+
/** Folder the suite currently lives in. Used both to gray out the row in the
|
|
41
|
+
* embedded picker and to render the "Current folder" readout. */
|
|
42
|
+
this.currentFolderId = null;
|
|
43
|
+
/** Optional override for the current-folder display name. When not provided,
|
|
44
|
+
* the component resolves the name from `folders` by walking to `currentFolderId`,
|
|
45
|
+
* falling back to `labels.moveDialogRoot` ("Unorganized") when null. */
|
|
46
|
+
this.currentFolderName = null;
|
|
47
|
+
/** Name of the test suite being moved. Rendered as a disabled input at the
|
|
48
|
+
* top of the dialog body so the user can confirm which suite the move
|
|
49
|
+
* applies to. Defaults to empty string. */
|
|
50
|
+
this.suiteName = '';
|
|
51
|
+
/** Destination folder id picked by the user. Two-way-bind friendly. */
|
|
52
|
+
this.pickedFolderId = null;
|
|
53
|
+
/** Height of the embedded picker. Defaults to 240px (matches the parent-folder
|
|
54
|
+
* picker height in `NewFolderDialogComponent`) so the modal stays compact. */
|
|
55
|
+
this.pickerHeight = '240px';
|
|
56
|
+
/** When true (default), both the Current folder and Destination folder inputs
|
|
57
|
+
* render as disabled (read-only via the cqa-custom-input `[disabled]` flag).
|
|
58
|
+
* Set to false if a host needs to re-enable interaction on those fields. */
|
|
59
|
+
this.fieldsDisabled = true;
|
|
60
|
+
this.pickedFolderIdChange = new EventEmitter();
|
|
61
|
+
this.submitted = new EventEmitter();
|
|
62
|
+
this.cancelled = new EventEmitter();
|
|
63
|
+
/** Bubble cqa-custom-input focus/blur events up to hosts. Useful when
|
|
64
|
+
* `fieldsDisabled = false` and the host wants to react to interaction. */
|
|
65
|
+
this.currentFieldFocus = new EventEmitter();
|
|
66
|
+
this.currentFieldBlur = new EventEmitter();
|
|
67
|
+
this.destinationFieldFocus = new EventEmitter();
|
|
68
|
+
this.destinationFieldBlur = new EventEmitter();
|
|
69
|
+
/** Set to true the first time the user picks anything. Lets `isValid` treat
|
|
70
|
+
* the initial pre-touch state as "nothing selected" — important when the
|
|
71
|
+
* suite starts in Unorganized (`currentFolderId = null`) so a fresh dialog
|
|
72
|
+
* doesn't appear valid just because `pickedFolderId` also defaults to null. */
|
|
73
|
+
this.pickedTouched = false;
|
|
74
|
+
}
|
|
75
|
+
set folders(value) {
|
|
76
|
+
this._folders = value || [];
|
|
77
|
+
this.cdr.markForCheck();
|
|
78
|
+
}
|
|
79
|
+
get folders() { return this._folders; }
|
|
80
|
+
set labels(value) {
|
|
81
|
+
this._labels = value || { ...DEFAULT_MODULAR_LABELS };
|
|
82
|
+
this.cdr.markForCheck();
|
|
83
|
+
}
|
|
84
|
+
get labels() { return this._labels; }
|
|
85
|
+
set testSuiteLabels(value) {
|
|
86
|
+
this._testSuiteLabels = value || { ...DEFAULT_TEST_SUITE_LABELS };
|
|
87
|
+
this.cdr.markForCheck();
|
|
88
|
+
}
|
|
89
|
+
get testSuiteLabels() { return this._testSuiteLabels; }
|
|
90
|
+
onParentPicked(id) {
|
|
91
|
+
let next = null;
|
|
92
|
+
if (id != null) {
|
|
93
|
+
const coerced = typeof id === 'number' ? id : Number(id);
|
|
94
|
+
if (Number.isFinite(coerced))
|
|
95
|
+
next = coerced;
|
|
96
|
+
}
|
|
97
|
+
this.pickedFolderId = next;
|
|
98
|
+
this.pickedTouched = true;
|
|
99
|
+
this.pickedFolderIdChange.emit(next);
|
|
100
|
+
this.cdr.markForCheck();
|
|
101
|
+
}
|
|
102
|
+
/** True once the user has picked a destination via the embedded tree. Drives
|
|
103
|
+
* the destination-readout styling (indigo when picked, muted when not). */
|
|
104
|
+
get hasPick() {
|
|
105
|
+
return this.pickedTouched;
|
|
106
|
+
}
|
|
107
|
+
get resolvedCurrentName() {
|
|
108
|
+
if (this.currentFolderName && this.currentFolderName.trim().length) {
|
|
109
|
+
return this.currentFolderName;
|
|
110
|
+
}
|
|
111
|
+
if (this.currentFolderId == null) {
|
|
112
|
+
return this.labels.moveDialogRoot;
|
|
113
|
+
}
|
|
114
|
+
const name = this.findFolderName(this._folders, this.currentFolderId);
|
|
115
|
+
return name ?? this.labels.moveDialogRoot;
|
|
116
|
+
}
|
|
117
|
+
/** Value shown inside the Destination input. Empty until the user picks; once
|
|
118
|
+
* picked, the resolved folder name (or `labels.moveDialogRoot` for Unorganized).
|
|
119
|
+
* Empty state lets the input's `[placeholder]` show through. */
|
|
120
|
+
get destinationFieldValue() {
|
|
121
|
+
if (!this.pickedTouched)
|
|
122
|
+
return '';
|
|
123
|
+
if (this.pickedFolderId == null)
|
|
124
|
+
return this.labels.moveDialogRoot;
|
|
125
|
+
return this.findFolderName(this._folders, this.pickedFolderId) ?? this.labels.moveDialogRoot;
|
|
126
|
+
}
|
|
127
|
+
/** Placeholder shown in the Destination input before the user picks. */
|
|
128
|
+
get destinationFieldPlaceholder() {
|
|
129
|
+
return this._testSuiteLabels.moveTestSuiteDialogDestinationPlaceholder;
|
|
130
|
+
}
|
|
131
|
+
/** Move is valid when the user has picked a destination different from the
|
|
132
|
+
* current folder. Picking the same folder as the source is a no-op, and we
|
|
133
|
+
* also require an explicit interaction (`pickedTouched`). */
|
|
134
|
+
get isValid() {
|
|
135
|
+
if (!this.pickedTouched)
|
|
136
|
+
return false;
|
|
137
|
+
return this.pickedFolderId !== this.currentFolderId;
|
|
138
|
+
}
|
|
139
|
+
submit() {
|
|
140
|
+
if (!this.isValid)
|
|
141
|
+
return;
|
|
142
|
+
this.submitted.emit({ targetFolderId: this.pickedFolderId });
|
|
143
|
+
}
|
|
144
|
+
cancel() {
|
|
145
|
+
this.cancelled.emit();
|
|
146
|
+
}
|
|
147
|
+
/** Hooks for the Current folder cqa-custom-input. Field is disabled by
|
|
148
|
+
* default, so these mostly no-op; they're wired so the component still
|
|
149
|
+
* behaves correctly when `fieldsDisabled = false`. */
|
|
150
|
+
onCurrentFieldValueChange(_value) {
|
|
151
|
+
// Read-only field — ignore programmatic changes.
|
|
152
|
+
}
|
|
153
|
+
onCurrentFieldFocused(event) {
|
|
154
|
+
this.currentFieldFocus.emit(event);
|
|
155
|
+
}
|
|
156
|
+
onCurrentFieldBlurred(event) {
|
|
157
|
+
this.currentFieldBlur.emit(event);
|
|
158
|
+
}
|
|
159
|
+
/** Hooks for the Destination folder cqa-custom-input. Value is driven by the
|
|
160
|
+
* tree picker below, so the input itself is informational. */
|
|
161
|
+
onDestinationFieldValueChange(_value) {
|
|
162
|
+
// Destination is driven by the tree picker, not the input itself.
|
|
163
|
+
}
|
|
164
|
+
onDestinationFieldFocused(event) {
|
|
165
|
+
this.destinationFieldFocus.emit(event);
|
|
166
|
+
}
|
|
167
|
+
onDestinationFieldBlurred(event) {
|
|
168
|
+
this.destinationFieldBlur.emit(event);
|
|
169
|
+
}
|
|
170
|
+
findFolderName(nodes, id) {
|
|
171
|
+
for (const n of nodes || []) {
|
|
172
|
+
if (n.id === id)
|
|
173
|
+
return n.name;
|
|
174
|
+
if (n.children?.length) {
|
|
175
|
+
const hit = this.findFolderName(n.children, id);
|
|
176
|
+
if (hit != null)
|
|
177
|
+
return hit;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
MoveTestSuiteDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MoveTestSuiteDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
184
|
+
MoveTestSuiteDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MoveTestSuiteDialogComponent, selector: "cqa-move-test-suite-dialog", inputs: { folders: "folders", labels: "labels", testSuiteLabels: "testSuiteLabels", currentFolderId: "currentFolderId", currentFolderName: "currentFolderName", suiteName: "suiteName", pickedFolderId: "pickedFolderId", pickerHeight: "pickerHeight", fieldsDisabled: "fieldsDisabled" }, outputs: { pickedFolderIdChange: "pickedFolderIdChange", submitted: "submitted", cancelled: "cancelled", currentFieldFocus: "currentFieldFocus", currentFieldBlur: "currentFieldBlur", destinationFieldFocus: "destinationFieldFocus", destinationFieldBlur: "destinationFieldBlur" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: `
|
|
185
|
+
<div class="cqa-flex cqa-flex-col cqa-gap-2 cqa-w-full">
|
|
186
|
+
<!-- Test suite name (read-only display; surfaces which suite is being moved) -->
|
|
187
|
+
<cqa-custom-input
|
|
188
|
+
[label]="testSuiteLabels.moveTestSuiteDialogSuiteNameLabel"
|
|
189
|
+
[value]="suiteName"
|
|
190
|
+
[disabled]="fieldsDisabled"
|
|
191
|
+
[fullWidth]="true"
|
|
192
|
+
></cqa-custom-input>
|
|
193
|
+
|
|
194
|
+
<!-- Current folder (rendered as a disabled input) -->
|
|
195
|
+
<cqa-custom-input
|
|
196
|
+
[label]="testSuiteLabels.moveTestSuiteDialogCurrentLabel"
|
|
197
|
+
[value]="resolvedCurrentName"
|
|
198
|
+
[disabled]="fieldsDisabled"
|
|
199
|
+
[fullWidth]="true"
|
|
200
|
+
(valueChange)="onCurrentFieldValueChange($event)"
|
|
201
|
+
(focused)="onCurrentFieldFocused($event)"
|
|
202
|
+
(blurred)="onCurrentFieldBlurred($event)"
|
|
203
|
+
></cqa-custom-input>
|
|
204
|
+
|
|
205
|
+
<!-- Destination folder (rendered as a disabled input; value driven by the tree picker below) -->
|
|
206
|
+
<cqa-custom-input
|
|
207
|
+
[label]="testSuiteLabels.moveTestSuiteDialogDestinationLabel"
|
|
208
|
+
[value]="destinationFieldValue"
|
|
209
|
+
[placeholder]="destinationFieldPlaceholder"
|
|
210
|
+
[disabled]="fieldsDisabled"
|
|
211
|
+
[fullWidth]="true"
|
|
212
|
+
(valueChange)="onDestinationFieldValueChange($event)"
|
|
213
|
+
(focused)="onDestinationFieldFocused($event)"
|
|
214
|
+
(blurred)="onDestinationFieldBlurred($event)"
|
|
215
|
+
></cqa-custom-input>
|
|
216
|
+
|
|
217
|
+
<!-- Folder tree picker -->
|
|
218
|
+
<cqa-move-to-folder-dialog
|
|
219
|
+
[folders]="folders"
|
|
220
|
+
[labels]="labels"
|
|
221
|
+
[currentFolderId]="currentFolderId"
|
|
222
|
+
[pickedFolderId]="pickedFolderId"
|
|
223
|
+
[pickerHeight]="pickerHeight"
|
|
224
|
+
(pickedFolderIdChange)="onParentPicked($event)"
|
|
225
|
+
></cqa-move-to-folder-dialog>
|
|
226
|
+
</div>
|
|
227
|
+
`, isInline: true, components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.MoveToFolderDialogComponent, selector: "cqa-move-to-folder-dialog", inputs: ["folders", "labels", "currentFolderId", "pickedFolderId", "initialExpandedIds", "rootDisabled", "pickerHeight"], outputs: ["folderPicked", "pickedFolderIdChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MoveTestSuiteDialogComponent, decorators: [{
|
|
229
|
+
type: Component,
|
|
230
|
+
args: [{ selector: 'cqa-move-test-suite-dialog', template: `
|
|
231
|
+
<div class="cqa-flex cqa-flex-col cqa-gap-2 cqa-w-full">
|
|
232
|
+
<!-- Test suite name (read-only display; surfaces which suite is being moved) -->
|
|
233
|
+
<cqa-custom-input
|
|
234
|
+
[label]="testSuiteLabels.moveTestSuiteDialogSuiteNameLabel"
|
|
235
|
+
[value]="suiteName"
|
|
236
|
+
[disabled]="fieldsDisabled"
|
|
237
|
+
[fullWidth]="true"
|
|
238
|
+
></cqa-custom-input>
|
|
239
|
+
|
|
240
|
+
<!-- Current folder (rendered as a disabled input) -->
|
|
241
|
+
<cqa-custom-input
|
|
242
|
+
[label]="testSuiteLabels.moveTestSuiteDialogCurrentLabel"
|
|
243
|
+
[value]="resolvedCurrentName"
|
|
244
|
+
[disabled]="fieldsDisabled"
|
|
245
|
+
[fullWidth]="true"
|
|
246
|
+
(valueChange)="onCurrentFieldValueChange($event)"
|
|
247
|
+
(focused)="onCurrentFieldFocused($event)"
|
|
248
|
+
(blurred)="onCurrentFieldBlurred($event)"
|
|
249
|
+
></cqa-custom-input>
|
|
250
|
+
|
|
251
|
+
<!-- Destination folder (rendered as a disabled input; value driven by the tree picker below) -->
|
|
252
|
+
<cqa-custom-input
|
|
253
|
+
[label]="testSuiteLabels.moveTestSuiteDialogDestinationLabel"
|
|
254
|
+
[value]="destinationFieldValue"
|
|
255
|
+
[placeholder]="destinationFieldPlaceholder"
|
|
256
|
+
[disabled]="fieldsDisabled"
|
|
257
|
+
[fullWidth]="true"
|
|
258
|
+
(valueChange)="onDestinationFieldValueChange($event)"
|
|
259
|
+
(focused)="onDestinationFieldFocused($event)"
|
|
260
|
+
(blurred)="onDestinationFieldBlurred($event)"
|
|
261
|
+
></cqa-custom-input>
|
|
262
|
+
|
|
263
|
+
<!-- Folder tree picker -->
|
|
264
|
+
<cqa-move-to-folder-dialog
|
|
265
|
+
[folders]="folders"
|
|
266
|
+
[labels]="labels"
|
|
267
|
+
[currentFolderId]="currentFolderId"
|
|
268
|
+
[pickedFolderId]="pickedFolderId"
|
|
269
|
+
[pickerHeight]="pickerHeight"
|
|
270
|
+
(pickedFolderIdChange)="onParentPicked($event)"
|
|
271
|
+
></cqa-move-to-folder-dialog>
|
|
272
|
+
</div>
|
|
273
|
+
`, host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [] }]
|
|
274
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { folders: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], labels: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], testSuiteLabels: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], currentFolderId: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], currentFolderName: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], suiteName: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], pickedFolderId: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], pickerHeight: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], fieldsDisabled: [{
|
|
291
|
+
type: Input
|
|
292
|
+
}], pickedFolderIdChange: [{
|
|
293
|
+
type: Output
|
|
294
|
+
}], submitted: [{
|
|
295
|
+
type: Output
|
|
296
|
+
}], cancelled: [{
|
|
297
|
+
type: Output
|
|
298
|
+
}], currentFieldFocus: [{
|
|
299
|
+
type: Output
|
|
300
|
+
}], currentFieldBlur: [{
|
|
301
|
+
type: Output
|
|
302
|
+
}], destinationFieldFocus: [{
|
|
303
|
+
type: Output
|
|
304
|
+
}], destinationFieldBlur: [{
|
|
305
|
+
type: Output
|
|
306
|
+
}] } });
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS10ZXN0LXN1aXRlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3Qtc3VpdGUvbW92ZS10ZXN0LXN1aXRlLWRpYWxvZy9tb3ZlLXRlc3Qtc3VpdGUtZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsc0JBQXNCLEdBR3ZCLE1BQU0sc0VBQXNFLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFtQixNQUFNLHNCQUFzQixDQUFDOzs7O0FBRWxGOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQW1ESCxNQUFNLE9BQU8sNEJBQTRCO0lBMkV2QyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTFFMUMsd0ZBQXdGO1FBQ3hGLGlGQUFpRjtRQUNqRixpRkFBaUY7UUFDakYsa0ZBQWtGO1FBQ2xGLHNGQUFzRjtRQUU5RSxhQUFRLEdBQWlCLEVBQUUsQ0FBQztRQU81QixZQUFPLEdBQWtCLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBTy9EOzs7dUZBRytFO1FBQ3ZFLHFCQUFnQixHQUFvQixFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztRQU83RTswRUFDa0U7UUFDekQsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBRS9DOztpRkFFeUU7UUFDaEUsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUVqRDs7b0RBRTRDO1FBQ25DLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFaEMsdUVBQXVFO1FBQzlELG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUU5Qzt1RkFDK0U7UUFDdEUsaUJBQVksR0FBVyxPQUFPLENBQUM7UUFFeEM7O3FGQUU2RTtR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O3NCQUFsQixLQUFLO2dCQVdPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBUUcsZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUlHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9NT0RVTEFSX0xBQkVMUyxcbiAgRm9sZGVyTm9kZSxcbiAgTW9kdWxhckxhYmVscyxcbn0gZnJvbSAnLi4vLi4vdGVtcGxhdGVzL21vZHVsYXItdGFibGUtdGVtcGxhdGUvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS5tb2RlbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9URVNUX1NVSVRFX0xBQkVMUywgVGVzdFN1aXRlTGFiZWxzIH0gZnJvbSAnLi4vdGVzdC1zdWl0ZS5tb2RlbHMnO1xuXG4vKipcbiAqIEJvZHkgb2YgdGhlIFwiTW92ZSBUZXN0IFN1aXRlXCIgZGlhbG9nLlxuICpcbiAqIFJldXNlcyBgPGNxYS1tb3ZlLXRvLWZvbGRlci1kaWFsb2c+YCBhcyB0aGUgdHJlZSBwaWNrZXIgKHNhbWUgZW1iZWRkaW5nIHBhdHRlcm5cbiAqIGFzIGBOZXdGb2xkZXJEaWFsb2dDb21wb25lbnRgKSBzbyBjb25zdW1lcnMgZ2V0IHRoZSBzYW1lIGZvbGRlci10cmVlIFVYLCB3aGlsZVxuICogYWRkaW5nIHR3byByZWFkLW9ubHkgcm93cyBhYm92ZSBpdDogdGhlIHN1aXRlJ3MgKipjdXJyZW50IGZvbGRlcioqIChzb3VyY2UpXG4gKiBhbmQgdGhlICoqZGVzdGluYXRpb24gZm9sZGVyKiogdGhlIHVzZXIgaGFzIHBpY2tlZCAobGl2ZS11cGRhdGVzKS5cbiAqXG4gKiBUd28gaW50ZWdyYXRpb24gcGF0aHM6XG4gKlxuICogIDEuICoqRnJvbSB3aXRoaW4gdGhpcyBsaWJyYXJ5KiogdmlhIGBEaWFsb2dTZXJ2aWNlLm9wZW4oLi4uKWAuIFRoZSBvdXRlclxuICogICAgIGBjcWEtZGlhbG9nYCBzdXBwbGllcyB0aXRsZS9kZXNjcmlwdGlvbi9DYW5jZWwvTW92ZSBidXR0b25zOyB0aGUgTW92ZVxuICogICAgIGJ1dHRvbiByZWFkcyBgcGlja2VkRm9sZGVySWRgIHZpYSBgZGlhbG9nUmVmLmdldENvbXBvbmVudEluc3RhbmNlKClgIGFuZFxuICogICAgIGNoZWNrcyBgaXNWYWxpZGAgYmVmb3JlIGNsb3NpbmcuXG4gKlxuICogIDIuICoqSG9zdC1kcml2ZW4qKiDigJQgaG9zdCByZW5kZXJzIGA8Y3FhLW1vdmUtdGVzdC1zdWl0ZS1kaWFsb2c+YCBpbnNpZGUgaXRzXG4gKiAgICAgb3duIG1vZGFsIGFuZCBsaXN0ZW5zIHRvIGAoc3VibWl0dGVkKWAgLyBgKGNhbmNlbGxlZClgIC8gYChwaWNrZWRGb2xkZXJJZENoYW5nZSlgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbW92ZS10ZXN0LXN1aXRlLWRpYWxvZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLXctZnVsbFwiPlxuICAgICAgPCEtLSBUZXN0IHN1aXRlIG5hbWUgKHJlYWQtb25seSBkaXNwbGF5OyBzdXJmYWNlcyB3aGljaCBzdWl0ZSBpcyBiZWluZyBtb3ZlZCkgLS0+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBbbGFiZWxdPVwidGVzdFN1aXRlTGFiZWxzLm1vdmVUZXN0U3VpdGVEaWFsb2dTdWl0ZU5hbWVMYWJlbFwiXG4gICAgICAgIFt2YWx1ZV09XCJzdWl0ZU5hbWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGRzRGlzYWJsZWRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgPjwvY3FhLWN1c3RvbS1pbnB1dD5cblxuICAgICAgPCEtLSBDdXJyZW50IGZvbGRlciAocmVuZGVyZWQgYXMgYSBkaXNhYmxlZCBpbnB1dCkgLS0+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBbbGFiZWxdPVwidGVzdFN1aXRlTGFiZWxzLm1vdmVUZXN0U3VpdGVEaWFsb2dDdXJyZW50TGFiZWxcIlxuICAgICAgICBbdmFsdWVdPVwicmVzb2x2ZWRDdXJyZW50TmFtZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZHNEaXNhYmxlZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkN1cnJlbnRGaWVsZFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZm9jdXNlZCk9XCJvbkN1cnJlbnRGaWVsZEZvY3VzZWQoJGV2ZW50KVwiXG4gICAgICAgIChibHVycmVkKT1cIm9uQ3VycmVudEZpZWxkQmx1cnJlZCgkZXZlbnQpXCJcbiAgICAgID48L2NxYS1jdXN0b20taW5wdXQ+XG5cbiAgICAgIDwhLS0gRGVzdGluYXRpb24gZm9sZGVyIChyZW5kZXJlZCBhcyBhIGRpc2FibGVkIGlucHV0OyB2YWx1ZSBkcml2ZW4gYnkgdGhlIHRyZWUgcGlja2VyIGJlbG93KSAtLT5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtsYWJlbF09XCJ0ZXN0U3VpdGVMYWJlbHMubW92ZVRlc3RTdWl0ZURpYWxvZ0Rlc3RpbmF0aW9uTGFiZWxcIlxuICAgICAgICBbdmFsdWVdPVwiZGVzdGluYXRpb25GaWVsZFZhbHVlXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRlc3RpbmF0aW9uRmllbGRQbGFjZWhvbGRlclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZHNEaXNhYmxlZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uRmllbGRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzZWQpPVwib25EZXN0aW5hdGlvbkZpZWxkRm9jdXNlZCgkZXZlbnQpXCJcbiAgICAgICAgKGJsdXJyZWQpPVwib25EZXN0aW5hdGlvbkZpZWxkQmx1cnJlZCgkZXZlbnQpXCJcbiAgICAgID48L2NxYS1jdXN0b20taW5wdXQ+XG5cbiAgICAgIDwhLS0gRm9sZGVyIHRyZWUgcGlja2VyIC0tPlxuICAgICAgPGNxYS1tb3ZlLXRvLWZvbGRlci1kaWFsb2dcbiAgICAgICAgW2ZvbGRlcnNdPVwiZm9sZGVyc1wiXG4gICAgICAgIFtsYWJlbHNdPVwibGFiZWxzXCJcbiAgICAgICAgW2N1cnJlbnRGb2xkZXJJZF09XCJjdXJyZW50Rm9sZGVySWRcIlxuICAgICAgICBbcGlja2VkRm9sZGVySWRdPVwicGlja2VkRm9sZGVySWRcIlxuICAgICAgICBbcGlja2VySGVpZ2h0XT1cInBpY2tlckhlaWdodFwiXG4gICAgICAgIChwaWNrZWRGb2xkZXJJZENoYW5nZSk9XCJvblBhcmVudFBpY2tlZCgkZXZlbnQpXCJcbiAgICAgID48L2NxYS1tb3ZlLXRvLWZvbGRlci1kaWFsb2c+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1vdmVUZXN0U3VpdGVEaWFsb2dDb21wb25lbnQge1xuICAvLyBOT1RFOiBgZm9sZGVyc2AgYW5kIGBsYWJlbHNgIGFyZSBkZWNsYXJlZCBhcyBzZXR0ZXJzIChpbnN0ZWFkIG9mIHBsYWluIEBJbnB1dCBmaWVsZHMpXG4gIC8vIGJlY2F1c2UgYERpYWxvZ1NlcnZpY2Uub3BlbiguLi4pYCBhc3NpZ25zIHRoZSBgaW5wdXRzYCBtYXAgdmlhIGRpcmVjdCBwcm9wZXJ0eVxuICAvLyBhc3NpZ25tZW50ICphZnRlciogYGF0dGFjaENvbXBvbmVudGAgaGFzIGFscmVhZHkgcnVuIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGVcbiAgLy8gaG9va3Mg4oCUIGRpcmVjdCBhc3NpZ25tZW50IGJ5cGFzc2VzIGBuZ09uQ2hhbmdlc2AsIHNvIHNldHRlcnMga2VlcCBkZXJpdmVkIHN0YXRlXG4gIC8vIGluIHN5bmMgbm8gbWF0dGVyIHRoZSBhc3NpZ25tZW50IG9yZGVyLiBTYW1lIHBhdHRlcm4gYXMgYE5ld0ZvbGRlckRpYWxvZ0NvbXBvbmVudGAuXG5cbiAgcHJpdmF0ZSBfZm9sZGVyczogRm9sZGVyTm9kZVtdID0gW107XG4gIEBJbnB1dCgpIHNldCBmb2xkZXJzKHZhbHVlOiBGb2xkZXJOb2RlW10pIHtcbiAgICB0aGlzLl9mb2xkZXJzID0gdmFsdWUgfHwgW107XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IGZvbGRlcnMoKTogRm9sZGVyTm9kZVtdIHsgcmV0dXJuIHRoaXMuX2ZvbGRlcnM7IH1cblxuICBwcml2YXRlIF9sYWJlbHM6IE1vZHVsYXJMYWJlbHMgPSB7IC4uLkRFRkFVTFRfTU9EVUxBUl9MQUJFTFMgfTtcbiAgQElucHV0KCkgc2V0IGxhYmVscyh2YWx1ZTogTW9kdWxhckxhYmVscykge1xuICAgIHRoaXMuX2xhYmVscyA9IHZhbHVlIHx8IHsgLi4uREVGQVVMVF9NT0RVTEFSX0xBQkVMUyB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCBsYWJlbHMoKTogTW9kdWxhckxhYmVscyB7IHJldHVybiB0aGlzLl9sYWJlbHM7IH1cblxuICAvKiogVGVzdC1zdWl0ZS1zZWN0aW9uIGxhYmVscyAodGl0bGUsIGRlc2NyaXB0aW9uLCBidXR0b24gdGV4dCwgZmllbGQgbGFiZWxzLFxuICAgKiAgcGxhY2Vob2xkZXIpLiBLZXB0IHNlcGFyYXRlIGZyb20gYGxhYmVsc2AgKE1vZHVsYXJMYWJlbHMpIHNvIHRoZSBlbWJlZGRlZFxuICAgKiAgcGlja2VyIGNhbiBrZWVwIGl0cyBtb2R1bGFyLXRhYmxlLXRlbXBsYXRlIGxhYmVsIG1vZGVsLiBTYW1lIHNldHRlclxuICAgKiAgcGF0dGVybiBhcyBgbGFiZWxzYCBmb3IgRGlhbG9nU2VydmljZSBwcm9wZXJ0eS1hc3NpZ25tZW50IGNvbXBhdGliaWxpdHkuICovXG4gIHByaXZhdGUgX3Rlc3RTdWl0ZUxhYmVsczogVGVzdFN1aXRlTGFiZWxzID0geyAuLi5ERUZBVUxUX1RFU1RfU1VJVEVfTEFCRUxTIH07XG4gIEBJbnB1dCgpIHNldCB0ZXN0U3VpdGVMYWJlbHModmFsdWU6IFRlc3RTdWl0ZUxhYmVscykge1xuICAgIHRoaXMuX3Rlc3RTdWl0ZUxhYmVscyA9IHZhbHVlIHx8IHsgLi4uREVGQVVMVF9URVNUX1NVSVRFX0xBQkVMUyB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCB0ZXN0U3VpdGVMYWJlbHMoKTogVGVzdFN1aXRlTGFiZWxzIHsgcmV0dXJuIHRoaXMuX3Rlc3RTdWl0ZUxhYmVsczsgfVxuXG4gIC8qKiBGb2xkZXIgdGhlIHN1aXRlIGN1cnJlbnRseSBsaXZlcyBpbi4gVXNlZCBib3RoIHRvIGdyYXkgb3V0IHRoZSByb3cgaW4gdGhlXG4gICAqICBlbWJlZGRlZCBwaWNrZXIgYW5kIHRvIHJlbmRlciB0aGUgXCJDdXJyZW50IGZvbGRlclwiIHJlYWRvdXQuICovXG4gIEBJbnB1dCgpIGN1cnJlbnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgY3VycmVudC1mb2xkZXIgZGlzcGxheSBuYW1lLiBXaGVuIG5vdCBwcm92aWRlZCxcbiAgICogIHRoZSBjb21wb25lbnQgcmVzb2x2ZXMgdGhlIG5hbWUgZnJvbSBgZm9sZGVyc2AgYnkgd2Fsa2luZyB0byBgY3VycmVudEZvbGRlcklkYCxcbiAgICogIGZhbGxpbmcgYmFjayB0byBgbGFiZWxzLm1vdmVEaWFsb2dSb290YCAoXCJVbm9yZ2FuaXplZFwiKSB3aGVuIG51bGwuICovXG4gIEBJbnB1dCgpIGN1cnJlbnRGb2xkZXJOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogTmFtZSBvZiB0aGUgdGVzdCBzdWl0ZSBiZWluZyBtb3ZlZC4gUmVuZGVyZWQgYXMgYSBkaXNhYmxlZCBpbnB1dCBhdCB0aGVcbiAgICogIHRvcCBvZiB0aGUgZGlhbG9nIGJvZHkgc28gdGhlIHVzZXIgY2FuIGNvbmZpcm0gd2hpY2ggc3VpdGUgdGhlIG1vdmVcbiAgICogIGFwcGxpZXMgdG8uIERlZmF1bHRzIHRvIGVtcHR5IHN0cmluZy4gKi9cbiAgQElucHV0KCkgc3VpdGVOYW1lOiBzdHJpbmcgPSAnJztcblxuICAvKiogRGVzdGluYXRpb24gZm9sZGVyIGlkIHBpY2tlZCBieSB0aGUgdXNlci4gVHdvLXdheS1iaW5kIGZyaWVuZGx5LiAqL1xuICBASW5wdXQoKSBwaWNrZWRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEhlaWdodCBvZiB0aGUgZW1iZWRkZWQgcGlja2VyLiBEZWZhdWx0cyB0byAyNDBweCAobWF0Y2hlcyB0aGUgcGFyZW50LWZvbGRlclxuICAgKiAgcGlja2VyIGhlaWdodCBpbiBgTmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50YCkgc28gdGhlIG1vZGFsIHN0YXlzIGNvbXBhY3QuICovXG4gIEBJbnB1dCgpIHBpY2tlckhlaWdodDogc3RyaW5nID0gJzI0MHB4JztcblxuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYm90aCB0aGUgQ3VycmVudCBmb2xkZXIgYW5kIERlc3RpbmF0aW9uIGZvbGRlciBpbnB1dHNcbiAgICogIHJlbmRlciBhcyBkaXNhYmxlZCAocmVhZC1vbmx5IHZpYSB0aGUgY3FhLWN1c3RvbS1pbnB1dCBgW2Rpc2FibGVkXWAgZmxhZykuXG4gICAqICBTZXQgdG8gZmFsc2UgaWYgYSBob3N0IG5lZWRzIHRvIHJlLWVuYWJsZSBpbnRlcmFjdGlvbiBvbiB0aG9zZSBmaWVsZHMuICovXG4gIEBJbnB1dCgpIGZpZWxkc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgcGlja2VkRm9sZGVySWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBzdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFyZ2V0Rm9sZGVySWQ6IG51bWJlciB8IG51bGwgfT4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogQnViYmxlIGNxYS1jdXN0b20taW5wdXQgZm9jdXMvYmx1ciBldmVudHMgdXAgdG8gaG9zdHMuIFVzZWZ1bCB3aGVuXG4gICAqICBgZmllbGRzRGlzYWJsZWQgPSBmYWxzZWAgYW5kIHRoZSBob3N0IHdhbnRzIHRvIHJlYWN0IHRvIGludGVyYWN0aW9uLiAqL1xuICBAT3V0cHV0KCkgY3VycmVudEZpZWxkRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjdXJyZW50RmllbGRCbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25GaWVsZEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25GaWVsZEJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRoZSBmaXJzdCB0aW1lIHRoZSB1c2VyIHBpY2tzIGFueXRoaW5nLiBMZXRzIGBpc1ZhbGlkYCB0cmVhdFxuICAgKiAgdGhlIGluaXRpYWwgcHJlLXRvdWNoIHN0YXRlIGFzIFwibm90aGluZyBzZWxlY3RlZFwiIOKAlCBpbXBvcnRhbnQgd2hlbiB0aGVcbiAgICogIHN1aXRlIHN0YXJ0cyBpbiBVbm9yZ2FuaXplZCAoYGN1cnJlbnRGb2xkZXJJZCA9IG51bGxgKSBzbyBhIGZyZXNoIGRpYWxvZ1xuICAgKiAgZG9lc24ndCBhcHBlYXIgdmFsaWQganVzdCBiZWNhdXNlIGBwaWNrZWRGb2xkZXJJZGAgYWxzbyBkZWZhdWx0cyB0byBudWxsLiAqL1xuICBwcml2YXRlIHBpY2tlZFRvdWNoZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgb25QYXJlbnRQaWNrZWQoaWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBsZXQgbmV4dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWQgPSB0eXBlb2YgaWQgPT09ICdudW1iZXInID8gaWQgOiBOdW1iZXIoaWQpO1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShjb2VyY2VkKSkgbmV4dCA9IGNvZXJjZWQ7XG4gICAgfVxuICAgIHRoaXMucGlja2VkRm9sZGVySWQgPSBuZXh0O1xuICAgIHRoaXMucGlja2VkVG91Y2hlZCA9IHRydWU7XG4gICAgdGhpcy5waWNrZWRGb2xkZXJJZENoYW5nZS5lbWl0KG5leHQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFRydWUgb25jZSB0aGUgdXNlciBoYXMgcGlja2VkIGEgZGVzdGluYXRpb24gdmlhIHRoZSBlbWJlZGRlZCB0cmVlLiBEcml2ZXNcbiAgICogIHRoZSBkZXN0aW5hdGlvbi1yZWFkb3V0IHN0eWxpbmcgKGluZGlnbyB3aGVuIHBpY2tlZCwgbXV0ZWQgd2hlbiBub3QpLiAqL1xuICBnZXQgaGFzUGljaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWNrZWRUb3VjaGVkO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkQ3VycmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVyTmFtZSAmJiB0aGlzLmN1cnJlbnRGb2xkZXJOYW1lLnRyaW0oKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGb2xkZXJOYW1lO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVySWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWxzLm1vdmVEaWFsb2dSb290O1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy5maW5kRm9sZGVyTmFtZSh0aGlzLl9mb2xkZXJzLCB0aGlzLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgcmV0dXJuIG5hbWUgPz8gdGhpcy5sYWJlbHMubW92ZURpYWxvZ1Jvb3Q7XG4gIH1cblxuICAvKiogVmFsdWUgc2hvd24gaW5zaWRlIHRoZSBEZXN0aW5hdGlvbiBpbnB1dC4gRW1wdHkgdW50aWwgdGhlIHVzZXIgcGlja3M7IG9uY2VcbiAgICogIHBpY2tlZCwgdGhlIHJlc29sdmVkIGZvbGRlciBuYW1lIChvciBgbGFiZWxzLm1vdmVEaWFsb2dSb290YCBmb3IgVW5vcmdhbml6ZWQpLlxuICAgKiAgRW1wdHkgc3RhdGUgbGV0cyB0aGUgaW5wdXQncyBgW3BsYWNlaG9sZGVyXWAgc2hvdyB0aHJvdWdoLiAqL1xuICBnZXQgZGVzdGluYXRpb25GaWVsZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnBpY2tlZFRvdWNoZWQpIHJldHVybiAnJztcbiAgICBpZiAodGhpcy5waWNrZWRGb2xkZXJJZCA9PSBudWxsKSByZXR1cm4gdGhpcy5sYWJlbHMubW92ZURpYWxvZ1Jvb3Q7XG4gICAgcmV0dXJuIHRoaXMuZmluZEZvbGRlck5hbWUodGhpcy5fZm9sZGVycywgdGhpcy5waWNrZWRGb2xkZXJJZCkgPz8gdGhpcy5sYWJlbHMubW92ZURpYWxvZ1Jvb3Q7XG4gIH1cblxuICAvKiogUGxhY2Vob2xkZXIgc2hvd24gaW4gdGhlIERlc3RpbmF0aW9uIGlucHV0IGJlZm9yZSB0aGUgdXNlciBwaWNrcy4gKi9cbiAgZ2V0IGRlc3RpbmF0aW9uRmllbGRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZXN0U3VpdGVMYWJlbHMubW92ZVRlc3RTdWl0ZURpYWxvZ0Rlc3RpbmF0aW9uUGxhY2Vob2xkZXI7XG4gIH1cblxuICAvKiogTW92ZSBpcyB2YWxpZCB3aGVuIHRoZSB1c2VyIGhhcyBwaWNrZWQgYSBkZXN0aW5hdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGVcbiAgICogIGN1cnJlbnQgZm9sZGVyLiBQaWNraW5nIHRoZSBzYW1lIGZvbGRlciBhcyB0aGUgc291cmNlIGlzIGEgbm8tb3AsIGFuZCB3ZVxuICAgKiAgYWxzbyByZXF1aXJlIGFuIGV4cGxpY2l0IGludGVyYWN0aW9uIChgcGlja2VkVG91Y2hlZGApLiAqL1xuICBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMucGlja2VkVG91Y2hlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnBpY2tlZEZvbGRlcklkICE9PSB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgfVxuXG4gIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQoeyB0YXJnZXRGb2xkZXJJZDogdGhpcy5waWNrZWRGb2xkZXJJZCB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICAvKiogSG9va3MgZm9yIHRoZSBDdXJyZW50IGZvbGRlciBjcWEtY3VzdG9tLWlucHV0LiBGaWVsZCBpcyBkaXNhYmxlZCBieVxuICAgKiAgZGVmYXVsdCwgc28gdGhlc2UgbW9zdGx5IG5vLW9wOyB0aGV5J3JlIHdpcmVkIHNvIHRoZSBjb21wb25lbnQgc3RpbGxcbiAgICogIGJlaGF2ZXMgY29ycmVjdGx5IHdoZW4gYGZpZWxkc0Rpc2FibGVkID0gZmFsc2VgLiAqL1xuICBvbkN1cnJlbnRGaWVsZFZhbHVlQ2hhbmdlKF92YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gUmVhZC1vbmx5IGZpZWxkIOKAlCBpZ25vcmUgcHJvZ3JhbW1hdGljIGNoYW5nZXMuXG4gIH1cbiAgb25DdXJyZW50RmllbGRGb2N1c2VkKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RmllbGRGb2N1cy5lbWl0KGV2ZW50KTtcbiAgfVxuICBvbkN1cnJlbnRGaWVsZEJsdXJyZWQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRGaWVsZEJsdXIuZW1pdChldmVudCk7XG4gIH1cblxuICAvKiogSG9va3MgZm9yIHRoZSBEZXN0aW5hdGlvbiBmb2xkZXIgY3FhLWN1c3RvbS1pbnB1dC4gVmFsdWUgaXMgZHJpdmVuIGJ5IHRoZVxuICAgKiAgdHJlZSBwaWNrZXIgYmVsb3csIHNvIHRoZSBpbnB1dCBpdHNlbGYgaXMgaW5mb3JtYXRpb25hbC4gKi9cbiAgb25EZXN0aW5hdGlvbkZpZWxkVmFsdWVDaGFuZ2UoX3ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBEZXN0aW5hdGlvbiBpcyBkcml2ZW4gYnkgdGhlIHRyZWUgcGlja2VyLCBub3QgdGhlIGlucHV0IGl0c2VsZi5cbiAgfVxuICBvbkRlc3RpbmF0aW9uRmllbGRGb2N1c2VkKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbkZpZWxkRm9jdXMuZW1pdChldmVudCk7XG4gIH1cbiAgb25EZXN0aW5hdGlvbkZpZWxkQmx1cnJlZChldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdGluYXRpb25GaWVsZEJsdXIuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRGb2xkZXJOYW1lKG5vZGVzOiBGb2xkZXJOb2RlW10sIGlkOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMgfHwgW10pIHtcbiAgICAgIGlmIChuLmlkID09PSBpZCkgcmV0dXJuIG4ubmFtZTtcbiAgICAgIGlmIChuLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5maW5kRm9sZGVyTmFtZShuLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgIGlmIChoaXQgIT0gbnVsbCkgcmV0dXJuIGhpdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const DEFAULT_TEST_SUITE_LABELS = {
|
|
2
|
+
moveTestSuiteDialogTitle: 'Move test suite',
|
|
3
|
+
moveTestSuiteDialogDescription: 'Pick a destination folder for this test suite.',
|
|
4
|
+
moveTestSuiteDialogSuiteNameLabel: 'Test suite',
|
|
5
|
+
moveTestSuiteDialogCurrentLabel: 'Current folder',
|
|
6
|
+
moveTestSuiteDialogDestinationLabel: 'Destination folder',
|
|
7
|
+
moveTestSuiteDialogDestinationPlaceholder: 'Select a folder below',
|
|
8
|
+
moveTestSuiteDialogCancel: 'Cancel',
|
|
9
|
+
moveTestSuiteDialogConfirm: 'Move',
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1zdWl0ZS5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3Qtc3VpdGUvdGVzdC1zdWl0ZS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFvQjtJQUN4RCx3QkFBd0IsRUFBRSxpQkFBaUI7SUFDM0MsOEJBQThCLEVBQUUsZ0RBQWdEO0lBQ2hGLGlDQUFpQyxFQUFFLFlBQVk7SUFDL0MsK0JBQStCLEVBQUUsZ0JBQWdCO0lBQ2pELG1DQUFtQyxFQUFFLG9CQUFvQjtJQUN6RCx5Q0FBeUMsRUFBRSx1QkFBdUI7SUFDbEUseUJBQXlCLEVBQUUsUUFBUTtJQUNuQywwQkFBMEIsRUFBRSxNQUFNO0NBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExhYmVscyBmb3IgdGhlIFRlc3QgU3VpdGUgc2VjdGlvbidzIGRpYWxvZ3MuIEtlcHQgc2VwYXJhdGUgZnJvbVxuICogYE1vZHVsYXJMYWJlbHNgIGJlY2F1c2UgdGhlc2UgYXJlIHRlc3Qtc3VpdGUtc3BlY2lmaWMgY29weSDigJQgdGhlIG1vZHVsYXJcbiAqIHRhYmxlIHRlbXBsYXRlIGRvZXNuJ3QgKGFuZCBzaG91bGRuJ3QpIG5lZWQgdGhlbS5cbiAqXG4gKiBDdXJyZW50bHkgY29uc3VtZWQgYnkgYE1vdmVUZXN0U3VpdGVEaWFsb2dDb21wb25lbnRgIGZvciBpdHMgb3duIGZpZWxkXG4gKiBsYWJlbHMgYW5kIGJ5IHRoZSBvdXRlciBkaWFsb2cgc2hlbGwgKHRpdGxlIC8gZGVzY3JpcHRpb24gLyBDYW5jZWwgLyBNb3ZlKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0U3VpdGVMYWJlbHMge1xuICBtb3ZlVGVzdFN1aXRlRGlhbG9nVGl0bGU6IHN0cmluZztcbiAgbW92ZVRlc3RTdWl0ZURpYWxvZ0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dTdWl0ZU5hbWVMYWJlbDogc3RyaW5nO1xuICBtb3ZlVGVzdFN1aXRlRGlhbG9nQ3VycmVudExhYmVsOiBzdHJpbmc7XG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dEZXN0aW5hdGlvbkxhYmVsOiBzdHJpbmc7XG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dEZXN0aW5hdGlvblBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dDYW5jZWw6IHN0cmluZztcbiAgbW92ZVRlc3RTdWl0ZURpYWxvZ0NvbmZpcm06IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVTVF9TVUlURV9MQUJFTFM6IFRlc3RTdWl0ZUxhYmVscyA9IHtcbiAgbW92ZVRlc3RTdWl0ZURpYWxvZ1RpdGxlOiAnTW92ZSB0ZXN0IHN1aXRlJyxcbiAgbW92ZVRlc3RTdWl0ZURpYWxvZ0Rlc2NyaXB0aW9uOiAnUGljayBhIGRlc3RpbmF0aW9uIGZvbGRlciBmb3IgdGhpcyB0ZXN0IHN1aXRlLicsXG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dTdWl0ZU5hbWVMYWJlbDogJ1Rlc3Qgc3VpdGUnLFxuICBtb3ZlVGVzdFN1aXRlRGlhbG9nQ3VycmVudExhYmVsOiAnQ3VycmVudCBmb2xkZXInLFxuICBtb3ZlVGVzdFN1aXRlRGlhbG9nRGVzdGluYXRpb25MYWJlbDogJ0Rlc3RpbmF0aW9uIGZvbGRlcicsXG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dEZXN0aW5hdGlvblBsYWNlaG9sZGVyOiAnU2VsZWN0IGEgZm9sZGVyIGJlbG93JyxcbiAgbW92ZVRlc3RTdWl0ZURpYWxvZ0NhbmNlbDogJ0NhbmNlbCcsXG4gIG1vdmVUZXN0U3VpdGVEaWFsb2dDb25maXJtOiAnTW92ZScsXG59O1xuIl19
|