@netwin/angular-datetime-picker 1.0.0-rc.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/README.md +225 -0
- package/assets/style/picker.min.css +1 -0
- package/esm2022/lib/date-time/adapter/date-time-adapter.class.mjs +120 -0
- package/esm2022/lib/date-time/adapter/date-time-format.class.mjs +7 -0
- package/esm2022/lib/date-time/adapter/native-date-time-adapter.class.mjs +253 -0
- package/esm2022/lib/date-time/adapter/native-date-time-format.class.mjs +16 -0
- package/esm2022/lib/date-time/adapter/native-date-time.module.mjs +45 -0
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.mjs +228 -0
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.mjs +16 -0
- package/esm2022/lib/date-time/calendar-body.component.mjs +146 -0
- package/esm2022/lib/date-time/calendar-month-view.component.mjs +436 -0
- package/esm2022/lib/date-time/calendar-multi-year-view.component.mjs +366 -0
- package/esm2022/lib/date-time/calendar-year-view.component.mjs +362 -0
- package/esm2022/lib/date-time/calendar.component.mjs +368 -0
- package/esm2022/lib/date-time/date-time-inline.component.mjs +293 -0
- package/esm2022/lib/date-time/date-time-picker-container.component.mjs +405 -0
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +598 -0
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +62 -0
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +64 -0
- package/esm2022/lib/date-time/date-time-picker.animations.mjs +21 -0
- package/esm2022/lib/date-time/date-time-picker.component.mjs +564 -0
- package/esm2022/lib/date-time/date-time.class.mjs +176 -0
- package/esm2022/lib/date-time/date-time.module.mjs +83 -0
- package/esm2022/lib/date-time/numberedFixLen.pipe.mjs +28 -0
- package/esm2022/lib/date-time/options-provider.mjs +34 -0
- package/esm2022/lib/date-time/timer-box.component.mjs +140 -0
- package/esm2022/lib/date-time/timer.component.mjs +279 -0
- package/esm2022/lib/dialog/dialog-config.class.mjs +59 -0
- package/esm2022/lib/dialog/dialog-container.component.mjs +232 -0
- package/esm2022/lib/dialog/dialog-ref.class.mjs +134 -0
- package/esm2022/lib/dialog/dialog.module.mjs +26 -0
- package/esm2022/lib/dialog/dialog.service.mjs +228 -0
- package/esm2022/lib/utils/array.utils.mjs +12 -0
- package/esm2022/lib/utils/constants.mjs +34 -0
- package/esm2022/lib/utils/date.utils.mjs +49 -0
- package/esm2022/lib/utils/index.mjs +5 -0
- package/esm2022/lib/utils/object.utils.mjs +26 -0
- package/esm2022/netwin-angular-datetime-picker.mjs +5 -0
- package/esm2022/public_api.mjs +25 -0
- package/fesm2022/netwin-angular-datetime-picker.mjs +5751 -0
- package/fesm2022/netwin-angular-datetime-picker.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/date-time/adapter/date-time-adapter.class.d.ts +193 -0
- package/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
- package/lib/date-time/adapter/native-date-time-adapter.class.d.ts +72 -0
- package/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
- package/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.d.ts +67 -0
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.d.ts +5 -0
- package/lib/date-time/calendar-body.component.d.ts +79 -0
- package/lib/date-time/calendar-month-view.component.d.ts +141 -0
- package/lib/date-time/calendar-multi-year-view.component.d.ts +107 -0
- package/lib/date-time/calendar-year-view.component.d.ts +120 -0
- package/lib/date-time/calendar.component.d.ts +154 -0
- package/lib/date-time/date-time-inline.component.d.ts +102 -0
- package/lib/date-time/date-time-picker-container.component.d.ts +130 -0
- package/lib/date-time/date-time-picker-input.directive.d.ts +164 -0
- package/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
- package/lib/date-time/date-time-picker-trigger.directive.d.ts +23 -0
- package/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/lib/date-time/date-time-picker.component.d.ts +173 -0
- package/lib/date-time/date-time.class.d.ts +103 -0
- package/lib/date-time/date-time.module.d.ts +23 -0
- package/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
- package/lib/date-time/options-provider.d.ts +23 -0
- package/lib/date-time/timer-box.component.d.ts +42 -0
- package/lib/date-time/timer.component.d.ts +131 -0
- package/lib/dialog/dialog-config.class.d.ts +169 -0
- package/lib/dialog/dialog-container.component.d.ts +58 -0
- package/lib/dialog/dialog-ref.class.d.ts +51 -0
- package/lib/dialog/dialog.module.d.ts +11 -0
- package/lib/dialog/dialog.service.d.ts +76 -0
- package/lib/utils/array.utils.d.ts +5 -0
- package/lib/utils/constants.d.ts +19 -0
- package/lib/utils/date.utils.d.ts +12 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/object.utils.d.ts +11 -0
- package/package.json +51 -0
- package/public_api.d.ts +24 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dialog.service
|
|
3
|
+
*/
|
|
4
|
+
import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
|
|
5
|
+
import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
|
|
6
|
+
import { Inject, Injectable, InjectionToken, Optional, SkipSelf, TemplateRef } from '@angular/core';
|
|
7
|
+
import { Subject, defer } from 'rxjs';
|
|
8
|
+
import { startWith } from 'rxjs/operators';
|
|
9
|
+
import { extendObject } from '../utils';
|
|
10
|
+
import { OwlDialogConfig } from './dialog-config.class';
|
|
11
|
+
import { OwlDialogContainerComponent } from './dialog-container.component';
|
|
12
|
+
import { OwlDialogRef } from './dialog-ref.class';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
15
|
+
import * as i2 from "@angular/common";
|
|
16
|
+
export const OWL_DIALOG_DATA = new InjectionToken('OwlDialogData');
|
|
17
|
+
/**
|
|
18
|
+
* Injection token that determines the scroll handling while the dialog is open.
|
|
19
|
+
* */
|
|
20
|
+
export const OWL_DIALOG_SCROLL_STRATEGY = new InjectionToken('owl-dialog-scroll-strategy');
|
|
21
|
+
export function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
|
|
22
|
+
const fn = () => overlay.scrollStrategies.block();
|
|
23
|
+
return fn;
|
|
24
|
+
}
|
|
25
|
+
/** @docs-private */
|
|
26
|
+
export const OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {
|
|
27
|
+
provide: OWL_DIALOG_SCROLL_STRATEGY,
|
|
28
|
+
deps: [Overlay],
|
|
29
|
+
useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Injection token that can be used to specify default dialog options.
|
|
33
|
+
* */
|
|
34
|
+
export const OWL_DIALOG_DEFAULT_OPTIONS = new InjectionToken('owl-dialog-default-options');
|
|
35
|
+
// eslint-disable-next-line @angular-eslint/use-injectable-provided-in
|
|
36
|
+
export class OwlDialogService {
|
|
37
|
+
/** Keeps track of the currently-open dialogs. */
|
|
38
|
+
get openDialogs() {
|
|
39
|
+
return this.parentDialog ? this.parentDialog.openDialogs : this._openDialogsAtThisLevel;
|
|
40
|
+
}
|
|
41
|
+
/** Stream that emits when a dialog has been opened. */
|
|
42
|
+
get beforeOpen() {
|
|
43
|
+
return this.parentDialog ? this.parentDialog.beforeOpen : this._beforeOpenAtThisLevel;
|
|
44
|
+
}
|
|
45
|
+
/** Stream that emits when a dialog has been opened. */
|
|
46
|
+
get afterOpen() {
|
|
47
|
+
return this.parentDialog ? this.parentDialog.afterOpen : this._afterOpenAtThisLevel;
|
|
48
|
+
}
|
|
49
|
+
get #afterAllClosed() {
|
|
50
|
+
const parent = this.parentDialog;
|
|
51
|
+
return parent ? parent.#afterAllClosed : this._afterAllClosedAtThisLevel;
|
|
52
|
+
}
|
|
53
|
+
constructor(overlay, injector, location, scrollStrategy, defaultOptions, parentDialog, overlayContainer) {
|
|
54
|
+
this.overlay = overlay;
|
|
55
|
+
this.injector = injector;
|
|
56
|
+
this.location = location;
|
|
57
|
+
this.defaultOptions = defaultOptions;
|
|
58
|
+
this.parentDialog = parentDialog;
|
|
59
|
+
this.overlayContainer = overlayContainer;
|
|
60
|
+
this.ariaHiddenElements = new Map();
|
|
61
|
+
this._openDialogsAtThisLevel = [];
|
|
62
|
+
this._beforeOpenAtThisLevel = new Subject();
|
|
63
|
+
this._afterOpenAtThisLevel = new Subject();
|
|
64
|
+
this._afterAllClosedAtThisLevel = new Subject();
|
|
65
|
+
/**
|
|
66
|
+
* Stream that emits when all open dialog have finished closing.
|
|
67
|
+
* Will emit on subscribe if there are no open dialogs to begin with.
|
|
68
|
+
*/
|
|
69
|
+
this.afterAllClosed = defer(() => this._openDialogsAtThisLevel.length ? this.#afterAllClosed : this.#afterAllClosed.pipe(startWith(undefined)));
|
|
70
|
+
this.scrollStrategy = scrollStrategy;
|
|
71
|
+
if (!parentDialog && location) {
|
|
72
|
+
location.subscribe(() => this.closeAll());
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
open(componentOrTemplateRef, config) {
|
|
76
|
+
config = applyConfigDefaults(config, this.defaultOptions);
|
|
77
|
+
if (config.id && this.getDialogById(config.id)) {
|
|
78
|
+
throw Error(`Dialog with id "${config.id}" exists already. The dialog id must be unique.`);
|
|
79
|
+
}
|
|
80
|
+
const overlayRef = this.createOverlay(config);
|
|
81
|
+
const dialogContainer = this.attachDialogContainer(overlayRef, config);
|
|
82
|
+
const dialogRef = this.attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);
|
|
83
|
+
if (!this.openDialogs.length) {
|
|
84
|
+
this.hideNonDialogContentFromAssistiveTechnology();
|
|
85
|
+
}
|
|
86
|
+
this.openDialogs.push(dialogRef);
|
|
87
|
+
dialogRef.afterClosed().subscribe(() => this.removeOpenDialog(dialogRef));
|
|
88
|
+
this.beforeOpen.next(dialogRef);
|
|
89
|
+
this.afterOpen.next(dialogRef);
|
|
90
|
+
return dialogRef;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Closes all of the currently-open dialogs.
|
|
94
|
+
*/
|
|
95
|
+
closeAll() {
|
|
96
|
+
let i = this.openDialogs.length;
|
|
97
|
+
while (i--) {
|
|
98
|
+
this.openDialogs[i].close();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Finds an open dialog by its id.
|
|
103
|
+
* @param id ID to use when looking up the dialog.
|
|
104
|
+
*/
|
|
105
|
+
getDialogById(id) {
|
|
106
|
+
return this.openDialogs.find((dialog) => dialog.id === id);
|
|
107
|
+
}
|
|
108
|
+
attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config) {
|
|
109
|
+
const dialogRef = new OwlDialogRef(overlayRef, dialogContainer, config.id, this.location);
|
|
110
|
+
if (config.hasBackdrop) {
|
|
111
|
+
overlayRef.backdropClick().subscribe(() => {
|
|
112
|
+
if (!dialogRef.disableClose) {
|
|
113
|
+
dialogRef.close();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (!(componentOrTemplateRef instanceof TemplateRef)) {
|
|
118
|
+
const injector = this.createInjector(config, dialogRef, dialogContainer);
|
|
119
|
+
const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, undefined, injector));
|
|
120
|
+
dialogRef.componentInstance = contentRef.instance;
|
|
121
|
+
}
|
|
122
|
+
dialogRef.updateSize(config.width, config.height).updatePosition(config.position);
|
|
123
|
+
return dialogRef;
|
|
124
|
+
}
|
|
125
|
+
createInjector(config, dialogRef, dialogContainer) {
|
|
126
|
+
const userInjector = config?.viewContainerRef?.injector;
|
|
127
|
+
const injectionTokens = new WeakMap();
|
|
128
|
+
injectionTokens.set(OwlDialogRef, dialogRef);
|
|
129
|
+
injectionTokens.set(OwlDialogContainerComponent, dialogContainer);
|
|
130
|
+
injectionTokens.set(OWL_DIALOG_DATA, config.data);
|
|
131
|
+
return new PortalInjector(userInjector || this.injector, injectionTokens);
|
|
132
|
+
}
|
|
133
|
+
createOverlay(config) {
|
|
134
|
+
const overlayConfig = this.getOverlayConfig(config);
|
|
135
|
+
return this.overlay.create(overlayConfig);
|
|
136
|
+
}
|
|
137
|
+
attachDialogContainer(overlayRef, config) {
|
|
138
|
+
const containerPortal = new ComponentPortal(OwlDialogContainerComponent, config.viewContainerRef);
|
|
139
|
+
const containerRef = overlayRef.attach(containerPortal);
|
|
140
|
+
containerRef.instance.setConfig(config);
|
|
141
|
+
return containerRef.instance;
|
|
142
|
+
}
|
|
143
|
+
getOverlayConfig(dialogConfig) {
|
|
144
|
+
const state = new OverlayConfig({
|
|
145
|
+
positionStrategy: this.overlay.position().global(),
|
|
146
|
+
scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),
|
|
147
|
+
panelClass: dialogConfig.paneClass,
|
|
148
|
+
hasBackdrop: dialogConfig.hasBackdrop,
|
|
149
|
+
minWidth: dialogConfig.minWidth,
|
|
150
|
+
minHeight: dialogConfig.minHeight,
|
|
151
|
+
maxWidth: dialogConfig.maxWidth,
|
|
152
|
+
maxHeight: dialogConfig.maxHeight
|
|
153
|
+
});
|
|
154
|
+
if (dialogConfig.backdropClass) {
|
|
155
|
+
state.backdropClass = dialogConfig.backdropClass;
|
|
156
|
+
}
|
|
157
|
+
return state;
|
|
158
|
+
}
|
|
159
|
+
removeOpenDialog(dialogRef) {
|
|
160
|
+
const index = this._openDialogsAtThisLevel.indexOf(dialogRef);
|
|
161
|
+
if (index > -1) {
|
|
162
|
+
this.openDialogs.splice(index, 1);
|
|
163
|
+
// If all the dialogs were closed, remove/restore the `aria-hidden`
|
|
164
|
+
// to a the siblings and emit to the `afterAllClosed` stream.
|
|
165
|
+
if (!this.openDialogs.length) {
|
|
166
|
+
this.ariaHiddenElements.forEach((previousValue, element) => {
|
|
167
|
+
if (previousValue) {
|
|
168
|
+
element.setAttribute('aria-hidden', previousValue);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
element.removeAttribute('aria-hidden');
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
this.ariaHiddenElements.clear();
|
|
175
|
+
this.#afterAllClosed.next();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Hides all of the content that isn't an overlay from assistive technology.
|
|
181
|
+
*/
|
|
182
|
+
hideNonDialogContentFromAssistiveTechnology() {
|
|
183
|
+
const overlayContainer = this.overlayContainer.getContainerElement();
|
|
184
|
+
// Ensure that the overlay container is attached to the DOM.
|
|
185
|
+
if (overlayContainer.parentElement) {
|
|
186
|
+
const siblings = overlayContainer.parentElement.children;
|
|
187
|
+
for (let i = siblings.length - 1; i > -1; i--) {
|
|
188
|
+
const sibling = siblings[i];
|
|
189
|
+
if (sibling !== overlayContainer &&
|
|
190
|
+
sibling.nodeName !== 'SCRIPT' &&
|
|
191
|
+
sibling.nodeName !== 'STYLE' &&
|
|
192
|
+
!sibling.hasAttribute('aria-live')) {
|
|
193
|
+
this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
|
|
194
|
+
sibling.setAttribute('aria-hidden', 'true');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDialogService, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: i2.Location, optional: true }, { token: OWL_DIALOG_SCROLL_STRATEGY }, { token: OWL_DIALOG_DEFAULT_OPTIONS, optional: true }, { token: OwlDialogService, optional: true, skipSelf: true }, { token: i1.OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
200
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDialogService }); }
|
|
201
|
+
}
|
|
202
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDialogService, decorators: [{
|
|
203
|
+
type: Injectable
|
|
204
|
+
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: i2.Location, decorators: [{
|
|
205
|
+
type: Optional
|
|
206
|
+
}] }, { type: undefined, decorators: [{
|
|
207
|
+
type: Inject,
|
|
208
|
+
args: [OWL_DIALOG_SCROLL_STRATEGY]
|
|
209
|
+
}] }, { type: undefined, decorators: [{
|
|
210
|
+
type: Optional
|
|
211
|
+
}, {
|
|
212
|
+
type: Inject,
|
|
213
|
+
args: [OWL_DIALOG_DEFAULT_OPTIONS]
|
|
214
|
+
}] }, { type: OwlDialogService, decorators: [{
|
|
215
|
+
type: Optional
|
|
216
|
+
}, {
|
|
217
|
+
type: SkipSelf
|
|
218
|
+
}] }, { type: i1.OverlayContainer }] });
|
|
219
|
+
/**
|
|
220
|
+
* Applies default options to the dialog config.
|
|
221
|
+
* @param config Config to be modified.
|
|
222
|
+
* @param defaultOptions Default config setting
|
|
223
|
+
* @returns The new configuration object.
|
|
224
|
+
*/
|
|
225
|
+
function applyConfigDefaults(config, defaultOptions) {
|
|
226
|
+
return extendObject(new OwlDialogConfig(), config, defaultOptions);
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBRUwsT0FBTyxFQUNQLGFBQWEsRUFJZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQWlCLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJGLE9BQU8sRUFFTCxNQUFNLEVBQ04sVUFBVSxFQUNWLGNBQWMsRUFFZCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUVsRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQU0sZUFBZSxDQUFDLENBQUM7QUFFeEU7O0tBRUs7QUFDTCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsNEJBQTRCLENBQUMsQ0FBQztBQUVqSCxNQUFNLFVBQVUsMkNBQTJDLENBQUMsT0FBZ0I7SUFDMUUsTUFBTSxFQUFFLEdBQUcsR0FBd0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2RSxPQUFPLEVBQUUsQ0FB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Q2pDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsMEJBQTBCOzswQkFFakMsUUFBUTs7MEJBQ1IsUUFBUTs7QUFtTGI7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixNQUFpQyxFQUNqQyxjQUF5QztJQUV6QyxPQUFPLFlBQVksQ0FBQyxJQUFJLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkaWFsb2cuc2VydmljZVxuICovXG5cbmltcG9ydCB7XG4gIEJsb2NrU2Nyb2xsU3RyYXRlZ3ksXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlDb250YWluZXIsXG4gIE92ZXJsYXlSZWYsXG4gIFNjcm9sbFN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSwgUG9ydGFsSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIE9wdGlvbmFsLFxuICBTa2lwU2VsZixcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkZWZlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZXh0ZW5kT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgT3dsRGlhbG9nQ29uZmlnLCBPd2xEaWFsb2dDb25maWdJbnRlcmZhY2UgfSBmcm9tICcuL2RpYWxvZy1jb25maWcuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2ctY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xEaWFsb2dSZWYgfSBmcm9tICcuL2RpYWxvZy1yZWYuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgT1dMX0RJQUxPR19EQVRBID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ093bERpYWxvZ0RhdGEnKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZXRlcm1pbmVzIHRoZSBzY3JvbGwgaGFuZGxpbmcgd2hpbGUgdGhlIGRpYWxvZyBpcyBvcGVuLlxuICogKi9cbmV4cG9ydCBjb25zdCBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiBTY3JvbGxTdHJhdGVneT4oJ293bC1kaWFsb2ctc2Nyb2xsLXN0cmF0ZWd5Jyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUl9GQUNUT1JZKG92ZXJsYXk6IE92ZXJsYXkpOiAoKSA9PiBTY3JvbGxTdHJhdGVneSB7XG4gIGNvbnN0IGZuID0gKCk6IEJsb2NrU2Nyb2xsU3RyYXRlZ3kgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCk7XG4gIHJldHVybiBmbjtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUiA9IHtcbiAgcHJvdmlkZTogT1dMX0RJQUxPR19TQ1JPTExfU1RSQVRFR1ksXG4gIGRlcHM6IFtPdmVybGF5XSxcbiAgdXNlRmFjdG9yeTogT1dMX0RJQUxPR19TQ1JPTExfU1RSQVRFR1lfUFJPVklERVJfRkFDVE9SWVxufTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgZGlhbG9nIG9wdGlvbnMuXG4gKiAqL1xuZXhwb3J0IGNvbnN0IE9XTF9ESUFMT0dfREVGQVVMVF9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE93bERpYWxvZ0NvbmZpZz4oJ293bC1kaWFsb2ctZGVmYXVsdC1vcHRpb25zJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvdXNlLWluamVjdGFibGUtcHJvdmlkZWQtaW5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPd2xEaWFsb2dTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhcmlhSGlkZGVuRWxlbWVudHMgPSBuZXcgTWFwPEVsZW1lbnQsIHN0cmluZyB8IG51bGw+KCk7XG5cbiAgcHJpdmF0ZSBfb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbDogQXJyYXk8T3dsRGlhbG9nUmVmPGFueT4+ID0gW107XG4gIHByaXZhdGUgX2JlZm9yZU9wZW5BdFRoaXNMZXZlbCA9IG5ldyBTdWJqZWN0PE93bERpYWxvZ1JlZjxhbnk+PigpO1xuICBwcml2YXRlIF9hZnRlck9wZW5BdFRoaXNMZXZlbCA9IG5ldyBTdWJqZWN0PE93bERpYWxvZ1JlZjxhbnk+PigpO1xuICBwcml2YXRlIF9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnRseS1vcGVuIGRpYWxvZ3MuICovXG4gIHB1YmxpYyBnZXQgb3BlbkRpYWxvZ3MoKTogQXJyYXk8T3dsRGlhbG9nUmVmPGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnREaWFsb2cgPyB0aGlzLnBhcmVudERpYWxvZy5vcGVuRGlhbG9ncyA6IHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw7XG4gIH1cblxuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhIGRpYWxvZyBoYXMgYmVlbiBvcGVuZWQuICovXG4gIHB1YmxpYyBnZXQgYmVmb3JlT3BlbigpOiBTdWJqZWN0PE93bERpYWxvZ1JlZjxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50RGlhbG9nID8gdGhpcy5wYXJlbnREaWFsb2cuYmVmb3JlT3BlbiA6IHRoaXMuX2JlZm9yZU9wZW5BdFRoaXNMZXZlbDtcbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGEgZGlhbG9nIGhhcyBiZWVuIG9wZW5lZC4gKi9cbiAgcHVibGljIGdldCBhZnRlck9wZW4oKTogU3ViamVjdDxPd2xEaWFsb2dSZWY8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudERpYWxvZyA/IHRoaXMucGFyZW50RGlhbG9nLmFmdGVyT3BlbiA6IHRoaXMuX2FmdGVyT3BlbkF0VGhpc0xldmVsO1xuICB9XG5cbiAgZ2V0ICNhZnRlckFsbENsb3NlZCgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudERpYWxvZztcbiAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50LiNhZnRlckFsbENsb3NlZCA6IHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nLlxuICAgKiBXaWxsIGVtaXQgb24gc3Vic2NyaWJlIGlmIHRoZXJlIGFyZSBubyBvcGVuIGRpYWxvZ3MgdG8gYmVnaW4gd2l0aC5cbiAgICovXG5cbiAgcHVibGljIGFmdGVyQWxsQ2xvc2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gZGVmZXIoKCkgPT5cbiAgICB0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLmxlbmd0aCA/IHRoaXMuI2FmdGVyQWxsQ2xvc2VkIDogdGhpcy4jYWZ0ZXJBbGxDbG9zZWQucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgQEluamVjdChPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSkgc2Nyb2xsU3RyYXRlZ3k6IGFueSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoT1dMX0RJQUxPR19ERUZBVUxUX09QVElPTlMpXG4gICAgcHJpdmF0ZSBkZWZhdWx0T3B0aW9uczogT3dsRGlhbG9nQ29uZmlnSW50ZXJmYWNlLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQFNraXBTZWxmKClcbiAgICBwcml2YXRlIHBhcmVudERpYWxvZzogT3dsRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXlDb250YWluZXI6IE92ZXJsYXlDb250YWluZXJcbiAgKSB7XG4gICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IHNjcm9sbFN0cmF0ZWd5O1xuICAgIGlmICghcGFyZW50RGlhbG9nICYmIGxvY2F0aW9uKSB7XG4gICAgICBsb2NhdGlvbi5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZUFsbCgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbjxUPihcbiAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgY29uZmlnPzogT3dsRGlhbG9nQ29uZmlnSW50ZXJmYWNlXG4gICk6IE93bERpYWxvZ1JlZjxhbnk+IHtcbiAgICBjb25maWcgPSBhcHBseUNvbmZpZ0RlZmF1bHRzKGNvbmZpZywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICBpZiAoY29uZmlnLmlkICYmIHRoaXMuZ2V0RGlhbG9nQnlJZChjb25maWcuaWQpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRGlhbG9nIHdpdGggaWQgXCIke2NvbmZpZy5pZH1cIiBleGlzdHMgYWxyZWFkeS4gVGhlIGRpYWxvZyBpZCBtdXN0IGJlIHVuaXF1ZS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KGNvbmZpZyk7XG4gICAgY29uc3QgZGlhbG9nQ29udGFpbmVyID0gdGhpcy5hdHRhY2hEaWFsb2dDb250YWluZXIob3ZlcmxheVJlZiwgY29uZmlnKTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmF0dGFjaERpYWxvZ0NvbnRlbnQ8VD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgZGlhbG9nQ29udGFpbmVyLCBvdmVybGF5UmVmLCBjb25maWcpO1xuXG4gICAgaWYgKCF0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuRGlhbG9ncy5wdXNoKGRpYWxvZ1JlZik7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVtb3ZlT3BlbkRpYWxvZyhkaWFsb2dSZWYpKTtcbiAgICB0aGlzLmJlZm9yZU9wZW4ubmV4dChkaWFsb2dSZWYpO1xuICAgIHRoaXMuYWZ0ZXJPcGVuLm5leHQoZGlhbG9nUmVmKTtcbiAgICByZXR1cm4gZGlhbG9nUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbGwgb2YgdGhlIGN1cnJlbnRseS1vcGVuIGRpYWxvZ3MuXG4gICAqL1xuICBwdWJsaWMgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgbGV0IGkgPSB0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3BlbkRpYWxvZ3NbaV0uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb3BlbiBkaWFsb2cgYnkgaXRzIGlkLlxuICAgKiBAcGFyYW0gaWQgSUQgdG8gdXNlIHdoZW4gbG9va2luZyB1cCB0aGUgZGlhbG9nLlxuICAgKi9cbiAgcHVibGljIGdldERpYWxvZ0J5SWQoaWQ6IHN0cmluZyk6IE93bERpYWxvZ1JlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5pZCA9PT0gaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hEaWFsb2dDb250ZW50PFQ+KFxuICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBkaWFsb2dDb250YWluZXI6IE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCxcbiAgICBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxuICAgIGNvbmZpZzogT3dsRGlhbG9nQ29uZmlnSW50ZXJmYWNlXG4gICk6IE93bERpYWxvZ1JlZjxUPiB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gbmV3IE93bERpYWxvZ1JlZjxUPihvdmVybGF5UmVmLCBkaWFsb2dDb250YWluZXIsIGNvbmZpZy5pZCwgdGhpcy5sb2NhdGlvbik7XG5cbiAgICBpZiAoY29uZmlnLmhhc0JhY2tkcm9wKSB7XG4gICAgICBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIWRpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCEoY29tcG9uZW50T3JUZW1wbGF0ZVJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSkge1xuICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yPFQ+KGNvbmZpZywgZGlhbG9nUmVmLCBkaWFsb2dDb250YWluZXIpO1xuICAgICAgY29uc3QgY29udGVudFJlZiA9IGRpYWxvZ0NvbnRhaW5lci5hdHRhY2hDb21wb25lbnRQb3J0YWwoXG4gICAgICAgIG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgdW5kZWZpbmVkLCBpbmplY3RvcilcbiAgICAgICk7XG4gICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UgPSBjb250ZW50UmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGRpYWxvZ1JlZi51cGRhdGVTaXplKGNvbmZpZy53aWR0aCwgY29uZmlnLmhlaWdodCkudXBkYXRlUG9zaXRpb24oY29uZmlnLnBvc2l0aW9uKTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUluamVjdG9yPFQ+KFxuICAgIGNvbmZpZzogT3dsRGlhbG9nQ29uZmlnSW50ZXJmYWNlLFxuICAgIGRpYWxvZ1JlZjogT3dsRGlhbG9nUmVmPFQ+LFxuICAgIGRpYWxvZ0NvbnRhaW5lcjogT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50XG4gICk6IFBvcnRhbEluamVjdG9yIHtcbiAgICBjb25zdCB1c2VySW5qZWN0b3IgPSBjb25maWc/LnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yO1xuICAgIGNvbnN0IGluamVjdGlvblRva2VucyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBpbmplY3Rpb25Ub2tlbnMuc2V0KE93bERpYWxvZ1JlZiwgZGlhbG9nUmVmKTtcbiAgICBpbmplY3Rpb25Ub2tlbnMuc2V0KE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCwgZGlhbG9nQ29udGFpbmVyKTtcbiAgICBpbmplY3Rpb25Ub2tlbnMuc2V0KE9XTF9ESUFMT0dfREFUQSwgY29uZmlnLmRhdGEpO1xuXG4gICAgcmV0dXJuIG5ldyBQb3J0YWxJbmplY3Rvcih1c2VySW5qZWN0b3IgfHwgdGhpcy5pbmplY3RvciwgaW5qZWN0aW9uVG9rZW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheShjb25maWc6IE93bERpYWxvZ0NvbmZpZ0ludGVyZmFjZSk6IE92ZXJsYXlSZWYge1xuICAgIGNvbnN0IG92ZXJsYXlDb25maWcgPSB0aGlzLmdldE92ZXJsYXlDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoRGlhbG9nQ29udGFpbmVyKG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsIGNvbmZpZzogT3dsRGlhbG9nQ29uZmlnSW50ZXJmYWNlKTogT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50IHtcbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCwgY29uZmlnLnZpZXdDb250YWluZXJSZWYpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudD4gPSBvdmVybGF5UmVmLmF0dGFjaChjb250YWluZXJQb3J0YWwpO1xuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zZXRDb25maWcoY29uZmlnKTtcblxuICAgIHJldHVybiBjb250YWluZXJSZWYuaW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGdldE92ZXJsYXlDb25maWcoZGlhbG9nQ29uZmlnOiBPd2xEaWFsb2dDb25maWdJbnRlcmZhY2UpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IGRpYWxvZ0NvbmZpZy5zY3JvbGxTdHJhdGVneSB8fCB0aGlzLnNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICBwYW5lbENsYXNzOiBkaWFsb2dDb25maWcucGFuZUNsYXNzLFxuICAgICAgaGFzQmFja2Ryb3A6IGRpYWxvZ0NvbmZpZy5oYXNCYWNrZHJvcCxcbiAgICAgIG1pbldpZHRoOiBkaWFsb2dDb25maWcubWluV2lkdGgsXG4gICAgICBtaW5IZWlnaHQ6IGRpYWxvZ0NvbmZpZy5taW5IZWlnaHQsXG4gICAgICBtYXhXaWR0aDogZGlhbG9nQ29uZmlnLm1heFdpZHRoLFxuICAgICAgbWF4SGVpZ2h0OiBkaWFsb2dDb25maWcubWF4SGVpZ2h0XG4gICAgfSk7XG5cbiAgICBpZiAoZGlhbG9nQ29uZmlnLmJhY2tkcm9wQ2xhc3MpIHtcbiAgICAgIHN0YXRlLmJhY2tkcm9wQ2xhc3MgPSBkaWFsb2dDb25maWcuYmFja2Ryb3BDbGFzcztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU9wZW5EaWFsb2coZGlhbG9nUmVmOiBPd2xEaWFsb2dSZWY8YW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbC5pbmRleE9mKGRpYWxvZ1JlZik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy8gSWYgYWxsIHRoZSBkaWFsb2dzIHdlcmUgY2xvc2VkLCByZW1vdmUvcmVzdG9yZSB0aGUgYGFyaWEtaGlkZGVuYFxuICAgICAgLy8gdG8gYSB0aGUgc2libGluZ3MgYW5kIGVtaXQgdG8gdGhlIGBhZnRlckFsbENsb3NlZGAgc3RyZWFtLlxuICAgICAgaWYgKCF0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmFyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChwcmV2aW91c1ZhbHVlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuI2FmdGVyQWxsQ2xvc2VkLm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgYWxsIG9mIHRoZSBjb250ZW50IHRoYXQgaXNuJ3QgYW4gb3ZlcmxheSBmcm9tIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LlxuICAgKi9cbiAgcHJpdmF0ZSBoaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCk6IHZvaWQge1xuICAgIGNvbnN0IG92ZXJsYXlDb250YWluZXIgPSB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG92ZXJsYXkgY29udGFpbmVyIGlzIGF0dGFjaGVkIHRvIHRoZSBET00uXG4gICAgaWYgKG92ZXJsYXlDb250YWluZXIucGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3Qgc2libGluZ3MgPSBvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG5cbiAgICAgIGZvciAobGV0IGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNpYmxpbmcgIT09IG92ZXJsYXlDb250YWluZXIgJiZcbiAgICAgICAgICBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJyAmJlxuICAgICAgICAgIHNpYmxpbmcubm9kZU5hbWUgIT09ICdTVFlMRScgJiZcbiAgICAgICAgICAhc2libGluZy5oYXNBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYXJpYUhpZGRlbkVsZW1lbnRzLnNldChzaWJsaW5nLCBzaWJsaW5nLmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSk7XG4gICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgZGVmYXVsdCBvcHRpb25zIHRvIHRoZSBkaWFsb2cgY29uZmlnLlxuICogQHBhcmFtIGNvbmZpZyBDb25maWcgdG8gYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gZGVmYXVsdE9wdGlvbnMgRGVmYXVsdCBjb25maWcgc2V0dGluZ1xuICogQHJldHVybnMgVGhlIG5ldyBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlDb25maWdEZWZhdWx0cyhcbiAgY29uZmlnPzogT3dsRGlhbG9nQ29uZmlnSW50ZXJmYWNlLFxuICBkZWZhdWx0T3B0aW9ucz86IE93bERpYWxvZ0NvbmZpZ0ludGVyZmFjZVxuKTogT3dsRGlhbG9nQ29uZmlnIHtcbiAgcmV0dXJuIGV4dGVuZE9iamVjdChuZXcgT3dsRGlhbG9nQ29uZmlnKCksIGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpO1xufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* array.utils
|
|
3
|
+
*/
|
|
4
|
+
/** Creates an array and fills it with values. */
|
|
5
|
+
export function range(length, valueFunction) {
|
|
6
|
+
const valuesArray = Array(length);
|
|
7
|
+
for (let i = 0; i < length; i++) {
|
|
8
|
+
valuesArray[i] = valueFunction(i);
|
|
9
|
+
}
|
|
10
|
+
return valuesArray;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi91dGlscy9hcnJheS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGlEQUFpRDtBQUNqRCxNQUFNLFVBQVUsS0FBSyxDQUFJLE1BQWMsRUFBRSxhQUFtQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGFycmF5LnV0aWxzXG4gKi9cblxuLyoqIENyZWF0ZXMgYW4gYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdmFsdWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlPFQ+KGxlbmd0aDogbnVtYmVyLCB2YWx1ZUZ1bmN0aW9uOiAoaW5kZXg6IG51bWJlcikgPT4gVCk6IEFycmF5PFQ+IHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWVzQXJyYXlbaV0gPSB2YWx1ZUZ1bmN0aW9uKGkpO1xuICB9XG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* constants
|
|
3
|
+
*/
|
|
4
|
+
import { range } from './array.utils';
|
|
5
|
+
/** Whether the browser supports the Intl API. */
|
|
6
|
+
export const SUPPORTS_INTL_API = typeof Intl !== 'undefined';
|
|
7
|
+
/** The default month names to use if Intl API is not available. */
|
|
8
|
+
export const DEFAULT_MONTH_NAMES = {
|
|
9
|
+
long: [
|
|
10
|
+
'January',
|
|
11
|
+
'February',
|
|
12
|
+
'March',
|
|
13
|
+
'April',
|
|
14
|
+
'May',
|
|
15
|
+
'June',
|
|
16
|
+
'July',
|
|
17
|
+
'August',
|
|
18
|
+
'September',
|
|
19
|
+
'October',
|
|
20
|
+
'November',
|
|
21
|
+
'December'
|
|
22
|
+
],
|
|
23
|
+
short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
|
24
|
+
narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']
|
|
25
|
+
};
|
|
26
|
+
/** The default day of the week names to use if Intl API is not available. */
|
|
27
|
+
export const DEFAULT_DAY_OF_WEEK_NAMES = {
|
|
28
|
+
long: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
|
29
|
+
short: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
30
|
+
narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S']
|
|
31
|
+
};
|
|
32
|
+
/** The default date names to use if Intl API is not available. */
|
|
33
|
+
export const DEFAULT_DATE_NAMES = range(31, (i) => String(i + 1));
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGlja2VyL3NyYy9saWIvdXRpbHMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0QyxpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDO0FBRTdELG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxJQUFJLEVBQUU7UUFDSixTQUFTO1FBQ1QsVUFBVTtRQUNWLE9BQU87UUFDUCxPQUFPO1FBQ1AsS0FBSztRQUNMLE1BQU07UUFDTixNQUFNO1FBQ04sUUFBUTtRQUNSLFdBQVc7UUFDWCxTQUFTO1FBQ1QsVUFBVTtRQUNWLFVBQVU7S0FDWDtJQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0NBQ3JFLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFDdkMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO0lBQ3BGLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUN4RCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7Q0FDNUMsQ0FBQztBQUVGLGtFQUFrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNvbnN0YW50c1xuICovXG5cbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAnLi9hcnJheS51dGlscyc7XG5cbi8qKiBXaGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBJbnRsIEFQSS4gKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JUU19JTlRMX0FQSSA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcblxuLyoqIFRoZSBkZWZhdWx0IG1vbnRoIG5hbWVzIHRvIHVzZSBpZiBJbnRsIEFQSSBpcyBub3QgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9OVEhfTkFNRVMgPSB7XG4gIGxvbmc6IFtcbiAgICAnSmFudWFyeScsXG4gICAgJ0ZlYnJ1YXJ5JyxcbiAgICAnTWFyY2gnLFxuICAgICdBcHJpbCcsXG4gICAgJ01heScsXG4gICAgJ0p1bmUnLFxuICAgICdKdWx5JyxcbiAgICAnQXVndXN0JyxcbiAgICAnU2VwdGVtYmVyJyxcbiAgICAnT2N0b2JlcicsXG4gICAgJ05vdmVtYmVyJyxcbiAgICAnRGVjZW1iZXInXG4gIF0sXG4gIHNob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddXG59O1xuXG4vKiogVGhlIGRlZmF1bHQgZGF5IG9mIHRoZSB3ZWVrIG5hbWVzIHRvIHVzZSBpZiBJbnRsIEFQSSBpcyBub3QgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFZX09GX1dFRUtfTkFNRVMgPSB7XG4gIGxvbmc6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcbiAgc2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ11cbn07XG5cbi8qKiBUaGUgZGVmYXVsdCBkYXRlIG5hbWVzIHRvIHVzZSBpZiBJbnRsIEFQSSBpcyBub3QgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFURV9OQU1FUyA9IHJhbmdlKDMxLCAoaSkgPT4gU3RyaW5nKGkgKyAxKSk7XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* date.utils
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Creates a date with the given year, month, date, hour, minute and second. Does not allow over/under-flow of the
|
|
6
|
+
* month and date.
|
|
7
|
+
*/
|
|
8
|
+
export function createDate(year, month, date, hours = 0, minutes = 0, seconds = 0) {
|
|
9
|
+
if (month < 0 || month > 11) {
|
|
10
|
+
throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`);
|
|
11
|
+
}
|
|
12
|
+
if (date < 1) {
|
|
13
|
+
throw Error(`Invalid date "${date}". Date has to be greater than 0.`);
|
|
14
|
+
}
|
|
15
|
+
if (hours < 0 || hours > 23) {
|
|
16
|
+
throw Error(`Invalid hours "${hours}". Hours has to be between 0 and 23.`);
|
|
17
|
+
}
|
|
18
|
+
if (minutes < 0 || minutes > 59) {
|
|
19
|
+
throw Error(`Invalid minutes "${minutes}". Minutes has to between 0 and 59.`);
|
|
20
|
+
}
|
|
21
|
+
if (seconds < 0 || seconds > 59) {
|
|
22
|
+
throw Error(`Invalid seconds "${seconds}". Seconds has to be between 0 and 59.`);
|
|
23
|
+
}
|
|
24
|
+
const result = createDateWithOverflow(year, month, date, hours, minutes, seconds);
|
|
25
|
+
// Check that the date wasn't above the upper bound for the month, causing the month to overflow
|
|
26
|
+
// For example, createDate(2017, 1, 31) would try to create a date 2017/02/31 which is invalid
|
|
27
|
+
if (result.getMonth() !== month) {
|
|
28
|
+
throw Error(`Invalid date "${date}" for month with index "${month}".`);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Gets the number of days in the month of the given date.
|
|
34
|
+
*/
|
|
35
|
+
export function getNumDaysInMonth(date) {
|
|
36
|
+
const lastDateOfMonth = createDateWithOverflow(date.getFullYear(), date.getMonth() + 1, 0);
|
|
37
|
+
return lastDateOfMonth.getDate();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates a date but allows the month and date to overflow.
|
|
41
|
+
*/
|
|
42
|
+
function createDateWithOverflow(year, month, date, hours = 0, minutes = 0, seconds = 0) {
|
|
43
|
+
const result = new Date(year, month, date, hours, minutes, seconds);
|
|
44
|
+
if (year >= 0 && year < 100) {
|
|
45
|
+
result.setFullYear(result.getFullYear() - 1900);
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvbGliL3V0aWxzL2RhdGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixJQUFZLEVBQ1osS0FBYSxFQUNiLElBQVksRUFDWixRQUFnQixDQUFDLEVBQ2pCLFVBQWtCLENBQUMsRUFDbkIsVUFBa0IsQ0FBQztJQUVuQixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixLQUFLLDRDQUE0QyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2IsTUFBTSxLQUFLLENBQUMsaUJBQWlCLElBQUksbUNBQW1DLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixPQUFPLHFDQUFxQyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDaEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLE9BQU8sd0NBQXdDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVsRixnR0FBZ0c7SUFDaEcsOEZBQThGO0lBQzlGLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixJQUFJLDJCQUEyQixLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBVTtJQUMxQyxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzRixPQUFPLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixJQUFZLEVBQ1osS0FBYSxFQUNiLElBQVksRUFDWixRQUFnQixDQUFDLEVBQ2pCLFVBQWtCLENBQUMsRUFDbkIsVUFBa0IsQ0FBQztJQUVuQixNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXBFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRhdGUudXRpbHNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkYXRlIHdpdGggdGhlIGdpdmVuIHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUgYW5kIHNlY29uZC4gRG9lcyBub3QgYWxsb3cgb3Zlci91bmRlci1mbG93IG9mIHRoZVxuICogbW9udGggYW5kIGRhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEYXRlKFxuICB5ZWFyOiBudW1iZXIsXG4gIG1vbnRoOiBudW1iZXIsXG4gIGRhdGU6IG51bWJlcixcbiAgaG91cnM6IG51bWJlciA9IDAsXG4gIG1pbnV0ZXM6IG51bWJlciA9IDAsXG4gIHNlY29uZHM6IG51bWJlciA9IDBcbik6IERhdGUge1xuICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBtb250aCBpbmRleCBcIiR7bW9udGh9XCIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLmApO1xuICB9XG5cbiAgaWYgKGRhdGUgPCAxKSB7XG4gICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSBcIiR7ZGF0ZX1cIi4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuYCk7XG4gIH1cblxuICBpZiAoaG91cnMgPCAwIHx8IGhvdXJzID4gMjMpIHtcbiAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBob3VycyBcIiR7aG91cnN9XCIuIEhvdXJzIGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDIzLmApO1xuICB9XG5cbiAgaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkge1xuICAgIHRocm93IEVycm9yKGBJbnZhbGlkIG1pbnV0ZXMgXCIke21pbnV0ZXN9XCIuIE1pbnV0ZXMgaGFzIHRvIGJldHdlZW4gMCBhbmQgNTkuYCk7XG4gIH1cblxuICBpZiAoc2Vjb25kcyA8IDAgfHwgc2Vjb25kcyA+IDU5KSB7XG4gICAgdGhyb3cgRXJyb3IoYEludmFsaWQgc2Vjb25kcyBcIiR7c2Vjb25kc31cIi4gU2Vjb25kcyBoYXMgdG8gYmUgYmV0d2VlbiAwIGFuZCA1OS5gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZURhdGVXaXRoT3ZlcmZsb3coeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcblxuICAvLyBDaGVjayB0aGF0IHRoZSBkYXRlIHdhc24ndCBhYm92ZSB0aGUgdXBwZXIgYm91bmQgZm9yIHRoZSBtb250aCwgY2F1c2luZyB0aGUgbW9udGggdG8gb3ZlcmZsb3dcbiAgLy8gRm9yIGV4YW1wbGUsIGNyZWF0ZURhdGUoMjAxNywgMSwgMzEpIHdvdWxkIHRyeSB0byBjcmVhdGUgYSBkYXRlIDIwMTcvMDIvMzEgd2hpY2ggaXMgaW52YWxpZFxuICBpZiAocmVzdWx0LmdldE1vbnRoKCkgIT09IG1vbnRoKSB7XG4gICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSBcIiR7ZGF0ZX1cIiBmb3IgbW9udGggd2l0aCBpbmRleCBcIiR7bW9udGh9XCIuYCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bURheXNJbk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICBjb25zdCBsYXN0RGF0ZU9mTW9udGggPSBjcmVhdGVEYXRlV2l0aE92ZXJmbG93KGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG5cbiAgcmV0dXJuIGxhc3REYXRlT2ZNb250aC5nZXREYXRlKCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRhdGUgYnV0IGFsbG93cyB0aGUgbW9udGggYW5kIGRhdGUgdG8gb3ZlcmZsb3cuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURhdGVXaXRoT3ZlcmZsb3coXG4gIHllYXI6IG51bWJlcixcbiAgbW9udGg6IG51bWJlcixcbiAgZGF0ZTogbnVtYmVyLFxuICBob3VyczogbnVtYmVyID0gMCxcbiAgbWludXRlczogbnVtYmVyID0gMCxcbiAgc2Vjb25kczogbnVtYmVyID0gMFxuKTogRGF0ZSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcywgc2Vjb25kcyk7XG5cbiAgaWYgKHllYXIgPj0gMCAmJiB5ZWFyIDwgMTAwKSB7XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKHJlc3VsdC5nZXRGdWxsWWVhcigpIC0gMTkwMCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* index
|
|
3
|
+
*/
|
|
4
|
+
export * from './object.utils';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGluZGV4XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QudXRpbHMnO1xuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* object.utils
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extends an object with the *enumerable* and *own* properties of one or more source objects,
|
|
6
|
+
* similar to Object.assign.
|
|
7
|
+
*
|
|
8
|
+
* @param dest The object which will have properties copied to it.
|
|
9
|
+
* @param sources The source objects from which properties will be copied.
|
|
10
|
+
*/
|
|
11
|
+
export function extendObject(dest, ...sources) {
|
|
12
|
+
if (dest == null) {
|
|
13
|
+
throw TypeError('Cannot convert undefined or null to object');
|
|
14
|
+
}
|
|
15
|
+
for (const source of sources) {
|
|
16
|
+
if (source != null) {
|
|
17
|
+
for (const key in source) {
|
|
18
|
+
if (Object.hasOwn(source, key)) {
|
|
19
|
+
dest[key] = source[key];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return dest;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGlja2VyL3NyYy9saWIvdXRpbHMvb2JqZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBbUIsSUFBTyxFQUFFLEdBQUcsT0FBc0I7SUFDL0UsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakIsTUFBTSxTQUFTLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG9iamVjdC51dGlsc1xuICovXG5cbi8qKlxuICogRXh0ZW5kcyBhbiBvYmplY3Qgd2l0aCB0aGUgKmVudW1lcmFibGUqIGFuZCAqb3duKiBwcm9wZXJ0aWVzIG9mIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzLFxuICogc2ltaWxhciB0byBPYmplY3QuYXNzaWduLlxuICpcbiAqIEBwYXJhbSBkZXN0IFRoZSBvYmplY3Qgd2hpY2ggd2lsbCBoYXZlIHByb3BlcnRpZXMgY29waWVkIHRvIGl0LlxuICogQHBhcmFtIHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzIGZyb20gd2hpY2ggcHJvcGVydGllcyB3aWxsIGJlIGNvcGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZE9iamVjdDxUIGV4dGVuZHMgb2JqZWN0PihkZXN0OiBULCAuLi5zb3VyY2VzOiBBcnJheTxvYmplY3Q+KTogVCB7XG4gIGlmIChkZXN0ID09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICB9XG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIGRlc3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d2luLWFuZ3VsYXItZGF0ZXRpbWUtcGlja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvcGlja2VyL3NyYy9uZXR3aW4tYW5ndWxhci1kYXRldGltZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* picker
|
|
3
|
+
*/
|
|
4
|
+
export { OwlDateTimeModule } from './lib/date-time/date-time.module';
|
|
5
|
+
export { OwlDateTimeIntl } from './lib/date-time/date-time-picker-intl.service';
|
|
6
|
+
export { OwlNativeDateTimeModule } from './lib/date-time/adapter/native-date-time.module';
|
|
7
|
+
export { DateTimeAdapter, OWL_DATE_TIME_LOCALE, OWL_DATE_TIME_LOCALE_PROVIDER } from './lib/date-time/adapter/date-time-adapter.class';
|
|
8
|
+
export { OWL_DATE_TIME_FORMATS } from './lib/date-time/adapter/date-time-format.class';
|
|
9
|
+
export { UnixTimestampDateTimeAdapter } from './lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class';
|
|
10
|
+
export { OWL_UNIX_TIMESTAMP_DATE_TIME_FORMATS } from './lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class';
|
|
11
|
+
export { OwlDateTimeInlineComponent } from './lib/date-time/date-time-inline.component';
|
|
12
|
+
export { OwlDateTimeComponent } from './lib/date-time/date-time-picker.component';
|
|
13
|
+
export * from './lib/date-time/calendar-body.component';
|
|
14
|
+
export * from './lib/date-time/timer.component';
|
|
15
|
+
export * from './lib/date-time/date-time-picker-trigger.directive';
|
|
16
|
+
export * from './lib/date-time/date-time-picker-input.directive';
|
|
17
|
+
export * from './lib/date-time/calendar-multi-year-view.component';
|
|
18
|
+
export * from './lib/date-time/calendar-year-view.component';
|
|
19
|
+
export * from './lib/date-time/calendar-month-view.component';
|
|
20
|
+
export * from './lib/date-time/calendar.component';
|
|
21
|
+
export * from './lib/date-time/timer.component';
|
|
22
|
+
export { NativeDateTimeAdapter } from './lib/date-time/adapter/native-date-time-adapter.class';
|
|
23
|
+
export * from './lib/date-time/options-provider';
|
|
24
|
+
export { DateView } from './lib/date-time/date-time.class';
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUUxRixPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDOUIsTUFBTSxpREFBaUQsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQXNCLE1BQU0sZ0RBQWdELENBQUM7QUFFM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdUZBQXVGLENBQUM7QUFFckksT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFFNUksT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELGNBQWMsb0RBQW9ELENBQUM7QUFFbkUsY0FBYyxrREFBa0QsQ0FBQztBQUVqRSxjQUFjLG9EQUFvRCxDQUFDO0FBRW5FLGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYywrQ0FBK0MsQ0FBQztBQUU5RCxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFL0YsY0FBYyxrQ0FBa0MsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFvRCxNQUFNLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwaWNrZXJcbiAqL1xuXG5leHBvcnQgeyBPd2xEYXRlVGltZU1vZHVsZSB9IGZyb20gJy4vbGliL2RhdGUtdGltZS9kYXRlLXRpbWUubW9kdWxlJztcblxuZXhwb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnLi9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJztcblxuZXhwb3J0IHsgT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUgfSBmcm9tICcuL2xpYi9kYXRlLXRpbWUvYWRhcHRlci9uYXRpdmUtZGF0ZS10aW1lLm1vZHVsZSc7XG5cbmV4cG9ydCB7XG4gIERhdGVUaW1lQWRhcHRlcixcbiAgT1dMX0RBVEVfVElNRV9MT0NBTEUsXG4gIE9XTF9EQVRFX1RJTUVfTE9DQUxFX1BST1ZJREVSXG59IGZyb20gJy4vbGliL2RhdGUtdGltZS9hZGFwdGVyL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcblxuZXhwb3J0IHsgT1dMX0RBVEVfVElNRV9GT1JNQVRTLCBPd2xEYXRlVGltZUZvcm1hdHMgfSBmcm9tICcuL2xpYi9kYXRlLXRpbWUvYWRhcHRlci9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJztcblxuZXhwb3J0IHsgVW5peFRpbWVzdGFtcERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vbGliL2RhdGUtdGltZS9hZGFwdGVyL3VuaXgtdGltZXN0YW1wLWFkYXB0ZXIvdW5peC10aW1lc3RhbXAtZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuXG5leHBvcnQgeyBPV0xfVU5JWF9USU1FU1RBTVBfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2xpYi9kYXRlLXRpbWUvYWRhcHRlci91bml4LXRpbWVzdGFtcC1hZGFwdGVyL3VuaXgtdGltZXN0YW1wLWRhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuXG5leHBvcnQgeyBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2RhdGUtdGltZS9kYXRlLXRpbWUtaW5saW5lLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB7IE93bERhdGVUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS10aW1lL2NhbGVuZGFyLWJvZHkuY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS10aW1lL3RpbWVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtdGltZS9kYXRlLXRpbWUtcGlja2VyLXRyaWdnZXIuZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXItaW5wdXQuZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS10aW1lL2NhbGVuZGFyLW11bHRpLXllYXItdmlldy5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtdGltZS9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtdGltZS9jYWxlbmRhci5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXRpbWUvdGltZXIuY29tcG9uZW50JztcblxuZXhwb3J0IHsgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9saWIvZGF0ZS10aW1lL2FkYXB0ZXIvbmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS10aW1lL29wdGlvbnMtcHJvdmlkZXInO1xuXG5leHBvcnQgeyBEYXRlVmlldywgRGF0ZVZpZXdUeXBlLCBQaWNrZXJNb2RlLCBQaWNrZXJUeXBlLCBTZWxlY3RNb2RlIH0gZnJvbSAnLi9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS5jbGFzcyc7XG4iXX0=
|