@sbb-esta/lyne-elements-dev 4.11.0-dev.1776958539 → 4.11.0-dev.1777034128

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/core/styles/core.scss +4 -0
  2. package/core.css +8 -0
  3. package/custom-elements.json +1770 -1770
  4. package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
  5. package/development/file-selector/common/file-selector-common.js +1 -1
  6. package/development/file-selector/common.js +1 -1
  7. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
  8. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  9. package/development/file-selector/file-selector-dropzone.js +1 -1
  10. package/development/file-selector-common-C7xIEiV4.js +416 -0
  11. package/development/file-selector-dropzone.component-BAWMZW4F.js +111 -0
  12. package/development/file-selector.js +2 -2
  13. package/development/file-selector.pure.js +2 -2
  14. package/file-selector/common/file-selector-common.js +1 -1
  15. package/file-selector/common.js +1 -1
  16. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  17. package/file-selector/file-selector-dropzone.js +1 -1
  18. package/{file-selector-common-DN4vHMpP.js → file-selector-common-BL9mM4SZ.js} +38 -40
  19. package/{file-selector-dropzone.component-DSmBp7xN.js → file-selector-dropzone.component-Ctar2kEw.js} +3 -4
  20. package/file-selector.js +2 -2
  21. package/file-selector.pure.js +2 -2
  22. package/off-brand-theme.css +8 -0
  23. package/package.json +2 -2
  24. package/safety-theme.css +8 -0
  25. package/standard-theme.css +8 -0
  26. package/development/file-selector-common-C82QR3zb.js +0 -418
  27. package/development/file-selector-dropzone.component-xfkQt0VX.js +0 -112
@@ -1,418 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { nothing, unsafeCSS } from "lit";
3
- import { property } from "lit/decorators.js";
4
- import "./core/base-elements.js";
5
- import { forceType } from "./core/decorators.js";
6
- import { isLean } from "./core/dom.js";
7
- import { forwardEvent } from "./core/eventing.js";
8
- import { SbbDisabledMixin, SbbFormAssociatedMixin, ɵstateController } from "./core/mixins.js";
9
- import { html as html$1, unsafeStatic } from "lit/static-html.js";
10
- import { SbbSecondaryButtonElement } from "./button.pure.js";
11
- import { SbbLanguageController } from "./core/controllers.js";
12
- import { i18nFileSelectorButtonLabel, i18nFileSelectorButtonLabelMultiple, i18nFileSelectorCurrentlySelected, i18nFileSelectorDeleteFile } from "./core/i18n.js";
13
- import { ref } from "lit/directives/ref.js";
14
- import { sbbInputModalityDetector } from "./core/a11y.js";
15
- //#region src/elements/file-selector/common/file-selector-common.scss?inline
16
- var file_selector_common_default = ":host {\n --sbb-file-selector-color: var(--sbb-color-2);\n --sbb-file-selector-subtitle-color: var(--sbb-color-granite);\n --sbb-file-selector-subtitle-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));\n --sbb-file-selector-background-color: var(--sbb-background-color-1);\n --sbb-file-selector-border-color: var(--sbb-border-color-4-inverted);\n --sbb-file-selector-transition-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-2x)\n );\n --sbb-file-selector-transition-easing-function: var(--sbb-animation-easing);\n display: block;\n width: 20rem;\n}\n\n@media (forced-colors: active) {\n :host(:disabled) {\n --sbb-file-selector-color: GrayText;\n --sbb-file-selector-subtitle-color: GrayText;\n --sbb-file-selector-border-color: GrayText;\n }\n}\n\n:host(:is(:state(active),[state--active])) {\n --sbb-file-selector-background-color: var(--sbb-background-color-3);\n --sbb-file-selector-border-color: var(--sbb-color-storm);\n --sbb-file-selector-border-color: light-dark(var(--sbb-color-storm), var(--sbb-color-anthracite));\n}\n@media (forced-colors: active) {\n :host(:is(:state(active),[state--active])) {\n --sbb-file-selector-border-color: Highlight;\n }\n}\n\n.sbb-file-selector__input-container {\n -webkit-tap-highlight-color: transparent;\n display: flex;\n flex-direction: column;\n}\n\n.sbb-file-selector__visually-hidden {\n border: 0;\n clip-path: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n.sbb-file-selector__file-list {\n display: flex;\n flex-direction: column;\n row-gap: var(--sbb-spacing-fixed-3x);\n margin-block: 0;\n padding-inline: 0;\n padding-block: var(--sbb-spacing-fixed-6x) var(--sbb-spacing-fixed-1x);\n}\n\n.sbb-file-selector__file {\n --sbb-text-font-size: var(--sbb-text-font-size-s);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n display: flex;\n gap: var(--sbb-spacing-fixed-4x);\n align-items: center;\n justify-content: space-between;\n}\n\n.sbb-file-selector__file-details {\n display: flex;\n flex: 1;\n justify-content: space-between;\n gap: var(--sbb-spacing-fixed-4x);\n overflow: auto;\n}\n\n.sbb-file-selector__file-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.sbb-file-selector__file-size {\n white-space: nowrap;\n color: var(--sbb-color-metal);\n color: light-dark(var(--sbb-color-metal), var(--sbb-color-smoke));\n}\n\n:host(:not(:is(:state(slotted-error),[state--slotted-error]))) .sbb-file-selector__error {\n display: none;\n}";
17
- //#endregion
18
- //#region src/elements/file-selector/common/file-selector-common.ts
19
- SbbSecondaryButtonElement.define();
20
- var fileSelectorCommonStyle = unsafeCSS(file_selector_common_default);
21
- var SbbFileSelectorCommonElementMixin = (superclass) => {
22
- return (() => {
23
- let _classSuper = SbbDisabledMixin(SbbFormAssociatedMixin(superclass));
24
- let _instanceExtraInitializers = [];
25
- let _size_decorators;
26
- let _size_initializers = [];
27
- let _size_extraInitializers = [];
28
- let _multiple_decorators;
29
- let _multiple_initializers = [];
30
- let _multiple_extraInitializers = [];
31
- let _multipleMode_decorators;
32
- let _multipleMode_initializers = [];
33
- let _multipleMode_extraInitializers = [];
34
- let _accept_decorators;
35
- let _accept_initializers = [];
36
- let _accept_extraInitializers = [];
37
- let _accessibilityLabel_decorators;
38
- let _accessibilityLabel_initializers = [];
39
- let _accessibilityLabel_extraInitializers = [];
40
- let _set_value_decorators;
41
- let _set_files_decorators;
42
- return class SbbFileSelectorCommonElement extends _classSuper {
43
- constructor() {
44
- super(...arguments);
45
- this.#size_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _size_initializers, isLean() ? "s" : "m"));
46
- this.#multiple_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _multiple_initializers, false));
47
- this.#multipleMode_accessor_storage = (__runInitializers(this, _multiple_extraInitializers), __runInitializers(this, _multipleMode_initializers, "default"));
48
- this.#accept_accessor_storage = (__runInitializers(this, _multipleMode_extraInitializers), __runInitializers(this, _accept_initializers, ""));
49
- this.#accessibilityLabel_accessor_storage = (__runInitializers(this, _accept_extraInitializers), __runInitializers(this, _accessibilityLabel_initializers, ""));
50
- this._files = (__runInitializers(this, _accessibilityLabel_extraInitializers), []);
51
- this._suffixes = [
52
- "B",
53
- "kB",
54
- "MB",
55
- "GB",
56
- "TB"
57
- ];
58
- this.language = new SbbLanguageController(this);
59
- this._counter = 0;
60
- }
61
- static {
62
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
63
- _size_decorators = [property({ reflect: true })];
64
- _multiple_decorators = [forceType(), property({ type: Boolean })];
65
- _multipleMode_decorators = [property({ attribute: "multiple-mode" })];
66
- _accept_decorators = [forceType(), property()];
67
- _accessibilityLabel_decorators = [forceType(), property({ attribute: "accessibility-label" })];
68
- _set_value_decorators = [property({ attribute: false })];
69
- _set_files_decorators = [property({ attribute: false })];
70
- __esDecorate(this, null, _size_decorators, {
71
- kind: "accessor",
72
- name: "size",
73
- static: false,
74
- private: false,
75
- access: {
76
- has: (obj) => "size" in obj,
77
- get: (obj) => obj.size,
78
- set: (obj, value) => {
79
- obj.size = value;
80
- }
81
- },
82
- metadata: _metadata
83
- }, _size_initializers, _size_extraInitializers);
84
- __esDecorate(this, null, _multiple_decorators, {
85
- kind: "accessor",
86
- name: "multiple",
87
- static: false,
88
- private: false,
89
- access: {
90
- has: (obj) => "multiple" in obj,
91
- get: (obj) => obj.multiple,
92
- set: (obj, value) => {
93
- obj.multiple = value;
94
- }
95
- },
96
- metadata: _metadata
97
- }, _multiple_initializers, _multiple_extraInitializers);
98
- __esDecorate(this, null, _multipleMode_decorators, {
99
- kind: "accessor",
100
- name: "multipleMode",
101
- static: false,
102
- private: false,
103
- access: {
104
- has: (obj) => "multipleMode" in obj,
105
- get: (obj) => obj.multipleMode,
106
- set: (obj, value) => {
107
- obj.multipleMode = value;
108
- }
109
- },
110
- metadata: _metadata
111
- }, _multipleMode_initializers, _multipleMode_extraInitializers);
112
- __esDecorate(this, null, _accept_decorators, {
113
- kind: "accessor",
114
- name: "accept",
115
- static: false,
116
- private: false,
117
- access: {
118
- has: (obj) => "accept" in obj,
119
- get: (obj) => obj.accept,
120
- set: (obj, value) => {
121
- obj.accept = value;
122
- }
123
- },
124
- metadata: _metadata
125
- }, _accept_initializers, _accept_extraInitializers);
126
- __esDecorate(this, null, _accessibilityLabel_decorators, {
127
- kind: "accessor",
128
- name: "accessibilityLabel",
129
- static: false,
130
- private: false,
131
- access: {
132
- has: (obj) => "accessibilityLabel" in obj,
133
- get: (obj) => obj.accessibilityLabel,
134
- set: (obj, value) => {
135
- obj.accessibilityLabel = value;
136
- }
137
- },
138
- metadata: _metadata
139
- }, _accessibilityLabel_initializers, _accessibilityLabel_extraInitializers);
140
- __esDecorate(this, null, _set_value_decorators, {
141
- kind: "setter",
142
- name: "value",
143
- static: false,
144
- private: false,
145
- access: {
146
- has: (obj) => "value" in obj,
147
- set: (obj, value) => {
148
- obj.value = value;
149
- }
150
- },
151
- metadata: _metadata
152
- }, null, _instanceExtraInitializers);
153
- __esDecorate(this, null, _set_files_decorators, {
154
- kind: "setter",
155
- name: "files",
156
- static: false,
157
- private: false,
158
- access: {
159
- has: (obj) => "files" in obj,
160
- set: (obj, value) => {
161
- obj.files = value;
162
- }
163
- },
164
- metadata: _metadata
165
- }, null, _instanceExtraInitializers);
166
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
167
- enumerable: true,
168
- configurable: true,
169
- writable: true,
170
- value: _metadata
171
- });
172
- }
173
- static {
174
- this.events = { filechanged: "filechanged" };
175
- }
176
- #size_accessor_storage;
177
- /**
178
- * Size variant, either s or m.
179
- * @default 'm' / 's' (lean)
180
- */
181
- get size() {
182
- return this.#size_accessor_storage;
183
- }
184
- set size(value) {
185
- this.#size_accessor_storage = value;
186
- }
187
- #multiple_accessor_storage;
188
- /** Whether more than one file can be selected. */
189
- get multiple() {
190
- return this.#multiple_accessor_storage;
191
- }
192
- set multiple(value) {
193
- this.#multiple_accessor_storage = value;
194
- }
195
- #multipleMode_accessor_storage;
196
- /** Whether the newly added files should override the previously added ones. */
197
- get multipleMode() {
198
- return this.#multipleMode_accessor_storage;
199
- }
200
- set multipleMode(value) {
201
- this.#multipleMode_accessor_storage = value;
202
- }
203
- #accept_accessor_storage;
204
- /** A comma-separated list of allowed unique file type specifiers. */
205
- get accept() {
206
- return this.#accept_accessor_storage;
207
- }
208
- set accept(value) {
209
- this.#accept_accessor_storage = value;
210
- }
211
- #accessibilityLabel_accessor_storage;
212
- /** This will be forwarded as aria-label to the native input element. */
213
- get accessibilityLabel() {
214
- return this.#accessibilityLabel_accessor_storage;
215
- }
216
- set accessibilityLabel(value) {
217
- this.#accessibilityLabel_accessor_storage = value;
218
- }
219
- /** The path of the first selected file. Empty string ('') if no file is selected */
220
- set value(value) {
221
- this._hiddenInput.value = value ?? "";
222
- if (!value) this.files = [];
223
- }
224
- get value() {
225
- return this._hiddenInput?.value;
226
- }
227
- /** The list of selected files. */
228
- set files(value) {
229
- this._files = value ?? [];
230
- const dt = new DataTransfer();
231
- this.files.forEach((e) => dt.items.add(e));
232
- this._hiddenInput.files = dt.files;
233
- this.updateFormValue();
234
- }
235
- get files() {
236
- return this._files;
237
- }
238
- /**
239
- * Form type of element.
240
- * @default 'file'
241
- */
242
- get type() {
243
- return "file";
244
- }
245
- formResetCallback() {
246
- this.files = [];
247
- }
248
- formStateRestoreCallback(state, _reason) {
249
- if (!state) return;
250
- this.files = state.getAll(this.name);
251
- }
252
- updateFormValue() {
253
- const formValue = new FormData();
254
- this.files.forEach((file) => formValue.append(this.name, file));
255
- this.internals.setFormValue(formValue);
256
- }
257
- _checkFileEquality(file1, file2) {
258
- return file1.name === file2.name && file1.size === file2.size && file1.lastModified === file2.lastModified;
259
- }
260
- _onFocus() {
261
- if (sbbInputModalityDetector.mostRecentModality === "keyboard") ɵstateController(this.loadButton).add("focus-visible");
262
- }
263
- _onBlur() {
264
- ɵstateController(this.loadButton).delete("focus-visible");
265
- }
266
- _readFiles(event) {
267
- const fileInput = event.target;
268
- if (fileInput.files) this.createFileList(fileInput.files);
269
- forwardEvent(event, this);
270
- }
271
- createFileList(files) {
272
- const fileArray = Array.from(files);
273
- if (!this.multiple && files.length > 1 || this.accept && fileArray.some((file) => !this.accept.split(",").some((a) => file.name.endsWith(a.trim())))) return;
274
- if (!this.multiple || this.multipleMode !== "persistent" || this.files.length === 0) this.files = fileArray;
275
- else this.files = fileArray.filter((newFile) => this.files.findIndex((oldFile) => this._checkFileEquality(newFile, oldFile)) === -1).concat(this.files);
276
- this._updateA11yLiveRegion();
277
- this._dispatchFileChangedEvent();
278
- }
279
- getButtonLabel() {
280
- return this.multiple ? i18nFileSelectorButtonLabelMultiple[this.language.current] : i18nFileSelectorButtonLabel[this.language.current];
281
- }
282
- _removeFile(file) {
283
- this.files = this.files.filter((f) => !this._checkFileEquality(file, f));
284
- this._updateA11yLiveRegion();
285
- /** The input event fires when the value has been changed as a direct result of a user action. */
286
- this.dispatchEvent(new InputEvent("input", {
287
- bubbles: true,
288
- composed: true
289
- }));
290
- /**
291
- * The change event is fired when the user modifies the element's value.
292
- * Unlike the input event, the change event is not necessarily fired
293
- * for each alteration to an element's value.
294
- */
295
- this.dispatchEvent(new Event("change", { bubbles: true }));
296
- this._dispatchFileChangedEvent();
297
- }
298
- _dispatchFileChangedEvent() {
299
- /**
300
- * @type {CustomEvent<Readonly<File>[]>}
301
- * An event which is emitted each time the file list changes.
302
- */
303
- this.dispatchEvent(new CustomEvent("filechanged", {
304
- bubbles: true,
305
- composed: true,
306
- detail: this.files
307
- }));
308
- }
309
- /** Calculates the correct unit for the file's size. */
310
- _formatFileSize(size) {
311
- const i = Math.floor(Math.log(size) / Math.log(1024));
312
- return `${(size / Math.pow(1024, i)).toFixed(0)} ${this._suffixes[i]}`;
313
- }
314
- _updateA11yLiveRegion() {
315
- this._liveRegion.innerText = i18nFileSelectorCurrentlySelected(this.files.map((e) => e.name))[this.language.current];
316
- }
317
- _renderFileList() {
318
- const TAG_NAME = this.files.length > 1 ? {
319
- WRAPPER: "ul",
320
- ELEMENT: "li"
321
- } : {
322
- WRAPPER: "div",
323
- ELEMENT: "span"
324
- };
325
- return html$1`
326
- <${unsafeStatic(TAG_NAME.WRAPPER)} class='sbb-file-selector__file-list'>
327
- ${this.files.map((file) => html$1`
328
- <${unsafeStatic(TAG_NAME.ELEMENT)} class='sbb-file-selector__file'>
329
- <span class='sbb-file-selector__file-details'>
330
- <span class='sbb-file-selector__file-name'>${file.name}</span>
331
- <span class='sbb-file-selector__file-size'>${this._formatFileSize(file.size)}</span>
332
- </span>
333
- <sbb-secondary-button
334
- size='${this.size}'
335
- icon-name='trash-small'
336
- @click='${() => this._removeFile(file)}'
337
- aria-label='${`${i18nFileSelectorDeleteFile[this.language.current]} - ${file.name}`}'
338
- ></sbb-secondary-button>
339
- </${unsafeStatic(TAG_NAME.ELEMENT)}>`)}
340
- </${unsafeStatic(TAG_NAME.WRAPPER)}>
341
- `;
342
- }
343
- _onDragEnter(event) {
344
- this._counter++;
345
- if (!this.disabled && !this.formDisabled) {
346
- this._setDragState(event.target, true);
347
- this._blockEvent(event);
348
- }
349
- }
350
- _onDragLeave(event) {
351
- this._counter--;
352
- if (!this.disabled && !this.formDisabled && event.target === this._dragTarget && this._counter === 0) {
353
- this._setDragState();
354
- this._blockEvent(event);
355
- }
356
- }
357
- _onFileDrop(event) {
358
- this._counter = 0;
359
- if (!this.disabled && !this.formDisabled) {
360
- this._setDragState();
361
- this._blockEvent(event);
362
- this.createFileList(event.dataTransfer.files);
363
- }
364
- }
365
- _blockEvent(event) {
366
- event.stopPropagation();
367
- event.preventDefault();
368
- }
369
- _setDragState(dragTarget = void 0, isDragEnter = false) {
370
- this._dragTarget = dragTarget;
371
- this.toggleState("active", isDragEnter);
372
- ɵstateController(this.loadButton).toggle("active", isDragEnter);
373
- }
374
- render() {
375
- const ariaLabel = this.accessibilityLabel ? `${this.getButtonLabel()} - ${this.accessibilityLabel}` : void 0;
376
- return html$1`
377
- <div class="sbb-file-selector">
378
- <div
379
- class="sbb-file-selector__input-container"
380
- @dragenter=${this._onDragEnter}
381
- @dragover=${this._blockEvent}
382
- @dragleave=${this._onDragLeave}
383
- @drop=${this._onFileDrop}
384
- >
385
- ${this.renderTemplate(html$1`<input
386
- class="sbb-file-selector__visually-hidden"
387
- type="file"
388
- ?disabled="${this.disabled || this.formDisabled}"
389
- ?multiple="${this.multiple}"
390
- accept="${this.accept || nothing}"
391
- aria-label="${ariaLabel || nothing}"
392
- @change="${this._readFiles}"
393
- @focus="${this._onFocus}"
394
- @blur="${this._onBlur}"
395
- ${ref((el) => {
396
- this._hiddenInput = el;
397
- })}
398
- />`)}
399
- </div>
400
- <p
401
- role="status"
402
- class="sbb-file-selector__visually-hidden"
403
- ${ref((p) => this._liveRegion = p)}
404
- ></p>
405
- ${this.files.length > 0 ? this._renderFileList() : nothing}
406
- <div class="sbb-file-selector__error">
407
- <slot name="error"></slot>
408
- </div>
409
- </div>
410
- `;
411
- }
412
- };
413
- })();
414
- };
415
- //#endregion
416
- export { fileSelectorCommonStyle as n, SbbFileSelectorCommonElementMixin as t };
417
-
418
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3Rvci1jb21tb24tQzgyUVIzemIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ZpbGUtc2VsZWN0b3IvY29tbW9uL2ZpbGUtc2VsZWN0b3ItY29tbW9uLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ZpbGUtc2VsZWN0b3IvY29tbW9uL2ZpbGUtc2VsZWN0b3ItY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uLy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItZmlsZS1zZWxlY3Rvci1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTIpO1xuICAtLXNiYi1maWxlLXNlbGVjdG9yLXN1YnRpdGxlLWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSwgdmFyKC0tc2JiLWNvbG9yLXNtb2tlKSk7XG4gIC0tc2JiLWZpbGUtc2VsZWN0b3ItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMSk7XG4gIC0tc2JiLWZpbGUtc2VsZWN0b3ItYm9yZGVyLWNvbG9yOiB2YXIoLS1zYmItYm9yZGVyLWNvbG9yLTQtaW52ZXJ0ZWQpO1xuICAtLXNiYi1maWxlLXNlbGVjdG9yLXRyYW5zaXRpb24tZHVyYXRpb246IHZhcihcbiAgICAtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbixcbiAgICB2YXIoLS1zYmItYW5pbWF0aW9uLWR1cmF0aW9uLTJ4KVxuICApO1xuICAtLXNiYi1maWxlLXNlbGVjdG9yLXRyYW5zaXRpb24tZWFzaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItYW5pbWF0aW9uLWVhc2luZyk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMzIwKX07XG59XG5cbjpob3N0KDpkaXNhYmxlZCkge1xuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgLS1zYmItZmlsZS1zZWxlY3Rvci1jb2xvcjogR3JheVRleHQ7XG4gICAgLS1zYmItZmlsZS1zZWxlY3Rvci1zdWJ0aXRsZS1jb2xvcjogR3JheVRleHQ7XG4gICAgLS1zYmItZmlsZS1zZWxlY3Rvci1ib3JkZXItY29sb3I6IEdyYXlUZXh0O1xuICB9XG59XG5cbjpob3N0KDpzdGF0ZShhY3RpdmUpKSB7XG4gIC0tc2JiLWZpbGUtc2VsZWN0b3ItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMyk7XG4gIC0tc2JiLWZpbGUtc2VsZWN0b3ItYm9yZGVyLWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1zdG9ybSksIHZhcigtLXNiYi1jb2xvci1hbnRocmFjaXRlKSk7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC0tc2JiLWZpbGUtc2VsZWN0b3ItYm9yZGVyLWNvbG9yOiBIaWdobGlnaHQ7XG4gIH1cbn1cblxuLnNiYi1maWxlLXNlbGVjdG9yX19pbnB1dC1jb250YWluZXIge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uc2JiLWZpbGUtc2VsZWN0b3JfX3Zpc3VhbGx5LWhpZGRlbiB7XG4gIEBpbmNsdWRlIHNiYi5zY3JlZW4tcmVhZGVyLW9ubHk7XG59XG5cbi5zYmItZmlsZS1zZWxlY3Rvcl9fZmlsZS1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcm93LWdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtM3gpO1xuICBtYXJnaW4tYmxvY2s6IDA7XG4gIHBhZGRpbmctaW5saW5lOiAwO1xuICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC02eCkgdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xufVxuXG4uc2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUge1xuICBAaW5jbHVkZSBzYmIudGV4dC1zLS1yZWd1bGFyO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG5cbi5zYmItZmlsZS1zZWxlY3Rvcl9fZmlsZS1kZXRhaWxzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTR4KTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi5zYmItZmlsZS1zZWxlY3Rvcl9fZmlsZS1uYW1lIHtcbiAgQGluY2x1ZGUgc2JiLmVsbGlwc2lzO1xufVxuXG4uc2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUtc2l6ZSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1tZXRhbCksIHZhcigtLXNiYi1jb2xvci1zbW9rZSkpO1xufVxuXG4uc2JiLWZpbGUtc2VsZWN0b3JfX2Vycm9yIHtcbiAgOmhvc3QoOm5vdCg6c3RhdGUoc2xvdHRlZC1lcnJvcikpKSAmIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCJpbXBvcnQgeyBub3RoaW5nLCB1bnNhZmVDU1MsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgaHRtbCwgdW5zYWZlU3RhdGljIH0gZnJvbSAnbGl0L3N0YXRpYy1odG1sLmpzJztcblxuaW1wb3J0IHtcbiAgU2JiU2Vjb25kYXJ5QnV0dG9uRWxlbWVudCxcbiAgdHlwZSBTYmJTZWNvbmRhcnlCdXR0b25TdGF0aWNFbGVtZW50LFxufSBmcm9tICcuLi8uLi9idXR0b24ucHVyZS50cyc7XG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy50cyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgeyBmb3J3YXJkRXZlbnQgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLnRzJztcbmltcG9ydCB7XG4gIGkxOG5GaWxlU2VsZWN0b3JCdXR0b25MYWJlbCxcbiAgaTE4bkZpbGVTZWxlY3RvckJ1dHRvbkxhYmVsTXVsdGlwbGUsXG4gIGkxOG5GaWxlU2VsZWN0b3JDdXJyZW50bHlTZWxlY3RlZCxcbiAgaTE4bkZpbGVTZWxlY3RvckRlbGV0ZUZpbGUsXG59IGZyb20gJy4uLy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQge1xuICB0eXBlIENvbnN0cnVjdG9yLFxuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIMm1c3RhdGVDb250cm9sbGVyLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy50cyc7XG5cbmltcG9ydCBmaWxlU2VsZWN0b3JDb21tb25TdHlsZVN0cmluZyBmcm9tICcuL2ZpbGUtc2VsZWN0b3ItY29tbW9uLnNjc3M/aW5saW5lJztcblxuLy8gVE9ETyhicmVha2luZy1jaGFuZ2UpOiBSZW1vdmUgY2FsbCB0byBkZWZpbmUuXG5TYmJTZWNvbmRhcnlCdXR0b25FbGVtZW50LmRlZmluZSgpO1xuXG5leHBvcnQgY29uc3QgZmlsZVNlbGVjdG9yQ29tbW9uU3R5bGUgPSB1bnNhZmVDU1MoZmlsZVNlbGVjdG9yQ29tbW9uU3R5bGVTdHJpbmcpO1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGaWxlU2VsZWN0b3JDb21tb25FbGVtZW50TWl4aW5UeXBlIGV4dGVuZHMgU2JiRGlzYWJsZWRNaXhpbihcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50KSxcbikge1xuICBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ3MnIHwgJ20nO1xuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW47XG4gIHB1YmxpYyBhY2Nlc3NvciBtdWx0aXBsZU1vZGU6ICdkZWZhdWx0JyB8ICdwZXJzaXN0ZW50JztcbiAgcHVibGljIGFjY2Vzc29yIGFjY2VwdDogc3RyaW5nO1xuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUxhYmVsOiBzdHJpbmc7XG4gIHB1YmxpYyBhY2Nlc3NvciBmaWxlczogUmVhZG9ubHk8RmlsZT5bXTtcbiAgcHVibGljIG92ZXJyaWRlIGdldCB2YWx1ZSgpOiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTtcbiAgcHJvdGVjdGVkIGxvYWRCdXR0b246IFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQ7XG4gIHByb3RlY3RlZCBsYW5ndWFnZTogU2JiTGFuZ3VhZ2VDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVuZGVyVGVtcGxhdGUoaW5wdXQ6IFRlbXBsYXRlUmVzdWx0KTogVGVtcGxhdGVSZXN1bHQ7XG4gIHByb3RlY3RlZCBjcmVhdGVGaWxlTGlzdChmaWxlczogRmlsZUxpc3QpOiB2b2lkO1xuICBwcm90ZWN0ZWQgZ2V0QnV0dG9uTGFiZWwoKTogc3RyaW5nO1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24pOiB2b2lkO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRmlsZVNlbGVjdG9yQ29tbW9uRWxlbWVudE1peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxTYmJFbGVtZW50Pj4oXG4gIHN1cGVyY2xhc3M6IFQsXG4pOiBDb25zdHJ1Y3RvcjxTYmJGaWxlU2VsZWN0b3JDb21tb25FbGVtZW50TWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJGaWxlU2VsZWN0b3JDb21tb25FbGVtZW50XG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oc3VwZXJjbGFzcykpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZpbGVTZWxlY3RvckNvbW1vbkVsZW1lbnRNaXhpblR5cGU+XG4gIHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICAgIGZpbGVjaGFuZ2VkOiAnZmlsZWNoYW5nZWQnLFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIHZhcmlhbnQsIGVpdGhlciBzIG9yIG0uXG4gICAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHNpemU6ICdzJyB8ICdtJyA9IGlzTGVhbigpID8gJ3MnIDogJ20nO1xuXG4gICAgLyoqIFdoZXRoZXIgbW9yZSB0aGFuIG9uZSBmaWxlIGNhbiBiZSBzZWxlY3RlZC4gKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIGFjY2Vzc29yIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbmV3bHkgYWRkZWQgZmlsZXMgc2hvdWxkIG92ZXJyaWRlIHRoZSBwcmV2aW91c2x5IGFkZGVkIG9uZXMuICovXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbXVsdGlwbGUtbW9kZScgfSlcbiAgICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGVNb2RlOiAnZGVmYXVsdCcgfCAncGVyc2lzdGVudCcgPSAnZGVmYXVsdCc7XG5cbiAgICAvKiogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIHVuaXF1ZSBmaWxlIHR5cGUgc3BlY2lmaWVycy4gKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoKVxuICAgIHB1YmxpYyBhY2Nlc3NvciBhY2NlcHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQuICovXG4gICAgQGZvcmNlVHlwZSgpXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSlcbiAgICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBUaGUgcGF0aCBvZiB0aGUgZmlyc3Qgc2VsZWN0ZWQgZmlsZS4gRW1wdHkgc3RyaW5nICgnJykgaWYgbm8gZmlsZSBpcyBzZWxlY3RlZCAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICB0aGlzLl9oaWRkZW5JbnB1dC52YWx1ZSA9IHZhbHVlID8/ICcnO1xuXG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgIHJldHVybiB0aGlzLl9oaWRkZW5JbnB1dD8udmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBsaXN0IG9mIHNlbGVjdGVkIGZpbGVzLiAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgICBwdWJsaWMgc2V0IGZpbGVzKHZhbHVlOiBSZWFkb25seTxGaWxlPltdKSB7XG4gICAgICB0aGlzLl9maWxlcyA9IHZhbHVlID8/IFtdO1xuXG4gICAgICAvLyB1cGRhdGUgdGhlIGlubmVyIGlucHV0XG4gICAgICBjb25zdCBkdDogRGF0YVRyYW5zZmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKChlOiBSZWFkb25seTxGaWxlPikgPT4gZHQuaXRlbXMuYWRkKGUpKTtcbiAgICAgIHRoaXMuX2hpZGRlbklucHV0LmZpbGVzID0gZHQuZmlsZXM7XG5cbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZmlsZXMoKTogUmVhZG9ubHk8RmlsZT5bXSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gICAgfVxuICAgIHByaXZhdGUgX2ZpbGVzOiBSZWFkb25seTxGaWxlPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAnZmlsZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAnZmlsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGlkZGVuSW5wdXQhOiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHByaXZhdGUgX3N1ZmZpeGVzOiBzdHJpbmdbXSA9IFsnQicsICdrQicsICdNQicsICdHQicsICdUQiddO1xuICAgIHByaXZhdGUgX2xpdmVSZWdpb24hOiBIVE1MUGFyYWdyYXBoRWxlbWVudDtcbiAgICBwcm90ZWN0ZWQgbG9hZEJ1dHRvbiE6IFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIGxhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAgIC8vIFNhZmFyaSBoYXMgYSBwZWN1bGlhciBiZWhhdmlvciB3aGVuIGRyYWdnaW5nIGZpbGVzIG9uIHRoZSBpbm5lciBidXR0b24gaW4gJ2Ryb3B6b25lJyB2YXJpYW50O1xuICAgIC8vIHRoaXMgd2lsbCByZXF1aXJlIGEgY291bnRlciB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBkcmFnRW50ZXIvZHJhZ0xlYXZlLlxuICAgIHByaXZhdGUgX2NvdW50ZXI6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBfZHJhZ1RhcmdldD86IEhUTUxFbGVtZW50O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlclRlbXBsYXRlKGlucHV0OiBUZW1wbGF0ZVJlc3VsdCk6IFRlbXBsYXRlUmVzdWx0O1xuXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5maWxlcyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICBfcmVhc29uPzogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZXMgPSAoc3RhdGUgYXMgRm9ybURhdGEpLmdldEFsbCh0aGlzLm5hbWUpIGFzIFJlYWRvbmx5PEZpbGU+W107XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKChmaWxlKSA9PiBmb3JtVmFsdWUuYXBwZW5kKHRoaXMubmFtZSwgZmlsZSkpO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKGZvcm1WYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tGaWxlRXF1YWxpdHkoZmlsZTE6IFJlYWRvbmx5PEZpbGU+LCBmaWxlMjogUmVhZG9ubHk8RmlsZT4pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZpbGUxLm5hbWUgPT09IGZpbGUyLm5hbWUgJiZcbiAgICAgICAgZmlsZTEuc2l6ZSA9PT0gZmlsZTIuc2l6ZSAmJlxuICAgICAgICBmaWxlMS5sYXN0TW9kaWZpZWQgPT09IGZpbGUyLmxhc3RNb2RpZmllZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkZvY3VzKCk6IHZvaWQge1xuICAgICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgICAgybVzdGF0ZUNvbnRyb2xsZXIodGhpcy5sb2FkQnV0dG9uKS5hZGQoJ2ZvY3VzLXZpc2libGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkJsdXIoKTogdm9pZCB7XG4gICAgICDJtXN0YXRlQ29udHJvbGxlcih0aGlzLmxvYWRCdXR0b24pLmRlbGV0ZSgnZm9jdXMtdmlzaWJsZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlYWRGaWxlcyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGZpbGVJbnB1dC5maWxlcykge1xuICAgICAgICB0aGlzLmNyZWF0ZUZpbGVMaXN0KGZpbGVJbnB1dC5maWxlcyk7XG4gICAgICB9XG4gICAgICBmb3J3YXJkRXZlbnQoZXZlbnQsIHRoaXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVGaWxlTGlzdChmaWxlczogRmlsZUxpc3QpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGZpbGVBcnJheSA9IEFycmF5LmZyb20oZmlsZXMpO1xuICAgICAgaWYgKFxuICAgICAgICAoIXRoaXMubXVsdGlwbGUgJiYgZmlsZXMubGVuZ3RoID4gMSkgfHxcbiAgICAgICAgKHRoaXMuYWNjZXB0ICYmXG4gICAgICAgICAgZmlsZUFycmF5LnNvbWUoXG4gICAgICAgICAgICAoZmlsZSkgPT4gIXRoaXMuYWNjZXB0LnNwbGl0KCcsJykuc29tZSgoYSkgPT4gZmlsZS5uYW1lLmVuZHNXaXRoKGEudHJpbSgpKSksXG4gICAgICAgICAgKSlcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBtdWx0aXBsZSBmaWxlcyBhcmUgc2VsZWN0ZWQgYnV0IHRoZSBzZWxlY3RvciBpcyBub3QgaW4gbXVsdGlwbGUgbW9kZSxcbiAgICAgICAgLy8gaWdub3JlIHRoZSBzZWxlY3Rpb24gKGxpa2UgbmF0aXZlIGJlaGF2aW9yKS5cbiAgICAgICAgLy8gSWYgdGhlIGFjY2VwdCBhdHRyaWJ1dGUgaXMgc2V0LCBjaGVjayBpZiB0aGUgc2VsZWN0ZWQgZmlsZXMgbWF0Y2ggdGhlIGFsbG93ZWQgdHlwZXMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMubXVsdGlwbGVNb2RlICE9PSAncGVyc2lzdGVudCcgfHwgdGhpcy5maWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5maWxlcyA9IGZpbGVBcnJheTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIChuZXdGaWxlOiBSZWFkb25seTxGaWxlPik6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgICAgdGhpcy5maWxlcyEuZmluZEluZGV4KChvbGRGaWxlOiBSZWFkb25seTxGaWxlPikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0ZpbGVFcXVhbGl0eShuZXdGaWxlLCBvbGRGaWxlKSxcbiAgICAgICAgICAgICAgKSA9PT0gLTEsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5jb25jYXQodGhpcy5maWxlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLl91cGRhdGVBMTF5TGl2ZVJlZ2lvbigpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hGaWxlQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICA/IGkxOG5GaWxlU2VsZWN0b3JCdXR0b25MYWJlbE11bHRpcGxlW3RoaXMubGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgOiBpMThuRmlsZVNlbGVjdG9yQnV0dG9uTGFiZWxbdGhpcy5sYW5ndWFnZS5jdXJyZW50XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVGaWxlKGZpbGU6IFJlYWRvbmx5PEZpbGU+KTogdm9pZCB7XG4gICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoKGY6IFJlYWRvbmx5PEZpbGU+KSA9PiAhdGhpcy5fY2hlY2tGaWxlRXF1YWxpdHkoZmlsZSwgZikpO1xuICAgICAgdGhpcy5fdXBkYXRlQTExeUxpdmVSZWdpb24oKTtcblxuICAgICAgLy8gRGlzcGF0Y2ggbmF0aXZlIGV2ZW50cyBhcyBpZiB0aGUgcmVzZXQgaXMgZG9uZSB2aWEgdGhlIGZpbGUgc2VsZWN0aW9uIHdpbmRvdy5cbiAgICAgIC8qKiBUaGUgaW5wdXQgZXZlbnQgZmlyZXMgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhcyBhIGRpcmVjdCByZXN1bHQgb2YgYSB1c2VyIGFjdGlvbi4gKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0Jywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgdGhlIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICAgKiBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgICAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRmlsZUNoYW5nZWRFdmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc3BhdGNoRmlsZUNoYW5nZWRFdmVudCgpOiB2b2lkIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0N1c3RvbUV2ZW50PFJlYWRvbmx5PEZpbGU+W10+fVxuICAgICAgICogQW4gZXZlbnQgd2hpY2ggaXMgZW1pdHRlZCBlYWNoIHRpbWUgdGhlIGZpbGUgbGlzdCBjaGFuZ2VzLlxuICAgICAgICovXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudDxSZWFkb25seTxGaWxlPltdPignZmlsZWNoYW5nZWQnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHRoaXMuZmlsZXMsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQ2FsY3VsYXRlcyB0aGUgY29ycmVjdCB1bml0IGZvciB0aGUgZmlsZSdzIHNpemUuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0RmlsZVNpemUoc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IGk6IG51bWJlciA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgICByZXR1cm4gYCR7KHNpemUgLyBNYXRoLnBvdygxMDI0LCBpKSkudG9GaXhlZCgwKX0gJHt0aGlzLl9zdWZmaXhlc1tpXX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUExMXlMaXZlUmVnaW9uKCk6IHZvaWQge1xuICAgICAgdGhpcy5fbGl2ZVJlZ2lvbi5pbm5lclRleHQgPSBpMThuRmlsZVNlbGVjdG9yQ3VycmVudGx5U2VsZWN0ZWQodGhpcy5maWxlcy5tYXAoKGUpID0+IGUubmFtZSkpW1xuICAgICAgICB0aGlzLmxhbmd1YWdlLmN1cnJlbnRcbiAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVuZGVyRmlsZUxpc3QoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgICAgY29uc3QgVEFHX05BTUU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuICAgICAgICB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgICAgICA/IHsgV1JBUFBFUjogJ3VsJywgRUxFTUVOVDogJ2xpJyB9XG4gICAgICAgICAgOiB7IFdSQVBQRVI6ICdkaXYnLCBFTEVNRU5UOiAnc3BhbicgfTtcblxuICAgICAgLyogZXNsaW50LWRpc2FibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRS5XUkFQUEVSKX0gY2xhc3M9J3NiYi1maWxlLXNlbGVjdG9yX19maWxlLWxpc3QnPlxuICAgICAgICAke3RoaXMuZmlsZXMubWFwKFxuICAgICAgICAgIChmaWxlOiBSZWFkb25seTxGaWxlPikgPT4gaHRtbGBcbiAgICAgICAgICAgIDwke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRS5FTEVNRU5UKX0gY2xhc3M9J3NiYi1maWxlLXNlbGVjdG9yX19maWxlJz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0nc2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUtZGV0YWlscyc+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0nc2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUtbmFtZSc+JHtmaWxlLm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9J3NiYi1maWxlLXNlbGVjdG9yX19maWxlLXNpemUnPiR7dGhpcy5fZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgICAgICAgICAgICBzaXplPScke3RoaXMuc2l6ZX0nXG4gICAgICAgICAgICAgICAgaWNvbi1uYW1lPSd0cmFzaC1zbWFsbCdcbiAgICAgICAgICAgICAgICBAY2xpY2s9JyR7KCkgPT4gdGhpcy5fcmVtb3ZlRmlsZShmaWxlKX0nXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nJHtgJHtpMThuRmlsZVNlbGVjdG9yRGVsZXRlRmlsZVt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdfSAtICR7ZmlsZS5uYW1lfWB9J1xuICAgICAgICAgICAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5cbiAgICAgICAgICAgIDwvJHt1bnNhZmVTdGF0aWMoVEFHX05BTUUuRUxFTUVOVCl9PmAsXG4gICAgICAgICl9XG4gICAgICA8LyR7dW5zYWZlU3RhdGljKFRBR19OQU1FLldSQVBQRVIpfT5cbiAgICBgO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBsaXQvYmluZGluZy1wb3NpdGlvbnMgKi9cbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICB0aGlzLl9jb3VudGVyKys7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZm9ybURpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuX3NldERyYWdTdGF0ZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIHRydWUpO1xuICAgICAgICB0aGlzLl9ibG9ja0V2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICB0aGlzLl9jb3VudGVyLS07XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmRpc2FibGVkICYmXG4gICAgICAgICF0aGlzLmZvcm1EaXNhYmxlZCAmJlxuICAgICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuX2RyYWdUYXJnZXQgJiZcbiAgICAgICAgdGhpcy5fY291bnRlciA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3NldERyYWdTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9ibG9ja0V2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkZpbGVEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmZvcm1EaXNhYmxlZCkge1xuICAgICAgICB0aGlzLl9zZXREcmFnU3RhdGUoKTtcbiAgICAgICAgdGhpcy5fYmxvY2tFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRmlsZUxpc3QoZXZlbnQuZGF0YVRyYW5zZmVyIS5maWxlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmxvY2tFdmVudChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0RHJhZ1N0YXRlKFxuICAgICAgZHJhZ1RhcmdldDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgICBpc0RyYWdFbnRlcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgICk6IHZvaWQge1xuICAgICAgdGhpcy5fZHJhZ1RhcmdldCA9IGRyYWdUYXJnZXQ7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRlKCdhY3RpdmUnLCBpc0RyYWdFbnRlcik7XG4gICAgICDJtXN0YXRlQ29udHJvbGxlcih0aGlzLmxvYWRCdXR0b24pLnRvZ2dsZSgnYWN0aXZlJywgaXNEcmFnRW50ZXIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgICAgY29uc3QgYXJpYUxhYmVsID0gdGhpcy5hY2Nlc3NpYmlsaXR5TGFiZWxcbiAgICAgICAgPyBgJHt0aGlzLmdldEJ1dHRvbkxhYmVsKCl9IC0gJHt0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbH1gXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3RvclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2lucHV0LWNvbnRhaW5lclwiXG4gICAgICAgICAgICBAZHJhZ2VudGVyPSR7dGhpcy5fb25EcmFnRW50ZXJ9XG4gICAgICAgICAgICBAZHJhZ292ZXI9JHt0aGlzLl9ibG9ja0V2ZW50fVxuICAgICAgICAgICAgQGRyYWdsZWF2ZT0ke3RoaXMuX29uRHJhZ0xlYXZlfVxuICAgICAgICAgICAgQGRyb3A9JHt0aGlzLl9vbkZpbGVEcm9wfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7dGhpcy5yZW5kZXJUZW1wbGF0ZShcbiAgICAgICAgICAgICAgaHRtbGA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX192aXN1YWxseS1oaWRkZW5cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWR9XCJcbiAgICAgICAgICAgICAgICA/bXVsdGlwbGU9XCIke3RoaXMubXVsdGlwbGV9XCJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCIke3RoaXMuYWNjZXB0IHx8IG5vdGhpbmd9XCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiJHthcmlhTGFiZWwgfHwgbm90aGluZ31cIlxuICAgICAgICAgICAgICAgIEBjaGFuZ2U9XCIke3RoaXMuX3JlYWRGaWxlc31cIlxuICAgICAgICAgICAgICAgIEBmb2N1cz1cIiR7dGhpcy5fb25Gb2N1c31cIlxuICAgICAgICAgICAgICAgIEBibHVyPVwiJHt0aGlzLl9vbkJsdXJ9XCJcbiAgICAgICAgICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oaWRkZW5JbnB1dCA9IGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIC8+YCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgICAgICAgICR7cmVmKChwPzogRWxlbWVudCkgPT4gKHRoaXMuX2xpdmVSZWdpb24gPSBwIGFzIEhUTUxQYXJhZ3JhcGhFbGVtZW50KSl9XG4gICAgICAgICAgPjwvcD5cbiAgICAgICAgICAke3RoaXMuZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMuX3JlbmRlckZpbGVMaXN0KCkgOiBub3RoaW5nfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZXJyb3JcIj5cbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlcnJvclwiPjwvc2xvdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRmlsZVNlbGVjdG9yQ29tbW9uRWxlbWVudCBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFNiYkZpbGVTZWxlY3RvckNvbW1vbkVsZW1lbnRNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaUNBLDBCQUEwQixRQUFRO0FBRWxDLElBQWEsMEJBQTBCLFVBQVUsNkJBQThCO0FBdUIvRSxJQUFhLHFDQUNYLGVBQzBEO0FBNlUxRCxlQTVVMkM7b0JBQ2pDLGlCQUFpQix1QkFBdUIsV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBRC9DLHFDQUNMLFlBQW9EOzs7QUFXZixVQUFBLHlCQVpoQyxrQkFBQSxNQUFBLDJCQUE0QixFQUFBLGtCQUFBLE1BQUEsb0JBWXNCLFFBQVEsR0FBRyxNQUFNLElBQUc7QUFLbkUsVUFBQSw2QkFBQSxrQkFBQSxNQUFBLHdCQUFBLEVBQUEsa0JBQUEsTUFBQSx3QkFBb0IsTUFBSztBQUl6QixVQUFBLGlDQUFBLGtCQUFBLE1BQUEsNEJBQUEsRUFBQSxrQkFBQSxNQUFBLDRCQUF5QyxVQUFTO0FBS2xELFVBQUEsMkJBQUEsa0JBQUEsTUFBQSxnQ0FBQSxFQUFBLGtCQUFBLE1BQUEsc0JBQWlCLEdBQUU7QUFLbkIsVUFBQSx1Q0FBQSxrQkFBQSxNQUFBLDBCQUFBLEVBQUEsa0JBQUEsTUFBQSxrQ0FBNkIsR0FBRTtBQThCdkMsU0FBQSxVQUFNLGtCQUFBLE1BQUEsc0NBQUEsRUFBcUIsRUFBRTtBQVc3QixTQUFBLFlBQXNCO0tB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
@@ -1,112 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { unsafeCSS } from "lit";
3
- import { property } from "lit/decorators.js";
4
- import { SbbElement } from "./core/base-elements.js";
5
- import { forceType } from "./core/decorators.js";
6
- import { boxSizingStyles } from "./core/styles.js";
7
- import { html as html$1 } from "lit/static-html.js";
8
- import { SbbSecondaryButtonStaticElement } from "./button.pure.js";
9
- import { i18nFileSelectorSubtitleLabel, i18nFileSelectorSubtitleLabelMultiple } from "./core/i18n.js";
10
- import "./icon.js";
11
- import { ref } from "lit/directives/ref.js";
12
- import { SbbFileSelectorCommonElementMixin, fileSelectorCommonStyle } from "./file-selector/common/file-selector-common.js";
13
- //#region src/elements/file-selector/file-selector-dropzone/file-selector-dropzone.scss?inline
14
- var file_selector_dropzone_default = ".sbb-file-selector__dropzone-area {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--sbb-spacing-responsive-s);\n background-color: var(--sbb-file-selector-background-color);\n border: var(--sbb-border-width-1x) dashed var(--sbb-file-selector-border-color);\n border-radius: var(--sbb-border-radius-4x);\n transition-duration: var(--sbb-file-selector-transition-duration);\n transition-timing-function: var(--sbb-file-selector-transition-easing-function);\n transition-property: background-color, border-color;\n}\n\n.sbb-file-selector__dropzone-area--icon {\n color: var(--sbb-file-selector-color);\n line-height: 0;\n}\n\n.sbb-file-selector__dropzone-area--title {\n font-weight: bold;\n --sbb-title-font-size: var(--sbb-title-font-size-level-6-lean, var(--sbb-heading-font-size-6));\n --sbb-title-line-height: var(--sbb-typo-line-height-text);\n margin-block: var(--sbb-title-margin-block, 0);\n margin-inline: 0;\n font-family: var(--sbb-typo-font-family);\n font-weight: bold;\n font-size: var(--sbb-title-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-heading);\n line-height: var(--sbb-title-line-height, var(--sbb-typo-line-height-heading));\n text-align: center;\n color: var(--sbb-file-selector-color);\n}\n\n.sbb-file-selector__dropzone-area--subtitle {\n --sbb-text-font-size: var(--sbb-text-font-size-xs);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n text-align: center;\n color: var(--sbb-file-selector-subtitle-color);\n margin-block-end: var(--sbb-spacing-fixed-4x);\n}";
15
- //#endregion
16
- //#region src/elements/file-selector/file-selector-dropzone/file-selector-dropzone.component.ts
17
- SbbSecondaryButtonStaticElement.define();
18
- /**
19
- * It allows to select one or more file from storage devices via button click or drag and drop, and display them.
20
- *
21
- * @slot error - Use this to provide a `sbb-error` to show an error message.
22
- */
23
- var SbbFileSelectorDropzoneElement = (() => {
24
- let _classSuper = SbbFileSelectorCommonElementMixin(SbbElement);
25
- let _titleContent_decorators;
26
- let _titleContent_initializers = [];
27
- let _titleContent_extraInitializers = [];
28
- return class SbbFileSelectorDropzoneElement extends _classSuper {
29
- static {
30
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
31
- _titleContent_decorators = [forceType(), property({ attribute: "title-content" })];
32
- __esDecorate(this, null, _titleContent_decorators, {
33
- kind: "accessor",
34
- name: "titleContent",
35
- static: false,
36
- private: false,
37
- access: {
38
- has: (obj) => "titleContent" in obj,
39
- get: (obj) => obj.titleContent,
40
- set: (obj, value) => {
41
- obj.titleContent = value;
42
- }
43
- },
44
- metadata: _metadata
45
- }, _titleContent_initializers, _titleContent_extraInitializers);
46
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
47
- enumerable: true,
48
- configurable: true,
49
- writable: true,
50
- value: _metadata
51
- });
52
- }
53
- static {
54
- this.elementName = "sbb-file-selector-dropzone";
55
- }
56
- static {
57
- this.styles = [
58
- boxSizingStyles,
59
- fileSelectorCommonStyle,
60
- unsafeCSS(file_selector_dropzone_default)
61
- ];
62
- }
63
- static {
64
- this.events = { filechanged: "filechanged" };
65
- }
66
- #titleContent_accessor_storage = __runInitializers(this, _titleContent_initializers, "");
67
- /** The title displayed in `dropzone` variant. */
68
- get titleContent() {
69
- return this.#titleContent_accessor_storage;
70
- }
71
- set titleContent(value) {
72
- this.#titleContent_accessor_storage = value;
73
- }
74
- renderTemplate(input) {
75
- return html$1`
76
- <label>
77
- <span class="sbb-file-selector__dropzone-area">
78
- <span class="sbb-file-selector__dropzone-area--icon">
79
- <sbb-icon
80
- name=${this.size === "m" ? "folder-open-medium" : "folder-open-small"}
81
- ></sbb-icon>
82
- </span>
83
- <span class="sbb-file-selector__dropzone-area--title">${this.titleContent}</span>
84
- <span class="sbb-file-selector__dropzone-area--subtitle">
85
- ${this.multiple ? i18nFileSelectorSubtitleLabelMultiple[this.language.current] : i18nFileSelectorSubtitleLabel[this.language.current]}
86
- </span>
87
- <span class="sbb-file-selector__dropzone-area--button">
88
- <sbb-secondary-button-static
89
- size=${this.size}
90
- ?disabled=${this.disabled || this.formDisabled}
91
- ${ref((el) => {
92
- this.loadButton = el;
93
- })}
94
- >
95
- ${this.getButtonLabel()}
96
- </sbb-secondary-button-static>
97
- </span>
98
- </span>
99
- ${input}
100
- </label>
101
- `;
102
- }
103
- constructor() {
104
- super(...arguments);
105
- __runInitializers(this, _titleContent_extraInitializers);
106
- }
107
- };
108
- })();
109
- //#endregion
110
- export { SbbFileSelectorDropzoneElement as t };
111
-
112
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3Rvci1kcm9wem9uZS5jb21wb25lbnQteGZrUXQwVlguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ZpbGUtc2VsZWN0b3IvZmlsZS1zZWxlY3Rvci1kcm9wem9uZS9maWxlLXNlbGVjdG9yLWRyb3B6b25lLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ZpbGUtc2VsZWN0b3IvZmlsZS1zZWxlY3Rvci1kcm9wem9uZS9maWxlLXNlbGVjdG9yLWRyb3B6b25lLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG4uc2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWEge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXMpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItZmlsZS1zZWxlY3Rvci1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgYm9yZGVyOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTF4KSBkYXNoZWQgdmFyKC0tc2JiLWZpbGUtc2VsZWN0b3ItYm9yZGVyLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLWJvcmRlci1yYWRpdXMtNHgpO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItZmlsZS1zZWxlY3Rvci10cmFuc2l0aW9uLWR1cmF0aW9uKTtcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXNiYi1maWxlLXNlbGVjdG9yLXRyYW5zaXRpb24tZWFzaW5nLWZ1bmN0aW9uKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyLWNvbG9yO1xufVxuXG4uc2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWEtLWljb24ge1xuICBjb2xvcjogdmFyKC0tc2JiLWZpbGUtc2VsZWN0b3ItY29sb3IpO1xuICBsaW5lLWhlaWdodDogMDtcbn1cblxuLnNiYi1maWxlLXNlbGVjdG9yX19kcm9wem9uZS1hcmVhLS10aXRsZSB7XG4gIEBpbmNsdWRlIHNiYi50ZXh0LS1ib2xkO1xuICBAaW5jbHVkZSBzYmIudGl0bGUtNigkZXhjbHVkZS1zcGFjaW5nOiB0cnVlKTtcblxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1zYmItZmlsZS1zZWxlY3Rvci1jb2xvcik7XG59XG5cbi5zYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYS0tc3VidGl0bGUge1xuICBAaW5jbHVkZSBzYmIudGV4dC14cy0tcmVndWxhcjtcblxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1zYmItZmlsZS1zZWxlY3Rvci1zdWJ0aXRsZS1jb2xvcik7XG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTR4KTtcbn1cbiIsImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIHR5cGUgVGVtcGxhdGVSZXN1bHQsIHVuc2FmZUNTUyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0L3N0YXRpYy1odG1sLmpzJztcblxuaW1wb3J0IHsgU2JiU2Vjb25kYXJ5QnV0dG9uU3RhdGljRWxlbWVudCB9IGZyb20gJy4uLy4uL2J1dHRvbi5wdXJlLnRzJztcbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLnRzJztcbmltcG9ydCB7XG4gIGkxOG5GaWxlU2VsZWN0b3JTdWJ0aXRsZUxhYmVsLFxuICBpMThuRmlsZVNlbGVjdG9yU3VidGl0bGVMYWJlbE11bHRpcGxlLFxufSBmcm9tICcuLi8uLi9jb3JlL2kxOG4udHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHtcbiAgZmlsZVNlbGVjdG9yQ29tbW9uU3R5bGUsXG4gIFNiYkZpbGVTZWxlY3RvckNvbW1vbkVsZW1lbnRNaXhpbixcbn0gZnJvbSAnLi4vY29tbW9uL2ZpbGUtc2VsZWN0b3ItY29tbW9uLnRzJztcblxuaW1wb3J0ICcuLi8uLi9pY29uLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZmlsZS1zZWxlY3Rvci1kcm9wem9uZS5zY3NzP2lubGluZSc7XG5cbi8vIFRPRE8oYnJlYWtpbmctY2hhbmdlKTogUmVtb3ZlIGNhbGwgdG8gZGVmaW5lLlxuU2JiU2Vjb25kYXJ5QnV0dG9uU3RhdGljRWxlbWVudC5kZWZpbmUoKTtcblxuLyoqXG4gKiBJdCBhbGxvd3MgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGZpbGUgZnJvbSBzdG9yYWdlIGRldmljZXMgdmlhIGJ1dHRvbiBjbGljayBvciBkcmFnIGFuZCBkcm9wLCBhbmQgZGlzcGxheSB0aGVtLlxuICpcbiAqIEBzbG90IGVycm9yIC0gVXNlIHRoaXMgdG8gcHJvdmlkZSBhIGBzYmItZXJyb3JgIHRvIHNob3cgYW4gZXJyb3IgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkZpbGVTZWxlY3RvckRyb3B6b25lRWxlbWVudCBleHRlbmRzIFNiYkZpbGVTZWxlY3RvckNvbW1vbkVsZW1lbnRNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItZmlsZS1zZWxlY3Rvci1kcm9wem9uZSc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtcbiAgICBib3hTaXppbmdTdHlsZXMsXG4gICAgZmlsZVNlbGVjdG9yQ29tbW9uU3R5bGUsXG4gICAgdW5zYWZlQ1NTKHN0eWxlKSxcbiAgXTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZmlsZWNoYW5nZWQ6ICdmaWxlY2hhbmdlZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFRoZSB0aXRsZSBkaXNwbGF5ZWQgaW4gYGRyb3B6b25lYCB2YXJpYW50LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAndGl0bGUtY29udGVudCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIHRpdGxlQ29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKGlucHV0OiBUZW1wbGF0ZVJlc3VsdCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxsYWJlbD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWEtLWljb25cIj5cbiAgICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgICBuYW1lPSR7dGhpcy5zaXplID09PSAnbScgPyAnZm9sZGVyLW9wZW4tbWVkaXVtJyA6ICdmb2xkZXItb3Blbi1zbWFsbCd9XG4gICAgICAgICAgICA+PC9zYmItaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYS0tdGl0bGVcIj4ke3RoaXMudGl0bGVDb250ZW50fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19kcm9wem9uZS1hcmVhLS1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgID8gaTE4bkZpbGVTZWxlY3RvclN1YnRpdGxlTGFiZWxNdWx0aXBsZVt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgICAgICAgIDogaTE4bkZpbGVTZWxlY3RvclN1YnRpdGxlTGFiZWxbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYS0tYnV0dG9uXCI+XG4gICAgICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b24tc3RhdGljXG4gICAgICAgICAgICAgIHNpemU9JHt0aGlzLnNpemV9XG4gICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWR9XG4gICAgICAgICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdXR0b24gPSBlbCBhcyBTYmJTZWNvbmRhcnlCdXR0b25TdGF0aWNFbGVtZW50O1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHt0aGlzLmdldEJ1dHRvbkxhYmVsKCl9XG4gICAgICAgICAgICA8L3NiYi1zZWNvbmRhcnktYnV0dG9uLXN0YXRpYz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgJHtpbnB1dH1cbiAgICAgIDwvbGFiZWw+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWZpbGUtc2VsZWN0b3ItZHJvcHpvbmUnOiBTYmJGaWxlU2VsZWN0b3JEcm9wem9uZUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQ3VCQSxnQ0FBZ0MsUUFBUTs7Ozs7O0lBTzNCLHdDQUE4QjttQkFBUyxrQ0FBa0MsV0FBVzs7OztjQUFwRix1Q0FBdUMsWUFBNkM7OzsrQkFZOUYsV0FBVyxFQUNYLFNBQVMsRUFBRSxXQUFXLGlCQUFpQixDQUFDLENBQUE7QUFDekMsZ0JBQUEsTUFBQSxNQUFBLDBCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsa0JBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBWSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVosZUFBWTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLDRCQUFBLGdDQUFBOzs7Ozs7Ozs7QUFiSSxRQUFBLGNBQXNCOzs7QUFDL0IsUUFBQSxTQUF5QjtJQUM5QztJQUNBO0lBQ0EsVUFBVSwrQkFBQTtJQUNYOzs7QUFDc0IsUUFBQSxTQUFTLEVBQzlCLGFBQWEsZUFDTDs7RUFLVixpQ0FBQSxrQkFBQSxNQUFBLDRCQUF1QyxHQUFFOztFQUF6QyxJQUFnQixlQUFZO0FBQUEsVUFBQSxNQUFBOztFQUE1QixJQUFnQixhQUFZLE9BQUE7QUFBQSxTQUFBLGdDQUFBOztFQUVULGVBQWUsT0FBcUI7QUFDckQsVUFBTyxNQUFJOzs7OztxQkFLTSxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsb0JBQUE7OztrRUFHRSxLQUFLLGFBQVk7O2NBRXJFLEtBQUssV0FDSCxzQ0FBc0MsS0FBSyxTQUFTLFdBQ3BELDhCQUE4QixLQUFLLFNBQVMsU0FBQTs7OztxQkFJdkMsS0FBSyxLQUFBOzBCQUNBLEtBQUssWUFBWSxLQUFLLGFBQUE7Z0JBQ2hDLEtBQUssT0FBc0I7QUFDM0IsU0FBSyxhQUFhO0tBQ2xCLENBQUE7O2dCQUVBLEtBQUssZ0JBQWdCLENBQUE7Ozs7VUFJM0IsTUFBQSJ9