@sbb-esta/lyne-elements-dev 4.13.0-dev.1780293313 → 4.13.0-dev.1780334133
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/core/mixins/form-associated-input-mixin.js +5 -0
- package/custom-elements.json +2302 -2212
- package/date-input/date-input.component.js +1 -1
- package/{date-input.component-e3c3CgE1.js → date-input.component-kYGldhkg.js} +8 -6
- package/date-input.js +1 -1
- package/date-input.pure.js +1 -1
- package/development/core/mixins/form-associated-input-mixin.d.ts +1 -0
- package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-input-mixin.js +6 -1
- package/development/date-input/date-input.component.d.ts.map +1 -1
- package/development/date-input/date-input.component.js +1 -1
- package/development/date-input.component-BBdsFSUJ.js +307 -0
- package/development/date-input.js +1 -1
- package/development/date-input.pure.js +1 -1
- package/development/time-input/time-input.component.d.ts +3 -1
- package/development/time-input/time-input.component.d.ts.map +1 -1
- package/development/time-input/time-input.component.js +1 -1
- package/development/time-input.component-BgsJfVZ1.js +198 -0
- package/development/time-input.js +1 -1
- package/development/time-input.pure.js +1 -1
- package/package.json +2 -2
- package/time-input/time-input.component.js +1 -1
- package/{time-input.component-I1it887_.js → time-input.component-DBXdyVPm.js} +15 -8
- package/time-input.js +1 -1
- package/time-input.pure.js +1 -1
- package/development/date-input.component-aFqmx0uy.js +0 -307
- package/development/time-input.component-BZ-9meEb.js +0 -191
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { isServer, unsafeCSS } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbElement } from "./core/base-elements.js";
|
|
5
|
-
import { plainDate, plainDateConverter } from "./core/decorators.js";
|
|
6
|
-
import { SbbFormAssociatedInputMixin } from "./core/mixins.js";
|
|
7
|
-
import { i18nDateInvalid, i18nDateMax, i18nDateMin, i18nDatePickerPlaceholder } from "./core/i18n.js";
|
|
8
|
-
import { readConfig } from "./core/config.js";
|
|
9
|
-
import { defaultDateAdapter } from "./core/datetime.js";
|
|
10
|
-
//#region src/elements/date-input/date-input.scss?inline
|
|
11
|
-
var date_input_default = ":host {\n display: inline-flex;\n min-width: 9.375rem;\n max-width: 100%;\n cursor: text;\n align-items: center;\n font-weight: normal;\n}\n@media (forced-colors: active) {\n :host {\n color: FieldText;\n }\n}\n\n:host(:disabled) {\n cursor: var(--sbb-cursor-default);\n}\n\n:host(:focus) {\n text-overflow: initial !important;\n}\n\n:host(:empty)::after {\n content: attr(placeholder);\n color: var(--sbb-color-5);\n -webkit-text-fill-color: var(--sbb-color-5);\n opacity: 1;\n}\n@media (forced-colors: active) {\n :host(:empty)::after {\n color: GrayText;\n }\n}";
|
|
12
|
-
//#endregion
|
|
13
|
-
//#region src/elements/date-input/date-input.component.ts
|
|
14
|
-
Object.assign(ValidityState.prototype, { get sbbDateFilter() {
|
|
15
|
-
return false;
|
|
16
|
-
} });
|
|
17
|
-
/**
|
|
18
|
-
* Custom input for a date.
|
|
19
|
-
*/
|
|
20
|
-
var SbbDateInputElement = (() => {
|
|
21
|
-
let _classSuper = SbbFormAssociatedInputMixin(SbbElement);
|
|
22
|
-
let _instanceExtraInitializers = [];
|
|
23
|
-
let _set_valueAsDate_decorators;
|
|
24
|
-
let _min_decorators;
|
|
25
|
-
let _min_initializers = [];
|
|
26
|
-
let _min_extraInitializers = [];
|
|
27
|
-
let _max_decorators;
|
|
28
|
-
let _max_initializers = [];
|
|
29
|
-
let _max_extraInitializers = [];
|
|
30
|
-
let _set_dateFilter_decorators;
|
|
31
|
-
let _weekdayStyle_decorators;
|
|
32
|
-
let _weekdayStyle_initializers = [];
|
|
33
|
-
let _weekdayStyle_extraInitializers = [];
|
|
34
|
-
return class SbbDateInputElement extends _classSuper {
|
|
35
|
-
static {
|
|
36
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
37
|
-
_set_valueAsDate_decorators = [property({ attribute: false })];
|
|
38
|
-
_min_decorators = [plainDate(), property({
|
|
39
|
-
converter: plainDateConverter,
|
|
40
|
-
reflect: true
|
|
41
|
-
})];
|
|
42
|
-
_max_decorators = [plainDate(), property({
|
|
43
|
-
converter: plainDateConverter,
|
|
44
|
-
reflect: true
|
|
45
|
-
})];
|
|
46
|
-
_set_dateFilter_decorators = [property({ attribute: false })];
|
|
47
|
-
_weekdayStyle_decorators = [property({ attribute: "weekday-style" })];
|
|
48
|
-
__esDecorate(this, null, _set_valueAsDate_decorators, {
|
|
49
|
-
kind: "setter",
|
|
50
|
-
name: "valueAsDate",
|
|
51
|
-
static: false,
|
|
52
|
-
private: false,
|
|
53
|
-
access: {
|
|
54
|
-
has: (obj) => "valueAsDate" in obj,
|
|
55
|
-
set: (obj, value) => {
|
|
56
|
-
obj.valueAsDate = value;
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
metadata: _metadata
|
|
60
|
-
}, null, _instanceExtraInitializers);
|
|
61
|
-
__esDecorate(this, null, _min_decorators, {
|
|
62
|
-
kind: "accessor",
|
|
63
|
-
name: "min",
|
|
64
|
-
static: false,
|
|
65
|
-
private: false,
|
|
66
|
-
access: {
|
|
67
|
-
has: (obj) => "min" in obj,
|
|
68
|
-
get: (obj) => obj.min,
|
|
69
|
-
set: (obj, value) => {
|
|
70
|
-
obj.min = value;
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
metadata: _metadata
|
|
74
|
-
}, _min_initializers, _min_extraInitializers);
|
|
75
|
-
__esDecorate(this, null, _max_decorators, {
|
|
76
|
-
kind: "accessor",
|
|
77
|
-
name: "max",
|
|
78
|
-
static: false,
|
|
79
|
-
private: false,
|
|
80
|
-
access: {
|
|
81
|
-
has: (obj) => "max" in obj,
|
|
82
|
-
get: (obj) => obj.max,
|
|
83
|
-
set: (obj, value) => {
|
|
84
|
-
obj.max = value;
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
metadata: _metadata
|
|
88
|
-
}, _max_initializers, _max_extraInitializers);
|
|
89
|
-
__esDecorate(this, null, _set_dateFilter_decorators, {
|
|
90
|
-
kind: "setter",
|
|
91
|
-
name: "dateFilter",
|
|
92
|
-
static: false,
|
|
93
|
-
private: false,
|
|
94
|
-
access: {
|
|
95
|
-
has: (obj) => "dateFilter" in obj,
|
|
96
|
-
set: (obj, value) => {
|
|
97
|
-
obj.dateFilter = value;
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
metadata: _metadata
|
|
101
|
-
}, null, _instanceExtraInitializers);
|
|
102
|
-
__esDecorate(this, null, _weekdayStyle_decorators, {
|
|
103
|
-
kind: "accessor",
|
|
104
|
-
name: "weekdayStyle",
|
|
105
|
-
static: false,
|
|
106
|
-
private: false,
|
|
107
|
-
access: {
|
|
108
|
-
has: (obj) => "weekdayStyle" in obj,
|
|
109
|
-
get: (obj) => obj.weekdayStyle,
|
|
110
|
-
set: (obj, value) => {
|
|
111
|
-
obj.weekdayStyle = value;
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
metadata: _metadata
|
|
115
|
-
}, _weekdayStyle_initializers, _weekdayStyle_extraInitializers);
|
|
116
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
117
|
-
enumerable: true,
|
|
118
|
-
configurable: true,
|
|
119
|
-
writable: true,
|
|
120
|
-
value: _metadata
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
static {
|
|
124
|
-
this.elementName = "sbb-date-input";
|
|
125
|
-
}
|
|
126
|
-
static {
|
|
127
|
-
this.styles = unsafeCSS(date_input_default);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* The value of the date input. Reflects the current text value
|
|
131
|
-
* of this input.
|
|
132
|
-
* The attribute `value` Accepts ISO8601 formatted values, which will be
|
|
133
|
-
* formatted according to the current locale.
|
|
134
|
-
*/
|
|
135
|
-
set value(value) {
|
|
136
|
-
this._tryParseValue(value);
|
|
137
|
-
if (!isServer && !this.matches(":focus") && this.valueAsDate !== null) value = this._formatDate();
|
|
138
|
-
super.value = value;
|
|
139
|
-
}
|
|
140
|
-
get value() {
|
|
141
|
-
return super.value ?? "";
|
|
142
|
-
}
|
|
143
|
-
/** Formats the current input's value as date. */
|
|
144
|
-
set valueAsDate(value) {
|
|
145
|
-
value = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
146
|
-
if (!value) {
|
|
147
|
-
this._valueAsDate = null;
|
|
148
|
-
this._valueCache = ["", null];
|
|
149
|
-
this.value = "";
|
|
150
|
-
} else if (!this._dateAdapter.isDateInstance(this._valueAsDate) || this._dateAdapter.compareDate(this._valueAsDate, value) !== 0) {
|
|
151
|
-
this._valueAsDate = this._dateAdapter.createDate(this._dateAdapter.getYear(value), this._dateAdapter.getMonth(value), this._dateAdapter.getDate(value));
|
|
152
|
-
const stringValue = this._formatDate();
|
|
153
|
-
this._valueCache = [stringValue, this._valueAsDate];
|
|
154
|
-
this.value = stringValue;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
get valueAsDate() {
|
|
158
|
-
return this._valueAsDate ? this._dateAdapter.clone(this._valueAsDate) : null;
|
|
159
|
-
}
|
|
160
|
-
#min_accessor_storage;
|
|
161
|
-
/**
|
|
162
|
-
* The minimum valid date. Accepts a date object or null.
|
|
163
|
-
* Accepts an ISO8601 formatted string (e.g. 2024-12-24) as attribute.
|
|
164
|
-
*/
|
|
165
|
-
get min() {
|
|
166
|
-
return this.#min_accessor_storage;
|
|
167
|
-
}
|
|
168
|
-
set min(value) {
|
|
169
|
-
this.#min_accessor_storage = value;
|
|
170
|
-
}
|
|
171
|
-
#max_accessor_storage;
|
|
172
|
-
/**
|
|
173
|
-
* The maximum valid date. Accepts a date object or null.
|
|
174
|
-
* Accepts an ISO8601 formatted string (e.g. 2024-12-24) as attribute.
|
|
175
|
-
*/
|
|
176
|
-
get max() {
|
|
177
|
-
return this.#max_accessor_storage;
|
|
178
|
-
}
|
|
179
|
-
set max(value) {
|
|
180
|
-
this.#max_accessor_storage = value;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* A function used to filter out dates.
|
|
184
|
-
* It is strongly recommended to use min and max dates alongside
|
|
185
|
-
* this filter.
|
|
186
|
-
*/
|
|
187
|
-
set dateFilter(value) {
|
|
188
|
-
this._dateFilter = value;
|
|
189
|
-
}
|
|
190
|
-
get dateFilter() {
|
|
191
|
-
return this._dateFilter;
|
|
192
|
-
}
|
|
193
|
-
#weekdayStyle_accessor_storage;
|
|
194
|
-
/**
|
|
195
|
-
* How to format the displayed date.
|
|
196
|
-
* `short`: Two letter abbreviation of the week day (e.g. Fr).
|
|
197
|
-
* `none`: The weekday is not displayed.
|
|
198
|
-
*/
|
|
199
|
-
get weekdayStyle() {
|
|
200
|
-
return this.#weekdayStyle_accessor_storage;
|
|
201
|
-
}
|
|
202
|
-
set weekdayStyle(value) {
|
|
203
|
-
this.#weekdayStyle_accessor_storage = value;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Gets the associated datepicker, if any.
|
|
207
|
-
* The sbb-date-input and the sbb-datepicker are assumed to be in the same parent container.
|
|
208
|
-
*/
|
|
209
|
-
get datepicker() {
|
|
210
|
-
return this.parentElement.querySelector("sbb-datepicker");
|
|
211
|
-
}
|
|
212
|
-
constructor() {
|
|
213
|
-
super();
|
|
214
|
-
this._valueAsDate = __runInitializers(this, _instanceExtraInitializers);
|
|
215
|
-
this.#min_accessor_storage = __runInitializers(this, _min_initializers, null);
|
|
216
|
-
this.#max_accessor_storage = (__runInitializers(this, _min_extraInitializers), __runInitializers(this, _max_initializers, null));
|
|
217
|
-
this.#weekdayStyle_accessor_storage = (__runInitializers(this, _max_extraInitializers), __runInitializers(this, _weekdayStyle_initializers, "short"));
|
|
218
|
-
/**
|
|
219
|
-
* Stores the last string and parsed date object value to prevent repeated
|
|
220
|
-
* parsing of the string value.
|
|
221
|
-
*/
|
|
222
|
-
this._valueCache = __runInitializers(this, _weekdayStyle_extraInitializers);
|
|
223
|
-
this._dateAdapter = readConfig().datetime?.dateAdapter ?? defaultDateAdapter;
|
|
224
|
-
this._placeholderMutable = false;
|
|
225
|
-
this._dateFilter = () => true;
|
|
226
|
-
this.addEventListener?.("change", () => this._updateValueDateFormat(), { capture: true });
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Attempts to resolve the associated date input with the given element.
|
|
230
|
-
*/
|
|
231
|
-
static resolveAssociation(host) {
|
|
232
|
-
if (host.hasAttribute("input") || host.input) return;
|
|
233
|
-
const input = host.closest("sbb-form-field")?.querySelector("sbb-date-input");
|
|
234
|
-
if (input) host.input = input;
|
|
235
|
-
}
|
|
236
|
-
connectedCallback() {
|
|
237
|
-
super.connectedCallback();
|
|
238
|
-
if (!this.placeholder) {
|
|
239
|
-
this._placeholderMutable = true;
|
|
240
|
-
this.placeholder = i18nDatePickerPlaceholder[this.language.current];
|
|
241
|
-
}
|
|
242
|
-
for (const child of Array.from(this.closest("sbb-form-field")?.children ?? [])) {
|
|
243
|
-
customElements.upgrade?.(child);
|
|
244
|
-
if (child.constructor.sbbDateInputAssociated && !child.hasAttribute("input") && !child.input) child.input = this;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
requestUpdate(name, oldValue, options) {
|
|
248
|
-
super.requestUpdate(name, oldValue, options);
|
|
249
|
-
if (this.hasUpdated && !name) {
|
|
250
|
-
this._updateValueDateFormat();
|
|
251
|
-
if (this._placeholderMutable) this.placeholder = i18nDatePickerPlaceholder[this.language.current];
|
|
252
|
-
} else if (name === "weekdayStyle") this._updateValueDateFormat();
|
|
253
|
-
if (this.isConnected)
|
|
254
|
-
/** @internal */
|
|
255
|
-
this.dispatchEvent(new Event("ɵchange"));
|
|
256
|
-
}
|
|
257
|
-
updateFormValue() {
|
|
258
|
-
this._tryParseValue();
|
|
259
|
-
const formValue = this.valueAsDate !== null ? this._dateAdapter.toIso8601(this.valueAsDate) : null;
|
|
260
|
-
this.internals.setFormValue(formValue, this.value);
|
|
261
|
-
}
|
|
262
|
-
_tryParseValue(value = this.value) {
|
|
263
|
-
if (this._valueCache?.[0] !== value) {
|
|
264
|
-
this._valueAsDate = this._dateAdapter.parse(value);
|
|
265
|
-
this._valueCache = [value, this._valueAsDate];
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
_updateValueDateFormat() {
|
|
269
|
-
if (this.valueAsDate) {
|
|
270
|
-
const formattedDate = this._formatDate();
|
|
271
|
-
if (this.value !== formattedDate) super.value = formattedDate;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
_formatDate() {
|
|
275
|
-
return this._dateAdapter.format(this.valueAsDate, { weekdayStyle: this.weekdayStyle });
|
|
276
|
-
}
|
|
277
|
-
shouldValidate(name) {
|
|
278
|
-
return super.shouldValidate(name) || [
|
|
279
|
-
"valueAsDate",
|
|
280
|
-
"min",
|
|
281
|
-
"max",
|
|
282
|
-
"dateFilter"
|
|
283
|
-
].includes(name);
|
|
284
|
-
}
|
|
285
|
-
validate() {
|
|
286
|
-
super.validate();
|
|
287
|
-
if (!this.value) this._removeValidityErrors();
|
|
288
|
-
else if (!this._dateAdapter.isValid(this.valueAsDate)) this.setValidityFlag("badInput", i18nDateInvalid[this.language.current]);
|
|
289
|
-
else if (this._dateAdapter.isValid(this.min) && this._dateAdapter.compareDate(this.min, this.valueAsDate) > 0) this.setValidityFlag("rangeUnderflow", i18nDateMin(this._dateAdapter.format(this.min, { weekdayStyle: "none" }))[this.language.current]);
|
|
290
|
-
else if (this._dateAdapter.isValid(this.max) && this._dateAdapter.compareDate(this.valueAsDate, this.max) > 0) this.setValidityFlag("rangeOverflow", i18nDateMax(this._dateAdapter.format(this.max, { weekdayStyle: "none" }))[this.language.current]);
|
|
291
|
-
else if (this.dateFilter && !this.dateFilter(this.valueAsDate)) this.setValidityFlag("sbbDateFilter", i18nDateInvalid[this.language.current]);
|
|
292
|
-
else this._removeValidityErrors();
|
|
293
|
-
}
|
|
294
|
-
_removeValidityErrors() {
|
|
295
|
-
[
|
|
296
|
-
"badInput",
|
|
297
|
-
"rangeUnderflow",
|
|
298
|
-
"rangeOverflow",
|
|
299
|
-
"sbbDateFilter"
|
|
300
|
-
].forEach((f) => this.removeValidityFlag(f));
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
})();
|
|
304
|
-
//#endregion
|
|
305
|
-
export { SbbDateInputElement as t };
|
|
306
|
-
|
|
307
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQtYUZxbXgwdXkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG5cbiAgLy8gV2l0aCBzYmItZm9ybS1maWVsZFt3aWR0aD1cImNvbGxhcHNlZFwiXSwgdGhlIGRlZmF1bHQgbWluIHdpZHRoIG9mIGFcbiAgLy8gYW4gaW5saW5lIGVsZW1lbnQgaXMgYmFzaWNhbGx5IG5vdGhpbmcgKGV4Y2VwdCBwb3RlbnRpYWxseSB0aGUgcGxhY2Vob2xkZXIpLlxuICAvLyBEdWUgdG8gdGhpcywgd2Ugc2V0IGEgbWluaW11bSB3aWR0aCBvZiB0aGUgZGF0ZSBpbnB1dCBlbGVtZW50LlxuICBtaW4td2lkdGg6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNTApfTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBjdXJzb3I6IHRleHQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGNvbG9yOiBGaWVsZFRleHQ7XG4gIH1cbn1cblxuOmhvc3QoOmRpc2FibGVkKSB7XG4gIGN1cnNvcjogdmFyKC0tc2JiLWN1cnNvci1kZWZhdWx0KTtcbn1cblxuOmhvc3QoOmZvY3VzKSB7XG4gIHRleHQtb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDtcbn1cblxuOmhvc3QoOmVtcHR5KTo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKHBsYWNlaG9sZGVyKTtcbiAgQGluY2x1ZGUgc2JiLnBsYWNlaG9sZGVyO1xuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgY29sb3I6IEdyYXlUZXh0O1xuICB9XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBpc1NlcnZlciwgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uL2NvcmUvY29uZmlnLnRzJztcbmltcG9ydCB7IHR5cGUgRGF0ZUFkYXB0ZXIsIGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUudHMnO1xuaW1wb3J0IHsgcGxhaW5EYXRlLCBwbGFpbkRhdGVDb252ZXJ0ZXIgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHtcbiAgaTE4bkRhdGVJbnZhbGlkLFxuICBpMThuRGF0ZU1heCxcbiAgaTE4bkRhdGVNaW4sXG4gIGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXIsXG59IGZyb20gJy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQgeyBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gfSBmcm9tICcuLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJFbGVtZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGUtaW5wdXQuc2Nzcz9pbmxpbmUnO1xuXG4vLyBBcyBkb2N1bWVudGVkIGluIGZvcm0tYXNzb2NpYXRlZC1taXhpbi50cywgd2UgZXh0ZW5kIHRoZSBwcm90b3R5cGUgb2Zcbi8vIFZhbGlkaXR5U3RhdGUgd2l0aCBjdXN0b20gZXJyb3Igc3RhdGVzIGZvciB0aGUgZGF0ZSBpbnB1dC5cbk9iamVjdC5hc3NpZ24oVmFsaWRpdHlTdGF0ZS5wcm90b3R5cGUsIHtcbiAgZ2V0IHNiYkRhdGVGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxufSk7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBkYXRlIGlucHV0LlxuICogSW1wbGVtZW50aW5nIGNsYXNzZXMgbXVzdCBhbHNvIGhhdmUgYSBzdGF0aWMgcHJvcGVydHkgYHNiYkRhdGVJbnB1dEFzc29jaWF0ZWRgIHNldCB0byBgdHJ1ZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JiRGF0ZUlucHV0QXNzb2NpYXRlZDxUPiB7XG4gIGlucHV0OiBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBDdXN0b20gaW5wdXQgZm9yIGEgZGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkRhdGVJbnB1dEVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgU2JiRm9ybUFzc29jaWF0ZWRJbnB1dE1peGluKFNiYkVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1kYXRlLWlucHV0JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gdW5zYWZlQ1NTKHN0eWxlKTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBkYXRlIGlucHV0LiBSZWZsZWN0cyB0aGUgY3VycmVudCB0ZXh0IHZhbHVlXG4gICAqIG9mIHRoaXMgaW5wdXQuXG4gICAqIFRoZSBhdHRyaWJ1dGUgYHZhbHVlYCBBY2NlcHRzIElTTzg2MDEgZm9ybWF0dGVkIHZhbHVlcywgd2hpY2ggd2lsbCBiZVxuICAgKiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RyeVBhcnNlVmFsdWUodmFsdWUpO1xuICAgIC8vIEFzIGxvbmcgYXMgdGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3ZSBkZWxheSBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nXG4gICAgLy8gdGhlIHZhbHVlIHdpdGggdGhlIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIHBhcnNlZCBkYXRlLlxuICAgIGlmICghaXNTZXJ2ZXIgJiYgIXRoaXMubWF0Y2hlcygnOmZvY3VzJykgJiYgdGhpcy52YWx1ZUFzRGF0ZSAhPT0gbnVsbCkge1xuICAgICAgdmFsdWUgPSB0aGlzLl9mb3JtYXREYXRlKCk7XG4gICAgfVxuICAgIHN1cGVyLnZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXBlci52YWx1ZSA/PyAnJztcbiAgfVxuXG4gIC8qKiBGb3JtYXRzIHRoZSBjdXJyZW50IGlucHV0J3MgdmFsdWUgYXMgZGF0ZS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgc2V0IHZhbHVlQXNEYXRlKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWVBc0RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5fdmFsdWVDYWNoZSA9IFsnJywgbnVsbF07XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICF0aGlzLl9kYXRlQWRhcHRlci5pc0RhdGVJbnN0YW5jZSh0aGlzLl92YWx1ZUFzRGF0ZSkgfHxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMuX3ZhbHVlQXNEYXRlISwgdmFsdWUhKSAhPT0gMFxuICAgICkge1xuICAgICAgLy8gQWxpZ24gd2l0aCB0aGUgbmF0aXZlIGRhdGUgaW5wdXQsIGFzIGl0IGNvcGllcyB0aGUgdmFsdWUgb2ZcbiAgICAgIC8vIHRoZSBnaXZlbiBkYXRlIHdpdGhvdXQgdGhlIHRpbWUgYW5kIGRvZXMgbm90IHJldGFpbiB0aGVcbiAgICAgIC8vIG9yaWdpbmFsIGluc3RhbmNlLlxuICAgICAgdGhpcy5fdmFsdWVBc0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHZhbHVlKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHRoaXMuX2Zvcm1hdERhdGUoKTtcbiAgICAgIHRoaXMuX3ZhbHVlQ2FjaGUgPSBbc3RyaW5nVmFsdWUsIHRoaXMuX3ZhbHVlQXNEYXRlXTtcbiAgICAgIHRoaXMudmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZUFzRGF0ZSgpOiBUIHwgbnVsbCB7XG4gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHJldHVybiB0aGUgaW50ZXJuYWwgZGF0ZSBvYmplY3QgZGlyZWN0bHksIGFzIGl0XG4gICAgLy8gY291bGQgYmUgbWFuaXB1bGF0ZWQgb3V0c2lkZSBvZiB0aGlzIGNsYXNzLlxuICAgIHJldHVybiB0aGlzLl92YWx1ZUFzRGF0ZSA/IHRoaXMuX2RhdGVBZGFwdGVyLmNsb25lKHRoaXMuX3ZhbHVlQXNEYXRlKSA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWVBc0RhdGU/OiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsaWQgZGF0ZS4gQWNjZXB0cyBhIGRhdGUgb2JqZWN0IG9yIG51bGwuXG4gICAqIEFjY2VwdHMgYW4gSVNPODYwMSBmb3JtYXR0ZWQgc3RyaW5nIChlLmcuIDIwMjQtMTItMjQpIGFzIGF0dHJpYnV0ZS5cbiAgICovXG4gIEBwbGFpbkRhdGUoKVxuICBAcHJvcGVydHkoeyBjb252ZXJ0ZXI6IHBsYWluRGF0ZUNvbnZlcnRlciwgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbWluOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHZhbGlkIGRhdGUuIEFjY2VwdHMgYSBkYXRlIG9iamVjdCBvciBudWxsLlxuICAgKiBBY2NlcHRzIGFuIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiAyMDI0LTEyLTI0KSBhcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBAcGxhaW5EYXRlKClcbiAgQHByb3BlcnR5KHsgY29udmVydGVyOiBwbGFpbkRhdGVDb252ZXJ0ZXIsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG1heDogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIG91dCBkYXRlcy5cbiAgICogSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIG1pbiBhbmQgbWF4IGRhdGVzIGFsb25nc2lkZVxuICAgKiB0aGlzIGZpbHRlci5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCBkYXRlRmlsdGVyKHZhbHVlOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRlRmlsdGVyID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkYXRlRmlsdGVyKCk6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVGaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogSG93IHRvIGZvcm1hdCB0aGUgZGlzcGxheWVkIGRhdGUuXG4gICAqIGBzaG9ydGA6IFR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSB3ZWVrIGRheSAoZS5nLiBGcikuXG4gICAqIGBub25lYDogVGhlIHdlZWtkYXkgaXMgbm90IGRpc3BsYXllZC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3dlZWtkYXktc3R5bGUnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciB3ZWVrZGF5U3R5bGU6ICdzaG9ydCcgfCAnbm9uZScgPSAnc2hvcnQnO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIGxhc3Qgc3RyaW5nIGFuZCBwYXJzZWQgZGF0ZSBvYmplY3QgdmFsdWUgdG8gcHJldmVudCByZXBlYXRlZFxuICAgKiBwYXJzaW5nIG9mIHRoZSBzdHJpbmcgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIF92YWx1ZUNhY2hlPzogW3N0cmluZywgVCB8IG51bGxdO1xuICBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSByZWFkQ29uZmlnKCkuZGF0ZXRpbWU/LmRhdGVBZGFwdGVyID8/IGRlZmF1bHREYXRlQWRhcHRlcjtcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXJNdXRhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFzc29jaWF0ZWQgZGF0ZXBpY2tlciwgaWYgYW55LlxuICAgKiBUaGUgc2JiLWRhdGUtaW5wdXQgYW5kIHRoZSBzYmItZGF0ZXBpY2tlciBhcmUgYXNzdW1lZCB0byBiZSBpbiB0aGUgc2FtZSBwYXJlbnQgY29udGFpbmVyLlxuICAgKi9cbiAgcHVibGljIGdldCBkYXRlcGlja2VyKCk6IFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50RWxlbWVudCEucXVlcnlTZWxlY3RvcjxTYmJEYXRlcGlja2VyRWxlbWVudDxUPj4oJ3NiYi1kYXRlcGlja2VyJyk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignY2hhbmdlJywgKCkgPT4gdGhpcy5fdXBkYXRlVmFsdWVEYXRlRm9ybWF0KCksIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIHRoZSBhc3NvY2lhdGVkIGRhdGUgaW5wdXQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVzb2x2ZUFzc29jaWF0aW9uPFQ+KGhvc3Q6IEhUTUxFbGVtZW50ICYgU2JiRGF0ZUlucHV0QXNzb2NpYXRlZDxUPik6IHZvaWQge1xuICAgIGlmIChob3N0Lmhhc0F0dHJpYnV0ZSgnaW5wdXQnKSB8fCBob3N0LmlucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBob3N0XG4gICAgICAuY2xvc2VzdCgnc2JiLWZvcm0tZmllbGQnKVxuICAgICAgPy5xdWVyeVNlbGVjdG9yPFNiYkRhdGVJbnB1dEVsZW1lbnQ8VD4+KCdzYmItZGF0ZS1pbnB1dCcpO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgaG9zdC5pbnB1dCA9IGlucHV0O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2RhdGVGaWx0ZXI6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWU7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlck11dGFibGUgPSB0cnVlO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXJbdGhpcy5sYW5ndWFnZS5jdXJyZW50XTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKHRoaXMuY2xvc2VzdCgnc2JiLWZvcm0tZmllbGQnKT8uY2hpbGRyZW4gPz8gW10pKSB7XG4gICAgICAvLyBFbGVtZW50cyBtdXN0IGJlIHVwZ3JhZGVkIGluIG9yZGVyIGZvciB0aGUgY29uc3RydWN0b3IgdG8gYmUgYWNjZXNzaWJsZS5cbiAgICAgIGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGU/LihjaGlsZCk7XG4gICAgICBpZiAoXG4gICAgICAgIChjaGlsZC5jb25zdHJ1Y3RvciBhcyB7IHNiYkRhdGVJbnB1dEFzc29jaWF0ZWQ/OiBib29sZWFuIH0pLnNiYkRhdGVJbnB1dEFzc29jaWF0ZWQgJiZcbiAgICAgICAgIWNoaWxkLmhhc0F0dHJpYnV0ZSgnaW5wdXQnKSAmJlxuICAgICAgICAhKGNoaWxkIGFzIFBhcnRpYWw8U2JiRGF0ZUlucHV0QXNzb2NpYXRlZDxUPj4pLmlucHV0XG4gICAgICApIHtcbiAgICAgICAgKGNoaWxkIGFzIFBhcnRpYWw8U2JiRGF0ZUlucHV0QXNzb2NpYXRlZDxUPj4pLmlucHV0ID0gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkICYmICFuYW1lKSB7XG4gICAgICB0aGlzLl91cGRhdGVWYWx1ZURhdGVGb3JtYXQoKTtcbiAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlck11dGFibGUpIHtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXJbdGhpcy5sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3ZWVrZGF5U3R5bGUnKSB7XG4gICAgICB0aGlzLl91cGRhdGVWYWx1ZURhdGVGb3JtYXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIC8vIFVzZWQgdG8gbm90aWZ5IGFzc29jaWF0ZWQgY29tcG9uZW50cyB0byB1cGRhdGUgc3RhdGVcbiAgICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ8m1Y2hhbmdlJykpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy5fdHJ5UGFyc2VWYWx1ZSgpO1xuICAgIGNvbnN0IGZvcm1WYWx1ZSA9XG4gICAgICB0aGlzLnZhbHVlQXNEYXRlICE9PSBudWxsID8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKHRoaXMudmFsdWVBc0RhdGUpIDogbnVsbDtcbiAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUoZm9ybVZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeVBhcnNlVmFsdWUodmFsdWUgPSB0aGlzLnZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlQ2FjaGU/LlswXSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUpO1xuICAgICAgdGhpcy5fdmFsdWVDYWNoZSA9IFt2YWx1ZSwgdGhpcy5fdmFsdWVBc0RhdGVdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZhbHVlRGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGUoKTtcbiAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgIHN1cGVyLnZhbHVlID0gZm9ybWF0dGVkRGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9mb3JtYXREYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmZvcm1hdCh0aGlzLnZhbHVlQXNEYXRlLCB7IHdlZWtkYXlTdHlsZTogdGhpcy53ZWVrZGF5U3R5bGUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHxcbiAgICAgIFsndmFsdWVBc0RhdGUnLCAnbWluJywgJ21heCcsICdkYXRlRmlsdGVyJ10uaW5jbHVkZXMobmFtZSBhcyBzdHJpbmcpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5fcmVtb3ZlVmFsaWRpdHlFcnJvcnMoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9kYXRlQWRhcHRlci5pc1ZhbGlkKHRoaXMudmFsdWVBc0RhdGUpKSB7XG4gICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZygnYmFkSW5wdXQnLCBpMThuRGF0ZUludmFsaWRbdGhpcy5sYW5ndWFnZS5jdXJyZW50XSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5taW4pICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1pbiwgdGhpcy52YWx1ZUFzRGF0ZSkgPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZyhcbiAgICAgICAgJ3JhbmdlVW5kZXJmbG93JyxcbiAgICAgICAgaTE4bkRhdGVNaW4odGhpcy5fZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMubWluLCB7IHdlZWtkYXlTdHlsZTogJ25vbmUnIH0pKVtcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlLmN1cnJlbnRcbiAgICAgICAgXSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5tYXgpICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLnZhbHVlQXNEYXRlLCB0aGlzLm1heCkgPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZyhcbiAgICAgICAgJ3JhbmdlT3ZlcmZsb3cnLFxuICAgICAgICBpMThuRGF0ZU1heCh0aGlzLl9kYXRlQWRhcHRlci5mb3JtYXQodGhpcy5tYXgsIHsgd2Vla2RheVN0eWxlOiAnbm9uZScgfSkpW1xuICAgICAgICAgIHRoaXMubGFuZ3VhZ2UuY3VycmVudFxuICAgICAgICBdLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZUZpbHRlciAmJiAhdGhpcy5kYXRlRmlsdGVyKHRoaXMudmFsdWVBc0RhdGUpKSB7XG4gICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZygnc2JiRGF0ZUZpbHRlcicsIGkxOG5EYXRlSW52YWxpZFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVtb3ZlVmFsaWRpdHlFcnJvcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVWYWxpZGl0eUVycm9ycygpOiB2b2lkIHtcbiAgICAoWydiYWRJbnB1dCcsICdyYW5nZVVuZGVyZmxvdycsICdyYW5nZU92ZXJmbG93JywgJ3NiYkRhdGVGaWx0ZXInXSBhcyBjb25zdCkuZm9yRWFjaCgoZikgPT5cbiAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKGYpLFxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlLWlucHV0JzogU2JiRGF0ZUlucHV0RWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBDdXN0b21WYWxpZGl0eVN0YXRlIHtcbiAgICBzYmJEYXRlRmlsdGVyOiBib29sZWFuO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUNvQkEsT0FBTyxPQUFPLGNBQWMsV0FBVyxFQUNyQyxJQUFJLGdCQUFhO0NBQ2YsT0FBTztBQUNULEVBQUEsQ0FDRDs7OztJQWFZLDZCQUFtQjttQkFBbUIsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Y0FBNUUsNEJBQXNDLFlBQXVDOzs7a0NBd0J2RixTQUFTLEVBQUUsV0FBVyxNQUFLLENBQUUsQ0FBQztzQkFtQzlCLFVBQVMsR0FDVCxTQUFTO0lBQUUsV0FBVztJQUFvQixTQUFTO0dBQUksQ0FBRSxDQUFDO3NCQU8xRCxVQUFTLEdBQ1QsU0FBUztJQUFFLFdBQVc7SUFBb0IsU0FBUztHQUFJLENBQUUsQ0FBQztpQ0FRMUQsU0FBUyxFQUFFLFdBQVcsTUFBSyxDQUFFLENBQUM7K0JBYTlCLFNBQVMsRUFBRSxXQUFXLGdCQUFlLENBQUUsQ0FBQztHQWhFekMsYUFBQSxNQUFBLE1BQUEsNkJBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSxpQkFBQTtLQUFBLE1BQUEsS0FBQSxVQUFBO01BQUEsSUFBVyxjQUFXO0tBQUE7SUFBQTtJQUFBLFVBQUE7R0FBQSxHQUFBLE1BQUEsMEJBQUE7R0FvQ3RCLGFBQUEsTUFBQSxNQUFBLGlCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsU0FBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFHLE1BQUEsS0FBQSxVQUFBO01BQUEsSUFB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
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { isServer, unsafeCSS } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbElement } from "./core/base-elements.js";
|
|
5
|
-
import { SbbFormAssociatedInputMixin } from "./core/mixins.js";
|
|
6
|
-
import { SbbLanguageController } from "./core/controllers.js";
|
|
7
|
-
import { i18nTimeInputChange, i18nTimeInvalid, i18nTimeMax, i18nTimeMaxLength } from "./core/i18n.js";
|
|
8
|
-
import { sbbLiveAnnouncer } from "./core/a11y.js";
|
|
9
|
-
//#region src/elements/time-input/time-input.scss?inline
|
|
10
|
-
var time_input_default = ":host {\n display: inline-flex;\n min-width: var(--sbb-time-input-max-width);\n max-width: var(--sbb-time-input-max-width);\n cursor: text;\n align-items: center;\n font-weight: normal;\n}\n@media (forced-colors: active) {\n :host {\n color: FieldText;\n }\n}\n\n:host(:disabled) {\n cursor: var(--sbb-cursor-default);\n}\n\n:host(:focus) {\n text-overflow: initial !important;\n}\n\n:host(:empty)::after {\n content: attr(placeholder);\n color: var(--sbb-color-5);\n -webkit-text-fill-color: var(--sbb-color-5);\n opacity: 1;\n}\n@media (forced-colors: active) {\n :host(:empty)::after {\n color: GrayText;\n }\n}";
|
|
11
|
-
//#endregion
|
|
12
|
-
//#region src/elements/time-input/time-input.component.ts
|
|
13
|
-
var REGEX_ALLOWED_CHARACTERS = /[0-9.:,\-;_hH]/;
|
|
14
|
-
var REGEX_DISALLOWED_CHARACTERS = /[^0-9.:,\-;_hH]/g;
|
|
15
|
-
var REGEX_GROUPS_WITHOUT_COLON = /^([0-9]{1,2})([0-9]{2})$/;
|
|
16
|
-
var REGEX_GROUPS_WITH_COLON = /^([0-9]{1,2})?[.:,\-;_hH]?([0-9]{1,2})?$/;
|
|
17
|
-
/**
|
|
18
|
-
* Custom input for a time.
|
|
19
|
-
*/
|
|
20
|
-
var SbbTimeInputElement = (() => {
|
|
21
|
-
let _classSuper = SbbFormAssociatedInputMixin(SbbElement);
|
|
22
|
-
let _instanceExtraInitializers = [];
|
|
23
|
-
let _set_valueAsDate_decorators;
|
|
24
|
-
return class SbbTimeInputElement extends _classSuper {
|
|
25
|
-
static {
|
|
26
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
27
|
-
_set_valueAsDate_decorators = [property({ attribute: false })];
|
|
28
|
-
__esDecorate(this, null, _set_valueAsDate_decorators, {
|
|
29
|
-
kind: "setter",
|
|
30
|
-
name: "valueAsDate",
|
|
31
|
-
static: false,
|
|
32
|
-
private: false,
|
|
33
|
-
access: {
|
|
34
|
-
has: (obj) => "valueAsDate" in obj,
|
|
35
|
-
set: (obj, value) => {
|
|
36
|
-
obj.valueAsDate = value;
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
metadata: _metadata
|
|
40
|
-
}, null, _instanceExtraInitializers);
|
|
41
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: true,
|
|
44
|
-
writable: true,
|
|
45
|
-
value: _metadata
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
static {
|
|
49
|
-
this.elementName = "sbb-time-input";
|
|
50
|
-
}
|
|
51
|
-
static {
|
|
52
|
-
this.styles = unsafeCSS(time_input_default);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* The value of the time input. Reflects the current text value
|
|
56
|
-
* of this input.
|
|
57
|
-
*/
|
|
58
|
-
set value(value) {
|
|
59
|
-
value = typeof value === "string" ? value.replace(REGEX_DISALLOWED_CHARACTERS, "").substring(0, 5) : "";
|
|
60
|
-
this._tryParseValue(value);
|
|
61
|
-
if (!isServer && !this.matches(":focus") && this.valueAsDate !== null) value = this._formatTime();
|
|
62
|
-
super.value = value;
|
|
63
|
-
}
|
|
64
|
-
get value() {
|
|
65
|
-
return super.value ?? "";
|
|
66
|
-
}
|
|
67
|
-
/** Formats the current input's value as date. */
|
|
68
|
-
set valueAsDate(date) {
|
|
69
|
-
if (date instanceof Date && !isNaN(date.valueOf())) {
|
|
70
|
-
this._valueAsTime = {
|
|
71
|
-
hours: date.getHours(),
|
|
72
|
-
minutes: date.getMinutes()
|
|
73
|
-
};
|
|
74
|
-
const formattedValue = this._formatTime();
|
|
75
|
-
if (this.value !== formattedValue) this.value = formattedValue;
|
|
76
|
-
} else {
|
|
77
|
-
this._valueAsTime = null;
|
|
78
|
-
this.value = "";
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
get valueAsDate() {
|
|
82
|
-
if (this._valueAsTime && this._isTimeValid(this._valueAsTime)) {
|
|
83
|
-
const date = /* @__PURE__ */ new Date(0);
|
|
84
|
-
date.setHours(this._valueAsTime.hours);
|
|
85
|
-
date.setMinutes(this._valueAsTime.minutes);
|
|
86
|
-
return date;
|
|
87
|
-
} else return null;
|
|
88
|
-
}
|
|
89
|
-
constructor() {
|
|
90
|
-
super();
|
|
91
|
-
this._valueAsTime = __runInitializers(this, _instanceExtraInitializers);
|
|
92
|
-
this._language = new SbbLanguageController(this);
|
|
93
|
-
this.addEventListener?.("change", () => this._updateValueDateFormat(), { capture: true });
|
|
94
|
-
this.addEventListener?.("change", () => sbbLiveAnnouncer.announce(i18nTimeInputChange(this.value)[this._language.current]));
|
|
95
|
-
this.addEventListener?.("keydown", (event) => this._preventCharInsert(event));
|
|
96
|
-
}
|
|
97
|
-
connectedCallback() {
|
|
98
|
-
super.connectedCallback();
|
|
99
|
-
this.inputMode ||= "numeric";
|
|
100
|
-
this.placeholder ||= "HH:MM";
|
|
101
|
-
}
|
|
102
|
-
disconnectedCallback() {
|
|
103
|
-
super.disconnectedCallback();
|
|
104
|
-
}
|
|
105
|
-
updateFormValue() {
|
|
106
|
-
this._tryParseValue();
|
|
107
|
-
const formValue = this.valueAsDate !== null ? this._formatTime() : null;
|
|
108
|
-
this.internals.setFormValue(formValue, this.value);
|
|
109
|
-
}
|
|
110
|
-
_tryParseValue(value = this.value) {
|
|
111
|
-
if (this._valueCache?.[0] !== value) {
|
|
112
|
-
this._valueAsTime = this._parseValue(value);
|
|
113
|
-
this._valueCache = [value, this._valueAsTime ?? null];
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/** Validate input against the defined RegExps. */
|
|
117
|
-
_parseValue(value) {
|
|
118
|
-
const trimmedValue = value?.trim();
|
|
119
|
-
if (!trimmedValue) return null;
|
|
120
|
-
const match = trimmedValue.match(REGEX_GROUPS_WITHOUT_COLON) ?? trimmedValue.match(REGEX_GROUPS_WITH_COLON);
|
|
121
|
-
if (match) return {
|
|
122
|
-
hours: +match[1] || 0,
|
|
123
|
-
minutes: +match[2] || 0
|
|
124
|
-
};
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
_updateValueDateFormat() {
|
|
128
|
-
if (this.valueAsDate) {
|
|
129
|
-
const formattedDate = this._formatTime();
|
|
130
|
-
if (this.value !== formattedDate) super.value = formattedDate;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
_formatTime() {
|
|
134
|
-
const value = this.valueAsDate;
|
|
135
|
-
if (!value) return "";
|
|
136
|
-
return `${String(value.getHours()).padStart(2, "0")}:${String(value.getMinutes()).padStart(2, "0")}`;
|
|
137
|
-
}
|
|
138
|
-
preparePastedText(text) {
|
|
139
|
-
return text.replace(REGEX_DISALLOWED_CHARACTERS, "").substring(0, 5 - (this.textContent?.length ?? 0));
|
|
140
|
-
}
|
|
141
|
-
shouldValidate(name) {
|
|
142
|
-
return super.shouldValidate(name) || [
|
|
143
|
-
"valueAsDate",
|
|
144
|
-
"min",
|
|
145
|
-
"max",
|
|
146
|
-
"dateFilter"
|
|
147
|
-
].includes(name);
|
|
148
|
-
}
|
|
149
|
-
validate() {
|
|
150
|
-
super.validate();
|
|
151
|
-
if (!this.value) this._removeValidityErrors();
|
|
152
|
-
else if (!this._valueAsTime) this.setValidityFlag("badInput", i18nTimeInvalid[this.language.current]);
|
|
153
|
-
else if (!this._isTimeValid(this._valueAsTime)) this.setValidityFlag("rangeOverflow", i18nTimeMax[this.language.current]);
|
|
154
|
-
else this._removeValidityErrors();
|
|
155
|
-
}
|
|
156
|
-
_removeValidityErrors() {
|
|
157
|
-
["badInput", "rangeOverflow"].forEach((f) => this.removeValidityFlag(f));
|
|
158
|
-
}
|
|
159
|
-
/** Checks if values of hours and minutes are possible, to avoid non-existent times. */
|
|
160
|
-
_isTimeValid(time) {
|
|
161
|
-
return time.hours < 24 && time.minutes < 60;
|
|
162
|
-
}
|
|
163
|
-
/** Only allow typing numbers and separator keys. */
|
|
164
|
-
_preventCharInsert(event) {
|
|
165
|
-
if (event.ctrlKey || event.altKey || event.metaKey || [
|
|
166
|
-
"Backspace",
|
|
167
|
-
"Tab",
|
|
168
|
-
"Enter",
|
|
169
|
-
"ArrowUp",
|
|
170
|
-
"ArrowDown",
|
|
171
|
-
"ArrowLeft",
|
|
172
|
-
"ArrowRight",
|
|
173
|
-
"Home",
|
|
174
|
-
"End",
|
|
175
|
-
"PageUp",
|
|
176
|
-
"PageDown",
|
|
177
|
-
"Delete"
|
|
178
|
-
].includes(event.key) || REGEX_ALLOWED_CHARACTERS.test(event.key) && (this.value.length < 5 || this._hasSelection())) return;
|
|
179
|
-
event.preventDefault();
|
|
180
|
-
if (this.value.length >= 5) sbbLiveAnnouncer.announce(i18nTimeMaxLength[this._language.current]);
|
|
181
|
-
}
|
|
182
|
-
_hasSelection() {
|
|
183
|
-
const range = window.getSelection()?.getRangeAt(0);
|
|
184
|
-
return !!range && range.startOffset !== range.endOffset;
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
})();
|
|
188
|
-
//#endregion
|
|
189
|
-
export { SbbTimeInputElement as t };
|
|
190
|
-
|
|
191
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1pbnB1dC5jb21wb25lbnQtQlotOW1lRWIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RpbWUtaW5wdXQvdGltZS1pbnB1dC5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90aW1lLWlucHV0L3RpbWUtaW5wdXQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG5cbiAgLy8gV2l0aCBzYmItZm9ybS1maWVsZFt3aWR0aD1cImNvbGxhcHNlZFwiXSwgdGhlIGRlZmF1bHQgbWluIHdpZHRoIG9mIGFcbiAgLy8gYW4gaW5saW5lIGVsZW1lbnQgaXMgYmFzaWNhbGx5IG5vdGhpbmcgKGV4Y2VwdCBwb3RlbnRpYWxseSB0aGUgcGxhY2Vob2xkZXIpLlxuICAvLyBEdWUgdG8gdGhpcywgd2Ugc2V0IGEgbWluaW11bSB3aWR0aCBmb3IgdGhlIHRpbWUgaW5wdXQgZWxlbWVudC5cbiAgLy8gV2UgYWxzbyBjYW5ub3QgdXNlIHdpZHRoLCBhcyB0aGUgZm9ybSBmaWVsZCBvdmVyd3JpdGVzIHRoYXQgcHJvcGVydHkuXG4gIG1pbi13aWR0aDogdmFyKC0tc2JiLXRpbWUtaW5wdXQtbWF4LXdpZHRoKTtcblxuICAvLyBUaGUgdGltZSBpbnB1dCBhbHNvIGhhcyBhIHZlcnkgc3BlY2lmaWMgZGltZW5zaW9uLCBzbyB3ZSBhbHNvIHNldCB0aGUgbWF4aW11bSB3aWR0aC5cbiAgbWF4LXdpZHRoOiB2YXIoLS1zYmItdGltZS1pbnB1dC1tYXgtd2lkdGgpO1xuICBjdXJzb3I6IHRleHQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGNvbG9yOiBGaWVsZFRleHQ7XG4gIH1cbn1cblxuOmhvc3QoOmRpc2FibGVkKSB7XG4gIGN1cnNvcjogdmFyKC0tc2JiLWN1cnNvci1kZWZhdWx0KTtcbn1cblxuOmhvc3QoOmZvY3VzKSB7XG4gIHRleHQtb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDtcbn1cblxuOmhvc3QoOmVtcHR5KTo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKHBsYWNlaG9sZGVyKTtcbiAgQGluY2x1ZGUgc2JiLnBsYWNlaG9sZGVyO1xuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgY29sb3I6IEdyYXlUZXh0O1xuICB9XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBpc1NlcnZlciwgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBzYmJMaXZlQW5ub3VuY2VyIH0gZnJvbSAnLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQge1xuICBpMThuVGltZUlucHV0Q2hhbmdlLFxuICBpMThuVGltZUludmFsaWQsXG4gIGkxOG5UaW1lTWF4LFxuICBpMThuVGltZU1heExlbmd0aCxcbn0gZnJvbSAnLi4vY29yZS9pMThuLnRzJztcbmltcG9ydCB7IFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vdGltZS1pbnB1dC5zY3NzP2lubGluZSc7XG5cbmNvbnN0IFJFR0VYX0FMTE9XRURfQ0hBUkFDVEVSUyA9IC9bMC05LjosXFwtO19oSF0vO1xuY29uc3QgUkVHRVhfRElTQUxMT1dFRF9DSEFSQUNURVJTID0gL1teMC05LjosXFwtO19oSF0vZztcbmNvbnN0IFJFR0VYX0dST1VQU19XSVRIT1VUX0NPTE9OID0gL14oWzAtOV17MSwyfSkoWzAtOV17Mn0pJC87XG5jb25zdCBSRUdFWF9HUk9VUFNfV0lUSF9DT0xPTiA9IC9eKFswLTldezEsMn0pP1suOixcXC07X2hIXT8oWzAtOV17MSwyfSk/JC87XG5cbmludGVyZmFjZSBUaW1lIHtcbiAgaG91cnM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEN1c3RvbSBpbnB1dCBmb3IgYSB0aW1lLlxuICovXG5leHBvcnQgY2xhc3MgU2JiVGltZUlucHV0RWxlbWVudCBleHRlbmRzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItdGltZS1pbnB1dCc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHVuc2FmZUNTUyhzdHlsZSk7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgdGltZSBpbnB1dC4gUmVmbGVjdHMgdGhlIGN1cnJlbnQgdGV4dCB2YWx1ZVxuICAgKiBvZiB0aGlzIGlucHV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFsdWUgPVxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHZhbHVlLnJlcGxhY2UoUkVHRVhfRElTQUxMT1dFRF9DSEFSQUNURVJTLCAnJykuc3Vic3RyaW5nKDAsIDUpXG4gICAgICAgIDogJyc7XG4gICAgdGhpcy5fdHJ5UGFyc2VWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gQXMgbG9uZyBhcyB0aGlzIGVsZW1lbnQgaGFzIGZvY3VzIHdlIGRlbGF5IGF1dG9tYXRpY2FsbHkgdXBkYXRpbmdcbiAgICAvLyB0aGUgdmFsdWUgd2l0aCB0aGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgcGFyc2VkIGRhdGUuXG4gICAgaWYgKCFpc1NlcnZlciAmJiAhdGhpcy5tYXRjaGVzKCc6Zm9jdXMnKSAmJiB0aGlzLnZhbHVlQXNEYXRlICE9PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX2Zvcm1hdFRpbWUoKTtcbiAgICB9XG4gICAgc3VwZXIudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqIEZvcm1hdHMgdGhlIGN1cnJlbnQgaW5wdXQncyB2YWx1ZSBhcyBkYXRlLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgdmFsdWVBc0RhdGUoZGF0ZTogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUudmFsdWVPZigpKSkge1xuICAgICAgdGhpcy5fdmFsdWVBc1RpbWUgPSB7XG4gICAgICAgIGhvdXJzOiBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIG1pbnV0ZXM6IGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5fZm9ybWF0VGltZSgpO1xuICAgICAgaWYgKHRoaXMudmFsdWUgIT09IGZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWVBc1RpbWUgPSBudWxsO1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlQXNEYXRlKCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fdmFsdWVBc1RpbWUgJiYgdGhpcy5faXNUaW1lVmFsaWQodGhpcy5fdmFsdWVBc1RpbWUpKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gICAgICBkYXRlLnNldEhvdXJzKHRoaXMuX3ZhbHVlQXNUaW1lLmhvdXJzKTtcbiAgICAgIGRhdGUuc2V0TWludXRlcyh0aGlzLl92YWx1ZUFzVGltZS5taW51dGVzKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWVBc1RpbWU/OiBUaW1lIHwgbnVsbDtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBsYXN0IHN0cmluZyBhbmQgcGFyc2VkIGRhdGUgb2JqZWN0IHZhbHVlIHRvIHByZXZlbnQgcmVwZWF0ZWRcbiAgICogcGFyc2luZyBvZiB0aGUgc3RyaW5nIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsdWVDYWNoZT86IFtzdHJpbmcsIFRpbWUgfCBudWxsXTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+IHRoaXMuX3VwZGF0ZVZhbHVlRGF0ZUZvcm1hdCgpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+XG4gICAgICBzYmJMaXZlQW5ub3VuY2VyLmFubm91bmNlKGkxOG5UaW1lSW5wdXRDaGFuZ2UodGhpcy52YWx1ZSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0pLFxuICAgICk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZXZlbnQpID0+IHRoaXMuX3ByZXZlbnRDaGFySW5zZXJ0KGV2ZW50KSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmlucHV0TW9kZSB8fD0gJ251bWVyaWMnO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgfHw9ICdISDpNTSc7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy5fdHJ5UGFyc2VWYWx1ZSgpO1xuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMudmFsdWVBc0RhdGUgIT09IG51bGwgPyB0aGlzLl9mb3JtYXRUaW1lKCkgOiBudWxsO1xuICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZShmb3JtVmFsdWUsIHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJ5UGFyc2VWYWx1ZSh2YWx1ZSA9IHRoaXMudmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmFsdWVDYWNoZT8uWzBdICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWVBc1RpbWUgPSB0aGlzLl9wYXJzZVZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3ZhbHVlQ2FjaGUgPSBbdmFsdWUsIHRoaXMuX3ZhbHVlQXNUaW1lID8/IG51bGxdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZSBpbnB1dCBhZ2FpbnN0IHRoZSBkZWZpbmVkIFJlZ0V4cHMuICovXG4gIHByaXZhdGUgX3BhcnNlVmFsdWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFRpbWUgfCBudWxsIHtcbiAgICBjb25zdCB0cmltbWVkVmFsdWUgPSB2YWx1ZT8udHJpbSgpO1xuICAgIGlmICghdHJpbW1lZFZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IHRoZSBpbnB1dCBpcyAzIG9yIDQgZGlnaXRzOyBzcGxpdCBsaWtlOiBBQj86Q0RcbiAgICBjb25zdCBtYXRjaCA9XG4gICAgICB0cmltbWVkVmFsdWUubWF0Y2goUkVHRVhfR1JPVVBTX1dJVEhPVVRfQ09MT04pID8/IHRyaW1tZWRWYWx1ZS5tYXRjaChSRUdFWF9HUk9VUFNfV0lUSF9DT0xPTik7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4geyBob3VyczogK21hdGNoWzFdIHx8IDAsIG1pbnV0ZXM6ICttYXRjaFsyXSB8fCAwIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWYWx1ZURhdGVGb3JtYXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0RhdGUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLl9mb3JtYXRUaW1lKCk7XG4gICAgICBpZiAodGhpcy52YWx1ZSAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICBzdXBlci52YWx1ZSA9IGZvcm1hdHRlZERhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybWF0VGltZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZUFzRGF0ZTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKHZhbHVlLmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbWludXRlcyA9IFN0cmluZyh2YWx1ZS5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwcmVwYXJlUGFzdGVkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZShSRUdFWF9ESVNBTExPV0VEX0NIQVJBQ1RFUlMsICcnKVxuICAgICAgLnN1YnN0cmluZygwLCA1IC0gKHRoaXMudGV4dENvbnRlbnQ/Lmxlbmd0aCA/PyAwKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHxcbiAgICAgIFsndmFsdWVBc0RhdGUnLCAnbWluJywgJ21heCcsICdkYXRlRmlsdGVyJ10uaW5jbHVkZXMobmFtZSBhcyBzdHJpbmcpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5fcmVtb3ZlVmFsaWRpdHlFcnJvcnMoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl92YWx1ZUFzVGltZSkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ2JhZElucHV0JywgaTE4blRpbWVJbnZhbGlkW3RoaXMubGFuZ3VhZ2UuY3VycmVudF0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzVGltZVZhbGlkKHRoaXMuX3ZhbHVlQXNUaW1lKSkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ3JhbmdlT3ZlcmZsb3cnLCBpMThuVGltZU1heFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVtb3ZlVmFsaWRpdHlFcnJvcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVWYWxpZGl0eUVycm9ycygpOiB2b2lkIHtcbiAgICAoWydiYWRJbnB1dCcsICdyYW5nZU92ZXJmbG93J10gYXMgY29uc3QpLmZvckVhY2goKGYpID0+IHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKGYpKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdmFsdWVzIG9mIGhvdXJzIGFuZCBtaW51dGVzIGFyZSBwb3NzaWJsZSwgdG8gYXZvaWQgbm9uLWV4aXN0ZW50IHRpbWVzLiAqL1xuICBwcml2YXRlIF9pc1RpbWVWYWxpZCh0aW1lOiBUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRpbWUuaG91cnMgPCAyNCAmJiB0aW1lLm1pbnV0ZXMgPCA2MDtcbiAgfVxuXG4gIC8qKiAgT25seSBhbGxvdyB0eXBpbmcgbnVtYmVycyBhbmQgc2VwYXJhdG9yIGtleXMuICovXG4gIHByaXZhdGUgX3ByZXZlbnRDaGFySW5zZXJ0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWx3YXlzQWxsb3dlZCA9IFtcbiAgICAgICdCYWNrc3BhY2UnLFxuICAgICAgJ1RhYicsXG4gICAgICAnRW50ZXInLFxuICAgICAgJ0Fycm93VXAnLFxuICAgICAgJ0Fycm93RG93bicsXG4gICAgICAnQXJyb3dMZWZ0JyxcbiAgICAgICdBcnJvd1JpZ2h0JyxcbiAgICAgICdIb21lJyxcbiAgICAgICdFbmQnLFxuICAgICAgJ1BhZ2VVcCcsXG4gICAgICAnUGFnZURvd24nLFxuICAgICAgJ0RlbGV0ZScsXG4gICAgXTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50LmN0cmxLZXkgfHxcbiAgICAgIGV2ZW50LmFsdEtleSB8fFxuICAgICAgZXZlbnQubWV0YUtleSB8fFxuICAgICAgYWx3YXlzQWxsb3dlZC5pbmNsdWRlcyhldmVudC5rZXkpIHx8XG4gICAgICAoUkVHRVhfQUxMT1dFRF9DSEFSQUNURVJTLnRlc3QoZXZlbnQua2V5KSAmJiAodGhpcy52YWx1ZS5sZW5ndGggPCA1IHx8IHRoaXMuX2hhc1NlbGVjdGlvbigpKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA+PSA1KSB7XG4gICAgICBzYmJMaXZlQW5ub3VuY2VyLmFubm91bmNlKGkxOG5UaW1lTWF4TGVuZ3RoW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYXNTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQoMCk7XG4gICAgcmV0dXJuICEhcmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IHJhbmdlLmVuZE9mZnNldDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRpbWUtaW5wdXQnOiBTYmJUaW1lSW5wdXRFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQ2dCQSxJQUFNLDJCQUEyQjtBQUNqQyxJQUFNLDhCQUE4QjtBQUNwQyxJQUFNLDZCQUE2QjtBQUNuQyxJQUFNLDBCQUEwQjs7OztJQVVuQiw2QkFBbUI7bUJBQVMsNEJBQTRCLFVBQVU7OztjQUFsRSw0QkFBNEIsWUFBdUM7OztrQ0EwQjdFLFNBQVMsRUFBRSxXQUFXLE1BQUssQ0FBRSxDQUFDO0dBQy9CLGFBQUEsTUFBQSxNQUFBLDZCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsaUJBQUE7S0FBQSxNQUFBLEtBQUEsVUFBQTtNQUFBLElBQVcsY0FBVztLQUFBO0lBQUE7SUFBQSxVQUFBO0dBQUEsR0FBQSxNQUFBLDBCQUFBOzs7Ozs7Ozs7R0ExQlUsS0FBQSxjQUFzQjtFQUFpQjs7R0FDaEQsS0FBQSxTQUF5QixVQUFVLGtCQUFLO0VBQUU7Ozs7O0VBTWpFLElBQW9CLE1BQU0sT0FBYTtHQUNyQyxRQUNFLE9BQU8sVUFBVSxXQUNiLE1B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
|