@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.
Files changed (79) hide show
  1. package/README.md +225 -0
  2. package/assets/style/picker.min.css +1 -0
  3. package/esm2022/lib/date-time/adapter/date-time-adapter.class.mjs +120 -0
  4. package/esm2022/lib/date-time/adapter/date-time-format.class.mjs +7 -0
  5. package/esm2022/lib/date-time/adapter/native-date-time-adapter.class.mjs +253 -0
  6. package/esm2022/lib/date-time/adapter/native-date-time-format.class.mjs +16 -0
  7. package/esm2022/lib/date-time/adapter/native-date-time.module.mjs +45 -0
  8. package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.mjs +228 -0
  9. package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.mjs +16 -0
  10. package/esm2022/lib/date-time/calendar-body.component.mjs +146 -0
  11. package/esm2022/lib/date-time/calendar-month-view.component.mjs +436 -0
  12. package/esm2022/lib/date-time/calendar-multi-year-view.component.mjs +366 -0
  13. package/esm2022/lib/date-time/calendar-year-view.component.mjs +362 -0
  14. package/esm2022/lib/date-time/calendar.component.mjs +368 -0
  15. package/esm2022/lib/date-time/date-time-inline.component.mjs +293 -0
  16. package/esm2022/lib/date-time/date-time-picker-container.component.mjs +405 -0
  17. package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +598 -0
  18. package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +62 -0
  19. package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +64 -0
  20. package/esm2022/lib/date-time/date-time-picker.animations.mjs +21 -0
  21. package/esm2022/lib/date-time/date-time-picker.component.mjs +564 -0
  22. package/esm2022/lib/date-time/date-time.class.mjs +176 -0
  23. package/esm2022/lib/date-time/date-time.module.mjs +83 -0
  24. package/esm2022/lib/date-time/numberedFixLen.pipe.mjs +28 -0
  25. package/esm2022/lib/date-time/options-provider.mjs +34 -0
  26. package/esm2022/lib/date-time/timer-box.component.mjs +140 -0
  27. package/esm2022/lib/date-time/timer.component.mjs +279 -0
  28. package/esm2022/lib/dialog/dialog-config.class.mjs +59 -0
  29. package/esm2022/lib/dialog/dialog-container.component.mjs +232 -0
  30. package/esm2022/lib/dialog/dialog-ref.class.mjs +134 -0
  31. package/esm2022/lib/dialog/dialog.module.mjs +26 -0
  32. package/esm2022/lib/dialog/dialog.service.mjs +228 -0
  33. package/esm2022/lib/utils/array.utils.mjs +12 -0
  34. package/esm2022/lib/utils/constants.mjs +34 -0
  35. package/esm2022/lib/utils/date.utils.mjs +49 -0
  36. package/esm2022/lib/utils/index.mjs +5 -0
  37. package/esm2022/lib/utils/object.utils.mjs +26 -0
  38. package/esm2022/netwin-angular-datetime-picker.mjs +5 -0
  39. package/esm2022/public_api.mjs +25 -0
  40. package/fesm2022/netwin-angular-datetime-picker.mjs +5751 -0
  41. package/fesm2022/netwin-angular-datetime-picker.mjs.map +1 -0
  42. package/index.d.ts +5 -0
  43. package/lib/date-time/adapter/date-time-adapter.class.d.ts +193 -0
  44. package/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
  45. package/lib/date-time/adapter/native-date-time-adapter.class.d.ts +72 -0
  46. package/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
  47. package/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
  48. package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.d.ts +67 -0
  49. package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.d.ts +5 -0
  50. package/lib/date-time/calendar-body.component.d.ts +79 -0
  51. package/lib/date-time/calendar-month-view.component.d.ts +141 -0
  52. package/lib/date-time/calendar-multi-year-view.component.d.ts +107 -0
  53. package/lib/date-time/calendar-year-view.component.d.ts +120 -0
  54. package/lib/date-time/calendar.component.d.ts +154 -0
  55. package/lib/date-time/date-time-inline.component.d.ts +102 -0
  56. package/lib/date-time/date-time-picker-container.component.d.ts +130 -0
  57. package/lib/date-time/date-time-picker-input.directive.d.ts +164 -0
  58. package/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
  59. package/lib/date-time/date-time-picker-trigger.directive.d.ts +23 -0
  60. package/lib/date-time/date-time-picker.animations.d.ts +8 -0
  61. package/lib/date-time/date-time-picker.component.d.ts +173 -0
  62. package/lib/date-time/date-time.class.d.ts +103 -0
  63. package/lib/date-time/date-time.module.d.ts +23 -0
  64. package/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
  65. package/lib/date-time/options-provider.d.ts +23 -0
  66. package/lib/date-time/timer-box.component.d.ts +42 -0
  67. package/lib/date-time/timer.component.d.ts +131 -0
  68. package/lib/dialog/dialog-config.class.d.ts +169 -0
  69. package/lib/dialog/dialog-container.component.d.ts +58 -0
  70. package/lib/dialog/dialog-ref.class.d.ts +51 -0
  71. package/lib/dialog/dialog.module.d.ts +11 -0
  72. package/lib/dialog/dialog.service.d.ts +76 -0
  73. package/lib/utils/array.utils.d.ts +5 -0
  74. package/lib/utils/constants.d.ts +19 -0
  75. package/lib/utils/date.utils.d.ts +12 -0
  76. package/lib/utils/index.d.ts +4 -0
  77. package/lib/utils/object.utils.d.ts +11 -0
  78. package/package.json +51 -0
  79. package/public_api.d.ts +24 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * date-time.class
3
+ */
4
+ import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
5
+ import { Directive, Inject, Input, Optional } from '@angular/core';
6
+ import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./adapter/date-time-adapter.class";
9
+ let nextUniqueId = 0;
10
+ export var DateView;
11
+ (function (DateView) {
12
+ DateView["MONTH"] = "month";
13
+ DateView["YEAR"] = "year";
14
+ DateView["MULTI_YEARS"] = "multi-years";
15
+ })(DateView || (DateView = {}));
16
+ export class OwlDateTime {
17
+ get showSecondsTimer() {
18
+ return this._showSecondsTimer;
19
+ }
20
+ set showSecondsTimer(val) {
21
+ this._showSecondsTimer = coerceBooleanProperty(val);
22
+ }
23
+ get hour12Timer() {
24
+ return this._hour12Timer;
25
+ }
26
+ set hour12Timer(val) {
27
+ this._hour12Timer = coerceBooleanProperty(val);
28
+ }
29
+ get stepHour() {
30
+ return this._stepHour;
31
+ }
32
+ set stepHour(val) {
33
+ this._stepHour = coerceNumberProperty(val, 1);
34
+ }
35
+ get stepMinute() {
36
+ return this._stepMinute;
37
+ }
38
+ set stepMinute(val) {
39
+ this._stepMinute = coerceNumberProperty(val, 1);
40
+ }
41
+ get stepSecond() {
42
+ return this._stepSecond;
43
+ }
44
+ set stepSecond(val) {
45
+ this._stepSecond = coerceNumberProperty(val, 1);
46
+ }
47
+ get firstDayOfWeek() {
48
+ return this._firstDayOfWeek;
49
+ }
50
+ set firstDayOfWeek(value) {
51
+ value = coerceNumberProperty(value);
52
+ if (value > 6 || value < 0) {
53
+ this._firstDayOfWeek = undefined;
54
+ }
55
+ else {
56
+ this._firstDayOfWeek = value;
57
+ }
58
+ }
59
+ get hideOtherMonths() {
60
+ return this._hideOtherMonths;
61
+ }
62
+ set hideOtherMonths(val) {
63
+ this._hideOtherMonths = coerceBooleanProperty(val);
64
+ }
65
+ get id() {
66
+ return this._id;
67
+ }
68
+ get formatString() {
69
+ if (this.pickerType === 'both') {
70
+ return this.dateTimeFormats.fullPickerInput;
71
+ }
72
+ if (this.pickerType === 'calendar') {
73
+ return this.dateTimeFormats.datePickerInput;
74
+ }
75
+ return this.dateTimeFormats.timePickerInput;
76
+ }
77
+ get disabled() {
78
+ return false;
79
+ }
80
+ constructor(dateTimeAdapter, dateTimeFormats) {
81
+ this.dateTimeAdapter = dateTimeAdapter;
82
+ this.dateTimeFormats = dateTimeFormats;
83
+ /**
84
+ * Whether to show the second's timer
85
+ */
86
+ this._showSecondsTimer = false;
87
+ /**
88
+ * Whether the timer is in hour12 format
89
+ */
90
+ this._hour12Timer = false;
91
+ /**
92
+ * The view that the calendar should start in.
93
+ */
94
+ this.startView = DateView.MONTH;
95
+ /**
96
+ * Whether to should only the year and multi-year views.
97
+ */
98
+ this.yearOnly = false;
99
+ /**
100
+ * Whether to should only the multi-year view.
101
+ */
102
+ this.multiyearOnly = false;
103
+ /**
104
+ * Hours to change per step
105
+ */
106
+ this._stepHour = 1;
107
+ /**
108
+ * Minutes to change per step
109
+ */
110
+ this._stepMinute = 1;
111
+ /**
112
+ * Seconds to change per step
113
+ */
114
+ this._stepSecond = 1;
115
+ /**
116
+ * Whether to hide dates in other months at the start or end of the current month.
117
+ */
118
+ this._hideOtherMonths = false;
119
+ /**
120
+ * Date Time Checker to check if the give dateTime is selectable
121
+ */
122
+ this.dateTimeChecker = (dateTime) => {
123
+ return (!!dateTime &&
124
+ (!this.dateTimeFilter || this.dateTimeFilter(dateTime)) &&
125
+ (!this.minDateTime || this.dateTimeAdapter.compare(dateTime, this.minDateTime) >= 0) &&
126
+ (!this.maxDateTime || this.dateTimeAdapter.compare(dateTime, this.maxDateTime) <= 0));
127
+ };
128
+ if (!this.dateTimeAdapter) {
129
+ throw Error(`OwlDateTimePicker: No provider found for DateTimeAdapter. You must import one of the following ` +
130
+ `modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +
131
+ `custom implementation.`);
132
+ }
133
+ if (!this.dateTimeFormats) {
134
+ throw Error(`OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following ` +
135
+ `modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +
136
+ `custom implementation.`);
137
+ }
138
+ this._id = `owl-dt-picker-${nextUniqueId++}`;
139
+ }
140
+ getValidDate(obj) {
141
+ return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDateTime, deps: [{ token: i1.DateTimeAdapter, optional: true }, { token: OWL_DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
144
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: OwlDateTime, inputs: { showSecondsTimer: "showSecondsTimer", hour12Timer: "hour12Timer", startView: "startView", yearOnly: "yearOnly", multiyearOnly: "multiyearOnly", stepHour: "stepHour", stepMinute: "stepMinute", stepSecond: "stepSecond", firstDayOfWeek: "firstDayOfWeek", hideOtherMonths: "hideOtherMonths" }, ngImport: i0 }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDateTime, decorators: [{
147
+ type: Directive
148
+ }], ctorParameters: () => [{ type: i1.DateTimeAdapter, decorators: [{
149
+ type: Optional
150
+ }] }, { type: undefined, decorators: [{
151
+ type: Optional
152
+ }, {
153
+ type: Inject,
154
+ args: [OWL_DATE_TIME_FORMATS]
155
+ }] }], propDecorators: { showSecondsTimer: [{
156
+ type: Input
157
+ }], hour12Timer: [{
158
+ type: Input
159
+ }], startView: [{
160
+ type: Input
161
+ }], yearOnly: [{
162
+ type: Input
163
+ }], multiyearOnly: [{
164
+ type: Input
165
+ }], stepHour: [{
166
+ type: Input
167
+ }], stepMinute: [{
168
+ type: Input
169
+ }], stepSecond: [{
170
+ type: Input
171
+ }], firstDayOfWeek: [{
172
+ type: Input
173
+ }], hideOtherMonths: [{
174
+ type: Input
175
+ }] } });
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGlja2VyL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSxxQkFBcUIsRUFBc0IsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBRTdGLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQVFyQixNQUFNLENBQU4sSUFBWSxRQUlYO0FBSkQsV0FBWSxRQUFRO0lBQ2xCLDJCQUFlLENBQUE7SUFDZix5QkFBYSxDQUFBO0lBQ2IsdUNBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQUpXLFFBQVEsS0FBUixRQUFRLFFBSW5CO0FBS0QsTUFBTSxPQUFnQixXQUFXO0lBSy9CLElBQ0ksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLEdBQVk7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFNRCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEdBQVk7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBd0JELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFR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LFFBQVE7c0JBRFAsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBUUYsUUFBUTtzQkFEWCxLQUFLO2dCQWNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixVQUFVO3NCQURiLEtBQUs7Z0JBY0YsY0FBYztzQkFEakIsS0FBSztnQkFtQkYsZUFBZTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGF0ZS10aW1lLmNsYXNzXG4gKi9cbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX0RBVEVfVElNRV9GT1JNQVRTLCBPd2xEYXRlVGltZUZvcm1hdHMgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgdHlwZSBQaWNrZXJUeXBlID0gJ2JvdGgnIHwgJ2NhbGVuZGFyJyB8ICd0aW1lcic7XG5cbmV4cG9ydCB0eXBlIFBpY2tlck1vZGUgPSAncG9wdXAnIHwgJ2RpYWxvZycgfCAnaW5saW5lJztcblxuZXhwb3J0IHR5cGUgU2VsZWN0TW9kZSA9ICdzaW5nbGUnIHwgJ3JhbmdlJyB8ICdyYW5nZUZyb20nIHwgJ3JhbmdlVG8nO1xuXG5leHBvcnQgZW51bSBEYXRlVmlldyB7XG4gIE1PTlRIID0gJ21vbnRoJyxcbiAgWUVBUiA9ICd5ZWFyJyxcbiAgTVVMVElfWUVBUlMgPSAnbXVsdGkteWVhcnMnXG59XG5cbmV4cG9ydCB0eXBlIERhdGVWaWV3VHlwZSA9IERhdGVWaWV3Lk1PTlRIIHwgRGF0ZVZpZXcuWUVBUiB8IERhdGVWaWV3Lk1VTFRJX1lFQVJTO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPd2xEYXRlVGltZTxUPiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHNlY29uZCdzIHRpbWVyXG4gICAqL1xuICBwcml2YXRlIF9zaG93U2Vjb25kc1RpbWVyID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBzaG93U2Vjb25kc1RpbWVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93U2Vjb25kc1RpbWVyO1xuICB9XG5cbiAgc2V0IHNob3dTZWNvbmRzVGltZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd1NlY29uZHNUaW1lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRpbWVyIGlzIGluIGhvdXIxMiBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgX2hvdXIxMlRpbWVyID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBob3VyMTJUaW1lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faG91cjEyVGltZXI7XG4gIH1cblxuICBzZXQgaG91cjEyVGltZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faG91cjEyVGltZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmlldyB0aGF0IHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgaW4uXG4gICAqL1xuICBASW5wdXQoKVxuICBzdGFydFZpZXc6IERhdGVWaWV3VHlwZSA9IERhdGVWaWV3Lk1PTlRIO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3VsZCBvbmx5IHRoZSB5ZWFyIGFuZCBtdWx0aS15ZWFyIHZpZXdzLlxuICAgKi9cbiAgQElucHV0KClcbiAgeWVhck9ubHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG91bGQgb25seSB0aGUgbXVsdGkteWVhciB2aWV3LlxuICAgKi9cbiAgQElucHV0KClcbiAgbXVsdGl5ZWFyT25seSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIb3VycyB0byBjaGFuZ2UgcGVyIHN0ZXBcbiAgICovXG4gIHByaXZhdGUgX3N0ZXBIb3VyID0gMTtcbiAgQElucHV0KClcbiAgZ2V0IHN0ZXBIb3VyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXBIb3VyO1xuICB9XG5cbiAgc2V0IHN0ZXBIb3VyKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RlcEhvdXIgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWwsIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbnV0ZXMgdG8gY2hhbmdlIHBlciBzdGVwXG4gICAqL1xuICBwcml2YXRlIF9zdGVwTWludXRlID0gMTtcbiAgQElucHV0KClcbiAgZ2V0IHN0ZXBNaW51dGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RlcE1pbnV0ZTtcbiAgfVxuXG4gIHNldCBzdGVwTWludXRlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RlcE1pbnV0ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbCwgMSk7XG4gIH1cblxuICAvKipcbiAgICogU2Vjb25kcyB0byBjaGFuZ2UgcGVyIHN0ZXBcbiAgICovXG4gIHByaXZhdGUgX3N0ZXBTZWNvbmQgPSAxO1xuICBASW5wdXQoKVxuICBnZXQgc3RlcFNlY29uZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGVwU2Vjb25kO1xuICB9XG5cbiAgc2V0IHN0ZXBTZWNvbmQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGVwU2Vjb25kID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gICAqL1xuICBwcml2YXRlIF9maXJzdERheU9mV2VlazogbnVtYmVyO1xuICBASW5wdXQoKVxuICBnZXQgZmlyc3REYXlPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrO1xuICB9XG5cbiAgc2V0IGZpcnN0RGF5T2ZXZWVrKHZhbHVlOiBudW1iZXIpIHtcbiAgICB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPiA2IHx8IHZhbHVlIDwgMCkge1xuICAgICAgdGhpcy5fZmlyc3REYXlPZldlZWsgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGlkZSBkYXRlcyBpbiBvdGhlciBtb250aHMgYXQgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgY3VycmVudCBtb250aC5cbiAgICovXG4gIHByaXZhdGUgX2hpZGVPdGhlck1vbnRocyA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgaGlkZU90aGVyTW9udGhzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oaWRlT3RoZXJNb250aHM7XG4gIH1cblxuICBzZXQgaGlkZU90aGVyTW9udGhzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVPdGhlck1vbnRocyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaWQ6IHN0cmluZztcbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgYWJzdHJhY3QgZ2V0IHNlbGVjdGVkKCk6IFQgfCBudWxsO1xuXG4gIGFic3RyYWN0IGdldCBzZWxlY3RlZHMoKTogQXJyYXk8VD4gfCBudWxsO1xuXG4gIGFic3RyYWN0IGdldCBkYXRlVGltZUZpbHRlcigpOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgZ2V0IG1heERhdGVUaW1lKCk6IFQgfCBudWxsO1xuXG4gIGFic3RyYWN0IGdldCBtaW5EYXRlVGltZSgpOiBUIHwgbnVsbDtcblxuICBhYnN0cmFjdCBnZXQgc2VsZWN0TW9kZSgpOiBTZWxlY3RNb2RlO1xuXG4gIGFic3RyYWN0IGdldCBzdGFydEF0KCk6IFQgfCBudWxsO1xuXG4gIGFic3RyYWN0IGdldCBlbmRBdCgpOiBUIHwgbnVsbDtcblxuICBhYnN0cmFjdCBnZXQgb3BlbmVkKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgZ2V0IHBpY2tlck1vZGUoKTogUGlja2VyTW9kZTtcblxuICBhYnN0cmFjdCBnZXQgcGlja2VyVHlwZSgpOiBQaWNrZXJUeXBlO1xuXG4gIGFic3RyYWN0IGdldCBpc0luU2luZ2xlTW9kZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGdldCBpc0luUmFuZ2VNb2RlKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3Qgc2VsZWN0KGRhdGU6IFQgfCBBcnJheTxUPik6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgeWVhclNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8VD47XG5cbiAgYWJzdHJhY3QgbW9udGhTZWxlY3RlZDogRXZlbnRFbWl0dGVyPFQ+O1xuXG4gIGFic3RyYWN0IGRhdGVTZWxlY3RlZDogRXZlbnRFbWl0dGVyPFQ+O1xuXG4gIGFic3RyYWN0IHNlbGVjdFllYXIobm9ybWFsaXplZFllYXI6IFQpOiB2b2lkO1xuXG4gIGFic3RyYWN0IHNlbGVjdE1vbnRoKG5vcm1hbGl6ZWRNb250aDogVCk6IHZvaWQ7XG5cbiAgYWJzdHJhY3Qgc2VsZWN0RGF0ZShub3JtYWxpemVkRGF0ZTogVCk6IHZvaWQ7XG5cbiAgZ2V0IGZvcm1hdFN0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnBpY2tlclR5cGUgPT09ICdib3RoJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGb3JtYXRzLmZ1bGxQaWNrZXJJbnB1dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUZvcm1hdHMuZGF0ZVBpY2tlcklucHV0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRm9ybWF0cy50aW1lUGlja2VySW5wdXQ7XG4gIH1cblxuICAvKipcbiAgICogRGF0ZSBUaW1lIENoZWNrZXIgdG8gY2hlY2sgaWYgdGhlIGdpdmUgZGF0ZVRpbWUgaXMgc2VsZWN0YWJsZVxuICAgKi9cbiAgcHVibGljIGRhdGVUaW1lQ2hlY2tlciA9IChkYXRlVGltZTogVCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIWRhdGVUaW1lICYmXG4gICAgICAoIXRoaXMuZGF0ZVRpbWVGaWx0ZXIgfHwgdGhpcy5kYXRlVGltZUZpbHRlcihkYXRlVGltZSkpICYmXG4gICAgICAoIXRoaXMubWluRGF0ZVRpbWUgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlVGltZSwgdGhpcy5taW5EYXRlVGltZSkgPj0gMCkgJiZcbiAgICAgICghdGhpcy5tYXhEYXRlVGltZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGVUaW1lLCB0aGlzLm1heERhdGVUaW1lKSA8PSAwKVxuICAgICk7XG4gIH07XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE9XTF9EQVRFX1RJTUVfRk9STUFUUylcbiAgICBwcm90ZWN0ZWQgZGF0ZVRpbWVGb3JtYXRzOiBPd2xEYXRlVGltZUZvcm1hdHNcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmRhdGVUaW1lQWRhcHRlcikge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBPd2xEYXRlVGltZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yIERhdGVUaW1lQWRhcHRlci4gWW91IG11c3QgaW1wb3J0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGAgK1xuICAgICAgICAgIGBtb2R1bGVzIGF0IHlvdXIgYXBwbGljYXRpb24gcm9vdDogT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUsIE93bE1vbWVudERhdGVUaW1lTW9kdWxlLCBvciBwcm92aWRlIGEgYCArXG4gICAgICAgICAgYGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgT3dsRGF0ZVRpbWVQaWNrZXI6IE5vIHByb3ZpZGVyIGZvdW5kIGZvciBPV0xfREFURV9USU1FX0ZPUk1BVFMuIFlvdSBtdXN0IGltcG9ydCBvbmUgb2YgdGhlIGZvbGxvd2luZyBgICtcbiAgICAgICAgICBgbW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlLCBPd2xNb21lbnREYXRlVGltZU1vZHVsZSwgb3IgcHJvdmlkZSBhIGAgK1xuICAgICAgICAgIGBjdXN0b20gaW1wbGVtZW50YXRpb24uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pZCA9IGBvd2wtZHQtcGlja2VyLSR7bmV4dFVuaXF1ZUlkKyt9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRWYWxpZERhdGUob2JqOiBhbnkpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopID8gb2JqIDogbnVsbDtcbiAgfVxufVxuIl19
@@ -0,0 +1,83 @@
1
+ /**
2
+ * date-time.module
3
+ */
4
+ import { A11yModule } from '@angular/cdk/a11y';
5
+ import { OverlayModule } from '@angular/cdk/overlay';
6
+ import { CommonModule } from '@angular/common';
7
+ import { NgModule } from '@angular/core';
8
+ import { OwlDialogModule } from '../dialog/dialog.module';
9
+ import { OwlCalendarBodyComponent } from './calendar-body.component';
10
+ import { OwlMonthViewComponent } from './calendar-month-view.component';
11
+ import { OwlMultiYearViewComponent } from './calendar-multi-year-view.component';
12
+ import { OwlYearViewComponent } from './calendar-year-view.component';
13
+ import { OwlCalendarComponent } from './calendar.component';
14
+ import { OwlDateTimeInlineComponent } from './date-time-inline.component';
15
+ import { OwlDateTimeContainerComponent } from './date-time-picker-container.component';
16
+ import { OwlDateTimeInputDirective } from './date-time-picker-input.directive';
17
+ import { OwlDateTimeIntl } from './date-time-picker-intl.service';
18
+ import { OwlDateTimeTriggerDirective } from './date-time-picker-trigger.directive';
19
+ import { OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, OwlDateTimeComponent } from './date-time-picker.component';
20
+ import { NumberFixedLenPipe } from './numberedFixLen.pipe';
21
+ import { optionsProviders } from './options-provider';
22
+ import { OwlTimerBoxComponent } from './timer-box.component';
23
+ import { OwlTimerComponent } from './timer.component';
24
+ import * as i0 from "@angular/core";
25
+ export class OwlDateTimeModule {
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
27
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: OwlDateTimeModule, declarations: [OwlDateTimeTriggerDirective,
28
+ OwlDateTimeInputDirective,
29
+ OwlDateTimeComponent,
30
+ OwlDateTimeContainerComponent,
31
+ OwlMultiYearViewComponent,
32
+ OwlYearViewComponent,
33
+ OwlMonthViewComponent,
34
+ OwlTimerComponent,
35
+ OwlTimerBoxComponent,
36
+ OwlCalendarComponent,
37
+ OwlCalendarBodyComponent,
38
+ NumberFixedLenPipe,
39
+ OwlDateTimeInlineComponent], imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule], exports: [OwlCalendarComponent,
40
+ OwlTimerComponent,
41
+ OwlDateTimeTriggerDirective,
42
+ OwlDateTimeInputDirective,
43
+ OwlDateTimeComponent,
44
+ OwlDateTimeInlineComponent,
45
+ OwlMultiYearViewComponent,
46
+ OwlYearViewComponent,
47
+ OwlMonthViewComponent] }); }
48
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDateTimeModule, providers: [OwlDateTimeIntl, OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, ...optionsProviders], imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule] }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlDateTimeModule, decorators: [{
51
+ type: NgModule,
52
+ args: [{
53
+ imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule],
54
+ exports: [
55
+ OwlCalendarComponent,
56
+ OwlTimerComponent,
57
+ OwlDateTimeTriggerDirective,
58
+ OwlDateTimeInputDirective,
59
+ OwlDateTimeComponent,
60
+ OwlDateTimeInlineComponent,
61
+ OwlMultiYearViewComponent,
62
+ OwlYearViewComponent,
63
+ OwlMonthViewComponent
64
+ ],
65
+ declarations: [
66
+ OwlDateTimeTriggerDirective,
67
+ OwlDateTimeInputDirective,
68
+ OwlDateTimeComponent,
69
+ OwlDateTimeContainerComponent,
70
+ OwlMultiYearViewComponent,
71
+ OwlYearViewComponent,
72
+ OwlMonthViewComponent,
73
+ OwlTimerComponent,
74
+ OwlTimerBoxComponent,
75
+ OwlCalendarComponent,
76
+ OwlCalendarBodyComponent,
77
+ NumberFixedLenPipe,
78
+ OwlDateTimeInlineComponent
79
+ ],
80
+ providers: [OwlDateTimeIntl, OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, ...optionsProviders]
81
+ }]
82
+ }] });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvbGliL2RhdGUtdGltZS9kYXRlLXRpbWUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWdDdEQsTUFBTSxPQUFPLGlCQUFpQjs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBaEIxQiwyQkFBMkI7WUFDM0IseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUNwQiw2QkFBNkI7WUFDN0IseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQixvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLGtCQUFrQjtZQUNsQiwwQkFBMEIsYUF6QmxCLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsYUFFaEUsb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQiwyQkFBMkI7WUFDM0IseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUNwQiwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUNwQixxQkFBcUI7K0dBbUJaLGlCQUFpQixhQUZqQixDQUFDLGVBQWUsRUFBRSxxQ0FBcUMsRUFBRSxHQUFHLGdCQUFnQixDQUFDLFlBM0I5RSxZQUFZLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxVQUFVOzsyRkE2QnZELGlCQUFpQjtrQkE5QjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDO29CQUNuRSxPQUFPLEVBQUU7d0JBQ1Asb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLDJCQUEyQjt3QkFDM0IseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLHFCQUFxQjtxQkFDdEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLDJCQUEyQjt3QkFDM0IseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLDZCQUE2Qjt3QkFDN0IseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixrQkFBa0I7d0JBQ2xCLDBCQUEwQjtxQkFDM0I7b0JBQ0QsU0FBUyxFQUFFLENBQUMsZUFBZSxFQUFFLHFDQUFxQyxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7aUJBQ3pGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkYXRlLXRpbWUubW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE93bERpYWxvZ01vZHVsZSB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cubW9kdWxlJztcbmltcG9ydCB7IE93bENhbGVuZGFyQm9keUNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3dsTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IE93bFllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IE93bENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWludGwuc2VydmljZSc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT1dMX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUiwgT3dsRGF0ZVRpbWVDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckZpeGVkTGVuUGlwZSB9IGZyb20gJy4vbnVtYmVyZWRGaXhMZW4ucGlwZSc7XG5pbXBvcnQgeyBvcHRpb25zUHJvdmlkZXJzIH0gZnJvbSAnLi9vcHRpb25zLXByb3ZpZGVyJztcbmltcG9ydCB7IE93bFRpbWVyQm94Q29tcG9uZW50IH0gZnJvbSAnLi90aW1lci1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE93bFRpbWVyQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBPdmVybGF5TW9kdWxlLCBPd2xEaWFsb2dNb2R1bGUsIEExMXlNb2R1bGVdLFxuICBleHBvcnRzOiBbXG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgT3dsVGltZXJDb21wb25lbnQsXG4gICAgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUsXG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQsXG4gICAgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQsXG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudCxcbiAgICBPd2xZZWFyVmlld0NvbXBvbmVudCxcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnRcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUsXG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQsXG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQsXG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudCxcbiAgICBPd2xZZWFyVmlld0NvbXBvbmVudCxcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQsXG4gICAgT3dsVGltZXJDb21wb25lbnQsXG4gICAgT3dsVGltZXJCb3hDb21wb25lbnQsXG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LFxuICAgIE51bWJlckZpeGVkTGVuUGlwZSxcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtPd2xEYXRlVGltZUludGwsIE9XTF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIsIC4uLm9wdGlvbnNQcm92aWRlcnNdXG59KVxuZXhwb3J0IGNsYXNzIE93bERhdGVUaW1lTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,28 @@
1
+ /**
2
+ * numberFixedLen.pipe
3
+ */
4
+ import { Pipe } from '@angular/core';
5
+ import * as i0 from "@angular/core";
6
+ export class NumberFixedLenPipe {
7
+ transform(num, len) {
8
+ const number = Math.floor(num);
9
+ const length = Math.floor(len);
10
+ if (num === null || isNaN(number) || isNaN(length)) {
11
+ return num;
12
+ }
13
+ let numString = number.toString();
14
+ while (numString.length < length) {
15
+ numString = `0${numString}`;
16
+ }
17
+ return numString;
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumberFixedLenPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
20
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: NumberFixedLenPipe, name: "numberFixedLen" }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumberFixedLenPipe, decorators: [{
23
+ type: Pipe,
24
+ args: [{
25
+ name: 'numberFixedLen'
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyZWRGaXhMZW4ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvbGliL2RhdGUtdGltZS9udW1iZXJlZEZpeExlbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBS3BELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsU0FBUyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQixJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVsQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDakMsU0FBUyxHQUFHLElBQU0sU0FBUyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OEdBaEJVLGtCQUFrQjs0R0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUg5QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBudW1iZXJGaXhlZExlbi5waXBlXG4gKi9cblxuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdudW1iZXJGaXhlZExlbidcbn0pXG5leHBvcnQgY2xhc3MgTnVtYmVyRml4ZWRMZW5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShudW06IG51bWJlciwgbGVuOiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IG51bWJlciA9IE1hdGguZmxvb3IobnVtKTtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLmZsb29yKGxlbik7XG5cbiAgICBpZiAobnVtID09PSBudWxsIHx8IGlzTmFOKG51bWJlcikgfHwgaXNOYU4obGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG5cbiAgICBsZXQgbnVtU3RyaW5nID0gbnVtYmVyLnRvU3RyaW5nKCk7XG5cbiAgICB3aGlsZSAobnVtU3RyaW5nLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgbnVtU3RyaW5nID0gYDAkeyAgbnVtU3RyaW5nfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bVN0cmluZztcbiAgfVxufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export function defaultOptionsFactory() {
3
+ return DefaultOptions.create();
4
+ }
5
+ export function multiYearOptionsFactory(options) {
6
+ return options.multiYear;
7
+ }
8
+ export class DefaultOptions {
9
+ static create() {
10
+ // Always return new instance
11
+ return {
12
+ multiYear: {
13
+ yearRows: 7,
14
+ yearsPerRow: 3
15
+ }
16
+ };
17
+ }
18
+ }
19
+ export class OptionsTokens {
20
+ static { this.all = new InjectionToken('All options token'); }
21
+ static { this.multiYear = new InjectionToken('Grid view options token'); }
22
+ }
23
+ export const optionsProviders = [
24
+ {
25
+ provide: OptionsTokens.all,
26
+ useFactory: defaultOptionsFactory
27
+ },
28
+ {
29
+ provide: OptionsTokens.multiYear,
30
+ useFactory: multiYearOptionsFactory,
31
+ deps: [OptionsTokens.all]
32
+ }
33
+ ];
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvbGliL2RhdGUtdGltZS9vcHRpb25zLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFekQsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWdCO0lBQ3RELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMzQixDQUFDO0FBUUQsTUFBTSxPQUFPLGNBQWM7SUFDbEIsTUFBTSxDQUFDLE1BQU07UUFDbEIsNkJBQTZCO1FBQzdCLE9BQU87WUFDTCxTQUFTLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsV0FBVyxFQUFFLENBQUM7YUFDZjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQWdCLGFBQWE7YUFDbkIsUUFBRyxHQUFHLElBQUksY0FBYyxDQUFVLG1CQUFtQixDQUFDLENBQUM7YUFDdkQsY0FBUyxHQUFHLElBQUksY0FBYyxDQUF1Qix5QkFBeUIsQ0FBQyxDQUFDOztBQUdoRyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBb0I7SUFDL0M7UUFDRSxPQUFPLEVBQUUsYUFBYSxDQUFDLEdBQUc7UUFDMUIsVUFBVSxFQUFFLHFCQUFxQjtLQUNsQztJQUNEO1FBQ0UsT0FBTyxFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQ2hDLFVBQVUsRUFBRSx1QkFBdUI7UUFDbkMsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztLQUMxQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zRmFjdG9yeSgpIHtcbiAgcmV0dXJuIERlZmF1bHRPcHRpb25zLmNyZWF0ZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpWWVhck9wdGlvbnNGYWN0b3J5KG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMubXVsdGlZZWFyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBtdWx0aVllYXI6IHtcbiAgICB5ZWFyc1BlclJvdzogbnVtYmVyO1xuICAgIHllYXJSb3dzOiBudW1iZXI7XG4gIH07XG59XG5leHBvcnQgY2xhc3MgRGVmYXVsdE9wdGlvbnMge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSgpOiBPcHRpb25zIHtcbiAgICAvLyBBbHdheXMgcmV0dXJuIG5ldyBpbnN0YW5jZVxuICAgIHJldHVybiB7XG4gICAgICBtdWx0aVllYXI6IHtcbiAgICAgICAgeWVhclJvd3M6IDcsXG4gICAgICAgIHllYXJzUGVyUm93OiAzXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT3B0aW9uc1Rva2VucyB7XG4gIHB1YmxpYyBzdGF0aWMgYWxsID0gbmV3IEluamVjdGlvblRva2VuPE9wdGlvbnM+KCdBbGwgb3B0aW9ucyB0b2tlbicpO1xuICBwdWJsaWMgc3RhdGljIG11bHRpWWVhciA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPcHRpb25zWydtdWx0aVllYXInXT4oJ0dyaWQgdmlldyBvcHRpb25zIHRva2VuJyk7XG59XG5cbmV4cG9ydCBjb25zdCBvcHRpb25zUHJvdmlkZXJzOiBBcnJheTxQcm92aWRlcj4gPSBbXG4gIHtcbiAgICBwcm92aWRlOiBPcHRpb25zVG9rZW5zLmFsbCxcbiAgICB1c2VGYWN0b3J5OiBkZWZhdWx0T3B0aW9uc0ZhY3RvcnlcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE9wdGlvbnNUb2tlbnMubXVsdGlZZWFyLFxuICAgIHVzZUZhY3Rvcnk6IG11bHRpWWVhck9wdGlvbnNGYWN0b3J5LFxuICAgIGRlcHM6IFtPcHRpb25zVG9rZW5zLmFsbF1cbiAgfVxuXTtcbiJdfQ==
@@ -0,0 +1,140 @@
1
+ /**
2
+ * timer-box.component
3
+ */
4
+ import { coerceNumberProperty } from '@angular/cdk/coercion';
5
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
6
+ import { Subject, Subscription } from 'rxjs';
7
+ import { debounceTime } from 'rxjs/operators';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ export class OwlTimerBoxComponent {
11
+ constructor() {
12
+ this.showDivider = false;
13
+ this.step = 1;
14
+ this.valueChange = new EventEmitter();
15
+ this.inputChange = new EventEmitter();
16
+ this.inputStream = new Subject();
17
+ this.inputStreamSub = Subscription.EMPTY;
18
+ this.hasFocus = false;
19
+ this.onValueInputMouseWheelBind = this.onValueInputMouseWheel.bind(this);
20
+ }
21
+ get displayValue() {
22
+ if (this.hasFocus) {
23
+ // Don't try to reformat the value that user is currently editing
24
+ return this.valueInput.nativeElement.value;
25
+ }
26
+ const value = this.boxValue || this.value;
27
+ if (value === null || isNaN(value)) {
28
+ return '';
29
+ }
30
+ return value < 10 ? `0${value.toString()}` : value.toString();
31
+ }
32
+ get owlDTTimerBoxClass() {
33
+ return true;
34
+ }
35
+ ngOnInit() {
36
+ this.inputStreamSub = this.inputStream.pipe(debounceTime(750)).subscribe((val) => {
37
+ if (val) {
38
+ const inputValue = coerceNumberProperty(val, 0);
39
+ this.updateValueViaInput(inputValue);
40
+ }
41
+ });
42
+ this.bindValueInputMouseWheel();
43
+ }
44
+ ngOnDestroy() {
45
+ this.unbindValueInputMouseWheel();
46
+ this.inputStreamSub.unsubscribe();
47
+ }
48
+ upBtnClicked() {
49
+ this.updateValue(this.value + this.step);
50
+ }
51
+ downBtnClicked() {
52
+ this.updateValue(this.value - this.step);
53
+ }
54
+ handleInputChange(val) {
55
+ this.inputStream.next(val);
56
+ }
57
+ focusIn() {
58
+ this.hasFocus = true;
59
+ }
60
+ focusOut(value) {
61
+ this.hasFocus = false;
62
+ if (value) {
63
+ const inputValue = coerceNumberProperty(value, 0);
64
+ this.updateValueViaInput(inputValue);
65
+ }
66
+ }
67
+ updateValue(value) {
68
+ this.valueChange.emit(value);
69
+ }
70
+ updateValueViaInput(value) {
71
+ if (value > this.max || value < this.min) {
72
+ return;
73
+ }
74
+ this.inputChange.emit(value);
75
+ }
76
+ onValueInputMouseWheel(event) {
77
+ event = event || window.event;
78
+ const delta = event.wheelDelta || -event.deltaY || -event.detail;
79
+ if (delta > 0) {
80
+ if (!this.upBtnDisabled) {
81
+ this.upBtnClicked();
82
+ }
83
+ }
84
+ else if (delta < 0) {
85
+ if (!this.downBtnDisabled) {
86
+ this.downBtnClicked();
87
+ }
88
+ }
89
+ if (event.preventDefault) {
90
+ event.preventDefault();
91
+ }
92
+ else {
93
+ event.returnValue = false;
94
+ }
95
+ }
96
+ bindValueInputMouseWheel() {
97
+ this.valueInput.nativeElement.addEventListener('onwheel' in document ? 'wheel' : 'mousewheel', this.onValueInputMouseWheelBind);
98
+ }
99
+ unbindValueInputMouseWheel() {
100
+ this.valueInput.nativeElement.removeEventListener('onwheel' in document ? 'wheel' : 'mousewheel', this.onValueInputMouseWheelBind);
101
+ }
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlTimerBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: OwlTimerBoxComponent, selector: "owl-date-time-timer-box", inputs: { showDivider: "showDivider", upBtnAriaLabel: "upBtnAriaLabel", upBtnDisabled: "upBtnDisabled", downBtnAriaLabel: "downBtnAriaLabel", downBtnDisabled: "downBtnDisabled", boxValue: "boxValue", value: "value", min: "min", max: "max", step: "step", inputLabel: "inputLabel" }, outputs: { valueChange: "valueChange", inputChange: "inputChange" }, host: { properties: { "class.owl-dt-timer-box": "owlDTTimerBoxClass" } }, viewQueries: [{ propertyName: "valueInput", first: true, predicate: ["valueInput"], descendants: true, static: true }], exportAs: ["owlDateTimeTimerBox"], ngImport: i0, template: "<div\n *ngIf=\"showDivider\"\n aria-hidden=\"true\"\n class=\"owl-dt-timer-divider\"></div>\n<button\n [attr.aria-label]=\"upBtnAriaLabel\"\n [disabled]=\"upBtnDisabled\"\n (click)=\"upBtnClicked()\"\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"-1\"\n type=\"button\">\n <span\n class=\"owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Up\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"100%\"\n style=\"enable-background: new 0 0 451.847 451.846\"\n version=\"1.1\"\n viewBox=\"0 0 451.847 451.846\"\n width=\"100%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\n d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n</button>\n<label class=\"owl-dt-timer-content\">\n <input\n #valueInput\n [value]=\"displayValue\"\n (focusin)=\"focusIn()\"\n (focusout)=\"focusOut(valueInput.value)\"\n (input)=\"handleInputChange(valueInput.value)\"\n (keydown.arrowdown)=\"!downBtnDisabled && downBtnClicked()\"\n (keydown.arrowup)=\"!upBtnDisabled && upBtnClicked()\"\n class=\"owl-dt-timer-input\"\n maxlength=\"2\" />\n <span class=\"owl-hidden-accessible\">{{ inputLabel }}</span>\n</label>\n<button\n [attr.aria-label]=\"downBtnAriaLabel\"\n [disabled]=\"downBtnDisabled\"\n (click)=\"downBtnClicked()\"\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"-1\"\n type=\"button\">\n <span\n class=\"owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Down\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"100%\"\n style=\"enable-background: new 0 0 451.847 451.846\"\n version=\"1.1\"\n viewBox=\"0 0 451.847 451.846\"\n width=\"100%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\n d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n</button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OwlTimerBoxComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ exportAs: 'owlDateTimeTimerBox', selector: 'owl-date-time-timer-box', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, host: {
108
+ '[class.owl-dt-timer-box]': 'owlDTTimerBoxClass'
109
+ }, template: "<div\n *ngIf=\"showDivider\"\n aria-hidden=\"true\"\n class=\"owl-dt-timer-divider\"></div>\n<button\n [attr.aria-label]=\"upBtnAriaLabel\"\n [disabled]=\"upBtnDisabled\"\n (click)=\"upBtnClicked()\"\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"-1\"\n type=\"button\">\n <span\n class=\"owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Up\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"100%\"\n style=\"enable-background: new 0 0 451.847 451.846\"\n version=\"1.1\"\n viewBox=\"0 0 451.847 451.846\"\n width=\"100%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\n d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n</button>\n<label class=\"owl-dt-timer-content\">\n <input\n #valueInput\n [value]=\"displayValue\"\n (focusin)=\"focusIn()\"\n (focusout)=\"focusOut(valueInput.value)\"\n (input)=\"handleInputChange(valueInput.value)\"\n (keydown.arrowdown)=\"!downBtnDisabled && downBtnClicked()\"\n (keydown.arrowup)=\"!upBtnDisabled && upBtnClicked()\"\n class=\"owl-dt-timer-input\"\n maxlength=\"2\" />\n <span class=\"owl-hidden-accessible\">{{ inputLabel }}</span>\n</label>\n<button\n [attr.aria-label]=\"downBtnAriaLabel\"\n [disabled]=\"downBtnDisabled\"\n (click)=\"downBtnClicked()\"\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"-1\"\n type=\"button\">\n <span\n class=\"owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Down\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"100%\"\n style=\"enable-background: new 0 0 451.847 451.846\"\n version=\"1.1\"\n viewBox=\"0 0 451.847 451.846\"\n width=\"100%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\n d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n</button>\n" }]
110
+ }], propDecorators: { showDivider: [{
111
+ type: Input
112
+ }], upBtnAriaLabel: [{
113
+ type: Input
114
+ }], upBtnDisabled: [{
115
+ type: Input
116
+ }], downBtnAriaLabel: [{
117
+ type: Input
118
+ }], downBtnDisabled: [{
119
+ type: Input
120
+ }], boxValue: [{
121
+ type: Input
122
+ }], value: [{
123
+ type: Input
124
+ }], min: [{
125
+ type: Input
126
+ }], max: [{
127
+ type: Input
128
+ }], step: [{
129
+ type: Input
130
+ }], inputLabel: [{
131
+ type: Input
132
+ }], valueChange: [{
133
+ type: Output
134
+ }], inputChange: [{
135
+ type: Output
136
+ }], valueInput: [{
137
+ type: ViewChild,
138
+ args: ['valueInput', { static: true }]
139
+ }] } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXItYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvbGliL2RhdGUtdGltZS90aW1lci1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGlja2VyL3NyYy9saWIvZGF0ZS10aW1lL3RpbWVyLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQWM5QyxNQUFNLE9BQU8sb0JBQW9CO0lBWmpDO1FBYVcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFzQnBCLFNBQUksR0FBRyxDQUFDLENBQUM7UUFJUixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFekMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTNDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUVwQyxtQkFBYyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQXVCakIsK0JBQTBCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQXNGN0U7SUEzR0MsSUFBSSxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsaUVBQWlFO1lBQ2pFLE9BQU8sSUFBSSxD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RyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkE0QkMsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0aW1lci1ib3guY29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuXG4gIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVUaW1lckJveCcsXG4gIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS10aW1lci1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZXItYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZXItYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Mub3dsLWR0LXRpbWVyLWJveF0nOiAnb3dsRFRUaW1lckJveENsYXNzJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE93bFRpbWVyQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzaG93RGl2aWRlciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHVwQnRuQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdXBCdG5EaXNhYmxlZDogYm9vbGVhbjtcblxuICBASW5wdXQoKSBkb3duQnRuQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZG93bkJ0bkRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSB3b3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGJveFxuICAgKiBJZiBpdCBpcyBudWxsLCB0aGUgYm94IHdvdWxkIGRpc3BsYXkgW3ZhbHVlXVxuICAgKiAqL1xuICBASW5wdXQoKSBib3hWYWx1ZTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHZhbHVlOiBudW1iZXI7XG5cbiAgQElucHV0KCkgbWluOiBudW1iZXI7XG5cbiAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgQElucHV0KCkgc3RlcCA9IDE7XG5cbiAgQElucHV0KCkgaW5wdXRMYWJlbDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgaW5wdXRTdHJlYW0gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBpbnB1dFN0cmVhbVN1YiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBwcml2YXRlIGhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgZ2V0IGRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB7XG4gICAgICAvLyBEb24ndCB0cnkgdG8gcmVmb3JtYXQgdGhlIHZhbHVlIHRoYXQgdXNlciBpcyBjdXJyZW50bHkgZWRpdGluZ1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hWYWx1ZSB8fCB0aGlzLnZhbHVlO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSA8IDEwID8gYDAke3ZhbHVlLnRvU3RyaW5nKCl9YCA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgb3dsRFRUaW1lckJveENsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgndmFsdWVJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgdmFsdWVJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBvblZhbHVlSW5wdXRNb3VzZVdoZWVsQmluZCA9IHRoaXMub25WYWx1ZUlucHV0TW91c2VXaGVlbC5iaW5kKHRoaXMpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlucHV0U3RyZWFtU3ViID0gdGhpcy5pbnB1dFN0cmVhbS5waXBlKGRlYm91bmNlVGltZSg3NTApKS5zdWJzY3JpYmUoKHZhbDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWwsIDApO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlVmlhSW5wdXQoaW5wdXRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5iaW5kVmFsdWVJbnB1dE1vdXNlV2hlZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuYmluZFZhbHVlSW5wdXRNb3VzZVdoZWVsKCk7XG4gICAgdGhpcy5pbnB1dFN0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVwQnRuQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMudmFsdWUgKyB0aGlzLnN0ZXApO1xuICB9XG5cbiAgcHVibGljIGRvd25CdG5DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZSAtIHRoaXMuc3RlcCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2UodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0U3RyZWFtLm5leHQodmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGZvY3VzT3V0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0ZvY3VzID0gZmFsc2U7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBpbnB1dFZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZVZpYUlucHV0KGlucHV0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlVmlhSW5wdXQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4IHx8IHZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgb25WYWx1ZUlucHV0TW91c2VXaGVlbChldmVudDogYW55KTogdm9pZCB7XG4gICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgY29uc3QgZGVsdGEgPSBldmVudC53aGVlbERlbHRhIHx8IC1ldmVudC5kZWx0YVkgfHwgLWV2ZW50LmRldGFpbDtcblxuICAgIGlmIChkZWx0YSA+IDApIHtcbiAgICAgIGlmICghdGhpcy51cEJ0bkRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMudXBCdG5DbGlja2VkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkZWx0YSA8IDApIHtcbiAgICAgIGlmICghdGhpcy5kb3duQnRuRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kb3duQnRuQ2xpY2tlZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJpbmRWYWx1ZUlucHV0TW91c2VXaGVlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlSW5wdXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ29ud2hlZWwnIGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdtb3VzZXdoZWVsJyxcbiAgICAgIHRoaXMub25WYWx1ZUlucHV0TW91c2VXaGVlbEJpbmRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRWYWx1ZUlucHV0TW91c2VXaGVlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlSW5wdXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ29ud2hlZWwnIGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdtb3VzZXdoZWVsJyxcbiAgICAgIHRoaXMub25WYWx1ZUlucHV0TW91c2VXaGVlbEJpbmRcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwic2hvd0RpdmlkZXJcIlxuICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICBjbGFzcz1cIm93bC1kdC10aW1lci1kaXZpZGVyXCI+PC9kaXY+XG48YnV0dG9uXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwidXBCdG5BcmlhTGFiZWxcIlxuICBbZGlzYWJsZWRdPVwidXBCdG5EaXNhYmxlZFwiXG4gIChjbGljayk9XCJ1cEJ0bkNsaWNrZWQoKVwiXG4gIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250cm9sLWFycm93LWJ1dHRvblwiXG4gIHRhYmluZGV4PVwiLTFcIlxuICB0eXBlPVwiYnV0dG9uXCI+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXG4gICAgdGFiaW5kZXg9XCItMVwiPlxuICAgIDwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XCJTVkcgQXJyb3cgVXBcIj4gLS0+XG4gICAgPHN2Z1xuICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDogbmV3IDAgMCA0NTEuODQ3IDQ1MS44NDZcIlxuICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDQ1MS44NDcgNDUxLjg0NlwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgeD1cIjBweFwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgIHk9XCIwcHhcIj5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMjQ4LjI5MiwxMDYuNDA2bDE5NC4yODEsMTk0LjI5YzEyLjM2NSwxMi4zNTksMTIuMzY1LDMyLjM5MSwwLDQ0Ljc0NGMtMTIuMzU0LDEyLjM1NC0zMi4zOTEsMTIuMzU0LTQ0Ljc0NCwwXG4gICAgICAgICAgICAgICAgICAgICAgICBMMjI1LjkyMywxNzMuNTI5TDU0LjAxOCwzNDUuNDRjLTEyLjM2LDEyLjM1NC0zMi4zOTUsMTIuMzU0LTQ0Ljc0OCwwYy0xMi4zNTktMTIuMzU0LTEyLjM1OS0zMi4zOTEsMC00NC43NUwyMDMuNTU0LDEwNi40XG4gICAgICAgICAgICAgICAgICAgICAgICBjNi4xOC02LjE3NCwxNC4yNzEtOS4yNTksMjIuMzY5LTkuMjU5QzIzNC4wMTgsOTcuMTQxLDI0Mi4xMTUsMTAwLjIzMiwyNDguMjkyLDEwNi40MDZ6XCIgLz5cbiAgICA8L3N2Zz5cbiAgICA8IS0tIDwvZWRpdG9yLWZvbGQ+IC0tPlxuICA8L3NwYW4+XG48L2J1dHRvbj5cbjxsYWJlbCBjbGFzcz1cIm93bC1kdC10aW1lci1jb250ZW50XCI+XG4gIDxpbnB1dFxuICAgICN2YWx1ZUlucHV0XG4gICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgKGZvY3VzaW4pPVwiZm9jdXNJbigpXCJcbiAgICAoZm9jdXNvdXQpPVwiZm9jdXNPdXQodmFsdWVJbnB1dC52YWx1ZSlcIlxuICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dENoYW5nZSh2YWx1ZUlucHV0LnZhbHVlKVwiXG4gICAgKGtleWRvd24uYXJyb3dkb3duKT1cIiFkb3duQnRuRGlzYWJsZWQgJiYgZG93bkJ0bkNsaWNrZWQoKVwiXG4gICAgKGtleWRvd24uYXJyb3d1cCk9XCIhdXBCdG5EaXNhYmxlZCAmJiB1cEJ0bkNsaWNrZWQoKVwiXG4gICAgY2xhc3M9XCJvd2wtZHQtdGltZXItaW5wdXRcIlxuICAgIG1heGxlbmd0aD1cIjJcIiAvPlxuICA8c3BhbiBjbGFzcz1cIm93bC1oaWRkZW4tYWNjZXNzaWJsZVwiPnt7IGlucHV0TGFiZWwgfX08L3NwYW4+XG48L2xhYmVsPlxuPGJ1dHRvblxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImRvd25CdG5BcmlhTGFiZWxcIlxuICBbZGlzYWJsZWRdPVwiZG93bkJ0bkRpc2FibGVkXCJcbiAgKGNsaWNrKT1cImRvd25CdG5DbGlja2VkKClcIlxuICBjbGFzcz1cIm93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udHJvbC1hcnJvdy1idXR0b25cIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgdHlwZT1cImJ1dHRvblwiPlxuICA8c3BhblxuICAgIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcIlxuICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8IS0tIDxlZGl0b3ItZm9sZCBkZXNjPVwiU1ZHIEFycm93IERvd25cIj4gLS0+XG4gICAgPHN2Z1xuICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDogbmV3IDAgMCA0NTEuODQ3IDQ1MS44NDZcIlxuICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDQ1MS44NDcgNDUxLjg0NlwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgeD1cIjBweFwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgIHk9XCIwcHhcIj5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMjI1LjkyMywzNTQuNzA2Yy04LjA5OCwwLTE2LjE5NS0zLjA5Mi0yMi4zNjktOS4yNjNMOS4yNywxNTEuMTU3Yy0xMi4zNTktMTIuMzU5LTEyLjM1OS0zMi4zOTcsMC00NC43NTFcbiAgICAgICAgICAgICAgICAgICAgICAgIGMxMi4zNTQtMTIuMzU0LDMyLjM4OC0xMi4zNTQsNDQuNzQ4LDBsMTcxLjkwNSwxNzEuOTE1bDE3MS45MDYtMTcxLjkwOWMxMi4zNTktMTIuMzU0LDMyLjM5MS0xMi4zNTQsNDQuNzQ0LDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGMxMi4zNjUsMTIuMzU0LDEyLjM2NSwzMi4zOTIsMCw0NC43NTFMMjQ4LjI5MiwzNDUuNDQ5QzI0Mi4xMTUsMzUxLjYyMSwyMzQuMDE4LDM1NC43MDYsMjI1LjkyMywzNTQuNzA2elwiIC8+XG4gICAgPC9zdmc+XG4gICAgPCEtLSA8L2VkaXRvci1mb2xkPiAtLT5cbiAgPC9zcGFuPlxuPC9idXR0b24+XG4iXX0=