@gravitee/ui-components 3.24.5 → 3.25.0-fix-gvcode-15ce1d2
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/CHANGELOG.md +1270 -0
- package/LICENSE.txt +202 -0
- package/README.md +195 -0
- package/assets/i18n/en.json +3 -0
- package/assets/i18n/fr.json +3 -0
- package/assets/icons/design.svg +1 -1
- package/package.json +1 -1
- package/src/.eslintrc.js +19 -0
- package/src/atoms/gv-autocomplete.js +156 -132
- package/src/atoms/gv-button.js +248 -73
- package/src/atoms/gv-checkbox.js +103 -45
- package/src/atoms/gv-date-picker-calendar.js +393 -312
- package/src/atoms/gv-date-picker-cell.js +81 -57
- package/src/atoms/gv-date-picker.js +319 -180
- package/src/atoms/gv-file-upload.js +195 -85
- package/src/atoms/gv-icon.js +34 -13
- package/src/atoms/gv-image.js +66 -31
- package/src/atoms/gv-input-message.js +37 -12
- package/src/atoms/gv-input.js +148 -117
- package/src/atoms/gv-link.js +125 -47
- package/src/atoms/gv-message.js +69 -18
- package/src/atoms/gv-metric.js +68 -19
- package/src/atoms/gv-relative-time.js +38 -67
- package/src/atoms/gv-select-native.js +215 -96
- package/src/atoms/gv-select.js +230 -110
- package/src/atoms/gv-spinner.js +26 -5
- package/src/atoms/gv-state.js +66 -25
- package/src/atoms/gv-switch.js +160 -40
- package/src/atoms/gv-tag.js +78 -26
- package/src/atoms/gv-text.js +83 -22
- package/src/charts/gv-chart-bar.js +18 -22
- package/src/charts/gv-chart-gauge.js +31 -28
- package/src/charts/gv-chart-histogram.js +10 -18
- package/src/charts/gv-chart-line.js +59 -70
- package/src/charts/gv-chart-map.js +42 -44
- package/src/charts/gv-chart-pie.js +14 -18
- package/src/index.js +0 -1
- package/src/lib/cron-expression.js +35 -40
- package/src/lib/date.js +1 -10
- package/src/lib/events.js +1 -3
- package/src/lib/http-client-schema-form.js +12 -13
- package/src/lib/http.js +56 -57
- package/src/lib/i18n.js +22 -30
- package/src/lib/item.js +12 -13
- package/src/lib/properties.js +42 -77
- package/src/lib/schema-form.js +5 -4
- package/src/lib/studio.js +60 -13
- package/src/lib/style.js +8 -8
- package/src/lib/text-format.js +7 -14
- package/src/lib/theme.js +5 -8
- package/src/lib/utils.js +18 -17
- package/src/mixins/chart-element.js +54 -31
- package/src/mixins/input-element.js +47 -60
- package/src/mixins/item-resource.js +32 -34
- package/src/mixins/keyboard-element.js +5 -6
- package/src/mixins/update-after-browser.js +1 -4
- package/src/mixins/with-resize-observer.js +13 -23
- package/src/mixins/with-skeleton-attribute.js +48 -54
- package/src/molecules/gv-card-full.js +147 -26
- package/src/molecules/gv-card-list.js +42 -13
- package/src/molecules/gv-card.js +91 -17
- package/src/molecules/gv-category-list.js +17 -6
- package/src/molecules/gv-category.js +103 -23
- package/src/molecules/gv-code.js +143 -81
- package/src/molecules/gv-confirm.js +71 -41
- package/src/molecules/gv-cron-editor.js +389 -143
- package/src/molecules/gv-dropdown-menu.js +46 -14
- package/src/molecules/gv-expandable.js +59 -31
- package/src/molecules/gv-expression-language.js +138 -176
- package/src/molecules/gv-identity-picture.js +65 -42
- package/src/molecules/gv-list.js +134 -42
- package/src/molecules/gv-metrics.js +49 -37
- package/src/molecules/gv-modal.js +95 -28
- package/src/molecules/gv-nav.js +75 -49
- package/src/molecules/gv-option.js +130 -57
- package/src/molecules/gv-plans.js +209 -86
- package/src/molecules/gv-popover.js +177 -57
- package/src/molecules/gv-promote.js +146 -28
- package/src/molecules/gv-rating-list.js +195 -69
- package/src/molecules/gv-rating.js +105 -52
- package/src/molecules/gv-row-expandable.js +11 -5
- package/src/molecules/gv-row.js +147 -21
- package/src/molecules/gv-stats.js +48 -23
- package/src/molecules/gv-stepper.js +187 -43
- package/src/molecules/gv-table.js +309 -199
- package/src/molecules/gv-tree.js +156 -33
- package/src/organisms/gv-documentation.js +128 -45
- package/src/organisms/gv-header.js +195 -37
- package/src/organisms/gv-http-client.js +168 -32
- package/src/organisms/gv-menu.js +158 -37
- package/src/organisms/gv-newsletter-subscription.js +189 -48
- package/src/organisms/gv-pagination.js +77 -49
- package/src/organisms/gv-properties.js +492 -271
- package/src/organisms/gv-resizable-views.js +259 -41
- package/src/organisms/gv-resources.js +275 -168
- package/src/organisms/gv-schema-form-array.js +159 -49
- package/src/organisms/gv-schema-form-control-object.js +73 -59
- package/src/organisms/gv-schema-form-control.js +134 -107
- package/src/organisms/gv-schema-form.js +324 -195
- package/src/organisms/gv-tabs.js +98 -66
- package/src/organisms/gv-user-menu.js +201 -36
- package/src/organisms/gv-vertical-menu.js +61 -20
- package/src/policy-studio/gv-flow-step.js +266 -105
- package/src/policy-studio/gv-flow.js +304 -125
- package/src/policy-studio/gv-policy-studio-menu.js +471 -157
- package/src/policy-studio/gv-policy-studio.js +777 -686
- package/src/styles/empty.js +20 -3
- package/src/styles/input.js +247 -3
- package/src/styles/link.js +16 -3
- package/src/styles/shapes.js +0 -1
- package/src/styles/skeleton.js +37 -3
- package/src/styles/zoom.js +24 -3
- package/src/theme/definition.json +1762 -0
- package/src/theme/gv-theme.js +60 -21
|
@@ -19,6 +19,7 @@ import { dispatchCustomEvent } from '../lib/events';
|
|
|
19
19
|
import { ifDefined } from 'lit/directives/if-defined';
|
|
20
20
|
import { i18n } from '../lib/i18n';
|
|
21
21
|
import { classMap } from 'lit/directives/class-map';
|
|
22
|
+
|
|
22
23
|
/**
|
|
23
24
|
* File upload
|
|
24
25
|
*
|
|
@@ -33,44 +34,132 @@ import { classMap } from 'lit/directives/class-map';
|
|
|
33
34
|
* @attr {Number} limit - Max size limit in bytes.
|
|
34
35
|
* @attr {String} value - Reflected value of uploaded file
|
|
35
36
|
**/
|
|
36
|
-
|
|
37
37
|
export class GvFileUpload extends LitElement {
|
|
38
38
|
static get properties() {
|
|
39
39
|
return {
|
|
40
|
-
label: {
|
|
41
|
-
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
},
|
|
49
|
-
limit: {
|
|
50
|
-
type: Number
|
|
51
|
-
},
|
|
52
|
-
value: {
|
|
53
|
-
type: Array,
|
|
54
|
-
reflect: true
|
|
55
|
-
},
|
|
56
|
-
_preview: {
|
|
57
|
-
type: String,
|
|
58
|
-
attribute: false
|
|
59
|
-
},
|
|
60
|
-
_files: {
|
|
61
|
-
type: Array,
|
|
62
|
-
attribute: false
|
|
63
|
-
},
|
|
64
|
-
_errors: {
|
|
65
|
-
type: Array,
|
|
66
|
-
attribute: false
|
|
67
|
-
}
|
|
40
|
+
label: { type: String },
|
|
41
|
+
accept: { type: String },
|
|
42
|
+
except: { type: String },
|
|
43
|
+
limit: { type: Number },
|
|
44
|
+
value: { type: Array, reflect: true },
|
|
45
|
+
_preview: { type: String, attribute: false },
|
|
46
|
+
_files: { type: Array, attribute: false },
|
|
47
|
+
_errors: { type: Array, attribute: false },
|
|
68
48
|
};
|
|
69
49
|
}
|
|
70
50
|
|
|
71
51
|
static get styles() {
|
|
72
|
-
return [
|
|
73
|
-
|
|
52
|
+
return [
|
|
53
|
+
link,
|
|
54
|
+
// language=CSS
|
|
55
|
+
css`
|
|
56
|
+
:host {
|
|
57
|
+
box-sizing: border-box;
|
|
58
|
+
display: block;
|
|
59
|
+
width: 100%;
|
|
60
|
+
color: var(--gv-theme-color-dark, #28444f);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.box {
|
|
64
|
+
font-size: 1.25rem;
|
|
65
|
+
background-color: var(--gv-theme-neutral-color-lighter, #fafafa);
|
|
66
|
+
position: relative;
|
|
67
|
+
padding: 2rem;
|
|
68
|
+
text-align: center;
|
|
69
|
+
display: block;
|
|
70
|
+
border: 1px dashed #28444f;
|
|
71
|
+
border-radius: 4px;
|
|
72
|
+
transition: outline-offset 0.15s ease-in-out, background-color 0.15s linear;
|
|
73
|
+
height: 100%;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.box .box__icon {
|
|
77
|
+
width: 100%;
|
|
78
|
+
height: 80px;
|
|
79
|
+
display: block;
|
|
80
|
+
margin-bottom: 40px;
|
|
81
|
+
--gv-icon--s: 5rem;
|
|
82
|
+
--gv-icon--c: var(--gv-theme-color-dark, #28444f);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.box__file {
|
|
86
|
+
width: 0.1px;
|
|
87
|
+
height: 0.1px;
|
|
88
|
+
opacity: 0;
|
|
89
|
+
overflow: hidden;
|
|
90
|
+
position: absolute;
|
|
91
|
+
z-index: -1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.box__file + label {
|
|
95
|
+
max-width: 80%;
|
|
96
|
+
text-overflow: ellipsis;
|
|
97
|
+
white-space: nowrap;
|
|
98
|
+
cursor: pointer;
|
|
99
|
+
display: inline-block;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.box.is-dragover {
|
|
104
|
+
background-color: var(--gv-theme-color-light, #28444f);
|
|
105
|
+
border: none;
|
|
106
|
+
outline: 1px dashed #28444f;
|
|
107
|
+
outline-offset: -10px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.box .box__dragndrop {
|
|
111
|
+
display: inline;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.files {
|
|
115
|
+
box-sizing: border-box;
|
|
116
|
+
display: flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
--gv-icon--s: 16px;
|
|
119
|
+
padding: 1rem 0.5rem 0;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.filename {
|
|
123
|
+
flex: 1;
|
|
124
|
+
padding: 0.2rem;
|
|
125
|
+
word-break: break-all;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.error {
|
|
129
|
+
font-style: italic;
|
|
130
|
+
--gv-icon--c: red;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
gv-image {
|
|
134
|
+
position: absolute;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.preview {
|
|
138
|
+
transition: all 300ms ease-in-out;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.box__input {
|
|
142
|
+
position: relative;
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
justify-content: center;
|
|
146
|
+
height: 100%;
|
|
147
|
+
z-index: 10;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.preview .box__input {
|
|
151
|
+
visibility: hidden;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.preview:hover .box__input {
|
|
155
|
+
visibility: visible;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.preview:hover gv-image {
|
|
159
|
+
opacity: 0.3;
|
|
160
|
+
}
|
|
161
|
+
`,
|
|
162
|
+
];
|
|
74
163
|
}
|
|
75
164
|
|
|
76
165
|
constructor() {
|
|
@@ -92,7 +181,6 @@ export class GvFileUpload extends LitElement {
|
|
|
92
181
|
_onDragEnd(e) {
|
|
93
182
|
e.preventDefault();
|
|
94
183
|
e.stopPropagation();
|
|
95
|
-
|
|
96
184
|
if (--this._counter === 0) {
|
|
97
185
|
const box = this.shadowRoot.querySelector('.box');
|
|
98
186
|
box.classList.remove('is-dragover');
|
|
@@ -111,66 +199,40 @@ export class GvFileUpload extends LitElement {
|
|
|
111
199
|
|
|
112
200
|
setFiles(files) {
|
|
113
201
|
const errors = [];
|
|
114
|
-
this._files = [...files].filter(file => {
|
|
202
|
+
this._files = [...files].filter((file) => {
|
|
115
203
|
if (this.accept && file.type.match(this._getRegex(this.accept)) == null) {
|
|
116
|
-
errors.push({
|
|
117
|
-
file,
|
|
118
|
-
error: i18n('gv-file-upload.error.typeNotAllowed')
|
|
119
|
-
});
|
|
204
|
+
errors.push({ file, error: i18n('gv-file-upload.error.typeNotAllowed') });
|
|
120
205
|
return false;
|
|
121
206
|
}
|
|
122
207
|
|
|
123
208
|
if (this.except && file.type.match(this._getRegex(this.except)) != null) {
|
|
124
|
-
errors.push({
|
|
125
|
-
file,
|
|
126
|
-
error: i18n('gv-file-upload.error.typeNotAllowed')
|
|
127
|
-
});
|
|
209
|
+
errors.push({ file, error: i18n('gv-file-upload.error.typeNotAllowed') });
|
|
128
210
|
return false;
|
|
129
211
|
}
|
|
130
|
-
|
|
131
212
|
if (this.limit && file.size > parseInt(this.limit, 10)) {
|
|
132
|
-
errors.push({
|
|
133
|
-
file,
|
|
134
|
-
error: i18n('gv-file-upload.error.maxSize')
|
|
135
|
-
});
|
|
213
|
+
errors.push({ file, error: i18n('gv-file-upload.error.maxSize') });
|
|
136
214
|
return false;
|
|
137
215
|
}
|
|
138
|
-
|
|
139
216
|
return true;
|
|
140
217
|
});
|
|
141
218
|
this._errors = errors;
|
|
142
|
-
|
|
143
219
|
if (this._errors.length > 0) {
|
|
144
|
-
dispatchCustomEvent(this, 'error', {
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
this.dispatchEvent(new Event('invalid', {
|
|
148
|
-
bubbles: true,
|
|
149
|
-
cancelable: true
|
|
150
|
-
}));
|
|
220
|
+
dispatchCustomEvent(this, 'error', { errors: this._errors });
|
|
221
|
+
this.dispatchEvent(new Event('invalid', { bubbles: true, cancelable: true }));
|
|
151
222
|
}
|
|
152
|
-
|
|
153
223
|
const box = this.shadowRoot.querySelector('.box');
|
|
154
224
|
box.classList.remove('is-dragover');
|
|
155
|
-
|
|
156
225
|
if (this._files.length > 0) {
|
|
157
226
|
this.reader.readAsDataURL(this._files[0]);
|
|
158
|
-
|
|
159
|
-
this.reader.onload = event => {
|
|
227
|
+
this.reader.onload = (event) => {
|
|
160
228
|
if (this._files[0].type.match(this._getRegex('image/*'))) {
|
|
161
229
|
this._preview = event.target.result;
|
|
162
230
|
} else {
|
|
163
231
|
this._preview = null;
|
|
164
232
|
}
|
|
165
|
-
|
|
166
233
|
this.value = event.target.result;
|
|
167
|
-
this.dispatchEvent(new Event('input', {
|
|
168
|
-
|
|
169
|
-
cancelable: true
|
|
170
|
-
}));
|
|
171
|
-
dispatchCustomEvent(this, 'drop', {
|
|
172
|
-
files: [this.value]
|
|
173
|
-
});
|
|
234
|
+
this.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
|
|
235
|
+
dispatchCustomEvent(this, 'drop', { files: [this.value] });
|
|
174
236
|
};
|
|
175
237
|
}
|
|
176
238
|
}
|
|
@@ -186,10 +248,7 @@ export class GvFileUpload extends LitElement {
|
|
|
186
248
|
this._preview = null;
|
|
187
249
|
this.value = null;
|
|
188
250
|
this.shadowRoot.querySelector('#file').value = null;
|
|
189
|
-
this.dispatchEvent(new Event('input', {
|
|
190
|
-
bubbles: true,
|
|
191
|
-
cancelable: true
|
|
192
|
-
}));
|
|
251
|
+
this.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
|
|
193
252
|
}
|
|
194
253
|
|
|
195
254
|
_onChange(e) {
|
|
@@ -200,17 +259,75 @@ export class GvFileUpload extends LitElement {
|
|
|
200
259
|
if (this._files.length > 0) {
|
|
201
260
|
return 'general:clip';
|
|
202
261
|
}
|
|
203
|
-
|
|
204
262
|
return 'general:upload';
|
|
205
263
|
}
|
|
206
264
|
|
|
207
265
|
render() {
|
|
208
|
-
const label =
|
|
266
|
+
const label =
|
|
267
|
+
this._errors.length > 0 || this._files.length > 0 ? i18n('gv-file-upload.chooseAnotherFile') : i18n('gv-file-upload.chooseFile');
|
|
268
|
+
|
|
209
269
|
const classes = {
|
|
210
270
|
box: true,
|
|
211
|
-
preview: this._preview != null
|
|
271
|
+
preview: this._preview != null,
|
|
212
272
|
};
|
|
213
|
-
|
|
273
|
+
|
|
274
|
+
return html`
|
|
275
|
+
<label for="file">${this.label}</label>
|
|
276
|
+
<div
|
|
277
|
+
class="${classMap(classes)}"
|
|
278
|
+
@drop="${this._onDrop}"
|
|
279
|
+
@ondrop="${this._onDrop}"
|
|
280
|
+
@drag="${this._cancelEvent}"
|
|
281
|
+
@dragstart="${this._cancelEvent}"
|
|
282
|
+
@dragover="${this._onDragOver}"
|
|
283
|
+
@dragenter="${this._onDragOver}"
|
|
284
|
+
@dragleave="${this._onDragEnd}"
|
|
285
|
+
@dragend="${this._onDragEnd}"
|
|
286
|
+
>
|
|
287
|
+
${this._preview != null ? html`<gv-image .src="${this._preview}" @error="${this._onPreviewError}"></gv-image>` : ''}
|
|
288
|
+
<div class="box__input">
|
|
289
|
+
<gv-icon class="box__icon" shape="${this.icon}"></gv-icon>
|
|
290
|
+
<label for="file" class="link">
|
|
291
|
+
<strong>${label}</strong>
|
|
292
|
+
<span class="box__dragndrop">${i18n('gv-file-upload.orDragIt')}</span>
|
|
293
|
+
</label>
|
|
294
|
+
<input
|
|
295
|
+
class="box__file"
|
|
296
|
+
type="file"
|
|
297
|
+
name="files[]"
|
|
298
|
+
id="file"
|
|
299
|
+
files="${this.files}"
|
|
300
|
+
accept="${ifDefined(this.accept)}"
|
|
301
|
+
@change="${this._onChange}"
|
|
302
|
+
/>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
${this._files.length > 0
|
|
306
|
+
? html`
|
|
307
|
+
<div class="files">
|
|
308
|
+
<gv-icon shape="general:clip"></gv-icon>
|
|
309
|
+
<div class="filename">${this._files[0].name}</div>
|
|
310
|
+
<gv-icon class="link" @click="${this._removeFile.bind(this, 0)}" shape="general:trash"></gv-icon>
|
|
311
|
+
</div>
|
|
312
|
+
`
|
|
313
|
+
: ''}
|
|
314
|
+
${this._errors.length > 0
|
|
315
|
+
? html`
|
|
316
|
+
<div class="files">
|
|
317
|
+
<gv-icon class="error" shape="code:stop"></gv-icon>
|
|
318
|
+
<div class="filename">${this._errors[0].file.name} <span class="error">(${this._errors[0].error})</span></div>
|
|
319
|
+
</div>
|
|
320
|
+
`
|
|
321
|
+
: ''}
|
|
322
|
+
${this.value && this._files.length === 0 && this._errors.length === 0
|
|
323
|
+
? html`
|
|
324
|
+
<div class="files">
|
|
325
|
+
<div class="filename"></div>
|
|
326
|
+
<gv-button link @click="${this._removeFile.bind(this, 0)}">${i18n('gv-file-upload.removePicture')}</gv-button>
|
|
327
|
+
</div>
|
|
328
|
+
`
|
|
329
|
+
: ''}
|
|
330
|
+
`;
|
|
214
331
|
}
|
|
215
332
|
|
|
216
333
|
_onPreviewError() {
|
|
@@ -221,11 +338,9 @@ export class GvFileUpload extends LitElement {
|
|
|
221
338
|
if (changedProperties.has('value')) {
|
|
222
339
|
if (this.value) {
|
|
223
340
|
this._preview = this.value;
|
|
224
|
-
|
|
225
341
|
if (this._files && this._files[0]) {
|
|
226
342
|
this.reader.readAsDataURL(this._files[0]);
|
|
227
|
-
|
|
228
|
-
this.reader.onload = event => {
|
|
343
|
+
this.reader.onload = (event) => {
|
|
229
344
|
if (this.value !== event.target.result) {
|
|
230
345
|
this._files = [];
|
|
231
346
|
}
|
|
@@ -238,12 +353,8 @@ export class GvFileUpload extends LitElement {
|
|
|
238
353
|
}
|
|
239
354
|
|
|
240
355
|
const preview = this.shadowRoot.querySelector('.preview');
|
|
241
|
-
|
|
242
356
|
if (preview) {
|
|
243
|
-
const {
|
|
244
|
-
width,
|
|
245
|
-
height
|
|
246
|
-
} = preview.getBoundingClientRect();
|
|
357
|
+
const { width, height } = preview.getBoundingClientRect();
|
|
247
358
|
const img = this.shadowRoot.querySelector('gv-image');
|
|
248
359
|
img.style.width = width - 20 + 'px';
|
|
249
360
|
img.style.height = height - 20 + 'px';
|
|
@@ -251,7 +362,6 @@ export class GvFileUpload extends LitElement {
|
|
|
251
362
|
img.style.top = '10px';
|
|
252
363
|
}
|
|
253
364
|
}
|
|
254
|
-
|
|
255
365
|
}
|
|
366
|
+
|
|
256
367
|
window.customElements.define('gv-file-upload', GvFileUpload);
|
|
257
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL2F0b21zL2d2LWZpbGUtdXBsb2FkLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwibGluayIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJpZkRlZmluZWQiLCJpMThuIiwiY2xhc3NNYXAiLCJHdkZpbGVVcGxvYWQiLCJwcm9wZXJ0aWVzIiwibGFiZWwiLCJ0eXBlIiwiU3RyaW5nIiwiYWNjZXB0IiwiZXhjZXB0IiwibGltaXQiLCJOdW1iZXIiLCJ2YWx1ZSIsIkFycmF5IiwicmVmbGVjdCIsIl9wcmV2aWV3IiwiYXR0cmlidXRlIiwiX2ZpbGVzIiwiX2Vycm9ycyIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIl9jb3VudGVyIiwiX29uRHJhZ092ZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJib3giLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsImNsYXNzTGlzdCIsImFkZCIsIl9vbkRyYWdFbmQiLCJyZW1vdmUiLCJfb25Ecm9wIiwic2V0RmlsZXMiLCJkYXRhVHJhbnNmZXIiLCJmaWxlcyIsIl9nZXRSZWdleCIsIm1pbWVUeXBlcyIsInRvU3RyaW5nIiwicmVwbGFjZSIsImVycm9ycyIsImZpbHRlciIsImZpbGUiLCJtYXRjaCIsInB1c2giLCJlcnJvciIsInNpemUiLCJwYXJzZUludCIsImxlbmd0aCIsImRpc3BhdGNoRXZlbnQiLCJFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwicmVhZEFzRGF0YVVSTCIsIm9ubG9hZCIsImV2ZW50IiwidGFyZ2V0IiwicmVzdWx0IiwiX2NhbmNlbEV2ZW50IiwiX3JlbW92ZUZpbGUiLCJfb25DaGFuZ2UiLCJpY29uIiwicmVuZGVyIiwiY2xhc3NlcyIsInByZXZpZXciLCJfb25QcmV2aWV3RXJyb3IiLCJuYW1lIiwiYmluZCIsInVwZGF0ZWQiLCJjaGFuZ2VkUHJvcGVydGllcyIsImhhcyIsIndpZHRoIiwiaGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW1nIiwic3R5bGUiLCJsZWZ0IiwidG9wIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsSUFBMUIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGdCQUFyQjtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQiwyQkFBMUI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGFBQXJCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sTUFBTUMsWUFBTixTQUEyQlAsVUFBM0IsQ0FBc0M7QUFDdEIsYUFBVlEsVUFBVSxHQUFHO0FBQ3RCLFdBQU87QUFDTEMsTUFBQUEsS0FBSyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUixPQURGO0FBRUxDLE1BQUFBLE1BQU0sRUFBRTtBQUFFRixRQUFBQSxJQUFJLEVBQUVDO0FBQVIsT0FGSDtBQUdMRSxNQUFBQSxNQUFNLEVBQUU7QUFBRUgsUUFBQUEsSUFBSSxFQUFFQztBQUFSLE9BSEg7QUFJTEcsTUFBQUEsS0FBSyxFQUFFO0FBQUVKLFFBQUFBLElBQUksRUFBRUs7QUFBUixPQUpGO0FBS0xDLE1BQUFBLEtBQUssRUFBRTtBQUFFTixRQUFBQSxJQUFJLEVBQUVPLEtBQVI7QUFBZUMsUUFBQUEsT0FBTyxFQUFFO0FBQXhCLE9BTEY7QUFNTEMsTUFBQUEsUUFBUSxFQUFFO0FBQUVULFFBQUFBLElB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RixZQUEvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgbGluayB9IGZyb20gJy4uL3N0eWxlcy9saW5rJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcblxuLyoqXG4gKiBGaWxlIHVwbG9hZFxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBmaXJlcyBndi1maWxlLXVwbG9hZDpkcm9wIC0gQ3VzdG9tIGV2ZW50IHdoZW4gdXNlciBkcm9wIGZpbGVcbiAqXG4gKiBAYXR0ciB7U3RyaW5nfSBsYWJlbCAtIExhYmVsXG4gKiBAYXR0ciB7U3RyaW5nfSBhY2NlcHQgLSBPbmUgb3IgbW9yZSBmaWxlIHR5cGUgaWRlbnRpZmllcnMgZGVzY3JpYmluZyB0aGUgYXV0aG9yaXplZCBmaWxlIHR5cGVzLlxuICogQGF0dHIge1N0cmluZ30gZXhjZXB0IC0gT25lIG9yIG1vcmUgZmlsZSB0eXBlIGlkZW50aWZpZXJzIGRlc2NyaWJpbmcgdW5hdXRob3JpemVkIGZpbGUgdHlwZXMuXG4gKiBAYXR0ciB7TnVtYmVyfSBsaW1pdCAtIE1heCBzaXplIGxpbWl0IGluIGJ5dGVzLlxuICogQGF0dHIge1N0cmluZ30gdmFsdWUgLSBSZWZsZWN0ZWQgdmFsdWUgb2YgdXBsb2FkZWQgZmlsZVxuICoqL1xuZXhwb3J0IGNsYXNzIEd2RmlsZVVwbG9hZCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgYWNjZXB0OiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgZXhjZXB0OiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyIH0sXG4gICAgICB2YWx1ZTogeyB0eXBlOiBBcnJheSwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX3ByZXZpZXc6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmlsZXM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9lcnJvcnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGxpbmssXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWd2LXRoZW1lLWNvbG9yLWRhcmssICMyODQ0NGYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveCB7XG4gICAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlciwgI2ZhZmFmYSk7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHBhZGRpbmc6IDJyZW07XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjMjg0NDRmO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvdXRsaW5lLW9mZnNldCAwLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAwLjE1cyBsaW5lYXI7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveCAuYm94X19pY29uIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDVyZW07XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrLCAjMjg0NDRmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ib3hfX2ZpbGUge1xuICAgICAgICAgIHdpZHRoOiAwLjFweDtcbiAgICAgICAgICBoZWlnaHQ6IDAuMXB4O1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgei1pbmRleDogLTE7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94X19maWxlICsgbGFiZWwge1xuICAgICAgICAgIG1heC13aWR0aDogODAlO1xuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveC5pcy1kcmFnb3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3YtdGhlbWUtY29sb3ItbGlnaHQsICMyODQ0NGYpO1xuICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICBvdXRsaW5lOiAxcHggZGFzaGVkICMyODQ0NGY7XG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveCAuYm94X19kcmFnbmRyb3Age1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5maWxlcyB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiAxNnB4O1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW0gMC41cmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICAuZmlsZW5hbWUge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgcGFkZGluZzogMC4ycmVtO1xuICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lcnJvciB7XG4gICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIC0tZ3YtaWNvbi0tYzogcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW1hZ2Uge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wcmV2aWV3IHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94X19pbnB1dCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIH1cblxuICAgICAgICAucHJldmlldyAuYm94X19pbnB1dCB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLnByZXZpZXc6aG92ZXIgLmJveF9faW5wdXQge1xuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAgIH1cblxuICAgICAgICAucHJldmlldzpob3ZlciBndi1pbWFnZSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB0aGlzLl9maWxlcyA9IFtdO1xuICAgIHRoaXMuX2Vycm9ycyA9IFtdO1xuICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xuICB9XG5cbiAgX29uRHJhZ092ZXIoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuX2NvdW50ZXIrKztcbiAgICBjb25zdCBib3ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmJveCcpO1xuICAgIGJveC5jbGFzc0xpc3QuYWRkKCdpcy1kcmFnb3ZlcicpO1xuICB9XG5cbiAgX29uRHJhZ0VuZChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKC0tdGhpcy5fY291bnRlciA9PT0gMCkge1xuICAgICAgY29uc3QgYm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5ib3gnKTtcbiAgICAgIGJveC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kcmFnb3ZlcicpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRyb3AoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2V0RmlsZXMoZS5kYXRhVHJhbnNmZXIuZmlsZXMpO1xuICB9XG5cbiAgX2dldFJlZ2V4KG1pbWVUeXBlcykge1xuICAgIHJldHVybiBgKCR7bWltZVR5cGVzLnRvU3RyaW5nKCkucmVwbGFjZSgnICcsICcnKS5yZXBsYWNlKC8sL2csICcuK3wnKS5yZXBsYWNlKC9cXCovZywgJy4rJykucmVwbGFjZSgnLisuKycsICcuKycpfSlgO1xuICB9XG5cbiAgc2V0RmlsZXMoZmlsZXMpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICB0aGlzLl9maWxlcyA9IFsuLi5maWxlc10uZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICBpZiAodGhpcy5hY2NlcHQgJiYgZmlsZS50eXBlLm1hdGNoKHRoaXMuX2dldFJlZ2V4KHRoaXMuYWNjZXB0KSkgPT0gbnVsbCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7IGZpbGUsIGVycm9yOiBpMThuKCdndi1maWxlLXVwbG9hZC5lcnJvci50eXBlTm90QWxsb3dlZCcpIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmV4Y2VwdCAmJiBmaWxlLnR5cGUubWF0Y2godGhpcy5fZ2V0UmVnZXgodGhpcy5leGNlcHQpKSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgZmlsZSwgZXJyb3I6IGkxOG4oJ2d2LWZpbGUtdXBsb2FkLmVycm9yLnR5cGVOb3RBbGxvd2VkJykgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxpbWl0ICYmIGZpbGUuc2l6ZSA+IHBhcnNlSW50KHRoaXMubGltaXQsIDEwKSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7IGZpbGUsIGVycm9yOiBpMThuKCdndi1maWxlLXVwbG9hZC5lcnJvci5tYXhTaXplJykgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuX2Vycm9ycyA9IGVycm9ycztcbiAgICBpZiAodGhpcy5fZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2Vycm9yJywgeyBlcnJvcnM6IHRoaXMuX2Vycm9ycyB9KTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2ludmFsaWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSkpO1xuICAgIH1cbiAgICBjb25zdCBib3ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmJveCcpO1xuICAgIGJveC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kcmFnb3ZlcicpO1xuICAgIGlmICh0aGlzLl9maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlYWRlci5yZWFkQXNEYXRhVVJMKHRoaXMuX2ZpbGVzWzBdKTtcbiAgICAgIHRoaXMucmVhZGVyLm9ubG9hZCA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZmlsZXNbMF0udHlwZS5tYXRjaCh0aGlzLl9nZXRSZWdleCgnaW1hZ2UvKicpKSkge1xuICAgICAgICAgIHRoaXMuX3ByZXZpZXcgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3ByZXZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KSk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2Ryb3AnLCB7IGZpbGVzOiBbdGhpcy52YWx1ZV0gfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIF9jYW5jZWxFdmVudChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBfcmVtb3ZlRmlsZSgpIHtcbiAgICB0aGlzLl9lcnJvcnMgPSBbXTtcbiAgICB0aGlzLl9maWxlcyA9IFtdO1xuICAgIHRoaXMuX3ByZXZpZXcgPSBudWxsO1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjZmlsZScpLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KSk7XG4gIH1cblxuICBfb25DaGFuZ2UoZSkge1xuICAgIHRoaXMuc2V0RmlsZXMoZS50YXJnZXQuZmlsZXMpO1xuICB9XG5cbiAgZ2V0IGljb24oKSB7XG4gICAgaWYgKHRoaXMuX2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAnZ2VuZXJhbDpjbGlwJztcbiAgICB9XG4gICAgcmV0dXJuICdnZW5lcmFsOnVwbG9hZCc7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgbGFiZWwgPVxuICAgICAgdGhpcy5fZXJyb3JzLmxlbmd0aCA+IDAgfHwgdGhpcy5fZmlsZXMubGVuZ3RoID4gMCA/IGkxOG4oJ2d2LWZpbGUtdXBsb2FkLmNob29zZUFub3RoZXJGaWxlJykgOiBpMThuKCdndi1maWxlLXVwbG9hZC5jaG9vc2VGaWxlJyk7XG5cbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgYm94OiB0cnVlLFxuICAgICAgcHJldmlldzogdGhpcy5fcHJldmlldyAhPSBudWxsLFxuICAgIH07XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxsYWJlbCBmb3I9XCJmaWxlXCI+JHt0aGlzLmxhYmVsfTwvbGFiZWw+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiJHtjbGFzc01hcChjbGFzc2VzKX1cIlxuICAgICAgICBAZHJvcD1cIiR7dGhpcy5fb25Ecm9wfVwiXG4gICAgICAgIEBvbmRyb3A9XCIke3RoaXMuX29uRHJvcH1cIlxuICAgICAgICBAZHJhZz1cIiR7dGhpcy5fY2FuY2VsRXZlbnR9XCJcbiAgICAgICAgQGRyYWdzdGFydD1cIiR7dGhpcy5fY2FuY2VsRXZlbnR9XCJcbiAgICAgICAgQGRyYWdvdmVyPVwiJHt0aGlzLl9vbkRyYWdPdmVyfVwiXG4gICAgICAgIEBkcmFnZW50ZXI9XCIke3RoaXMuX29uRHJhZ092ZXJ9XCJcbiAgICAgICAgQGRyYWdsZWF2ZT1cIiR7dGhpcy5fb25EcmFnRW5kfVwiXG4gICAgICAgIEBkcmFnZW5kPVwiJHt0aGlzLl9vbkRyYWdFbmR9XCJcbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9wcmV2aWV3ICE9IG51bGwgPyBodG1sYDxndi1pbWFnZSAuc3JjPVwiJHt0aGlzLl9wcmV2aWV3fVwiIEBlcnJvcj1cIiR7dGhpcy5fb25QcmV2aWV3RXJyb3J9XCI+PC9ndi1pbWFnZT5gIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3hfX2lucHV0XCI+XG4gICAgICAgICAgPGd2LWljb24gY2xhc3M9XCJib3hfX2ljb25cIiBzaGFwZT1cIiR7dGhpcy5pY29ufVwiPjwvZ3YtaWNvbj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlsZVwiIGNsYXNzPVwibGlua1wiPlxuICAgICAgICAgICAgPHN0cm9uZz4ke2xhYmVsfTwvc3Ryb25nPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJib3hfX2RyYWduZHJvcFwiPiR7aTE4bignZ3YtZmlsZS11cGxvYWQub3JEcmFnSXQnKX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiYm94X19maWxlXCJcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIG5hbWU9XCJmaWxlc1tdXCJcbiAgICAgICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgICAgICBmaWxlcz1cIiR7dGhpcy5maWxlc31cIlxuICAgICAgICAgICAgYWNjZXB0PVwiJHtpZkRlZmluZWQodGhpcy5hY2NlcHQpfVwiXG4gICAgICAgICAgICBAY2hhbmdlPVwiJHt0aGlzLl9vbkNoYW5nZX1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICAke3RoaXMuX2ZpbGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVzXCI+XG4gICAgICAgICAgICAgIDxndi1pY29uIHNoYXBlPVwiZ2VuZXJhbDpjbGlwXCI+PC9ndi1pY29uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj4ke3RoaXMuX2ZpbGVzWzBdLm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgIDxndi1pY29uIGNsYXNzPVwibGlua1wiIEBjbGljaz1cIiR7dGhpcy5fcmVtb3ZlRmlsZS5iaW5kKHRoaXMsIDApfVwiIHNoYXBlPVwiZ2VuZXJhbDp0cmFzaFwiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIGBcbiAgICAgICAgOiAnJ31cbiAgICAgICR7dGhpcy5fZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVzXCI+XG4gICAgICAgICAgICAgIDxndi1pY29uIGNsYXNzPVwiZXJyb3JcIiBzaGFwZT1cImNvZGU6c3RvcFwiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+JHt0aGlzLl9lcnJvcnNbMF0uZmlsZS5uYW1lfSA8c3BhbiBjbGFzcz1cImVycm9yXCI+KCR7dGhpcy5fZXJyb3JzWzBdLmVycm9yfSk8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgICAke3RoaXMudmFsdWUgJiYgdGhpcy5fZmlsZXMubGVuZ3RoID09PSAwICYmIHRoaXMuX2Vycm9ycy5sZW5ndGggPT09IDBcbiAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlbmFtZVwiPjwvZGl2PlxuICAgICAgICAgICAgICA8Z3YtYnV0dG9uIGxpbmsgQGNsaWNrPVwiJHt0aGlzLl9yZW1vdmVGaWxlLmJpbmQodGhpcywgMCl9XCI+JHtpMThuKCdndi1maWxlLXVwbG9hZC5yZW1vdmVQaWN0dXJlJyl9PC9ndi1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYDtcbiAgfVxuXG4gIF9vblByZXZpZXdFcnJvcigpIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2YWx1ZScpKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLl9wcmV2aWV3ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVzICYmIHRoaXMuX2ZpbGVzWzBdKSB7XG4gICAgICAgICAgdGhpcy5yZWFkZXIucmVhZEFzRGF0YVVSTCh0aGlzLl9maWxlc1swXSk7XG4gICAgICAgICAgdGhpcy5yZWFkZXIub25sb2FkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gZXZlbnQudGFyZ2V0LnJlc3VsdCkge1xuICAgICAgICAgICAgICB0aGlzLl9maWxlcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ByZXZpZXcgPSBudWxsO1xuICAgICAgICB0aGlzLl9maWxlcyA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLnByZXZpZXcnKTtcbiAgICBpZiAocHJldmlldykge1xuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBwcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaW1nID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2d2LWltYWdlJyk7XG4gICAgICBpbWcuc3R5bGUud2lkdGggPSB3aWR0aCAtIDIwICsgJ3B4JztcbiAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgLSAyMCArICdweCc7XG4gICAgICBpbWcuc3R5bGUubGVmdCA9ICcxMHB4JztcbiAgICAgIGltZy5zdHlsZS50b3AgPSAnMTBweCc7XG4gICAgfVxuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LWZpbGUtdXBsb2FkJywgR3ZGaWxlVXBsb2FkKTtcbiJdfQ==
|
package/src/atoms/gv-icon.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { css, LitElement, html, noChange } from 'lit';
|
|
17
17
|
import { Directive, directive } from 'lit/directive';
|
|
18
|
+
|
|
18
19
|
import { classMap } from 'lit/directives/class-map';
|
|
19
20
|
|
|
20
21
|
class Namespaced extends Directive {
|
|
@@ -22,10 +23,10 @@ class Namespaced extends Directive {
|
|
|
22
23
|
part.element.setAttributeNS(namespace, part.name, value);
|
|
23
24
|
return noChange;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
const namespaced = directive(Namespaced);
|
|
29
|
+
|
|
29
30
|
/**
|
|
30
31
|
* An icon
|
|
31
32
|
*
|
|
@@ -36,7 +37,6 @@ const namespaced = directive(Namespaced);
|
|
|
36
37
|
* @cssprop {Color} [--gv-icon-opacity--c=var(--gv-theme-font-color-dark, #262626)] - Opacity color
|
|
37
38
|
* @cssprop {Length} [--gv-icon--s=32px] - Height and width
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
40
|
export class GvIcon extends LitElement {
|
|
41
41
|
static get properties() {
|
|
42
42
|
return {
|
|
@@ -46,9 +46,7 @@ export class GvIcon extends LitElement {
|
|
|
46
46
|
* @attr
|
|
47
47
|
* @required
|
|
48
48
|
*/
|
|
49
|
-
shape: {
|
|
50
|
-
type: String
|
|
51
|
-
}
|
|
49
|
+
shape: { type: String },
|
|
52
50
|
};
|
|
53
51
|
}
|
|
54
52
|
|
|
@@ -57,12 +55,36 @@ export class GvIcon extends LitElement {
|
|
|
57
55
|
}
|
|
58
56
|
|
|
59
57
|
canCustomize() {
|
|
60
|
-
return ![
|
|
58
|
+
return ![
|
|
59
|
+
'thirdparty:google',
|
|
60
|
+
'thirdparty:graviteeio_am',
|
|
61
|
+
'thirdparty:http',
|
|
62
|
+
'thirdparty:jdbc',
|
|
63
|
+
'thirdparty:microsoft',
|
|
64
|
+
'thirdparty:mongodb',
|
|
65
|
+
].includes(this.shape);
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
static get styles() {
|
|
64
|
-
return [
|
|
65
|
-
|
|
69
|
+
return [
|
|
70
|
+
// language=CSS
|
|
71
|
+
css`
|
|
72
|
+
:host {
|
|
73
|
+
box-sizing: border-box;
|
|
74
|
+
display: inline-flex;
|
|
75
|
+
vertical-align: middle;
|
|
76
|
+
--color: var(--gv-icon--c, var(--gv-theme-font-color-dark, #262626));
|
|
77
|
+
--opacity: var(--gv-icon-opacity--c, var(--gv-theme-font-color-dark, #262626));
|
|
78
|
+
--size: var(--gv-icon--s, 32px);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
svg {
|
|
82
|
+
height: var(--size);
|
|
83
|
+
width: var(--size);
|
|
84
|
+
fill: var(--color);
|
|
85
|
+
}
|
|
86
|
+
`,
|
|
87
|
+
];
|
|
66
88
|
}
|
|
67
89
|
|
|
68
90
|
static getHref(shape) {
|
|
@@ -72,11 +94,10 @@ export class GvIcon extends LitElement {
|
|
|
72
94
|
|
|
73
95
|
render() {
|
|
74
96
|
const xlinkNamespace = 'http://www.w3.org/1999/xlink';
|
|
75
|
-
return html`<svg class="${classMap({
|
|
76
|
-
|
|
77
|
-
|
|
97
|
+
return html`<svg class="${classMap({ 'no-color': !this.canCustomize() })}">
|
|
98
|
+
<use xlink:href="${namespaced(xlinkNamespace, GvIcon.getHref(this.shape))}" />
|
|
99
|
+
</svg>`;
|
|
78
100
|
}
|
|
79
|
-
|
|
80
101
|
}
|
|
102
|
+
|
|
81
103
|
window.customElements.define('gv-icon', GvIcon);
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL2F0b21zL2d2LWljb24uanMiXSwibmFtZXMiOlsiY3NzIiwiTGl0RWxlbWVudCIsImh0bWwiLCJub0NoYW5nZSIsIkRpcmVjdGl2ZSIsImRpcmVjdGl2ZSIsImNsYXNzTWFwIiwiTmFtZXNwYWNlZCIsInVwZGF0ZSIsInBhcnQiLCJuYW1lc3BhY2UiLCJ2YWx1ZSIsImVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVOUyIsIm5hbWUiLCJuYW1lc3BhY2VkIiwiR3ZJY29uIiwicHJvcGVydGllcyIsInNoYXBlIiwidHlwZSIsIlN0cmluZyIsImV4Y2x1ZGVkU2hhcGVzIiwiY2FuQ3VzdG9taXplIiwiaW5jbHVkZXMiLCJzdHlsZXMiLCJnZXRIcmVmIiwiY2F0ZWdvcnkiLCJpY29uIiwic3BsaXQiLCJyZW5kZXIiLCJ4bGlua05hbWVzcGFjZSIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLFVBQWQsRUFBMEJDLElBQTFCLEVBQWdDQyxRQUFoQyxRQUFnRCxLQUFoRDtBQUNBLFNBQVNDLFNBQVQsRUFBb0JDLFNBQXBCLFFBQXFDLGVBQXJDO0FBRUEsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7O0FBRUEsTUFBTUMsVUFBTixTQUF5QkgsU0FBekIsQ0FBbUM7QUFDakNJLEVBQUFBLE1BQU0sQ0FBQ0MsSUFBRCxFQUFPLENBQUNDLFNBQUQsRUFBWUMsS0FBWixDQUFQLEVBQTJCO0FBQy9CRixJQUFBQSxJQUFJLENBQUNHLE9BQUwsQ0FBYUMsY0FBYixDQUE0QkgsU0FBNUIsRUFBdUNELElBQUksQ0FBQ0ssSUFBNUMsRUFBa0RILEtBQWxEO0FBQ0EsV0FBT1IsUUFBUDtBQUNEOztBQUpnQzs7QUFPbkMsTUFBTVksVUFBVSxHQUFHVixTQUFTLENBQUNFLFVBQUQsQ0FBNUI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1TLE1BQU4sU0FBcUJmLFVBQXJCLENBQWdDO0FBQ2hCLGFBQVZnQixVQUFVLEdBQUc7QUFDdEIsV0FBTztBQUNMO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNNQyxNQUFBQSxLQUFLLEVBQUU7QUFBRUMsUUFBQUEsSUFBSSxFQUFFQztBQUFSO0FBUEYsS0FBUDtBQVNEOztBQUV3QixhQUFkQyxjQUFjLEdBQUc7QUFDMUIsV0FBTyxDQUFDLG1CQUFELEVBQXNCLDBCQUF0QixDQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLFlBQVksR0FBRztBQUNiLFdBQU8sQ0FBQyxDQUNOLG1CQURNLEVBRU4sMEJBRk0sRUFHTixpQkFITSxFQUlOLGlCQUpNLEVBS04sc0JBTE0sRUFNTixvQkFOTSxFQU9OQyxRQVBNLENBT0csS0FBS0wsS0FQUixDQUFSO0FBUUQ7O0FBRWdCLGFBQU5NLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0w7QUFDQXhCLElBQUFBLEdBQUcsb1RBRkUsQ0FBUDtBQW1CRDs7QUFFYSxTQUFQeUIsT0FBTyxDQUFDUCxLQUFELEVBQVE7QUFDcEIsVUFBTSxDQUFDUSxRQUFELEVBQVdDLElBQVgsSUFBbUJULEtBQUssQ0FBQ1UsS0FBTixDQUFZLEdBQVosQ0FBekI7QUFDQSxXQUFRLFdBQVVGLFFBQVMsUUFBT0MsSUFBSyxFQUF2QztBQUNEOztBQUVERSxFQUFBQSxNQUFNLEdBQUc7QUFDUCxVQUFNQyxjQUFjLEdBQUcsOEJBQXZCO0FBQ0EsV0FBTzVCLElBQUksZUFBZUksUUFBUSxDQUFDO0FBQUUsa0JBQVksQ0FBQyxLQUFLZ0IsWUFBTDtBQUFmLEtBQUQsQ0FBdkIsdUJBQ1VQLFVBQVUsQ0FBQ2UsY0FBRCxFQUFpQmQsTUFBTSxDQUFDUyxPQUFQLENBQWUsS0FBS1AsS0FBcEIsQ0FBakIsQ0FEcEIsWUFBWDtBQUdEOztBQTVEb0M7QUErRHZDYSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLFNBQTdCLEVBQXdDakIsTUFBeEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBMaXRFbGVtZW50LCBodG1sLCBub0NoYW5nZSB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIGRpcmVjdGl2ZSB9IGZyb20gJ2xpdC9kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5cbmNsYXNzIE5hbWVzcGFjZWQgZXh0ZW5kcyBEaXJlY3RpdmUge1xuICB1cGRhdGUocGFydCwgW25hbWVzcGFjZSwgdmFsdWVdKSB7XG4gICAgcGFydC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgcGFydC5uYW1lLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5vQ2hhbmdlO1xuICB9XG59XG5cbmNvbnN0IG5hbWVzcGFjZWQgPSBkaXJlY3RpdmUoTmFtZXNwYWNlZCk7XG5cbi8qKlxuICogQW4gaWNvblxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtaWNvbi0tYz12YXIoLS1ndi10aGVtZS1mb250LWNvbG9yLWRhcmssICMyNjI2MjYpXSAtIENvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LWljb24tb3BhY2l0eS0tYz12YXIoLS1ndi10aGVtZS1mb250LWNvbG9yLWRhcmssICMyNjI2MjYpXSAtIE9wYWNpdHkgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LWljb24tLXM9MzJweF0gLSBIZWlnaHQgYW5kIHdpZHRoXG4gKi9cbmV4cG9ydCBjbGFzcyBHdkljb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgaXMgYSBzaGFwZSwgYW4gY29uY2F0ZW5hdGlvbiBvZiBjYXRlZ29yeSBuYW1lIGFuZCBpY29uIG5hbWUuXG4gICAgICAgKiBAdHlwZSB7XCJ7Y2F0ZWdvcnl9OntpY29uTmFtZX1cIn1cbiAgICAgICAqIEBhdHRyXG4gICAgICAgKiBAcmVxdWlyZWRcbiAgICAgICAqL1xuICAgICAgc2hhcGU6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXhjbHVkZWRTaGFwZXMoKSB7XG4gICAgcmV0dXJuIFsndGhpcmRwYXJ0eTpnb29nbGUnLCAndGhpcmRwYXJ0eTpncmF2aXRlZWlvX2FtJ107XG4gIH1cblxuICBjYW5DdXN0b21pemUoKSB7XG4gICAgcmV0dXJuICFbXG4gICAgICAndGhpcmRwYXJ0eTpnb29nbGUnLFxuICAgICAgJ3RoaXJkcGFydHk6Z3Jhdml0ZWVpb19hbScsXG4gICAgICAndGhpcmRwYXJ0eTpodHRwJyxcbiAgICAgICd0aGlyZHBhcnR5OmpkYmMnLFxuICAgICAgJ3RoaXJkcGFydHk6bWljcm9zb2Z0JyxcbiAgICAgICd0aGlyZHBhcnR5Om1vbmdvZGInLFxuICAgIF0uaW5jbHVkZXModGhpcy5zaGFwZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgLS1jb2xvcjogdmFyKC0tZ3YtaWNvbi0tYywgdmFyKC0tZ3YtdGhlbWUtZm9udC1jb2xvci1kYXJrLCAjMjYyNjI2KSk7XG4gICAgICAgICAgLS1vcGFjaXR5OiB2YXIoLS1ndi1pY29uLW9wYWNpdHktLWMsIHZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItZGFyaywgIzI2MjYyNikpO1xuICAgICAgICAgIC0tc2l6ZTogdmFyKC0tZ3YtaWNvbi0tcywgMzJweCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdmcge1xuICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XG4gICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUpO1xuICAgICAgICAgIGZpbGw6IHZhcigtLWNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGdldEhyZWYoc2hhcGUpIHtcbiAgICBjb25zdCBbY2F0ZWdvcnksIGljb25dID0gc2hhcGUuc3BsaXQoJzonKTtcbiAgICByZXR1cm4gYC4vaWNvbnMvJHtjYXRlZ29yeX0uc3ZnIyR7aWNvbn1gO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHhsaW5rTmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xuICAgIHJldHVybiBodG1sYDxzdmcgY2xhc3M9XCIke2NsYXNzTWFwKHsgJ25vLWNvbG9yJzogIXRoaXMuY2FuQ3VzdG9taXplKCkgfSl9XCI+XG4gICAgICA8dXNlIHhsaW5rOmhyZWY9XCIke25hbWVzcGFjZWQoeGxpbmtOYW1lc3BhY2UsIEd2SWNvbi5nZXRIcmVmKHRoaXMuc2hhcGUpKX1cIiAvPlxuICAgIDwvc3ZnPmA7XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3YtaWNvbicsIEd2SWNvbik7XG4iXX0=
|