@skyux/datetime 8.6.0 → 9.0.0-alpha.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/documentation.json +8 -8
- package/esm2022/lib/modules/date-pipe/date-format-utility.mjs +45 -0
- package/{esm2020 → esm2022}/lib/modules/date-pipe/date-pipe.module.mjs +5 -5
- package/esm2022/lib/modules/date-pipe/date.pipe.mjs +67 -0
- package/esm2022/lib/modules/date-pipe/fuzzy-date.pipe.mjs +47 -0
- package/{esm2020 → esm2022}/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.mjs +4 -4
- package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +518 -0
- package/{esm2020 → esm2022}/lib/modules/date-range-picker/date-range-picker.module.mjs +19 -19
- package/esm2022/lib/modules/date-range-picker/date-range.service.mjs +97 -0
- package/esm2022/lib/modules/date-range-picker/types/date-range-calculator.mjs +54 -0
- package/esm2022/lib/modules/datepicker/date-formatter.mjs +38 -0
- package/esm2022/lib/modules/datepicker/datepicker-adapter.service.mjs +23 -0
- package/esm2022/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +332 -0
- package/esm2022/lib/modules/datepicker/datepicker-calendar.component.mjs +95 -0
- package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-config.service.mjs +4 -4
- package/esm2022/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +487 -0
- package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +534 -0
- package/esm2022/lib/modules/datepicker/datepicker.component.mjs +327 -0
- package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker.module.mjs +35 -35
- package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/datepicker/daypicker-button.component.mjs +4 -4
- package/esm2022/lib/modules/datepicker/daypicker-cell.component.mjs +128 -0
- package/esm2022/lib/modules/datepicker/daypicker.component.mjs +224 -0
- package/esm2022/lib/modules/datepicker/fuzzy-date.service.mjs +412 -0
- package/esm2022/lib/modules/datepicker/monthpicker.component.mjs +80 -0
- package/{esm2020 → esm2022}/lib/modules/datepicker/yearpicker.component.mjs +53 -54
- package/{esm2020 → esm2022}/lib/modules/shared/sky-datetime-resources.module.mjs +11 -11
- package/esm2022/lib/modules/timepicker/timepicker.component.mjs +396 -0
- package/esm2022/lib/modules/timepicker/timepicker.directive.mjs +237 -0
- package/{esm2020 → esm2022}/lib/modules/timepicker/timepicker.module.mjs +17 -17
- package/esm2022/testing/datepicker-fixture.mjs +55 -0
- package/esm2022/testing/timepicker-fixture.mjs +52 -0
- package/fesm2022/skyux-datetime-testing.mjs +112 -0
- package/{fesm2020 → fesm2022}/skyux-datetime-testing.mjs.map +1 -1
- package/fesm2022/skyux-datetime.mjs +5030 -0
- package/fesm2022/skyux-datetime.mjs.map +1 -0
- package/lib/modules/date-range-picker/date-range-picker.component.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-calendar-inner.component.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-calendar.component.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-input-fuzzy.directive.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-input.directive.d.ts +1 -1
- package/lib/modules/datepicker/datepicker.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker-button.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker-cell.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker.component.d.ts +1 -1
- package/lib/modules/timepicker/timepicker.directive.d.ts +1 -1
- package/package.json +19 -27
- package/esm2020/lib/modules/date-pipe/date-format-utility.mjs +0 -45
- package/esm2020/lib/modules/date-pipe/date.pipe.mjs +0 -70
- package/esm2020/lib/modules/date-pipe/fuzzy-date.pipe.mjs +0 -50
- package/esm2020/lib/modules/date-range-picker/date-range-picker.component.mjs +0 -494
- package/esm2020/lib/modules/date-range-picker/date-range.service.mjs +0 -100
- package/esm2020/lib/modules/date-range-picker/types/date-range-calculator.mjs +0 -53
- package/esm2020/lib/modules/datepicker/date-formatter.mjs +0 -38
- package/esm2020/lib/modules/datepicker/datepicker-adapter.service.mjs +0 -26
- package/esm2020/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +0 -333
- package/esm2020/lib/modules/datepicker/datepicker-calendar.component.mjs +0 -96
- package/esm2020/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +0 -462
- package/esm2020/lib/modules/datepicker/datepicker-input.directive.mjs +0 -496
- package/esm2020/lib/modules/datepicker/datepicker.component.mjs +0 -319
- package/esm2020/lib/modules/datepicker/daypicker-cell.component.mjs +0 -126
- package/esm2020/lib/modules/datepicker/daypicker.component.mjs +0 -216
- package/esm2020/lib/modules/datepicker/fuzzy-date.service.mjs +0 -392
- package/esm2020/lib/modules/datepicker/monthpicker.component.mjs +0 -81
- package/esm2020/lib/modules/timepicker/timepicker.component.mjs +0 -389
- package/esm2020/lib/modules/timepicker/timepicker.directive.mjs +0 -236
- package/esm2020/testing/datepicker-fixture.mjs +0 -58
- package/esm2020/testing/timepicker-fixture.mjs +0 -55
- package/fesm2015/skyux-datetime-testing.mjs +0 -117
- package/fesm2015/skyux-datetime-testing.mjs.map +0 -1
- package/fesm2015/skyux-datetime.mjs +0 -4925
- package/fesm2015/skyux-datetime.mjs.map +0 -1
- package/fesm2020/skyux-datetime-testing.mjs +0 -117
- package/fesm2020/skyux-datetime.mjs +0 -4895
- package/fesm2020/skyux-datetime.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-date-range-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-id.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-validate-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-default-calculator-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-default-calculator-configs.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-relative-value.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-calendar-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-custom-date.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-date.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/fuzzy-date.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/timepicker/timepicker-time-format-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/timepicker/timepicker-time-output.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-datetime.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-datetime-testing.mjs +0 -0
@@ -1,496 +0,0 @@
|
|
1
|
-
var _SkyDatepickerInputDirective_instances, _SkyDatepickerInputDirective_value_get, _SkyDatepickerInputDirective_value_set, _SkyDatepickerInputDirective_control, _SkyDatepickerInputDirective_dateFormatter, _SkyDatepickerInputDirective_initialPlaceholder, _SkyDatepickerInputDirective_preferredShortDateFormat, _SkyDatepickerInputDirective_ngUnsubscribe, _SkyDatepickerInputDirective__dateFormat, _SkyDatepickerInputDirective__disabled, _SkyDatepickerInputDirective__maxDate, _SkyDatepickerInputDirective__minDate, _SkyDatepickerInputDirective__startingDay, _SkyDatepickerInputDirective__strict, _SkyDatepickerInputDirective__value, _SkyDatepickerInputDirective_adapter, _SkyDatepickerInputDirective_changeDetector, _SkyDatepickerInputDirective_configService, _SkyDatepickerInputDirective_elementRef, _SkyDatepickerInputDirective_localeProvider, _SkyDatepickerInputDirective_renderer, _SkyDatepickerInputDirective_resourcesService, _SkyDatepickerInputDirective_datepickerComponent, _SkyDatepickerInputDirective_applyDateFormat, _SkyDatepickerInputDirective_onValueChange, _SkyDatepickerInputDirective_setInputElementValue, _SkyDatepickerInputDirective_getDateValue, _SkyDatepickerInputDirective_getShortcutOrDateValue, _SkyDatepickerInputDirective_isDateStringValid, _SkyDatepickerInputDirective_onChange, _SkyDatepickerInputDirective_onTouched, _SkyDatepickerInputDirective_onValidatorChange, _SkyDatepickerInputDirective_updatePlaceholder, _SkyDatepickerInputDirective_updateValue;
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
-
import { Directive, HostListener, Input, Optional, forwardRef, } from '@angular/core';
|
4
|
-
import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
5
|
-
import moment from 'moment';
|
6
|
-
import { Subject } from 'rxjs';
|
7
|
-
import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
8
|
-
import { SkyDateFormatter } from './date-formatter';
|
9
|
-
import { SkyDatepickerAdapterService } from './datepicker-adapter.service';
|
10
|
-
import * as i0 from "@angular/core";
|
11
|
-
import * as i1 from "./datepicker-adapter.service";
|
12
|
-
import * as i2 from "./datepicker-config.service";
|
13
|
-
import * as i3 from "@skyux/i18n";
|
14
|
-
import * as i4 from "./datepicker.component";
|
15
|
-
const SKY_DATEPICKER_VALUE_ACCESSOR = {
|
16
|
-
provide: NG_VALUE_ACCESSOR,
|
17
|
-
useExisting: forwardRef(() => SkyDatepickerInputDirective),
|
18
|
-
multi: true,
|
19
|
-
};
|
20
|
-
const SKY_DATEPICKER_VALIDATOR = {
|
21
|
-
provide: NG_VALIDATORS,
|
22
|
-
useExisting: forwardRef(() => SkyDatepickerInputDirective),
|
23
|
-
multi: true,
|
24
|
-
};
|
25
|
-
export class SkyDatepickerInputDirective {
|
26
|
-
/**
|
27
|
-
* The date format for the input. Place this attribute on the `input` element
|
28
|
-
* to override the default in the `SkyDatepickerConfigService`.
|
29
|
-
* @default "MM/DD/YYYY"
|
30
|
-
*/
|
31
|
-
set dateFormat(value) {
|
32
|
-
/* istanbul ignore else */
|
33
|
-
if (value !== __classPrivateFieldGet(this, _SkyDatepickerInputDirective__dateFormat, "f")) {
|
34
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__dateFormat, value, "f");
|
35
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_applyDateFormat).call(this);
|
36
|
-
}
|
37
|
-
}
|
38
|
-
// TODO: Refactor to not have getter logic
|
39
|
-
get dateFormat() {
|
40
|
-
return (__classPrivateFieldGet(this, _SkyDatepickerInputDirective__dateFormat, "f") ||
|
41
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").dateFormat ||
|
42
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_preferredShortDateFormat, "f"));
|
43
|
-
}
|
44
|
-
/**
|
45
|
-
* Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.
|
46
|
-
* To set the disabled state on reactive forms, use the `FormControl` instead.
|
47
|
-
* @default false
|
48
|
-
*/
|
49
|
-
set disabled(value) {
|
50
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__disabled, value || false, "f");
|
51
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").disabled = value;
|
52
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement, 'disabled', value);
|
53
|
-
}
|
54
|
-
get disabled() {
|
55
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__disabled, "f");
|
56
|
-
}
|
57
|
-
/**
|
58
|
-
* The latest date that is available in the calendar. Place this attribute on
|
59
|
-
* the `input` element to override the default in `SkyDatepickerConfigService`.
|
60
|
-
*/
|
61
|
-
set maxDate(value) {
|
62
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__maxDate, value, "f");
|
63
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").maxDate = this.maxDate;
|
64
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
65
|
-
}
|
66
|
-
// TODO: Refactor to not have getter logic
|
67
|
-
get maxDate() {
|
68
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__maxDate, "f") || __classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").maxDate;
|
69
|
-
}
|
70
|
-
/**
|
71
|
-
* The earliest date that is available in the calendar. Place this attribute on
|
72
|
-
* the `input` element to override the default in `SkyDatepickerConfigService`. To avoid validation errors, the time associated with the minimum date must be midnight. This is necessary because the datepicker automatically sets the time on the `Date` object for selected dates to midnight in the current user's time zone.
|
73
|
-
*/
|
74
|
-
set minDate(value) {
|
75
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__minDate, value, "f");
|
76
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").minDate = this.minDate;
|
77
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
78
|
-
}
|
79
|
-
// TODO: Refactor to not have getter logic
|
80
|
-
get minDate() {
|
81
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__minDate, "f") || __classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").minDate;
|
82
|
-
}
|
83
|
-
/**
|
84
|
-
* Creates the datepicker input and calendar. Place this directive on an `input` element,
|
85
|
-
* and wrap the input in a `sky-datepicker` component. The value that users select is driven
|
86
|
-
* through the `ngModel` attribute specified on the `input` element.
|
87
|
-
* @required
|
88
|
-
*/
|
89
|
-
set skyDatepickerInput(value) {
|
90
|
-
if (value) {
|
91
|
-
console.warn('[Deprecation warning] You no longer need to provide a template reference variable ' +
|
92
|
-
'to the `skyDatepickerInput` attribute (this will be a breaking change in the next ' +
|
93
|
-
'major version release).\n' +
|
94
|
-
'Do this instead:\n' +
|
95
|
-
'<sky-datepicker>\n <input skyDatepickerInput />\n</sky-datepicker>');
|
96
|
-
}
|
97
|
-
}
|
98
|
-
/**
|
99
|
-
* The starting day of the week in the calendar, where `0` sets the starting day
|
100
|
-
* to Sunday. Place this attribute on the `input` element to override the default
|
101
|
-
* in `SkyDatepickerConfigService`.
|
102
|
-
* @default 0
|
103
|
-
*/
|
104
|
-
set startingDay(value) {
|
105
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__startingDay, value, "f");
|
106
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").startingDay = this.startingDay;
|
107
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
108
|
-
}
|
109
|
-
// TODO: Refactor to not have getter logic
|
110
|
-
get startingDay() {
|
111
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__startingDay, "f") || __classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").startingDay;
|
112
|
-
}
|
113
|
-
/**
|
114
|
-
* Whether the format of the date value must match the format from the `dateFormat` value.
|
115
|
-
* If this property is `true` and the datepicker input directive cannot find an exact match, then
|
116
|
-
* the input is marked as invalid.
|
117
|
-
* If this property is `false` and the datepicker input directive cannot find an exact match, then
|
118
|
-
* it attempts to format the string based on the [ISO 8601 standard format](https://www.iso.org/iso-8601-date-and-time-format.html).
|
119
|
-
* @default false
|
120
|
-
*/
|
121
|
-
set strict(value) {
|
122
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__strict, value || false, "f");
|
123
|
-
}
|
124
|
-
get strict() {
|
125
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__strict, "f");
|
126
|
-
}
|
127
|
-
constructor(adapter, changeDetector, configService, elementRef, localeProvider, renderer, resourcesService, datepickerComponent) {
|
128
|
-
_SkyDatepickerInputDirective_instances.add(this);
|
129
|
-
/**
|
130
|
-
* Whether to disable date validation on the datepicker input.
|
131
|
-
* @default false
|
132
|
-
*/
|
133
|
-
this.skyDatepickerNoValidate = false;
|
134
|
-
_SkyDatepickerInputDirective_control.set(this, void 0);
|
135
|
-
_SkyDatepickerInputDirective_dateFormatter.set(this, new SkyDateFormatter());
|
136
|
-
_SkyDatepickerInputDirective_initialPlaceholder.set(this, void 0);
|
137
|
-
_SkyDatepickerInputDirective_preferredShortDateFormat.set(this, void 0);
|
138
|
-
_SkyDatepickerInputDirective_ngUnsubscribe.set(this, new Subject());
|
139
|
-
_SkyDatepickerInputDirective__dateFormat.set(this, void 0);
|
140
|
-
_SkyDatepickerInputDirective__disabled.set(this, false);
|
141
|
-
_SkyDatepickerInputDirective__maxDate.set(this, void 0);
|
142
|
-
_SkyDatepickerInputDirective__minDate.set(this, void 0);
|
143
|
-
_SkyDatepickerInputDirective__startingDay.set(this, void 0);
|
144
|
-
_SkyDatepickerInputDirective__strict.set(this, false);
|
145
|
-
_SkyDatepickerInputDirective__value.set(this, void 0);
|
146
|
-
_SkyDatepickerInputDirective_adapter.set(this, void 0);
|
147
|
-
_SkyDatepickerInputDirective_changeDetector.set(this, void 0);
|
148
|
-
_SkyDatepickerInputDirective_configService.set(this, void 0);
|
149
|
-
_SkyDatepickerInputDirective_elementRef.set(this, void 0);
|
150
|
-
_SkyDatepickerInputDirective_localeProvider.set(this, void 0);
|
151
|
-
_SkyDatepickerInputDirective_renderer.set(this, void 0);
|
152
|
-
_SkyDatepickerInputDirective_resourcesService.set(this, void 0);
|
153
|
-
_SkyDatepickerInputDirective_datepickerComponent.set(this, void 0);
|
154
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
155
|
-
// istanbul ignore next
|
156
|
-
_SkyDatepickerInputDirective_onChange.set(this, (_) => { });
|
157
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
158
|
-
// istanbul ignore next
|
159
|
-
_SkyDatepickerInputDirective_onTouched.set(this, () => { });
|
160
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
161
|
-
// istanbul ignore next
|
162
|
-
_SkyDatepickerInputDirective_onValidatorChange.set(this, () => { });
|
163
|
-
if (!datepickerComponent) {
|
164
|
-
throw new Error('You must wrap the `skyDatepickerInput` directive within a ' +
|
165
|
-
'`<sky-datepicker>` component!');
|
166
|
-
}
|
167
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_adapter, adapter, "f");
|
168
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_changeDetector, changeDetector, "f");
|
169
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_configService, configService, "f");
|
170
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_elementRef, elementRef, "f");
|
171
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_localeProvider, localeProvider, "f");
|
172
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_renderer, renderer, "f");
|
173
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_resourcesService, resourcesService, "f");
|
174
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_datepickerComponent, datepickerComponent, "f");
|
175
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_initialPlaceholder, __classPrivateFieldGet(this, _SkyDatepickerInputDirective_adapter, "f").getPlaceholder(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f")), "f");
|
176
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updatePlaceholder).call(this);
|
177
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_localeProvider, "f")
|
178
|
-
.getLocaleInfo()
|
179
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f")))
|
180
|
-
.subscribe((localeInfo) => {
|
181
|
-
SkyDateFormatter.setLocale(localeInfo.locale);
|
182
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_preferredShortDateFormat, SkyDateFormatter.getPreferredShortDateFormat(), "f");
|
183
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_applyDateFormat).call(this);
|
184
|
-
});
|
185
|
-
}
|
186
|
-
ngOnInit() {
|
187
|
-
const element = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement;
|
188
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").addClass(element, 'sky-form-control');
|
189
|
-
const hasAriaLabel = element.getAttribute('aria-label');
|
190
|
-
if (!hasAriaLabel) {
|
191
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_resourcesService, "f")
|
192
|
-
.getString('skyux_date_field_default_label')
|
193
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f")))
|
194
|
-
.subscribe((value) => {
|
195
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").setAttribute(element, 'aria-label', value);
|
196
|
-
});
|
197
|
-
}
|
198
|
-
}
|
199
|
-
ngAfterContentInit() {
|
200
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").dateChange
|
201
|
-
.pipe(distinctUntilChanged())
|
202
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f")))
|
203
|
-
.subscribe((value) => {
|
204
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_instances, value, "a", _SkyDatepickerInputDirective_value_set);
|
205
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onTouched, "f").call(this);
|
206
|
-
});
|
207
|
-
}
|
208
|
-
ngAfterViewInit() {
|
209
|
-
// This is needed to address a bug in Angular 4.
|
210
|
-
// When a control value is set initially, its value is not represented on the view.
|
211
|
-
// See: https://github.com/angular/angular/issues/13792
|
212
|
-
// Of note is the parent check which allows us to determine if the form is reactive.
|
213
|
-
// Without this check there is a changed before checked error
|
214
|
-
/* istanbul ignore else */
|
215
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f") && __classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").parent) {
|
216
|
-
setTimeout(() => {
|
217
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get), {
|
218
|
-
emitEvent: false,
|
219
|
-
});
|
220
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_changeDetector, "f").markForCheck();
|
221
|
-
});
|
222
|
-
}
|
223
|
-
}
|
224
|
-
ngOnDestroy() {
|
225
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f").next();
|
226
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f").complete();
|
227
|
-
}
|
228
|
-
onInputChange(event) {
|
229
|
-
const value = event.target.value;
|
230
|
-
if (this.skyDatepickerNoValidate) {
|
231
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_onValueChange).call(this, value);
|
232
|
-
return;
|
233
|
-
}
|
234
|
-
// Don't try to parse the string value into a Date value if it is malformed.
|
235
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_isDateStringValid).call(this, value)) {
|
236
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_onValueChange).call(this, value);
|
237
|
-
return;
|
238
|
-
}
|
239
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__value, value, "f");
|
240
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onChange, "f").call(this, value);
|
241
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setErrors({
|
242
|
-
skyDate: {
|
243
|
-
invalid: true,
|
244
|
-
},
|
245
|
-
});
|
246
|
-
}
|
247
|
-
onInputBlur() {
|
248
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onTouched, "f").call(this);
|
249
|
-
}
|
250
|
-
onInput() {
|
251
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.markAsDirty();
|
252
|
-
}
|
253
|
-
writeValue(value) {
|
254
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updateValue).call(this, value, false);
|
255
|
-
}
|
256
|
-
validate(control) {
|
257
|
-
if (!__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")) {
|
258
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_control, control, "f");
|
259
|
-
// Account for any date conversion that may have occurred prior to validation.
|
260
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").value !== __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get)) {
|
261
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").patchValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get), { emitEvent: false });
|
262
|
-
}
|
263
|
-
}
|
264
|
-
if (this.skyDatepickerNoValidate) {
|
265
|
-
return null;
|
266
|
-
}
|
267
|
-
const value = control.value;
|
268
|
-
if (!value) {
|
269
|
-
return null;
|
270
|
-
}
|
271
|
-
if (value instanceof Date) {
|
272
|
-
const isDateValid = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(value);
|
273
|
-
if (!isDateValid) {
|
274
|
-
// Mark the invalid control as touched so that the input's invalid CSS styles appear.
|
275
|
-
// (This is only required when the invalid value is set by the FormControl constructor.)
|
276
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").markAsTouched();
|
277
|
-
return {
|
278
|
-
skyDate: {
|
279
|
-
invalid: value,
|
280
|
-
},
|
281
|
-
};
|
282
|
-
}
|
283
|
-
const minDate = this.minDate;
|
284
|
-
if (minDate &&
|
285
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(minDate) &&
|
286
|
-
value < minDate) {
|
287
|
-
return {
|
288
|
-
skyDate: {
|
289
|
-
minDate,
|
290
|
-
},
|
291
|
-
};
|
292
|
-
}
|
293
|
-
const maxDate = this.maxDate;
|
294
|
-
if (maxDate &&
|
295
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(maxDate) &&
|
296
|
-
value > maxDate) {
|
297
|
-
return {
|
298
|
-
skyDate: {
|
299
|
-
maxDate,
|
300
|
-
},
|
301
|
-
};
|
302
|
-
}
|
303
|
-
}
|
304
|
-
else {
|
305
|
-
// Mark the invalid control as touched so that the input's invalid CSS styles appear.
|
306
|
-
// (This is only required when the invalid value is set by the FormControl constructor.)
|
307
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").markAsTouched();
|
308
|
-
return {
|
309
|
-
skyDate: {
|
310
|
-
invalid: value,
|
311
|
-
},
|
312
|
-
};
|
313
|
-
}
|
314
|
-
return null;
|
315
|
-
}
|
316
|
-
registerOnChange(fn) {
|
317
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_onChange, fn, "f");
|
318
|
-
}
|
319
|
-
registerOnTouched(fn) {
|
320
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_onTouched, fn, "f");
|
321
|
-
}
|
322
|
-
registerOnValidatorChange(fn) {
|
323
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_onValidatorChange, fn, "f");
|
324
|
-
}
|
325
|
-
setDisabledState(disabled) {
|
326
|
-
this.disabled = disabled;
|
327
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").disabled = disabled;
|
328
|
-
}
|
329
|
-
/**
|
330
|
-
* Detects changes to the underlying input element's value and updates the ngModel accordingly.
|
331
|
-
* This is useful if you need to update the ngModel value before the input element loses focus.
|
332
|
-
*/
|
333
|
-
detectInputValueChange() {
|
334
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_onValueChange).call(this, __classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement.value);
|
335
|
-
}
|
336
|
-
}
|
337
|
-
_SkyDatepickerInputDirective_control = new WeakMap(), _SkyDatepickerInputDirective_dateFormatter = new WeakMap(), _SkyDatepickerInputDirective_initialPlaceholder = new WeakMap(), _SkyDatepickerInputDirective_preferredShortDateFormat = new WeakMap(), _SkyDatepickerInputDirective_ngUnsubscribe = new WeakMap(), _SkyDatepickerInputDirective__dateFormat = new WeakMap(), _SkyDatepickerInputDirective__disabled = new WeakMap(), _SkyDatepickerInputDirective__maxDate = new WeakMap(), _SkyDatepickerInputDirective__minDate = new WeakMap(), _SkyDatepickerInputDirective__startingDay = new WeakMap(), _SkyDatepickerInputDirective__strict = new WeakMap(), _SkyDatepickerInputDirective__value = new WeakMap(), _SkyDatepickerInputDirective_adapter = new WeakMap(), _SkyDatepickerInputDirective_changeDetector = new WeakMap(), _SkyDatepickerInputDirective_configService = new WeakMap(), _SkyDatepickerInputDirective_elementRef = new WeakMap(), _SkyDatepickerInputDirective_localeProvider = new WeakMap(), _SkyDatepickerInputDirective_renderer = new WeakMap(), _SkyDatepickerInputDirective_resourcesService = new WeakMap(), _SkyDatepickerInputDirective_datepickerComponent = new WeakMap(), _SkyDatepickerInputDirective_onChange = new WeakMap(), _SkyDatepickerInputDirective_onTouched = new WeakMap(), _SkyDatepickerInputDirective_onValidatorChange = new WeakMap(), _SkyDatepickerInputDirective_instances = new WeakSet(), _SkyDatepickerInputDirective_value_get = function _SkyDatepickerInputDirective_value_get() {
|
338
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f");
|
339
|
-
}, _SkyDatepickerInputDirective_value_set = function _SkyDatepickerInputDirective_value_set(value) {
|
340
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updateValue).call(this, value);
|
341
|
-
}, _SkyDatepickerInputDirective_applyDateFormat = function _SkyDatepickerInputDirective_applyDateFormat() {
|
342
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updatePlaceholder).call(this);
|
343
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get)) {
|
344
|
-
const formattedDate = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").format(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get), this.dateFormat);
|
345
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, formattedDate);
|
346
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_changeDetector, "f").markForCheck();
|
347
|
-
}
|
348
|
-
}, _SkyDatepickerInputDirective_onValueChange = function _SkyDatepickerInputDirective_onValueChange(newValue) {
|
349
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_instances, newValue, "a", _SkyDatepickerInputDirective_value_set);
|
350
|
-
}, _SkyDatepickerInputDirective_setInputElementValue = function _SkyDatepickerInputDirective_setInputElementValue(value) {
|
351
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement, 'value', value);
|
352
|
-
}, _SkyDatepickerInputDirective_getDateValue = function _SkyDatepickerInputDirective_getDateValue(value) {
|
353
|
-
if (value instanceof Date) {
|
354
|
-
return value;
|
355
|
-
}
|
356
|
-
else if (typeof value === 'string') {
|
357
|
-
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_getShortcutOrDateValue).call(this, value);
|
358
|
-
}
|
359
|
-
return undefined;
|
360
|
-
}, _SkyDatepickerInputDirective_getShortcutOrDateValue = function _SkyDatepickerInputDirective_getShortcutOrDateValue(value) {
|
361
|
-
const num = Number(value);
|
362
|
-
if (Number.isInteger(num)) {
|
363
|
-
// We require 8 digits in order to know that we have all information needed to determine what part of the number is the month (2), day (2), and year (4).
|
364
|
-
if (value.length === 8) {
|
365
|
-
const regex = new RegExp(/\b(MM)\b|\b(DD)\b|\b(YY)\b|\b(YYYY)\b/, 'g');
|
366
|
-
const formatTokensOnly = this.dateFormat
|
367
|
-
?.match(regex)
|
368
|
-
?.join('')
|
369
|
-
.replace(new RegExp(/Y+/), 'YYYY');
|
370
|
-
if (formatTokensOnly && formatTokensOnly.length === 8) {
|
371
|
-
const date = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").getDateFromString(value, formatTokensOnly, true);
|
372
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(date)) {
|
373
|
-
return date;
|
374
|
-
}
|
375
|
-
}
|
376
|
-
}
|
377
|
-
const now = new Date();
|
378
|
-
const shortcutDate = new Date(now.getFullYear(), now.getMonth(), num);
|
379
|
-
const daysInMonth = shortcutDate.getDate();
|
380
|
-
if (num > 0 && num <= daysInMonth) {
|
381
|
-
return shortcutDate;
|
382
|
-
}
|
383
|
-
}
|
384
|
-
else {
|
385
|
-
const date = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").getDateFromString(value, this.dateFormat, this.strict);
|
386
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(date)) {
|
387
|
-
return date;
|
388
|
-
}
|
389
|
-
}
|
390
|
-
return undefined;
|
391
|
-
}, _SkyDatepickerInputDirective_isDateStringValid = function _SkyDatepickerInputDirective_isDateStringValid(value) {
|
392
|
-
if (!value || typeof value !== 'string') {
|
393
|
-
return true;
|
394
|
-
}
|
395
|
-
// Does the value only include digits, dashes, or slashes?
|
396
|
-
const regexp = /^[\d/-]+$/;
|
397
|
-
const isValid = regexp.test(value);
|
398
|
-
if (isValid) {
|
399
|
-
return true;
|
400
|
-
}
|
401
|
-
// If not, does it conform to the standard ISO format?
|
402
|
-
const isValidIso = moment(value, moment.ISO_8601).isValid();
|
403
|
-
return isValidIso;
|
404
|
-
}, _SkyDatepickerInputDirective_updatePlaceholder = function _SkyDatepickerInputDirective_updatePlaceholder() {
|
405
|
-
if (!__classPrivateFieldGet(this, _SkyDatepickerInputDirective_initialPlaceholder, "f") && this.dateFormat) {
|
406
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_adapter, "f").setPlaceholder(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f"), this.dateFormat);
|
407
|
-
}
|
408
|
-
}, _SkyDatepickerInputDirective_updateValue = function _SkyDatepickerInputDirective_updateValue(value, emitEvent = true) {
|
409
|
-
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f") === value) {
|
410
|
-
return;
|
411
|
-
}
|
412
|
-
const isValidDateString = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_isDateStringValid).call(this, value);
|
413
|
-
// If the string value supplied is malformed, do not set the value to its Date equivalent.
|
414
|
-
// (JavaScript's Date parser will convert poorly formatted dates to Date objects, such as "abc 123", which isn't ideal.)
|
415
|
-
if (!isValidDateString) {
|
416
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__value, value, "f");
|
417
|
-
if (emitEvent) {
|
418
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onChange, "f").call(this, __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"));
|
419
|
-
}
|
420
|
-
else {
|
421
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"), { emitEvent: false });
|
422
|
-
}
|
423
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").selectedDate = __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f");
|
424
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, value);
|
425
|
-
}
|
426
|
-
else {
|
427
|
-
// This value represents the date value for the input if possible.
|
428
|
-
// This value will take into account all shortcut functionality.
|
429
|
-
const dateValue = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_getDateValue).call(this, value);
|
430
|
-
const areDatesEqual = __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f") instanceof Date &&
|
431
|
-
dateValue &&
|
432
|
-
dateValue.getTime() === __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f").getTime();
|
433
|
-
if (dateValue !== __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f") || !areDatesEqual) {
|
434
|
-
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__value, dateValue || value, "f");
|
435
|
-
if (emitEvent) {
|
436
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onChange, "f").call(this, __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"));
|
437
|
-
}
|
438
|
-
else {
|
439
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"), { emitEvent: false });
|
440
|
-
}
|
441
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").selectedDate = __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f");
|
442
|
-
}
|
443
|
-
if (dateValue) {
|
444
|
-
const formattedDateString = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").format(dateValue, this.dateFormat);
|
445
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, formattedDateString);
|
446
|
-
}
|
447
|
-
else {
|
448
|
-
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, value || '');
|
449
|
-
}
|
450
|
-
}
|
451
|
-
};
|
452
|
-
SkyDatepickerInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyDatepickerInputDirective, deps: [{ token: i1.SkyDatepickerAdapterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i3.SkyLibResourcesService }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
453
|
-
SkyDatepickerInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: { dateFormat: "dateFormat", disabled: "disabled", maxDate: "maxDate", minDate: "minDate", skyDatepickerInput: "skyDatepickerInput", skyDatepickerNoValidate: "skyDatepickerNoValidate", startingDay: "startingDay", strict: "strict" }, host: { listeners: { "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInput()" } }, providers: [
|
454
|
-
SKY_DATEPICKER_VALUE_ACCESSOR,
|
455
|
-
SKY_DATEPICKER_VALIDATOR,
|
456
|
-
SkyDatepickerAdapterService,
|
457
|
-
], ngImport: i0 });
|
458
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyDatepickerInputDirective, decorators: [{
|
459
|
-
type: Directive,
|
460
|
-
args: [{
|
461
|
-
selector: '[skyDatepickerInput]',
|
462
|
-
providers: [
|
463
|
-
SKY_DATEPICKER_VALUE_ACCESSOR,
|
464
|
-
SKY_DATEPICKER_VALIDATOR,
|
465
|
-
SkyDatepickerAdapterService,
|
466
|
-
],
|
467
|
-
}]
|
468
|
-
}], ctorParameters: function () { return [{ type: i1.SkyDatepickerAdapterService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i3.SkyLibResourcesService }, { type: i4.SkyDatepickerComponent, decorators: [{
|
469
|
-
type: Optional
|
470
|
-
}] }]; }, propDecorators: { dateFormat: [{
|
471
|
-
type: Input
|
472
|
-
}], disabled: [{
|
473
|
-
type: Input
|
474
|
-
}], maxDate: [{
|
475
|
-
type: Input
|
476
|
-
}], minDate: [{
|
477
|
-
type: Input
|
478
|
-
}], skyDatepickerInput: [{
|
479
|
-
type: Input
|
480
|
-
}], skyDatepickerNoValidate: [{
|
481
|
-
type: Input
|
482
|
-
}], startingDay: [{
|
483
|
-
type: Input
|
484
|
-
}], strict: [{
|
485
|
-
type: Input
|
486
|
-
}], onInputChange: [{
|
487
|
-
type: HostListener,
|
488
|
-
args: ['change', ['$event']]
|
489
|
-
}], onInputBlur: [{
|
490
|
-
type: HostListener,
|
491
|
-
args: ['blur']
|
492
|
-
}], onInput: [{
|
493
|
-
type: HostListener,
|
494
|
-
args: ['input']
|
495
|
-
}] } });
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBSTNFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFVRixNQUFNLE9BQU8sMkJBQTJCO0lBU3RDOzs7O09BSUc7SUFDSCxJQUNXLFVBQVUsQ0FBQyxLQUF5QjtRQUM3QywwQkFB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QSxJQUFJLGlHQUFzQixNQUExQixJQUFJLEVBQXVCLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6QztLQUNGO0FBQ0gsQ0FBQzt3SEF0a0JVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDBZQU4zQjtRQUNULDZCQUE2QjtRQUM3Qix3QkFBd0I7UUFDeEIsMkJBQTJCO0tBQzVCOzJGQUVVLDJCQUEyQjtrQkFSdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxTQUFTLEVBQUU7d0JBQ1QsNkJBQTZCO3dCQUM3Qix3QkFBd0I7d0JBQ3hCLDJCQUEyQjtxQkFDNUI7aUJBQ0Y7OzBCQThMSSxRQUFROzRDQTlLQSxVQUFVO3NCQURwQixLQUFLO2dCQXdCSyxRQUFRO3NCQURsQixLQUFLO2dCQW9CSyxPQUFPO3NCQURqQixLQUFLO2dCQWtCSyxPQUFPO3NCQURqQixLQUFLO2dCQW9CSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBb0JDLHVCQUF1QjtzQkFEN0IsS0FBSztnQkFVSyxXQUFXO3NCQURyQixLQUFLO2dCQXNCSyxNQUFNO3NCQURoQixLQUFLO2dCQWlJQyxhQUFhO3NCQURuQixZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEwQjNCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsTUFBTTtnQkFNYixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyLCBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlRm9ybWF0dGVyIH0gZnJvbSAnLi9kYXRlLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcblxuY29uc3QgU0tZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IFNLWV9EQVRFUElDS0VSX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5RGF0ZXBpY2tlcklucHV0XScsXG4gIHByb3ZpZGVyczogW1xuICAgIFNLWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFNLWV9EQVRFUElDS0VSX1ZBTElEQVRPUixcbiAgICBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgVmFsaWRhdG9yXG57XG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiB0aGUgYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuI19kYXRlRm9ybWF0KSB7XG4gICAgICB0aGlzLiNfZGF0ZUZvcm1hdCA9IHZhbHVlO1xuICAgICAgdGhpcy4jYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLiNfZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy4jY29uZmlnU2VydmljZS5kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWUgfHwgZmFsc2U7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVhcmxpZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuIFRvIGF2b2lkIHZhbGlkYXRpb24gZXJyb3JzLCB0aGUgdGltZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1pbmltdW0gZGF0ZSBtdXN0IGJlIG1pZG5pZ2h0LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkYXRlcGlja2VyIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgdGltZSBvbiB0aGUgYERhdGVgIG9iamVjdCBmb3Igc2VsZWN0ZWQgZGF0ZXMgdG8gbWlkbmlnaHQgaW4gdGhlIGN1cnJlbnQgdXNlcidzIHRpbWUgem9uZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluRGF0ZSh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19taW5EYXRlIHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2UubWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkYXRlcGlja2VyIGlucHV0IGFuZCBjYWxlbmRhci4gUGxhY2UgdGhpcyBkaXJlY3RpdmUgb24gYW4gYGlucHV0YCBlbGVtZW50LFxuICAgKiBhbmQgd3JhcCB0aGUgaW5wdXQgaW4gYSBgc2t5LWRhdGVwaWNrZXJgIGNvbXBvbmVudC4gVGhlIHZhbHVlIHRoYXQgdXNlcnMgc2VsZWN0IGlzIGRyaXZlblxuICAgKiB0aHJvdWdoIHRoZSBgbmdNb2RlbGAgYXR0cmlidXRlIHNwZWNpZmllZCBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2t5RGF0ZXBpY2tlcklucHV0KFxuICAgIHZhbHVlOiBTa3lEYXRlcGlja2VyQ29tcG9uZW50IHwgdW5kZWZpbmVkIHwgJydcbiAgKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbRGVwcmVjYXRpb24gd2FybmluZ10gWW91IG5vIGxvbmdlciBuZWVkIHRvIHByb3ZpZGUgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgdmFyaWFibGUgJyArXG4gICAgICAgICAgJ3RvIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBhdHRyaWJ1dGUgKHRoaXMgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZSBpbiB0aGUgbmV4dCAnICtcbiAgICAgICAgICAnbWFqb3IgdmVyc2lvbiByZWxlYXNlKS5cXG4nICtcbiAgICAgICAgICAnRG8gdGhpcyBpbnN0ZWFkOlxcbicgK1xuICAgICAgICAgICc8c2t5LWRhdGVwaWNrZXI+XFxuICA8aW5wdXQgc2t5RGF0ZXBpY2tlcklucHV0IC8+XFxuPC9za3ktZGF0ZXBpY2tlcj4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgZGF0ZSB2YWxpZGF0aW9uIG9uIHRoZSBkYXRlcGlja2VyIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNreURhdGVwaWNrZXJOb1ZhbGlkYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLCB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5XG4gICAqIHRvIFN1bmRheS4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdFxuICAgKiBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXkgfHwgdGhpcy4jY29uZmlnU2VydmljZS5zdGFydGluZ0RheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgdmFsdWUgbXVzdCBtYXRjaCB0aGUgZm9ybWF0IGZyb20gdGhlIGBkYXRlRm9ybWF0YCB2YWx1ZS5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgYW5kIHRoZSBkYXRlcGlja2VyIGlucHV0IGRpcmVjdGl2ZSBjYW5ub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgdGhlblxuICAgKiB0aGUgaW5wdXQgaXMgbWFya2VkIGFzIGludmFsaWQuXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgYGZhbHNlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIGl0IGF0dGVtcHRzIHRvIGZvcm1hdCB0aGUgc3RyaW5nIGJhc2VkIG9uIHRoZSBbSVNPIDg2MDEgc3RhbmRhcmQgZm9ybWF0XShodHRwczovL3d3dy5pc28ub3JnL2lzby04NjAxLWRhdGUtYW5kLXRpbWUtZm9ybWF0Lmh0bWwpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdHJpY3QodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RyaWN0ID0gdmFsdWUgfHwgZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0cmljdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0cmljdDtcbiAgfVxuXG4gIGdldCAjdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgc2V0ICN2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy4jdXBkYXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgI2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZDtcbiAgI2RhdGVGb3JtYXR0ZXIgPSBuZXcgU2t5RGF0ZUZvcm1hdHRlcigpO1xuICAjaW5pdGlhbFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfZGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfbWF4RGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgI19taW5EYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAjX3N0YXJ0aW5nRGF5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICNfc3RyaWN0ID0gZmFsc2U7XG4gICNfdmFsdWU6IGFueTtcblxuICAjYWRhcHRlcjogU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2U7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyO1xuICAjcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgI3Jlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2U7XG4gICNkYXRlcGlja2VyQ29tcG9uZW50OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI6IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXIsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICByZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGRhdGVwaWNrZXJDb21wb25lbnQ/OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50XG4gICkge1xuICAgIGlmICghZGF0ZXBpY2tlckNvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnWW91IG11c3Qgd3JhcCB0aGUgYHNreURhdGVwaWNrZXJJbnB1dGAgZGlyZWN0aXZlIHdpdGhpbiBhICcgK1xuICAgICAgICAgICdgPHNreS1kYXRlcGlja2VyPmAgY29tcG9uZW50ISdcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jY29uZmlnU2VydmljZSA9IGNvbmZpZ1NlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jbG9jYWxlUHJvdmlkZXIgPSBsb2NhbGVQcm92aWRlcjtcbiAgICB0aGlzLiNyZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2UgPSByZXNvdXJjZXNTZXJ2aWNlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQgPSBkYXRlcGlja2VyQ29tcG9uZW50O1xuICAgIHRoaXMuI2luaXRpYWxQbGFjZWhvbGRlciA9IHRoaXMuI2FkYXB0ZXIuZ2V0UGxhY2Vob2xkZXIodGhpcy4jZWxlbWVudFJlZik7XG4gICAgdGhpcy4jdXBkYXRlUGxhY2Vob2xkZXIoKTtcblxuICAgIHRoaXMuI2xvY2FsZVByb3ZpZGVyXG4gICAgICAuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIFNreURhdGVGb3JtYXR0ZXIuc2V0TG9jYWxlKGxvY2FsZUluZm8ubG9jYWxlKTtcbiAgICAgICAgdGhpcy4jcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0ID1cbiAgICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLmdldFByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCgpO1xuICAgICAgICB0aGlzLiNhcHBseURhdGVGb3JtYXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuXG4gICAgY29uc3QgaGFzQXJpYUxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIGlmICghaGFzQXJpYUxhYmVsKSB7XG4gICAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlXG4gICAgICAgIC5nZXRTdHJpbmcoJ3NreXV4X2RhdGVfZmllbGRfZGVmYXVsdF9sYWJlbCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuI3JlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnYXJpYS1sYWJlbCcsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRhdGVDaGFuZ2VcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogRGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLiN2YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLiNvblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNC5cbiAgICAvLyBXaGVuIGEgY29udHJvbCB2YWx1ZSBpcyBzZXQgaW5pdGlhbGx5LCBpdHMgdmFsdWUgaXMgbm90IHJlcHJlc2VudGVkIG9uIHRoZSB2aWV3LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAvLyBPZiBub3RlIGlzIHRoZSBwYXJlbnQgY2hlY2sgd2hpY2ggYWxsb3dzIHVzIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyByZWFjdGl2ZS5cbiAgICAvLyBXaXRob3V0IHRoaXMgY2hlY2sgdGhlcmUgaXMgYSBjaGFuZ2VkIGJlZm9yZSBjaGVja2VkIGVycm9yXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jY29udHJvbCAmJiB0aGlzLiNjb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI3ZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIHZhbHVlIGludG8gYSBEYXRlIHZhbHVlIGlmIGl0IGlzIG1hbGZvcm1lZC5cbiAgICBpZiAodGhpcy4jaXNEYXRlU3RyaW5nVmFsaWQodmFsdWUpKSB7XG4gICAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLiNvbkNoYW5nZSh2YWx1ZSk7XG5cbiAgICB0aGlzLiNjb250cm9sPy5zZXRFcnJvcnMoe1xuICAgICAgc2t5RGF0ZToge1xuICAgICAgICBpbnZhbGlkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gIHB1YmxpYyBvbklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuI2NvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlVmFsdWUodmFsdWUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLiNjb250cm9sKSB7XG4gICAgICB0aGlzLiNjb250cm9sID0gY29udHJvbDtcbiAgICAgIC8vIEFjY291bnQgZm9yIGFueSBkYXRlIGNvbnZlcnNpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZCBwcmlvciB0byB2YWxpZGF0aW9uLlxuICAgICAgaWYgKHRoaXMuI2NvbnRyb2wudmFsdWUgIT09IHRoaXMuI3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLiN2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBpc0RhdGVWYWxpZCA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQodmFsdWUpO1xuXG4gICAgICBpZiAoIWlzRGF0ZVZhbGlkKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWluRGF0ZSAmJlxuICAgICAgICB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1pbkRhdGUpICYmXG4gICAgICAgIHZhbHVlIDwgbWluRGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgbWluRGF0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG1heERhdGUgJiZcbiAgICAgICAgdGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChtYXhEYXRlKSAmJlxuICAgICAgICB2YWx1ZSA+IG1heERhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIG1heERhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdHMgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50J3MgdmFsdWUgYW5kIHVwZGF0ZXMgdGhlIG5nTW9kZWwgYWNjb3JkaW5nbHkuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgbmdNb2RlbCB2YWx1ZSBiZWZvcmUgdGhlIGlucHV0IGVsZW1lbnQgbG9zZXMgZm9jdXMuXG4gICAqL1xuICBwdWJsaWMgZGV0ZWN0SW5wdXRWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICAjYXBwbHlEYXRlRm9ybWF0KCk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgaWYgKHRoaXMuI3ZhbHVlKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQoXG4gICAgICAgIHRoaXMuI3ZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gICNvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiN2YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXRlIHZhbHVlIGZyb20gYSB2YWx1ZSAtIGlmIHBvc3NpYmxlLlxuICAgKiBXaWxsIG5vdCBjb252ZXJ0IHVuY29udmVydGlibGUgZGF0ZXMgb3IgbnVtYmVycyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IG1vbnRoJ3MgbnVtYmVyIG9mIGRheXMuXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHZhbHVlIGNhbiBub3QgYmUgY29udmVydGVkLlxuICAgKi9cbiAgI2dldERhdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRTaG9ydGN1dE9yRGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIGRhdGUgb2JqZWN0IGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBkYXRlIHN0cmluZy5cbiAgICogSXQgd2lsbCBhbHNvIGNvbnZlcnQgbnVtZXJpYyBpbnB1dCB0byBhIGRhdGUgaWYgdGhhdCBudW1iZXIgaXMgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoJ3MgbnVtYmVyIG9mIGRheXMuXG4gICAqIElmIHRoZSBzdHJpbmcgY2FuIG5vdCBiZSBjb252ZXJ0ZWQsIGB1bmRlZmluZWRgIGJlIHJldHVybmVkLlxuICAgKi9cbiAgI2dldFNob3J0Y3V0T3JEYXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIobnVtKSkge1xuICAgICAgLy8gV2UgcmVxdWlyZSA4IGRpZ2l0cyBpbiBvcmRlciB0byBrbm93IHRoYXQgd2UgaGF2ZSBhbGwgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRldGVybWluZSB3aGF0IHBhcnQgb2YgdGhlIG51bWJlciBpcyB0aGUgbW9udGggKDIpLCBkYXkgKDIpLCBhbmQgeWVhciAoNCkuXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSA4KSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXFxiKE1NKVxcYnxcXGIoREQpXFxifFxcYihZWSlcXGJ8XFxiKFlZWVkpXFxiLywgJ2cnKTtcbiAgICAgICAgY29uc3QgZm9ybWF0VG9rZW5zT25seSA9IHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgICAgID8ubWF0Y2gocmVnZXgpXG4gICAgICAgICAgPy5qb2luKCcnKVxuICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoL1krLyksICdZWVlZJyk7XG5cbiAgICAgICAgaWYgKGZvcm1hdFRva2Vuc09ubHkgJiYgZm9ybWF0VG9rZW5zT25seS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0VG9rZW5zT25seSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBzaG9ydGN1dERhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG51bSk7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHNob3J0Y3V0RGF0ZS5nZXREYXRlKCk7XG4gICAgICBpZiAobnVtID4gMCAmJiBudW0gPD0gZGF5c0luTW9udGgpIHtcbiAgICAgICAgcmV0dXJuIHNob3J0Y3V0RGF0ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZ2V0RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuc3RyaWN0XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBpbnB1dCB2YWx1ZSB0byBlbnN1cmUgaXQgaXMgZm9ybWF0dGVkIGNvcnJlY3RseS5cbiAgICovXG4gICNpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEb2VzIHRoZSB2YWx1ZSBvbmx5IGluY2x1ZGUgZGlnaXRzLCBkYXNoZXMsIG9yIHNsYXNoZXM/XG4gICAgY29uc3QgcmVnZXhwID0gL15bXFxkLy1dKyQvO1xuICAgIGNvbnN0IGlzVmFsaWQgPSByZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90LCBkb2VzIGl0IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkIElTTyBmb3JtYXQ/XG4gICAgY29uc3QgaXNWYWxpZElzbyA9IG1vbWVudCh2YWx1ZSwgbW9tZW50LklTT184NjAxKS5pc1ZhbGlkKCk7XG5cbiAgICByZXR1cm4gaXNWYWxpZElzbztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gICN1cGRhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI2luaXRpYWxQbGFjZWhvbGRlciAmJiB0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXIuc2V0UGxhY2Vob2xkZXIodGhpcy4jZWxlbWVudFJlZiwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgI3VwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jX3ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmFsaWREYXRlU3RyaW5nID0gdGhpcy4jaXNEYXRlU3RyaW5nVmFsaWQodmFsdWUpO1xuXG4gICAgLy8gSWYgdGhlIHN0cmluZyB2YWx1ZSBzdXBwbGllZCBpcyBtYWxmb3JtZWQsIGRvIG5vdCBzZXQgdGhlIHZhbHVlIHRvIGl0cyBEYXRlIGVxdWl2YWxlbnQuXG4gICAgLy8gKEphdmFTY3JpcHQncyBEYXRlIHBhcnNlciB3aWxsIGNvbnZlcnQgcG9vcmx5IGZvcm1hdHRlZCBkYXRlcyB0byBEYXRlIG9iamVjdHMsIHN1Y2ggYXMgXCJhYmMgMTIzXCIsIHdoaWNoIGlzbid0IGlkZWFsLilcbiAgICBpZiAoIWlzVmFsaWREYXRlU3RyaW5nKSB7XG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IHRoaXMuI192YWx1ZTtcblxuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIGRhdGUgdmFsdWUgZm9yIHRoZSBpbnB1dCBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCB0YWtlIGludG8gYWNjb3VudCBhbGwgc2hvcnRjdXQgZnVuY3Rpb25hbGl0eS5cbiAgICAgIGNvbnN0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCA9IHRoaXMuI2dldERhdGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IGFyZURhdGVzRXF1YWwgPVxuICAgICAgICB0aGlzLiNfdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIGRhdGVWYWx1ZSAmJlxuICAgICAgICBkYXRlVmFsdWUuZ2V0VGltZSgpID09PSB0aGlzLiNfdmFsdWUuZ2V0VGltZSgpO1xuXG4gICAgICBpZiAoZGF0ZVZhbHVlICE9PSB0aGlzLiNfdmFsdWUgfHwgIWFyZURhdGVzRXF1YWwpIHtcbiAgICAgICAgdGhpcy4jX3ZhbHVlID0gZGF0ZVZhbHVlIHx8IHZhbHVlO1xuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy4jX3ZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGVTdHJpbmcgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICBkYXRlVmFsdWUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGVTdHJpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|