@wkly/datetime-picker 18.0.0 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,330 +0,0 @@
1
- import { ApplicationRef, createComponent, Directive, ElementRef, EnvironmentInjector, effect, forwardRef, HostListener, Inject, Injectable, Injector, PLATFORM_ID, signal, untracked, } from "@angular/core";
2
- import { DOCUMENT, isPlatformBrowser } from "@angular/common";
3
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms";
4
- import { validateSelection, WklyGregorianCalendarAdapter, } from "@wkly/adapters";
5
- import { WklyPickerInputsPropertyKeys, WklyPickerOutputsPropertyKeys, } from "@wkly/presentation";
6
- import { WklyPickerInputs, unwrapWklyPickerSignalInputs, } from "./config";
7
- import { WklyDateTimePickerComponent } from "./picker.component";
8
- import * as i0 from "@angular/core";
9
- /** Native-dialog factory. Browser resources are allocated only by open(). */
10
- export class WklyDateTimePickerDialogService {
11
- environmentInjector;
12
- app;
13
- document;
14
- platform;
15
- constructor(environmentInjector, app, document, platform) {
16
- this.environmentInjector = environmentInjector;
17
- this.app = app;
18
- this.document = document;
19
- this.platform = platform;
20
- }
21
- open(trigger, onCancel, backdrop = true, injector) {
22
- if (!isPlatformBrowser(this.platform))
23
- throw new Error("Picker presentations can only open in a browser");
24
- const dialog = this.document.createElement("dialog");
25
- dialog.setAttribute("aria-label", "Date and time picker");
26
- Object.assign(dialog.style, {
27
- padding: "0",
28
- border: "0",
29
- borderRadius: "14px",
30
- width: "min(390px, 100vw)",
31
- maxWidth: "100vw",
32
- maxHeight: "94vh",
33
- background: "transparent",
34
- });
35
- const component = createComponent(WklyDateTimePickerComponent, {
36
- environmentInjector: this.environmentInjector,
37
- elementInjector: injector,
38
- });
39
- component.instance.presentation = "transient";
40
- dialog.appendChild(component.location.nativeElement);
41
- this.document.body.appendChild(dialog);
42
- this.app.attachView(component.hostView);
43
- const cancel = (event) => {
44
- event.preventDefault();
45
- onCancel("escape");
46
- };
47
- const click = (event) => {
48
- if (backdrop && event.target === dialog) {
49
- const r = dialog.getBoundingClientRect();
50
- if (event.clientX < r.left ||
51
- event.clientX > r.right ||
52
- event.clientY < r.top ||
53
- event.clientY > r.bottom)
54
- onCancel("backdrop");
55
- }
56
- };
57
- const keydown = (event) => {
58
- if (event.key !== "Tab")
59
- return;
60
- const controls = Array.from(dialog.querySelectorAll('button:not(:disabled),input:not(:disabled),[tabindex="0"]')).filter((el) => el.tabIndex >= 0 &&
61
- el.getClientRects().length &&
62
- getComputedStyle(el).visibility !== "hidden");
63
- const first = controls[0], last = controls[controls.length - 1];
64
- if (first &&
65
- (event.shiftKey
66
- ? this.document.activeElement === first
67
- : this.document.activeElement === last)) {
68
- event.preventDefault();
69
- (event.shiftKey ? last : first).focus();
70
- }
71
- };
72
- dialog.addEventListener("cancel", cancel);
73
- dialog.addEventListener("click", click);
74
- dialog.addEventListener("keydown", keydown);
75
- dialog.showModal();
76
- return {
77
- component,
78
- destroy: () => {
79
- dialog.removeEventListener("cancel", cancel);
80
- dialog.removeEventListener("click", click);
81
- dialog.removeEventListener("keydown", keydown);
82
- dialog.close();
83
- this.app.detachView(component.hostView);
84
- component.destroy();
85
- dialog.remove();
86
- trigger.focus();
87
- },
88
- };
89
- }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerDialogService, deps: [{ token: i0.EnvironmentInjector }, { token: i0.ApplicationRef }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
91
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerDialogService, providedIn: "root" });
92
- }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerDialogService, decorators: [{
94
- type: Injectable,
95
- args: [{ providedIn: "root" }]
96
- }], ctorParameters: () => [{ type: i0.EnvironmentInjector }, { type: i0.ApplicationRef }, { type: Document, decorators: [{
97
- type: Inject,
98
- args: [DOCUMENT]
99
- }] }, { type: Object, decorators: [{
100
- type: Inject,
101
- args: [PLATFORM_ID]
102
- }] }] });
103
- /** Shared trigger lifecycle; optional presentation packages extend this class. */
104
- export class WklyTriggerBase extends WklyPickerInputs {
105
- element;
106
- ref = null;
107
- subscriptions = [];
108
- errors = [];
109
- change = () => { };
110
- touched = () => { };
111
- validation = () => { };
112
- formValue = signal(undefined);
113
- formDisabled = signal(false);
114
- previousInputs;
115
- currentValue() {
116
- return this.formValue() === undefined
117
- ? this[WklyPickerInputsPropertyKeys.Value]()
118
- : this.formValue();
119
- }
120
- isDisabled() {
121
- return this[WklyPickerInputsPropertyKeys.Disabled]() || this.formDisabled();
122
- }
123
- constructor(element) {
124
- super();
125
- this.element = element;
126
- effect(() => {
127
- const inputs = unwrapWklyPickerSignalInputs(this);
128
- const previous = this.previousInputs;
129
- this.previousInputs = inputs;
130
- untracked(() => {
131
- if (previous &&
132
- !Object.is(previous[WklyPickerInputsPropertyKeys.Value], inputs[WklyPickerInputsPropertyKeys.Value]))
133
- this.formValue.set(undefined);
134
- if (!previous ||
135
- Object.keys(inputs).some((key) => !Object.is(previous[key], inputs[key]))) {
136
- this.checkValue();
137
- this.display();
138
- if (this.ref) {
139
- this.copy();
140
- this.ref.component.changeDetectorRef.detectChanges();
141
- }
142
- }
143
- });
144
- });
145
- }
146
- open() {
147
- if (this.isDisabled() || this.ref)
148
- return;
149
- this.ref = this.create();
150
- const picker = this.ref.component.instance;
151
- this.copy();
152
- this.subscriptions = [
153
- picker[WklyPickerOutputsPropertyKeys.ValueChange].subscribe((value) => {
154
- this.formValue.set(value);
155
- this.change(value);
156
- this[WklyPickerOutputsPropertyKeys.ValueChange].emit(value);
157
- this.display();
158
- }),
159
- picker[WklyPickerOutputsPropertyKeys.ValidationChange].subscribe((errors) => {
160
- this.errors = errors;
161
- this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);
162
- this.validation();
163
- }),
164
- picker[WklyPickerOutputsPropertyKeys.Closed].subscribe((reason) => this.close(reason)),
165
- picker[WklyPickerOutputsPropertyKeys.ViewportChange].subscribe((value) => this[WklyPickerOutputsPropertyKeys.ViewportChange].emit(value)),
166
- picker[WklyPickerOutputsPropertyKeys.ViewModeChange].subscribe((value) => this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(value)),
167
- ];
168
- this.ref.component.changeDetectorRef.detectChanges();
169
- picker.focusDay();
170
- this[WklyPickerOutputsPropertyKeys.Opened].emit();
171
- }
172
- key(event) {
173
- if (event.key === "Enter" ||
174
- event.key === " " ||
175
- event.key === "ArrowDown") {
176
- event.preventDefault();
177
- this.open();
178
- }
179
- }
180
- blur() {
181
- this.touched();
182
- }
183
- close(reason = "programmatic") {
184
- if (!this.ref)
185
- return;
186
- const ref = this.ref;
187
- this.ref = null;
188
- this.subscriptions.forEach((s) => s.unsubscribe());
189
- this.subscriptions = [];
190
- ref.destroy();
191
- this.touched();
192
- this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);
193
- }
194
- ngOnDestroy() {
195
- this.close();
196
- }
197
- copy() {
198
- if (!this.ref)
199
- return;
200
- const inputs = unwrapWklyPickerSignalInputs(this);
201
- for (const name of Object.values(WklyPickerInputsPropertyKeys))
202
- this.ref.component.setInput(name, name === WklyPickerInputsPropertyKeys.Value
203
- ? this.currentValue()
204
- : name === WklyPickerInputsPropertyKeys.Disabled
205
- ? this.isDisabled()
206
- : inputs[name]);
207
- }
208
- display() {
209
- const host = this.element.nativeElement;
210
- if (host.tagName === "INPUT") {
211
- host.readOnly = true;
212
- const value = this.currentValue();
213
- host.value =
214
- value === null
215
- ? ""
216
- : typeof value === "string"
217
- ? value
218
- : value.join(" — ");
219
- host.disabled = this.isDisabled();
220
- host.setAttribute("aria-haspopup", "dialog");
221
- }
222
- }
223
- checkValue() {
224
- this.errors = validateSelection(this.currentValue(), unwrapWklyPickerSignalInputs(this), this[WklyPickerInputsPropertyKeys.CalendarAdapter]() ||
225
- new WklyGregorianCalendarAdapter(this[WklyPickerInputsPropertyKeys.Locale]() || "en-US"));
226
- this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(this.errors);
227
- this.validation();
228
- }
229
- writeValue(value) {
230
- this.formValue.set(value);
231
- this.checkValue();
232
- this.display();
233
- if (this.ref)
234
- this.ref.component.instance.writeValue(value);
235
- }
236
- registerOnChange(fn) {
237
- this.change = fn;
238
- }
239
- registerOnTouched(fn) {
240
- this.touched = fn;
241
- }
242
- setDisabledState(value) {
243
- this.formDisabled.set(value);
244
- this.display();
245
- if (this.ref)
246
- this.ref.component.instance.setDisabledState(value);
247
- }
248
- validate() {
249
- return this.errors.length ? { wkly: this.errors } : null;
250
- }
251
- registerOnValidatorChange(fn) {
252
- this.validation = fn;
253
- }
254
- scrollToEpochDay(day, options) {
255
- this.open();
256
- this.ref?.component.instance.scrollToEpochDay(day, options);
257
- }
258
- scrollToAbsoluteWeek(week, options) {
259
- this.open();
260
- this.ref?.component.instance.scrollToAbsoluteWeek(week, options);
261
- }
262
- scrollToCalendarDate(date, options) {
263
- this.open();
264
- this.ref?.component.instance.scrollToCalendarDate(date, options);
265
- }
266
- scrollToValue(value, options) {
267
- this.open();
268
- this.ref?.component.instance.scrollToValue(value, options);
269
- }
270
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyTriggerBase, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
271
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: WklyTriggerBase, host: { listeners: { "click": "open()", "keydown": "key($event)", "blur": "blur()" } }, usesInheritance: true, ngImport: i0 });
272
- }
273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyTriggerBase, decorators: [{
274
- type: Directive
275
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { open: [{
276
- type: HostListener,
277
- args: ["click"]
278
- }], key: [{
279
- type: HostListener,
280
- args: ["keydown", ["$event"]]
281
- }], blur: [{
282
- type: HostListener,
283
- args: ["blur"]
284
- }] } });
285
- export class WklyDateTimePickerDialogDirective extends WklyTriggerBase {
286
- service;
287
- triggerInjector;
288
- constructor(element, service, triggerInjector) {
289
- super(element);
290
- this.service = service;
291
- this.triggerInjector = triggerInjector;
292
- }
293
- create() {
294
- return this.service.open(this.element.nativeElement, (reason) => this.close(reason), this[WklyPickerInputsPropertyKeys.CloseOnBackdrop](), this.triggerInjector);
295
- }
296
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerDialogDirective, deps: [{ token: i0.ElementRef }, { token: WklyDateTimePickerDialogService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
297
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: WklyDateTimePickerDialogDirective, selector: "[wklyDateTimePickerDialog]", providers: [
298
- {
299
- provide: NG_VALUE_ACCESSOR,
300
- useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),
301
- multi: true,
302
- },
303
- {
304
- provide: NG_VALIDATORS,
305
- useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),
306
- multi: true,
307
- },
308
- ], exportAs: ["wklyDialog"], usesInheritance: true, ngImport: i0 });
309
- }
310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerDialogDirective, decorators: [{
311
- type: Directive,
312
- args: [{
313
- selector: "[wklyDateTimePickerDialog]",
314
- standalone: false,
315
- exportAs: "wklyDialog",
316
- providers: [
317
- {
318
- provide: NG_VALUE_ACCESSOR,
319
- useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),
320
- multi: true,
321
- },
322
- {
323
- provide: NG_VALIDATORS,
324
- useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),
325
- multi: true,
326
- },
327
- ],
328
- }]
329
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: WklyDateTimePickerDialogService }, { type: i0.Injector }] });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvd2tseS1kYXRldGltZS1waWNrZXIuMTgvc3JjL3ByZXNlbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUVkLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFHUixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUVMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLDRCQUE0QixHQUk3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCw0QkFBNEIsRUFDNUIsNkJBQTZCLEdBQzlCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUdMLGdCQUFnQixFQUNoQiw0QkFBNEIsR0FDN0IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBS2pFLDZFQUE2RTtBQUU3RSxNQUFNLE9BQU8sK0JBQStCO0lBRWhDO0lBQ0E7SUFDa0I7SUFDRztJQUovQixZQUNVLG1CQUF3QyxFQUN4QyxHQUFtQixFQUNELFFBQWtCLEVBQ2YsUUFBZ0I7UUFIckMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQUNELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFRO0lBQzVDLENBQUM7SUFDSixJQUFJLENB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QkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxVQUFVLEVBQUUsS0FBSztvQkFDakIsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQ0FBa0MsQ0FBQzs0QkFDaEUsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtDQUFrQyxDQUFDOzRCQUNoRSxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIGNyZWF0ZUNvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFbnZpcm9ubWVudEluamVjdG9yLFxuICBlZmZlY3QsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgUExBVEZPUk1fSUQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVTZWxlY3Rpb24sXG4gIFdrbHlHcmVnb3JpYW5DYWxlbmRhckFkYXB0ZXIsXG4gIFdrbHlDYWxlbmRhckRhdGUsXG4gIFdrbHlQaWNrZXJWYWx1ZSxcbiAgV2tseVZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkB3a2x5L2FkYXB0ZXJzXCI7XG5pbXBvcnQge1xuICBXa2x5UGlja2VySW5wdXRzIGFzIFdrbHlQaWNrZXJJbnB1dHNDb250cmFjdCxcbiAgV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cyxcbiAgV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMsXG59IGZyb20gXCJAd2tseS9wcmVzZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIFdrbHlDbG9zZVJlYXNvbixcbiAgV2tseUp1bXBPcHRpb25zLFxuICBXa2x5UGlja2VySW5wdXRzLFxuICB1bndyYXBXa2x5UGlja2VyU2lnbmFsSW5wdXRzLFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IFdrbHlEYXRlVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gXCIuL3BpY2tlci5jb21wb25lbnRcIjtcbmV4cG9ydCBpbnRlcmZhY2UgV2tseVByZXNlbnRhdGlvblJlZiB7XG4gIHJlYWRvbmx5IGNvbXBvbmVudDogQ29tcG9uZW50UmVmPFdrbHlEYXRlVGltZVBpY2tlckNvbXBvbmVudD47XG4gIGRlc3Ryb3koKTogdm9pZDtcbn1cbi8qKiBOYXRpdmUtZGlhbG9nIGZhY3RvcnkuIEJyb3dzZXIgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgb25seSBieSBvcGVuKCkuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgV2tseURhdGVUaW1lUGlja2VyRGlhbG9nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcDogQXBwbGljYXRpb25SZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybTogT2JqZWN0LFxuICApIHt9XG4gIG9wZW4oXG4gICAgdHJpZ2dlcjogSFRNTEVsZW1lbnQsXG4gICAgb25DYW5jZWw6IChyZWFzb246IFdrbHlDbG9zZVJlYXNvbikgPT4gdm9pZCxcbiAgICBiYWNrZHJvcCA9IHRydWUsXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvcixcbiAgKTogV2tseVByZXNlbnRhdGlvblJlZiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBpY2tlciBwcmVzZW50YXRpb25zIGNhbiBvbmx5IG9wZW4gaW4gYSBicm93c2VyXCIpO1xuICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpYWxvZ1wiKTtcbiAgICBkaWFsb2cuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBcIkRhdGUgYW5kIHRpbWUgcGlja2VyXCIpO1xuICAgIE9iamVjdC5hc3NpZ24oZGlhbG9nLnN0eWxlLCB7XG4gICAgICBwYWRkaW5nOiBcIjBcIixcbiAgICAgIGJvcmRlcjogXCIwXCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMTRweFwiLFxuICAgICAgd2lkdGg6IFwibWluKDM5MHB4LCAxMDB2dylcIixcbiAgICAgIG1heFdpZHRoOiBcIjEwMHZ3XCIsXG4gICAgICBtYXhIZWlnaHQ6IFwiOTR2aFwiLFxuICAgICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChXa2x5RGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIHtcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIGVsZW1lbnRJbmplY3RvcjogaW5qZWN0b3IsXG4gICAgfSk7XG4gICAgY29tcG9uZW50Lmluc3RhbmNlLnByZXNlbnRhdGlvbiA9IFwidHJhbnNpZW50XCI7XG4gICAgZGlhbG9nLmFwcGVuZENoaWxkKGNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGlhbG9nKTtcbiAgICB0aGlzLmFwcC5hdHRhY2hWaWV3KGNvbXBvbmVudC5ob3N0Vmlldyk7XG4gICAgY29uc3QgY2FuY2VsID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9uQ2FuY2VsKFwiZXNjYXBlXCIpO1xuICAgIH07XG4gICAgY29uc3QgY2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChiYWNrZHJvcCAmJiBldmVudC50YXJnZXQgPT09IGRpYWxvZykge1xuICAgICAgICBjb25zdCByID0gZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnQuY2xpZW50WCA8IHIubGVmdCB8fFxuICAgICAgICAgIGV2ZW50LmNsaWVudFggPiByLnJpZ2h0IHx8XG4gICAgICAgICAgZXZlbnQuY2xpZW50WSA8IHIudG9wIHx8XG4gICAgICAgICAgZXZlbnQuY2xpZW50WSA+IHIuYm90dG9tXG4gICAgICAgIClcbiAgICAgICAgICBvbkNhbmNlbChcImJhY2tkcm9wXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qga2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gXCJUYWJcIikgcmV0dXJuO1xuICAgICAgY29uc3QgY29udHJvbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICBkaWFsb2cucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgICAgICAgJ2J1dHRvbjpub3QoOmRpc2FibGVkKSxpbnB1dDpub3QoOmRpc2FibGVkKSxbdGFiaW5kZXg9XCIwXCJdJyxcbiAgICAgICAgKSxcbiAgICAgICkuZmlsdGVyKFxuICAgICAgICAoZWwpID0+XG4gICAgICAgICAgZWwudGFiSW5kZXggPj0gMCAmJlxuICAgICAgICAgIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICYmXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbCkudmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIixcbiAgICAgICk7XG4gICAgICBjb25zdCBmaXJzdCA9IGNvbnRyb2xzWzBdLFxuICAgICAgICBsYXN0ID0gY29udHJvbHNbY29udHJvbHMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoXG4gICAgICAgIGZpcnN0ICYmXG4gICAgICAgIChldmVudC5zaGlmdEtleVxuICAgICAgICAgID8gdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdFxuICAgICAgICAgIDogdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIChldmVudC5zaGlmdEtleSA/IGxhc3QgOiBmaXJzdCkuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRpYWxvZy5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsXCIsIGNhbmNlbCk7XG4gICAgZGlhbG9nLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGljayk7XG4gICAgZGlhbG9nLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGtleWRvd24pO1xuICAgIGRpYWxvZy5zaG93TW9kYWwoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcG9uZW50LFxuICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICBkaWFsb2cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNhbmNlbFwiLCBjYW5jZWwpO1xuICAgICAgICBkaWFsb2cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrKTtcbiAgICAgICAgZGlhbG9nLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGtleWRvd24pO1xuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5hcHAuZGV0YWNoVmlldyhjb21wb25lbnQuaG9zdFZpZXcpO1xuICAgICAgICBjb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgICBkaWFsb2cucmVtb3ZlKCk7XG4gICAgICAgIHRyaWdnZXIuZm9jdXMoKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuLyoqIFNoYXJlZCB0cmlnZ2VyIGxpZmVjeWNsZTsgb3B0aW9uYWwgcHJlc2VudGF0aW9uIHBhY2thZ2VzIGV4dGVuZCB0aGlzIGNsYXNzLiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV2tseVRyaWdnZXJCYXNlXG4gIGV4dGVuZHMgV2tseVBpY2tlcklucHV0c1xuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uRGVzdHJveVxue1xuICBwcm90ZWN0ZWQgcmVmOiBXa2x5UHJlc2VudGF0aW9uUmVmIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb25zOiB7IHVuc3Vic2NyaWJlKCk6IHZvaWQgfVtdID0gW107XG4gIHByaXZhdGUgZXJyb3JzOiByZWFkb25seSBXa2x5VmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBjaGFuZ2U6ICh2YWx1ZTogV2tseVBpY2tlclZhbHVlKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgdG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIHZhbGlkYXRpb246ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtVmFsdWUgPSBzaWduYWw8V2tseVBpY2tlclZhbHVlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcHJldmlvdXNJbnB1dHM/OiBXa2x5UGlja2VySW5wdXRzQ29udHJhY3Q7XG4gIHByaXZhdGUgY3VycmVudFZhbHVlKCk6IFdrbHlQaWNrZXJWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbHVlKCkgPT09IHVuZGVmaW5lZFxuICAgICAgPyB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdKClcbiAgICAgIDogdGhpcy5mb3JtVmFsdWUoKSE7XG4gIH1cbiAgcHJpdmF0ZSBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdKCkgfHwgdGhpcy5mb3JtRGlzYWJsZWQoKTtcbiAgfVxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dHMgPVxuICAgICAgICB1bndyYXBXa2x5UGlja2VyU2lnbmFsSW5wdXRzPFdrbHlQaWNrZXJJbnB1dHNDb250cmFjdD4odGhpcyk7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucHJldmlvdXNJbnB1dHM7XG4gICAgICB0aGlzLnByZXZpb3VzSW5wdXRzID0gaW5wdXRzO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZpb3VzICYmXG4gICAgICAgICAgIU9iamVjdC5pcyhcbiAgICAgICAgICAgIHByZXZpb3VzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdLFxuICAgICAgICAgICAgaW5wdXRzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdLFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHRoaXMuZm9ybVZhbHVlLnNldCh1bmRlZmluZWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXByZXZpb3VzIHx8XG4gICAgICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5zb21lKFxuICAgICAgICAgICAgKGtleSkgPT5cbiAgICAgICAgICAgICAgIU9iamVjdC5pcyhcbiAgICAgICAgICAgICAgICBwcmV2aW91c1trZXkgYXMga2V5b2YgdHlwZW9mIGlucHV0c10sXG4gICAgICAgICAgICAgICAgaW5wdXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgaW5wdXRzXSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZSgpO1xuICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xuICAgICAgICAgIGlmICh0aGlzLnJlZikge1xuICAgICAgICAgICAgdGhpcy5jb3B5KCk7XG4gICAgICAgICAgICB0aGlzLnJlZi5jb21wb25lbnQuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZSgpOiBXa2x5UHJlc2VudGF0aW9uUmVmO1xuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIikgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkgfHwgdGhpcy5yZWYpIHJldHVybjtcbiAgICB0aGlzLnJlZiA9IHRoaXMuY3JlYXRlKCk7XG4gICAgY29uc3QgcGlja2VyID0gdGhpcy5yZWYuY29tcG9uZW50Lmluc3RhbmNlO1xuICAgIHRoaXMuY29weSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIHBpY2tlcltXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5WYWx1ZUNoYW5nZV0uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmFsdWVDaGFuZ2VdLmVtaXQodmFsdWUpO1xuICAgICAgICB0aGlzLmRpc3BsYXkoKTtcbiAgICAgIH0pLFxuICAgICAgcGlja2VyW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLlZhbGlkYXRpb25DaGFuZ2VdLnN1YnNjcmliZShcbiAgICAgICAgKGVycm9ycykgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmFsaWRhdGlvbkNoYW5nZV0uZW1pdChlcnJvcnMpO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIHBpY2tlcltXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5DbG9zZWRdLnN1YnNjcmliZSgocmVhc29uKSA9PlxuICAgICAgICB0aGlzLmNsb3NlKHJlYXNvbiksXG4gICAgICApLFxuICAgICAgcGlja2VyW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLlZpZXdwb3J0Q2hhbmdlXS5zdWJzY3JpYmUoKHZhbHVlKSA9PlxuICAgICAgICB0aGlzW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLlZpZXdwb3J0Q2hhbmdlXS5lbWl0KHZhbHVlKSxcbiAgICAgICksXG4gICAgICBwaWNrZXJbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmlld01vZGVDaGFuZ2VdLnN1YnNjcmliZSgodmFsdWUpID0+XG4gICAgICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmlld01vZGVDaGFuZ2VdLmVtaXQodmFsdWUpLFxuICAgICAgKSxcbiAgICBdO1xuICAgIHRoaXMucmVmLmNvbXBvbmVudC5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcGlja2VyLmZvY3VzRGF5KCk7XG4gICAgdGhpc1tXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5PcGVuZWRdLmVtaXQoKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pIGtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gXCJFbnRlclwiIHx8XG4gICAgICBldmVudC5rZXkgPT09IFwiIFwiIHx8XG4gICAgICBldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCJcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcihcImJsdXJcIikgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLnRvdWNoZWQoKTtcbiAgfVxuICBjbG9zZShyZWFzb246IFdrbHlDbG9zZVJlYXNvbiA9IFwicHJvZ3JhbW1hdGljXCIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVmKSByZXR1cm47XG4gICAgY29uc3QgcmVmID0gdGhpcy5yZWY7XG4gICAgdGhpcy5yZWYgPSBudWxsO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy50b3VjaGVkKCk7XG4gICAgdGhpc1tXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5DbG9zZWRdLmVtaXQocmVhc29uKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cbiAgcHJpdmF0ZSBjb3B5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWYpIHJldHVybjtcbiAgICBjb25zdCBpbnB1dHMgPSB1bndyYXBXa2x5UGlja2VyU2lnbmFsSW5wdXRzPFdrbHlQaWNrZXJJbnB1dHNDb250cmFjdD4odGhpcyk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC52YWx1ZXMoV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cykpXG4gICAgICB0aGlzLnJlZi5jb21wb25lbnQuc2V0SW5wdXQoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5hbWUgPT09IFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVcbiAgICAgICAgICA/IHRoaXMuY3VycmVudFZhbHVlKClcbiAgICAgICAgICA6IG5hbWUgPT09IFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRcbiAgICAgICAgICAgID8gdGhpcy5pc0Rpc2FibGVkKClcbiAgICAgICAgICAgIDogaW5wdXRzW25hbWVdLFxuICAgICAgKTtcbiAgfVxuICBwcml2YXRlIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGhvc3QudGFnTmFtZSA9PT0gXCJJTlBVVFwiKSB7XG4gICAgICBob3N0LnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWUoKTtcbiAgICAgIGhvc3QudmFsdWUgPVxuICAgICAgICB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICAgID8gXCJcIlxuICAgICAgICAgIDogdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IHZhbHVlLmpvaW4oXCIg4oCUIFwiKTtcbiAgICAgIGhvc3QuZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcbiAgICAgIGhvc3Quc2V0QXR0cmlidXRlKFwiYXJpYS1oYXNwb3B1cFwiLCBcImRpYWxvZ1wiKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja1ZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JzID0gdmFsaWRhdGVTZWxlY3Rpb24oXG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSgpLFxuICAgICAgdW53cmFwV2tseVBpY2tlclNpZ25hbElucHV0czxXa2x5UGlja2VySW5wdXRzQ29udHJhY3Q+KHRoaXMpLFxuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkNhbGVuZGFyQWRhcHRlcl0oKSB8fFxuICAgICAgICBuZXcgV2tseUdyZWdvcmlhbkNhbGVuZGFyQWRhcHRlcihcbiAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTG9jYWxlXSgpIHx8IFwiZW4tVVNcIixcbiAgICAgICAgKSxcbiAgICApO1xuICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmFsaWRhdGlvbkNoYW5nZV0uZW1pdCh0aGlzLmVycm9ycyk7XG4gICAgdGhpcy52YWxpZGF0aW9uKCk7XG4gIH1cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogV2tseVBpY2tlclZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB0aGlzLmNoZWNrVmFsdWUoKTtcbiAgICB0aGlzLmRpc3BsYXkoKTtcbiAgICBpZiAodGhpcy5yZWYpIHRoaXMucmVmLmNvbXBvbmVudC5pbnN0YW5jZS53cml0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFdrbHlQaWNrZXJWYWx1ZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnRvdWNoZWQgPSBmbjtcbiAgfVxuICBzZXREaXNhYmxlZFN0YXRlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0aGlzLmRpc3BsYXkoKTtcbiAgICBpZiAodGhpcy5yZWYpIHRoaXMucmVmLmNvbXBvbmVudC5pbnN0YW5jZS5zZXREaXNhYmxlZFN0YXRlKHZhbHVlKTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA/IHsgd2tseTogdGhpcy5lcnJvcnMgfSA6IG51bGw7XG4gIH1cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGlvbiA9IGZuO1xuICB9XG4gIHNjcm9sbFRvRXBvY2hEYXkoZGF5OiBudW1iZXIsIG9wdGlvbnM/OiBXa2x5SnVtcE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4oKTtcbiAgICB0aGlzLnJlZj8uY29tcG9uZW50Lmluc3RhbmNlLnNjcm9sbFRvRXBvY2hEYXkoZGF5LCBvcHRpb25zKTtcbiAgfVxuICBzY3JvbGxUb0Fic29sdXRlV2Vlayh3ZWVrOiBudW1iZXIsIG9wdGlvbnM/OiBXa2x5SnVtcE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4oKTtcbiAgICB0aGlzLnJlZj8uY29tcG9uZW50Lmluc3RhbmNlLnNjcm9sbFRvQWJzb2x1dGVXZWVrKHdlZWssIG9wdGlvbnMpO1xuICB9XG4gIHNjcm9sbFRvQ2FsZW5kYXJEYXRlKFxuICAgIGRhdGU6IFdrbHlDYWxlbmRhckRhdGUsXG4gICAgb3B0aW9ucz86IFdrbHlKdW1wT3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuKCk7XG4gICAgdGhpcy5yZWY/LmNvbXBvbmVudC5pbnN0YW5jZS5zY3JvbGxUb0NhbGVuZGFyRGF0ZShkYXRlLCBvcHRpb25zKTtcbiAgfVxuICBzY3JvbGxUb1ZhbHVlKHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBXa2x5SnVtcE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4oKTtcbiAgICB0aGlzLnJlZj8uY29tcG9uZW50Lmluc3RhbmNlLnNjcm9sbFRvVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICB9XG59XG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW3drbHlEYXRlVGltZVBpY2tlckRpYWxvZ11cIixcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIGV4cG9ydEFzOiBcIndrbHlEaWFsb2dcIixcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBXa2x5RGF0ZVRpbWVQaWNrZXJEaWFsb2dEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV2tseURhdGVUaW1lUGlja2VyRGlhbG9nRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdrbHlEYXRlVGltZVBpY2tlckRpYWxvZ0RpcmVjdGl2ZSBleHRlbmRzIFdrbHlUcmlnZ2VyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgc2VydmljZTogV2tseURhdGVUaW1lUGlja2VyRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHRyaWdnZXJJbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnQpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGUoKTogV2tseVByZXNlbnRhdGlvblJlZiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5vcGVuKFxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAocmVhc29uKSA9PiB0aGlzLmNsb3NlKHJlYXNvbiksXG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuQ2xvc2VPbkJhY2tkcm9wXSgpLFxuICAgICAgdGhpcy50cmlnZ2VySW5qZWN0b3IsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,30 +0,0 @@
1
- import { NgModule } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { WklyDateTimePickerComponent } from "./picker.component";
4
- import { WklyDateTimePickerDialogDirective } from "./presentation";
5
- import { WklyFieldComponent } from "./field.component";
6
- import * as i0 from "@angular/core";
7
- export * from "./config";
8
- export { WklyDateTimePickerComponent } from "./picker.component";
9
- export { WklyDateTimePickerDialogService, WklyTriggerBase, WklyDateTimePickerDialogDirective, } from "./presentation";
10
- export { WklyFieldComponent } from "./field.component";
11
- export class WklyDateTimePickerModule {
12
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerModule, declarations: [WklyDateTimePickerComponent,
14
- WklyDateTimePickerDialogDirective,
15
- WklyFieldComponent], imports: [CommonModule], exports: [WklyDateTimePickerComponent, WklyDateTimePickerDialogDirective] });
16
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerModule, imports: [CommonModule] });
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WklyDateTimePickerModule, decorators: [{
19
- type: NgModule,
20
- args: [{
21
- imports: [CommonModule],
22
- declarations: [
23
- WklyDateTimePickerComponent,
24
- WklyDateTimePickerDialogDirective,
25
- WklyFieldComponent,
26
- ],
27
- exports: [WklyDateTimePickerComponent, WklyDateTimePickerDialogDirective],
28
- }]
29
- }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3drbHktZGF0ZXRpbWUtcGlja2VyLjE4L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUN2RCxjQUFjLFVBQVUsQ0FBQztBQUN6QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBRUwsK0JBQStCLEVBQy9CLGVBQWUsRUFDZixpQ0FBaUMsR0FDbEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTBCdkQsTUFBTSxPQUFPLHdCQUF3Qjt3R0FBeEIsd0JBQXdCO3lHQUF4Qix3QkFBd0IsaUJBTmpDLDJCQUEyQjtZQUMzQixpQ0FBaUM7WUFDakMsa0JBQWtCLGFBSlYsWUFBWSxhQU1aLDJCQUEyQixFQUFFLGlDQUFpQzt5R0FFN0Qsd0JBQXdCLFlBUnpCLFlBQVk7OzRGQVFYLHdCQUF3QjtrQkFUcEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFlBQVksRUFBRTt3QkFDWiwyQkFBMkI7d0JBQzNCLGlDQUFpQzt3QkFDakMsa0JBQWtCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxpQ0FBaUMsQ0FBQztpQkFDMUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBXa2x5RGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tIFwiLi9waWNrZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBXa2x5RGF0ZVRpbWVQaWNrZXJEaWFsb2dEaXJlY3RpdmUgfSBmcm9tIFwiLi9wcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFdrbHlGaWVsZENvbXBvbmVudCB9IGZyb20gXCIuL2ZpZWxkLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uZmlnXCI7XG5leHBvcnQgeyBXa2x5RGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tIFwiLi9waWNrZXIuY29tcG9uZW50XCI7XG5leHBvcnQge1xuICBXa2x5UHJlc2VudGF0aW9uUmVmLFxuICBXa2x5RGF0ZVRpbWVQaWNrZXJEaWFsb2dTZXJ2aWNlLFxuICBXa2x5VHJpZ2dlckJhc2UsXG4gIFdrbHlEYXRlVGltZVBpY2tlckRpYWxvZ0RpcmVjdGl2ZSxcbn0gZnJvbSBcIi4vcHJlc2VudGF0aW9uXCI7XG5leHBvcnQgeyBXa2x5RmllbGRDb21wb25lbnQgfSBmcm9tIFwiLi9maWVsZC5jb21wb25lbnRcIjtcbmV4cG9ydCB7XG4gIFdrbHlQaWNrZXJWYWx1ZSxcbiAgV2tseUlzb1N0cmluZyxcbiAgV2tseVJhbmdlVmFsdWUsXG4gIFdrbHlTZWxlY3Rpb25Nb2RlLFxuICBXa2x5VmFsaWRhdGlvbkVycm9yLFxuICBXa2x5VmFsaWRhdGlvbkVycm9yQ29kZSxcbiAgV2tseVZpZXdwb3J0UHJlc2V0LFxuICBXa2x5SG91ckN5Y2xlLFxuICBXa2x5RW5kcG9pbnQsXG4gIFdrbHlEaXNhYmxlZERhdGVQcmVkaWNhdGUsXG4gIFdrbHlEaXNhYmxlZFRpbWVQcmVkaWNhdGUsXG4gIFdrbHlSYW5nZVZhbGlkYXRvcixcbiAgV2tseVdlZWtMYWJlbE1vZGUsXG4gIFdrbHlXZWVrTGFiZWxGb3JtYXR0ZXIsXG59IGZyb20gXCJAd2tseS9hZGFwdGVyc1wiO1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFdrbHlEYXRlVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBXa2x5RGF0ZVRpbWVQaWNrZXJEaWFsb2dEaXJlY3RpdmUsXG4gICAgV2tseUZpZWxkQ29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbV2tseURhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBXa2x5RGF0ZVRpbWVQaWNrZXJEaWFsb2dEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBXa2x5RGF0ZVRpbWVQaWNrZXJNb2R1bGUge31cbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2tseS1kYXRldGltZS1waWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy93a2x5LWRhdGV0aW1lLXBpY2tlci4xOC9zcmMvd2tseS1kYXRldGltZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,44 +0,0 @@
1
- import { EventEmitter, OnChanges, OnDestroy } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- export declare class WklyFieldComponent implements OnChanges, OnDestroy {
4
- value: number | null;
5
- label: string;
6
- hideLabel: boolean;
7
- previousLabel: string;
8
- nextLabel: string;
9
- min: number;
10
- max: number;
11
- step: number;
12
- locale: string;
13
- disabled: boolean;
14
- invalid: boolean;
15
- labels: readonly string[] | null;
16
- valueChange: EventEmitter<number | null>;
17
- complete: EventEmitter<void>;
18
- private before;
19
- private touchY;
20
- private touchSteps;
21
- private touchChanged;
22
- private typed;
23
- private inputTimer;
24
- private wheelTimer;
25
- get display(): string;
26
- ngOnChanges(changes: any): void;
27
- ngOnDestroy(): void;
28
- next(delta: number): number;
29
- neighbor(delta: number): string;
30
- stepBy(delta: number): void;
31
- begin(event: FocusEvent): void;
32
- type(event: Event): void;
33
- key(event: KeyboardEvent): void;
34
- finish(): void;
35
- wheel(event: WheelEvent): void;
36
- touchStart(event: TouchEvent): void;
37
- touchMove(event: TouchEvent): void;
38
- touchEnd(event: TouchEvent): void;
39
- private cancelInput;
40
- private scrollBy;
41
- private applyTouchY;
42
- static ɵfac: i0.ɵɵFactoryDeclaration<WklyFieldComponent, never>;
43
- static ɵcmp: i0.ɵɵComponentDeclaration<WklyFieldComponent, "wkly-field", never, { "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "hideLabel": { "alias": "hideLabel"; "required": false; }; "previousLabel": { "alias": "previousLabel"; "required": false; }; "nextLabel": { "alias": "nextLabel"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; }, { "valueChange": "valueChange"; "complete": "complete"; }, never, never, false, never>;
44
- }
@@ -1,137 +0,0 @@
1
- import { AfterViewInit, ChangeDetectorRef, ElementRef, OnDestroy, OnInit } from "@angular/core";
2
- import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from "@angular/forms";
3
- import { WklyWeekOffset } from "@wkly/core";
4
- import { WklyDraft as Draft, WklyWeekRow as Row, WklyPickerInputsPropertyKeys } from "@wkly/presentation";
5
- import { WklyCalendarAdapter, WklyCalendarDate, WklyPickerValue, WklyValidationError } from "@wkly/adapters";
6
- import { WklyClock, WklyCloseReason, WklyConfiguration, WklyJumpOptions, WklyPickerInputs, WklyStrings, WklyTranslations } from "./config";
7
- import * as i0 from "@angular/core";
8
- export declare class WklyDateTimePickerComponent extends WklyPickerInputs implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
9
- private defaultLocale;
10
- private defaults;
11
- private clock;
12
- private strings;
13
- private defaultTranslations;
14
- private host;
15
- private changeDetector;
16
- scroller?: ElementRef<HTMLElement>;
17
- presentation: "inline" | "transient";
18
- viewMode: "calendar" | "manual";
19
- endView: "date" | "days";
20
- adapter: WklyCalendarAdapter;
21
- effectiveLocale: string;
22
- effectiveOffset: WklyWeekOffset;
23
- effectiveHourCycle: "h12" | "h24";
24
- direction: string;
25
- rows: Row[];
26
- weekdays: string[];
27
- drafts: Draft[];
28
- errors: readonly WklyValidationError[];
29
- today: number;
30
- focused: number;
31
- anchorWeek: number;
32
- firstWeek: number;
33
- visibleCount: number;
34
- rowHeight: number;
35
- scrollHeight: number;
36
- paddingTop: number;
37
- initialized: boolean;
38
- compact: boolean;
39
- readonly WklyPickerInputsPropertyKeys: typeof WklyPickerInputsPropertyKeys;
40
- private baseWeek;
41
- private firstSupportedDay;
42
- private lastSupportedDay;
43
- private firstSupportedWeek;
44
- private lastSupportedWeek;
45
- private generator;
46
- private initialMonth;
47
- private clipMonth;
48
- private browser;
49
- private observer?;
50
- private destroyed;
51
- private scrollEndTimer?;
52
- private snapPending;
53
- private onChange;
54
- private onTouched;
55
- private validatorChanged;
56
- private configErrors;
57
- private pendingValue;
58
- private emittedValue;
59
- private manualDateEndpoint;
60
- private readonly formValue;
61
- private readonly formDisabled;
62
- private previousInputs?;
63
- currentValue(): WklyPickerValue;
64
- isDisabled(): boolean;
65
- constructor(defaultLocale: string, defaults: WklyConfiguration, clock: WklyClock, strings: WklyStrings, defaultTranslations: WklyTranslations, platform: Object, host: ElementRef<HTMLElement>, changeDetector: ChangeDetectorRef);
66
- ngOnInit(): void;
67
- initialize(): void;
68
- configure(): void;
69
- private setSupportedScrollRange;
70
- private clampFirstWeek;
71
- ngAfterViewInit(): void;
72
- ngOnDestroy(): void;
73
- t(key: string): string;
74
- get isRange(): boolean;
75
- get hasDate(): boolean;
76
- get hasTime(): boolean;
77
- get submitVisible(): boolean;
78
- get title(): string;
79
- get canSubmit(): boolean;
80
- private blank;
81
- load(value: WklyPickerValue): void;
82
- writeValue(value: WklyPickerValue): void;
83
- registerOnChange(fn: (value: WklyPickerValue) => void): void;
84
- registerOnTouched(fn: () => void): void;
85
- setDisabledState(disabled: boolean): void;
86
- validate(_control: AbstractControl): ValidationErrors | null;
87
- registerOnValidatorChange(fn: () => void): void;
88
- touched(): void;
89
- private report;
90
- check(): void;
91
- trackDraft(index: number): number;
92
- private orderDrafts;
93
- finish(): void;
94
- private commit;
95
- submit(reason?: WklyCloseReason): void;
96
- cancel(reason?: WklyCloseReason): void;
97
- now(): void;
98
- private clockDraft;
99
- private initializeManualRange;
100
- toggleView(): void;
101
- private positionOnManualDate;
102
- months(draft: Draft): readonly string[];
103
- monthCount(draft: Draft): number;
104
- get inDays(): number | null;
105
- get inDaysLabel(): string;
106
- get resultingEndDate(): string;
107
- toggleEndView(view: "date" | "days"): void;
108
- days(value: number | null): void;
109
- field(index: number, field: string, value: number | null): void;
110
- displayHour(draft: Draft): number | null;
111
- period(index: number, period: "am" | "pm" | "24"): void;
112
- selected(day: number): boolean;
113
- inRange(day: number): boolean;
114
- dayDisabled(day: number): boolean;
115
- select(day: number): void;
116
- key(event: KeyboardEvent, day: number): void;
117
- private position;
118
- private resetScroll;
119
- scroll(event: Event): void;
120
- private scheduleSnap;
121
- snapWeek(): void;
122
- private showFirstWeek;
123
- canMoveWeek(delta: number): boolean;
124
- moveWeek(delta: number): void;
125
- private renderRows;
126
- trackCell(_i: number, cell: {
127
- epochDay: number;
128
- }): number;
129
- trackRow(_i: number, row: Row): number;
130
- scrollToEpochDay(day: number, options?: WklyJumpOptions): void;
131
- scrollToAbsoluteWeek(week: number, options?: WklyJumpOptions): void;
132
- scrollToCalendarDate(date: WklyCalendarDate, options?: WklyJumpOptions): void;
133
- scrollToValue(value: string, options?: WklyJumpOptions): void;
134
- focusDay(): void;
135
- static ɵfac: i0.ɵɵFactoryDeclaration<WklyDateTimePickerComponent, never>;
136
- static ɵcmp: i0.ɵɵComponentDeclaration<WklyDateTimePickerComponent, "wkly-datetime-picker", never, {}, {}, never, never, false, never>;
137
- }