@klippa/ngx-enhancy-forms 5.3.4 → 5.3.5
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/bundles/klippa-ngx-enhancy-forms.umd.js +7 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.js.map +1 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js +2 -2
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js.map +1 -1
- package/esm2015/lib/elements/date-time-picker/date-time-picker.component.js +9 -3
- package/fesm2015/klippa-ngx-enhancy-forms.js +7 -1
- package/fesm2015/klippa-ngx-enhancy-forms.js.map +1 -1
- package/klippa-ngx-enhancy-forms.metadata.json +1 -1
- package/lib/elements/date-time-picker/date-time-picker.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import { invalidDateKey } from '../../validators/dateValidator';
|
|
|
4
4
|
import { DateAdapter, MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS } from '@angular/material/core';
|
|
5
5
|
import { FormElementComponent } from '../../form/form-element/form-element.component';
|
|
6
6
|
import { MultipleValueAccessorBase } from '../value-accessor-base/multiple-value-accessor-base.component';
|
|
7
|
-
import { isValueSet, removeDuplicatesFromArray, stringIsSetAndFilled } from '../../util/values';
|
|
7
|
+
import { arrayIsSetAndFilled, isValueSet, removeDuplicatesFromArray, stringIsSetAndFilled } from '../../util/values';
|
|
8
8
|
import { endOfMonth, format as formatDate, startOfMonth } from 'date-fns';
|
|
9
9
|
export const KLP_DATE_FORMATS = new InjectionToken('klp.form.date.formats');
|
|
10
10
|
export const DATE_TIME_PICKER_TRANSLATIONS = new InjectionToken('klp.form.dateTime.translations');
|
|
@@ -29,6 +29,7 @@ export class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
29
29
|
this.clearable = false;
|
|
30
30
|
this.showTimeInput = true;
|
|
31
31
|
this.invalidTimeAsMidnight = false; // if the time is not valid, use 00:00 as the time
|
|
32
|
+
this.openPickerOnDate = null;
|
|
32
33
|
this.minDateStartOfDay = undefined;
|
|
33
34
|
this.maxDateEndOfDay = undefined;
|
|
34
35
|
this.selectedDates = [];
|
|
@@ -202,6 +203,9 @@ export class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
202
203
|
this.selectedDates = value;
|
|
203
204
|
this.determineMinAndMaxDates();
|
|
204
205
|
this.valueForMaterialDatePicker = null;
|
|
206
|
+
if (arrayIsSetAndFilled(value)) {
|
|
207
|
+
this.openPickerOnDate = this.selectedDates[0];
|
|
208
|
+
}
|
|
205
209
|
}
|
|
206
210
|
else {
|
|
207
211
|
this.valueForMaterialDatePicker = value === invalidDateKey ? null : value;
|
|
@@ -209,10 +213,12 @@ export class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
209
213
|
this.hours = String(value.getHours());
|
|
210
214
|
this.minutes = String(value.getMinutes());
|
|
211
215
|
this.formatTime();
|
|
216
|
+
this.openPickerOnDate = value;
|
|
212
217
|
}
|
|
213
218
|
else {
|
|
214
219
|
this.hours = '';
|
|
215
220
|
this.minutes = '';
|
|
221
|
+
this.openPickerOnDate = null;
|
|
216
222
|
}
|
|
217
223
|
}
|
|
218
224
|
}
|
|
@@ -287,7 +293,7 @@ export class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
287
293
|
DateTimePickerComponent.decorators = [
|
|
288
294
|
{ type: Component, args: [{
|
|
289
295
|
selector: 'klp-form-date-time-picker',
|
|
290
|
-
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></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",
|
|
296
|
+
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",
|
|
291
297
|
providers: [
|
|
292
298
|
{ provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true },
|
|
293
299
|
{
|
|
@@ -319,4 +325,4 @@ DateTimePickerComponent.propDecorators = {
|
|
|
319
325
|
nativeInputRef: [{ type: ViewChild, args: ['nativeInput',] }],
|
|
320
326
|
datePickerRef: [{ type: ViewChild, args: ['picker',] }]
|
|
321
327
|
};
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsU0FBUyxFQUVULElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBRTlHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RixPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUFNLGdDQUFnQyxDQUFDLENBQUM7QUFD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U0FBQyxhQUFhOzRCQUN2QixTQUFTLFNBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEhvc3QsXG5cdEluamVjdCxcblx0SW5qZWN0aW9uVG9rZW4sXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uSW5pdCxcblx0T3B0aW9uYWwsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7aW52YWxpZERhdGVLZXl9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvZGF0ZVZhbGlkYXRvcic7XG5pbXBvcnQge0RhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfTkFUSVZFX0RBVEVfRk9STUFUUywgTWF0RGF0ZUZvcm1hdHN9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtLbHBEYXRlRm9ybWF0c30gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge011bHRpcGxlVmFsdWVBY2Nlc3NvckJhc2V9IGZyb20gJy4uL3ZhbHVlLWFjY2Vzc29yLWJhc2UvbXVsdGlwbGUtdmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtpc1ZhbHVlU2V0LCByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5LCBzdHJpbmdJc1NldEFuZEZpbGxlZH0gZnJvbSAnLi4vLi4vdXRpbC92YWx1ZXMnO1xuaW1wb3J0IHtlbmRPZk1vbnRoLCBmb3JtYXQgYXMgZm9ybWF0RGF0ZSwgc3RhcnRPZk1vbnRofSBmcm9tICdkYXRlLWZucyc7XG5cbmV4cG9ydCBjb25zdCBLTFBfREFURV9GT1JNQVRTID0gbmV3IEluamVjdGlvblRva2VuPEtscERhdGVGb3JtYXRzPigna2xwLmZvcm0uZGF0ZS5mb3JtYXRzJyk7XG5leHBvcnQgY29uc3QgREFURV9USU1FX1BJQ0tFUl9UUkFOU0xBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55Pigna2xwLmZvcm0uZGF0ZVRpbWUudHJhbnNsYXRpb25zJyk7XG5leHBvcnQgY29uc3QgREFURV9QSUNLRVJfTE9DQUxFID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2tscC5mb3JtLmRhdGVUaW1lLmxvY2FsZScpO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0RGF0ZUZvcm1hdHNGYWN0b3J5KGNvbXBvbmVudDogRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIGRhdGVGb3JtYXRzPzogS2xwRGF0ZUZvcm1hdHMpOiBNYXREYXRlRm9ybWF0cyB7XG5cdHJldHVybiBkYXRlRm9ybWF0cz8uKGNvbXBvbmVudC5mb3JtYXQpID8/IE1BVF9OQVRJVkVfREFURV9GT1JNQVRTO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1kYXRlLXRpbWUtcGlja2VyJyxcblx0dGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX0sXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUyxcblx0XHRcdGRlcHM6IFtEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgW25ldyBPcHRpb25hbCgpLCBLTFBfREFURV9GT1JNQVRTXV0sXG5cdFx0XHR1c2VGYWN0b3J5OiBtYXREYXRlRm9ybWF0c0ZhY3RvcnksXG5cdFx0fSxcblx0XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlPERhdGUgfCB0eXBlb2YgaW52YWxpZERhdGVLZXk+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoKSBwdWJsaWMgbWluRGF0ZTogRGF0ZSA9IHVuZGVmaW5lZDtcblx0QElucHV0KCkgcHVibGljIG1heERhdGU6IERhdGUgPSB1bmRlZmluZWQ7XG5cdEBJbnB1dCgpIHB1YmxpYyBzYW1lTW9udGhPbmx5ID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtYXQgPSAnZGQtTU0teXl5eSc7XG5cdEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXHRASW5wdXQoKSBwdWJsaWMgY2xlYXJhYmxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93VGltZUlucHV0ID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGludmFsaWRUaW1lQXNNaWRuaWdodCA9IGZhbHNlOyAvLyBpZiB0aGUgdGltZSBpcyBub3QgdmFsaWQsIHVzZSAwMDowMCBhcyB0aGUgdGltZVxuXG5cdEBWaWV3Q2hpbGQoJ25hdGl2ZUlucHV0JykgbmF0aXZlSW5wdXRSZWY6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ3BpY2tlcicpIGRhdGVQaWNrZXJSZWY6IE1hdERhdGVwaWNrZXI8RGF0ZT47XG5cblx0bWluRGF0ZVN0YXJ0T2ZEYXk6IERhdGUgPSB1bmRlZmluZWQ7XG5cdG1heERhdGVFbmRPZkRheTogRGF0ZSA9IHVuZGVmaW5lZDtcblxuXHQvLyB0aGlzIGlzIHBhc3NlZCBhcyBuZ21vZGVsIGFuZCBpcyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCBkYXRlLiBCdXQgd2UgYWxzb1xuXHQvLyB1c2UgaW5wdXQgYW5kIG5hdGl2ZUlucHV0IGNhbGxiYWNrcyB0byBleHRlbmQgdGhlIHZhbGlkYXRpb24gbG9naWMgc28gd2Vcblx0Ly8gY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW1wdHkgYW5kIGludmFsaWQgZGF0ZXMuXG5cdHZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyOiBEYXRlO1xuXHRob3Vyczogc3RyaW5nOyAvLyBzdHJpbmcgYmVjYXVzZSBpdCdzIGEgdGV4dCBpbnB1dFxuXHRtaW51dGVzOiBzdHJpbmc7IC8vIHN0cmluZyBiZWNhdXNlIGl0J3MgYSB0ZXh0IGlucHV0XG5cdHByaXZhdGUgc2VsZWN0ZWREYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcblx0cHJpdmF0ZSBkYXRlUGlja2luZ0Nsb3NpbmdGbjogKCkgPT4gdm9pZDtcblx0cHJpdmF0ZSBkYXRlVG91Y2hlZCA9IGZhbHNlO1xuXHRwcml2YXRlIGhvdXJzVG91Y2hlZCA9IGZhbHNlO1xuXHRwcml2YXRlIG1pbnV0ZXNUb3VjaGVkID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QEhvc3QoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcGFyZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCxcblx0XHRASG9zdCgpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXHRcdEBJbmplY3QoREFURV9USU1FX1BJQ0tFUl9UUkFOU0xBVElPTlMpIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRpb25zOiBhbnksXG5cdFx0QEluamVjdChEQVRFX1BJQ0tFUl9MT0NBTEUpIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVBpY2tlckxvY2FsZTogYW55LFxuXHRcdHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+LFxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuXHQpIHtcblx0XHRzdXBlcihwYXJlbnQsIGNvbnRyb2xDb250YWluZXIpO1xuXHRcdGlmIChpc1ZhbHVlU2V0KGRhdGVQaWNrZXJMb2NhbGUpKSB7XG5cdFx0XHRkYXRlQWRhcHRlci5zZXRMb2NhbGUoZGF0ZVBpY2tlckxvY2FsZSgpKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHR0aGlzLnBsYWNlaG9sZGVyID0gJyc7XG5cdFx0XHR0aGlzLnNob3dUaW1lSW5wdXQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdC8vIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGRhdGVwaWNrZXIgY2xvc2luZyBmbiBsYXRlciwgc28gd2UgYXJlIHNhdmluZyBpdCBoZXJlIHRvIHJlc3RvcmUgaXQgd2hlbiBuZWVkZWRcblx0XHRcdHRoaXMuZGF0ZVBpY2tpbmdDbG9zaW5nRm4gPSB0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2U7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VzLm1pbkRhdGUpIHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHR9XG5cdFx0aWYgKGNoYW5nZXMubWF4RGF0ZSkge1xuXHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdH1cblx0fVxuXG5cdHNldE1pbkRhdGUobWluRGF0ZTogRGF0ZSk6IHZvaWQge1xuXHRcdGlmIChtaW5EYXRlKSB7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gbmV3IERhdGUobWluRGF0ZSk7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdHNldE1heERhdGUobWF4RGF0ZTogRGF0ZSk6IHZvaWQge1xuXHRcdGlmIChtYXhEYXRlKSB7XG5cdFx0XHR0aGlzLm1heERhdGVFbmRPZkRheSA9IG5ldyBEYXRlKG1heERhdGUpO1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0Z2V0U2VsZWN0ZWRNb250aHMoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheSh0aGlzLnNlbGVjdGVkRGF0ZXMubWFwKChlKSA9PiBmb3JtYXREYXRlKGUsICdNTU1NJykpKS5sZW5ndGg7XG5cdH1cblxuXHQvLyBkYXRlQ2hhbmdlZCBpcyBjYWxsZWQgd2hlbiB0aGUgb3V0cHV0IG9mIHRoZSBkYXRlcGlja2VyIGlzIGNoYW5nZWQgYW5kXG5cdC8vIHBhcnNlZCBjb3JyZWN0bHkuIElmIHRoZSBkYXRlIGlzIGludmFsaWQsIGl0IHdpbGwgYmUgY2FsbGVkIHRoZSBmaXJzdCB0aW1lXG5cdC8vIHdpdGggbnVsbCBidXQgbmV2ZXIgYWdhaW4gdW50aWwgYSB2YWxpZCBpbnB1dCBpcyBwcm92aWRlZC5cblx0ZGF0ZUNoYW5nZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IGRhdGUgPSBldmVudC52YWx1ZTtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlID0gKCkgPT4ge1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRlcy5zb21lKChlKSA9PiBlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5maWx0ZXIoKGUpID0+IGUuZ2V0VGltZSgpICE9PSBkYXRlLmdldFRpbWUoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbLi4udGhpcy5zZWxlY3RlZERhdGVzLCBkYXRlXTtcblx0XHRcdH1cblx0XHRcdC8vIFNUQVJUIEhBQ0tcblx0XHRcdC8vIHRoZSBkYXRlIHBpY2tlciBkb2VzIG5vdCBwcm92aWRlIGFueSByZXJlbmRlciBjYWxscy4gVGhlcmVmb3JlLCB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlIHRoZSBtaW5EYXRlIGluIG9yZGVyIHRvIGZvcmNlIHRoZSByZW5kZXJcblx0XHRcdC8vIFRoaXMgaXMgbmVlZGVkIHRvIHNob3cgYWxsIHNlbGVjdGVkIGRheXMgaW4gb3VyIGRhdGUgcGlja2VyXG5cdFx0XHQvLyBXZSBhbHNvIHNldCB0aGUgaW5uZXJWYWx1ZSB0byBudWxsICh3aXRoIHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsOyksIG90aGVyd2lzZSB5b3UgY2FuIG5vdFxuXHRcdFx0Ly8gZGVzZWxlY3QgeW91ciBsYXN0IHBpY2tlZCBkYXRlXG5cdFx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDtcblx0XHRcdGNvbnN0IG9sZE1pbkRhdGUgPSB0aGlzLm1pbkRhdGVTdGFydE9mRGF5O1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG5ldyBEYXRlKDApO1xuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG9sZE1pbkRhdGU7XG5cdFx0XHQvLyBFTkQgSEFDS1xuXG5cdFx0XHRpZiAodGhpcy5zYW1lTW9udGhPbmx5KSB7XG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0XHRpZiAoZGF0ZSA8IHN0YXJ0T2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pIHx8IGRhdGUgPiBlbmRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtkYXRlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy5zZWxlY3RlZERhdGVzKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2UgPSB0aGlzLmRhdGVQaWNraW5nQ2xvc2luZ0ZuO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGRldGVybWluZU1pbkFuZE1heERhdGVzKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNhbWVNb250aE9ubHkpIHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0dGhpcy5zZXRNaW5EYXRlKHN0YXJ0T2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pKTtcblx0XHRcdFx0dGhpcy5zZXRNYXhEYXRlKGVuZE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldE1pbkRhdGUodGhpcy5taW5EYXRlKTtcblx0XHRcdFx0dGhpcy5zZXRNYXhEYXRlKHRoaXMubWF4RGF0ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TWluRGF0ZSh0aGlzLm1pbkRhdGUpO1xuXHRcdFx0dGhpcy5zZXRNYXhEYXRlKHRoaXMubWF4RGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0bm90aWZ5TmV3RGF0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBuYXRpdmVJbnB1dFZhbHVlID0gdGhpcy5uYXRpdmVJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXHRcdGNvbnN0IHBhcnNlZEhvdXJzID0gTnVtYmVyKHRoaXMuaG91cnMpO1xuXHRcdGNvbnN0IHBhcnNlZE1pbnV0ZXMgPSBOdW1iZXIodGhpcy5taW51dGVzKTtcblxuXHRcdC8vIGlmIHdlIGRvbnQgaGF2ZSB0aGUgdGltZSBlbGVtZW50XG5cdFx0aWYgKCF0aGlzLnNob3dUaW1lSW5wdXQpIHtcblx0XHRcdGlmICghc3RyaW5nSXNTZXRBbmRGaWxsZWQobmF0aXZlSW5wdXRWYWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHdoZW4gYWxsIGlucHV0cyBhcmUgZW1wdHlcblx0XHRpZiAoIXN0cmluZ0lzU2V0QW5kRmlsbGVkKG5hdGl2ZUlucHV0VmFsdWUpICYmICFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmhvdXJzKSAmJiAhc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5taW51dGVzKSkge1xuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBpZiB3ZSBoYXZlIGRhdGUgYW5kIHRpbWVcblx0XHRpZiAoXG5cdFx0XHRzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmhvdXJzKSAmJlxuXHRcdFx0TnVtYmVyLmlzRmluaXRlKHBhcnNlZEhvdXJzKSAmJlxuXHRcdFx0cGFyc2VkSG91cnMgPj0gMCAmJlxuXHRcdFx0cGFyc2VkSG91cnMgPD0gMjMgJiZcblx0XHRcdHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMubWludXRlcykgJiZcblx0XHRcdE51bWJlci5pc0Zpbml0ZShwYXJzZWRNaW51dGVzKSAmJlxuXHRcdFx0cGFyc2VkTWludXRlcyA+PSAwICYmXG5cdFx0XHRwYXJzZWRNaW51dGVzIDw9IDU5ICYmXG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyIGluc3RhbmNlb2YgRGF0ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgbmV3RGF0ZVdpdGhIb3VycyA9IG5ldyBEYXRlKHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIuc2V0SG91cnMocGFyc2VkSG91cnMpKTtcblx0XHRcdGNvbnN0IG5ld0RhdGVXaXRoTWludXRlcyA9IG5ldyBEYXRlKG5ld0RhdGVXaXRoSG91cnMuc2V0TWludXRlcyhwYXJzZWRNaW51dGVzKSk7XG5cdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobmV3RGF0ZVdpdGhNaW51dGVzKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaW52YWxpZFRpbWVBc01pZG5pZ2h0KSB7XG5cdFx0XHRpZiAodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGFsbCBvdGhlciBjYXNlcywgd2UgYXJlIG5vdCBpbiBhIHZhbGlkIHN0YXRlXG5cdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KGludmFsaWREYXRlS2V5KTtcblx0fVxuXG5cdHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBBcnJheTxEYXRlPiB8IHR5cGVvZiBpbnZhbGlkRGF0ZUtleSk6IHZvaWQge1xuXHRcdHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gdmFsdWU7XG5cdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IHZhbHVlID09PSBpbnZhbGlkRGF0ZUtleSA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5ob3VycyA9IFN0cmluZyh2YWx1ZS5nZXRIb3VycygpKTtcblx0XHRcdFx0dGhpcy5taW51dGVzID0gU3RyaW5nKHZhbHVlLmdldE1pbnV0ZXMoKSk7XG5cdFx0XHRcdHRoaXMuZm9ybWF0VGltZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ob3VycyA9ICcnO1xuXHRcdFx0XHR0aGlzLm1pbnV0ZXMgPSAnJztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBuYXRpdmVWYWx1ZUNoYW5nZWQgaXMgY2FsbGVkIHdoZW4gdGhlIGludGVybmFsIHRleHQgdmFsdWUgY2hhbmdlcywgYnV0IG5vdFxuXHQvLyB3aGVuIHRoZSBkYXRlIGlzIGNoYW5nZWQgdmlhIHRoZSBkYXRlIHBpY2tlci4gV2UgbmVlZCB0aGlzIHNvIHRoYXQgd2UgY2FuXG5cdC8vIGRldGVybWluZSBpZiB0aGUgZGF0ZXBpY2tlciBpcyBlbXB0eSBvciBpbnZhbGlkLlxuXHRuYXRpdmVWYWx1ZUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGF0ZVBpY2tlclJlZi5vcGVuZWQpIHtcblx0XHRcdC8vIGlmIHRoZSB1c2VyIGlzIHR5cGluZyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwaWNrZXIsIGNsb3NlIGl0LlxuXHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHR9XG5cblx0cmVzZXRUb051bGwoKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdHRoaXMubmF0aXZlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5ob3VycyA9ICcnO1xuXHRcdHRoaXMubWludXRlcyA9ICcnO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHR9XG5cblx0aXNTZWxlY3RlZCA9IChkOiBEYXRlKSA9PiB7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZSkgPT4gZS5nZXRUaW1lKCkgPT09IGQuZ2V0VGltZSgpKSA/ICdzZWxlY3RlZCcgOiAnJztcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRmaWx0ZXJEYXRlczogRGF0ZUZpbHRlckZuPGFueT4gPSAoZSkgPT4ge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdGZvcm1hdFRpbWUoKTogdm9pZCB7XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5ob3VycykpICYmIHRoaXMuaG91cnMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLmhvdXJzID0gJzAnICsgdGhpcy5ob3Vycztcblx0XHR9XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5taW51dGVzKSkgJiYgdGhpcy5taW51dGVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy5taW51dGVzID0gJzAnICsgdGhpcy5taW51dGVzO1xuXHRcdH1cblx0fVxuXG5cdHRvdWNoRGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRhdGVUb3VjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLmRldGVybWluZUFsbFRvdWNoZWQoKTtcblx0fVxuXG5cdHRvdWNoSG91cnMoKTogdm9pZCB7XG5cdFx0dGhpcy5ob3Vyc1RvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0dG91Y2hNaW51dGVzKCk6IHZvaWQge1xuXHRcdHRoaXMubWludXRlc1RvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0ZGV0ZXJtaW5lQWxsVG91Y2hlZCgpOiB2b2lkIHtcblx0XHRpZiAoKHRoaXMuZGF0ZVRvdWNoZWQgJiYgdGhpcy5ob3Vyc1RvdWNoZWQgJiYgdGhpcy5taW51dGVzVG91Y2hlZCkgfHwgKHRoaXMuZGF0ZVRvdWNoZWQgJiYgIXRoaXMuc2hvd1RpbWVJbnB1dCkpIHtcblx0XHRcdHRoaXMudG91Y2goKTtcblx0XHR9XG5cdH1cblxuXG5cdGdldERlZmF1bHRUcmFuc2xhdGlvbihrZXk6IHN0cmluZyk6ICh4OiBhbnkpID0+IHN0cmluZyB7XG5cdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdGNhc2UgJ3BsYWNlaG9sZGVyJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdTZWxlY3QgZGF0ZSc7XG5cdFx0XHRjYXNlICdzZWxlY3REYXlzJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdTZWxlY3QgZGF5KHMpJztcblx0XHRcdGNhc2UgJ3NlbGVjdGVkRGF0ZSc6XG5cdFx0XHRcdHJldHVybiAoZDogRGF0ZSkgPT4gZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcblx0XHRcdGNhc2UgJ2RheXNTZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiAoYW1vdW50KSA9PiBgJHthbW91bnR9IGRheXMgc2VsZWN0ZWRgO1xuXHRcdFx0Y2FzZSAnc2VsZWN0ZWRJbk1vbnRoJzpcblx0XHRcdFx0cmV0dXJuIChkOiBEYXRlKSA9PiBgIGluICR7Zm9ybWF0RGF0ZShkLCAnTU1NTScpfWA7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0gbnVsbCk6IHN0cmluZyB7XG5cdFx0aWYgKGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGlmIChrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5wbGFjZWhvbGRlcikpIHtcblx0XHRcdHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGlvbnM/LltrZXldPy4ocGFyYW1zKSA/PyB0aGlzLmdldERlZmF1bHRUcmFuc2xhdGlvbihrZXkpKHBhcmFtcyk7XG5cdH1cbn1cbiJdfQ==
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsU0FBUyxFQUVULElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBRTlHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNuSCxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUFNLGdDQUFnQyxD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QUFnQix1QkE4RHJCLElBQUksWUFBSSxRQUFROzRDQUNoQixNQUFNLFNBQUMsNkJBQTZCLGNBQUcsUUFBUTs0Q0FDL0MsTUFBTSxTQUFDLGtCQUFrQixjQUFHLFFBQVE7WUE3RC9CLFdBQVc7WUFoQmxCLGlCQUFpQjs7O3NCQTZDaEIsS0FBSztzQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBQ0wsS0FBSzswQkFDTCxLQUFLO3dCQUNMLEtBQUs7NEJBQ0wsS0FBSztvQ0FDTCxLQUFLOzZCQUVMLFNBQVMsU0FBQyxhQUFhOzRCQUN2QixTQUFTLFNBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEhvc3QsXG5cdEluamVjdCxcblx0SW5qZWN0aW9uVG9rZW4sXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uSW5pdCxcblx0T3B0aW9uYWwsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7aW52YWxpZERhdGVLZXl9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvZGF0ZVZhbGlkYXRvcic7XG5pbXBvcnQge0RhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfTkFUSVZFX0RBVEVfRk9STUFUUywgTWF0RGF0ZUZvcm1hdHN9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtLbHBEYXRlRm9ybWF0c30gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge011bHRpcGxlVmFsdWVBY2Nlc3NvckJhc2V9IGZyb20gJy4uL3ZhbHVlLWFjY2Vzc29yLWJhc2UvbXVsdGlwbGUtdmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHthcnJheUlzU2V0QW5kRmlsbGVkLCBpc1ZhbHVlU2V0LCByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5LCBzdHJpbmdJc1NldEFuZEZpbGxlZH0gZnJvbSAnLi4vLi4vdXRpbC92YWx1ZXMnO1xuaW1wb3J0IHtlbmRPZk1vbnRoLCBmb3JtYXQgYXMgZm9ybWF0RGF0ZSwgc3RhcnRPZk1vbnRofSBmcm9tICdkYXRlLWZucyc7XG5cbmV4cG9ydCBjb25zdCBLTFBfREFURV9GT1JNQVRTID0gbmV3IEluamVjdGlvblRva2VuPEtscERhdGVGb3JtYXRzPigna2xwLmZvcm0uZGF0ZS5mb3JtYXRzJyk7XG5leHBvcnQgY29uc3QgREFURV9USU1FX1BJQ0tFUl9UUkFOU0xBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55Pigna2xwLmZvcm0uZGF0ZVRpbWUudHJhbnNsYXRpb25zJyk7XG5leHBvcnQgY29uc3QgREFURV9QSUNLRVJfTE9DQUxFID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2tscC5mb3JtLmRhdGVUaW1lLmxvY2FsZScpO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0RGF0ZUZvcm1hdHNGYWN0b3J5KGNvbXBvbmVudDogRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIGRhdGVGb3JtYXRzPzogS2xwRGF0ZUZvcm1hdHMpOiBNYXREYXRlRm9ybWF0cyB7XG5cdHJldHVybiBkYXRlRm9ybWF0cz8uKGNvbXBvbmVudC5mb3JtYXQpID8/IE1BVF9OQVRJVkVfREFURV9GT1JNQVRTO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1kYXRlLXRpbWUtcGlja2VyJyxcblx0dGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX0sXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUyxcblx0XHRcdGRlcHM6IFtEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgW25ldyBPcHRpb25hbCgpLCBLTFBfREFURV9GT1JNQVRTXV0sXG5cdFx0XHR1c2VGYWN0b3J5OiBtYXREYXRlRm9ybWF0c0ZhY3RvcnksXG5cdFx0fSxcblx0XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlPERhdGUgfCB0eXBlb2YgaW52YWxpZERhdGVLZXk+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoKSBwdWJsaWMgbWluRGF0ZTogRGF0ZSA9IHVuZGVmaW5lZDtcblx0QElucHV0KCkgcHVibGljIG1heERhdGU6IERhdGUgPSB1bmRlZmluZWQ7XG5cdEBJbnB1dCgpIHB1YmxpYyBzYW1lTW9udGhPbmx5ID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtYXQgPSAnZGQtTU0teXl5eSc7XG5cdEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXHRASW5wdXQoKSBwdWJsaWMgY2xlYXJhYmxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93VGltZUlucHV0ID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGludmFsaWRUaW1lQXNNaWRuaWdodCA9IGZhbHNlOyAvLyBpZiB0aGUgdGltZSBpcyBub3QgdmFsaWQsIHVzZSAwMDowMCBhcyB0aGUgdGltZVxuXG5cdEBWaWV3Q2hpbGQoJ25hdGl2ZUlucHV0JykgbmF0aXZlSW5wdXRSZWY6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ3BpY2tlcicpIGRhdGVQaWNrZXJSZWY6IE1hdERhdGVwaWNrZXI8RGF0ZT47XG5cblx0b3BlblBpY2tlck9uRGF0ZSA9IG51bGw7XG5cdG1pbkRhdGVTdGFydE9mRGF5OiBEYXRlID0gdW5kZWZpbmVkO1xuXHRtYXhEYXRlRW5kT2ZEYXk6IERhdGUgPSB1bmRlZmluZWQ7XG5cblx0Ly8gdGhpcyBpcyBwYXNzZWQgYXMgbmdtb2RlbCBhbmQgaXMgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgZGF0ZS4gQnV0IHdlIGFsc29cblx0Ly8gdXNlIGlucHV0IGFuZCBuYXRpdmVJbnB1dCBjYWxsYmFja3MgdG8gZXh0ZW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIHNvIHdlXG5cdC8vIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVtcHR5IGFuZCBpbnZhbGlkIGRhdGVzLlxuXHR2YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcjogRGF0ZTtcblx0aG91cnM6IHN0cmluZzsgLy8gc3RyaW5nIGJlY2F1c2UgaXQncyBhIHRleHQgaW5wdXRcblx0bWludXRlczogc3RyaW5nOyAvLyBzdHJpbmcgYmVjYXVzZSBpdCdzIGEgdGV4dCBpbnB1dFxuXHRwcml2YXRlIHNlbGVjdGVkRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XG5cdHByaXZhdGUgZGF0ZVBpY2tpbmdDbG9zaW5nRm46ICgpID0+IHZvaWQ7XG5cdHByaXZhdGUgZGF0ZVRvdWNoZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBob3Vyc1RvdWNoZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBtaW51dGVzVG91Y2hlZCA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHBhcmVudDogRm9ybUVsZW1lbnRDb21wb25lbnQsXG5cdFx0QEhvc3QoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblx0XHRASW5qZWN0KERBVEVfVElNRV9QSUNLRVJfVFJBTlNMQVRJT05TKSBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0aW9uczogYW55LFxuXHRcdEBJbmplY3QoREFURV9QSUNLRVJfTE9DQUxFKSBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVQaWNrZXJMb2NhbGU6IGFueSxcblx0XHRwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEYXRlPixcblx0XHRwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcblx0KSB7XG5cdFx0c3VwZXIocGFyZW50LCBjb250cm9sQ29udGFpbmVyKTtcblx0XHRpZiAoaXNWYWx1ZVNldChkYXRlUGlja2VyTG9jYWxlKSkge1xuXHRcdFx0ZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKGRhdGVQaWNrZXJMb2NhbGUoKSk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIubmdPbkluaXQoKTtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0dGhpcy5wbGFjZWhvbGRlciA9ICcnO1xuXHRcdFx0dGhpcy5zaG93VGltZUlucHV0ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHQvLyB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBkYXRlcGlja2VyIGNsb3NpbmcgZm4gbGF0ZXIsIHNvIHdlIGFyZSBzYXZpbmcgaXQgaGVyZSB0byByZXN0b3JlIGl0IHdoZW4gbmVlZGVkXG5cdFx0XHR0aGlzLmRhdGVQaWNraW5nQ2xvc2luZ0ZuID0gdGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlO1xuXHRcdH1cblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlcy5taW5EYXRlKSB7XG5cdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0fVxuXHRcdGlmIChjaGFuZ2VzLm1heERhdGUpIHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHR9XG5cdH1cblxuXHRzZXRNaW5EYXRlKG1pbkRhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRpZiAobWluRGF0ZSkge1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG5ldyBEYXRlKG1pbkRhdGUpO1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRzZXRNYXhEYXRlKG1heERhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRpZiAobWF4RGF0ZSkge1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkgPSBuZXcgRGF0ZShtYXhEYXRlKTtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5LnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGdldFNlbGVjdGVkTW9udGhzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXkodGhpcy5zZWxlY3RlZERhdGVzLm1hcCgoZSkgPT4gZm9ybWF0RGF0ZShlLCAnTU1NTScpKSkubGVuZ3RoO1xuXHR9XG5cblx0Ly8gZGF0ZUNoYW5nZWQgaXMgY2FsbGVkIHdoZW4gdGhlIG91dHB1dCBvZiB0aGUgZGF0ZXBpY2tlciBpcyBjaGFuZ2VkIGFuZFxuXHQvLyBwYXJzZWQgY29ycmVjdGx5LiBJZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBpdCB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QgdGltZVxuXHQvLyB3aXRoIG51bGwgYnV0IG5ldmVyIGFnYWluIHVudGlsIGEgdmFsaWQgaW5wdXQgaXMgcHJvdmlkZWQuXG5cdGRhdGVDaGFuZ2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBkYXRlID0gZXZlbnQudmFsdWU7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZSA9ICgpID0+IHtcblx0XHRcdH07XG5cblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZSkgPT4gZS5nZXRUaW1lKCkgPT09IGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKChlKSA9PiBlLmdldFRpbWUoKSAhPT0gZGF0ZS5nZXRUaW1lKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRlcywgZGF0ZV07XG5cdFx0XHR9XG5cdFx0XHQvLyBTVEFSVCBIQUNLXG5cdFx0XHQvLyB0aGUgZGF0ZSBwaWNrZXIgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVyZW5kZXIgY2FsbHMuIFRoZXJlZm9yZSwgd2UgYXJlIGdvaW5nIHRvIGNoYW5nZSB0aGUgbWluRGF0ZSBpbiBvcmRlciB0byBmb3JjZSB0aGUgcmVuZGVyXG5cdFx0XHQvLyBUaGlzIGlzIG5lZWRlZCB0byBzaG93IGFsbCBzZWxlY3RlZCBkYXlzIGluIG91ciBkYXRlIHBpY2tlclxuXHRcdFx0Ly8gV2UgYWxzbyBzZXQgdGhlIGlubmVyVmFsdWUgdG8gbnVsbCAod2l0aCB0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDspLCBvdGhlcndpc2UgeW91IGNhbiBub3Rcblx0XHRcdC8vIGRlc2VsZWN0IHlvdXIgbGFzdCBwaWNrZWQgZGF0ZVxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7XG5cdFx0XHRjb25zdCBvbGRNaW5EYXRlID0gdGhpcy5taW5EYXRlU3RhcnRPZkRheTtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkgPSBuZXcgRGF0ZSgwKTtcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkgPSBvbGRNaW5EYXRlO1xuXHRcdFx0Ly8gRU5EIEhBQ0tcblxuXHRcdFx0aWYgKHRoaXMuc2FtZU1vbnRoT25seSkge1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGUgPCBzdGFydE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSB8fCBkYXRlID4gZW5kT2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbZGF0ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHRoaXMuc2VsZWN0ZWREYXRlcyk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlID0gdGhpcy5kYXRlUGlja2luZ0Nsb3NpbmdGbjtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5vdGlmeU5ld0RhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5zYW1lTW9udGhPbmx5KSB7XG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdHRoaXMuc2V0TWluRGF0ZShzdGFydE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSk7XG5cdFx0XHRcdHRoaXMuc2V0TWF4RGF0ZShlbmRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRNaW5EYXRlKHRoaXMubWluRGF0ZSk7XG5cdFx0XHRcdHRoaXMuc2V0TWF4RGF0ZSh0aGlzLm1heERhdGUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE1pbkRhdGUodGhpcy5taW5EYXRlKTtcblx0XHRcdHRoaXMuc2V0TWF4RGF0ZSh0aGlzLm1heERhdGUpO1xuXHRcdH1cblx0fVxuXG5cdG5vdGlmeU5ld0RhdGUoKTogdm9pZCB7XG5cdFx0Y29uc3QgbmF0aXZlSW5wdXRWYWx1ZSA9IHRoaXMubmF0aXZlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRjb25zdCBwYXJzZWRIb3VycyA9IE51bWJlcih0aGlzLmhvdXJzKTtcblx0XHRjb25zdCBwYXJzZWRNaW51dGVzID0gTnVtYmVyKHRoaXMubWludXRlcyk7XG5cblx0XHQvLyBpZiB3ZSBkb250IGhhdmUgdGhlIHRpbWUgZWxlbWVudFxuXHRcdGlmICghdGhpcy5zaG93VGltZUlucHV0KSB7XG5cdFx0XHRpZiAoIXN0cmluZ0lzU2V0QW5kRmlsbGVkKG5hdGl2ZUlucHV0VmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShudWxsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyB3aGVuIGFsbCBpbnB1dHMgYXJlIGVtcHR5XG5cdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZChuYXRpdmVJbnB1dFZhbHVlKSAmJiAhc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5ob3VycykgJiYgIXN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMubWludXRlcykpIHtcblx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gaWYgd2UgaGF2ZSBkYXRlIGFuZCB0aW1lXG5cdFx0aWYgKFxuXHRcdFx0c3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5ob3VycykgJiZcblx0XHRcdE51bWJlci5pc0Zpbml0ZShwYXJzZWRIb3VycykgJiZcblx0XHRcdHBhcnNlZEhvdXJzID49IDAgJiZcblx0XHRcdHBhcnNlZEhvdXJzIDw9IDIzICYmXG5cdFx0XHRzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLm1pbnV0ZXMpICYmXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUocGFyc2VkTWludXRlcykgJiZcblx0XHRcdHBhcnNlZE1pbnV0ZXMgPj0gMCAmJlxuXHRcdFx0cGFyc2VkTWludXRlcyA8PSA1OSAmJlxuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciBpbnN0YW5jZW9mIERhdGVcblx0XHQpIHtcblx0XHRcdGNvbnN0IG5ld0RhdGVXaXRoSG91cnMgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyLnNldEhvdXJzKHBhcnNlZEhvdXJzKSk7XG5cdFx0XHRjb25zdCBuZXdEYXRlV2l0aE1pbnV0ZXMgPSBuZXcgRGF0ZShuZXdEYXRlV2l0aEhvdXJzLnNldE1pbnV0ZXMocGFyc2VkTWludXRlcykpO1xuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG5ld0RhdGVXaXRoTWludXRlcyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLmludmFsaWRUaW1lQXNNaWRuaWdodCkge1xuXHRcdFx0aWYgKHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBhbGwgb3RoZXIgY2FzZXMsIHdlIGFyZSBub3QgaW4gYSB2YWxpZCBzdGF0ZVxuXHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShpbnZhbGlkRGF0ZUtleSk7XG5cdH1cblxuXHR3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgQXJyYXk8RGF0ZT4gfCB0eXBlb2YgaW52YWxpZERhdGVLZXkpOiB2b2lkIHtcblx0XHRzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IHZhbHVlO1xuXHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7XG5cdFx0XHRpZiAoYXJyYXlJc1NldEFuZEZpbGxlZCh2YWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5vcGVuUGlja2VyT25EYXRlID0gdGhpcy5zZWxlY3RlZERhdGVzWzBdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gdmFsdWUgPT09IGludmFsaWREYXRlS2V5ID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR0aGlzLmhvdXJzID0gU3RyaW5nKHZhbHVlLmdldEhvdXJzKCkpO1xuXHRcdFx0XHR0aGlzLm1pbnV0ZXMgPSBTdHJpbmcodmFsdWUuZ2V0TWludXRlcygpKTtcblx0XHRcdFx0dGhpcy5mb3JtYXRUaW1lKCk7XG5cdFx0XHRcdHRoaXMub3BlblBpY2tlck9uRGF0ZSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ob3VycyA9ICcnO1xuXHRcdFx0XHR0aGlzLm1pbnV0ZXMgPSAnJztcblx0XHRcdFx0dGhpcy5vcGVuUGlja2VyT25EYXRlID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBuYXRpdmVWYWx1ZUNoYW5nZWQgaXMgY2FsbGVkIHdoZW4gdGhlIGludGVybmFsIHRleHQgdmFsdWUgY2hhbmdlcywgYnV0IG5vdFxuXHQvLyB3aGVuIHRoZSBkYXRlIGlzIGNoYW5nZWQgdmlhIHRoZSBkYXRlIHBpY2tlci4gV2UgbmVlZCB0aGlzIHNvIHRoYXQgd2UgY2FuXG5cdC8vIGRldGVybWluZSBpZiB0aGUgZGF0ZXBpY2tlciBpcyBlbXB0eSBvciBpbnZhbGlkLlxuXHRuYXRpdmVWYWx1ZUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGF0ZVBpY2tlclJlZi5vcGVuZWQpIHtcblx0XHRcdC8vIGlmIHRoZSB1c2VyIGlzIHR5cGluZyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwaWNrZXIsIGNsb3NlIGl0LlxuXHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHR9XG5cblx0cmVzZXRUb051bGwoKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdHRoaXMubmF0aXZlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5ob3VycyA9ICcnO1xuXHRcdHRoaXMubWludXRlcyA9ICcnO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHR9XG5cblx0aXNTZWxlY3RlZCA9IChkOiBEYXRlKSA9PiB7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZSkgPT4gZS5nZXRUaW1lKCkgPT09IGQuZ2V0VGltZSgpKSA/ICdzZWxlY3RlZCcgOiAnJztcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRmaWx0ZXJEYXRlczogRGF0ZUZpbHRlckZuPGFueT4gPSAoZSkgPT4ge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdGZvcm1hdFRpbWUoKTogdm9pZCB7XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5ob3VycykpICYmIHRoaXMuaG91cnMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLmhvdXJzID0gJzAnICsgdGhpcy5ob3Vycztcblx0XHR9XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5taW51dGVzKSkgJiYgdGhpcy5taW51dGVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy5taW51dGVzID0gJzAnICsgdGhpcy5taW51dGVzO1xuXHRcdH1cblx0fVxuXG5cdHRvdWNoRGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRhdGVUb3VjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLmRldGVybWluZUFsbFRvdWNoZWQoKTtcblx0fVxuXG5cdHRvdWNoSG91cnMoKTogdm9pZCB7XG5cdFx0dGhpcy5ob3Vyc1RvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0dG91Y2hNaW51dGVzKCk6IHZvaWQge1xuXHRcdHRoaXMubWludXRlc1RvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0ZGV0ZXJtaW5lQWxsVG91Y2hlZCgpOiB2b2lkIHtcblx0XHRpZiAoKHRoaXMuZGF0ZVRvdWNoZWQgJiYgdGhpcy5ob3Vyc1RvdWNoZWQgJiYgdGhpcy5taW51dGVzVG91Y2hlZCkgfHwgKHRoaXMuZGF0ZVRvdWNoZWQgJiYgIXRoaXMuc2hvd1RpbWVJbnB1dCkpIHtcblx0XHRcdHRoaXMudG91Y2goKTtcblx0XHR9XG5cdH1cblxuXG5cdGdldERlZmF1bHRUcmFuc2xhdGlvbihrZXk6IHN0cmluZyk6ICh4OiBhbnkpID0+IHN0cmluZyB7XG5cdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdGNhc2UgJ3BsYWNlaG9sZGVyJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdTZWxlY3QgZGF0ZSc7XG5cdFx0XHRjYXNlICdzZWxlY3REYXlzJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdTZWxlY3QgZGF5KHMpJztcblx0XHRcdGNhc2UgJ3NlbGVjdGVkRGF0ZSc6XG5cdFx0XHRcdHJldHVybiAoZDogRGF0ZSkgPT4gZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcblx0XHRcdGNhc2UgJ2RheXNTZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiAoYW1vdW50KSA9PiBgJHthbW91bnR9IGRheXMgc2VsZWN0ZWRgO1xuXHRcdFx0Y2FzZSAnc2VsZWN0ZWRJbk1vbnRoJzpcblx0XHRcdFx0cmV0dXJuIChkOiBEYXRlKSA9PiBgIGluICR7Zm9ybWF0RGF0ZShkLCAnTU1NTScpfWA7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0gbnVsbCk6IHN0cmluZyB7XG5cdFx0aWYgKGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGlmIChrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5wbGFjZWhvbGRlcikpIHtcblx0XHRcdHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGlvbnM/LltrZXldPy4ocGFyYW1zKSA/PyB0aGlzLmdldERlZmF1bHRUcmFuc2xhdGlvbihrZXkpKHBhcmFtcyk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -997,6 +997,7 @@ class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
997
997
|
this.clearable = false;
|
|
998
998
|
this.showTimeInput = true;
|
|
999
999
|
this.invalidTimeAsMidnight = false; // if the time is not valid, use 00:00 as the time
|
|
1000
|
+
this.openPickerOnDate = null;
|
|
1000
1001
|
this.minDateStartOfDay = undefined;
|
|
1001
1002
|
this.maxDateEndOfDay = undefined;
|
|
1002
1003
|
this.selectedDates = [];
|
|
@@ -1170,6 +1171,9 @@ class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
1170
1171
|
this.selectedDates = value;
|
|
1171
1172
|
this.determineMinAndMaxDates();
|
|
1172
1173
|
this.valueForMaterialDatePicker = null;
|
|
1174
|
+
if (arrayIsSetAndFilled(value)) {
|
|
1175
|
+
this.openPickerOnDate = this.selectedDates[0];
|
|
1176
|
+
}
|
|
1173
1177
|
}
|
|
1174
1178
|
else {
|
|
1175
1179
|
this.valueForMaterialDatePicker = value === invalidDateKey ? null : value;
|
|
@@ -1177,10 +1181,12 @@ class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
1177
1181
|
this.hours = String(value.getHours());
|
|
1178
1182
|
this.minutes = String(value.getMinutes());
|
|
1179
1183
|
this.formatTime();
|
|
1184
|
+
this.openPickerOnDate = value;
|
|
1180
1185
|
}
|
|
1181
1186
|
else {
|
|
1182
1187
|
this.hours = '';
|
|
1183
1188
|
this.minutes = '';
|
|
1189
|
+
this.openPickerOnDate = null;
|
|
1184
1190
|
}
|
|
1185
1191
|
}
|
|
1186
1192
|
}
|
|
@@ -1255,7 +1261,7 @@ class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
1255
1261
|
DateTimePickerComponent.decorators = [
|
|
1256
1262
|
{ type: Component, args: [{
|
|
1257
1263
|
selector: 'klp-form-date-time-picker',
|
|
1258
|
-
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></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",
|
|
1264
|
+
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",
|
|
1259
1265
|
providers: [
|
|
1260
1266
|
{ provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true },
|
|
1261
1267
|
{
|