@odx/angular 12.21.1 → 12.21.3
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/CHANGELOG.md +12 -0
- package/cdk/date-input/index.d.ts +1 -0
- package/cdk/date-input/lib/utils/ngx-mask-init.d.ts +3 -0
- package/components/autocomplete/lib/autocomplete.component.d.ts +1 -0
- package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +4 -16
- package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +4 -16
- package/components/timepicker/lib/directives/timepicker-input-control.directive.d.ts +6 -15
- package/components/timepicker/lib/timepicker.service.d.ts +5 -4
- package/esm2022/cdk/date-input/index.mjs +2 -1
- package/esm2022/cdk/date-input/lib/utils/ngx-mask-init.mjs +22 -0
- package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +24 -8
- package/esm2022/components/datepicker/lib/datepicker.component.mjs +3 -2
- package/esm2022/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +8 -23
- package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +4 -2
- package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +8 -23
- package/esm2022/components/timepicker/lib/directives/timepicker-input-control.directive.mjs +17 -37
- package/esm2022/components/timepicker/lib/timepicker.component.mjs +21 -6
- package/esm2022/components/timepicker/lib/timepicker.service.mjs +42 -15
- package/fesm2022/odx-angular-cdk-date-input.mjs +23 -2
- package/fesm2022/odx-angular-cdk-date-input.mjs.map +1 -1
- package/fesm2022/odx-angular-components-autocomplete.mjs +23 -7
- package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/odx-angular-components-datepicker.mjs +10 -24
- package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-daterangepicker.mjs +11 -24
- package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-timepicker.mjs +113 -90
- package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -31,8 +31,10 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
|
|
|
31
31
|
* @default false
|
|
32
32
|
*/
|
|
33
33
|
set useLocale(val) {
|
|
34
|
+
this.timepickerService.useLocale.set(val);
|
|
35
|
+
this.dateField?.applyMask(val);
|
|
34
36
|
if (this.value && this.dateField) {
|
|
35
|
-
const time = this.timepickerService.getLocalizedTimeFormat(this.value
|
|
37
|
+
const time = this.timepickerService.getLocalizedTimeFormat(this.value);
|
|
36
38
|
this.updateValue(time);
|
|
37
39
|
this.dateField.nativeElementValue = time;
|
|
38
40
|
}
|
|
@@ -128,8 +130,9 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
|
|
|
128
130
|
*/
|
|
129
131
|
writeValue(value) {
|
|
130
132
|
super.writeValue(value);
|
|
131
|
-
if (value === null || this.timepickerService.isValidTime(value))
|
|
133
|
+
if (value === null || this.timepickerService.isValidTime(value)) {
|
|
132
134
|
this.updateInputValue();
|
|
135
|
+
}
|
|
133
136
|
}
|
|
134
137
|
onOpen() {
|
|
135
138
|
this.keyManager = new ActiveDescendantKeyManager(this.options).withHomeAndEnd();
|
|
@@ -147,7 +150,17 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
|
|
|
147
150
|
}
|
|
148
151
|
}
|
|
149
152
|
handleDateFieldChanges() {
|
|
150
|
-
this.dateField?.
|
|
153
|
+
this.dateField?.applyMask(this.useLocale);
|
|
154
|
+
this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((time) => {
|
|
155
|
+
const normalized = typeof time === 'string' ? time.trim() : '';
|
|
156
|
+
if (!normalized) {
|
|
157
|
+
this.updateValue(null);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (this.timepickerService.is12HourFormat(normalized) === this._useLocale) {
|
|
161
|
+
this.updateValue(this.timepickerService.getLocalizedTimeFormat(normalized));
|
|
162
|
+
}
|
|
163
|
+
});
|
|
151
164
|
}
|
|
152
165
|
resetValue(e) {
|
|
153
166
|
e.stopImmediatePropagation();
|
|
@@ -182,7 +195,7 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
|
|
|
182
195
|
updateInputValue() {
|
|
183
196
|
if (!this.dateField)
|
|
184
197
|
return;
|
|
185
|
-
this.dateField.nativeElementValue = this.timepickerService.getLocalizedTimeFormat(this.value
|
|
198
|
+
this.dateField.nativeElementValue = this.timepickerService.getLocalizedTimeFormat(this.value);
|
|
186
199
|
}
|
|
187
200
|
scrollToActiveOption(option, _opts = {}) {
|
|
188
201
|
if (isFunction(option.element.nativeElement.scrollIntoView)) {
|
|
@@ -192,7 +205,7 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
|
|
|
192
205
|
setOption(option) {
|
|
193
206
|
if (!option || option.disabled)
|
|
194
207
|
return;
|
|
195
|
-
const time = this.timepickerService.getLocalizedTimeFormat(option.getLabel()
|
|
208
|
+
const time = this.timepickerService.getLocalizedTimeFormat(option.getLabel());
|
|
196
209
|
this.dateField && (this.dateField.nativeElementValue = time);
|
|
197
210
|
this.updateValue(time);
|
|
198
211
|
}
|
|
@@ -204,6 +217,7 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
|
|
|
204
217
|
provide: TIMEPICKER_CONTROL,
|
|
205
218
|
useExisting: forwardRef(() => TimepickerComponent),
|
|
206
219
|
},
|
|
220
|
+
TimepickerService,
|
|
207
221
|
], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dateField", first: true, predicate: TimepickerInputControlDirective, descendants: true }, { propertyName: "options", predicate: TimepickerOptionComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"odx-timepicker__wrapper\">\n <input [value]=\"value\" odxTimepickerControl type=\"text\" />\n</div>\n\n<odx-action-group class=\"odx-timepicker__trigger-wrapper odx-no-margin\">\n @if (clearable() && value) {\n <button class=\"odx-timepicker__clear\" odxButton size=\"small\" aria-label=\"Reset time\" (click)=\"resetValue($event)\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n class=\"odx-timepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n aria-label=\"Select time\"\n [odxDropdown]=\"timeList\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, position: 'bottom-start' }\"\n [odxDropdownTriggerElement]=\"dropdownTrigger.element.nativeElement\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n (odxDropdownAfterOpen)=\"onOpen()\"\n >\n <odx-icon name=\"chevron-down\" />\n </button>\n</odx-action-group>\n\n<ng-template #timeList>\n <div class=\"odx-timepicker__option-list\" role=\"listbox\">\n @for (time of timeStampsList; track $index) {\n <odx-timepicker-option [value]=\"time\" [disabled]=\"!inTimeRange(time)\" (selected)=\"timeSelected($event)\">{{ time }}</odx-timepicker-option>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i1.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: i2.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: TimepickerOptionComponent, selector: "odx-timepicker-option", outputs: ["selected"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "directive", type: TimepickerInputControlDirective, selector: "input[odxTimepickerControl]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
208
222
|
};
|
|
209
223
|
TimepickerComponent = __decorate([
|
|
@@ -220,6 +234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
220
234
|
provide: TIMEPICKER_CONTROL,
|
|
221
235
|
useExisting: forwardRef(() => TimepickerComponent),
|
|
222
236
|
},
|
|
237
|
+
TimepickerService,
|
|
223
238
|
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [A11yModule, ActionGroupComponent, ButtonComponent, DropdownModule, TimepickerOptionComponent, IconComponent, TimepickerInputControlDirective], host: {
|
|
224
239
|
'[attr.readonly]': 'readonlyController?.readonly || null',
|
|
225
240
|
}, template: "<div class=\"odx-timepicker__wrapper\">\n <input [value]=\"value\" odxTimepickerControl type=\"text\" />\n</div>\n\n<odx-action-group class=\"odx-timepicker__trigger-wrapper odx-no-margin\">\n @if (clearable() && value) {\n <button class=\"odx-timepicker__clear\" odxButton size=\"small\" aria-label=\"Reset time\" (click)=\"resetValue($event)\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n class=\"odx-timepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n aria-label=\"Select time\"\n [odxDropdown]=\"timeList\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, position: 'bottom-start' }\"\n [odxDropdownTriggerElement]=\"dropdownTrigger.element.nativeElement\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n (odxDropdownAfterOpen)=\"onOpen()\"\n >\n <odx-icon name=\"chevron-down\" />\n </button>\n</odx-action-group>\n\n<ng-template #timeList>\n <div class=\"odx-timepicker__option-list\" role=\"listbox\">\n @for (time of timeStampsList; track $index) {\n <odx-timepicker-option [value]=\"time\" [disabled]=\"!inTimeRange(time)\" (selected)=\"timeSelected($event)\">{{ time }}</odx-timepicker-option>\n }\n </div>\n</ng-template>\n" }]
|
|
@@ -249,4 +264,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
249
264
|
type: HostListener,
|
|
250
265
|
args: ['keydown', ['$event']]
|
|
251
266
|
}] } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFD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O3VCQUFDLGlCQUFpQjtnQkFJbEIsT0FBTztzQkFEaEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFZL0QsU0FBUztzQkFEbkIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFrQy9CLElBQUk7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBVTlCLEdBQUc7c0JBRFQsS0FBSztnQkFVQyxHQUFHO3NCQURULEtBQUs7Z0JBU0MsU0FBUztzQkFEZixTQUFTO3VCQUFDLCtCQUErQjtnQkFxRWhDLHFCQUFxQjtzQkFGOUIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUNoQyxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUsIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNhYmxlZENvbnRyb2xsZXIsIFJlYWRvbmx5Q29udHJvbGxlciB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBPcHRpb25Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9vcHRpb24tY29udHJvbCc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUsIERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIGlzRnVuY3Rpb24sIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGltZXBpY2tlci1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdGltZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaW1lcGlja2VyU2VydmljZSB9IGZyb20gJy4vdGltZXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRJTUVQSUNLRVJfQ09OVFJPTCB9IGZyb20gJy4vdGltZXBpY2tlci50b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVRpbWVTdGFtcHMgfSBmcm9tICcuL3V0aWxzL2dlbmVyYXRlLXRpbWUtc3RhbXBzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdGltZSBwaWNrZXIgY29tcG9uZW50IGFsbG93aW5nIHVzZXJzIHRvIHNlbGVjdCBhIHRpbWUgZnJvbSBhIGRyb3Bkb3duIGxpc3QuXG4gKiBUaGlzIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhciBmb3JtcyBhbmQgc3VwcG9ydHMgY3VzdG9taXphdGlvbiBmb3IgbG9jYWxlLCB0aW1lIHJhbmdlLCBhbmQgc3RlcCBpbnRlcnZhbHMuXG4gKlxuICogQHNlZSB7Q3VzdG9tRm9ybUNvbnRyb2x9XG4gKi9cbkBDU1NDb21wb25lbnQoJ3RpbWVwaWNrZXInKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LXRpbWVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJ3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBEaXNhYmxlZENvbnRyb2xsZXIuY29ubmVjdCgpLFxuICAgIFJlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogVElNRVBJQ0tFUl9DT05UUk9MLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZXBpY2tlckNvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDdXN0b21Gb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVwaWNrZXJTZXJ2aWNlID0gaW5qZWN0KFRpbWVwaWNrZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdXNlTG9jYWxlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBrZXlNYW5hZ2VyPzogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8T3B0aW9uQ29udHJvbDxzdHJpbmc+PjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICBAVmlld0NoaWxkKERyb3Bkb3duRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24/OiBEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkcmVuKFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIHsgZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6IHRydWUgfSlcbiAgcHJvdGVjdGVkIG9wdGlvbnMhOiBRdWVyeUxpc3Q8VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudD47XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgc2hvdWxkIHVzZSBsb2NhbGUtc3BlY2lmaWMgdGltZSBmb3JtYXRzIEFNL1BNLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IHVzZUxvY2FsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmRhdGVGaWVsZCkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0TG9jYWxpemVkVGltZUZvcm1hdCh0aGlzLnZhbHVlLCB2YWwpO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aW1lKTtcbiAgICAgIHRoaXMuZGF0ZUZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IHRpbWU7XG4gICAgfVxuICAgIHRoaXMuX3VzZUxvY2FsZSA9IHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGxvY2FsZSBpcyBiZWluZyB1c2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9jYWxlIGlzIGJlaW5nIHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZUxvY2FsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlTG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBzZWxlY3Qgd2lsbCBkaXNwbGF5IGEgcmVzZXQgYnV0dG9uLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcmFibGUgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBzdGVwIGludGVydmFsIGJldHdlZW4gdGltZSBvcHRpb25zIGluIG1pbnV0ZXMuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDMwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc3RlcCA9IDMwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gdGltZSB2YWx1ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZCAoJzA1OjAwJyBvciAnMDU6MDAgQU0nKS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJzAwOjAwJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1pbiA9ICcwMDowMCc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSB0aW1lIHZhbHVlIHRoYXQgY2FuIGJlIHNlbGVjdGVkICgnMjI6MDAnIG9yICcxMDowMCBQTScpLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnMjM6NTknXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4ID0gJzIzOjU5JztcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSBmb3IgdGhlIHRpbWVwaWNrZXIgaW5wdXQgY29udHJvbC5cbiAgICpcbiAgICogQHR5cGUge1RpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfCB1bmRlZmluZWR9XG4gICAqL1xuICBAVmlld0NoaWxkKFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUpXG4gIHB1YmxpYyBkYXRlRmllbGQ/OiBUaW1lcGlja2VySW5wdXRDb250cm9sRGlyZWN0aXZlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG51bGwpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZURhdGVGaWVsZENoYW5nZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHRpbWUgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1RpbWVwaWNrZXJPcHRpb25Db21wb25lbnR9IG9wdGlvbiAtIFRoZSB0aW1lIG9wdGlvbiB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzVGltZU9wdGlvblNlbGVjdGVkKG9wdGlvbjogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBvcHRpb24udmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgc2VsZWN0aW9uIG9mIGEgdGltZSBvcHRpb24gZnJvbSB0aGUgZHJvcGRvd24sIHVwZGF0aW5nIHRoZSBpbnB1dCBmaWVsZCBhbmQgY2xvc2luZyB0aGUgZHJvcGRvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCB8IHVuZGVmaW5lZH0gb3B0aW9uIC0gVGhlIHNlbGVjdGVkIHRpbWUgb3B0aW9uIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyB0aW1lU2VsZWN0ZWQob3B0aW9uPzogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2V0T3B0aW9uKG9wdGlvbik7XG4gICAgdGhpcy5kcm9wZG93bj8uaXNPcGVuICYmIHRoaXMuZHJvcGRvd24/LmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdGltZSBpcyB3aXRoaW4gdGhlIGFsbG93ZWQgdGltZSByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWUgLSBUaGUgdGltZSB0byBjaGVjaywgaW4gJ0hIOm1tJyBvciAnSEg6bW0gQU0vUE0nIGZvcm1hdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWUgaXMgd2l0aGluIHRoZSByYW5nZTsgb3RoZXJ3aXNlLCBmYWxzZS5cbiAgICovXG4gIHB1YmxpYyBpblRpbWVSYW5nZSh0aW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lcGlja2VyU2VydmljZS5tYXhWYWxpZGF0aW9uKHRpbWUsIHRoaXMubWF4KSAmJiB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLm1pblZhbGlkYXRpb24odGltZSwgdGhpcy5taW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgbGlzdCBvZiB0aW1lIG9wdGlvbnMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgc3RlcCBpbnRlcnZhbCBhbmQgbG9jYWxlIHNldHRpbmdzIEFNL1BNLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGFycmF5IG9mIHRpbWUgc3RyaW5ncyBpbiAnSEg6bW0nIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGltZVN0YW1wc0xpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBnZW5lcmF0ZVRpbWVTdGFtcHModGhpcy5zdGVwLCB0aGlzLnVzZUxvY2FsZSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgZWxlbWVudC5cbiAgICogUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHZhbHVlIC0gVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHRoaXMudGltZXBpY2tlclNlcnZpY2UuaXNWYWxpZFRpbWUodmFsdWUpKSB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE9wdGlvbkNvbnRyb2w8c3RyaW5nPj4odGhpcy5vcHRpb25zKS53aXRoSG9tZUFuZEVuZCgpO1xuICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uQmFzZWRPbkN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRyb2xsZXJFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtIGFzIFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQ7XG4gICAgYWN0aXZlT3B0aW9uICYmIHRoaXMuc2Nyb2xsVG9BY3RpdmVPcHRpb24oYWN0aXZlT3B0aW9uLCB7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJykge1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNldE9wdGlvbihhY3RpdmVPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHRpbWUpID0+IHRoaXMudXBkYXRlVmFsdWUodGltZSA/PyBudWxsKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRWYWx1ZShlOiBFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlT3B0aW9uQmFzZWRPbkN1cnJlbnRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmlzU2VsZWN0ZWQpO1xuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlT3B0aW9uKGlzU2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2YXRlTmVhcmVzdFRpbWVPcHRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVPcHRpb24ob3B0aW9uOiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyICYmIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgdGhpcy5zY3JvbGxUb0FjdGl2ZU9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZU5lYXJlc3RUaW1lT3B0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgaXNOZWFyZXN0ID0gdGhpcy5maW5kTmVhcmVzdFRpbWVPcHRpb24oY3VycmVudERhdGUpO1xuICAgICAgaWYgKGlzTmVhcmVzdCkge1xuICAgICAgICB0aGlzLmFjdGl2YXRlT3B0aW9uKGlzTmVhcmVzdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmVhcmVzdFRpbWVPcHRpb24oY3VycmVudERhdGU6IERhdGUpOiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdmFpbGFibGVUaW1lU2xvdHMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uZGlzYWJsZWQpO1xuICAgIGNvbnN0IG5lYXJlc3RUaW1lVmFsdWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmZpbmRDbG9zZXN0RGF0ZShcbiAgICAgIGF2YWlsYWJsZVRpbWVTbG90cy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKSBhcyBzdHJpbmdbXSxcbiAgICAgIGAke2N1cnJlbnREYXRlLmdldEhvdXJzKCl9OiR7Y3VycmVudERhdGUuZ2V0TWludXRlcygpfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBhdmFpbGFibGVUaW1lU2xvdHMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IG5lYXJlc3RUaW1lVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlRmllbGQpIHJldHVybjtcbiAgICB0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldExvY2FsaXplZFRpbWVGb3JtYXQodGhpcy52YWx1ZSwgdGhpcy51c2VMb2NhbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZU9wdGlvbihvcHRpb246IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIF9vcHRzOiBTY3JvbGxJbnRvVmlld09wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcpKSB7XG4gICAgICBvcHRpb24uZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInLCAuLi5fb3B0cyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbihvcHRpb24/OiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0TG9jYWxpemVkVGltZUZvcm1hdChvcHRpb24uZ2V0TGFiZWwoKSwgdGhpcy51c2VMb2NhbGUpO1xuICAgIHRoaXMuZGF0ZUZpZWxkICYmICh0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aW1lKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRpbWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX3dyYXBwZXJcIj5cbiAgPGlucHV0IFt2YWx1ZV09XCJ2YWx1ZVwiIG9keFRpbWVwaWNrZXJDb250cm9sIHR5cGU9XCJ0ZXh0XCIgLz5cbjwvZGl2PlxuXG48b2R4LWFjdGlvbi1ncm91cCBjbGFzcz1cIm9keC10aW1lcGlja2VyX190cmlnZ2VyLXdyYXBwZXIgb2R4LW5vLW1hcmdpblwiPlxuICBAaWYgKGNsZWFyYWJsZSgpICYmIHZhbHVlKSB7XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm9keC10aW1lcGlja2VyX19jbGVhclwiIG9keEJ1dHRvbiBzaXplPVwic21hbGxcIiBhcmlhLWxhYmVsPVwiUmVzZXQgdGltZVwiIChjbGljayk9XCJyZXNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDxvZHgtaWNvbiBuYW1lPVwiY2xvc2VcIiBpY29uU2V0PVwiY29yZVwiIC8+XG4gICAgPC9idXR0b24+XG4gIH1cbiAgPGJ1dHRvblxuICAgICNkcm9wZG93blRyaWdnZXJcbiAgICBjbGFzcz1cIm9keC10aW1lcGlja2VyX190cmlnZ2VyXCJcbiAgICBvZHhCdXR0b25cbiAgICBzaXplPVwic21hbGxcIlxuICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgYXJpYS1sYWJlbD1cIlNlbGVjdCB0aW1lXCJcbiAgICBbb2R4RHJvcGRvd25dPVwidGltZUxpc3RcIlxuICAgIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwieyBtYXRjaFJlZmVyZW5jZVdpZHRoOiB0cnVlLCBwb3NpdGlvbjogJ2JvdHRvbS1zdGFydCcgfVwiXG4gICAgW29keERyb3Bkb3duVHJpZ2dlckVsZW1lbnRdPVwiZHJvcGRvd25UcmlnZ2VyLmVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gICAgW29keERyb3Bkb3duUmVmZXJlbmNlRWxlbWVudF09XCJlbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIChvZHhEcm9wZG93bkJlZm9yZUNsb3NlKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAob2R4RHJvcGRvd25BZnRlck9wZW4pPVwib25PcGVuKClcIlxuICA+XG4gICAgPG9keC1pY29uIG5hbWU9XCJjaGV2cm9uLWRvd25cIiAvPlxuICA8L2J1dHRvbj5cbjwvb2R4LWFjdGlvbi1ncm91cD5cblxuPG5nLXRlbXBsYXRlICN0aW1lTGlzdD5cbiAgPGRpdiBjbGFzcz1cIm9keC10aW1lcGlja2VyX19vcHRpb24tbGlzdFwiIHJvbGU9XCJsaXN0Ym94XCI+XG4gICAgQGZvciAodGltZSBvZiB0aW1lU3RhbXBzTGlzdDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8b2R4LXRpbWVwaWNrZXItb3B0aW9uIFt2YWx1ZV09XCJ0aW1lXCIgW2Rpc2FibGVkXT1cIiFpblRpbWVSYW5nZSh0aW1lKVwiIChzZWxlY3RlZCk9XCJ0aW1lU2VsZWN0ZWQoJGV2ZW50KVwiPnt7IHRpbWUgfX08L29keC10aW1lcGlja2VyLW9wdGlvbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFD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IjpbImltcG9ydCB7IEExMXlNb2R1bGUsIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNhYmxlZENvbnRyb2xsZXIsIFJlYWRvbmx5Q29udHJvbGxlciB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBPcHRpb25Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9vcHRpb24tY29udHJvbCc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUsIERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIGlzRnVuY3Rpb24sIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGltZXBpY2tlci1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdGltZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaW1lcGlja2VyU2VydmljZSB9IGZyb20gJy4vdGltZXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRJTUVQSUNLRVJfQ09OVFJPTCB9IGZyb20gJy4vdGltZXBpY2tlci50b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVRpbWVTdGFtcHMgfSBmcm9tICcuL3V0aWxzL2dlbmVyYXRlLXRpbWUtc3RhbXBzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdGltZSBwaWNrZXIgY29tcG9uZW50IGFsbG93aW5nIHVzZXJzIHRvIHNlbGVjdCBhIHRpbWUgZnJvbSBhIGRyb3Bkb3duIGxpc3QuXG4gKiBUaGlzIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhciBmb3JtcyBhbmQgc3VwcG9ydHMgY3VzdG9taXphdGlvbiBmb3IgbG9jYWxlLCB0aW1lIHJhbmdlLCBhbmQgc3RlcCBpbnRlcnZhbHMuXG4gKlxuICogQHNlZSB7Q3VzdG9tRm9ybUNvbnRyb2x9XG4gKi9cbkBDU1NDb21wb25lbnQoJ3RpbWVwaWNrZXInKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LXRpbWVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJ3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBEaXNhYmxlZENvbnRyb2xsZXIuY29ubmVjdCgpLFxuICAgIFJlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogVElNRVBJQ0tFUl9DT05UUk9MLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZXBpY2tlckNvbXBvbmVudCksXG4gICAgfSxcbiAgICBUaW1lcGlja2VyU2VydmljZSxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDdXN0b21Gb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVwaWNrZXJTZXJ2aWNlID0gaW5qZWN0KFRpbWVwaWNrZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdXNlTG9jYWxlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBrZXlNYW5hZ2VyPzogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8T3B0aW9uQ29udHJvbDxzdHJpbmc+PjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICBAVmlld0NoaWxkKERyb3Bkb3duRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24/OiBEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkcmVuKFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIHsgZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6IHRydWUgfSlcbiAgcHJvdGVjdGVkIG9wdGlvbnMhOiBRdWVyeUxpc3Q8VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudD47XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgc2hvdWxkIHVzZSBsb2NhbGUtc3BlY2lmaWMgdGltZSBmb3JtYXRzIEFNL1BNLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IHVzZUxvY2FsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLnVzZUxvY2FsZS5zZXQodmFsKTtcbiAgICB0aGlzLmRhdGVGaWVsZD8uYXBwbHlNYXNrKHZhbCk7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy5kYXRlRmllbGQpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldExvY2FsaXplZFRpbWVGb3JtYXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRpbWUpO1xuICAgICAgdGhpcy5kYXRlRmllbGQubmF0aXZlRWxlbWVudFZhbHVlID0gdGltZTtcbiAgICB9XG4gICAgdGhpcy5fdXNlTG9jYWxlID0gdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9jYWxlIGlzIGJlaW5nIHVzZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBsb2NhbGUgaXMgYmVpbmcgdXNlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdXNlTG9jYWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl91c2VMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHNlbGVjdCB3aWxsIGRpc3BsYXkgYSByZXNldCBidXR0b24uXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIGNsZWFyYWJsZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHN0ZXAgaW50ZXJ2YWwgYmV0d2VlbiB0aW1lIG9wdGlvbnMgaW4gbWludXRlcy5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMzBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzdGVwID0gMzA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWluaW11bSB0aW1lIHZhbHVlIHRoYXQgY2FuIGJlIHNlbGVjdGVkICgnMDU6MDAnIG9yICcwNTowMCBBTScpLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnMDA6MDAnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluID0gJzAwOjAwJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHRpbWUgdmFsdWUgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgKCcyMjowMCcgb3IgJzEwOjAwIFBNJykuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcyMzo1OSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXggPSAnMjM6NTknO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aXZlIGZvciB0aGUgdGltZXBpY2tlciBpbnB1dCBjb250cm9sLlxuICAgKlxuICAgKiBAdHlwZSB7VGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBWaWV3Q2hpbGQoVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSlcbiAgcHVibGljIGRhdGVGaWVsZD86IFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRGF0ZUZpZWxkQ2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdGltZSBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudH0gb3B0aW9uIC0gVGhlIHRpbWUgb3B0aW9uIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNUaW1lT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBzZWxlY3Rpb24gb2YgYSB0aW1lIG9wdGlvbiBmcm9tIHRoZSBkcm9wZG93biwgdXBkYXRpbmcgdGhlIGlucHV0IGZpZWxkIGFuZCBjbG9zaW5nIHRoZSBkcm9wZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50IHwgdW5kZWZpbmVkfSBvcHRpb24gLSBUaGUgc2VsZWN0ZWQgdGltZSBvcHRpb24gY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHRpbWVTZWxlY3RlZChvcHRpb24/OiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZXRPcHRpb24ob3B0aW9uKTtcbiAgICB0aGlzLmRyb3Bkb3duPy5pc09wZW4gJiYgdGhpcy5kcm9wZG93bj8uY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0aW1lIGlzIHdpdGhpbiB0aGUgYWxsb3dlZCB0aW1lIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZSAtIFRoZSB0aW1lIHRvIGNoZWNrLCBpbiAnSEg6bW0nIG9yICdISDptbSBBTS9QTScgZm9ybWF0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gdGhlIHJhbmdlOyBvdGhlcndpc2UsIGZhbHNlLlxuICAgKi9cbiAgcHVibGljIGluVGltZVJhbmdlKHRpbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLm1heFZhbGlkYXRpb24odGltZSwgdGhpcy5tYXgpICYmIHRoaXMudGltZXBpY2tlclNlcnZpY2UubWluVmFsaWRhdGlvbih0aW1lLCB0aGlzLm1pbik7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBzdGVwIGludGVydmFsIGFuZCBsb2NhbGUgc2V0dGluZ3MgQU0vUE0uXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgdGltZSBzdHJpbmdzIGluICdISDptbScgZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIGdldCB0aW1lU3RhbXBzTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlVGltZVN0YW1wcyh0aGlzLnN0ZXAsIHRoaXMudXNlTG9jYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBlbGVtZW50LlxuICAgKiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdGhpcy50aW1lcGlja2VyU2VydmljZS5pc1ZhbGlkVGltZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE9wdGlvbkNvbnRyb2w8c3RyaW5nPj4odGhpcy5vcHRpb25zKS53aXRoSG9tZUFuZEVuZCgpO1xuICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uQmFzZWRPbkN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRyb2xsZXJFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtIGFzIFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQ7XG4gICAgYWN0aXZlT3B0aW9uICYmIHRoaXMuc2Nyb2xsVG9BY3RpdmVPcHRpb24oYWN0aXZlT3B0aW9uLCB7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJykge1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNldE9wdGlvbihhY3RpdmVPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZpZWxkPy5hcHBseU1hc2sodGhpcy51c2VMb2NhbGUpO1xuICAgIHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHRpbWUpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0eXBlb2YgdGltZSA9PT0gJ3N0cmluZycgPyB0aW1lLnRyaW0oKSA6ICcnO1xuICAgICAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmlzMTJIb3VyRm9ybWF0KG5vcm1hbGl6ZWQpID09PSB0aGlzLl91c2VMb2NhbGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldExvY2FsaXplZFRpbWVGb3JtYXQobm9ybWFsaXplZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0VmFsdWUoZTogRXZlbnQpOiB2b2lkIHtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZU9wdGlvbkJhc2VkT25DdXJyZW50VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5pc1NlbGVjdGVkKTtcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU9wdGlvbihpc1NlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmF0ZU5lYXJlc3RUaW1lT3B0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlT3B0aW9uKG9wdGlvbjogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5TWFuYWdlciAmJiB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShvcHRpb24pO1xuICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVOZWFyZXN0VGltZU9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzTmVhcmVzdCA9IHRoaXMuZmluZE5lYXJlc3RUaW1lT3B0aW9uKGN1cnJlbnREYXRlKTtcbiAgICAgIGlmIChpc05lYXJlc3QpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZU9wdGlvbihpc05lYXJlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZE5lYXJlc3RUaW1lT3B0aW9uKGN1cnJlbnREYXRlOiBEYXRlKTogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXZhaWxhYmxlVGltZVNsb3RzID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmRpc2FibGVkKTtcbiAgICBjb25zdCBuZWFyZXN0VGltZVZhbHVlID0gdGhpcy50aW1lcGlja2VyU2VydmljZS5maW5kQ2xvc2VzdERhdGUoXG4gICAgICBhdmFpbGFibGVUaW1lU2xvdHMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSkgYXMgc3RyaW5nW10sXG4gICAgICBgJHtjdXJyZW50RGF0ZS5nZXRIb3VycygpfToke2N1cnJlbnREYXRlLmdldE1pbnV0ZXMoKX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlVGltZVNsb3RzLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBuZWFyZXN0VGltZVZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5wdXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpZWxkKSByZXR1cm47XG4gICAgdGhpcy5kYXRlRmllbGQubmF0aXZlRWxlbWVudFZhbHVlID0gdGhpcy50aW1lcGlja2VyU2VydmljZS5nZXRMb2NhbGl6ZWRUaW1lRm9ybWF0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZU9wdGlvbihvcHRpb246IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIF9vcHRzOiBTY3JvbGxJbnRvVmlld09wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcpKSB7XG4gICAgICBvcHRpb24uZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInLCAuLi5fb3B0cyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbihvcHRpb24/OiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0TG9jYWxpemVkVGltZUZvcm1hdChvcHRpb24uZ2V0TGFiZWwoKSk7XG4gICAgdGhpcy5kYXRlRmllbGQgJiYgKHRoaXMuZGF0ZUZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IHRpbWUpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGltZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvZHgtdGltZXBpY2tlcl9fd3JhcHBlclwiPlxuICA8aW5wdXQgW3ZhbHVlXT1cInZhbHVlXCIgb2R4VGltZXBpY2tlckNvbnRyb2wgdHlwZT1cInRleHRcIiAvPlxuPC9kaXY+XG5cbjxvZHgtYWN0aW9uLWdyb3VwIGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX3RyaWdnZXItd3JhcHBlciBvZHgtbm8tbWFyZ2luXCI+XG4gIEBpZiAoY2xlYXJhYmxlKCkgJiYgdmFsdWUpIHtcbiAgICA8YnV0dG9uIGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX2NsZWFyXCIgb2R4QnV0dG9uIHNpemU9XCJzbWFsbFwiIGFyaWEtbGFiZWw9XCJSZXNldCB0aW1lXCIgKGNsaWNrKT1cInJlc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPG9keC1pY29uIG5hbWU9XCJjbG9zZVwiIGljb25TZXQ9XCJjb3JlXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgfVxuICA8YnV0dG9uXG4gICAgI2Ryb3Bkb3duVHJpZ2dlclxuICAgIGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX3RyaWdnZXJcIlxuICAgIG9keEJ1dHRvblxuICAgIHNpemU9XCJzbWFsbFwiXG4gICAgdmFyaWFudD1cImdob3N0XCJcbiAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHRpbWVcIlxuICAgIFtvZHhEcm9wZG93bl09XCJ0aW1lTGlzdFwiXG4gICAgW29keERyb3Bkb3duT3B0aW9uc109XCJ7IG1hdGNoUmVmZXJlbmNlV2lkdGg6IHRydWUsIHBvc2l0aW9uOiAnYm90dG9tLXN0YXJ0JyB9XCJcbiAgICBbb2R4RHJvcGRvd25UcmlnZ2VyRWxlbWVudF09XCJkcm9wZG93blRyaWdnZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50XCJcbiAgICBbb2R4RHJvcGRvd25SZWZlcmVuY2VFbGVtZW50XT1cImVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gICAgKG9keERyb3Bkb3duQmVmb3JlQ2xvc2UpPVwib25Ub3VjaGVkKClcIlxuICAgIChvZHhEcm9wZG93bkFmdGVyT3Blbik9XCJvbk9wZW4oKVwiXG4gID5cbiAgICA8b2R4LWljb24gbmFtZT1cImNoZXZyb24tZG93blwiIC8+XG4gIDwvYnV0dG9uPlxuPC9vZHgtYWN0aW9uLWdyb3VwPlxuXG48bmctdGVtcGxhdGUgI3RpbWVMaXN0PlxuICA8ZGl2IGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX29wdGlvbi1saXN0XCIgcm9sZT1cImxpc3Rib3hcIj5cbiAgICBAZm9yICh0aW1lIG9mIHRpbWVTdGFtcHNMaXN0OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxvZHgtdGltZXBpY2tlci1vcHRpb24gW3ZhbHVlXT1cInRpbWVcIiBbZGlzYWJsZWRdPVwiIWluVGltZVJhbmdlKHRpbWUpXCIgKHNlbGVjdGVkKT1cInRpbWVTZWxlY3RlZCgkZXZlbnQpXCI+e3sgdGltZSB9fTwvb2R4LXRpbWVwaWNrZXItb3B0aW9uPlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
1
|
+
import { Injectable, inject, signal } from '@angular/core';
|
|
2
2
|
import { WindowRef } from '@odx/angular';
|
|
3
3
|
import { isAfter, isBefore, isEqual } from 'date-fns';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -9,14 +9,13 @@ import * as i0 from "@angular/core";
|
|
|
9
9
|
export class TimepickerService {
|
|
10
10
|
constructor() {
|
|
11
11
|
this.windowRef = inject(WindowRef);
|
|
12
|
+
this.useLocale = signal(false);
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* @param {boolean} [apm=false] - Specifies if the placeholder should include AM/PM notation.
|
|
17
|
-
* @returns {string} The placeholder string.
|
|
15
|
+
* @deprecated Will be removed in a future major version. Use `useLocale` signal instead.
|
|
16
|
+
* Generates a placeholder string for time input fields, preserving legacy API.
|
|
18
17
|
*/
|
|
19
|
-
getPlaceholder(apm =
|
|
18
|
+
getPlaceholder(apm = this.useLocale()) {
|
|
20
19
|
return apm ? '--:-- --' : '--:--';
|
|
21
20
|
}
|
|
22
21
|
/**
|
|
@@ -38,11 +37,15 @@ export class TimepickerService {
|
|
|
38
37
|
* @returns {time is string} True if the value is a valid time string, false otherwise.
|
|
39
38
|
*/
|
|
40
39
|
isValidTime(time) {
|
|
41
|
-
if (
|
|
40
|
+
if (typeof time !== 'string')
|
|
41
|
+
return false;
|
|
42
|
+
const trimmedTime = time.trim();
|
|
43
|
+
if (!trimmedTime)
|
|
42
44
|
return false;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
return Boolean(this.parseTimeString(trimmedTime.toUpperCase()));
|
|
46
|
+
}
|
|
47
|
+
is12HourFormat(value) {
|
|
48
|
+
return this.isValidTime(value) && !!this.parseTimeString(value.toUpperCase())?.hour12;
|
|
46
49
|
}
|
|
47
50
|
/**
|
|
48
51
|
* Validates if the given time is greater than or equal to a minimum time constraint.
|
|
@@ -83,19 +86,43 @@ export class TimepickerService {
|
|
|
83
86
|
* @param {boolean} [hour12=false] - Specifies if the output should use 12-hour format with AM/PM notation.
|
|
84
87
|
* @returns {string} The formatted time string, or an empty string if the input time is invalid.
|
|
85
88
|
*/
|
|
86
|
-
getLocalizedTimeFormat(time, hour12
|
|
89
|
+
getLocalizedTimeFormat(time, hour12) {
|
|
87
90
|
if (!this.isValidTime(time))
|
|
88
91
|
return '';
|
|
89
|
-
const
|
|
92
|
+
const shouldUseHour12 = typeof hour12 === 'boolean' ? hour12 : this.useLocale();
|
|
93
|
+
const locale = shouldUseHour12 ? 'en-US' : 'en-GB';
|
|
90
94
|
const [date] = this.convertToDates([time]);
|
|
91
95
|
return new this.windowRef.nativeWindow.Intl.DateTimeFormat(locale, {
|
|
92
96
|
hour: '2-digit',
|
|
93
97
|
minute: '2-digit',
|
|
94
|
-
hour12,
|
|
98
|
+
hour12: shouldUseHour12,
|
|
95
99
|
}).format(date);
|
|
96
100
|
}
|
|
97
101
|
convertToDates(times) {
|
|
98
|
-
return times.map((time) =>
|
|
102
|
+
return times.map((time) => {
|
|
103
|
+
if (typeof time !== 'string')
|
|
104
|
+
return new Date(NaN);
|
|
105
|
+
const parsed = this.parseTimeString(time.toUpperCase());
|
|
106
|
+
if (!parsed)
|
|
107
|
+
return new Date(NaN);
|
|
108
|
+
const { hours, minutes } = parsed;
|
|
109
|
+
return new Date(2022, 11, 19, hours, minutes, 0, 0);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
parseTimeString(time) {
|
|
113
|
+
const match = time.trim().match(/^([01]?\d|2[0-3]):([0-5]\d)(?:\s?(AM|PM))?$/);
|
|
114
|
+
if (!match)
|
|
115
|
+
return null;
|
|
116
|
+
let hours = Number(match[1]);
|
|
117
|
+
const minutes = Number(match[2]);
|
|
118
|
+
const period = match[3]?.toUpperCase();
|
|
119
|
+
if (period) {
|
|
120
|
+
if (period === 'PM' && hours < 12)
|
|
121
|
+
hours += 12;
|
|
122
|
+
if (period === 'AM' && hours === 12)
|
|
123
|
+
hours = 0;
|
|
124
|
+
}
|
|
125
|
+
return { hours, minutes, hour12: Boolean(period) };
|
|
99
126
|
}
|
|
100
127
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimepickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
101
128
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimepickerService, providedIn: 'root' }); }
|
|
@@ -104,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
104
131
|
type: Injectable,
|
|
105
132
|
args: [{ providedIn: 'root' }]
|
|
106
133
|
}] });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGltZXBpY2tlci9zcmMvbGliL3RpbWVwaWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFdEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVtQixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBK0ZoRDtJQTdGQzs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxHQUFHLEdBQUcsS0FBSztRQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUM1QyxNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxPQUFPLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVyxDQUFDLElBQWE7UUFDOUIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsK0NBQStDO1FBQy9DLE1BQU0s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VSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURKLE1BQU07OzRGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNBZnRlciwgaXNCZWZvcmUsIGlzRXF1YWwgfSBmcm9tICdkYXRlLWZucyc7XG5cbi8qKlxuICogU2VydmljZSB0byBwcm92aWRlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aW1lcGlja2VyIGNvbXBvbmVudHMsIGluY2x1ZGluZyB2YWxpZGF0aW9uLCBwbGFjZWhvbGRlciBnZW5lcmF0aW9uLCBhbmQgZmluZGluZyB0aGUgY2xvc2VzdCB0aW1lLlxuICogSXQgYWxzbyBoYW5kbGVzIGxvY2FsZS1iYXNlZCB0aW1lIGZvcm1hdHRpbmcuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGltZXBpY2tlclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBwbGFjZWhvbGRlciBzdHJpbmcgZm9yIHRpbWUgaW5wdXQgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcG09ZmFsc2VdIC0gU3BlY2lmaWVzIGlmIHRoZSBwbGFjZWhvbGRlciBzaG91bGQgaW5jbHVkZSBBTS9QTSBub3RhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHBsYWNlaG9sZGVyIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBnZXRQbGFjZWhvbGRlcihhcG0gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwbSA/ICctLTotLSAtLScgOiAnLS06LS0nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYSBtYXhpbXVtIHRpbWUgY29uc3RyYWludC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWUgLSBUaGUgdGltZSB0byB2YWxpZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1heCAtIFRoZSBtYXhpbXVtIGFsbG93YWJsZSB0aW1lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGltZSBpcyB2YWxpZCAoaS5lLiwgbm90IGFmdGVyIG1heCksIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBtYXhWYWxpZGF0aW9uKHRpbWU6IHN0cmluZywgbWF4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBbdGFyZ2V0VmFsdWUsIG1heFZhbHVlXSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RpbWUsIG1heF0pO1xuICAgIHJldHVybiBpc0JlZm9yZSh0YXJnZXRWYWx1ZSwgbWF4VmFsdWUpIHx8IGlzRXF1YWwodGFyZ2V0VmFsdWUsIG1heFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgdmFsaWQgdGltZSBzdHJpbmcgaW4gSEg6bW0gb3IgSEg6bW0gQU0vUE0gZm9ybWF0LlxuICAgKiBUaGlzIG1ldGhvZCBhbHNvIGFjdHMgYXMgYSB0eXBlIGd1YXJkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHRpbWUgLSBUaGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHt0aW1lIGlzIHN0cmluZ30gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCB0aW1lIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzVmFsaWRUaW1lKHRpbWU6IHVua25vd24pOiB0aW1lIGlzIHN0cmluZyB7XG4gICAgaWYgKCF0aW1lIHx8IHR5cGVvZiB0aW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIE1hdGNoZXMgXCJISDptbVwiICgyNGgpIG9yIFwiSEg6bW0gQU0vUE1cIiAoMTJoKVxuICAgIGNvbnN0IHJlZ2V4ID0gL14oWzAxXVxcZHwyWzAtM10pOihbMC01XVxcZCkoXFxzPyhBTXxQTXxhbXxwbSkpPyQvO1xuICAgIHJldHVybiByZWdleC50ZXN0KHRpbWUudHJpbSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgaWYgdGhlIGdpdmVuIHRpbWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGEgbWluaW11bSB0aW1lIGNvbnN0cmFpbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lIC0gVGhlIHRpbWUgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtaW4gLSBUaGUgbWluaW11bSBhbGxvd2FibGUgdGltZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWUgaXMgdmFsaWQgKGkuZS4sIG5vdCBiZWZvcmUgbWluKSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIG1pblZhbGlkYXRpb24odGltZTogc3RyaW5nLCBtaW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFt0YXJnZXRWYWx1ZSwgbWluVmFsdWVdID0gdGhpcy5jb252ZXJ0VG9EYXRlcyhbdGltZSwgbWluXSk7XG4gICAgcmV0dXJuIGlzQWZ0ZXIodGFyZ2V0VmFsdWUsIG1pblZhbHVlKSB8fCBpc0VxdWFsKHRhcmdldFZhbHVlLCBtaW5WYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGNsb3Nlc3QgdGltZSB0byBhIHRhcmdldCB0aW1lIGZyb20gYSBsaXN0IG9mIHRpbWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB0aW1lU3RhbXBzIC0gVGhlIGxpc3Qgb2YgdGltZSBzdHJpbmdzIHRvIHNlYXJjaCB0aHJvdWdoIChlLmcuLCBbXCIxMDowMFwiLCBcIjEwOjMwXCIsIFwiMTE6MDBcIl0pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0VGltZSAtIFRoZSB0YXJnZXQgdGltZSBzdHJpbmcgdG8gZmluZCB0aGUgY2xvc2VzdCBtYXRjaCBmb3IgKGUuZy4sIFwiMTA6MzVcIikuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjbG9zZXN0IHRpbWUgc3RyaW5nIGZyb20gdGhlIGxpc3QgdG8gdGhlIHRhcmdldCwgZm9ybWF0dGVkIGFjY29yZGluZyB0byBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZmluZENsb3Nlc3REYXRlKHRpbWVTdGFtcHM6IHN0cmluZ1tdLCB0YXJnZXRUaW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IFt0YXJnZXRdID0gdGhpcy5jb252ZXJ0VG9EYXRlcyhbdGFyZ2V0VGltZV0pO1xuICAgIGNvbnN0IGRhdGVzQXJyYXkgPSB0aGlzLmNvbnZlcnRUb0RhdGVzKHRpbWVTdGFtcHMpO1xuXG4gICAgaWYgKGRhdGVzQXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5nZXRMb2NhbGl6ZWRUaW1lRm9ybWF0KHRhcmdldFRpbWUpO1xuXG4gICAgY29uc3QgY2xvc2VzdERhdGUgPSBkYXRlc0FycmF5LnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgcHJldkRpZmYgPSBNYXRoLmFicyhwcmV2LmdldFRpbWUoKSAtIHRhcmdldC5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgY3VyckRpZmYgPSBNYXRoLmFicyhjdXJyLmdldFRpbWUoKSAtIHRhcmdldC5nZXRUaW1lKCkpO1xuICAgICAgcmV0dXJuIGN1cnJEaWZmIDwgcHJldkRpZmYgPyBjdXJyIDogcHJldjtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhvdXJzID0gY2xvc2VzdERhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbWludXRlcyA9IGNsb3Nlc3REYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkVGltZUZvcm1hdChgJHtob3Vyc306JHttaW51dGVzfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSB0aW1lIHN0cmluZyB0byBhIGxvY2FsaXplZCB0aW1lIGZvcm1hdCB1c2luZyBJbnRsLkRhdGVUaW1lRm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHRpbWUgLSBUaGUgdGltZSBzdHJpbmcgdG8gZm9ybWF0IChlLmcuLCBcIjE0OjMwXCIpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3VyMTI9ZmFsc2VdIC0gU3BlY2lmaWVzIGlmIHRoZSBvdXRwdXQgc2hvdWxkIHVzZSAxMi1ob3VyIGZvcm1hdCB3aXRoIEFNL1BNIG5vdGF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IHRpbWUgaXMgaW52YWxpZC5cbiAgICovXG4gIHB1YmxpYyBnZXRMb2NhbGl6ZWRUaW1lRm9ybWF0KHRpbWU6IHVua25vd24sIGhvdXIxMiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFRpbWUodGltZSkpIHJldHVybiAnJztcbiAgICBjb25zdCBsb2NhbGUgPSBob3VyMTIgPyAnZW4tVVMnIDogJ2VuLUdCJztcbiAgICBjb25zdCBbZGF0ZV0gPSB0aGlzLmNvbnZlcnRUb0RhdGVzKFt0aW1lXSk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgaG91cjEyLFxuICAgIH0pLmZvcm1hdChkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRGF0ZXModGltZXM6IHN0cmluZ1tdKTogRGF0ZVtdIHtcbiAgICByZXR1cm4gdGltZXMubWFwKCh0aW1lKSA9PiBuZXcgRGF0ZShgJHt0aW1lfSAyMDIyLTEyLTE5YCkpO1xuICB9XG59XG4iXX0=
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGltZXBpY2tlci9zcmMvbGliL3RpbWVwaWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRXREOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFbUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4QyxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBd0hsQztJQXRIQzs7O09BR0c7SUFDSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDNUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakUsT0FBTyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxJQUFhO1FBQzlCLElBQUksT0FBTyxJQUFJLEtBQUss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QUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRXZDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7Z0JBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3JELENBQUM7K0dBMUhVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IGlzQWZ0ZXIsIGlzQmVmb3JlLCBpc0VxdWFsIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gcHJvdmlkZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGltZXBpY2tlciBjb21wb25lbnRzLCBpbmNsdWRpbmcgdmFsaWRhdGlvbiwgcGxhY2Vob2xkZXIgZ2VuZXJhdGlvbiwgYW5kIGZpbmRpbmcgdGhlIGNsb3Nlc3QgdGltZS5cbiAqIEl0IGFsc28gaGFuZGxlcyBsb2NhbGUtYmFzZWQgdGltZSBmb3JtYXR0aW5nLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcblxuICBwdWJsaWMgdXNlTG9jYWxlID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24uIFVzZSBgdXNlTG9jYWxlYCBzaWduYWwgaW5zdGVhZC5cbiAgICogR2VuZXJhdGVzIGEgcGxhY2Vob2xkZXIgc3RyaW5nIGZvciB0aW1lIGlucHV0IGZpZWxkcywgcHJlc2VydmluZyBsZWdhY3kgQVBJLlxuICAgKi9cbiAgcHVibGljIGdldFBsYWNlaG9sZGVyKGFwbSA9IHRoaXMudXNlTG9jYWxlKCkpOiBzdHJpbmcge1xuICAgIHJldHVybiBhcG0gPyAnLS06LS0gLS0nIDogJy0tOi0tJztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgaWYgdGhlIGdpdmVuIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEgbWF4aW11bSB0aW1lIGNvbnN0cmFpbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lIC0gVGhlIHRpbWUgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXggLSBUaGUgbWF4aW11bSBhbGxvd2FibGUgdGltZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWUgaXMgdmFsaWQgKGkuZS4sIG5vdCBhZnRlciBtYXgpLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgbWF4VmFsaWRhdGlvbih0aW1lOiBzdHJpbmcsIG1heDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3RhcmdldFZhbHVlLCBtYXhWYWx1ZV0gPSB0aGlzLmNvbnZlcnRUb0RhdGVzKFt0aW1lLCBtYXhdKTtcbiAgICByZXR1cm4gaXNCZWZvcmUodGFyZ2V0VmFsdWUsIG1heFZhbHVlKSB8fCBpc0VxdWFsKHRhcmdldFZhbHVlLCBtYXhWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIHZhbGlkIHRpbWUgc3RyaW5nIGluIEhIOm1tIG9yIEhIOm1tIEFNL1BNIGZvcm1hdC5cbiAgICogVGhpcyBtZXRob2QgYWxzbyBhY3RzIGFzIGEgdHlwZSBndWFyZC5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSB0aW1lIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7dGltZSBpcyBzdHJpbmd9IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgdGltZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkVGltZSh0aW1lOiB1bmtub3duKTogdGltZSBpcyBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdGltZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0cmltbWVkVGltZSA9IHRpbWUudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZFRpbWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcnNlVGltZVN0cmluZyh0cmltbWVkVGltZS50b1VwcGVyQ2FzZSgpKSk7XG4gIH1cblxuICBwdWJsaWMgaXMxMkhvdXJGb3JtYXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRUaW1lKHZhbHVlKSAmJiAhIXRoaXMucGFyc2VUaW1lU3RyaW5nKHZhbHVlLnRvVXBwZXJDYXNlKCkpPy5ob3VyMTI7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBnaXZlbiB0aW1lIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhIG1pbmltdW0gdGltZSBjb25zdHJhaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZSAtIFRoZSB0aW1lIHRvIHZhbGlkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWluIC0gVGhlIG1pbmltdW0gYWxsb3dhYmxlIHRpbWUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB0aW1lIGlzIHZhbGlkIChpLmUuLCBub3QgYmVmb3JlIG1pbiksIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBtaW5WYWxpZGF0aW9uKHRpbWU6IHN0cmluZywgbWluOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBbdGFyZ2V0VmFsdWUsIG1pblZhbHVlXSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RpbWUsIG1pbl0pO1xuICAgIHJldHVybiBpc0FmdGVyKHRhcmdldFZhbHVlLCBtaW5WYWx1ZSkgfHwgaXNFcXVhbCh0YXJnZXRWYWx1ZSwgbWluVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjbG9zZXN0IHRpbWUgdG8gYSB0YXJnZXQgdGltZSBmcm9tIGEgbGlzdCBvZiB0aW1lcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdGltZVN0YW1wcyAtIFRoZSBsaXN0IG9mIHRpbWUgc3RyaW5ncyB0byBzZWFyY2ggdGhyb3VnaCAoZS5nLiwgW1wiMTA6MDBcIiwgXCIxMDozMFwiLCBcIjExOjAwXCJdKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFRpbWUgLSBUaGUgdGFyZ2V0IHRpbWUgc3RyaW5nIHRvIGZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2ggZm9yIChlLmcuLCBcIjEwOjM1XCIpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzdCB0aW1lIHN0cmluZyBmcm9tIHRoZSBsaXN0IHRvIHRoZSB0YXJnZXQsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gbG9jYWxlLlxuICAgKi9cbiAgcHVibGljIGZpbmRDbG9zZXN0RGF0ZSh0aW1lU3RhbXBzOiBzdHJpbmdbXSwgdGFyZ2V0VGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBbdGFyZ2V0XSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RhcmdldFRpbWVdKTtcbiAgICBjb25zdCBkYXRlc0FycmF5ID0gdGhpcy5jb252ZXJ0VG9EYXRlcyh0aW1lU3RhbXBzKTtcblxuICAgIGlmIChkYXRlc0FycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkVGltZUZvcm1hdCh0YXJnZXRUaW1lKTtcblxuICAgIGNvbnN0IGNsb3Nlc3REYXRlID0gZGF0ZXNBcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IHByZXZEaWZmID0gTWF0aC5hYnMocHJldi5nZXRUaW1lKCkgLSB0YXJnZXQuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IGN1cnJEaWZmID0gTWF0aC5hYnMoY3Vyci5nZXRUaW1lKCkgLSB0YXJnZXQuZ2V0VGltZSgpKTtcbiAgICAgIHJldHVybiBjdXJyRGlmZiA8IHByZXZEaWZmID8gY3VyciA6IHByZXY7XG4gICAgfSk7XG5cbiAgICBjb25zdCBob3VycyA9IGNsb3Nlc3REYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBjbG9zZXN0RGF0ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXplZFRpbWVGb3JtYXQoYCR7aG91cnN9OiR7bWludXRlc31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgdGltZSBzdHJpbmcgdG8gYSBsb2NhbGl6ZWQgdGltZSBmb3JtYXQgdXNpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSB0aW1lIC0gVGhlIHRpbWUgc3RyaW5nIHRvIGZvcm1hdCAoZS5nLiwgXCIxNDozMFwiKS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG91cjEyPWZhbHNlXSAtIFNwZWNpZmllcyBpZiB0aGUgb3V0cHV0IHNob3VsZCB1c2UgMTItaG91ciBmb3JtYXQgd2l0aCBBTS9QTSBub3RhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB0aW1lIHN0cmluZywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBpbnB1dCB0aW1lIGlzIGludmFsaWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxpemVkVGltZUZvcm1hdCh0aW1lOiB1bmtub3duLCBob3VyMTI/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFRpbWUodGltZSkpIHJldHVybiAnJztcbiAgICBjb25zdCBzaG91bGRVc2VIb3VyMTIgPSB0eXBlb2YgaG91cjEyID09PSAnYm9vbGVhbicgPyBob3VyMTIgOiB0aGlzLnVzZUxvY2FsZSgpO1xuICAgIGNvbnN0IGxvY2FsZSA9IHNob3VsZFVzZUhvdXIxMiA/ICdlbi1VUycgOiAnZW4tR0InO1xuICAgIGNvbnN0IFtkYXRlXSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RpbWVdKTtcbiAgICByZXR1cm4gbmV3IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5JbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBob3VyMTI6IHNob3VsZFVzZUhvdXIxMixcbiAgICB9KS5mb3JtYXQoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0RhdGVzKHRpbWVzOiBzdHJpbmdbXSk6IERhdGVbXSB7XG4gICAgcmV0dXJuIHRpbWVzLm1hcCgodGltZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlVGltZVN0cmluZyh0aW1lLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgY29uc3QgeyBob3VycywgbWludXRlcyB9ID0gcGFyc2VkO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKDIwMjIsIDExLCAxOSwgaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRpbWVTdHJpbmcodGltZTogc3RyaW5nKTogeyBob3VyczogbnVtYmVyOyBtaW51dGVzOiBudW1iZXI7IGhvdXIxMjogYm9vbGVhbiB9IHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSB0aW1lLnRyaW0oKS5tYXRjaCgvXihbMDFdP1xcZHwyWzAtM10pOihbMC01XVxcZCkoPzpcXHM/KEFNfFBNKSk/JC8pO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGhvdXJzID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1hdGNoWzJdKTtcbiAgICBjb25zdCBwZXJpb2QgPSBtYXRjaFszXT8udG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChwZXJpb2QpIHtcbiAgICAgIGlmIChwZXJpb2QgPT09ICdQTScgJiYgaG91cnMgPCAxMikgaG91cnMgKz0gMTI7XG4gICAgICBpZiAocGVyaW9kID09PSAnQU0nICYmIGhvdXJzID09PSAxMikgaG91cnMgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGhvdXJzLCBtaW51dGVzLCBob3VyMTI6IEJvb2xlYW4ocGVyaW9kKSB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { createConfigTokens } from '@odx/angular/utils';
|
|
1
|
+
import { createConfigTokens, isFunction } from '@odx/angular/utils';
|
|
2
2
|
import { toDate, isValid } from 'date-fns';
|
|
3
|
+
import { initialConfig } from 'ngx-mask';
|
|
3
4
|
|
|
4
5
|
const InputDateOrder = {
|
|
5
6
|
DMY: 'DMY',
|
|
@@ -94,9 +95,29 @@ function getDateInputValueAsDate(config, value) {
|
|
|
94
95
|
return isValid(date) ? date : null;
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
function initNgxMask(ngxMask = undefined, mask) {
|
|
99
|
+
if (!ngxMask)
|
|
100
|
+
return;
|
|
101
|
+
if (!Object.hasOwn(ngxMask, '_maskValue')) {
|
|
102
|
+
throw new Error('[DatepickerInputControlDirective] initNgxMask: ngx-mask internal API changed, mask signal not available.');
|
|
103
|
+
}
|
|
104
|
+
const maskSignal = ngxMask['_maskValue'];
|
|
105
|
+
isFunction(maskSignal.set) && maskSignal.set(mask);
|
|
106
|
+
ngxMask._maskService.maskExpression = mask;
|
|
107
|
+
}
|
|
108
|
+
const ngxMaskProviderConfig = {
|
|
109
|
+
validation: false,
|
|
110
|
+
leadZeroDateTime: true,
|
|
111
|
+
patterns: {
|
|
112
|
+
...initialConfig.patterns,
|
|
113
|
+
A: { pattern: new RegExp('[AaPp]') },
|
|
114
|
+
M: { pattern: new RegExp('[mM]') },
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
|
|
97
118
|
/**
|
|
98
119
|
* Generated bundle index. Do not edit.
|
|
99
120
|
*/
|
|
100
121
|
|
|
101
|
-
export { DateConfig, DateDefaultConfig, DateInputFormat, DateInputMask, InputDateOrder, getDateInputFormat, getDateInputMask, getDateInputValueAsDate, injectDateConfig, provideDateConfig };
|
|
122
|
+
export { DateConfig, DateDefaultConfig, DateInputFormat, DateInputMask, InputDateOrder, getDateInputFormat, getDateInputMask, getDateInputValueAsDate, initNgxMask, injectDateConfig, ngxMaskProviderConfig, provideDateConfig };
|
|
102
123
|
//# sourceMappingURL=odx-angular-cdk-date-input.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-cdk-date-input.mjs","sources":["../../../../libs/angular/cdk/date-input/src/lib/models/input-date-order.ts","../../../../libs/angular/cdk/date-input/src/lib/date.config.ts","../../../../libs/angular/cdk/date-input/src/lib/utils/get-date-input-pattern.ts","../../../../libs/angular/cdk/date-input/src/lib/utils/get-input-value-as-date.ts","../../../../libs/angular/cdk/date-input/src/odx-angular-cdk-date-input.ts"],"sourcesContent":["export type InputDateOrder = (typeof InputDateOrder)[keyof typeof InputDateOrder];\n\nexport const InputDateOrder = {\n DMY: 'DMY',\n MDY: 'MDY',\n YMD: 'YMD',\n};\n\nexport type DateInputPattern = typeof DateInputFormat | typeof DateInputMask;\n\nexport const DateInputFormat = {\n DAYS: 'dd',\n MONTH: 'MM',\n YEAR: 'yyyy',\n};\n\nexport const DateInputMask = {\n DAYS: 'd0',\n MONTH: 'M0',\n YEAR: '0000',\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { InputDateOrder } from './models/input-date-order';\n\nexport interface DateConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default InputDateOrder.DMY\n */\n inputDateOrder: InputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\n/**\n * Tools for injecting and providing the date configuration with default configuration for the date.\n *\n * @example\n * // Providing custom date configuration.\n * ```ts\n * @Component({\n * providers: [provideDateConfig({ inputDateOrder: InputDateOrder.MDY, inputDateSeparator: '/'})]\n * })\n * export class MyComponent {}\n *\n * // Injecting the date configuration.\n * ```ts\n * @Component({})\n * export class MyComponent {\n * constructor(@Inject(injectDateConfig()) private readonly dateConfig: DateConfig) {}\n * }\n * ```\n */\nexport const { DateConfig, DateDefaultConfig, injectDateConfig, provideDateConfig } = createConfigTokens('Date', '@odx/angular/components/date', {\n inputDateOrder: InputDateOrder.DMY,\n inputDateSeparator: '.',\n});\n","import { DateConfig } from '../date.config';\nimport { DateInputFormat, DateInputMask, DateInputPattern, InputDateOrder } from '../models/input-date-order';\n\nfunction getDateInputPattern({ inputDateOrder, inputDateSeparator }: DateConfig, pattern: DateInputPattern): string {\n const patternList: Record<InputDateOrder, string> = {\n [InputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [InputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [InputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\n/** @internal */\nexport function getDateInputFormat(config: DateConfig): string {\n return getDateInputPattern(config, DateInputFormat);\n}\n\n/** @internal */\nexport function getDateInputMask(config: DateConfig): string {\n return getDateInputPattern(config, DateInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DateConfig } from '../date.config';\nimport { DateInputFormat, InputDateOrder } from '../models/input-date-order';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<InputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [InputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [InputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [InputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DateConfig, value: string): DateCandidateInterface | null {\n const splittedValue = value.split(inputDateSeparator);\n\n const { month, day, year }: DateCandidateInterface = functionList[inputDateOrder](splittedValue);\n\n if (\n !month ||\n !day ||\n !year ||\n month.length !== DateInputFormat.MONTH.length ||\n day.length !== DateInputFormat.DAYS.length ||\n year.length !== DateInputFormat.YEAR.length\n ) {\n return null;\n }\n\n return { month, day, year };\n}\n\n/** @internal */\nexport function getDateInputValueAsDate(config: DateConfig, value: string): Date | null {\n const dateCandidate: DateCandidateInterface | null = getDateCandidate(config, value);\n\n if (!dateCandidate) return null;\n\n const date = toDate(`${dateCandidate.month}.${dateCandidate.day}.${dateCandidate.year}`);\n\n return isValid(date) ? date : null;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"odx-angular-cdk-date-input.mjs","sources":["../../../../libs/angular/cdk/date-input/src/lib/models/input-date-order.ts","../../../../libs/angular/cdk/date-input/src/lib/date.config.ts","../../../../libs/angular/cdk/date-input/src/lib/utils/get-date-input-pattern.ts","../../../../libs/angular/cdk/date-input/src/lib/utils/get-input-value-as-date.ts","../../../../libs/angular/cdk/date-input/src/lib/utils/ngx-mask-init.ts","../../../../libs/angular/cdk/date-input/src/odx-angular-cdk-date-input.ts"],"sourcesContent":["export type InputDateOrder = (typeof InputDateOrder)[keyof typeof InputDateOrder];\n\nexport const InputDateOrder = {\n DMY: 'DMY',\n MDY: 'MDY',\n YMD: 'YMD',\n};\n\nexport type DateInputPattern = typeof DateInputFormat | typeof DateInputMask;\n\nexport const DateInputFormat = {\n DAYS: 'dd',\n MONTH: 'MM',\n YEAR: 'yyyy',\n};\n\nexport const DateInputMask = {\n DAYS: 'd0',\n MONTH: 'M0',\n YEAR: '0000',\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { InputDateOrder } from './models/input-date-order';\n\nexport interface DateConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default InputDateOrder.DMY\n */\n inputDateOrder: InputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\n/**\n * Tools for injecting and providing the date configuration with default configuration for the date.\n *\n * @example\n * // Providing custom date configuration.\n * ```ts\n * @Component({\n * providers: [provideDateConfig({ inputDateOrder: InputDateOrder.MDY, inputDateSeparator: '/'})]\n * })\n * export class MyComponent {}\n *\n * // Injecting the date configuration.\n * ```ts\n * @Component({})\n * export class MyComponent {\n * constructor(@Inject(injectDateConfig()) private readonly dateConfig: DateConfig) {}\n * }\n * ```\n */\nexport const { DateConfig, DateDefaultConfig, injectDateConfig, provideDateConfig } = createConfigTokens('Date', '@odx/angular/components/date', {\n inputDateOrder: InputDateOrder.DMY,\n inputDateSeparator: '.',\n});\n","import { DateConfig } from '../date.config';\nimport { DateInputFormat, DateInputMask, DateInputPattern, InputDateOrder } from '../models/input-date-order';\n\nfunction getDateInputPattern({ inputDateOrder, inputDateSeparator }: DateConfig, pattern: DateInputPattern): string {\n const patternList: Record<InputDateOrder, string> = {\n [InputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [InputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [InputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\n/** @internal */\nexport function getDateInputFormat(config: DateConfig): string {\n return getDateInputPattern(config, DateInputFormat);\n}\n\n/** @internal */\nexport function getDateInputMask(config: DateConfig): string {\n return getDateInputPattern(config, DateInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DateConfig } from '../date.config';\nimport { DateInputFormat, InputDateOrder } from '../models/input-date-order';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<InputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [InputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [InputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [InputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DateConfig, value: string): DateCandidateInterface | null {\n const splittedValue = value.split(inputDateSeparator);\n\n const { month, day, year }: DateCandidateInterface = functionList[inputDateOrder](splittedValue);\n\n if (\n !month ||\n !day ||\n !year ||\n month.length !== DateInputFormat.MONTH.length ||\n day.length !== DateInputFormat.DAYS.length ||\n year.length !== DateInputFormat.YEAR.length\n ) {\n return null;\n }\n\n return { month, day, year };\n}\n\n/** @internal */\nexport function getDateInputValueAsDate(config: DateConfig, value: string): Date | null {\n const dateCandidate: DateCandidateInterface | null = getDateCandidate(config, value);\n\n if (!dateCandidate) return null;\n\n const date = toDate(`${dateCandidate.month}.${dateCandidate.day}.${dateCandidate.year}`);\n\n return isValid(date) ? date : null;\n}\n","import { isFunction } from '@odx/angular/utils';\nimport { initialConfig, NgxMaskConfig, NgxMaskDirective } from 'ngx-mask';\n\nexport function initNgxMask(ngxMask: NgxMaskDirective | undefined = undefined, mask: string): void {\n if (!ngxMask) return;\n if (!Object.hasOwn(ngxMask, '_maskValue')) {\n throw new Error('[DatepickerInputControlDirective] initNgxMask: ngx-mask internal API changed, mask signal not available.');\n }\n const maskSignal = ngxMask['_maskValue'];\n isFunction(maskSignal.set) && maskSignal.set(mask);\n ngxMask._maskService.maskExpression = mask;\n}\n\nexport const ngxMaskProviderConfig: Partial<NgxMaskConfig> = {\n validation: false,\n leadZeroDateTime: true,\n patterns: {\n ...initialConfig.patterns,\n A: { pattern: new RegExp('[AaPp]') },\n M: { pattern: new RegExp('[mM]') },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ import { DropdownDirective } from '@odx/angular/components/dropdown';
|
|
|
8
8
|
import { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';
|
|
9
9
|
import { CSSComponent } from '@odx/angular/internal';
|
|
10
10
|
import { deferFn } from '@odx/angular/utils';
|
|
11
|
-
import { tap, filter } from 'rxjs';
|
|
12
11
|
import { OptionControl } from '@odx/angular/cdk/option-control';
|
|
13
12
|
import { InputControlDirective } from '@odx/angular/cdk/custom-form-control';
|
|
14
13
|
|
|
@@ -92,6 +91,7 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
92
91
|
super(...arguments);
|
|
93
92
|
this.defaultActiveOptionIndex = 0;
|
|
94
93
|
this.patchValueFlag = false;
|
|
94
|
+
this.shouldOpenOnOptionUpdate = false;
|
|
95
95
|
this.clickOutsideDirective = inject(ClickOutsideDirective, { host: true });
|
|
96
96
|
/** Text to display when no options are found.
|
|
97
97
|
*
|
|
@@ -133,14 +133,22 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
133
133
|
this.searchField?.reset();
|
|
134
134
|
}
|
|
135
135
|
handleQueryListOption(options) {
|
|
136
|
-
options.changes
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
options.changes.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
137
|
+
this.initKeyManager(options.toArray());
|
|
138
|
+
deferFn(() => {
|
|
139
|
+
this.updateDropdownState();
|
|
140
|
+
if (this.isOpen && this.hasOptions) {
|
|
141
|
+
this.activateSelectedOption();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
140
144
|
});
|
|
141
145
|
}
|
|
142
146
|
handleSearchFieldChanges() {
|
|
143
|
-
this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() =>
|
|
147
|
+
this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
148
|
+
this.shouldOpenOnOptionUpdate = true;
|
|
149
|
+
this.triggerControllerChange();
|
|
150
|
+
this.updateDropdownState();
|
|
151
|
+
});
|
|
144
152
|
}
|
|
145
153
|
handleClickOutside() {
|
|
146
154
|
this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());
|
|
@@ -154,8 +162,9 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
154
162
|
this.patchValueFlag = false;
|
|
155
163
|
return;
|
|
156
164
|
}
|
|
157
|
-
if (!this.isOpen && (this.hasOptions || !!this.notFoundText())) {
|
|
165
|
+
if (!this.isOpen && this.shouldOpenOnOptionUpdate && (this.hasOptions || !!this.notFoundText() || this.isLoading)) {
|
|
158
166
|
this.openDropdown();
|
|
167
|
+
this.shouldOpenOnOptionUpdate = false;
|
|
159
168
|
return;
|
|
160
169
|
}
|
|
161
170
|
if (this.isOpen && !this.hasOptions && !this.notFoundText()) {
|
|
@@ -170,8 +179,10 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
170
179
|
}
|
|
171
180
|
if (this.isReadonly || this.isDisabled)
|
|
172
181
|
return;
|
|
182
|
+
this.shouldOpenOnOptionUpdate = true;
|
|
173
183
|
if (!this.isOpen && this.hasOptions) {
|
|
174
184
|
this.openDropdown();
|
|
185
|
+
this.shouldOpenOnOptionUpdate = false;
|
|
175
186
|
}
|
|
176
187
|
}
|
|
177
188
|
async handleKeyboardEvent(event) {
|
|
@@ -182,6 +193,10 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
182
193
|
this.blurSelectSearchField();
|
|
183
194
|
return;
|
|
184
195
|
}
|
|
196
|
+
if (!this.isOpen && ['ArrowDown', 'ArrowUp', 'PageDown', 'PageUp', 'Home', 'End'].includes(event.key)) {
|
|
197
|
+
this.shouldOpenOnOptionUpdate = true;
|
|
198
|
+
this.updateDropdownState();
|
|
199
|
+
}
|
|
185
200
|
if (this.isOpen && this.hasOptions) {
|
|
186
201
|
if (event.key === 'Enter' || event.key === 'Tab') {
|
|
187
202
|
event.preventDefault();
|
|
@@ -204,6 +219,7 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
204
219
|
}
|
|
205
220
|
onDropdownClosed() {
|
|
206
221
|
super.onDropdownClosed();
|
|
222
|
+
this.shouldOpenOnOptionUpdate = false;
|
|
207
223
|
!this.searchField?.nativeElementValue && this.blurSelectSearchField();
|
|
208
224
|
}
|
|
209
225
|
updateSearchField(value) {
|