@gravitee/ui-components 3.24.5-renovate-github-markdown-css-5-x-6cd8067 → 3.25.1
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/assets/css/github-markdown-css/github-markdown.css +545 -500
- package/assets/i18n/en.json +3 -0
- package/assets/i18n/fr.json +3 -0
- package/assets/icons/design.svg +1 -1
- package/package.json +2 -9
- package/src/atoms/gv-autocomplete.js +132 -156
- package/src/atoms/gv-button.js +73 -248
- package/src/atoms/gv-checkbox.js +45 -103
- package/src/atoms/gv-date-picker-calendar.js +312 -393
- package/src/atoms/gv-date-picker-cell.js +57 -81
- package/src/atoms/gv-date-picker.js +180 -319
- package/src/atoms/gv-file-upload.js +85 -195
- package/src/atoms/gv-icon.js +13 -34
- package/src/atoms/gv-image.js +31 -66
- package/src/atoms/gv-input-message.js +12 -37
- package/src/atoms/gv-input.js +117 -148
- package/src/atoms/gv-link.js +47 -125
- package/src/atoms/gv-message.js +18 -69
- package/src/atoms/gv-metric.js +19 -68
- package/src/atoms/gv-relative-time.js +67 -38
- package/src/atoms/gv-select-native.js +96 -215
- package/src/atoms/gv-select.js +110 -230
- package/src/atoms/gv-spinner.js +5 -26
- package/src/atoms/gv-state.js +25 -66
- package/src/atoms/gv-switch.js +40 -160
- package/src/atoms/gv-tag.js +26 -78
- package/src/atoms/gv-text.js +22 -83
- package/src/charts/gv-chart-bar.js +22 -18
- package/src/charts/gv-chart-gauge.js +28 -31
- package/src/charts/gv-chart-histogram.js +18 -10
- package/src/charts/gv-chart-line.js +70 -59
- package/src/charts/gv-chart-map.js +44 -42
- package/src/charts/gv-chart-pie.js +18 -14
- package/src/index.js +1 -0
- package/src/lib/cron-expression.js +40 -35
- package/src/lib/date.js +10 -1
- package/src/lib/events.js +3 -1
- package/src/lib/http-client-schema-form.js +13 -12
- package/src/lib/http.js +57 -56
- package/src/lib/i18n.js +30 -22
- package/src/lib/item.js +13 -12
- package/src/lib/properties.js +77 -42
- package/src/lib/schema-form.js +4 -5
- package/src/lib/studio.js +13 -60
- package/src/lib/style.js +8 -8
- package/src/lib/text-format.js +14 -7
- package/src/lib/theme.js +8 -5
- package/src/lib/utils.js +17 -18
- package/src/mixins/chart-element.js +31 -54
- package/src/mixins/input-element.js +60 -47
- package/src/mixins/item-resource.js +34 -32
- package/src/mixins/keyboard-element.js +6 -5
- package/src/mixins/update-after-browser.js +4 -1
- package/src/mixins/with-resize-observer.js +23 -13
- package/src/mixins/with-skeleton-attribute.js +54 -48
- package/src/molecules/gv-card-full.js +26 -147
- package/src/molecules/gv-card-list.js +13 -42
- package/src/molecules/gv-card.js +17 -91
- package/src/molecules/gv-category-list.js +6 -17
- package/src/molecules/gv-category.js +23 -103
- package/src/molecules/gv-code.js +81 -143
- package/src/molecules/gv-confirm.js +41 -71
- package/src/molecules/gv-cron-editor.js +143 -389
- package/src/molecules/gv-dropdown-menu.js +14 -46
- package/src/molecules/gv-expandable.js +31 -59
- package/src/molecules/gv-expression-language.js +176 -138
- package/src/molecules/gv-identity-picture.js +42 -65
- package/src/molecules/gv-list.js +42 -134
- package/src/molecules/gv-metrics.js +37 -49
- package/src/molecules/gv-modal.js +28 -95
- package/src/molecules/gv-nav.js +49 -75
- package/src/molecules/gv-option.js +57 -130
- package/src/molecules/gv-plans.js +86 -209
- package/src/molecules/gv-popover.js +57 -177
- package/src/molecules/gv-promote.js +28 -146
- package/src/molecules/gv-rating-list.js +69 -195
- package/src/molecules/gv-rating.js +52 -105
- package/src/molecules/gv-row-expandable.js +5 -11
- package/src/molecules/gv-row.js +21 -147
- package/src/molecules/gv-stats.js +23 -48
- package/src/molecules/gv-stepper.js +43 -187
- package/src/molecules/gv-table.js +199 -309
- package/src/molecules/gv-tree.js +33 -156
- package/src/organisms/gv-documentation.js +45 -128
- package/src/organisms/gv-header.js +37 -195
- package/src/organisms/gv-http-client.js +32 -168
- package/src/organisms/gv-menu.js +37 -158
- package/src/organisms/gv-newsletter-subscription.js +48 -189
- package/src/organisms/gv-pagination.js +49 -77
- package/src/organisms/gv-properties.js +271 -492
- package/src/organisms/gv-resizable-views.js +41 -259
- package/src/organisms/gv-resources.js +168 -275
- package/src/organisms/gv-schema-form-array.js +49 -159
- package/src/organisms/gv-schema-form-control-object.js +59 -73
- package/src/organisms/gv-schema-form-control.js +107 -134
- package/src/organisms/gv-schema-form.js +219 -280
- package/src/organisms/gv-tabs.js +66 -98
- package/src/organisms/gv-user-menu.js +36 -201
- package/src/organisms/gv-vertical-menu.js +20 -61
- package/src/policy-studio/gv-flow-step.js +106 -245
- package/src/policy-studio/gv-flow.js +125 -304
- package/src/policy-studio/gv-policy-studio-menu.js +157 -471
- package/src/policy-studio/gv-policy-studio.js +714 -760
- package/src/styles/empty.js +3 -20
- package/src/styles/input.js +3 -247
- package/src/styles/link.js +3 -16
- package/src/styles/shapes.js +1 -0
- package/src/styles/skeleton.js +3 -37
- package/src/styles/zoom.js +3 -24
- package/src/theme/gv-theme.js +21 -60
- package/CHANGELOG.md +0 -1260
- package/LICENSE.txt +0 -202
- package/README.md +0 -195
- package/src/.eslintrc.js +0 -19
- package/src/theme/definition.json +0 -1762
|
@@ -29,32 +29,71 @@ import '../organisms/gv-schema-form-array';
|
|
|
29
29
|
import '../organisms/gv-schema-form-control-object';
|
|
30
30
|
import { isCodemirror, isObject, isComplexArray } from '../lib/schema-form';
|
|
31
31
|
import { UpdateAfterBrowser } from '../mixins/update-after-browser';
|
|
32
|
-
|
|
33
32
|
export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
34
33
|
static get properties() {
|
|
35
34
|
return {
|
|
36
|
-
type: {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
type: {
|
|
36
|
+
type: String
|
|
37
|
+
},
|
|
38
|
+
id: {
|
|
39
|
+
type: String,
|
|
40
|
+
reflect: true
|
|
41
|
+
},
|
|
42
|
+
name: {
|
|
43
|
+
type: String,
|
|
44
|
+
reflect: true
|
|
45
|
+
},
|
|
46
|
+
required: {
|
|
47
|
+
type: Boolean,
|
|
48
|
+
reflect: true
|
|
49
|
+
},
|
|
50
|
+
disabled: {
|
|
51
|
+
type: Boolean,
|
|
52
|
+
reflect: true
|
|
53
|
+
},
|
|
54
|
+
readonly: {
|
|
55
|
+
type: Boolean,
|
|
56
|
+
reflect: true
|
|
57
|
+
},
|
|
58
|
+
title: {
|
|
59
|
+
type: String,
|
|
60
|
+
reflect: true
|
|
61
|
+
},
|
|
62
|
+
pattern: {
|
|
63
|
+
type: String
|
|
64
|
+
},
|
|
65
|
+
control: {
|
|
66
|
+
type: Object
|
|
67
|
+
},
|
|
68
|
+
errors: {
|
|
69
|
+
type: Array
|
|
70
|
+
},
|
|
71
|
+
value: {
|
|
72
|
+
type: Object,
|
|
73
|
+
reflect: true
|
|
74
|
+
},
|
|
75
|
+
skeleton: {
|
|
76
|
+
type: Boolean,
|
|
77
|
+
reflect: true
|
|
78
|
+
},
|
|
79
|
+
hidden: {
|
|
80
|
+
type: Boolean,
|
|
81
|
+
reflect: true
|
|
82
|
+
},
|
|
83
|
+
writeOnly: {
|
|
84
|
+
type: Boolean,
|
|
85
|
+
reflect: true
|
|
86
|
+
},
|
|
87
|
+
compact: {
|
|
88
|
+
type: Boolean
|
|
89
|
+
}
|
|
51
90
|
};
|
|
52
91
|
}
|
|
53
92
|
|
|
54
93
|
constructor() {
|
|
55
|
-
super();
|
|
56
|
-
// When form has errors, the control is not update to conserve the error state.
|
|
94
|
+
super(); // When form has errors, the control is not update to conserve the error state.
|
|
57
95
|
// This list is used to force the update of properties even in error case.
|
|
96
|
+
|
|
58
97
|
this._observedProperties = ['disabled', 'readonly', 'required'];
|
|
59
98
|
}
|
|
60
99
|
|
|
@@ -67,10 +106,7 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
67
106
|
}
|
|
68
107
|
|
|
69
108
|
isPassword() {
|
|
70
|
-
return
|
|
71
|
-
this.control.writeOnly === true ||
|
|
72
|
-
(this.control['x-schema-form'] && this.control['x-schema-form'].type != null && this.control['x-schema-form'].type === 'password')
|
|
73
|
-
);
|
|
109
|
+
return this.control.writeOnly === true || this.control['x-schema-form'] && this.control['x-schema-form'].type != null && this.control['x-schema-form'].type === 'password';
|
|
74
110
|
}
|
|
75
111
|
|
|
76
112
|
getPlaceholder() {
|
|
@@ -97,10 +133,12 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
97
133
|
if (this.isObject()) {
|
|
98
134
|
return 'gv-schema-form-control-object';
|
|
99
135
|
}
|
|
100
|
-
|
|
136
|
+
|
|
137
|
+
if ((this.control.enum || this.control.items && this.control.items.enum) && !this.isAutocomplete()) {
|
|
101
138
|
if (this.control.type === 'array') {
|
|
102
139
|
return 'gv-select';
|
|
103
140
|
}
|
|
141
|
+
|
|
104
142
|
return 'gv-select-native';
|
|
105
143
|
} else if (isComplexArray(this.control)) {
|
|
106
144
|
return 'gv-schema-form-array';
|
|
@@ -123,7 +161,7 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
123
161
|
|
|
124
162
|
_updateProperties(element) {
|
|
125
163
|
if (element != null) {
|
|
126
|
-
this._observedProperties.forEach(
|
|
164
|
+
this._observedProperties.forEach(property => {
|
|
127
165
|
if (this[property] != null) {
|
|
128
166
|
element[property] = this[property];
|
|
129
167
|
}
|
|
@@ -138,10 +176,16 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
138
176
|
element.name = this.id;
|
|
139
177
|
element.skeleton = this.skeleton;
|
|
140
178
|
element.classList.add('form__control');
|
|
179
|
+
|
|
141
180
|
if (this.value == null && this.control.default != null) {
|
|
142
181
|
this.value = this.control.default;
|
|
143
|
-
dispatchCustomEvent(this, 'default-value', {
|
|
182
|
+
dispatchCustomEvent(this, 'default-value', {
|
|
183
|
+
value: this.value,
|
|
184
|
+
currentTarget: element,
|
|
185
|
+
control: this.control
|
|
186
|
+
});
|
|
144
187
|
}
|
|
188
|
+
|
|
145
189
|
if (this.value != null) {
|
|
146
190
|
this._setValue(element);
|
|
147
191
|
}
|
|
@@ -160,6 +204,7 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
160
204
|
} else {
|
|
161
205
|
const tmp = this.id.split('.');
|
|
162
206
|
const title = tmp[tmp.length - 1];
|
|
207
|
+
|
|
163
208
|
if (isNaN(parseInt(title, 10))) {
|
|
164
209
|
element.label = title;
|
|
165
210
|
element.title = title;
|
|
@@ -182,21 +227,24 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
182
227
|
|
|
183
228
|
const placeholder = this.getPlaceholder();
|
|
184
229
|
|
|
185
|
-
if (this.control.enum ||
|
|
230
|
+
if (this.control.enum || this.control.items && this.control.items.enum) {
|
|
186
231
|
const options = this.control.enum || this.control.items.enum;
|
|
232
|
+
|
|
187
233
|
if (this.control['x-schema-form'] && this.control['x-schema-form'].titleMap) {
|
|
188
|
-
element.options = options.map(
|
|
234
|
+
element.options = options.map(value => ({
|
|
189
235
|
value,
|
|
190
|
-
label: this.control['x-schema-form'].titleMap[value] || value
|
|
236
|
+
label: this.control['x-schema-form'].titleMap[value] || value
|
|
191
237
|
}));
|
|
192
238
|
} else {
|
|
193
239
|
element.options = options;
|
|
194
240
|
}
|
|
241
|
+
|
|
195
242
|
if (this.control.type === 'array') {
|
|
196
243
|
element.multiple = true;
|
|
197
244
|
}
|
|
198
245
|
} else if (this.isCodemirror()) {
|
|
199
246
|
element.options = this.control['x-schema-form'].codemirrorOptions;
|
|
247
|
+
|
|
200
248
|
if (this.control.default != null && element.options.value == null) {
|
|
201
249
|
element.options.value = this.control.default;
|
|
202
250
|
}
|
|
@@ -227,8 +275,8 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
227
275
|
}
|
|
228
276
|
|
|
229
277
|
element.addEventListener(`${elementName}:input`, this._onInput.bind(this));
|
|
230
|
-
|
|
231
278
|
let currentTarget;
|
|
279
|
+
|
|
232
280
|
if (this.isAutocomplete()) {
|
|
233
281
|
const autocomplete = document.createElement('gv-autocomplete');
|
|
234
282
|
autocomplete.minChars = 0;
|
|
@@ -242,12 +290,14 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
242
290
|
} else {
|
|
243
291
|
currentTarget = element;
|
|
244
292
|
}
|
|
293
|
+
|
|
245
294
|
if (this.control['x-schema-form'] != null) {
|
|
246
295
|
dispatchCustomEvent(this, 'control-ready', {
|
|
247
296
|
currentTarget,
|
|
248
|
-
control: this
|
|
297
|
+
control: this
|
|
249
298
|
});
|
|
250
299
|
}
|
|
300
|
+
|
|
251
301
|
return currentTarget;
|
|
252
302
|
}
|
|
253
303
|
|
|
@@ -255,26 +305,29 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
255
305
|
e.preventDefault();
|
|
256
306
|
e.stopPropagation();
|
|
257
307
|
let value = null;
|
|
308
|
+
|
|
258
309
|
if (e.target.tagName === 'GV-AUTOCOMPLETE') {
|
|
259
310
|
value = e.detail.value;
|
|
260
311
|
} else {
|
|
261
312
|
value = e.detail;
|
|
262
313
|
}
|
|
263
|
-
|
|
314
|
+
|
|
315
|
+
dispatchCustomEvent(this, 'change', {
|
|
316
|
+
value,
|
|
317
|
+
currentTarget: e.target,
|
|
318
|
+
control: this.control
|
|
319
|
+
});
|
|
264
320
|
}
|
|
265
321
|
|
|
266
322
|
getControls() {
|
|
267
|
-
return [
|
|
268
|
-
...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control')),
|
|
269
|
-
...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-array')),
|
|
270
|
-
...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-object')),
|
|
271
|
-
];
|
|
323
|
+
return [...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control')), ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-array')), ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-object'))];
|
|
272
324
|
}
|
|
273
325
|
|
|
274
326
|
getControl(id) {
|
|
275
327
|
if (id == null) {
|
|
276
328
|
id = this.id;
|
|
277
329
|
}
|
|
330
|
+
|
|
278
331
|
return this.shadowRoot.querySelector(`[id="${id}"]`);
|
|
279
332
|
}
|
|
280
333
|
|
|
@@ -286,12 +339,13 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
286
339
|
controlElement.value = this.value.toString ? this.value.toString() : this.value;
|
|
287
340
|
}
|
|
288
341
|
}
|
|
342
|
+
|
|
289
343
|
return controlElement;
|
|
290
344
|
}
|
|
291
345
|
|
|
292
346
|
async updated(changedProperties) {
|
|
293
347
|
if (changedProperties.has('value')) {
|
|
294
|
-
Promise.all(this.getControls().map(
|
|
348
|
+
Promise.all(this.getControls().map(control => control.updateComplete)).then(() => {
|
|
295
349
|
this._setValue(this.getControl());
|
|
296
350
|
});
|
|
297
351
|
}
|
|
@@ -299,39 +353,42 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
299
353
|
|
|
300
354
|
async getUpdateComplete() {
|
|
301
355
|
await super.getUpdateComplete();
|
|
302
|
-
await Promise.all(this.getControls().map(
|
|
356
|
+
await Promise.all(this.getControls().map(e => e.updateComplete));
|
|
303
357
|
}
|
|
304
358
|
|
|
305
359
|
formatErrorMessage(error) {
|
|
306
360
|
let title;
|
|
361
|
+
|
|
307
362
|
if (this.control.properties != null && this.control.properties[error.argument] != null) {
|
|
308
363
|
title = this.control.properties[error.argument].title;
|
|
309
364
|
} else {
|
|
310
365
|
title = this.control.title;
|
|
311
366
|
}
|
|
367
|
+
|
|
312
368
|
if (title) {
|
|
313
369
|
return `<span>${error.message.replace(error.argument, title)}</span>`;
|
|
314
370
|
}
|
|
371
|
+
|
|
315
372
|
return `<span>${error.message}</span>`;
|
|
316
373
|
}
|
|
317
374
|
|
|
318
375
|
shouldUpdate(changedProperties) {
|
|
319
|
-
if (this._observedProperties.find(
|
|
376
|
+
if (this._observedProperties.find(property => changedProperties.has(property)) != null) {
|
|
320
377
|
this._updateProperties(this.getControl());
|
|
321
378
|
}
|
|
322
379
|
|
|
323
380
|
if (changedProperties.has('errors') && this.errors != null) {
|
|
324
381
|
// Set errors to complex controls
|
|
325
|
-
this.getControls().forEach(
|
|
382
|
+
this.getControls().forEach(control => {
|
|
326
383
|
control.errors = this.errors;
|
|
327
|
-
});
|
|
384
|
+
}); // Find simple controls and append error message
|
|
328
385
|
|
|
329
|
-
// Find simple controls and append error message
|
|
330
386
|
const errorContainer = this.shadowRoot.querySelectorAll('.form__control-error');
|
|
331
|
-
errorContainer.forEach(
|
|
332
|
-
this.errors.forEach(
|
|
387
|
+
errorContainer.forEach(container => container.innerHTML = '');
|
|
388
|
+
this.errors.forEach(error => {
|
|
333
389
|
const key = error.property === 'instance' ? error.argument : error.property.replace('instance.', '');
|
|
334
390
|
const errorContainer = this.shadowRoot.querySelector(`[id="${key}-error"]`);
|
|
391
|
+
|
|
335
392
|
if (errorContainer) {
|
|
336
393
|
const message = document.createElement('gv-input-message');
|
|
337
394
|
message.innerHTML = this.formatErrorMessage(error);
|
|
@@ -341,103 +398,19 @@ export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
|
|
|
341
398
|
});
|
|
342
399
|
return false;
|
|
343
400
|
}
|
|
401
|
+
|
|
344
402
|
return super.shouldUpdate(changedProperties);
|
|
345
403
|
}
|
|
346
404
|
|
|
347
405
|
render() {
|
|
348
|
-
return html`
|
|
349
|
-
${this._renderControl()}
|
|
350
|
-
<div class="form__control-error" id="${this.id + '-error'}"></div>
|
|
351
|
-
`;
|
|
406
|
+
return html` ${this._renderControl()} <div class="form__control-error" id="${this.id + '-error'}"></div> `;
|
|
352
407
|
}
|
|
353
408
|
|
|
354
409
|
static get styles() {
|
|
355
|
-
return [
|
|
356
|
-
|
|
357
|
-
css`
|
|
358
|
-
:host {
|
|
359
|
-
box-sizing: border-box;
|
|
360
|
-
margin: var(--gv-schema-form-control--m, 0.4rem);
|
|
361
|
-
display: block;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
:host([hidden]) {
|
|
365
|
-
visibility: hidden;
|
|
366
|
-
height: 0;
|
|
367
|
-
margin: 0;
|
|
368
|
-
padding: 0;
|
|
369
|
-
overflow: hidden;
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
.form__control-description,
|
|
373
|
-
.form__control-error {
|
|
374
|
-
font-size: 12px;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
.form__control-description {
|
|
378
|
-
opacity: 0.8;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
.form__control-label {
|
|
382
|
-
display: flex;
|
|
383
|
-
flex-direction: row;
|
|
384
|
-
border-bottom: 1px solid #d9d9d9;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
label {
|
|
388
|
-
margin: 0.2rem;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
.form__control-label label {
|
|
392
|
-
flex: 1;
|
|
393
|
-
text-transform: capitalize;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
.form__control-array,
|
|
397
|
-
.form__control-object {
|
|
398
|
-
display: flex;
|
|
399
|
-
flex-direction: column;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
.form__control-enum {
|
|
403
|
-
display: flex;
|
|
404
|
-
/*align-items: flex-end;*/
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
.form__control-array gv-button {
|
|
408
|
-
align-self: flex-end;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
.form__control {
|
|
412
|
-
position: relative;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
gv-select,
|
|
416
|
-
gv-select-native,
|
|
417
|
-
gv-input,
|
|
418
|
-
gv-code,
|
|
419
|
-
gv-switch,
|
|
420
|
-
gv-expression-language {
|
|
421
|
-
width: 100%;
|
|
422
|
-
margin: 0.2rem 0;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
gv-select:hover,
|
|
426
|
-
gv-select-native:hover,
|
|
427
|
-
gv-autocomplete:hover {
|
|
428
|
-
z-index: 70;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
.error {
|
|
432
|
-
color: var(--gv-theme-color-error, #f44336);
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
.warning {
|
|
436
|
-
color: var(--gv-theme-color-warning, #ff9800);
|
|
437
|
-
}
|
|
438
|
-
`,
|
|
439
|
-
];
|
|
410
|
+
return [// language=CSS
|
|
411
|
+
css`:host{box-sizing:border-box;margin:var(--gv-schema-form-control--m,.4rem);display:block}:host([hidden]){visibility:hidden;height:0;margin:0;padding:0;overflow:hidden}.form__control-description,.form__control-error{font-size:12px}.form__control-description{opacity:.8}.form__control-label{display:flex;flex-direction:row;border-bottom:1px solid #d9d9d9}label{margin:.2rem}.form__control-label label{flex:1;text-transform:capitalize}.form__control-array,.form__control-object{display:flex;flex-direction:column}.form__control-enum{display:flex}.form__control-array gv-button{align-self:flex-end}.form__control{position:relative}gv-code,gv-expression-language,gv-input,gv-select,gv-select-native,gv-switch{width:100%;margin:.2rem 0}gv-autocomplete:hover,gv-select-native:hover,gv-select:hover{z-index:70}.error{color:var(--gv-theme-color-error,#f44336)}.warning{color:var(--gv-theme-color-warning,#ff9800)}`];
|
|
440
412
|
}
|
|
441
|
-
}
|
|
442
413
|
|
|
414
|
+
}
|
|
443
415
|
window.customElements.define('gv-schema-form-control', GvSchemaFormControl);
|
|
416
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS1jb250cm9sLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImlzQ29kZW1pcnJvciIsImlzT2JqZWN0IiwiaXNDb21wbGV4QXJyYXkiLCJVcGRhdGVBZnRlckJyb3dzZXIiLCJHdlNjaGVtYUZvcm1Db250cm9sIiwicHJvcGVydGllcyIsInR5cGUiLCJTdHJpbmciLCJpZCIsInJlZmxlY3QiLCJuYW1lIiwicmVxdWlyZWQiLCJCb29sZWFuIiwiZGlzYWJsZWQiLCJyZWFkb25seSIsInRpdGxlIiwicGF0dGVybiIsImNvbnRyb2wiLCJPYmplY3QiLCJlcnJvcnMiLCJBcnJheSIsInZhbHVlIiwic2tlbGV0b24iLCJoaWRkZW4iLCJ3cml0ZU9ubHkiLCJjb21wYWN0IiwiY29uc3RydWN0b3IiLCJfb2JzZXJ2ZWRQcm9wZXJ0aWVzIiwiaXNFeHByZXNzaW9uTGFuZ3VhZ2UiLCJpc0Nyb25FeHByZXNzaW9uIiwiaXNQYXNzd29yZCIsImdldFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiLCJpc0F1dG9jb21wbGV0ZSIsImV2ZW50IiwiaXNUZXh0IiwiZ2V0RWxlbWVudE5hbWUiLCJlbnVtIiwiaXRlbXMiLCJfdXBkYXRlUHJvcGVydGllcyIsImVsZW1lbnQiLCJmb3JFYWNoIiwicHJvcGVydHkiLCJfcmVuZGVyQ29udHJvbCIsImVsZW1lbnROYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiZGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJfc2V0VmFsdWUiLCJzY2hlbWEiLCJsYWJlbCIsInRtcCIsInNwbGl0IiwibGVuZ3RoIiwiaXNOYU4iLCJwYXJzZUludCIsInJvd3MiLCJhdXRvc2l6ZSIsImRlc2NyaXB0aW9uIiwib3B0aW9ucyIsInRpdGxlTWFwIiwibWFwIiwibXVsdGlwbGUiLCJjb2RlbWlycm9yT3B0aW9ucyIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25JbnB1dCIsImJpbmQiLCJhdXRvY29tcGxldGUiLCJtaW5DaGFycyIsImZpbHRlciIsImNsZWFyYWJsZSIsImFwcGVuZENoaWxkIiwiZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidGFyZ2V0IiwidGFnTmFtZSIsImRldGFpbCIsImdldENvbnRyb2xzIiwiZnJvbSIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250cm9sRWxlbWVudCIsInRvU3RyaW5nIiwidXBkYXRlZCIsImNoYW5nZWRQcm9wZXJ0aWVzIiwiaGFzIiwiUHJvbWlzZSIsImFsbCIsInVwZGF0ZUNvbXBsZXRlIiwidGhlbiIsImdldFVwZGF0ZUNvbXBsZXRlIiwiZm9ybWF0RXJyb3JNZXNzYWdlIiwiZXJyb3IiLCJhcmd1bWVudCIsIm1lc3NhZ2UiLCJyZXBsYWNlIiwic2hvdWxkVXBkYXRlIiwiZmluZCIsImVycm9yQ29udGFpbmVyIiwiY29udGFpbmVyIiwiaW5uZXJIVE1MIiwia2V5IiwibGV2ZWwiLCJyZW5kZXIiLCJzdHlsZXMiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxVQUFkLEVBQTBCQyxJQUExQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsT0FBTyxtQkFBUDtBQUNBLE9BQU8sMkJBQVA7QUFDQSxPQUFPLGtCQUFQO0FBQ0EsT0FBTyxvQkFBUDtBQUNBLE9BQU8sMkJBQVA7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxzQkFBUDtBQUNBLE9BQU8scUNB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LENBQVlzQixPQUFaLENBQXFCeUQsS0FBRCxJQUFXO0FBQzdCLGNBQU1TLEdBQUcsR0FBR1QsS0FBSyxDQUFDeEQsUUFBTixLQUFtQixVQUFuQixHQUFnQ3dELEtBQUssQ0FBQ0MsUUFBdEMsR0FBaURELEtBQUssQ0FBQ3hELFFBQU4sQ0FBZTJELE9BQWYsQ0FBdUIsV0FBdkIsRUFBb0MsRUFBcEMsQ0FBN0Q7QUFDQSxjQUFNRyxjQUFjLEdBQUcsS0FBS3JCLFVBQUwsQ0FBZ0JHLGFBQWhCLENBQStCLFFBQU9xQixHQUFJLFVBQTFDLENBQXZCOztBQUNBLFlBQUlILGNBQUosRUFBb0I7QUFDbEIsZ0JBQU1KLE9BQU8sR0FBR3ZELFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixrQkFBdkIsQ0FBaEI7QUFDQXNELFVBQUFBLE9BQU8sQ0FBQ00sU0FBUixHQUFvQixLQUFLVCxrQkFBTCxDQUF3QkMsS0FBeEIsQ0FBcEI7QUFDQUUsVUFBQUEsT0FBTyxDQUFDUSxLQUFSLEdBQWdCLE1BQWhCO0FBQ0FKLFVBQUFBLGNBQWMsQ0FBQzlCLFdBQWYsQ0FBMkIwQixPQUEzQjtBQUNEO0FBQ0YsT0FURDtBQVVBLGFBQU8sS0FBUDtBQUNEOztBQUNELFdBQU8sTUFBTUUsWUFBTixDQUFtQlosaUJBQW5CLENBQVA7QUFDRDs7QUFFRG1CLEVBQUFBLE1BQU0sR0FBRztBQUNQLFdBQU8vRyxJQUFJLElBQ1AsS0FBSzZDLGNBQUwsRUFETyx5Q0FFOEIsS0FBS25DLEVBQUwsR0FBVSxRQUZ4QyxXQUFYO0FBSUQ7O0FBRWdCLGFBQU5zRyxNQUFNLEdBQUc7QUFDbEIsV0FBTyxDQUNMO0FBQ0FsSCxJQUFBQSxHQUFHLHk0QkFGRSxDQUFQO0FBcUZEOztBQXZacUU7QUEwWnhFbUgsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2Qix3QkFBN0IsRUFBdUQ3RyxtQkFBdkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtaW5wdXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pbnB1dC1tZXNzYWdlJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtdGV4dCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LXNlbGVjdCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LXNlbGVjdC1uYXRpdmUnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1zd2l0Y2gnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3YtY29kZSc7XG5pbXBvcnQgJy4uL21vbGVjdWxlcy9ndi1leHByZXNzaW9uLWxhbmd1YWdlJztcbmltcG9ydCAnLi4vbW9sZWN1bGVzL2d2LWNyb24tZWRpdG9yJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtYXV0b2NvbXBsZXRlJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtLWFycmF5JztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wtb2JqZWN0JztcbmltcG9ydCB7IGlzQ29kZW1pcnJvciwgaXNPYmplY3QsIGlzQ29tcGxleEFycmF5IH0gZnJvbSAnLi4vbGliL3NjaGVtYS1mb3JtJztcbmltcG9ydCB7IFVwZGF0ZUFmdGVyQnJvd3NlciB9IGZyb20gJy4uL21peGlucy91cGRhdGUtYWZ0ZXItYnJvd3Nlcic7XG5cbmV4cG9ydCBjbGFzcyBHdlNjaGVtYUZvcm1Db250cm9sIGV4dGVuZHMgVXBkYXRlQWZ0ZXJCcm93c2VyKExpdEVsZW1lbnQpIHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgaWQ6IHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgcmVxdWlyZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBwYXR0ZXJuOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgY29udHJvbDogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIGVycm9yczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgdmFsdWU6IHsgdHlwZTogT2JqZWN0LCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBza2VsZXRvbjogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBoaWRkZW46IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgd3JpdGVPbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIGNvbXBhY3Q6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFdoZW4gZm9ybSBoYXMgZXJyb3JzLCB0aGUgY29udHJvbCBpcyBub3QgdXBkYXRlIHRvIGNvbnNlcnZlIHRoZSBlcnJvciBzdGF0ZS5cbiAgICAvLyBUaGlzIGxpc3QgaXMgdXNlZCB0byBmb3JjZSB0aGUgdXBkYXRlIG9mIHByb3BlcnRpZXMgZXZlbiBpbiBlcnJvciBjYXNlLlxuICAgIHRoaXMuX29ic2VydmVkUHJvcGVydGllcyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnXTtcbiAgfVxuXG4gIGlzRXhwcmVzc2lvbkxhbmd1YWdlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVsnZXhwcmVzc2lvbi1sYW5ndWFnZSddICE9IG51bGw7XG4gIH1cblxuICBpc0Nyb25FeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVsnY3Jvbi1leHByZXNzaW9uJ10gPT09IHRydWU7XG4gIH1cblxuICBpc1Bhc3N3b3JkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbnRyb2wud3JpdGVPbmx5ID09PSB0cnVlIHx8XG4gICAgICAodGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10gJiYgdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10udHlwZSAhPSBudWxsICYmIHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddLnR5cGUgPT09ICdwYXNzd29yZCcpXG4gICAgKTtcbiAgfVxuXG4gIGdldFBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5wbGFjZWhvbGRlciA/IHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddLnBsYWNlaG9sZGVyIDogbnVsbDtcbiAgfVxuXG4gIGlzQ29kZW1pcnJvcigpIHtcbiAgICByZXR1cm4gaXNDb2RlbWlycm9yKHRoaXMuY29udHJvbCk7XG4gIH1cblxuICBpc09iamVjdCgpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jb250cm9sKTtcbiAgfVxuXG4gIGlzQXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudCAhPSBudWxsICYmIHRoaXMuY29udHJvbC50eXBlID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10gJiYgdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10udHlwZSA9PT0gJ3RleHQnICYmIHRoaXMuY29udHJvbC50eXBlID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIGdldEVsZW1lbnROYW1lKCkge1xuICAgIGlmICh0aGlzLmlzT2JqZWN0KCkpIHtcbiAgICAgIHJldHVybiAnZ3Ytc2NoZW1hLWZvcm0tY29udHJvbC1vYmplY3QnO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuY29udHJvbC5lbnVtIHx8ICh0aGlzLmNvbnRyb2wuaXRlbXMgJiYgdGhpcy5jb250cm9sLml0ZW1zLmVudW0pKSAmJiAhdGhpcy5pc0F1dG9jb21wbGV0ZSgpKSB7XG4gICAgICBpZiAodGhpcy5jb250cm9sLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuICdndi1zZWxlY3QnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdndi1zZWxlY3QtbmF0aXZlJztcbiAgICB9IGVsc2UgaWYgKGlzQ29tcGxleEFycmF5KHRoaXMuY29udHJvbCkpIHtcbiAgICAgIHJldHVybiAnZ3Ytc2NoZW1hLWZvcm0tYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb250cm9sLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHJldHVybiAnZ3YtYnV0dG9uJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiAnZ3Ytc3dpdGNoJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHByZXNzaW9uTGFuZ3VhZ2UoKSkge1xuICAgICAgcmV0dXJuICdndi1leHByZXNzaW9uLWxhbmd1YWdlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb2RlbWlycm9yKCkpIHtcbiAgICAgIHJldHVybiAnZ3YtY29kZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JvbkV4cHJlc3Npb24oKSkge1xuICAgICAgcmV0dXJuICdndi1jcm9uLWVkaXRvcic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGV4dCgpKSB7XG4gICAgICByZXR1cm4gJ2d2LXRleHQnO1xuICAgIH1cblxuICAgIHJldHVybiAnZ3YtaW5wdXQnO1xuICB9XG5cbiAgX3VwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX29ic2VydmVkUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBpZiAodGhpc1twcm9wZXJ0eV0gIT0gbnVsbCkge1xuICAgICAgICAgIGVsZW1lbnRbcHJvcGVydHldID0gdGhpc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJDb250cm9sKCkge1xuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gdGhpcy5nZXRFbGVtZW50TmFtZSgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnROYW1lKTtcbiAgICBlbGVtZW50LmlkID0gdGhpcy5pZDtcbiAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmlkO1xuICAgIGVsZW1lbnQuc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZm9ybV9fY29udHJvbCcpO1xuICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5jb250cm9sLmRlZmF1bHQgIT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udHJvbC5kZWZhdWx0O1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZGVmYXVsdC12YWx1ZScsIHsgdmFsdWU6IHRoaXMudmFsdWUsIGN1cnJlbnRUYXJnZXQ6IGVsZW1lbnQsIGNvbnRyb2w6IHRoaXMuY29udHJvbCB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2V0VmFsdWUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgZWxlbWVudC5zY2hlbWEgPSB0aGlzLmNvbnRyb2w7XG4gICAgfSBlbHNlIGlmIChpc0NvbXBsZXhBcnJheSh0aGlzLmNvbnRyb2wpKSB7XG4gICAgICBlbGVtZW50LnNjaGVtYSA9IHRoaXMuY29udHJvbC5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQpO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbC50aXRsZSkge1xuICAgICAgZWxlbWVudC5sYWJlbCA9IHRoaXMuY29udHJvbC50aXRsZTtcbiAgICAgIGVsZW1lbnQudGl0bGUgPSB0aGlzLmNvbnRyb2wudGl0bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMuaWQuc3BsaXQoJy4nKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gdG1wW3RtcC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc05hTihwYXJzZUludCh0aXRsZSwgMTApKSkge1xuICAgICAgICBlbGVtZW50LmxhYmVsID0gdGl0bGU7XG4gICAgICAgIGVsZW1lbnQudGl0bGUgPSB0aXRsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnBhdHRlcm4pIHtcbiAgICAgIGVsZW1lbnQucGF0dGVybiA9IHRoaXMuY29udHJvbC5wYXR0ZXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PT0gJ2ludGVnZXInKSB7XG4gICAgICBlbGVtZW50LnR5cGUgPSAnbnVtYmVyJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1RleHQoKSkge1xuICAgICAgZWxlbWVudC5yb3dzID0gMztcbiAgICAgIGVsZW1lbnQuYXV0b3NpemUgPSB0cnVlO1xuICAgICAgZWxlbWVudC5wbGFjZWhvbGRlciA9IHRoaXMuY29udHJvbC5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2wuZW51bSB8fCAodGhpcy5jb250cm9sLml0ZW1zICYmIHRoaXMuY29udHJvbC5pdGVtcy5lbnVtKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29udHJvbC5lbnVtIHx8IHRoaXMuY29udHJvbC5pdGVtcy5lbnVtO1xuICAgICAgaWYgKHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddICYmIHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddLnRpdGxlTWFwKSB7XG4gICAgICAgIGVsZW1lbnQub3B0aW9ucyA9IG9wdGlvbnMubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10udGl0bGVNYXBbdmFsdWVdIHx8IHZhbHVlLFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50Lm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIGVsZW1lbnQubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvZGVtaXJyb3IoKSkge1xuICAgICAgZWxlbWVudC5vcHRpb25zID0gdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10uY29kZW1pcnJvck9wdGlvbnM7XG4gICAgICBpZiAodGhpcy5jb250cm9sLmRlZmF1bHQgIT0gbnVsbCAmJiBlbGVtZW50Lm9wdGlvbnMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50Lm9wdGlvbnMudmFsdWUgPSB0aGlzLmNvbnRyb2wuZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHByZXNzaW9uTGFuZ3VhZ2UoKSkge1xuICAgICAgZWxlbWVudC5vcHRpb25zID0ge307XG4gICAgICBlbGVtZW50LnJvd3MgPSAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1Bhc3N3b3JkKCkpIHtcbiAgICAgIGVsZW1lbnQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udHJvbC5kZXNjcmlwdGlvbikge1xuICAgICAgZWxlbWVudC5kZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbC5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wYWN0KSB7XG4gICAgICBlbGVtZW50LnBsYWNlaG9sZGVyID0gZWxlbWVudC5kZXNjcmlwdGlvbiB8fCBlbGVtZW50LmxhYmVsO1xuICAgICAgZWxlbWVudC5sYWJlbCA9IG51bGw7XG4gICAgICBlbGVtZW50LmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIGVsZW1lbnQuY29tcGFjdCA9IHRoaXMuY29tcGFjdDtcbiAgICB9XG5cbiAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uTGFuZ3VhZ2UoKSB8fCB0aGlzLmlzQ29kZW1pcnJvcigpKSB7XG4gICAgICAgIGVsZW1lbnQub3B0aW9ucy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgJHtlbGVtZW50TmFtZX06aW5wdXRgLCB0aGlzLl9vbklucHV0LmJpbmQodGhpcykpO1xuXG4gICAgbGV0IGN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKHRoaXMuaXNBdXRvY29tcGxldGUoKSkge1xuICAgICAgY29uc3QgYXV0b2NvbXBsZXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3YtYXV0b2NvbXBsZXRlJyk7XG4gICAgICBhdXRvY29tcGxldGUubWluQ2hhcnMgPSAwO1xuICAgICAgYXV0b2NvbXBsZXRlLmZpbHRlciA9IHRydWU7XG4gICAgICBlbGVtZW50LmNsZWFyYWJsZSA9IHRydWU7XG4gICAgICBhdXRvY29tcGxldGUuaWQgPSB0aGlzLmlkO1xuICAgICAgYXV0b2NvbXBsZXRlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoYGd2LWF1dG9jb21wbGV0ZTpzZWxlY3RgLCB0aGlzLl9vbklucHV0LmJpbmQodGhpcykpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGBndi1pbnB1dDpjbGVhcmAsIHRoaXMuX29uSW5wdXQuYmluZCh0aGlzKSk7XG4gICAgICBjdXJyZW50VGFyZ2V0ID0gYXV0b2NvbXBsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddICE9IG51bGwpIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NvbnRyb2wtcmVhZHknLCB7XG4gICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgIGNvbnRyb2w6IHRoaXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRUYXJnZXQ7XG4gIH1cblxuICBfb25JbnB1dChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICBpZiAoZS50YXJnZXQudGFnTmFtZSA9PT0gJ0dWLUFVVE9DT01QTEVURScpIHtcbiAgICAgIHZhbHVlID0gZS5kZXRhaWwudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZS5kZXRhaWw7XG4gICAgfVxuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NoYW5nZScsIHsgdmFsdWUsIGN1cnJlbnRUYXJnZXQ6IGUudGFyZ2V0LCBjb250cm9sOiB0aGlzLmNvbnRyb2wgfSk7XG4gIH1cblxuICBnZXRDb250cm9scygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCcpKSxcbiAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wtYXJyYXknKSksXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1zY2hlbWEtZm9ybS1jb250cm9sLW9iamVjdCcpKSxcbiAgICBdO1xuICB9XG5cbiAgZ2V0Q29udHJvbChpZCkge1xuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICBpZCA9IHRoaXMuaWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZH1cIl1gKTtcbiAgfVxuXG4gIF9zZXRWYWx1ZShjb250cm9sRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9IG51bGwgJiYgY29udHJvbEVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnYm9vbGVhbicgfHwgdGhpcy5jb250cm9sLnR5cGUgPT09ICdhcnJheScgfHwgdGhpcy5jb250cm9sLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZS50b1N0cmluZyA/IHRoaXMudmFsdWUudG9TdHJpbmcoKSA6IHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sRWxlbWVudDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2YWx1ZScpKSB7XG4gICAgICBQcm9taXNlLmFsbCh0aGlzLmdldENvbnRyb2xzKCkubWFwKChjb250cm9sKSA9PiBjb250cm9sLnVwZGF0ZUNvbXBsZXRlKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuZ2V0Q29udHJvbCgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRDb250cm9scygpLm1hcCgoZSkgPT4gZS51cGRhdGVDb21wbGV0ZSkpO1xuICB9XG5cbiAgZm9ybWF0RXJyb3JNZXNzYWdlKGVycm9yKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh0aGlzLmNvbnRyb2wucHJvcGVydGllcyAhPSBudWxsICYmIHRoaXMuY29udHJvbC5wcm9wZXJ0aWVzW2Vycm9yLmFyZ3VtZW50XSAhPSBudWxsKSB7XG4gICAgICB0aXRsZSA9IHRoaXMuY29udHJvbC5wcm9wZXJ0aWVzW2Vycm9yLmFyZ3VtZW50XS50aXRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGUgPSB0aGlzLmNvbnRyb2wudGl0bGU7XG4gICAgfVxuICAgIGlmICh0aXRsZSkge1xuICAgICAgcmV0dXJuIGA8c3Bhbj4ke2Vycm9yLm1lc3NhZ2UucmVwbGFjZShlcnJvci5hcmd1bWVudCwgdGl0bGUpfTwvc3Bhbj5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxzcGFuPiR7ZXJyb3IubWVzc2FnZX08L3NwYW4+YDtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIGlmICh0aGlzLl9vYnNlcnZlZFByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eSkpICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVByb3BlcnRpZXModGhpcy5nZXRDb250cm9sKCkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Vycm9ycycpICYmIHRoaXMuZXJyb3JzICE9IG51bGwpIHtcbiAgICAgIC8vIFNldCBlcnJvcnMgdG8gY29tcGxleCBjb250cm9sc1xuICAgICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29udHJvbC5lcnJvcnMgPSB0aGlzLmVycm9ycztcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGaW5kIHNpbXBsZSBjb250cm9scyBhbmQgYXBwZW5kIGVycm9yIG1lc3NhZ2VcbiAgICAgIGNvbnN0IGVycm9yQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtX19jb250cm9sLWVycm9yJyk7XG4gICAgICBlcnJvckNvbnRhaW5lci5mb3JFYWNoKChjb250YWluZXIpID0+IChjb250YWluZXIuaW5uZXJIVE1MID0gJycpKTtcbiAgICAgIHRoaXMuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGVycm9yLnByb3BlcnR5ID09PSAnaW5zdGFuY2UnID8gZXJyb3IuYXJndW1lbnQgOiBlcnJvci5wcm9wZXJ0eS5yZXBsYWNlKCdpbnN0YW5jZS4nLCAnJyk7XG4gICAgICAgIGNvbnN0IGVycm9yQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7a2V5fS1lcnJvclwiXWApO1xuICAgICAgICBpZiAoZXJyb3JDb250YWluZXIpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3YtaW5wdXQtbWVzc2FnZScpO1xuICAgICAgICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gdGhpcy5mb3JtYXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgICAgIG1lc3NhZ2UubGV2ZWwgPSAnd2Fybic7XG4gICAgICAgICAgZXJyb3JDb250YWluZXIuYXBwZW5kQ2hpbGQobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgICR7dGhpcy5fcmVuZGVyQ29udHJvbCgpfVxuICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2NvbnRyb2wtZXJyb3JcIiBpZD1cIiR7dGhpcy5pZCArICctZXJyb3InfVwiPjwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIG1hcmdpbjogdmFyKC0tZ3Ytc2NoZW1hLWZvcm0tY29udHJvbC0tbSwgMC40cmVtKTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFtoaWRkZW5dKSB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtZGVzY3JpcHRpb24sXG4gICAgICAgIC5mb3JtX19jb250cm9sLWVycm9yIHtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybV9fY29udHJvbC1kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtbGFiZWwge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsIHtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb3JtX19jb250cm9sLWxhYmVsIGxhYmVsIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtYXJyYXksXG4gICAgICAgIC5mb3JtX19jb250cm9sLW9iamVjdCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtZW51bSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAvKmFsaWduLWl0ZW1zOiBmbGV4LWVuZDsqL1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtYXJyYXkgZ3YtYnV0dG9uIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb3JtX19jb250cm9sIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cblxuICAgICAgICBndi1zZWxlY3QsXG4gICAgICAgIGd2LXNlbGVjdC1uYXRpdmUsXG4gICAgICAgIGd2LWlucHV0LFxuICAgICAgICBndi1jb2RlLFxuICAgICAgICBndi1zd2l0Y2gsXG4gICAgICAgIGd2LWV4cHJlc3Npb24tbGFuZ3VhZ2Uge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICBndi1zZWxlY3Q6aG92ZXIsXG4gICAgICAgIGd2LXNlbGVjdC1uYXRpdmU6aG92ZXIsXG4gICAgICAgIGd2LWF1dG9jb21wbGV0ZTpob3ZlciB7XG4gICAgICAgICAgei1pbmRleDogNzA7XG4gICAgICAgIH1cblxuICAgICAgICAuZXJyb3Ige1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1jb2xvci1lcnJvciwgI2Y0NDMzNik7XG4gICAgICAgIH1cblxuICAgICAgICAud2FybmluZyB7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWd2LXRoZW1lLWNvbG9yLXdhcm5pbmcsICNmZjk4MDApO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCcsIEd2U2NoZW1hRm9ybUNvbnRyb2wpO1xuIl19
|