@klippa/ngx-enhancy-forms 10.2.0 → 11.0.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.
- package/esm2020/klippa-ngx-enhancy-forms.mjs +5 -0
- package/esm2020/lib/elements/button/button.component.mjs +57 -0
- package/esm2020/lib/elements/checkbox/checkbox.component.mjs +23 -0
- package/esm2020/lib/elements/date-picker/date-picker.component.mjs +108 -0
- package/esm2020/lib/elements/date-time-picker/date-time-picker.component.mjs +360 -0
- package/esm2020/lib/elements/email/email-input.component.mjs +20 -0
- package/esm2020/lib/elements/file-input/file-input.component.mjs +71 -0
- package/esm2020/lib/elements/hour-minute-input/hour-minute-input.component.mjs +90 -0
- package/esm2020/lib/elements/loading-indicator/loading-indicator.component.mjs +20 -0
- package/esm2020/lib/elements/number-input/number-input.component.mjs +31 -0
- package/esm2020/lib/elements/password-field/password-field.component.mjs +21 -0
- package/esm2020/lib/elements/select/select-footer/select-footer.component.mjs +15 -0
- package/esm2020/lib/elements/select/select.component.mjs +129 -0
- package/esm2020/lib/elements/sortable-grouped-items/sortable-grouped-items.component.mjs +51 -0
- package/esm2020/lib/elements/sortable-items/sortable-items.component.mjs +70 -0
- package/esm2020/lib/elements/text-input/text-input.component.mjs +28 -0
- package/esm2020/lib/elements/toggle/toggle.component.mjs +15 -0
- package/esm2020/lib/elements/value-accessor-base/multiple-value-accessor-base.component.mjs +61 -0
- package/esm2020/lib/elements/value-accessor-base/value-accessor-base.component.mjs +144 -0
- package/esm2020/lib/form/form-caption/form-caption.component.mjs +36 -0
- package/esm2020/lib/form/form-element/form-element.component.mjs +124 -0
- package/esm2020/lib/form/form-error/form-error.component.mjs +39 -0
- package/esm2020/lib/form/form-submit-button/form-submit-button.component.mjs +61 -0
- package/esm2020/lib/form/form.component.mjs +180 -0
- package/esm2020/lib/material.module.mjs +22 -0
- package/esm2020/lib/ngx-enhancy-forms.module.mjs +158 -0
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/util/arrays.mjs +45 -0
- package/esm2020/lib/util/values.mjs +23 -0
- package/esm2020/lib/validators/dateValidator.mjs +6 -0
- package/esm2020/lib/validators/timeValidator.mjs +6 -0
- package/esm2020/public-api.mjs +30 -0
- package/fesm2015/klippa-ngx-enhancy-forms.mjs +1894 -0
- package/fesm2015/klippa-ngx-enhancy-forms.mjs.map +1 -0
- package/fesm2020/klippa-ngx-enhancy-forms.mjs +1858 -0
- package/fesm2020/klippa-ngx-enhancy-forms.mjs.map +1 -0
- package/{klippa-ngx-enhancy-forms.d.ts → index.d.ts} +1 -1
- package/lib/elements/button/button.component.d.ts +4 -1
- package/lib/elements/checkbox/checkbox.component.d.ts +3 -0
- package/lib/elements/date-picker/date-picker.component.d.ts +3 -0
- package/lib/elements/date-time-picker/date-time-picker.component.d.ts +3 -0
- package/lib/elements/email/email-input.component.d.ts +3 -0
- package/lib/elements/file-input/file-input.component.d.ts +3 -0
- package/lib/elements/hour-minute-input/hour-minute-input.component.d.ts +3 -0
- package/lib/elements/loading-indicator/loading-indicator.component.d.ts +3 -0
- package/lib/elements/number-input/number-input.component.d.ts +3 -0
- package/lib/elements/password-field/password-field.component.d.ts +3 -0
- package/lib/elements/select/select-footer/select-footer.component.d.ts +3 -0
- package/lib/elements/select/select.component.d.ts +5 -0
- package/lib/elements/sortable-grouped-items/sortable-grouped-items.component.d.ts +3 -0
- package/lib/elements/sortable-items/sortable-items.component.d.ts +3 -0
- package/lib/elements/text-input/text-input.component.d.ts +3 -0
- package/lib/elements/toggle/toggle.component.d.ts +3 -0
- package/lib/elements/value-accessor-base/multiple-value-accessor-base.component.d.ts +3 -0
- package/lib/elements/value-accessor-base/value-accessor-base.component.d.ts +5 -2
- package/lib/form/form-caption/form-caption.component.d.ts +3 -0
- package/lib/form/form-element/form-element.component.d.ts +7 -4
- package/lib/form/form-error/form-error.component.d.ts +3 -0
- package/lib/form/form-submit-button/form-submit-button.component.d.ts +3 -0
- package/lib/form/form.component.d.ts +10 -5
- package/lib/material.module.d.ts +9 -0
- package/lib/ngx-enhancy-forms.module.d.ts +32 -0
- package/package.json +29 -16
- package/src/lib/form/README.md +1 -0
- package/bundles/klippa-ngx-enhancy-forms.umd.js +0 -2177
- package/bundles/klippa-ngx-enhancy-forms.umd.js.map +0 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js +0 -17
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js.map +0 -1
- package/esm2015/klippa-ngx-enhancy-forms.js +0 -6
- package/esm2015/lib/elements/button/button.component.js +0 -49
- package/esm2015/lib/elements/checkbox/checkbox.component.js +0 -22
- package/esm2015/lib/elements/date-picker/date-picker.component.js +0 -95
- package/esm2015/lib/elements/date-time-picker/date-time-picker.component.js +0 -330
- package/esm2015/lib/elements/email/email-input.component.js +0 -21
- package/esm2015/lib/elements/file-input/file-input.component.js +0 -66
- package/esm2015/lib/elements/hour-minute-input/hour-minute-input.component.js +0 -90
- package/esm2015/lib/elements/loading-indicator/loading-indicator.component.js +0 -19
- package/esm2015/lib/elements/number-input/number-input.component.js +0 -30
- package/esm2015/lib/elements/password-field/password-field.component.js +0 -21
- package/esm2015/lib/elements/select/select-footer/select-footer.component.js +0 -15
- package/esm2015/lib/elements/select/select.component.js +0 -104
- package/esm2015/lib/elements/sortable-grouped-items/sortable-grouped-items.component.js +0 -49
- package/esm2015/lib/elements/sortable-items/sortable-items.component.js +0 -67
- package/esm2015/lib/elements/text-input/text-input.component.js +0 -25
- package/esm2015/lib/elements/toggle/toggle.component.js +0 -14
- package/esm2015/lib/elements/value-accessor-base/multiple-value-accessor-base.component.js +0 -54
- package/esm2015/lib/elements/value-accessor-base/value-accessor-base.component.js +0 -135
- package/esm2015/lib/form/form-caption/form-caption.component.js +0 -35
- package/esm2015/lib/form/form-element/form-element.component.js +0 -118
- package/esm2015/lib/form/form-error/form-error.component.js +0 -37
- package/esm2015/lib/form/form-submit-button/form-submit-button.component.js +0 -53
- package/esm2015/lib/form/form.component.js +0 -173
- package/esm2015/lib/material.module.js +0 -17
- package/esm2015/lib/ngx-enhancy-forms.module.js +0 -97
- package/esm2015/lib/types.js +0 -2
- package/esm2015/lib/util/arrays.js +0 -45
- package/esm2015/lib/util/values.js +0 -23
- package/esm2015/lib/validators/dateValidator.js +0 -6
- package/esm2015/lib/validators/timeValidator.js +0 -6
- package/esm2015/public-api.js +0 -30
- package/fesm2015/klippa-ngx-enhancy-forms.js +0 -1715
- package/fesm2015/klippa-ngx-enhancy-forms.js.map +0 -1
- package/klippa-ngx-enhancy-forms.metadata.json +0 -1
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, Host, Inject, InjectionToken, Input, Optional, ViewChild } from '@angular/core';
|
|
2
|
-
import { ControlContainer, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { invalidDateKey } from '../../validators/dateValidator';
|
|
4
|
-
import { DateAdapter, MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS } from '@angular/material/core';
|
|
5
|
-
import { FormElementComponent } from '../../form/form-element/form-element.component';
|
|
6
|
-
import { MultipleValueAccessorBase } from '../value-accessor-base/multiple-value-accessor-base.component';
|
|
7
|
-
import { isValueSet, stringIsSetAndFilled } from '../../util/values';
|
|
8
|
-
import { endOfMonth, format as formatDate, startOfMonth, isSameDay } from 'date-fns';
|
|
9
|
-
import { arrayIsSetAndFilled, removeDuplicatesFromArray } from '../../util/arrays';
|
|
10
|
-
export const KLP_DATE_FORMATS = new InjectionToken('klp.form.date.formats');
|
|
11
|
-
export const DATE_TIME_PICKER_TRANSLATIONS = new InjectionToken('klp.form.dateTime.translations');
|
|
12
|
-
export const DATE_PICKER_LOCALE = new InjectionToken('klp.form.dateTime.locale');
|
|
13
|
-
export function matDateFormatsFactory(component, dateFormats) {
|
|
14
|
-
var _a;
|
|
15
|
-
return (_a = dateFormats === null || dateFormats === void 0 ? void 0 : dateFormats(component.format)) !== null && _a !== void 0 ? _a : MAT_NATIVE_DATE_FORMATS;
|
|
16
|
-
}
|
|
17
|
-
export class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
18
|
-
constructor(parent, controlContainer, translations, datePickerLocale, dateAdapter, cdr) {
|
|
19
|
-
super(parent, controlContainer);
|
|
20
|
-
this.parent = parent;
|
|
21
|
-
this.controlContainer = controlContainer;
|
|
22
|
-
this.translations = translations;
|
|
23
|
-
this.datePickerLocale = datePickerLocale;
|
|
24
|
-
this.dateAdapter = dateAdapter;
|
|
25
|
-
this.cdr = cdr;
|
|
26
|
-
this.minDate = undefined;
|
|
27
|
-
this.maxDate = undefined;
|
|
28
|
-
this.sameMonthOnly = false;
|
|
29
|
-
this.format = 'dd-MM-yyyy';
|
|
30
|
-
this.clearable = false;
|
|
31
|
-
this.showTimeInput = true;
|
|
32
|
-
this.invalidTimeAsMidnight = false; // if the time is not valid, use 00:00 as the time
|
|
33
|
-
this.openPickerOnDate = null;
|
|
34
|
-
this.minDateStartOfDay = undefined;
|
|
35
|
-
this.maxDateEndOfDay = undefined;
|
|
36
|
-
this.selectedDates = [];
|
|
37
|
-
this.dateTouched = false;
|
|
38
|
-
this.hoursTouched = false;
|
|
39
|
-
this.minutesTouched = false;
|
|
40
|
-
this.isSelected = (d) => {
|
|
41
|
-
if (this.multiple) {
|
|
42
|
-
return this.selectedDates.some((e) => isSameDay(e, d)) ? 'selected' : '';
|
|
43
|
-
}
|
|
44
|
-
return '';
|
|
45
|
-
};
|
|
46
|
-
this.filterDates = (e) => {
|
|
47
|
-
if (this.disabled) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return true;
|
|
51
|
-
};
|
|
52
|
-
if (isValueSet(datePickerLocale)) {
|
|
53
|
-
dateAdapter.setLocale(datePickerLocale());
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
ngOnInit() {
|
|
57
|
-
super.ngOnInit();
|
|
58
|
-
if (this.multiple) {
|
|
59
|
-
this.placeholder = '';
|
|
60
|
-
this.showTimeInput = false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
ngAfterViewInit() {
|
|
64
|
-
if (this.multiple) {
|
|
65
|
-
// we are going to overwrite the datepicker closing fn later, so we are saving it here to restore it when needed
|
|
66
|
-
this.datePickingClosingFn = this.datePickerRef.close;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
ngOnChanges(changes) {
|
|
70
|
-
if (changes.minDate) {
|
|
71
|
-
this.determineMinAndMaxDates();
|
|
72
|
-
}
|
|
73
|
-
if (changes.maxDate) {
|
|
74
|
-
this.determineMinAndMaxDates();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
setMinDate(minDate) {
|
|
78
|
-
if (minDate) {
|
|
79
|
-
this.minDateStartOfDay = new Date(minDate);
|
|
80
|
-
this.minDateStartOfDay.setHours(0, 0, 0, 0);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
this.minDateStartOfDay = undefined;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
setMaxDate(maxDate) {
|
|
87
|
-
if (maxDate) {
|
|
88
|
-
this.maxDateEndOfDay = new Date(maxDate);
|
|
89
|
-
this.maxDateEndOfDay.setHours(23, 59, 59, 999);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
this.maxDateEndOfDay = undefined;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
getSelectedMonths() {
|
|
96
|
-
return removeDuplicatesFromArray(this.selectedDates.map((e) => formatDate(e, 'MMMM'))).length;
|
|
97
|
-
}
|
|
98
|
-
// dateChanged is called when the output of the datepicker is changed and
|
|
99
|
-
// parsed correctly. If the date is invalid, it will be called the first time
|
|
100
|
-
// with null but never again until a valid input is provided.
|
|
101
|
-
dateChanged(event) {
|
|
102
|
-
const date = event.value;
|
|
103
|
-
if (this.multiple) {
|
|
104
|
-
this.datePickerRef.close = () => {
|
|
105
|
-
};
|
|
106
|
-
if (this.selectedDates.some((e) => isSameDay(e, date))) {
|
|
107
|
-
this.selectedDates = this.selectedDates.filter((e) => !isSameDay(e, date));
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
this.selectedDates = [...this.selectedDates, date];
|
|
111
|
-
}
|
|
112
|
-
// START HACK
|
|
113
|
-
// the date picker does not provide any rerender calls. Therefore, we are going to change the minDate in order to force the render
|
|
114
|
-
// This is needed to show all selected days in our date picker
|
|
115
|
-
// We also set the innerValue to null (with this.valueForMaterialDatePicker = null;), otherwise you can not
|
|
116
|
-
// deselect your last picked date
|
|
117
|
-
this.cdr.detectChanges();
|
|
118
|
-
this.valueForMaterialDatePicker = null;
|
|
119
|
-
const oldMinDate = this.minDateStartOfDay;
|
|
120
|
-
this.minDateStartOfDay = new Date(0);
|
|
121
|
-
this.cdr.detectChanges();
|
|
122
|
-
this.minDateStartOfDay = oldMinDate;
|
|
123
|
-
// END HACK
|
|
124
|
-
if (this.sameMonthOnly) {
|
|
125
|
-
if (this.selectedDates.length >= 2) {
|
|
126
|
-
if (date < startOfMonth(this.selectedDates[0]) || date > endOfMonth(this.selectedDates[0])) {
|
|
127
|
-
this.selectedDates = [date];
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
this.determineMinAndMaxDates();
|
|
131
|
-
}
|
|
132
|
-
this.setInnerValueAndNotify(this.selectedDates);
|
|
133
|
-
setTimeout(() => {
|
|
134
|
-
this.datePickerRef.close = this.datePickingClosingFn;
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
this.notifyNewDate();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
determineMinAndMaxDates() {
|
|
142
|
-
if (this.sameMonthOnly) {
|
|
143
|
-
if (this.selectedDates.length >= 2) {
|
|
144
|
-
this.setMinDate(startOfMonth(this.selectedDates[0]));
|
|
145
|
-
this.setMaxDate(endOfMonth(this.selectedDates[0]));
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
this.setMinDate(this.minDate);
|
|
149
|
-
this.setMaxDate(this.maxDate);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
this.setMinDate(this.minDate);
|
|
154
|
-
this.setMaxDate(this.maxDate);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
notifyNewDate() {
|
|
158
|
-
const nativeInputValue = this.nativeInputRef.nativeElement.value;
|
|
159
|
-
const parsedHours = Number(this.hours);
|
|
160
|
-
const parsedMinutes = Number(this.minutes);
|
|
161
|
-
// if we dont have the time element
|
|
162
|
-
if (!this.showTimeInput) {
|
|
163
|
-
if (!stringIsSetAndFilled(nativeInputValue)) {
|
|
164
|
-
this.setInnerValueAndNotify(null);
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
if (this.valueForMaterialDatePicker instanceof Date) {
|
|
168
|
-
this.setInnerValueAndNotify(this.valueForMaterialDatePicker);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
// when all inputs are empty
|
|
173
|
-
if (!stringIsSetAndFilled(nativeInputValue) && !stringIsSetAndFilled(this.hours) && !stringIsSetAndFilled(this.minutes)) {
|
|
174
|
-
this.setInnerValueAndNotify(null);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// if we have date and time
|
|
178
|
-
if (stringIsSetAndFilled(this.hours) &&
|
|
179
|
-
Number.isFinite(parsedHours) &&
|
|
180
|
-
parsedHours >= 0 &&
|
|
181
|
-
parsedHours <= 23 &&
|
|
182
|
-
stringIsSetAndFilled(this.minutes) &&
|
|
183
|
-
Number.isFinite(parsedMinutes) &&
|
|
184
|
-
parsedMinutes >= 0 &&
|
|
185
|
-
parsedMinutes <= 59 &&
|
|
186
|
-
this.valueForMaterialDatePicker instanceof Date) {
|
|
187
|
-
const newDateWithHours = new Date(this.valueForMaterialDatePicker.setHours(parsedHours));
|
|
188
|
-
const newDateWithMinutes = new Date(newDateWithHours.setMinutes(parsedMinutes));
|
|
189
|
-
this.setInnerValueAndNotify(newDateWithMinutes);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
if (this.invalidTimeAsMidnight) {
|
|
193
|
-
if (this.valueForMaterialDatePicker instanceof Date) {
|
|
194
|
-
this.setInnerValueAndNotify(this.valueForMaterialDatePicker);
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// all other cases, we are not in a valid state
|
|
199
|
-
this.setInnerValueAndNotify(invalidDateKey);
|
|
200
|
-
}
|
|
201
|
-
writeValue(value) {
|
|
202
|
-
super.writeValue(value);
|
|
203
|
-
if (Array.isArray(value)) {
|
|
204
|
-
this.selectedDates = value;
|
|
205
|
-
this.determineMinAndMaxDates();
|
|
206
|
-
this.valueForMaterialDatePicker = null;
|
|
207
|
-
if (arrayIsSetAndFilled(value)) {
|
|
208
|
-
this.openPickerOnDate = this.selectedDates[0];
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.valueForMaterialDatePicker = value === invalidDateKey ? null : value;
|
|
213
|
-
if (value instanceof Date) {
|
|
214
|
-
this.hours = String(value.getHours());
|
|
215
|
-
this.minutes = String(value.getMinutes());
|
|
216
|
-
this.formatTime();
|
|
217
|
-
this.openPickerOnDate = value;
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
this.hours = '';
|
|
221
|
-
this.minutes = '';
|
|
222
|
-
this.openPickerOnDate = null;
|
|
223
|
-
this.selectedDates = [];
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
// nativeValueChanged is called when the internal text value changes, but not
|
|
228
|
-
// when the date is changed via the date picker. We need this so that we can
|
|
229
|
-
// determine if the datepicker is empty or invalid.
|
|
230
|
-
nativeValueChanged() {
|
|
231
|
-
if (this.datePickerRef.opened) {
|
|
232
|
-
// if the user is typing instead of using the picker, close it.
|
|
233
|
-
this.datePickerRef.close();
|
|
234
|
-
}
|
|
235
|
-
this.notifyNewDate();
|
|
236
|
-
}
|
|
237
|
-
resetToNull() {
|
|
238
|
-
this.setInnerValueAndNotify(null);
|
|
239
|
-
this.valueForMaterialDatePicker = null;
|
|
240
|
-
this.nativeInputRef.nativeElement.value = null;
|
|
241
|
-
this.hours = '';
|
|
242
|
-
this.minutes = '';
|
|
243
|
-
this.selectedDates = [];
|
|
244
|
-
}
|
|
245
|
-
formatTime() {
|
|
246
|
-
if (Number.isFinite(Number(this.hours)) && this.hours.length === 1) {
|
|
247
|
-
this.hours = '0' + this.hours;
|
|
248
|
-
}
|
|
249
|
-
if (Number.isFinite(Number(this.minutes)) && this.minutes.length === 1) {
|
|
250
|
-
this.minutes = '0' + this.minutes;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
touchDate() {
|
|
254
|
-
this.dateTouched = true;
|
|
255
|
-
this.determineAllTouched();
|
|
256
|
-
}
|
|
257
|
-
touchHours() {
|
|
258
|
-
this.hoursTouched = true;
|
|
259
|
-
this.determineAllTouched();
|
|
260
|
-
}
|
|
261
|
-
touchMinutes() {
|
|
262
|
-
this.minutesTouched = true;
|
|
263
|
-
this.determineAllTouched();
|
|
264
|
-
}
|
|
265
|
-
determineAllTouched() {
|
|
266
|
-
if ((this.dateTouched && this.hoursTouched && this.minutesTouched) || (this.dateTouched && !this.showTimeInput)) {
|
|
267
|
-
this.touch();
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
getDefaultTranslation(key) {
|
|
271
|
-
switch (key) {
|
|
272
|
-
case 'placeholder':
|
|
273
|
-
return () => 'Select date';
|
|
274
|
-
case 'selectDays':
|
|
275
|
-
return () => 'Select day(s)';
|
|
276
|
-
case 'selectedDate':
|
|
277
|
-
return (d) => d.toLocaleDateString();
|
|
278
|
-
case 'daysSelected':
|
|
279
|
-
return (amount) => `${amount} days selected`;
|
|
280
|
-
case 'selectedInMonth':
|
|
281
|
-
return (d) => ` in ${formatDate(d, 'MMMM')}`;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
getTranslation(key, params = null) {
|
|
285
|
-
var _a, _b, _c;
|
|
286
|
-
if (key === 'placeholder' && this.multiple) {
|
|
287
|
-
return '';
|
|
288
|
-
}
|
|
289
|
-
if (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {
|
|
290
|
-
return this.placeholder;
|
|
291
|
-
}
|
|
292
|
-
return (_c = (_b = (_a = this.translations) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.call(_a, params)) !== null && _c !== void 0 ? _c : this.getDefaultTranslation(key)(params);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
DateTimePickerComponent.decorators = [
|
|
296
|
-
{ type: Component, args: [{
|
|
297
|
-
selector: 'klp-form-date-time-picker',
|
|
298
|
-
template: "<div class=\"componentContainer\" [ngClass]=\"{showErrors: isInErrorState()}\">\n\t<div class=\"dateContainer\" [ngClass]=\"{noRightBorder: !showTimeInput && clearable && !disabled, disabled: disabled}\">\n\t\t<mat-form-field floatLabel=\"never\">\n\t\t\t<div *ngIf=\"multiple\" class=\"daysSelectedCaption\" (click)=\"picker.open()\" [ngClass]=\"{disabled: disabled}\">\n\t\t\t\t<ng-container *ngIf=\"selectedDates.length >= 2\">\n\t\t\t\t\t<span>{{getTranslation('daysSelected', selectedDates.length)}}</span>\n\t\t\t\t\t<span *ngIf=\"getSelectedMonths() === 1\">{{getTranslation('selectedInMonth', selectedDates[0])}}</span>\n\t\t\t\t</ng-container>\n\t\t\t\t<span *ngIf=\"selectedDates.length === 1\">{{getTranslation('selectedDate', selectedDates[0])}}</span>\n\t\t\t\t<span *ngIf=\"selectedDates.length === 0\" class=\"placeholderForMultipleSelection\">{{getTranslation('selectDays')}}</span>\n\t\t\t</div>\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\tmatInput\n\t\t\t\t[matDatepicker]=\"picker\"\n\t\t\t\t[matDatepickerFilter]=\"filterDates\"\n\t\t\t\t[(ngModel)]=\"valueForMaterialDatePicker\"\n\t\t\t\t(dateInput)=\"dateChanged($event)\"\n\t\t\t\t(input)=\"nativeValueChanged()\"\n\t\t\t\t[min]=\"minDateStartOfDay\"\n\t\t\t\t[max]=\"maxDateEndOfDay\"\n\t\t\t\t[placeholder]=\"getTranslation('placeholder')\"\n\t\t\t\t(click)=\"picker.open()\"\n\t\t\t\t(blur)=\"touchDate()\"\n\t\t\t\t[ngClass]=\"{inputForMultipleDays: multiple}\"\n\t\t\t>\n\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\t\t\t<mat-datepicker\n\t\t\t\t#picker\n\t\t\t\t[dateClass]=\"isSelected\"\n\t\t\t\t[startAt]=\"openPickerOnDate\"\n\t\t\t></mat-datepicker>\n\t\t</mat-form-field>\n\t</div>\n\t<div class=\"timeContainer\" *ngIf=\"showTimeInput\" [ngClass]=\"{disabled: disabled}\">\n\t\t<input maxlength=\"2\" placeholder=\"__\" [disabled]=\"disabled\" [(ngModel)]=\"hours\" (ngModelChange)=\"notifyNewDate()\" (blur)=\"formatTime(); touchHours()\">\n\t\t<div class=\"divider\">:</div>\n\t\t<input maxlength=\"2\" placeholder=\"__\" [disabled]=\"disabled\" [(ngModel)]=\"minutes\" (ngModelChange)=\"notifyNewDate()\" (blur)=\"formatTime(); touchMinutes()\">\n\t</div>\n\t<button *ngIf=\"clearable && !disabled\" class=\"clearButton\" (click)=\"resetToNull()\" [ngClass]=\"{withoutSpacing: !showTimeInput}\">\u00D7</button>\n</div>\n",
|
|
299
|
-
providers: [
|
|
300
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true },
|
|
301
|
-
{
|
|
302
|
-
provide: MAT_DATE_FORMATS,
|
|
303
|
-
deps: [DateTimePickerComponent, [new Optional(), KLP_DATE_FORMATS]],
|
|
304
|
-
useFactory: matDateFormatsFactory,
|
|
305
|
-
},
|
|
306
|
-
],
|
|
307
|
-
styles: [":host{display:block}:host ::ng-deep mat-form-field{display:block;height:100%}:host ::ng-deep mat-form-field.mat-focused .mat-form-field-label,:host ::ng-deep mat-form-field .mat-form-field-label{color:#adadad}:host ::ng-deep .mat-datepicker-toggle-active{color:#666}:host ::ng-deep .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field-flex{flex-direction:row-reverse}:host ::ng-deep .mat-form-field-infix{border-top:none;width:auto}:host ::ng-deep .mat-form-field-suffix{margin-right:.625rem}:host ::ng-deep .mat-form-field-suffix:hover .mat-button-focus-overlay{opacity:.1}:host ::ng-deep .mat-form-field-underline{display:none}:host ::ng-deep .daysSelectedCaption{cursor:pointer}:host ::ng-deep .daysSelectedCaption.disabled{cursor:zoom-in}:host ::ng-deep .inputForMultipleDays{display:none}.componentContainer{border-radius:2px;color:#888da8;display:flex;position:relative}.componentContainer .placeholderForMultipleSelection{color:#adadad}.componentContainer.showErrors .clearButton.withoutSpacing,.componentContainer.showErrors .dateContainer,.componentContainer.showErrors .timeContainer{border-color:#ff8000}.componentContainer .clearButton{align-items:center;background:#fff;border:1px solid #e6ecf5;color:#7b7b7b;display:flex;flex:0 0 auto;font-size:18px;margin-left:1.25rem;padding:6px 14px}.componentContainer .clearButton.withoutSpacing{border-left:none;margin-left:0}.componentContainer .clearButton:disabled{background:#f9f9f9;border:1px solid #e6ecf5}.componentContainer .dateContainer{background:#fff;border:1px solid #e6ecf5;flex:1 1 auto;padding:6px}.componentContainer .dateContainer.noRightBorder{border-right:none}.componentContainer .dateContainer.disabled{background:#f9f9f9}.componentContainer .timeContainer{align-items:center;background:#fff;border:1px solid #e6ecf5;display:flex;flex:0 0 auto;margin-left:1.25rem;padding:6px .625rem}.componentContainer .timeContainer.disabled{background:#f9f9f9}.componentContainer .timeContainer input{border:none;color:#888da8;padding:0;text-align:center;width:20px}.componentContainer .timeContainer input::-moz-placeholder{color:#adadad}.componentContainer .timeContainer input:-ms-input-placeholder{color:#adadad}.componentContainer .timeContainer input::placeholder{color:#adadad}.componentContainer .timeContainer .divider{margin:0 .3125rem}"]
|
|
308
|
-
},] }
|
|
309
|
-
];
|
|
310
|
-
DateTimePickerComponent.ctorParameters = () => [
|
|
311
|
-
{ type: FormElementComponent, decorators: [{ type: Host }, { type: Optional }] },
|
|
312
|
-
{ type: ControlContainer, decorators: [{ type: Host }, { type: Optional }] },
|
|
313
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DATE_TIME_PICKER_TRANSLATIONS,] }, { type: Optional }] },
|
|
314
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DATE_PICKER_LOCALE,] }, { type: Optional }] },
|
|
315
|
-
{ type: DateAdapter },
|
|
316
|
-
{ type: ChangeDetectorRef }
|
|
317
|
-
];
|
|
318
|
-
DateTimePickerComponent.propDecorators = {
|
|
319
|
-
minDate: [{ type: Input }],
|
|
320
|
-
maxDate: [{ type: Input }],
|
|
321
|
-
sameMonthOnly: [{ type: Input }],
|
|
322
|
-
format: [{ type: Input }],
|
|
323
|
-
placeholder: [{ type: Input }],
|
|
324
|
-
clearable: [{ type: Input }],
|
|
325
|
-
showTimeInput: [{ type: Input }],
|
|
326
|
-
invalidTimeAsMidnight: [{ type: Input }],
|
|
327
|
-
nativeInputRef: [{ type: ViewChild, args: ['nativeInput',] }],
|
|
328
|
-
datePickerRef: [{ type: ViewChild, args: ['picker',] }]
|
|
329
|
-
};
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsU0FBUyxFQUVULElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBRTlHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuRixPQUFPLEVBQUMsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsdUJBQXVCLENBQUMsQ0FBQztBQUM1RixNQUFNLENB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TyxvQkFBb0IsdUJBeUR6QixJQUFJLFlBQUksUUFBUTtZQTlEWCxnQkFBZ0IsdUJBK0RyQixJQUFJLFlBQUksUUFBUTs0Q0FDaEIsTUFBTSxTQUFDLDZCQUE2QixjQUFHLFFBQVE7NENBQy9DLE1BQU0sU0FBQyxrQkFBa0IsY0FBRyxRQUFRO1lBOUQvQixXQUFXO1lBaEJsQixpQkFBaUI7OztzQkE4Q2hCLEtBQUs7c0JBQ0wsS0FBSzs0QkFDTCxLQUFLO3FCQUNMLEtBQUs7MEJBQ0wsS0FBSzt3QkFDTCxLQUFLOzRCQUNMLEtBQUs7b0NBQ0wsS0FBSzs2QkFFTCxTQUFTLFNBQUMsYUFBYTs0QkFDdkIsU0FBUyxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRIb3N0LFxuXHRJbmplY3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkluaXQsXG5cdE9wdGlvbmFsLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xDb250YWluZXIsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2ludmFsaWREYXRlS2V5fSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL2RhdGVWYWxpZGF0b3InO1xuaW1wb3J0IHtEYXRlRmlsdGVyRm4sIE1hdERhdGVwaWNrZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX05BVElWRV9EQVRFX0ZPUk1BVFMsIE1hdERhdGVGb3JtYXRzfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7S2xwRGF0ZUZvcm1hdHN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7Rm9ybUVsZW1lbnRDb21wb25lbnR9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi92YWx1ZS1hY2Nlc3Nvci1iYXNlL211bHRpcGxlLXZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7ZW5kT2ZNb250aCwgZm9ybWF0IGFzIGZvcm1hdERhdGUsIHN0YXJ0T2ZNb250aCwgaXNTYW1lRGF5fSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQge2FycmF5SXNTZXRBbmRGaWxsZWQsIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi91dGlsL2FycmF5cyc7XG5cbmV4cG9ydCBjb25zdCBLTFBfREFURV9GT1JNQVRTID0gbmV3IEluamVjdGlvblRva2VuPEtscERhdGVGb3JtYXRzPigna2xwLmZvcm0uZGF0ZS5mb3JtYXRzJyk7XG5leHBvcnQgY29uc3QgREFURV9USU1FX1BJQ0tFUl9UUkFOU0xBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55Pigna2xwLmZvcm0uZGF0ZVRpbWUudHJhbnNsYXRpb25zJyk7XG5leHBvcnQgY29uc3QgREFURV9QSUNLRVJfTE9DQUxFID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2tscC5mb3JtLmRhdGVUaW1lLmxvY2FsZScpO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0RGF0ZUZvcm1hdHNGYWN0b3J5KGNvbXBvbmVudDogRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIGRhdGVGb3JtYXRzPzogS2xwRGF0ZUZvcm1hdHMpOiBNYXREYXRlRm9ybWF0cyB7XG5cdHJldHVybiBkYXRlRm9ybWF0cz8uKGNvbXBvbmVudC5mb3JtYXQpID8/IE1BVF9OQVRJVkVfREFURV9GT1JNQVRTO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1kYXRlLXRpbWUtcGlja2VyJyxcblx0dGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX0sXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUyxcblx0XHRcdGRlcHM6IFtEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgW25ldyBPcHRpb25hbCgpLCBLTFBfREFURV9GT1JNQVRTXV0sXG5cdFx0XHR1c2VGYWN0b3J5OiBtYXREYXRlRm9ybWF0c0ZhY3RvcnksXG5cdFx0fSxcblx0XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlPERhdGUgfCB0eXBlb2YgaW52YWxpZERhdGVLZXk+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoKSBwdWJsaWMgbWluRGF0ZTogRGF0ZSA9IHVuZGVmaW5lZDtcblx0QElucHV0KCkgcHVibGljIG1heERhdGU6IERhdGUgPSB1bmRlZmluZWQ7XG5cdEBJbnB1dCgpIHB1YmxpYyBzYW1lTW9udGhPbmx5ID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtYXQgPSAnZGQtTU0teXl5eSc7XG5cdEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXHRASW5wdXQoKSBwdWJsaWMgY2xlYXJhYmxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93VGltZUlucHV0ID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGludmFsaWRUaW1lQXNNaWRuaWdodCA9IGZhbHNlOyAvLyBpZiB0aGUgdGltZSBpcyBub3QgdmFsaWQsIHVzZSAwMDowMCBhcyB0aGUgdGltZVxuXG5cdEBWaWV3Q2hpbGQoJ25hdGl2ZUlucHV0JykgbmF0aXZlSW5wdXRSZWY6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ3BpY2tlcicpIGRhdGVQaWNrZXJSZWY6IE1hdERhdGVwaWNrZXI8RGF0ZT47XG5cblx0b3BlblBpY2tlck9uRGF0ZTogRGF0ZSA9IG51bGw7XG5cdG1pbkRhdGVTdGFydE9mRGF5OiBEYXRlID0gdW5kZWZpbmVkO1xuXHRtYXhEYXRlRW5kT2ZEYXk6IERhdGUgPSB1bmRlZmluZWQ7XG5cblx0Ly8gdGhpcyBpcyBwYXNzZWQgYXMgbmdtb2RlbCBhbmQgaXMgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgZGF0ZS4gQnV0IHdlIGFsc29cblx0Ly8gdXNlIGlucHV0IGFuZCBuYXRpdmVJbnB1dCBjYWxsYmFja3MgdG8gZXh0ZW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIHNvIHdlXG5cdC8vIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVtcHR5IGFuZCBpbnZhbGlkIGRhdGVzLlxuXHR2YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcjogRGF0ZTtcblx0aG91cnM6IHN0cmluZzsgLy8gc3RyaW5nIGJlY2F1c2UgaXQncyBhIHRleHQgaW5wdXRcblx0bWludXRlczogc3RyaW5nOyAvLyBzdHJpbmcgYmVjYXVzZSBpdCdzIGEgdGV4dCBpbnB1dFxuXHRwcml2YXRlIHNlbGVjdGVkRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XG5cdHByaXZhdGUgZGF0ZVBpY2tpbmdDbG9zaW5nRm46ICgpID0+IHZvaWQ7XG5cdHByaXZhdGUgZGF0ZVRvdWNoZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBob3Vyc1RvdWNoZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBtaW51dGVzVG91Y2hlZCA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHBhcmVudDogRm9ybUVsZW1lbnRDb21wb25lbnQsXG5cdFx0QEhvc3QoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblx0XHRASW5qZWN0KERBVEVfVElNRV9QSUNLRVJfVFJBTlNMQVRJT05TKSBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0aW9uczogYW55LFxuXHRcdEBJbmplY3QoREFURV9QSUNLRVJfTE9DQUxFKSBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVQaWNrZXJMb2NhbGU6IGFueSxcblx0XHRwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEYXRlPixcblx0XHRwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcblx0KSB7XG5cdFx0c3VwZXIocGFyZW50LCBjb250cm9sQ29udGFpbmVyKTtcblx0XHRpZiAoaXNWYWx1ZVNldChkYXRlUGlja2VyTG9jYWxlKSkge1xuXHRcdFx0ZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKGRhdGVQaWNrZXJMb2NhbGUoKSk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIubmdPbkluaXQoKTtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0dGhpcy5wbGFjZWhvbGRlciA9ICcnO1xuXHRcdFx0dGhpcy5zaG93VGltZUlucHV0ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHQvLyB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBkYXRlcGlja2VyIGNsb3NpbmcgZm4gbGF0ZXIsIHNvIHdlIGFyZSBzYXZpbmcgaXQgaGVyZSB0byByZXN0b3JlIGl0IHdoZW4gbmVlZGVkXG5cdFx0XHR0aGlzLmRhdGVQaWNraW5nQ2xvc2luZ0ZuID0gdGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlO1xuXHRcdH1cblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlcy5taW5EYXRlKSB7XG5cdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0fVxuXHRcdGlmIChjaGFuZ2VzLm1heERhdGUpIHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHR9XG5cdH1cblxuXHRzZXRNaW5EYXRlKG1pbkRhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRpZiAobWluRGF0ZSkge1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG5ldyBEYXRlKG1pbkRhdGUpO1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRzZXRNYXhEYXRlKG1heERhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRpZiAobWF4RGF0ZSkge1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkgPSBuZXcgRGF0ZShtYXhEYXRlKTtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5LnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGdldFNlbGVjdGVkTW9udGhzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXkodGhpcy5zZWxlY3RlZERhdGVzLm1hcCgoZSkgPT4gZm9ybWF0RGF0ZShlLCAnTU1NTScpKSkubGVuZ3RoO1xuXHR9XG5cblx0Ly8gZGF0ZUNoYW5nZWQgaXMgY2FsbGVkIHdoZW4gdGhlIG91dHB1dCBvZiB0aGUgZGF0ZXBpY2tlciBpcyBjaGFuZ2VkIGFuZFxuXHQvLyBwYXJzZWQgY29ycmVjdGx5LiBJZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBpdCB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QgdGltZVxuXHQvLyB3aXRoIG51bGwgYnV0IG5ldmVyIGFnYWluIHVudGlsIGEgdmFsaWQgaW5wdXQgaXMgcHJvdmlkZWQuXG5cdGRhdGVDaGFuZ2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBkYXRlID0gZXZlbnQudmFsdWU7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZSA9ICgpID0+IHtcblx0XHRcdH07XG5cblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZSkgPT4gaXNTYW1lRGF5KGUsIGRhdGUpKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKChlKSA9PiAhaXNTYW1lRGF5KGUsIGRhdGUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFsuLi50aGlzLnNlbGVjdGVkRGF0ZXMsIGRhdGVdO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU1RBUlQgSEFDS1xuXHRcdFx0Ly8gdGhlIGRhdGUgcGlja2VyIGRvZXMgbm90IHByb3ZpZGUgYW55IHJlcmVuZGVyIGNhbGxzLiBUaGVyZWZvcmUsIHdlIGFyZSBnb2luZyB0byBjaGFuZ2UgdGhlIG1pbkRhdGUgaW4gb3JkZXIgdG8gZm9yY2UgdGhlIHJlbmRlclxuXHRcdFx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gc2hvdyBhbGwgc2VsZWN0ZWQgZGF5cyBpbiBvdXIgZGF0ZSBwaWNrZXJcblx0XHRcdC8vIFdlIGFsc28gc2V0IHRoZSBpbm5lclZhbHVlIHRvIG51bGwgKHdpdGggdGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7KSwgb3RoZXJ3aXNlIHlvdSBjYW4gbm90XG5cdFx0XHQvLyBkZXNlbGVjdCB5b3VyIGxhc3QgcGlja2VkIGRhdGVcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdFx0Y29uc3Qgb2xkTWluRGF0ZSA9IHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXk7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gbmV3IERhdGUoMCk7XG5cdFx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gb2xkTWluRGF0ZTtcblx0XHRcdC8vIEVORCBIQUNLXG5cblx0XHRcdGlmICh0aGlzLnNhbWVNb250aE9ubHkpIHtcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGggPj0gMikge1xuXHRcdFx0XHRcdGlmIChkYXRlIDwgc3RhcnRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkgfHwgZGF0ZSA+IGVuZE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gW2RhdGVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZSA9IHRoaXMuZGF0ZVBpY2tpbmdDbG9zaW5nRm47XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ub3RpZnlOZXdEYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuc2FtZU1vbnRoT25seSkge1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGggPj0gMikge1xuXHRcdFx0XHR0aGlzLnNldE1pbkRhdGUoc3RhcnRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkpO1xuXHRcdFx0XHR0aGlzLnNldE1heERhdGUoZW5kT2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0TWluRGF0ZSh0aGlzLm1pbkRhdGUpO1xuXHRcdFx0XHR0aGlzLnNldE1heERhdGUodGhpcy5tYXhEYXRlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRNaW5EYXRlKHRoaXMubWluRGF0ZSk7XG5cdFx0XHR0aGlzLnNldE1heERhdGUodGhpcy5tYXhEYXRlKTtcblx0XHR9XG5cdH1cblxuXHRub3RpZnlOZXdEYXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IG5hdGl2ZUlucHV0VmFsdWUgPSB0aGlzLm5hdGl2ZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cdFx0Y29uc3QgcGFyc2VkSG91cnMgPSBOdW1iZXIodGhpcy5ob3Vycyk7XG5cdFx0Y29uc3QgcGFyc2VkTWludXRlcyA9IE51bWJlcih0aGlzLm1pbnV0ZXMpO1xuXG5cdFx0Ly8gaWYgd2UgZG9udCBoYXZlIHRoZSB0aW1lIGVsZW1lbnRcblx0XHRpZiAoIXRoaXMuc2hvd1RpbWVJbnB1dCkge1xuXHRcdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZChuYXRpdmVJbnB1dFZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobnVsbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gd2hlbiBhbGwgaW5wdXRzIGFyZSBlbXB0eVxuXHRcdGlmICghc3RyaW5nSXNTZXRBbmRGaWxsZWQobmF0aXZlSW5wdXRWYWx1ZSkgJiYgIXN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuaG91cnMpICYmICFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLm1pbnV0ZXMpKSB7XG5cdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIGlmIHdlIGhhdmUgZGF0ZSBhbmQgdGltZVxuXHRcdGlmIChcblx0XHRcdHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuaG91cnMpICYmXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUocGFyc2VkSG91cnMpICYmXG5cdFx0XHRwYXJzZWRIb3VycyA+PSAwICYmXG5cdFx0XHRwYXJzZWRIb3VycyA8PSAyMyAmJlxuXHRcdFx0c3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5taW51dGVzKSAmJlxuXHRcdFx0TnVtYmVyLmlzRmluaXRlKHBhcnNlZE1pbnV0ZXMpICYmXG5cdFx0XHRwYXJzZWRNaW51dGVzID49IDAgJiZcblx0XHRcdHBhcnNlZE1pbnV0ZXMgPD0gNTkgJiZcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgaW5zdGFuY2VvZiBEYXRlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBuZXdEYXRlV2l0aEhvdXJzID0gbmV3IERhdGUodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlci5zZXRIb3VycyhwYXJzZWRIb3VycykpO1xuXHRcdFx0Y29uc3QgbmV3RGF0ZVdpdGhNaW51dGVzID0gbmV3IERhdGUobmV3RGF0ZVdpdGhIb3Vycy5zZXRNaW51dGVzKHBhcnNlZE1pbnV0ZXMpKTtcblx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShuZXdEYXRlV2l0aE1pbnV0ZXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbnZhbGlkVGltZUFzTWlkbmlnaHQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYWxsIG90aGVyIGNhc2VzLCB3ZSBhcmUgbm90IGluIGEgdmFsaWQgc3RhdGVcblx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkoaW52YWxpZERhdGVLZXkpO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IEFycmF5PERhdGU+IHwgdHlwZW9mIGludmFsaWREYXRlS2V5KTogdm9pZCB7XG5cdFx0c3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSB2YWx1ZTtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdFx0aWYgKGFycmF5SXNTZXRBbmRGaWxsZWQodmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMub3BlblBpY2tlck9uRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlc1swXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IHZhbHVlID09PSBpbnZhbGlkRGF0ZUtleSA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5ob3VycyA9IFN0cmluZyh2YWx1ZS5nZXRIb3VycygpKTtcblx0XHRcdFx0dGhpcy5taW51dGVzID0gU3RyaW5nKHZhbHVlLmdldE1pbnV0ZXMoKSk7XG5cdFx0XHRcdHRoaXMuZm9ybWF0VGltZSgpO1xuXHRcdFx0XHR0aGlzLm9wZW5QaWNrZXJPbkRhdGUgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaG91cnMgPSAnJztcblx0XHRcdFx0dGhpcy5taW51dGVzID0gJyc7XG5cdFx0XHRcdHRoaXMub3BlblBpY2tlck9uRGF0ZSA9IG51bGw7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIG5hdGl2ZVZhbHVlQ2hhbmdlZCBpcyBjYWxsZWQgd2hlbiB0aGUgaW50ZXJuYWwgdGV4dCB2YWx1ZSBjaGFuZ2VzLCBidXQgbm90XG5cdC8vIHdoZW4gdGhlIGRhdGUgaXMgY2hhbmdlZCB2aWEgdGhlIGRhdGUgcGlja2VyLiBXZSBuZWVkIHRoaXMgc28gdGhhdCB3ZSBjYW5cblx0Ly8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRlcGlja2VyIGlzIGVtcHR5IG9yIGludmFsaWQuXG5cdG5hdGl2ZVZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kYXRlUGlja2VyUmVmLm9wZW5lZCkge1xuXHRcdFx0Ly8gaWYgdGhlIHVzZXIgaXMgdHlwaW5nIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBpY2tlciwgY2xvc2UgaXQuXG5cdFx0XHR0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5ub3RpZnlOZXdEYXRlKCk7XG5cdH1cblxuXHRyZXNldFRvTnVsbCgpOiB2b2lkIHtcblx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobnVsbCk7XG5cdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7XG5cdFx0dGhpcy5uYXRpdmVJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcblx0XHR0aGlzLmhvdXJzID0gJyc7XG5cdFx0dGhpcy5taW51dGVzID0gJyc7XG5cdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gW107XG5cdH1cblxuXHRpc1NlbGVjdGVkID0gKGQ6IERhdGUpID0+IHtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcy5zb21lKChlKSA9PiBpc1NhbWVEYXkoZSwgZCkpID8gJ3NlbGVjdGVkJyA6ICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdGZpbHRlckRhdGVzOiBEYXRlRmlsdGVyRm48YW55PiA9IChlKSA9PiB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblx0Zm9ybWF0VGltZSgpOiB2b2lkIHtcblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKE51bWJlcih0aGlzLmhvdXJzKSkgJiYgdGhpcy5ob3Vycy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRoaXMuaG91cnMgPSAnMCcgKyB0aGlzLmhvdXJzO1xuXHRcdH1cblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKE51bWJlcih0aGlzLm1pbnV0ZXMpKSAmJiB0aGlzLm1pbnV0ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLm1pbnV0ZXMgPSAnMCcgKyB0aGlzLm1pbnV0ZXM7XG5cdFx0fVxuXHR9XG5cblx0dG91Y2hEYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuZGF0ZVRvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0dG91Y2hIb3VycygpOiB2b2lkIHtcblx0XHR0aGlzLmhvdXJzVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHR0b3VjaE1pbnV0ZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5taW51dGVzVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHRkZXRlcm1pbmVBbGxUb3VjaGVkKCk6IHZvaWQge1xuXHRcdGlmICgodGhpcy5kYXRlVG91Y2hlZCAmJiB0aGlzLmhvdXJzVG91Y2hlZCAmJiB0aGlzLm1pbnV0ZXNUb3VjaGVkKSB8fCAodGhpcy5kYXRlVG91Y2hlZCAmJiAhdGhpcy5zaG93VGltZUlucHV0KSkge1xuXHRcdFx0dGhpcy50b3VjaCgpO1xuXHRcdH1cblx0fVxuXG5cblx0Z2V0RGVmYXVsdFRyYW5zbGF0aW9uKGtleTogc3RyaW5nKTogKHg6IGFueSkgPT4gc3RyaW5nIHtcblx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0Y2FzZSAncGxhY2Vob2xkZXInOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gJ1NlbGVjdCBkYXRlJztcblx0XHRcdGNhc2UgJ3NlbGVjdERheXMnOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gJ1NlbGVjdCBkYXkocyknO1xuXHRcdFx0Y2FzZSAnc2VsZWN0ZWREYXRlJzpcblx0XHRcdFx0cmV0dXJuIChkOiBEYXRlKSA9PiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuXHRcdFx0Y2FzZSAnZGF5c1NlbGVjdGVkJzpcblx0XHRcdFx0cmV0dXJuIChhbW91bnQpID0+IGAke2Ftb3VudH0gZGF5cyBzZWxlY3RlZGA7XG5cdFx0XHRjYXNlICdzZWxlY3RlZEluTW9udGgnOlxuXHRcdFx0XHRyZXR1cm4gKGQ6IERhdGUpID0+IGAgaW4gJHtmb3JtYXREYXRlKGQsICdNTU1NJyl9YDtcblx0XHR9XG5cdH1cblxuXHRnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZywgcGFyYW1zOiBhbnkgPSBudWxsKTogc3RyaW5nIHtcblx0XHRpZiAoa2V5ID09PSAncGxhY2Vob2xkZXInICYmIHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0aWYgKGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiBzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLnBsYWNlaG9sZGVyKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucz8uW2tleV0/LihwYXJhbXMpID8/IHRoaXMuZ2V0RGVmYXVsdFRyYW5zbGF0aW9uKGtleSkocGFyYW1zKTtcblx0fVxufVxuIl19
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';
|
|
4
|
-
export class EmailInputComponent extends ValueAccessorBase {
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
this.placeholder = '';
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
EmailInputComponent.decorators = [
|
|
11
|
-
{ type: Component, args: [{
|
|
12
|
-
selector: 'klp-form-email-input',
|
|
13
|
-
template: "<input\n\ttype=\"email\"\n\tclass=\"form-control\"\n\t[(ngModel)]=\"innerValue\"\n\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t[placeholder]=\"placeholder\"\n\t(blur)=\"touch()\"\n\t[disabled]=\"disabled\"\n/>\n",
|
|
14
|
-
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: EmailInputComponent, multi: true }],
|
|
15
|
-
styles: [":host,input{display:block}input{-moz-transition:all .2s ease-in;-ms-transition:all .2s ease-in;-o-transition:all .2s ease-in;-webkit-transition:all .2s ease-in;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;color:#888da8;font-size:14px;height:42px;outline:none;padding:.375rem .625rem;transition:all .2s ease-in;width:100%}input::-webkit-input-placeholder{color:#adadad}input:-moz-placeholder,input::-moz-placeholder{color:#adadad}input:-ms-input-placeholder{color:#adadad}input:focus{border-color:#3ed778;box-shadow:none;outline:0 none}input.input-sm{height:30px}input.input-lg{height:50px}input.error{background-color:#f6cdd1;border-color:#dc3545}input.valid{background-color:#ebfaeb;border-color:#37c936;color:#278d26}.showErrors{border-color:#ff8000}"]
|
|
16
|
-
},] }
|
|
17
|
-
];
|
|
18
|
-
EmailInputComponent.propDecorators = {
|
|
19
|
-
placeholder: [{ type: Input }]
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL25neC1lbmhhbmN5LWZvcm1zL25neC1lbmhhbmN5LWZvcm1zL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvIiwic291cmNlcyI6WyJsaWIvZWxlbWVudHMvZW1haWwvZW1haWwtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBeUI7SUFObEU7O1FBT1UsZ0JBQVcsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7O1lBUkEsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLCtPQUEyQztnQkFFM0MsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQzs7YUFDeEY7OzswQkFFQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VmFsdWVBY2Nlc3NvckJhc2V9IGZyb20gJy4uL3ZhbHVlLWFjY2Vzc29yLWJhc2UvdmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1lbWFpbC1pbnB1dCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9lbWFpbC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2VtYWlsLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW3twcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IEVtYWlsSW5wdXRDb21wb25lbnQsIG11bHRpOiB0cnVlfV0sXG59KVxuZXhwb3J0IGNsYXNzIEVtYWlsSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUFjY2Vzc29yQmFzZTxzdHJpbmc+IHtcblx0QElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbn1cbiJdfQ==
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { MultipleValueAccessorBase } from '../value-accessor-base/multiple-value-accessor-base.component';
|
|
4
|
-
import { isValueSet } from '../../util/values';
|
|
5
|
-
import { arrayIsSetAndFilled } from '../../util/arrays';
|
|
6
|
-
export class FileInputComponent extends MultipleValueAccessorBase {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.isLoading = false;
|
|
10
|
-
this.clearable = false;
|
|
11
|
-
this.onlyShowUploadButton = false;
|
|
12
|
-
this.useFullParentSize = false;
|
|
13
|
-
}
|
|
14
|
-
onChange(files) {
|
|
15
|
-
const result = [];
|
|
16
|
-
for (let i = 0; i < files.length; i++) {
|
|
17
|
-
result.push(files.item(i));
|
|
18
|
-
}
|
|
19
|
-
this.setInnerValueAndNotify(result);
|
|
20
|
-
// to make sure we can select the same file again
|
|
21
|
-
this.fileInputEl.nativeElement.value = null;
|
|
22
|
-
}
|
|
23
|
-
getFileNames() {
|
|
24
|
-
if (Array.isArray(this.innerValue)) {
|
|
25
|
-
return this.innerValue.map(e => e.name).join(', ');
|
|
26
|
-
}
|
|
27
|
-
else if (this.innerValue instanceof File) {
|
|
28
|
-
return this.innerValue.name;
|
|
29
|
-
}
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
shouldShowClearButton() {
|
|
33
|
-
if (this.onlyShowUploadButton) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
if (this.multiple) {
|
|
37
|
-
if (arrayIsSetAndFilled(this.innerValue)) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
if (isValueSet(this.innerValue)) {
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
uploadFileClicked() {
|
|
48
|
-
this.fileInputEl.nativeElement.click();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
FileInputComponent.decorators = [
|
|
52
|
-
{ type: Component, args: [{
|
|
53
|
-
selector: 'klp-form-file-input',
|
|
54
|
-
template: "<div class=\"componentContainer\" [ngClass]=\"{fullParentSize: useFullParentSize}\">\n\t<div class=\"buttonContainer\">\n\t\t<klp-form-button class=\"uploadButton\" [isLoading]=\"isLoading\" (click)=\"uploadFileClicked()\">\n\t\t\tUpload a file\n\t\t</klp-form-button>\n\t\t<input\n\t\t\ttype=\"file\"\n\t\t\t#fileInput\n\t\t\t(change)=\"onChange($event.target.files)\"\n\t\t\t[multiple]=\"multiple\"\n\t\t\t[disabled]=\"disabled\"\n\t\t>\n\t</div>\n\t<div class=\"fileName\" *ngIf=\"!onlyShowUploadButton\">\n\t\t{{getFileNames()}}\n\t</div>\n\t<klp-form-button class=\"clearButton\" variant=\"white\" *ngIf=\"shouldShowClearButton()\" (click)=\"resetToNull()\">X</klp-form-button>\n</div>\n",
|
|
55
|
-
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: FileInputComponent, multi: true }],
|
|
56
|
-
styles: [":host{display:block}:host input:disabled{cursor:not-allowed}.componentContainer{align-items:center;display:flex}.componentContainer.fullParentSize{height:100%;justify-content:center;position:relative}.componentContainer:not(.fullParentSize) .buttonContainer{position:relative}.componentContainer .buttonContainer{flex:0 0 auto}input{bottom:0;cursor:pointer;left:0;opacity:0;position:absolute;right:0;top:0}.fileName{color:#515365;flex:1 1 0px;margin-left:.625rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.clearButton{flex:0 0 auto}"]
|
|
57
|
-
},] }
|
|
58
|
-
];
|
|
59
|
-
FileInputComponent.propDecorators = {
|
|
60
|
-
isLoading: [{ type: Input }],
|
|
61
|
-
clearable: [{ type: Input }],
|
|
62
|
-
onlyShowUploadButton: [{ type: Input }],
|
|
63
|
-
useFullParentSize: [{ type: Input }],
|
|
64
|
-
fileInputEl: [{ type: ViewChild, args: ['fileInput',] }]
|
|
65
|
-
};
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9lbGVtZW50cy9maWxlLWlucHV0L2ZpbGUtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUN4RyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFReEQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHlCQUErQjtJQU52RTs7UUFPVSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztJQXlDcEMsQ0FBQztJQXRDTyxRQUFRLENBQUMsS0FBZTtRQUM5QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVNLFlBQVk7UUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuRDthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsWUFBWSxJQUFJLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztTQUM1QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVNLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM5QixPQUFPLEtBQUssQ0FBQztTQUNiO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLElBQUksQ0FBQzthQUNaO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDYjtRQUNELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQztTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRU0saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUM7OztZQWxERCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsZ3NCQUEwQztnQkFFMUMsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQzs7YUFDdkY7Ozt3QkFFQyxLQUFLO3dCQUNMLEtBQUs7bUNBQ0wsS0FBSztnQ0FDTCxLQUFLOzBCQUNMLFNBQVMsU0FBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi92YWx1ZS1hY2Nlc3Nvci1iYXNlL211bHRpcGxlLXZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7aXNWYWx1ZVNldH0gZnJvbSAnLi4vLi4vdXRpbC92YWx1ZXMnO1xuaW1wb3J0IHsgYXJyYXlJc1NldEFuZEZpbGxlZCB9IGZyb20gJy4uLy4uL3V0aWwvYXJyYXlzJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tZmlsZS1pbnB1dCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZmlsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuXHRwcm92aWRlcnM6IFt7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGaWxlSW5wdXRDb21wb25lbnQsIG11bHRpOiB0cnVlfV0sXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVJbnB1dENvbXBvbmVudCBleHRlbmRzIE11bHRpcGxlVmFsdWVBY2Nlc3NvckJhc2U8RmlsZT4ge1xuXHRASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcblx0QElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIG9ubHlTaG93VXBsb2FkQnV0dG9uID0gZmFsc2U7XG5cdEBJbnB1dCgpIHVzZUZ1bGxQYXJlbnRTaXplID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dEVsOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG5cdHB1YmxpYyBvbkNoYW5nZShmaWxlczogRmlsZUxpc3QpOiB2b2lkIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRyZXN1bHQucHVzaChmaWxlcy5pdGVtKGkpKTtcblx0XHR9XG5cdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHJlc3VsdCk7XG5cdFx0Ly8gdG8gbWFrZSBzdXJlIHdlIGNhbiBzZWxlY3QgdGhlIHNhbWUgZmlsZSBhZ2FpblxuXHRcdHRoaXMuZmlsZUlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RmlsZU5hbWVzKCk6IHN0cmluZyB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy5pbm5lclZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5uZXJWYWx1ZS5tYXAoZSA9PiBlLm5hbWUpLmpvaW4oJywgJyk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlubmVyVmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbm5lclZhbHVlLm5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNob3VsZFNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5vbmx5U2hvd1VwbG9hZEJ1dHRvbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0aWYgKGFycmF5SXNTZXRBbmRGaWxsZWQodGhpcy5pbm5lclZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5pbm5lclZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWRGaWxlQ2xpY2tlZCgpOiB2b2lkIHtcblx0XHR0aGlzLmZpbGVJbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcblx0fVxufVxuIl19
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';
|
|
4
|
-
import { stringIsSetAndFilled } from '../../util/values';
|
|
5
|
-
import { invalidTimeKey } from '../../validators/timeValidator';
|
|
6
|
-
export class HourMinuteInputComponent extends ValueAccessorBase {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.placeholders = ['hour', 'min'];
|
|
10
|
-
this.hoursTouched = false;
|
|
11
|
-
this.minutesTouched = false;
|
|
12
|
-
}
|
|
13
|
-
formatHours() {
|
|
14
|
-
if (!stringIsSetAndFilled(this.hours)) {
|
|
15
|
-
this.hours = '0';
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
formatMinutes() {
|
|
19
|
-
if (!stringIsSetAndFilled(this.minutes)) {
|
|
20
|
-
this.minutes = '0';
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
formatTime() {
|
|
24
|
-
if (Number.isFinite(Number(this.hours)) && this.hours.length === 1) {
|
|
25
|
-
this.hours = '0' + this.hours;
|
|
26
|
-
}
|
|
27
|
-
if (Number.isFinite(Number(this.minutes)) && this.minutes.length === 1) {
|
|
28
|
-
this.minutes = '0' + this.minutes;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
writeValue(value) {
|
|
32
|
-
if (Number.isFinite(value)) {
|
|
33
|
-
this.hours = Math.floor(value / 60) + '';
|
|
34
|
-
this.minutes = value % 60 + '';
|
|
35
|
-
this.formatTime();
|
|
36
|
-
super.writeValue(value);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
this.hours = '';
|
|
40
|
-
this.minutes = '';
|
|
41
|
-
super.writeValue(invalidTimeKey);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
notifyNewTime() {
|
|
45
|
-
const parsedHours = Number(this.hours);
|
|
46
|
-
const parsedMinutes = Number(this.minutes);
|
|
47
|
-
// when all inputs are empty
|
|
48
|
-
if (!stringIsSetAndFilled(this.hours) && !stringIsSetAndFilled(this.minutes)) {
|
|
49
|
-
this.setInnerValueAndNotify(null);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// if we have valid time
|
|
53
|
-
if (Number.isFinite(parsedHours) &&
|
|
54
|
-
parsedHours >= 0 &&
|
|
55
|
-
parsedHours <= 9999 &&
|
|
56
|
-
Number.isFinite(parsedMinutes) &&
|
|
57
|
-
parsedMinutes >= 0 &&
|
|
58
|
-
parsedMinutes <= 59) {
|
|
59
|
-
this.setInnerValueAndNotify(parsedHours * 60 + parsedMinutes);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
// all other cases, we are not in a valid state
|
|
63
|
-
this.setInnerValueAndNotify(invalidTimeKey);
|
|
64
|
-
}
|
|
65
|
-
touchHours() {
|
|
66
|
-
this.hoursTouched = true;
|
|
67
|
-
this.determineAllTouched();
|
|
68
|
-
}
|
|
69
|
-
touchMinutes() {
|
|
70
|
-
this.minutesTouched = true;
|
|
71
|
-
this.determineAllTouched();
|
|
72
|
-
}
|
|
73
|
-
determineAllTouched() {
|
|
74
|
-
if (this.hoursTouched && this.minutesTouched) {
|
|
75
|
-
this.touch();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
HourMinuteInputComponent.decorators = [
|
|
80
|
-
{ type: Component, args: [{
|
|
81
|
-
selector: 'klp-form-hour-minute-input',
|
|
82
|
-
template: "<div class=\"componentContainer\" [ngClass]=\"{disabled: disabled}\">\n\t<input class=\"hourInput\" maxlength=\"4\" [placeholder]=\"placeholders[0]\" [disabled]=\"disabled\" [(ngModel)]=\"hours\" (blur)=\"formatHours(); formatTime(); touchHours(); notifyNewTime()\" (ngModelChange)=\"notifyNewTime()\">\n\t<div class=\"divider\">:</div>\n\t<input maxlength=\"2\" [placeholder]=\"placeholders[1]\" [disabled]=\"disabled\" [(ngModel)]=\"minutes\" (blur)=\"formatMinutes(); formatTime(); touchMinutes(); notifyNewTime()\" (ngModelChange)=\"notifyNewTime()\">\n</div>\n",
|
|
83
|
-
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: HourMinuteInputComponent, multi: true }],
|
|
84
|
-
styles: [":host{display:flex}.componentContainer{align-items:center;background:#fff;border:1px solid #e6ecf5;display:flex;flex:0 0 auto;height:42px;padding:6px .625rem}.componentContainer.disabled{background:#f9f9f9;cursor:not-allowed}.componentContainer input{border:none;color:#888da8;padding:0;text-align:center;width:30px}.componentContainer input.hourInput{width:50px}.componentContainer input::-moz-placeholder{color:#adadad}.componentContainer input:-ms-input-placeholder{color:#adadad}.componentContainer input::placeholder{color:#adadad}.componentContainer .divider{margin:0 .3125rem}"]
|
|
85
|
-
},] }
|
|
86
|
-
];
|
|
87
|
-
HourMinuteInputComponent.propDecorators = {
|
|
88
|
-
placeholders: [{ type: Input }]
|
|
89
|
-
};
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91ci1taW51dGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL25neC1lbmhhbmN5LWZvcm1zL25neC1lbmhhbmN5LWZvcm1zL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvIiwic291cmNlcyI6WyJsaWIvZWxlbWVudHMvaG91ci1taW51dGUtaW5wdXQvaG91ci1taW51dGUtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQVM5RCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsaUJBQWlEO0lBTi9GOztRQVVVLGlCQUFZLEdBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9DLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBNEVoQyxDQUFDO0lBMUVBLFdBQVc7UUFDVixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2pCO0lBQ0YsQ0FBQztJQUVELGFBQWE7UUFDWixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1NBQ25CO0lBQ0YsQ0FBQztJQUVELFVBQVU7UUFDVCxJQUFJLE1BQU0sQ0FB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OzthQUM3Rjs7OzJCQUtDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtWYWx1ZUFjY2Vzc29yQmFzZX0gZnJvbSAnLi4vdmFsdWUtYWNjZXNzb3ItYmFzZS92YWx1ZS1hY2Nlc3Nvci1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge3N0cmluZ0lzU2V0QW5kRmlsbGVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbHVlcyc7XG5pbXBvcnQge2ludmFsaWRUaW1lS2V5fSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3RpbWVWYWxpZGF0b3InO1xuXG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtLWhvdXItbWludXRlLWlucHV0Jyxcblx0dGVtcGxhdGVVcmw6ICcuL2hvdXItbWludXRlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vaG91ci1taW51dGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcblx0cHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSG91ck1pbnV0ZUlucHV0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX1dLFxufSlcbmV4cG9ydCBjbGFzcyBIb3VyTWludXRlSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUFjY2Vzc29yQmFzZTxudW1iZXIgfCB0eXBlb2YgaW52YWxpZFRpbWVLZXk+IHtcblx0cHVibGljIGhvdXJzOiBzdHJpbmc7IC8vIHN0cmluZyBiZWNhdXNlIGl0J3MgYSB0ZXh0IGlucHV0XG5cdHB1YmxpYyBtaW51dGVzOiBzdHJpbmc7IC8vIHN0cmluZyBiZWNhdXNlIGl0J3MgYSB0ZXh0IGlucHV0XG5cblx0QElucHV0KCkgcGxhY2Vob2xkZXJzOiBBcnJheTxzdHJpbmc+ID0gWydob3VyJywgJ21pbiddO1xuXG5cdHByaXZhdGUgaG91cnNUb3VjaGVkID0gZmFsc2U7XG5cdHByaXZhdGUgbWludXRlc1RvdWNoZWQgPSBmYWxzZTtcblxuXHRmb3JtYXRIb3VycygpOiB2b2lkIHtcblx0XHRpZiAoIXN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuaG91cnMpKSB7XG5cdFx0XHR0aGlzLmhvdXJzID0gJzAnO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdE1pbnV0ZXMoKTogdm9pZCB7XG5cdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLm1pbnV0ZXMpKSB7XG5cdFx0XHR0aGlzLm1pbnV0ZXMgPSAnMCc7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0VGltZSgpOiB2b2lkIHtcblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKE51bWJlcih0aGlzLmhvdXJzKSkgJiYgdGhpcy5ob3Vycy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRoaXMuaG91cnMgPSAnMCcgKyB0aGlzLmhvdXJzO1xuXHRcdH1cblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKE51bWJlcih0aGlzLm1pbnV0ZXMpKSAmJiB0aGlzLm1pbnV0ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLm1pbnV0ZXMgPSAnMCcgKyB0aGlzLm1pbnV0ZXM7XG5cdFx0fVxuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgdHlwZW9mIGludmFsaWRUaW1lS2V5KTogdm9pZCB7XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcblx0XHRcdHRoaXMuaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIGFzIG51bWJlciAvIDYwKSArICcnO1xuXHRcdFx0dGhpcy5taW51dGVzID0gdmFsdWUgYXMgbnVtYmVyICUgNjAgKyAnJztcblx0XHRcdHRoaXMuZm9ybWF0VGltZSgpO1xuXHRcdFx0c3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaG91cnMgPSAnJztcblx0XHRcdHRoaXMubWludXRlcyA9ICcnO1xuXHRcdFx0c3VwZXIud3JpdGVWYWx1ZShpbnZhbGlkVGltZUtleSk7XG5cdFx0fVxuXHR9XG5cblx0bm90aWZ5TmV3VGltZSgpOiB2b2lkIHtcblx0XHRjb25zdCBwYXJzZWRIb3VycyA9IE51bWJlcih0aGlzLmhvdXJzKTtcblx0XHRjb25zdCBwYXJzZWRNaW51dGVzID0gTnVtYmVyKHRoaXMubWludXRlcyk7XG5cblx0XHQvLyB3aGVuIGFsbCBpbnB1dHMgYXJlIGVtcHR5XG5cdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmhvdXJzKSAmJiAhc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5taW51dGVzKSkge1xuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBpZiB3ZSBoYXZlIHZhbGlkIHRpbWVcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUocGFyc2VkSG91cnMpICYmXG5cdFx0XHRwYXJzZWRIb3VycyA+PSAwICYmXG5cdFx0XHRwYXJzZWRIb3VycyA8PSA5OTk5ICYmXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUocGFyc2VkTWludXRlcykgJiZcblx0XHRcdHBhcnNlZE1pbnV0ZXMgPj0gMCAmJlxuXHRcdFx0cGFyc2VkTWludXRlcyA8PSA1OVxuXHRcdCkge1xuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHBhcnNlZEhvdXJzICogNjAgKyBwYXJzZWRNaW51dGVzKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gYWxsIG90aGVyIGNhc2VzLCB3ZSBhcmUgbm90IGluIGEgdmFsaWQgc3RhdGVcblx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkoaW52YWxpZFRpbWVLZXkpO1xuXHR9XG5cblx0dG91Y2hIb3VycygpOiB2b2lkIHtcblx0XHR0aGlzLmhvdXJzVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHR0b3VjaE1pbnV0ZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5taW51dGVzVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHRkZXRlcm1pbmVBbGxUb3VjaGVkKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmhvdXJzVG91Y2hlZCAmJiB0aGlzLm1pbnV0ZXNUb3VjaGVkKSB7XG5cdFx0XHR0aGlzLnRvdWNoKCk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
export class LoadingIndicatorComponent {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.variant = '3dots';
|
|
5
|
-
this.size = 'medium';
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
LoadingIndicatorComponent.decorators = [
|
|
9
|
-
{ type: Component, args: [{
|
|
10
|
-
selector: 'klp-form-loading-indicator',
|
|
11
|
-
template: "<div class=\"threeDots\" [ngClass]=\"[size]\" *ngIf=\"variant === '3dots'\">\n\t<div></div>\n\t<div></div>\n\t<div></div>\n\t<div></div>\n</div>\n\n<div class=\"spinner\" [ngClass]=\"[size]\" *ngIf=\"variant === 'spinner'\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n\t\t<circle cx=\"24\" cy=\"4\" r=\"4\" fill=\"currentColor\" />\n\t\t<circle cx=\"12.19\" cy=\"7.86\" r=\"3.7\" fill=\"currentColor\" />\n\t\t<circle cx=\"5.02\" cy=\"17.68\" r=\"3.4\" fill=\"currentColor\" />\n\t\t<circle cx=\"5.02\" cy=\"30.32\" r=\"3.1\" fill=\"currentColor\" />\n\t\t<circle cx=\"12.19\" cy=\"40.14\" r=\"2.8\" fill=\"currentColor\" />\n\t\t<circle cx=\"24\" cy=\"44\" r=\"2.5\" fill=\"currentColor\" />\n\t\t<circle cx=\"35.81\" cy=\"40.14\" r=\"2.2\" fill=\"currentColor\" />\n\t\t<circle cx=\"42.98\" cy=\"30.32\" r=\"1.9\" fill=\"currentColor\" />\n\t\t<circle cx=\"42.98\" cy=\"17.68\" r=\"1.6\" fill=\"currentColor\" />\n\t\t<circle cx=\"35.81\" cy=\"7.86\" r=\"1.3\" fill=\"currentColor\" />\n\t</svg>\n</div>\n\n<div class=\"textInput\" *ngIf=\"variant === 'textInput'\">\n\t<input\n\t\tdisabled\n\t\ttype=\"text\"\n\t\tclass=\"form-control\"\n\t\tplaceholder=\"Loading...\"\n\t>\n</div>\n\n<div class=\"picker\" *ngIf=\"variant === 'picker'\">\n\t<input\n\t\tdisabled\n\t\ttype=\"text\"\n\t\tclass=\"form-control\"\n\t\tplaceholder=\"Loading...\"\n\t>\n\t<div class=\"chevronDown\"></div>\n</div>\n",
|
|
12
|
-
styles: [".threeDots,:host{display:block}.threeDots{height:var(--base);position:relative;width:calc(var(--base)*4)}.threeDots.tiny{--base:4px}.threeDots.small{--base:8px}.threeDots.medium{--base:12px}.threeDots.large{--base:18px}.threeDots.huge{--base:26px}.threeDots div{-webkit-animation-timing-function:cubic-bezier(0,1,1,0);animation-timing-function:cubic-bezier(0,1,1,0);background:#27bb5f;border-radius:50%;height:var(--base);position:absolute;top:0;width:var(--base)}.threeDots div:first-child{-webkit-animation:lds-ellipsis1 .6s infinite;animation:lds-ellipsis1 .6s infinite}.threeDots div:nth-child(2),.threeDots div:nth-child(3){-webkit-animation:lds-ellipsis2 .6s infinite;animation:lds-ellipsis2 .6s infinite}.threeDots div:nth-child(3){left:calc(var(--base)*1.5)}.threeDots div:nth-child(4){-webkit-animation:lds-ellipsis3 .6s infinite;animation:lds-ellipsis3 .6s infinite;left:calc(var(--base)*3)}@-webkit-keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@-webkit-keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(150%)}}@keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(150%)}}.spinner.tiny svg{height:1rem;width:1rem}.spinner.small svg{height:1.6rem;width:1.6rem}.spinner.medium svg{height:2.5rem;width:2.5rem}.spinner.large svg{height:3rem;width:3rem}.spinner.huge svg{height:4rem;width:4rem}.spinner svg{-moz-animation-duration:1.2s;-moz-animation-iteration-count:infinite;-moz-animation-name:rotate;-moz-animation-timing-function:linear;-moz-transition-property:-moz-transform;-webkit-animation-duration:1.2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:rotate;-webkit-animation-timing-function:linear;-webkit-transition-duration:1.2s;-webkit-transition-property:-webkit-transform;animation-duration:1.2s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transition-property:transform}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.picker{position:relative}.picker .chevronDown{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #888da8;height:0;position:absolute;right:23px;top:18px;width:0}"]
|
|
13
|
-
},] }
|
|
14
|
-
];
|
|
15
|
-
LoadingIndicatorComponent.propDecorators = {
|
|
16
|
-
variant: [{ type: Input }],
|
|
17
|
-
size: [{ type: Input }]
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL25neC1lbmhhbmN5LWZvcm1zL25neC1lbmhhbmN5LWZvcm1zL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvIiwic291cmNlcyI6WyJsaWIvZWxlbWVudHMvbG9hZGluZy1pbmRpY2F0b3IvbG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT2pELE1BQU0sT0FBTyx5QkFBeUI7SUFMdEM7UUFNaUIsWUFBTyxHQUFpRCxPQUFPLENBQUM7UUFDaEUsU0FBSSxHQUFtRCxRQUFRLENBQUM7SUFDakYsQ0FBQzs7O1lBUkEsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLHE3Q0FBaUQ7O2FBRWpEOzs7c0JBRUMsS0FBSzttQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1sb2FkaW5nLWluZGljYXRvcicsXG5cdHRlbXBsYXRlVXJsOiAnLi9sb2FkaW5nLWluZGljYXRvci5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2xvYWRpbmctaW5kaWNhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQge1xuXHRASW5wdXQoKSBwdWJsaWMgdmFyaWFudDogJzNkb3RzJyB8ICdzcGlubmVyJyB8ICd0ZXh0SW5wdXQnIHwgJ3BpY2tlcicgPSAnM2RvdHMnO1xuXHRASW5wdXQoKSBwdWJsaWMgc2l6ZTogJ3RpbnknIHwgJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyB8ICdodWdlJyA9ICdtZWRpdW0nO1xufVxuIl19
|