@metadev/lux 0.27.0 → 0.28.0

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 (83) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/esm2022/lib/autocomplete/autocomplete.component.mjs +488 -488
  4. package/esm2022/lib/autocomplete-list/autocomplete-list.component.mjs +258 -258
  5. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +77 -77
  6. package/esm2022/lib/checkbox/checkbox.component.mjs +156 -156
  7. package/esm2022/lib/datasource.mjs +1 -1
  8. package/esm2022/lib/datetime/datetime.component.mjs +312 -312
  9. package/esm2022/lib/filter/filter.component.mjs +158 -158
  10. package/esm2022/lib/geolocation/geolocation.component.mjs +423 -423
  11. package/esm2022/lib/geolocation/geolocation.service.mjs +122 -122
  12. package/esm2022/lib/geolocation/openlayer-loader.service.mjs +61 -61
  13. package/esm2022/lib/helperFns.mjs +117 -117
  14. package/esm2022/lib/input/input.component.mjs +469 -469
  15. package/esm2022/lib/input/regexp.service.mjs +194 -194
  16. package/esm2022/lib/lang.mjs +8 -8
  17. package/esm2022/lib/lux.module.mjs +118 -118
  18. package/esm2022/lib/map/geopoint.mjs +1 -1
  19. package/esm2022/lib/map/map.component.mjs +275 -275
  20. package/esm2022/lib/modal/modal-backdrop.mjs +24 -24
  21. package/esm2022/lib/modal/modal-config.mjs +11 -11
  22. package/esm2022/lib/modal/modal-dismiss-reasons.mjs +5 -5
  23. package/esm2022/lib/modal/modal-ref.mjs +100 -100
  24. package/esm2022/lib/modal/modal-stack.mjs +181 -181
  25. package/esm2022/lib/modal/modal-window.mjs +118 -118
  26. package/esm2022/lib/modal/modal.service.mjs +27 -27
  27. package/esm2022/lib/modal/util.mjs +81 -81
  28. package/esm2022/lib/pagination/pagination.component.mjs +144 -144
  29. package/esm2022/lib/pagination/pagination.mjs +1 -1
  30. package/esm2022/lib/radiogroup/radiogroup.component.mjs +129 -129
  31. package/esm2022/lib/select/select.component.mjs +148 -148
  32. package/esm2022/lib/tooltip/placement.mjs +7 -7
  33. package/esm2022/lib/tooltip/tooltip-context.mjs +1 -1
  34. package/esm2022/lib/tooltip/tooltip.component.mjs +21 -21
  35. package/esm2022/lib/tooltip/tooltip.directive.mjs +69 -69
  36. package/esm2022/lib/tooltip/tooltip.service.mjs +136 -136
  37. package/esm2022/lib/tooltip/tooltop-content.mjs +8 -8
  38. package/esm2022/lib/voice-recognition/voice-recognition.directive.mjs +79 -79
  39. package/esm2022/lib/window/window.service.mjs +45 -45
  40. package/esm2022/metadev-lux.mjs +4 -4
  41. package/esm2022/public-api.mjs +20 -20
  42. package/fesm2022/metadev-lux.mjs +4372 -4372
  43. package/fesm2022/metadev-lux.mjs.map +1 -1
  44. package/index.d.ts +5 -5
  45. package/lib/autocomplete/autocomplete.component.d.ts +81 -81
  46. package/lib/autocomplete-list/autocomplete-list.component.d.ts +65 -65
  47. package/lib/breadcrumb/breadcrumb.component.d.ts +22 -22
  48. package/lib/checkbox/checkbox.component.d.ts +47 -47
  49. package/lib/datasource.d.ts +13 -13
  50. package/lib/datetime/datetime.component.d.ts +69 -69
  51. package/lib/filter/filter.component.d.ts +51 -51
  52. package/lib/geolocation/geolocation.component.d.ts +123 -123
  53. package/lib/geolocation/geolocation.service.d.ts +32 -32
  54. package/lib/geolocation/openlayer-loader.service.d.ts +7 -7
  55. package/lib/helperFns.d.ts +15 -15
  56. package/lib/input/input.component.d.ts +108 -108
  57. package/lib/input/regexp.service.d.ts +15 -15
  58. package/lib/lang.d.ts +2 -2
  59. package/lib/lux.module.d.ts +27 -27
  60. package/lib/map/geopoint.d.ts +7 -7
  61. package/lib/map/map.component.d.ts +39 -39
  62. package/lib/modal/modal-backdrop.d.ts +8 -8
  63. package/lib/modal/modal-config.d.ts +14 -14
  64. package/lib/modal/modal-dismiss-reasons.d.ts +4 -4
  65. package/lib/modal/modal-ref.d.ts +41 -41
  66. package/lib/modal/modal-stack.d.ts +31 -31
  67. package/lib/modal/modal-window.d.ts +28 -28
  68. package/lib/modal/modal.service.d.ts +19 -19
  69. package/lib/modal/util.d.ts +40 -40
  70. package/lib/pagination/pagination.component.d.ts +52 -52
  71. package/lib/pagination/pagination.d.ts +10 -10
  72. package/lib/radiogroup/radiogroup.component.d.ts +37 -37
  73. package/lib/select/select.component.d.ts +38 -38
  74. package/lib/tooltip/placement.d.ts +7 -7
  75. package/lib/tooltip/tooltip-context.d.ts +3 -3
  76. package/lib/tooltip/tooltip.component.d.ts +11 -11
  77. package/lib/tooltip/tooltip.directive.d.ts +27 -27
  78. package/lib/tooltip/tooltip.service.d.ts +20 -20
  79. package/lib/tooltip/tooltop-content.d.ts +6 -6
  80. package/lib/voice-recognition/voice-recognition.directive.d.ts +16 -16
  81. package/lib/window/window.service.d.ts +11 -11
  82. package/package.json +3 -4
  83. package/public-api.d.ts +18 -18
@@ -1,469 +1,469 @@
1
- import { Component, Input, Output, EventEmitter, ElementRef, ViewChild, forwardRef } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
- import { hasValue, isInitialAndEmpty, isValidEmail, isValidNumber, isValidRelativeUrl, isValidColor, normalizeDate } from '../helperFns';
4
- import { languageDetector } from '../lang';
5
- import { RegexpService } from './regexp.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./regexp.service";
8
- import * as i2 from "@angular/common";
9
- export class InputComponent {
10
- regexpService;
11
- static idCounter = 0;
12
- input;
13
- textarea;
14
- colorpicker;
15
- touched = false;
16
- dirty = false;
17
- lastErrors = null;
18
- _disabled;
19
- _value = '';
20
- _type;
21
- _placeholder;
22
- _pattern = undefined;
23
- _regexp = undefined;
24
- _currency;
25
- _required;
26
- userErrors = {
27
- en: {
28
- required: 'Required field.',
29
- min: 'Minimum value is $min.',
30
- max: 'Maximum value is $max.',
31
- email: 'Format should match example@example.com.',
32
- url: 'Format should match https://example.com.',
33
- color: 'Format should match #XXXXXX.'
34
- },
35
- es: {
36
- required: 'El campo es obligatorio.',
37
- min: 'El valor mínimo es $min.',
38
- max: 'El valor máximo es $max.',
39
- email: 'El campo debe tener un formato como ejemplo@ejemplo.com.',
40
- url: 'El campo debe tener un formato como https://ejemplo.com.',
41
- color: 'El campo debe tener un formato como #XXXXXX.'
42
- }
43
- };
44
- domain;
45
- rows;
46
- cols;
47
- step;
48
- min;
49
- max;
50
- get className() {
51
- return this.checkClassName();
52
- }
53
- get color() {
54
- return this.checkColor();
55
- }
56
- lang = languageDetector();
57
- inlineErrors = false;
58
- inputId;
59
- ariaLabel;
60
- readonly = null;
61
- set disabled(v) {
62
- v = typeof v === 'string' ? true : v;
63
- this._disabled = v;
64
- }
65
- get disabled() {
66
- return this._disabled;
67
- }
68
- set pattern(p) {
69
- this._pattern = p;
70
- if (p === undefined) {
71
- this._regexp = undefined;
72
- }
73
- else {
74
- try {
75
- this._regexp = new RegExp(p);
76
- }
77
- catch (e) {
78
- this._pattern = undefined;
79
- this._regexp = undefined;
80
- }
81
- }
82
- }
83
- get pattern() {
84
- return this._pattern;
85
- }
86
- set currency(v) {
87
- this._currency = v.toUpperCase();
88
- }
89
- get currency() {
90
- return this._currency;
91
- }
92
- set placeholder(v) {
93
- this._placeholder = v;
94
- }
95
- get placeholder() {
96
- return this._placeholder ? this._placeholder : '';
97
- }
98
- set required(v) {
99
- this._required = v;
100
- }
101
- get required() {
102
- return this._required;
103
- }
104
- set type(v) {
105
- this._type = v.toLowerCase();
106
- this.domain = v.toLowerCase();
107
- this.checkType(v);
108
- }
109
- get type() {
110
- return this._type ? this._type : 'text';
111
- }
112
- set value(v) {
113
- v = v === undefined ? null : v;
114
- if (v === this._value) {
115
- return; // prevent events when there is no changes
116
- }
117
- const initialAndEmpty = isInitialAndEmpty(this._value, v);
118
- if (this.type === 'date') {
119
- v = normalizeDate(v);
120
- }
121
- this._value = v;
122
- this.onChange(v);
123
- if (!initialAndEmpty) {
124
- this.valueChange.emit(v);
125
- }
126
- }
127
- get value() {
128
- if (this.isPercentage() || this.isPermillage() || this.isNumber()) {
129
- const numVal = parseFloat(this._value);
130
- if (!Number.isNaN(numVal)) {
131
- return numVal;
132
- }
133
- }
134
- return this._value;
135
- }
136
- valueChange = new EventEmitter();
137
- keyPress = new EventEmitter();
138
- onChange = (value) => { };
139
- onTouched = () => { };
140
- constructor(regexpService) {
141
- this.regexpService = regexpService;
142
- }
143
- // ControlValueAccessor Interface implementation
144
- writeValue(value) {
145
- this.value = value;
146
- this.setValueInControl(value);
147
- }
148
- registerOnChange(onChange) {
149
- this.onChange = onChange;
150
- }
151
- registerOnTouched(onTouched) {
152
- this.onTouched = onTouched;
153
- }
154
- markAsTouched() {
155
- if (!this.touched) {
156
- this.onTouched();
157
- this.touched = true;
158
- }
159
- }
160
- setDisabledState(disabled) {
161
- this.disabled = disabled;
162
- }
163
- // End of ControlValueAccessor Interface implementation
164
- setValueInControl(v) {
165
- if (this.domain === 'date') {
166
- v = normalizeDate(v);
167
- }
168
- if (this.input) {
169
- this.input.nativeElement.value = v;
170
- }
171
- if (this.textarea) {
172
- this.textarea.nativeElement.value = v;
173
- }
174
- }
175
- // Validator interface
176
- registerOnValidatorChange() { }
177
- validate(control) {
178
- const value = control.value;
179
- let result = null;
180
- if (this.required && !hasValue(value)) {
181
- result = result || {};
182
- result.required = { value, reason: 'Required field.' };
183
- }
184
- if (this._regexp && hasValue(value) && !this._regexp.test(value)) {
185
- result = result || {};
186
- result.pattern = {
187
- value,
188
- reason: `Value must follow the pattern: ${this._pattern}`
189
- };
190
- }
191
- if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {
192
- result = result || {};
193
- result.email = { value, reason: 'Invalid email.' };
194
- }
195
- if (this.type === 'url' && hasValue(value) && !isValidRelativeUrl(value)) {
196
- result = result || {};
197
- result.url = { value, reason: 'Invalid URL.' };
198
- }
199
- if (this.type === 'color' && hasValue(value) && !isValidColor(value)) {
200
- result = result || {};
201
- result.color = { value, reason: 'Invalid color.' };
202
- }
203
- if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {
204
- result = result || {};
205
- result.numeric = { value, reason: 'Invalid number.' };
206
- }
207
- if (this.type === 'date' ||
208
- this.type === 'time' ||
209
- this.type === 'timestamp') {
210
- if (typeof this.min === 'string' &&
211
- hasValue(value) &&
212
- String(value).localeCompare(this.min) === -1) {
213
- result = result || {};
214
- result.min = {
215
- value,
216
- min: this.min,
217
- reason: `Value is lower than minimum value: ${this.min}.`
218
- };
219
- }
220
- if (typeof this.max === 'string' &&
221
- hasValue(value) &&
222
- String(value).localeCompare(this.max) !== -1) {
223
- result = result || {};
224
- result.max = {
225
- value,
226
- max: this.max,
227
- reason: `Value is greater than than maximum value: ${this.max}.`
228
- };
229
- }
230
- }
231
- if (this.type === 'percentage' ||
232
- this.type === 'permillage' ||
233
- this.type === 'number' ||
234
- this.type === 'currency') {
235
- if (hasValue(this.min) && hasValue(value) && value < +this.min) {
236
- result = result || {};
237
- result.min = {
238
- value,
239
- min: this.min,
240
- reason: `Value is lower than minimum value: ${this.min}.`
241
- };
242
- }
243
- if (hasValue(this.max) && hasValue(value) && value > +this.max) {
244
- result = result || {};
245
- result.max = {
246
- value,
247
- max: this.max,
248
- reason: `Value is greater than than maximum value: ${this.max}.`
249
- };
250
- }
251
- }
252
- this.lastErrors = result;
253
- return result;
254
- }
255
- // End of Validator interface
256
- ngOnInit() {
257
- this.inputId = this.inputId
258
- ? this.inputId
259
- : `${this.type}$${InputComponent.idCounter++}`;
260
- }
261
- onLostFocus() {
262
- this.markAsTouched();
263
- }
264
- onKeyUp(newValue) {
265
- this.value = newValue;
266
- }
267
- onChangeValue(newValue) {
268
- this.value = newValue;
269
- if (this.isColor()) {
270
- this.colorpicker.nativeElement.value = undefined;
271
- }
272
- this.markAsTouched();
273
- }
274
- onKeyPress(event) {
275
- this.keyPress.emit(event);
276
- }
277
- onColorPicked(newValue) {
278
- this.onChangeValue(newValue);
279
- this.setValueInControl(newValue);
280
- }
281
- isUrl() {
282
- return this.type === 'url';
283
- }
284
- isColor() {
285
- return this.type === 'color';
286
- }
287
- isNumber() {
288
- return this.type === 'number';
289
- }
290
- isPercentage() {
291
- return this.type === 'percentage';
292
- }
293
- isPermillage() {
294
- return this.type === 'permillage';
295
- }
296
- hasPrefix() {
297
- return this.currency === 'USD';
298
- }
299
- hasPostfix() {
300
- return (this.currency === 'EUR' ||
301
- this.isPercentage() ||
302
- this.isPermillage() ||
303
- (this.isUrl() && !!this.value) ||
304
- this.isColor());
305
- }
306
- checkClassName() {
307
- return this.disabled
308
- ? this.readonly
309
- ? 'disabled readonly'
310
- : 'disabled'
311
- : this.readonly
312
- ? 'readonly'
313
- : '';
314
- }
315
- checkColor() {
316
- return this.type === 'color' && isValidColor(this.value)
317
- ? this.value
318
- : 'initial';
319
- }
320
- checkType(type) {
321
- switch (type) {
322
- case 'email':
323
- this.setEmailPatterns();
324
- break;
325
- case 'url':
326
- this.setUrlPatterns();
327
- break;
328
- case 'color':
329
- this.setColorPatterns();
330
- break;
331
- case 'date':
332
- this.setDatePatterns();
333
- break;
334
- case 'time':
335
- this.setTimePatterns();
336
- break;
337
- case 'password':
338
- this.setPasswordPatterns();
339
- break;
340
- case 'number':
341
- this.setNumberPatterns();
342
- break;
343
- case 'currency':
344
- this.setCurrencyPatterns();
345
- break;
346
- case 'percentage':
347
- this.setPercentagePatterns();
348
- break;
349
- case 'permillage':
350
- this.setPermillagePatterns();
351
- break;
352
- default:
353
- break;
354
- }
355
- }
356
- setEmailPatterns() { }
357
- setUrlPatterns() { }
358
- setColorPatterns() {
359
- this.domain = 'text';
360
- }
361
- setDatePatterns() {
362
- this.min = this.min || '1900-01-01';
363
- this.max = this.max || '2100-01-01';
364
- }
365
- setTimePatterns() { }
366
- setPasswordPatterns() { }
367
- setNumberPatterns() {
368
- this.domain = 'number';
369
- this.placeholder = '0';
370
- }
371
- setCurrencyPatterns() {
372
- this.domain = 'number';
373
- this.step = this.step || 0.1;
374
- this.min = this.min || 0.0;
375
- this.max = this.max || 10000.0;
376
- this.value = 0.0;
377
- }
378
- setPercentagePatterns() {
379
- this.domain = 'number';
380
- this.step = this.step || 0.01;
381
- this.min = this.min || 0.0;
382
- this.max = this.max || 100.0;
383
- this.placeholder = '0.00';
384
- }
385
- setPermillagePatterns() {
386
- this.domain = 'number';
387
- this.step = this.step || 0.01;
388
- this.min = this.min || 0.0;
389
- this.max = this.max || 1000.0;
390
- this.placeholder = '0.00';
391
- }
392
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: InputComponent, deps: [{ token: i1.RegexpService }], target: i0.ɵɵFactoryTarget.Component });
393
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: InputComponent, selector: "lux-input", inputs: { rows: "rows", cols: "cols", step: "step", min: "min", max: "max", lang: "lang", inlineErrors: "inlineErrors", inputId: "inputId", ariaLabel: ["aria-label", "ariaLabel"], readonly: "readonly", disabled: "disabled", pattern: "pattern", currency: "currency", placeholder: "placeholder", required: "required", type: "type", value: "value" }, outputs: { valueChange: "valueChange", keyPress: "keyPress" }, providers: [
394
- {
395
- provide: NG_VALUE_ACCESSOR,
396
- multi: true,
397
- useExisting: forwardRef(() => InputComponent)
398
- },
399
- {
400
- provide: NG_VALIDATORS,
401
- multi: true,
402
- useExisting: forwardRef(() => InputComponent)
403
- }
404
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "textarea", first: true, predicate: ["textarea"], descendants: true }, { propertyName: "colorpicker", first: true, predicate: ["colorpicker"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u2030</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:var(--lux-input-margin, 0rem);padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:var(--lux-alert-background, #fe2e2e);color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:var(--lux-symbol-background, default);font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch;min-height:1.5rem}input[type=color]{min-height:100%;height:0}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:var(--lux-disabled-color, #f1f1f1);border-color:var(--lux-disabled-border-color, #6d6d6d)}.clickable{cursor:pointer}.full-space{width:100%;height:100%;margin:0;border:0;padding:0}.minimal-space,.icon,.icon-external{min-width:1rem;min-height:1rem}.icon,.icon-external{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.icon-external{background:var(--lux-input-icon-external, url(/assets/img/external.svg) no-repeat center);background-size:1rem;background-position-y:.1rem;height:100%}.invisible{opacity:0}.transparency{background-image:conic-gradient(white 0deg 90deg,lightgray 90deg 180deg,white 180deg 270deg,lightgray 270deg 360deg)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
405
- }
406
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: InputComponent, decorators: [{
407
- type: Component,
408
- args: [{ selector: 'lux-input', providers: [
409
- {
410
- provide: NG_VALUE_ACCESSOR,
411
- multi: true,
412
- useExisting: forwardRef(() => InputComponent)
413
- },
414
- {
415
- provide: NG_VALIDATORS,
416
- multi: true,
417
- useExisting: forwardRef(() => InputComponent)
418
- }
419
- ], template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u2030</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:var(--lux-input-margin, 0rem);padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:var(--lux-alert-background, #fe2e2e);color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:var(--lux-symbol-background, default);font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch;min-height:1.5rem}input[type=color]{min-height:100%;height:0}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:var(--lux-disabled-color, #f1f1f1);border-color:var(--lux-disabled-border-color, #6d6d6d)}.clickable{cursor:pointer}.full-space{width:100%;height:100%;margin:0;border:0;padding:0}.minimal-space,.icon,.icon-external{min-width:1rem;min-height:1rem}.icon,.icon-external{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.icon-external{background:var(--lux-input-icon-external, url(/assets/img/external.svg) no-repeat center);background-size:1rem;background-position-y:.1rem;height:100%}.invisible{opacity:0}.transparency{background-image:conic-gradient(white 0deg 90deg,lightgray 90deg 180deg,white 180deg 270deg,lightgray 270deg 360deg)}\n"] }]
420
- }], ctorParameters: function () { return [{ type: i1.RegexpService }]; }, propDecorators: { input: [{
421
- type: ViewChild,
422
- args: ['input', { static: false }]
423
- }], textarea: [{
424
- type: ViewChild,
425
- args: ['textarea', { static: false }]
426
- }], colorpicker: [{
427
- type: ViewChild,
428
- args: ['colorpicker', { static: false }]
429
- }], rows: [{
430
- type: Input
431
- }], cols: [{
432
- type: Input
433
- }], step: [{
434
- type: Input
435
- }], min: [{
436
- type: Input
437
- }], max: [{
438
- type: Input
439
- }], lang: [{
440
- type: Input
441
- }], inlineErrors: [{
442
- type: Input
443
- }], inputId: [{
444
- type: Input
445
- }], ariaLabel: [{
446
- type: Input,
447
- args: ['aria-label']
448
- }], readonly: [{
449
- type: Input
450
- }], disabled: [{
451
- type: Input
452
- }], pattern: [{
453
- type: Input
454
- }], currency: [{
455
- type: Input
456
- }], placeholder: [{
457
- type: Input
458
- }], required: [{
459
- type: Input
460
- }], type: [{
461
- type: Input
462
- }], value: [{
463
- type: Input
464
- }], valueChange: [{
465
- type: Output
466
- }], keyPress: [{
467
- type: Output
468
- }] } });
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBS2pCLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixhQUFhLEVBQ2QsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQWtCakQsTUFBTSxPQUFPLGNBQWM7SUE4Sk47SUE3Sm5CLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWtCLEtBQUssQ0FBYTtJQUNmLFFBQVEsQ0FBYTtJQUNsQixXQUFXLENBQWE7SUFFckUsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsVUFBVSxHQUE0QixJQUFJLENBQUM7SUFFbkMsU0FBUyxDQUFtQjtJQUM1QixNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ2pCLEtBQUssQ0FBUztJQUNkLFlBQVksQ0FBUztJQUNyQixRQUFRLEdBQVksU0FBUyxDQUFDO0lBQzlCLE9BQU8sR0FBWSxTQUFTLENBQUM7SUFDN0IsU0FBUyxD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QkFEVixLQUFLO2dCQUdDLElBQUk7c0JBRFYsS0FBSztnQkFHQyxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsR0FBRztzQkFEVCxLQUFLO2dCQUdDLEdBQUc7c0JBRFQsS0FBSztnQkFXRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNzQixTQUFTO3NCQUFwQyxLQUFLO3VCQUFDLFlBQVk7Z0JBQ0gsUUFBUTtzQkFBdkIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQW1CRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsV0FBVztzQkFEZCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQTBCSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxuICBOR19WQUxJREFUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGhhc1ZhbHVlLFxuICBpc0luaXRpYWxBbmRFbXB0eSxcbiAgaXNWYWxpZEVtYWlsLFxuICBpc1ZhbGlkTnVtYmVyLFxuICBpc1ZhbGlkUmVsYXRpdmVVcmwsXG4gIGlzVmFsaWRDb2xvcixcbiAgbm9ybWFsaXplRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJGbnMnO1xuaW1wb3J0IHsgbGFuZ3VhZ2VEZXRlY3RvciB9IGZyb20gJy4uL2xhbmcnO1xuaW1wb3J0IHsgUmVnZXhwU2VydmljZSB9IGZyb20gJy4vcmVnZXhwLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHV4LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0Q29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RleHRhcmVhJywgeyBzdGF0aWM6IGZhbHNlIH0pIHRleHRhcmVhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb2xvcnBpY2tlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjb2xvcnBpY2tlcjogRWxlbWVudFJlZjtcblxuICB0b3VjaGVkID0gZmFsc2U7XG4gIGRpcnR5ID0gZmFsc2U7XG4gIGxhc3RFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9kaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9ICcnO1xuICBwcml2YXRlIF90eXBlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhdHRlcm4/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3JlZ2V4cD86IFJlZ0V4cCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfY3VycmVuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIHVzZXJFcnJvcnMgPSB7XG4gICAgZW46IHtcbiAgICAgIHJlcXVpcmVkOiAnUmVxdWlyZWQgZmllbGQuJyxcbiAgICAgIG1pbjogJ01pbmltdW0gdmFsdWUgaXMgJG1pbi4nLFxuICAgICAgbWF4OiAnTWF4aW11bSB2YWx1ZSBpcyAkbWF4LicsXG4gICAgICBlbWFpbDogJ0Zvcm1hdCBzaG91bGQgbWF0Y2ggZXhhbXBsZUBleGFtcGxlLmNvbS4nLFxuICAgICAgdXJsOiAnRm9ybWF0IHNob3VsZCBtYXRjaCBodHRwczovL2V4YW1wbGUuY29tLicsXG4gICAgICBjb2xvcjogJ0Zvcm1hdCBzaG91bGQgbWF0Y2ggI1hYWFhYWC4nXG4gICAgfSxcbiAgICBlczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgbWluOiAnRWwgdmFsb3IgbcOtbmltbyBlcyAkbWluLicsXG4gICAgICBtYXg6ICdFbCB2YWxvciBtw6F4aW1vIGVzICRtYXguJyxcbiAgICAgIGVtYWlsOiAnRWwgY2FtcG8gZGViZSB0ZW5lciB1biBmb3JtYXRvIGNvbW8gZWplbXBsb0BlamVtcGxvLmNvbS4nLFxuICAgICAgdXJsOiAnRWwgY2FtcG8gZGViZSB0ZW5lciB1biBmb3JtYXRvIGNvbW8gaHR0cHM6Ly9lamVtcGxvLmNvbS4nLFxuICAgICAgY29sb3I6ICdFbCBjYW1wbyBkZWJlIHRlbmVyIHVuIGZvcm1hdG8gY29tbyAjWFhYWFhYLidcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIGRvbWFpbjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93cz86IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGNvbHM/OiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwPzogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluPzogbnVtYmVyIHwgc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0NsYXNzTmFtZSgpO1xuICB9XG5cbiAgZ2V0IGNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tDb2xvcigpO1xuICB9XG5cbiAgQElucHV0KCkgbGFuZyA9IGxhbmd1YWdlRGV0ZWN0b3IoKTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9ycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdiA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBhdHRlcm4ocDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGF0dGVybiA9IHA7XG4gICAgaWYgKHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcmVnZXhwID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9yZWdleHAgPSBuZXcgUmVnRXhwKHApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLl9wYXR0ZXJuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yZWdleHAgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBwYXR0ZXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdHRlcm47XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY3VycmVuY3kodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3VycmVuY3kgPSB2LnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5O1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBsYWNlaG9sZGVyKHY6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdjtcbiAgfVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIgPyB0aGlzLl9wbGFjZWhvbGRlciA6ICcnO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlcXVpcmVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHY7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0eXBlKHY6IHN0cmluZykge1xuICAgIHRoaXMuX3R5cGUgPSB2LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5kb21haW4gPSB2LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5jaGVja1R5cGUodik7XG4gIH1cbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZSA/IHRoaXMuX3R5cGUgOiAndGV4dCc7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2O1xuICAgIGlmICh2ID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGV2ZW50cyB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZXNcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbEFuZEVtcHR5ID0gaXNJbml0aWFsQW5kRW1wdHkodGhpcy5fdmFsdWUsIHYpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgdiA9IG5vcm1hbGl6ZURhdGUodik7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIHRoaXMub25DaGFuZ2Uodik7XG4gICAgaWYgKCFpbml0aWFsQW5kRW1wdHkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNQZXJjZW50YWdlKCkgfHwgdGhpcy5pc1Blcm1pbGxhZ2UoKSB8fCB0aGlzLmlzTnVtYmVyKCkpIHtcbiAgICAgIGNvbnN0IG51bVZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtVmFsKSkge1xuICAgICAgICByZXR1cm4gbnVtVmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBrZXlQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICBvbkNoYW5nZSA9ICh2YWx1ZSk6IHZvaWQgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWdleHBTZXJ2aWNlOiBSZWdleHBTZXJ2aWNlKSB7fVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zZXRWYWx1ZUluQ29udHJvbCh2YWx1ZSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgbWFya0FzVG91Y2hlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuICAvLyBFbmQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZUluQ29udHJvbCh2OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb21haW4gPT09ICdkYXRlJykge1xuICAgICAgdiA9IG5vcm1hbGl6ZURhdGUodik7XG4gICAgfVxuICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2O1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5uYXRpdmVFbGVtZW50LnZhbHVlID0gdjtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0b3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgbGV0IHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIWhhc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnJlcXVpcmVkID0geyB2YWx1ZSwgcmVhc29uOiAnUmVxdWlyZWQgZmllbGQuJyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVnZXhwICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiAhdGhpcy5fcmVnZXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucGF0dGVybiA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHJlYXNvbjogYFZhbHVlIG11c3QgZm9sbG93IHRoZSBwYXR0ZXJuOiAke3RoaXMuX3BhdHRlcm59YFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2VtYWlsJyAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIWlzVmFsaWRFbWFpbCh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5lbWFpbCA9IHsgdmFsdWUsIHJlYXNvbjogJ0ludmFsaWQgZW1haWwuJyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSAndXJsJyAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIWlzVmFsaWRSZWxhdGl2ZVVybCh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC51cmwgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIFVSTC4nIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQuY29sb3IgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIGNvbG9yLicgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ251bWJlcicgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm51bWVyaWMgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIG51bWJlci4nIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudHlwZSA9PT0gJ2RhdGUnIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICd0aW1lJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAndGltZXN0YW1wJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGhpcy5taW4gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICBTdHJpbmcodmFsdWUpLmxvY2FsZUNvbXBhcmUodGhpcy5taW4pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1pbiA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbn0uYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGhpcy5tYXggPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICBTdHJpbmcodmFsdWUpLmxvY2FsZUNvbXBhcmUodGhpcy5tYXgpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1heCA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtYXg6IHRoaXMubWF4LFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXh9LmBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnR5cGUgPT09ICdwZXJjZW50YWdlJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAncGVybWlsbGFnZScgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICkge1xuICAgICAgaWYgKGhhc1ZhbHVlKHRoaXMubWluKSAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgdmFsdWUgPCArdGhpcy5taW4pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHQubWluID0ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG1pbjogdGhpcy5taW4sXG4gICAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWlufS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoaGFzVmFsdWUodGhpcy5tYXgpICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiB2YWx1ZSA+ICt0aGlzLm1heCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdC5tYXggPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4fS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubGFzdEVycm9ycyA9IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIEVuZCBvZiBWYWxpZGF0b3IgaW50ZXJmYWNlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dElkID0gdGhpcy5pbnB1dElkXG4gICAgICA/IHRoaXMuaW5wdXRJZFxuICAgICAgOiBgJHt0aGlzLnR5cGV9JCR7SW5wdXRDb21wb25lbnQuaWRDb3VudGVyKyt9YDtcbiAgfVxuICBvbkxvc3RGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbktleVVwKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgb25DaGFuZ2VWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmlzQ29sb3IoKSkge1xuICAgICAgdGhpcy5jb2xvcnBpY2tlci5uYXRpdmVFbGVtZW50LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5rZXlQcmVzcy5lbWl0KGV2ZW50KTtcbiAgfVxuICBvbkNvbG9yUGlja2VkKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlVmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0VmFsdWVJbkNvbnRyb2wobmV3VmFsdWUpO1xuICB9XG5cbiAgaXNVcmwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3VybCc7XG4gIH1cbiAgaXNDb2xvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnY29sb3InO1xuICB9XG4gIGlzTnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdudW1iZXInO1xuICB9XG4gIGlzUGVyY2VudGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAncGVyY2VudGFnZSc7XG4gIH1cbiAgaXNQZXJtaWxsYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdwZXJtaWxsYWdlJztcbiAgfVxuICBoYXNQcmVmaXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3kgPT09ICdVU0QnO1xuICB9XG4gIGhhc1Bvc3RmaXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VycmVuY3kgPT09ICdFVVInIHx8XG4gICAgICB0aGlzLmlzUGVyY2VudGFnZSgpIHx8XG4gICAgICB0aGlzLmlzUGVybWlsbGFnZSgpIHx8XG4gICAgICAodGhpcy5pc1VybCgpICYmICEhdGhpcy52YWx1ZSkgfHxcbiAgICAgIHRoaXMuaXNDb2xvcigpXG4gICAgKTtcbiAgfVxuXG4gIGNoZWNrQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRcbiAgICAgID8gdGhpcy5yZWFkb25seVxuICAgICAgICA/ICdkaXNhYmxlZCByZWFkb25seSdcbiAgICAgICAgOiAnZGlzYWJsZWQnXG4gICAgICA6IHRoaXMucmVhZG9ubHlcbiAgICAgID8gJ3JlYWRvbmx5J1xuICAgICAgOiAnJztcbiAgfVxuXG4gIGNoZWNrQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnY29sb3InICYmIGlzVmFsaWRDb2xvcih0aGlzLnZhbHVlKVxuICAgICAgPyB0aGlzLnZhbHVlXG4gICAgICA6ICdpbml0aWFsJztcbiAgfVxuXG4gIGNoZWNrVHlwZSh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgdGhpcy5zZXRFbWFpbFBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgdGhpcy5zZXRVcmxQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgdGhpcy5zZXRDb2xvclBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHRoaXMuc2V0RGF0ZVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgIHRoaXMuc2V0VGltZVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICB0aGlzLnNldFBhc3N3b3JkUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB0aGlzLnNldE51bWJlclBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICB0aGlzLnNldEN1cnJlbmN5UGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgdGhpcy5zZXRQZXJjZW50YWdlUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZXJtaWxsYWdlJzpcbiAgICAgICAgdGhpcy5zZXRQZXJtaWxsYWdlUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRFbWFpbFBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXRVcmxQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0Q29sb3JQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICd0ZXh0JztcbiAgfVxuXG4gIHNldERhdGVQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8ICcxOTAwLTAxLTAxJztcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8ICcyMTAwLTAxLTAxJztcbiAgfVxuXG4gIHNldFRpbWVQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0UGFzc3dvcmRQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0TnVtYmVyUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAnO1xuICB9XG5cbiAgc2V0Q3VycmVuY3lQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjE7XG4gICAgdGhpcy5taW4gPSB0aGlzLm1pbiB8fCAwLjA7XG4gICAgdGhpcy5tYXggPSB0aGlzLm1heCB8fCAxMDAwMC4wO1xuICAgIHRoaXMudmFsdWUgPSAwLjA7XG4gIH1cblxuICBzZXRQZXJjZW50YWdlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMC4wO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMC4wMCc7XG4gIH1cblxuICBzZXRQZXJtaWxsYWdlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMDAuMDtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAuMDAnO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiY3VycmVuY3kgJiYgY3VycmVuY3kgPT09ICdVU0QnXCIgY2xhc3M9XCJwcmVmaXggcm91bmRlZC1sZWZ0IHN5bWJvbFwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8c3Bhbj4kPC9zcGFuPlxuPC9kaXY+XG48aW5wdXRcbiAgI2lucHV0XG4gICpuZ0lmPVwidHlwZSAhPT0gJ3RleHRhcmVhJ1wiXG4gIFtjbGFzc109XCJoYXNQcmVmaXgoKSA/IChoYXNQb3N0Zml4KCkgPyAnaW5maXgnIDogJ3Bvc3RmaXggcm91bmRlZC1yaWdodCcpIDogKGhhc1Bvc3RmaXgoKSA/ICdwcmVmaXggcm91bmRlZC1sZWZ0JyA6ICdyb3VuZGVkJylcIlxuICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxuICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICBbaWRdPVwiaW5wdXRJZFwiXG4gIFt0eXBlXT1cImRvbWFpblwiXG4gIFthdHRyLnZhbHVlXT1cInZhbHVlXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIubWluXT1cIm1pbj8udG9TdHJpbmcoKSB8fCB1bmRlZmluZWRcIlxuICBbYXR0ci5tYXhdPVwibWF4Py50b1N0cmluZygpIHx8IHVuZGVmaW5lZFwiXG4gIFthdHRyLnN0ZXBdPVwic3RlcD8udG9TdHJpbmcoKSB8fCB1bmRlZmluZWRcIlxuICBbYXR0ci5wYXR0ZXJuXT1cInBhdHRlcm4gfHwgdW5kZWZpbmVkXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgKGtleXVwKT1cIm9uS2V5VXAoaW5wdXQudmFsdWUpXCJcbiAgKGNoYW5nZSk9XCJvbkNoYW5nZVZhbHVlKGlucHV0LnZhbHVlKVwiXG4gIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAoYmx1cik9XCJvbkxvc3RGb2N1cygpXCJcbi8+XG48dGV4dGFyZWFcbiAgI3RleHRhcmVhXG4gICpuZ0lmPVwidHlwZSA9PT0gJ3RleHRhcmVhJ1wiXG4gIGNsYXNzPVwicm91bmRlZFwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIHBsYWNlbWVudD1cInRvcFwiXG4gIFtpZF09XCJpbnB1dElkXCJcbiAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5jb2xzXT1cImNvbHM/LnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkXCJcbiAgW2F0dHIucm93c109XCJyb3dzPy50b1N0cmluZygpIHx8IHVuZGVmaW5lZFwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIChrZXl1cCk9XCJvbktleVVwKHRleHRhcmVhLnZhbHVlKVwiXG4gIChjaGFuZ2UpPVwib25DaGFuZ2VWYWx1ZSh0ZXh0YXJlYS52YWx1ZSlcIlxuICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcbiAgKGJsdXIpPVwib25Mb3N0Rm9jdXMoKVwiXG4+PC90ZXh0YXJlYT5cbjxkaXYgKm5nSWY9XCJjdXJyZW5jeSAmJiBjdXJyZW5jeSA9PT0gJ0VVUidcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBzeW1ib2xcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPHNwYW4+4oKsPC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNQZXJjZW50YWdlKClcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBzeW1ib2xcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPHNwYW4+JTwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzUGVybWlsbGFnZSgpXCIgY2xhc3M9XCJwb3N0Zml4IHJvdW5kZWQtcmlnaHQgc3ltYm9sXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxzcGFuPuKAsDwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzVXJsKCkgJiYgISF2YWx1ZVwiIGNsYXNzPVwicG9zdGZpeCByb3VuZGVkLXJpZ2h0IHN5bWJvbCBjbGlja2FibGVcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGEgaHJlZj1cInt7IHZhbHVlIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJpY29uLWV4dGVybmFsXCI+PC9zcGFuPlxuICA8L2E+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc0NvbG9yKClcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBib3JkZXJlZCB0cmFuc3BhcmVuY3lcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGRpdiBjbGFzcz1cInJvdW5kZWQtcmlnaHQgZnVsbC1zcGFjZVwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGNvbG9yfVwiPlxuICAgIDxpbnB1dFxuICAgICAgI2NvbG9ycGlja2VyXG4gICAgICBjbGFzcz1cIm1pbmltYWwtc3BhY2UgY2xpY2thYmxlIGludmlzaWJsZSByb3VuZGVkLXJpZ2h0IGZ1bGwtc3BhY2VcIlxuICAgICAgW2lkXT1cImlucHV0SWQgKyAnJGNvbG9ycGlja2VyJ1wiXG4gICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNvbG9yUGlja2VkKGNvbG9ycGlja2VyLnZhbHVlKVwiXG4gICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uTG9zdEZvY3VzKClcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJpbmxpbmVFcnJvcnMgJiYgbGFzdEVycm9ycyAmJiAoZGlydHkgfHwgdG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0XCI+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLnJlcXVpcmVkXCI+XG4gICAge3sgdXNlckVycm9yc1t0aGlzLmxhbmddLnJlcXVpcmVkIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy5lbWFpbFwiPnt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS5lbWFpbCB9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy51cmxcIj57eyB1c2VyRXJyb3JzW3RoaXMubGFuZ10udXJsIH19PC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLm1pblwiPlxuICAgIHt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS5taW4ucmVwbGFjZSgnJG1pbicsIGxhc3RFcnJvcnMubWluLm1pbikgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLm1heFwiPlxuICAgIHt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS5tYXgucmVwbGFjZSgnJG1heCcsIGxhc3RFcnJvcnMubWF4Lm1heCkgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
1
+ import { Component, Input, Output, EventEmitter, ElementRef, ViewChild, forwardRef } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
+ import { hasValue, isInitialAndEmpty, isValidEmail, isValidNumber, isValidRelativeUrl, isValidColor, normalizeDate } from '../helperFns';
4
+ import { languageDetector } from '../lang';
5
+ import { RegexpService } from './regexp.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./regexp.service";
8
+ import * as i2 from "@angular/common";
9
+ export class InputComponent {
10
+ regexpService;
11
+ static idCounter = 0;
12
+ input;
13
+ textarea;
14
+ colorpicker;
15
+ touched = false;
16
+ dirty = false;
17
+ lastErrors = null;
18
+ _disabled;
19
+ _value = '';
20
+ _type;
21
+ _placeholder;
22
+ _pattern = undefined;
23
+ _regexp = undefined;
24
+ _currency;
25
+ _required;
26
+ userErrors = {
27
+ en: {
28
+ required: 'Required field.',
29
+ min: 'Minimum value is $min.',
30
+ max: 'Maximum value is $max.',
31
+ email: 'Format should match example@example.com.',
32
+ url: 'Format should match https://example.com.',
33
+ color: 'Format should match #XXXXXX.'
34
+ },
35
+ es: {
36
+ required: 'El campo es obligatorio.',
37
+ min: 'El valor mínimo es $min.',
38
+ max: 'El valor máximo es $max.',
39
+ email: 'El campo debe tener un formato como ejemplo@ejemplo.com.',
40
+ url: 'El campo debe tener un formato como https://ejemplo.com.',
41
+ color: 'El campo debe tener un formato como #XXXXXX.'
42
+ }
43
+ };
44
+ domain;
45
+ rows;
46
+ cols;
47
+ step;
48
+ min;
49
+ max;
50
+ get className() {
51
+ return this.checkClassName();
52
+ }
53
+ get color() {
54
+ return this.checkColor();
55
+ }
56
+ lang = languageDetector();
57
+ inlineErrors = false;
58
+ inputId;
59
+ ariaLabel;
60
+ readonly = null;
61
+ set disabled(v) {
62
+ v = typeof v === 'string' ? true : v;
63
+ this._disabled = v;
64
+ }
65
+ get disabled() {
66
+ return this._disabled;
67
+ }
68
+ set pattern(p) {
69
+ this._pattern = p;
70
+ if (p === undefined) {
71
+ this._regexp = undefined;
72
+ }
73
+ else {
74
+ try {
75
+ this._regexp = new RegExp(p);
76
+ }
77
+ catch (e) {
78
+ this._pattern = undefined;
79
+ this._regexp = undefined;
80
+ }
81
+ }
82
+ }
83
+ get pattern() {
84
+ return this._pattern;
85
+ }
86
+ set currency(v) {
87
+ this._currency = v.toUpperCase();
88
+ }
89
+ get currency() {
90
+ return this._currency;
91
+ }
92
+ set placeholder(v) {
93
+ this._placeholder = v;
94
+ }
95
+ get placeholder() {
96
+ return this._placeholder ? this._placeholder : '';
97
+ }
98
+ set required(v) {
99
+ this._required = v;
100
+ }
101
+ get required() {
102
+ return this._required;
103
+ }
104
+ set type(v) {
105
+ this._type = v.toLowerCase();
106
+ this.domain = v.toLowerCase();
107
+ this.checkType(v);
108
+ }
109
+ get type() {
110
+ return this._type ? this._type : 'text';
111
+ }
112
+ set value(v) {
113
+ v = v === undefined ? null : v;
114
+ if (v === this._value) {
115
+ return; // prevent events when there is no changes
116
+ }
117
+ const initialAndEmpty = isInitialAndEmpty(this._value, v);
118
+ if (this.type === 'date') {
119
+ v = normalizeDate(v);
120
+ }
121
+ this._value = v;
122
+ this.onChange(v);
123
+ if (!initialAndEmpty) {
124
+ this.valueChange.emit(v);
125
+ }
126
+ }
127
+ get value() {
128
+ if (this.isPercentage() || this.isPermillage() || this.isNumber()) {
129
+ const numVal = parseFloat(this._value);
130
+ if (!Number.isNaN(numVal)) {
131
+ return numVal;
132
+ }
133
+ }
134
+ return this._value;
135
+ }
136
+ valueChange = new EventEmitter();
137
+ keyPress = new EventEmitter();
138
+ onChange = (value) => { };
139
+ onTouched = () => { };
140
+ constructor(regexpService) {
141
+ this.regexpService = regexpService;
142
+ }
143
+ // ControlValueAccessor Interface implementation
144
+ writeValue(value) {
145
+ this.value = value;
146
+ this.setValueInControl(value);
147
+ }
148
+ registerOnChange(onChange) {
149
+ this.onChange = onChange;
150
+ }
151
+ registerOnTouched(onTouched) {
152
+ this.onTouched = onTouched;
153
+ }
154
+ markAsTouched() {
155
+ if (!this.touched) {
156
+ this.onTouched();
157
+ this.touched = true;
158
+ }
159
+ }
160
+ setDisabledState(disabled) {
161
+ this.disabled = disabled;
162
+ }
163
+ // End of ControlValueAccessor Interface implementation
164
+ setValueInControl(v) {
165
+ if (this.domain === 'date') {
166
+ v = normalizeDate(v);
167
+ }
168
+ if (this.input) {
169
+ this.input.nativeElement.value = v;
170
+ }
171
+ if (this.textarea) {
172
+ this.textarea.nativeElement.value = v;
173
+ }
174
+ }
175
+ // Validator interface
176
+ registerOnValidatorChange() { }
177
+ validate(control) {
178
+ const value = control.value;
179
+ let result = null;
180
+ if (this.required && !hasValue(value)) {
181
+ result = result || {};
182
+ result.required = { value, reason: 'Required field.' };
183
+ }
184
+ if (this._regexp && hasValue(value) && !this._regexp.test(value)) {
185
+ result = result || {};
186
+ result.pattern = {
187
+ value,
188
+ reason: `Value must follow the pattern: ${this._pattern}`
189
+ };
190
+ }
191
+ if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {
192
+ result = result || {};
193
+ result.email = { value, reason: 'Invalid email.' };
194
+ }
195
+ if (this.type === 'url' && hasValue(value) && !isValidRelativeUrl(value)) {
196
+ result = result || {};
197
+ result.url = { value, reason: 'Invalid URL.' };
198
+ }
199
+ if (this.type === 'color' && hasValue(value) && !isValidColor(value)) {
200
+ result = result || {};
201
+ result.color = { value, reason: 'Invalid color.' };
202
+ }
203
+ if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {
204
+ result = result || {};
205
+ result.numeric = { value, reason: 'Invalid number.' };
206
+ }
207
+ if (this.type === 'date' ||
208
+ this.type === 'time' ||
209
+ this.type === 'timestamp') {
210
+ if (typeof this.min === 'string' &&
211
+ hasValue(value) &&
212
+ String(value).localeCompare(this.min) === -1) {
213
+ result = result || {};
214
+ result.min = {
215
+ value,
216
+ min: this.min,
217
+ reason: `Value is lower than minimum value: ${this.min}.`
218
+ };
219
+ }
220
+ if (typeof this.max === 'string' &&
221
+ hasValue(value) &&
222
+ String(value).localeCompare(this.max) !== -1) {
223
+ result = result || {};
224
+ result.max = {
225
+ value,
226
+ max: this.max,
227
+ reason: `Value is greater than than maximum value: ${this.max}.`
228
+ };
229
+ }
230
+ }
231
+ if (this.type === 'percentage' ||
232
+ this.type === 'permillage' ||
233
+ this.type === 'number' ||
234
+ this.type === 'currency') {
235
+ if (hasValue(this.min) && hasValue(value) && value < +this.min) {
236
+ result = result || {};
237
+ result.min = {
238
+ value,
239
+ min: this.min,
240
+ reason: `Value is lower than minimum value: ${this.min}.`
241
+ };
242
+ }
243
+ if (hasValue(this.max) && hasValue(value) && value > +this.max) {
244
+ result = result || {};
245
+ result.max = {
246
+ value,
247
+ max: this.max,
248
+ reason: `Value is greater than than maximum value: ${this.max}.`
249
+ };
250
+ }
251
+ }
252
+ this.lastErrors = result;
253
+ return result;
254
+ }
255
+ // End of Validator interface
256
+ ngOnInit() {
257
+ this.inputId = this.inputId
258
+ ? this.inputId
259
+ : `${this.type}$${InputComponent.idCounter++}`;
260
+ }
261
+ onLostFocus() {
262
+ this.markAsTouched();
263
+ }
264
+ onKeyUp(newValue) {
265
+ this.value = newValue;
266
+ }
267
+ onChangeValue(newValue) {
268
+ this.value = newValue;
269
+ if (this.isColor()) {
270
+ this.colorpicker.nativeElement.value = undefined;
271
+ }
272
+ this.markAsTouched();
273
+ }
274
+ onKeyPress(event) {
275
+ this.keyPress.emit(event);
276
+ }
277
+ onColorPicked(newValue) {
278
+ this.onChangeValue(newValue);
279
+ this.setValueInControl(newValue);
280
+ }
281
+ isUrl() {
282
+ return this.type === 'url';
283
+ }
284
+ isColor() {
285
+ return this.type === 'color';
286
+ }
287
+ isNumber() {
288
+ return this.type === 'number';
289
+ }
290
+ isPercentage() {
291
+ return this.type === 'percentage';
292
+ }
293
+ isPermillage() {
294
+ return this.type === 'permillage';
295
+ }
296
+ hasPrefix() {
297
+ return this.currency === 'USD';
298
+ }
299
+ hasPostfix() {
300
+ return (this.currency === 'EUR' ||
301
+ this.isPercentage() ||
302
+ this.isPermillage() ||
303
+ (this.isUrl() && !!this.value) ||
304
+ this.isColor());
305
+ }
306
+ checkClassName() {
307
+ return this.disabled
308
+ ? this.readonly
309
+ ? 'disabled readonly'
310
+ : 'disabled'
311
+ : this.readonly
312
+ ? 'readonly'
313
+ : '';
314
+ }
315
+ checkColor() {
316
+ return this.type === 'color' && isValidColor(this.value)
317
+ ? this.value
318
+ : 'initial';
319
+ }
320
+ checkType(type) {
321
+ switch (type) {
322
+ case 'email':
323
+ this.setEmailPatterns();
324
+ break;
325
+ case 'url':
326
+ this.setUrlPatterns();
327
+ break;
328
+ case 'color':
329
+ this.setColorPatterns();
330
+ break;
331
+ case 'date':
332
+ this.setDatePatterns();
333
+ break;
334
+ case 'time':
335
+ this.setTimePatterns();
336
+ break;
337
+ case 'password':
338
+ this.setPasswordPatterns();
339
+ break;
340
+ case 'number':
341
+ this.setNumberPatterns();
342
+ break;
343
+ case 'currency':
344
+ this.setCurrencyPatterns();
345
+ break;
346
+ case 'percentage':
347
+ this.setPercentagePatterns();
348
+ break;
349
+ case 'permillage':
350
+ this.setPermillagePatterns();
351
+ break;
352
+ default:
353
+ break;
354
+ }
355
+ }
356
+ setEmailPatterns() { }
357
+ setUrlPatterns() { }
358
+ setColorPatterns() {
359
+ this.domain = 'text';
360
+ }
361
+ setDatePatterns() {
362
+ this.min = this.min || '1900-01-01';
363
+ this.max = this.max || '2100-01-01';
364
+ }
365
+ setTimePatterns() { }
366
+ setPasswordPatterns() { }
367
+ setNumberPatterns() {
368
+ this.domain = 'number';
369
+ this.placeholder = '0';
370
+ }
371
+ setCurrencyPatterns() {
372
+ this.domain = 'number';
373
+ this.step = this.step || 0.1;
374
+ this.min = this.min || 0.0;
375
+ this.max = this.max || 10000.0;
376
+ this.value = 0.0;
377
+ }
378
+ setPercentagePatterns() {
379
+ this.domain = 'number';
380
+ this.step = this.step || 0.01;
381
+ this.min = this.min || 0.0;
382
+ this.max = this.max || 100.0;
383
+ this.placeholder = '0.00';
384
+ }
385
+ setPermillagePatterns() {
386
+ this.domain = 'number';
387
+ this.step = this.step || 0.01;
388
+ this.min = this.min || 0.0;
389
+ this.max = this.max || 1000.0;
390
+ this.placeholder = '0.00';
391
+ }
392
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: InputComponent, deps: [{ token: i1.RegexpService }], target: i0.ɵɵFactoryTarget.Component });
393
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: InputComponent, selector: "lux-input", inputs: { rows: "rows", cols: "cols", step: "step", min: "min", max: "max", lang: "lang", inlineErrors: "inlineErrors", inputId: "inputId", ariaLabel: ["aria-label", "ariaLabel"], readonly: "readonly", disabled: "disabled", pattern: "pattern", currency: "currency", placeholder: "placeholder", required: "required", type: "type", value: "value" }, outputs: { valueChange: "valueChange", keyPress: "keyPress" }, providers: [
394
+ {
395
+ provide: NG_VALUE_ACCESSOR,
396
+ multi: true,
397
+ useExisting: forwardRef(() => InputComponent)
398
+ },
399
+ {
400
+ provide: NG_VALIDATORS,
401
+ multi: true,
402
+ useExisting: forwardRef(() => InputComponent)
403
+ }
404
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "textarea", first: true, predicate: ["textarea"], descendants: true }, { propertyName: "colorpicker", first: true, predicate: ["colorpicker"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u2030</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:var(--lux-input-margin, 0rem);padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:var(--lux-alert-background, #fe2e2e);color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:var(--lux-symbol-background, default);font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch;min-height:1.5rem}input[type=color]{min-height:100%;height:0}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:var(--lux-disabled-color, #f1f1f1);border-color:var(--lux-disabled-border-color, #6d6d6d)}.clickable{cursor:pointer}.full-space{width:100%;height:100%;margin:0;border:0;padding:0}.minimal-space,.icon,.icon-external{min-width:1rem;min-height:1rem}.icon,.icon-external{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.icon-external{background:var(--lux-input-icon-external, url(/assets/img/external.svg) no-repeat center);background-size:1rem;background-position-y:.1rem;height:100%}.invisible{opacity:0}.transparency{background-image:conic-gradient(white 0deg 90deg,lightgray 90deg 180deg,white 180deg 270deg,lightgray 270deg 360deg)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
405
+ }
406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: InputComponent, decorators: [{
407
+ type: Component,
408
+ args: [{ selector: 'lux-input', providers: [
409
+ {
410
+ provide: NG_VALUE_ACCESSOR,
411
+ multi: true,
412
+ useExisting: forwardRef(() => InputComponent)
413
+ },
414
+ {
415
+ provide: NG_VALIDATORS,
416
+ multi: true,
417
+ useExisting: forwardRef(() => InputComponent)
418
+ }
419
+ ], template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u2030</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:var(--lux-input-margin, 0rem);padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:var(--lux-alert-background, #fe2e2e);color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:var(--lux-symbol-background, default);font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch;min-height:1.5rem}input[type=color]{min-height:100%;height:0}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:var(--lux-disabled-color, #f1f1f1);border-color:var(--lux-disabled-border-color, #6d6d6d)}.clickable{cursor:pointer}.full-space{width:100%;height:100%;margin:0;border:0;padding:0}.minimal-space,.icon,.icon-external{min-width:1rem;min-height:1rem}.icon,.icon-external{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.icon-external{background:var(--lux-input-icon-external, url(/assets/img/external.svg) no-repeat center);background-size:1rem;background-position-y:.1rem;height:100%}.invisible{opacity:0}.transparency{background-image:conic-gradient(white 0deg 90deg,lightgray 90deg 180deg,white 180deg 270deg,lightgray 270deg 360deg)}\n"] }]
420
+ }], ctorParameters: () => [{ type: i1.RegexpService }], propDecorators: { input: [{
421
+ type: ViewChild,
422
+ args: ['input', { static: false }]
423
+ }], textarea: [{
424
+ type: ViewChild,
425
+ args: ['textarea', { static: false }]
426
+ }], colorpicker: [{
427
+ type: ViewChild,
428
+ args: ['colorpicker', { static: false }]
429
+ }], rows: [{
430
+ type: Input
431
+ }], cols: [{
432
+ type: Input
433
+ }], step: [{
434
+ type: Input
435
+ }], min: [{
436
+ type: Input
437
+ }], max: [{
438
+ type: Input
439
+ }], lang: [{
440
+ type: Input
441
+ }], inlineErrors: [{
442
+ type: Input
443
+ }], inputId: [{
444
+ type: Input
445
+ }], ariaLabel: [{
446
+ type: Input,
447
+ args: ['aria-label']
448
+ }], readonly: [{
449
+ type: Input
450
+ }], disabled: [{
451
+ type: Input
452
+ }], pattern: [{
453
+ type: Input
454
+ }], currency: [{
455
+ type: Input
456
+ }], placeholder: [{
457
+ type: Input
458
+ }], required: [{
459
+ type: Input
460
+ }], type: [{
461
+ type: Input
462
+ }], value: [{
463
+ type: Input
464
+ }], valueChange: [{
465
+ type: Output
466
+ }], keyPress: [{
467
+ type: Output
468
+ }] } });
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBS2pCLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixhQUFhLEVBQ2QsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQWtCakQsTUFBTSxPQUFPLGNBQWM7SUE4Sk47SUE3Sm5CLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWtCLEtBQUssQ0FBYTtJQUNmLFFBQVEsQ0FBYTtJQUNsQixXQUFXLENBQWE7SUFFckUsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsVUFBVSxHQUE0QixJQUFJLENBQUM7SUFFbkMsU0FBUyxDQUFtQjtJQUM1QixNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ2pCLEtBQUssQ0FBUztJQUNkLFlBQVksQ0FBUztJQUNyQixRQUFRLEdBQVksU0FBUyxDQUFDO0lBQzlCLE9BQU8sR0FBWSxTQUFTLENBQUM7SUFDN0IsU0FBUyxD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QkFEVixLQUFLO2dCQUdDLElBQUk7c0JBRFYsS0FBSztnQkFHQyxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsR0FBRztzQkFEVCxLQUFLO2dCQUdDLEdBQUc7c0JBRFQsS0FBSztnQkFXRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNzQixTQUFTO3NCQUFwQyxLQUFLO3VCQUFDLFlBQVk7Z0JBQ0gsUUFBUTtzQkFBdkIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQW1CRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsV0FBVztzQkFEZCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQTBCSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxuICBOR19WQUxJREFUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGhhc1ZhbHVlLFxuICBpc0luaXRpYWxBbmRFbXB0eSxcbiAgaXNWYWxpZEVtYWlsLFxuICBpc1ZhbGlkTnVtYmVyLFxuICBpc1ZhbGlkUmVsYXRpdmVVcmwsXG4gIGlzVmFsaWRDb2xvcixcbiAgbm9ybWFsaXplRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJGbnMnO1xuaW1wb3J0IHsgbGFuZ3VhZ2VEZXRlY3RvciB9IGZyb20gJy4uL2xhbmcnO1xuaW1wb3J0IHsgUmVnZXhwU2VydmljZSB9IGZyb20gJy4vcmVnZXhwLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHV4LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0Q29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RleHRhcmVhJywgeyBzdGF0aWM6IGZhbHNlIH0pIHRleHRhcmVhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb2xvcnBpY2tlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjb2xvcnBpY2tlcjogRWxlbWVudFJlZjtcblxuICB0b3VjaGVkID0gZmFsc2U7XG4gIGRpcnR5ID0gZmFsc2U7XG4gIGxhc3RFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9kaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9ICcnO1xuICBwcml2YXRlIF90eXBlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhdHRlcm4/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3JlZ2V4cD86IFJlZ0V4cCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfY3VycmVuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIHVzZXJFcnJvcnMgPSB7XG4gICAgZW46IHtcbiAgICAgIHJlcXVpcmVkOiAnUmVxdWlyZWQgZmllbGQuJyxcbiAgICAgIG1pbjogJ01pbmltdW0gdmFsdWUgaXMgJG1pbi4nLFxuICAgICAgbWF4OiAnTWF4aW11bSB2YWx1ZSBpcyAkbWF4LicsXG4gICAgICBlbWFpbDogJ0Zvcm1hdCBzaG91bGQgbWF0Y2ggZXhhbXBsZUBleGFtcGxlLmNvbS4nLFxuICAgICAgdXJsOiAnRm9ybWF0IHNob3VsZCBtYXRjaCBodHRwczovL2V4YW1wbGUuY29tLicsXG4gICAgICBjb2xvcjogJ0Zvcm1hdCBzaG91bGQgbWF0Y2ggI1hYWFhYWC4nXG4gICAgfSxcbiAgICBlczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgbWluOiAnRWwgdmFsb3IgbcOtbmltbyBlcyAkbWluLicsXG4gICAgICBtYXg6ICdFbCB2YWxvciBtw6F4aW1vIGVzICRtYXguJyxcbiAgICAgIGVtYWlsOiAnRWwgY2FtcG8gZGViZSB0ZW5lciB1biBmb3JtYXRvIGNvbW8gZWplbXBsb0BlamVtcGxvLmNvbS4nLFxuICAgICAgdXJsOiAnRWwgY2FtcG8gZGViZSB0ZW5lciB1biBmb3JtYXRvIGNvbW8gaHR0cHM6Ly9lamVtcGxvLmNvbS4nLFxuICAgICAgY29sb3I6ICdFbCBjYW1wbyBkZWJlIHRlbmVyIHVuIGZvcm1hdG8gY29tbyAjWFhYWFhYLidcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIGRvbWFpbjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93cz86IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGNvbHM/OiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwPzogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluPzogbnVtYmVyIHwgc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0NsYXNzTmFtZSgpO1xuICB9XG5cbiAgZ2V0IGNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tDb2xvcigpO1xuICB9XG5cbiAgQElucHV0KCkgbGFuZyA9IGxhbmd1YWdlRGV0ZWN0b3IoKTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9ycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdiA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBhdHRlcm4ocDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGF0dGVybiA9IHA7XG4gICAgaWYgKHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcmVnZXhwID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9yZWdleHAgPSBuZXcgUmVnRXhwKHApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLl9wYXR0ZXJuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yZWdleHAgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBwYXR0ZXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdHRlcm47XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY3VycmVuY3kodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3VycmVuY3kgPSB2LnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5O1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBsYWNlaG9sZGVyKHY6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdjtcbiAgfVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIgPyB0aGlzLl9wbGFjZWhvbGRlciA6ICcnO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlcXVpcmVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHY7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0eXBlKHY6IHN0cmluZykge1xuICAgIHRoaXMuX3R5cGUgPSB2LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5kb21haW4gPSB2LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5jaGVja1R5cGUodik7XG4gIH1cbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZSA/IHRoaXMuX3R5cGUgOiAndGV4dCc7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2O1xuICAgIGlmICh2ID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGV2ZW50cyB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZXNcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbEFuZEVtcHR5ID0gaXNJbml0aWFsQW5kRW1wdHkodGhpcy5fdmFsdWUsIHYpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgdiA9IG5vcm1hbGl6ZURhdGUodik7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIHRoaXMub25DaGFuZ2Uodik7XG4gICAgaWYgKCFpbml0aWFsQW5kRW1wdHkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNQZXJjZW50YWdlKCkgfHwgdGhpcy5pc1Blcm1pbGxhZ2UoKSB8fCB0aGlzLmlzTnVtYmVyKCkpIHtcbiAgICAgIGNvbnN0IG51bVZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtVmFsKSkge1xuICAgICAgICByZXR1cm4gbnVtVmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBrZXlQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICBvbkNoYW5nZSA9ICh2YWx1ZSk6IHZvaWQgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWdleHBTZXJ2aWNlOiBSZWdleHBTZXJ2aWNlKSB7fVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zZXRWYWx1ZUluQ29udHJvbCh2YWx1ZSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgbWFya0FzVG91Y2hlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuICAvLyBFbmQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZUluQ29udHJvbCh2OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb21haW4gPT09ICdkYXRlJykge1xuICAgICAgdiA9IG5vcm1hbGl6ZURhdGUodik7XG4gICAgfVxuICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2O1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5uYXRpdmVFbGVtZW50LnZhbHVlID0gdjtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0b3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgbGV0IHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIWhhc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnJlcXVpcmVkID0geyB2YWx1ZSwgcmVhc29uOiAnUmVxdWlyZWQgZmllbGQuJyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVnZXhwICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiAhdGhpcy5fcmVnZXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucGF0dGVybiA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHJlYXNvbjogYFZhbHVlIG11c3QgZm9sbG93IHRoZSBwYXR0ZXJuOiAke3RoaXMuX3BhdHRlcm59YFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2VtYWlsJyAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIWlzVmFsaWRFbWFpbCh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5lbWFpbCA9IHsgdmFsdWUsIHJlYXNvbjogJ0ludmFsaWQgZW1haWwuJyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSAndXJsJyAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIWlzVmFsaWRSZWxhdGl2ZVVybCh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC51cmwgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIFVSTC4nIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQuY29sb3IgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIGNvbG9yLicgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ251bWJlcicgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm51bWVyaWMgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIG51bWJlci4nIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudHlwZSA9PT0gJ2RhdGUnIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICd0aW1lJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAndGltZXN0YW1wJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGhpcy5taW4gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICBTdHJpbmcodmFsdWUpLmxvY2FsZUNvbXBhcmUodGhpcy5taW4pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1pbiA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbn0uYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGhpcy5tYXggPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICBTdHJpbmcodmFsdWUpLmxvY2FsZUNvbXBhcmUodGhpcy5tYXgpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1heCA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtYXg6IHRoaXMubWF4LFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXh9LmBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnR5cGUgPT09ICdwZXJjZW50YWdlJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAncGVybWlsbGFnZScgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICkge1xuICAgICAgaWYgKGhhc1ZhbHVlKHRoaXMubWluKSAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgdmFsdWUgPCArdGhpcy5taW4pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHQubWluID0ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG1pbjogdGhpcy5taW4sXG4gICAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWlufS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoaGFzVmFsdWUodGhpcy5tYXgpICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiB2YWx1ZSA+ICt0aGlzLm1heCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdC5tYXggPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4fS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubGFzdEVycm9ycyA9IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIEVuZCBvZiBWYWxpZGF0b3IgaW50ZXJmYWNlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dElkID0gdGhpcy5pbnB1dElkXG4gICAgICA/IHRoaXMuaW5wdXRJZFxuICAgICAgOiBgJHt0aGlzLnR5cGV9JCR7SW5wdXRDb21wb25lbnQuaWRDb3VudGVyKyt9YDtcbiAgfVxuICBvbkxvc3RGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbktleVVwKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgb25DaGFuZ2VWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmlzQ29sb3IoKSkge1xuICAgICAgdGhpcy5jb2xvcnBpY2tlci5uYXRpdmVFbGVtZW50LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5rZXlQcmVzcy5lbWl0KGV2ZW50KTtcbiAgfVxuICBvbkNvbG9yUGlja2VkKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlVmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0VmFsdWVJbkNvbnRyb2wobmV3VmFsdWUpO1xuICB9XG5cbiAgaXNVcmwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3VybCc7XG4gIH1cbiAgaXNDb2xvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnY29sb3InO1xuICB9XG4gIGlzTnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdudW1iZXInO1xuICB9XG4gIGlzUGVyY2VudGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAncGVyY2VudGFnZSc7XG4gIH1cbiAgaXNQZXJtaWxsYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdwZXJtaWxsYWdlJztcbiAgfVxuICBoYXNQcmVmaXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3kgPT09ICdVU0QnO1xuICB9XG4gIGhhc1Bvc3RmaXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VycmVuY3kgPT09ICdFVVInIHx8XG4gICAgICB0aGlzLmlzUGVyY2VudGFnZSgpIHx8XG4gICAgICB0aGlzLmlzUGVybWlsbGFnZSgpIHx8XG4gICAgICAodGhpcy5pc1VybCgpICYmICEhdGhpcy52YWx1ZSkgfHxcbiAgICAgIHRoaXMuaXNDb2xvcigpXG4gICAgKTtcbiAgfVxuXG4gIGNoZWNrQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRcbiAgICAgID8gdGhpcy5yZWFkb25seVxuICAgICAgICA/ICdkaXNhYmxlZCByZWFkb25seSdcbiAgICAgICAgOiAnZGlzYWJsZWQnXG4gICAgICA6IHRoaXMucmVhZG9ubHlcbiAgICAgID8gJ3JlYWRvbmx5J1xuICAgICAgOiAnJztcbiAgfVxuXG4gIGNoZWNrQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnY29sb3InICYmIGlzVmFsaWRDb2xvcih0aGlzLnZhbHVlKVxuICAgICAgPyB0aGlzLnZhbHVlXG4gICAgICA6ICdpbml0aWFsJztcbiAgfVxuXG4gIGNoZWNrVHlwZSh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgdGhpcy5zZXRFbWFpbFBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgdGhpcy5zZXRVcmxQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgdGhpcy5zZXRDb2xvclBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHRoaXMuc2V0RGF0ZVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgIHRoaXMuc2V0VGltZVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICB0aGlzLnNldFBhc3N3b3JkUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB0aGlzLnNldE51bWJlclBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICB0aGlzLnNldEN1cnJlbmN5UGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgdGhpcy5zZXRQZXJjZW50YWdlUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZXJtaWxsYWdlJzpcbiAgICAgICAgdGhpcy5zZXRQZXJtaWxsYWdlUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRFbWFpbFBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXRVcmxQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0Q29sb3JQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICd0ZXh0JztcbiAgfVxuXG4gIHNldERhdGVQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8ICcxOTAwLTAxLTAxJztcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8ICcyMTAwLTAxLTAxJztcbiAgfVxuXG4gIHNldFRpbWVQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0UGFzc3dvcmRQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0TnVtYmVyUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAnO1xuICB9XG5cbiAgc2V0Q3VycmVuY3lQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjE7XG4gICAgdGhpcy5taW4gPSB0aGlzLm1pbiB8fCAwLjA7XG4gICAgdGhpcy5tYXggPSB0aGlzLm1heCB8fCAxMDAwMC4wO1xuICAgIHRoaXMudmFsdWUgPSAwLjA7XG4gIH1cblxuICBzZXRQZXJjZW50YWdlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMC4wO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMC4wMCc7XG4gIH1cblxuICBzZXRQZXJtaWxsYWdlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMDAuMDtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAuMDAnO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiY3VycmVuY3kgJiYgY3VycmVuY3kgPT09ICdVU0QnXCIgY2xhc3M9XCJwcmVmaXggcm91bmRlZC1sZWZ0IHN5bWJvbFwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8c3Bhbj4kPC9zcGFuPlxuPC9kaXY+XG48aW5wdXRcbiAgI2lucHV0XG4gICpuZ0lmPVwidHlwZSAhPT0gJ3RleHRhcmVhJ1wiXG4gIFtjbGFzc109XCJoYXNQcmVmaXgoKSA/IChoYXNQb3N0Zml4KCkgPyAnaW5maXgnIDogJ3Bvc3RmaXggcm91bmRlZC1yaWdodCcpIDogKGhhc1Bvc3RmaXgoKSA/ICdwcmVmaXggcm91bmRlZC1sZWZ0JyA6ICdyb3VuZGVkJylcIlxuICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxuICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICBbaWRdPVwiaW5wdXRJZFwiXG4gIFt0eXBlXT1cImRvbWFpblwiXG4gIFthdHRyLnZhbHVlXT1cInZhbHVlXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIubWluXT1cIm1pbj8udG9TdHJpbmcoKSB8fCB1bmRlZmluZWRcIlxuICBbYXR0ci5tYXhdPVwibWF4Py50b1N0cmluZygpIHx8IHVuZGVmaW5lZFwiXG4gIFthdHRyLnN0ZXBdPVwic3RlcD8udG9TdHJpbmcoKSB8fCB1bmRlZmluZWRcIlxuICBbYXR0ci5wYXR0ZXJuXT1cInBhdHRlcm4gfHwgdW5kZWZpbmVkXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgKGtleXVwKT1cIm9uS2V5VXAoaW5wdXQudmFsdWUpXCJcbiAgKGNoYW5nZSk9XCJvbkNoYW5nZVZhbHVlKGlucHV0LnZhbHVlKVwiXG4gIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAoYmx1cik9XCJvbkxvc3RGb2N1cygpXCJcbi8+XG48dGV4dGFyZWFcbiAgI3RleHRhcmVhXG4gICpuZ0lmPVwidHlwZSA9PT0gJ3RleHRhcmVhJ1wiXG4gIGNsYXNzPVwicm91bmRlZFwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIHBsYWNlbWVudD1cInRvcFwiXG4gIFtpZF09XCJpbnB1dElkXCJcbiAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5jb2xzXT1cImNvbHM/LnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkXCJcbiAgW2F0dHIucm93c109XCJyb3dzPy50b1N0cmluZygpIHx8IHVuZGVmaW5lZFwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIChrZXl1cCk9XCJvbktleVVwKHRleHRhcmVhLnZhbHVlKVwiXG4gIChjaGFuZ2UpPVwib25DaGFuZ2VWYWx1ZSh0ZXh0YXJlYS52YWx1ZSlcIlxuICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcbiAgKGJsdXIpPVwib25Mb3N0Rm9jdXMoKVwiXG4+PC90ZXh0YXJlYT5cbjxkaXYgKm5nSWY9XCJjdXJyZW5jeSAmJiBjdXJyZW5jeSA9PT0gJ0VVUidcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBzeW1ib2xcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPHNwYW4+4oKsPC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNQZXJjZW50YWdlKClcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBzeW1ib2xcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPHNwYW4+JTwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzUGVybWlsbGFnZSgpXCIgY2xhc3M9XCJwb3N0Zml4IHJvdW5kZWQtcmlnaHQgc3ltYm9sXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxzcGFuPuKAsDwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzVXJsKCkgJiYgISF2YWx1ZVwiIGNsYXNzPVwicG9zdGZpeCByb3VuZGVkLXJpZ2h0IHN5bWJvbCBjbGlja2FibGVcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGEgaHJlZj1cInt7IHZhbHVlIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJpY29uLWV4dGVybmFsXCI+PC9zcGFuPlxuICA8L2E+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc0NvbG9yKClcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBib3JkZXJlZCB0cmFuc3BhcmVuY3lcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGRpdiBjbGFzcz1cInJvdW5kZWQtcmlnaHQgZnVsbC1zcGFjZVwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGNvbG9yfVwiPlxuICAgIDxpbnB1dFxuICAgICAgI2NvbG9ycGlja2VyXG4gICAgICBjbGFzcz1cIm1pbmltYWwtc3BhY2UgY2xpY2thYmxlIGludmlzaWJsZSByb3VuZGVkLXJpZ2h0IGZ1bGwtc3BhY2VcIlxuICAgICAgW2lkXT1cImlucHV0SWQgKyAnJGNvbG9ycGlja2VyJ1wiXG4gICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNvbG9yUGlja2VkKGNvbG9ycGlja2VyLnZhbHVlKVwiXG4gICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uTG9zdEZvY3VzKClcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJpbmxpbmVFcnJvcnMgJiYgbGFzdEVycm9ycyAmJiAoZGlydHkgfHwgdG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0XCI+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLnJlcXVpcmVkXCI+XG4gICAge3sgdXNlckVycm9yc1t0aGlzLmxhbmddLnJlcXVpcmVkIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy5lbWFpbFwiPnt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS5lbWFpbCB9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy51cmxcIj57eyB1c2VyRXJyb3JzW3RoaXMubGFuZ10udXJsIH19PC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLm1pblwiPlxuICAgIHt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS5taW4ucmVwbGFjZSgnJG1pbicsIGxhc3RFcnJvcnMubWluLm1pbikgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLm1heFwiPlxuICAgIHt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS5tYXgucmVwbGFjZSgnJG1heCcsIGxhc3RFcnJvcnMubWF4Lm1heCkgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==