ngx-moderndatepicker 2.0.1 → 3.0.1
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 +2 -2
- package/esm2020/ngx-moderndatepicker.mjs +5 -0
- package/esm2020/public_api.mjs +3 -0
- package/esm2020/src/ngx-moderndatepicker/component/ngx-moderndatepicker.component.mjs +367 -0
- package/esm2020/src/ngx-moderndatepicker/module/ngx-moderndatepicker.module.mjs +19 -0
- package/fesm2015/ngx-moderndatepicker.mjs +389 -0
- package/fesm2015/ngx-moderndatepicker.mjs.map +1 -0
- package/fesm2020/ngx-moderndatepicker.mjs +389 -0
- package/fesm2020/ngx-moderndatepicker.mjs.map +1 -0
- package/ngx-moderndatepicker.d.ts +5 -0
- package/package.json +23 -43
- package/src/ngx-moderndatepicker/component/ngx-moderndatepicker.component.d.ts +127 -0
- package/src/ngx-moderndatepicker/module/ngx-moderndatepicker.module.d.ts +9 -0
- package/.browserslistrc +0 -12
- package/angular.json +0 -148
- package/dist/LICENSE +0 -21
- package/dist/README.md +0 -75
- package/dist/bundles/ngx-moderndatepicker.umd.js +0 -428
- package/dist/bundles/ngx-moderndatepicker.umd.js.map +0 -1
- package/dist/package.json +0 -33
- package/e2e/app.e2e-spec.ts +0 -14
- package/e2e/app.po.ts +0 -11
- package/e2e/tsconfig.e2e.json +0 -14
- package/karma.conf.js +0 -33
- package/ng-package.json +0 -9
- package/protractor.conf.js +0 -28
- package/src/app/app.component.css +0 -0
- package/src/app/app.component.html +0 -14
- package/src/app/app.component.ts +0 -21
- package/src/app/app.module.ts +0 -21
- package/src/assets/.gitkeep +0 -0
- package/src/assets/Screenshot 2021-06-11 at 11.00.41 AM.png +0 -0
- package/src/assets/Screenshot.png +0 -0
- package/src/environments/environment.prod.ts +0 -3
- package/src/environments/environment.ts +0 -8
- package/src/favicon.ico +0 -0
- package/src/index.html +0 -14
- package/src/main.ts +0 -12
- package/src/ngx-moderndatepicker/component/ngx-moderndatepicker.component.html +0 -66
- package/src/ngx-moderndatepicker/component/ngx-moderndatepicker.component.scss +0 -232
- package/src/ngx-moderndatepicker/component/ngx-moderndatepicker.component.ts +0 -488
- package/src/ngx-moderndatepicker/module/ngx-moderndatepicker.module.ts +0 -14
- package/src/polyfills.ts +0 -34
- package/src/styles.scss +0 -10
- package/src/test.ts +0 -20
- package/src/tsconfig.app.json +0 -15
- package/src/tsconfig.spec.json +0 -19
- package/tsconfig.json +0 -21
- package/tslint.json +0 -135
- /package/{public_api.ts → public_api.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ngx-moderndatepicker
|
|
2
2
|
|
|
3
|
-
Angular
|
|
3
|
+
Angular 13+ simple and interactive calendar datepicker component
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ npm install ngx-moderndatepicker --save
|
|
|
18
18
|
import { NgModule } from '@angular/core';
|
|
19
19
|
import { BrowserModule } from '@angular/platform-browser';
|
|
20
20
|
import { FormsModule } from '@angular/forms';
|
|
21
|
-
import {
|
|
21
|
+
import { NgxModerndatepickerModule } from 'ngx-moderndatepicker';
|
|
22
22
|
|
|
23
23
|
@NgModule({
|
|
24
24
|
imports: [
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1vZGVybmRhdGVwaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9uZ3gtbW9kZXJuZGF0ZXBpY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './src/ngx-moderndatepicker/module/ngx-moderndatepicker.module';
|
|
2
|
+
export * from './src/ngx-moderndatepicker/component/ngx-moderndatepicker.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLHFFQUFxRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcmMvbmd4LW1vZGVybmRhdGVwaWNrZXIvbW9kdWxlL25neC1tb2Rlcm5kYXRlcGlja2VyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uZ3gtbW9kZXJuZGF0ZXBpY2tlci9jb21wb25lbnQvbmd4LW1vZGVybmRhdGVwaWNrZXIuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { Component, Input, HostListener, forwardRef, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { startOfMonth, endOfMonth, addMonths, setYear, eachDay, getDate, getMonth, getYear, isToday, isSameDay, isSameMonth, isSameYear, format, getDay, subDays, setDay, addYears, subYears, setMonth, } from 'date-fns';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
// Counter for calculating the auto-incrementing field ID
|
|
8
|
+
let counter = 0;
|
|
9
|
+
/**
|
|
10
|
+
* Internal library helper that helps to check if value is empty
|
|
11
|
+
* @param value
|
|
12
|
+
*/
|
|
13
|
+
const isNil = (value) => {
|
|
14
|
+
return (typeof value === 'undefined') || (value === null);
|
|
15
|
+
};
|
|
16
|
+
export class NgxModerndatepickerComponent {
|
|
17
|
+
constructor() {
|
|
18
|
+
/**
|
|
19
|
+
* Disable datepicker's input
|
|
20
|
+
*/
|
|
21
|
+
this.headless = false;
|
|
22
|
+
/**
|
|
23
|
+
* Set datepicker's visibility state
|
|
24
|
+
*/
|
|
25
|
+
this.isOpened = false;
|
|
26
|
+
/**
|
|
27
|
+
* Datepicker dropdown position
|
|
28
|
+
*/
|
|
29
|
+
this.position = 'bottom-right';
|
|
30
|
+
this.positions = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
|
|
31
|
+
this.onTouchedCallback = () => { };
|
|
32
|
+
this.onChangeCallback = () => { };
|
|
33
|
+
}
|
|
34
|
+
setDisabledState(isDisabled) {
|
|
35
|
+
this.disabled = isDisabled;
|
|
36
|
+
}
|
|
37
|
+
get value() {
|
|
38
|
+
return this.innerValue;
|
|
39
|
+
}
|
|
40
|
+
set value(val) {
|
|
41
|
+
this.innerValue = val;
|
|
42
|
+
this.onChangeCallback(this.innerValue);
|
|
43
|
+
}
|
|
44
|
+
ngOnInit() {
|
|
45
|
+
this.view = 'year';
|
|
46
|
+
if (!this.date) {
|
|
47
|
+
this.date = new Date();
|
|
48
|
+
}
|
|
49
|
+
this.setOptions();
|
|
50
|
+
this.initDayNames();
|
|
51
|
+
this.initYears();
|
|
52
|
+
this.initMonthName();
|
|
53
|
+
this.init();
|
|
54
|
+
// Check if 'position' property is correct
|
|
55
|
+
if (this.positions.indexOf(this.position) === -1) {
|
|
56
|
+
const expectedValues = this.positions.join(', ');
|
|
57
|
+
const message = `ng-moderndatepicker: invalid position property value '${this.position}' (expected: ${expectedValues})`;
|
|
58
|
+
throw new TypeError(message);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
ngOnChanges(changes) {
|
|
62
|
+
this.setOptions();
|
|
63
|
+
this.initDayNames();
|
|
64
|
+
this.init();
|
|
65
|
+
this.initYears();
|
|
66
|
+
this.initMonthName();
|
|
67
|
+
}
|
|
68
|
+
get defaultFieldId() {
|
|
69
|
+
// Only evaluate and increment if required
|
|
70
|
+
const value = `datepicker-${counter++}`;
|
|
71
|
+
Object.defineProperty(this, 'defaultFieldId', { value });
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
setOptions() {
|
|
75
|
+
const today = new Date(); // this const was added because during my tests, I noticed that at this level this.date is undefined
|
|
76
|
+
this.minYear = this.options && this.options.minYear || getYear(today) - 30;
|
|
77
|
+
this.maxYear = this.options && this.options.maxYear || getYear(today) + 30;
|
|
78
|
+
this.displayFormat = this.options && this.options.displayFormat || 'MMM D[,] YYYY';
|
|
79
|
+
this.barTitleFormat = 'YYYY';
|
|
80
|
+
this.dayNamesFormat = this.options && this.options.dayNamesFormat || 'ddd';
|
|
81
|
+
this.monthNamesFormat = this.options && this.options.monthNamesFormat || 'MMM';
|
|
82
|
+
this.barTitleIfEmpty = (new Date().getFullYear()).toString();
|
|
83
|
+
this.firstCalendarDay = this.options && this.options.firstCalendarDay || 0;
|
|
84
|
+
this.locale = this.options && { locale: this.options.locale } || {};
|
|
85
|
+
this.placeholder = this.options && this.options.placeholder || '';
|
|
86
|
+
this.addClass = this.options && this.options.addClass || {};
|
|
87
|
+
this.addStyle = this.options && this.options.addStyle || {};
|
|
88
|
+
this.fieldId = this.options && this.options.fieldId || this.defaultFieldId;
|
|
89
|
+
}
|
|
90
|
+
nextYear() {
|
|
91
|
+
this.date = addYears(this.date, 1);
|
|
92
|
+
this.barTitle = format(this.date, this.barTitleFormat, this.locale);
|
|
93
|
+
this.init();
|
|
94
|
+
this.initMonthName();
|
|
95
|
+
}
|
|
96
|
+
prevYear() {
|
|
97
|
+
this.date = subYears(this.date, 1);
|
|
98
|
+
this.barTitle = format(this.date, this.barTitleFormat, this.locale);
|
|
99
|
+
this.init();
|
|
100
|
+
this.initMonthName();
|
|
101
|
+
}
|
|
102
|
+
setDate(i) {
|
|
103
|
+
this.date = this.days[i].date;
|
|
104
|
+
this.value = this.date;
|
|
105
|
+
this.init();
|
|
106
|
+
this.close();
|
|
107
|
+
}
|
|
108
|
+
setYear(i) {
|
|
109
|
+
this.date = setYear(this.date, this.years[i].year);
|
|
110
|
+
this.init();
|
|
111
|
+
this.initMonthName();
|
|
112
|
+
this.view = 'year';
|
|
113
|
+
}
|
|
114
|
+
selectMonth(i) {
|
|
115
|
+
this.date = setMonth(this.date, i);
|
|
116
|
+
this.init();
|
|
117
|
+
this.initMonthName();
|
|
118
|
+
this.view = 'year';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Checks if specified date is in range of min and max dates
|
|
122
|
+
* @param date
|
|
123
|
+
*/
|
|
124
|
+
isDateSelectable(date) {
|
|
125
|
+
if (isNil(this.options)) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
const minDateSet = !isNil(this.options.minDate);
|
|
129
|
+
const maxDateSet = !isNil(this.options.maxDate);
|
|
130
|
+
const timestamp = date.valueOf();
|
|
131
|
+
if (minDateSet && (timestamp < this.options.minDate.valueOf())) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
if (maxDateSet && (timestamp > this.options.maxDate.valueOf())) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
isWeekendDay(date) {
|
|
140
|
+
const weekendsDay = Array.isArray(this.options.weekendsDay);
|
|
141
|
+
if (weekendsDay) {
|
|
142
|
+
return this.options.weekendsDay.indexOf(getDay(date)) !== -1;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
isHoliday(date) {
|
|
147
|
+
const areHolidays = Array.isArray(this.options.holidayList);
|
|
148
|
+
if (areHolidays) {
|
|
149
|
+
return this.options.holidayList.some((day) => isSameDay(day, date));
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
init() {
|
|
154
|
+
// this.date may be null after .reset(); fall back to current date.
|
|
155
|
+
const actualDate = this.date || new Date();
|
|
156
|
+
const start = startOfMonth(actualDate);
|
|
157
|
+
const end = endOfMonth(actualDate);
|
|
158
|
+
this.days = eachDay(start, end).map(date => {
|
|
159
|
+
return {
|
|
160
|
+
date: date,
|
|
161
|
+
day: getDate(date),
|
|
162
|
+
month: getMonth(date),
|
|
163
|
+
year: getYear(date),
|
|
164
|
+
inThisMonth: true,
|
|
165
|
+
isToday: isToday(date),
|
|
166
|
+
isSelected: isSameDay(date, this.innerValue) && isSameMonth(date, this.innerValue) && isSameYear(date, this.innerValue),
|
|
167
|
+
isSelectable: this.isDateSelectable(date),
|
|
168
|
+
isWeekend: this.isWeekendDay(date),
|
|
169
|
+
isHoliday: this.isHoliday(date)
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
const tmp = getDay(start) - this.firstCalendarDay;
|
|
173
|
+
const prevDays = tmp < 0 ? 7 - this.firstCalendarDay : tmp;
|
|
174
|
+
for (let i = 1; i <= prevDays; i++) {
|
|
175
|
+
const date = subDays(start, i);
|
|
176
|
+
this.days.unshift({
|
|
177
|
+
date: date,
|
|
178
|
+
day: getDate(date),
|
|
179
|
+
month: getMonth(date),
|
|
180
|
+
year: getYear(date),
|
|
181
|
+
inThisMonth: false,
|
|
182
|
+
isToday: isToday(date),
|
|
183
|
+
isSelected: isSameDay(date, this.innerValue) && isSameMonth(date, this.innerValue) && isSameYear(date, this.innerValue),
|
|
184
|
+
isSelectable: this.isDateSelectable(date),
|
|
185
|
+
isWeekend: this.isWeekendDay(date),
|
|
186
|
+
isHoliday: this.isHoliday(date)
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
if (this.innerValue) {
|
|
190
|
+
this.displayValue = format(this.innerValue, this.displayFormat, this.locale);
|
|
191
|
+
this.barTitle = format(start, this.barTitleFormat, this.locale);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
this.displayValue = '';
|
|
195
|
+
this.barTitle = this.useEmptyBarTitle ? this.barTitleIfEmpty : format(this.date, this.barTitleFormat, this.locale);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
initYears() {
|
|
199
|
+
const range = this.maxYear - this.minYear;
|
|
200
|
+
this.years = Array.from(new Array(range), (x, i) => i + this.minYear).map(year => {
|
|
201
|
+
return {
|
|
202
|
+
year,
|
|
203
|
+
isThisYear: year === getYear(this.date),
|
|
204
|
+
isToday: year === getYear(new Date()),
|
|
205
|
+
isSelectable: this.isYearSelectable(year)
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
isYearSelectable(date) {
|
|
210
|
+
const minDate = !isNil(this.options.minDate) ? this.options.minDate : null;
|
|
211
|
+
const maxDate = !isNil(this.options.maxDate) ? this.options.maxDate : null;
|
|
212
|
+
if (minDate && maxDate) {
|
|
213
|
+
return minDate.getFullYear() <= date && date <= maxDate.getFullYear();
|
|
214
|
+
}
|
|
215
|
+
if (minDate) {
|
|
216
|
+
return minDate.getFullYear() <= date;
|
|
217
|
+
}
|
|
218
|
+
if (maxDate) {
|
|
219
|
+
return date <= maxDate.getFullYear();
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
initDayNames() {
|
|
224
|
+
this.dayNames = [];
|
|
225
|
+
const start = this.firstCalendarDay;
|
|
226
|
+
for (let i = start; i <= 6 + start; i++) {
|
|
227
|
+
const date = setDay(new Date(), i);
|
|
228
|
+
this.dayNames.push(format(date, this.dayNamesFormat, this.locale));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
initMonthName() {
|
|
232
|
+
const monthNames = [];
|
|
233
|
+
const actualDate = this.date || new Date();
|
|
234
|
+
const currentDate = new Date(actualDate);
|
|
235
|
+
const start = subYears(new Date(currentDate.setMonth(11)), 1);
|
|
236
|
+
for (let i = 1; i <= 12; i++) {
|
|
237
|
+
const date = addMonths(start, i);
|
|
238
|
+
monthNames.push({
|
|
239
|
+
name: format(date, this.monthNamesFormat, this.locale),
|
|
240
|
+
isSelected: date.getMonth() === actualDate.getMonth(),
|
|
241
|
+
isThisMonth: isSameMonth(date, new Date()) && isSameYear(actualDate, new Date()),
|
|
242
|
+
isSelectable: this.isMonthSelectable(date)
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
this.monthNames = monthNames;
|
|
246
|
+
}
|
|
247
|
+
isMonthSelectable(date) {
|
|
248
|
+
const minDate = !isNil(this.options.minDate) ? this.options.minDate : null;
|
|
249
|
+
const maxDate = !isNil(this.options.maxDate) ? this.options.maxDate : null;
|
|
250
|
+
const year = date.getFullYear();
|
|
251
|
+
const month = date.getMonth();
|
|
252
|
+
if (minDate && maxDate) {
|
|
253
|
+
const minYear = minDate.getFullYear();
|
|
254
|
+
const maxYear = maxDate.getFullYear();
|
|
255
|
+
if (year < minYear || year > maxYear) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (year === minYear && month < minDate.getMonth()) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
if (year === maxYear && month > maxDate.getMonth()) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
if (minDate) {
|
|
267
|
+
if (year < minDate.getFullYear()) {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
if (year === minDate.getFullYear() && month < minDate.getMonth()) {
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
if (maxDate) {
|
|
276
|
+
if (year > maxDate.getFullYear()) {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
if (year === maxDate.getFullYear() && month > maxDate.getMonth()) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
toggleView() {
|
|
287
|
+
this.view = this.view === 'year' ? 'years' : 'year';
|
|
288
|
+
}
|
|
289
|
+
toggle() {
|
|
290
|
+
this.isOpened = !this.isOpened;
|
|
291
|
+
if (!this.isOpened && this.view === 'years') {
|
|
292
|
+
this.toggleView();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
close() {
|
|
296
|
+
this.isOpened = false;
|
|
297
|
+
if (this.view === 'years') {
|
|
298
|
+
this.toggleView();
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
reset(fireValueChangeEvent = false) {
|
|
302
|
+
this.date = null;
|
|
303
|
+
this.innerValue = null;
|
|
304
|
+
this.init();
|
|
305
|
+
this.initMonthName();
|
|
306
|
+
if (fireValueChangeEvent && this.onChangeCallback) {
|
|
307
|
+
this.onChangeCallback(this.innerValue);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
writeValue(val) {
|
|
311
|
+
if (val) {
|
|
312
|
+
this.date = val;
|
|
313
|
+
this.innerValue = val;
|
|
314
|
+
this.init();
|
|
315
|
+
this.initMonthName();
|
|
316
|
+
this.displayValue = format(this.innerValue, this.displayFormat, this.locale);
|
|
317
|
+
this.barTitle = format(startOfMonth(val), this.barTitleFormat, this.locale);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
registerOnChange(fn) {
|
|
321
|
+
this.onChangeCallback = fn;
|
|
322
|
+
}
|
|
323
|
+
registerOnTouched(fn) {
|
|
324
|
+
this.onTouchedCallback = fn;
|
|
325
|
+
}
|
|
326
|
+
onBlur(e) {
|
|
327
|
+
if (!this.isOpened) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const input = document.querySelector('.ngx-moderndatepicker-input');
|
|
331
|
+
if (input === null) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (e.target === input || input.contains(e.target)) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
const container = document.querySelector('.ngx-moderndatepicker-calendar-container');
|
|
338
|
+
const target = e.target;
|
|
339
|
+
const isYearUnit = target.classList.contains('year-unit');
|
|
340
|
+
const isMonthUnit = target.classList.contains('month-unit');
|
|
341
|
+
if (container && container !== target && !container.contains(target) && !isYearUnit && !isMonthUnit) {
|
|
342
|
+
this.close();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
NgxModerndatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxModerndatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
347
|
+
NgxModerndatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: NgxModerndatepickerComponent, selector: "ngx-moderndatepicker", inputs: { options: "options", headless: "headless", isOpened: "isOpened", position: "position" }, host: { listeners: { "document:click": "onBlur($event)" } }, providers: [
|
|
348
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxModerndatepickerComponent), multi: true }
|
|
349
|
+
], usesOnChanges: true, ngImport: i0, template: "<div class=\"ngx-moderndatepicker-container\">\n <input type=\"text\" *ngIf=\"!headless\" class=\"ngx-moderndatepicker-input\" [(ngModel)]=\"displayValue\" readonly [placeholder]=\"placeholder\"\n [ngClass]=\"addClass\" [ngStyle]=\"addStyle\" [id]=\"fieldId\" [disabled]=\"disabled\" (click)=\"toggle()\" />\n <ng-content></ng-content>\n <div class=\"ngx-moderndatepicker-calendar-container ngx-moderndatepicker-position-{{position}}\" *ngIf=\"isOpened\">\n <div class=\"topbar-container\">\n <div class=\"main-calendar-selection-year\">\n <svg width=\"15px\" height=\"15px\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n \t viewBox=\"0 0 489.6 489.6\" style=\"enable-background:new 0 0 489.6 489.6;\" xml:space=\"preserve\"\n (click)=\"view === 'year' && prevYear()\">\n <g>\n \t<g>\n \t\t<path style=\"fill:#2C2F33;\" d=\"M244.8,489.6c135,0,244.8-109.8,244.8-244.8S379.8,0,244.8,0S0,109.8,0,244.8\n \t\t\tS109.8,489.6,244.8,489.6z M244.8,19.8c124.1,0,225,100.9,225,225s-100.9,225-225,225s-225-100.9-225-225S120.7,19.8,244.8,19.8z\"\n \t\t\t/>\n \t\t<path style=\"fill:#3C92CA;\" d=\"M265.5,326.1c1.9,1.9,4.5,2.9,7,2.9s5.1-1,7-2.9c3.9-3.9,3.9-10.1,0-14l-67.3-67.3l67.3-67.3\n \t\t\tc3.9-3.9,3.9-10.1,0-14s-10.1-3.9-14,0l-74.3,74.3c-3.9,3.9-3.9,10.1,0,14L265.5,326.1z\"/>\n \t</g>\n </g>\n </svg>\n <span class=\"topbar-title\" (click)=\"toggleView(); initYears();\">{{ barTitle }}</span>\n <svg width=\"15px\" height=\"15px\" viewBox=\"0 0 6 10\" version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n \t viewBox=\"0 0 489.6 489.6\" style=\"enable-background:new 0 0 489.6 489.6;\" xml:space=\"preserve\"\n (click)=\"view === 'year' && nextYear()\">\n <g>\n \t<g>\n \t\t<path style=\"fill:#2C2F33;\" d=\"M244.8,489.6c135,0,244.8-109.8,244.8-244.8S379.8,0,244.8,0S0,109.8,0,244.8\n \t\t\tS109.8,489.6,244.8,489.6z M244.8,19.8c124.1,0,225,100.9,225,225s-100.9,225-225,225s-225-100.9-225-225S120.7,19.8,244.8,19.8z\"\n \t\t\t/>\n \t\t<path style=\"fill:#3C92CA;\" d=\"M210,326.1c1.9,1.9,4.5,2.9,7,2.9s5.1-1,7-2.9l74.3-74.3c1.9-1.9,2.9-4.4,2.9-7s-1-5.1-2.9-7\n \t\t\tL224,163.5c-3.9-3.9-10.1-3.9-14,0s-3.9,10.1,0,14l67.3,67.3L210,312.1C206.2,316,206.2,322.3,210,326.1z\"/>\n \t</g>\n </g>\n </svg>\n </div>\n <div class=\"main-calendar-day-names\" *ngIf=\"view === 'year'\">\n <span class=\"day-name-unit\" *ngFor=\"let name of dayNames\">{{ name }}</span>\n </div>\n </div>\n <div class=\"main-calendar-container\" *ngIf=\"view === 'year'\">\n <div class=\"main-calendar-month-names\">\n <div class=\"month-name-unit\" *ngFor=\"let month of monthNames; let index = index\" (click)=\"month.isSelectable && selectMonth(index)\">\n <span class=\"month-unit\"\n [ngClass]=\"{ 'is-this-month': month.isThisMonth, 'is-disabled': !month.isSelectable ,'is-selected': month.isSelected}\">\n {{ month.name }}\n </span>\n </div>\n </div>\n <div class=\"main-calender-days-container\">\n <div class=\"main-calendar-days\">\n <div class=\"day-unit\" *ngFor=\"let day of days; let i = index;\" >\n <span [ngClass]=\"{ 'is-prev-month': !day.inThisMonth, 'is-today': day.isToday, 'is-disabled': !day.isSelectable, 'is-weekend': day.isWeekend , 'is-holiday' : day.isHoliday, 'is-selected': day.isSelected}\"\n (click)=\"day.isSelectable && setDate(i)\">\n {{ day.day }}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"main-calendar-container\" *ngIf=\"view === 'years'\">\n <div class=\"main-calendar-years\">\n <span class=\"year-unit\" *ngFor=\"let year of years; let i = index;\" [ngClass]=\"{ 'is-selected': year.isThisYear , 'is-today': year.isToday , 'is-disabled' : !year.isSelectable}\" (click)=\"year.isSelectable && setYear(i)\">{{ year.year }}</span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ngx-moderndatepicker-position-bottom-left{top:40px;right:0}.ngx-moderndatepicker-position-bottom-right{top:40px;left:0}.ngx-moderndatepicker-position-top-left{bottom:40px;right:0}.ngx-moderndatepicker-position-top-right{bottom:40px;left:0}.ngx-moderndatepicker-container{position:relative}.ngx-moderndatepicker-container .ngx-moderndatepicker-input{padding:5px 10px;font-size:14px;width:200px;outline:none;border:1px solid #DFE3E9}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container{position:absolute;width:356px;height:230px;background:#ffffff;padding:10px;box-shadow:0 1px 4px #00000014;border:1px solid #DFE3E9;border-radius:4px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container{height:10px;padding:5px 0;display:flex;align-items:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container .main-calendar-selection-year{display:flex;align-items:center;width:108px;min-width:108px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container .main-calendar-day-names{color:#a4a9b1;width:100%;display:flex;align-items:center;font-size:12px;padding:0 0 0 5px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container .main-calendar-day-names .day-name-unit{width:14.2857142857%;height:30px;text-transform:uppercase;text-align:center;line-height:30px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container svg{cursor:pointer}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container svg g{fill:#ced0da}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-title{color:#3d495c;font-size:15px;font-weight:400;margin:0 10px;cursor:pointer}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container{width:100%;height:100%;font-size:14px;font-weight:500;display:flex;flex-direction:row}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names{display:flex;flex-flow:row wrap;width:108px;min-width:108px;padding:15px 0}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit{width:45px;height:30px;color:#000;text-align:center;border-radius:5px;line-height:30px;cursor:pointer}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span{width:35px;padding:2.5px 7px;border-radius:15%;height:25px;line-height:25px;text-align:center}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-this-month{border:2px solid #1A91EB;margin:-2px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-disabled{cursor:not-allowed;color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-disabled :hover{background:transparent}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-selected{background:#1A91EB;color:#fff;border:2px solid #1A91EB}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years{padding:15px 5px;width:100%;display:inline-block;max-height:275px;overflow:auto}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit{height:30px;display:inline-flex;float:left;width:14.2857142857%;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#3d495c}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span{width:28px;border-radius:15%;height:20px;line-height:20px;text-align:center}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-prev-month,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-prev-month,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-prev-month,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-prev-month{color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-today,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-today,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-today,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-today{border:2px solid #1A91EB;margin:-2px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-holiday,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-holiday,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-holiday,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-holiday{background:#e0e0e0}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-selected,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-selected,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-selected,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-selected{background:#1A91EB;color:#fff;border:2px solid #1A91EB}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-disabled,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-disabled,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-disabled,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-disabled{cursor:not-allowed;color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-disabled :hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-disabled :hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-disabled :hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-disabled :hover{background:transparent}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years{height:200px;display:block;margin:auto;padding:5px 10px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit{width:33.3333333333%;border-radius:10px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-disabled{cursor:not-allowed;color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-disabled :hover{background:transparent}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-selected{background:#1A91EB;color:#fff;border:2px solid #1A91EB}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-today{border:2px solid #1A91EB;margin:-2px}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxModerndatepickerComponent, decorators: [{
|
|
351
|
+
type: Component,
|
|
352
|
+
args: [{ selector: 'ngx-moderndatepicker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
353
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxModerndatepickerComponent), multi: true }
|
|
354
|
+
], template: "<div class=\"ngx-moderndatepicker-container\">\n <input type=\"text\" *ngIf=\"!headless\" class=\"ngx-moderndatepicker-input\" [(ngModel)]=\"displayValue\" readonly [placeholder]=\"placeholder\"\n [ngClass]=\"addClass\" [ngStyle]=\"addStyle\" [id]=\"fieldId\" [disabled]=\"disabled\" (click)=\"toggle()\" />\n <ng-content></ng-content>\n <div class=\"ngx-moderndatepicker-calendar-container ngx-moderndatepicker-position-{{position}}\" *ngIf=\"isOpened\">\n <div class=\"topbar-container\">\n <div class=\"main-calendar-selection-year\">\n <svg width=\"15px\" height=\"15px\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n \t viewBox=\"0 0 489.6 489.6\" style=\"enable-background:new 0 0 489.6 489.6;\" xml:space=\"preserve\"\n (click)=\"view === 'year' && prevYear()\">\n <g>\n \t<g>\n \t\t<path style=\"fill:#2C2F33;\" d=\"M244.8,489.6c135,0,244.8-109.8,244.8-244.8S379.8,0,244.8,0S0,109.8,0,244.8\n \t\t\tS109.8,489.6,244.8,489.6z M244.8,19.8c124.1,0,225,100.9,225,225s-100.9,225-225,225s-225-100.9-225-225S120.7,19.8,244.8,19.8z\"\n \t\t\t/>\n \t\t<path style=\"fill:#3C92CA;\" d=\"M265.5,326.1c1.9,1.9,4.5,2.9,7,2.9s5.1-1,7-2.9c3.9-3.9,3.9-10.1,0-14l-67.3-67.3l67.3-67.3\n \t\t\tc3.9-3.9,3.9-10.1,0-14s-10.1-3.9-14,0l-74.3,74.3c-3.9,3.9-3.9,10.1,0,14L265.5,326.1z\"/>\n \t</g>\n </g>\n </svg>\n <span class=\"topbar-title\" (click)=\"toggleView(); initYears();\">{{ barTitle }}</span>\n <svg width=\"15px\" height=\"15px\" viewBox=\"0 0 6 10\" version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n \t viewBox=\"0 0 489.6 489.6\" style=\"enable-background:new 0 0 489.6 489.6;\" xml:space=\"preserve\"\n (click)=\"view === 'year' && nextYear()\">\n <g>\n \t<g>\n \t\t<path style=\"fill:#2C2F33;\" d=\"M244.8,489.6c135,0,244.8-109.8,244.8-244.8S379.8,0,244.8,0S0,109.8,0,244.8\n \t\t\tS109.8,489.6,244.8,489.6z M244.8,19.8c124.1,0,225,100.9,225,225s-100.9,225-225,225s-225-100.9-225-225S120.7,19.8,244.8,19.8z\"\n \t\t\t/>\n \t\t<path style=\"fill:#3C92CA;\" d=\"M210,326.1c1.9,1.9,4.5,2.9,7,2.9s5.1-1,7-2.9l74.3-74.3c1.9-1.9,2.9-4.4,2.9-7s-1-5.1-2.9-7\n \t\t\tL224,163.5c-3.9-3.9-10.1-3.9-14,0s-3.9,10.1,0,14l67.3,67.3L210,312.1C206.2,316,206.2,322.3,210,326.1z\"/>\n \t</g>\n </g>\n </svg>\n </div>\n <div class=\"main-calendar-day-names\" *ngIf=\"view === 'year'\">\n <span class=\"day-name-unit\" *ngFor=\"let name of dayNames\">{{ name }}</span>\n </div>\n </div>\n <div class=\"main-calendar-container\" *ngIf=\"view === 'year'\">\n <div class=\"main-calendar-month-names\">\n <div class=\"month-name-unit\" *ngFor=\"let month of monthNames; let index = index\" (click)=\"month.isSelectable && selectMonth(index)\">\n <span class=\"month-unit\"\n [ngClass]=\"{ 'is-this-month': month.isThisMonth, 'is-disabled': !month.isSelectable ,'is-selected': month.isSelected}\">\n {{ month.name }}\n </span>\n </div>\n </div>\n <div class=\"main-calender-days-container\">\n <div class=\"main-calendar-days\">\n <div class=\"day-unit\" *ngFor=\"let day of days; let i = index;\" >\n <span [ngClass]=\"{ 'is-prev-month': !day.inThisMonth, 'is-today': day.isToday, 'is-disabled': !day.isSelectable, 'is-weekend': day.isWeekend , 'is-holiday' : day.isHoliday, 'is-selected': day.isSelected}\"\n (click)=\"day.isSelectable && setDate(i)\">\n {{ day.day }}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"main-calendar-container\" *ngIf=\"view === 'years'\">\n <div class=\"main-calendar-years\">\n <span class=\"year-unit\" *ngFor=\"let year of years; let i = index;\" [ngClass]=\"{ 'is-selected': year.isThisYear , 'is-today': year.isToday , 'is-disabled' : !year.isSelectable}\" (click)=\"year.isSelectable && setYear(i)\">{{ year.year }}</span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ngx-moderndatepicker-position-bottom-left{top:40px;right:0}.ngx-moderndatepicker-position-bottom-right{top:40px;left:0}.ngx-moderndatepicker-position-top-left{bottom:40px;right:0}.ngx-moderndatepicker-position-top-right{bottom:40px;left:0}.ngx-moderndatepicker-container{position:relative}.ngx-moderndatepicker-container .ngx-moderndatepicker-input{padding:5px 10px;font-size:14px;width:200px;outline:none;border:1px solid #DFE3E9}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container{position:absolute;width:356px;height:230px;background:#ffffff;padding:10px;box-shadow:0 1px 4px #00000014;border:1px solid #DFE3E9;border-radius:4px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container{height:10px;padding:5px 0;display:flex;align-items:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container .main-calendar-selection-year{display:flex;align-items:center;width:108px;min-width:108px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container .main-calendar-day-names{color:#a4a9b1;width:100%;display:flex;align-items:center;font-size:12px;padding:0 0 0 5px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-container .main-calendar-day-names .day-name-unit{width:14.2857142857%;height:30px;text-transform:uppercase;text-align:center;line-height:30px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container svg{cursor:pointer}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container svg g{fill:#ced0da}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .topbar-title{color:#3d495c;font-size:15px;font-weight:400;margin:0 10px;cursor:pointer}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container{width:100%;height:100%;font-size:14px;font-weight:500;display:flex;flex-direction:row}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names{display:flex;flex-flow:row wrap;width:108px;min-width:108px;padding:15px 0}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit{width:45px;height:30px;color:#000;text-align:center;border-radius:5px;line-height:30px;cursor:pointer}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span{width:35px;padding:2.5px 7px;border-radius:15%;height:25px;line-height:25px;text-align:center}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-this-month{border:2px solid #1A91EB;margin:-2px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-disabled{cursor:not-allowed;color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-disabled :hover{background:transparent}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-month-names .month-name-unit span.is-selected{background:#1A91EB;color:#fff;border:2px solid #1A91EB}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years{padding:15px 5px;width:100%;display:inline-block;max-height:275px;overflow:auto}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit{height:30px;display:inline-flex;float:left;width:14.2857142857%;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#3d495c}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span{width:28px;border-radius:15%;height:20px;line-height:20px;text-align:center}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-prev-month,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-prev-month,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-prev-month,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-prev-month{color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-today,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-today,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-today,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-today{border:2px solid #1A91EB;margin:-2px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-holiday,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-holiday,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-holiday,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-weekend,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-holiday{background:#e0e0e0}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-selected,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-selected,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-selected,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-selected{background:#1A91EB;color:#fff;border:2px solid #1A91EB}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-disabled,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-disabled,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-disabled,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-disabled{cursor:not-allowed;color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .day-unit span.is-disabled :hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-days .year-unit span.is-disabled :hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .day-unit span.is-disabled :hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit span.is-disabled :hover{background:transparent}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years{height:200px;display:block;margin:auto;padding:5px 10px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit{width:33.3333333333%;border-radius:10px}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-disabled{cursor:not-allowed;color:#a4a9b1}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-disabled :hover{background:transparent}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-selected{background:#1A91EB;color:#fff;border:2px solid #1A91EB}.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit:hover,.ngx-moderndatepicker-container .ngx-moderndatepicker-calendar-container .main-calendar-container .main-calendar-years .year-unit.is-today{border:2px solid #1A91EB;margin:-2px}\n"] }]
|
|
355
|
+
}], ctorParameters: function () { return []; }, propDecorators: { options: [{
|
|
356
|
+
type: Input
|
|
357
|
+
}], headless: [{
|
|
358
|
+
type: Input
|
|
359
|
+
}], isOpened: [{
|
|
360
|
+
type: Input
|
|
361
|
+
}], position: [{
|
|
362
|
+
type: Input
|
|
363
|
+
}], onBlur: [{
|
|
364
|
+
type: HostListener,
|
|
365
|
+
args: ['document:click', ['$event']]
|
|
366
|
+
}] } });
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1vZGVybmRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1tb2Rlcm5kYXRlcGlja2VyL2NvbXBvbmVudC9uZ3gtbW9kZXJuZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbmd4LW1vZGVybmRhdGVwaWNrZXIvY29tcG9uZW50L25neC1tb2Rlcm5kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUE0QixZQUFZLEVBQUUsVUFBVSxFQUFjLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xKLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxPQUFPLEVBQ1AsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxHQUNULE1BQU0sVUFBVSxDQUFDOzs7O0FBNkJsQix5REFBeUQ7QUFDekQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBRWhCOzs7R0FHRztBQUNILE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBcUMsRUFBRSxFQUFFO0lBQ3RELE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUM7QUFXRixNQUFNLE9BQU8sNEJBQTRCO0lBdUV2QztRQXBFQTs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7O1dB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O2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQTRZc0MsTUFBTTtzQkFBakQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIGZvcndhcmRSZWYsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiAsIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBzdGFydE9mTW9udGgsXG4gIGVuZE9mTW9udGgsXG4gIGFkZE1vbnRocyxcbiAgc2V0WWVhcixcbiAgZWFjaERheSxcbiAgZ2V0RGF0ZSxcbiAgZ2V0TW9udGgsXG4gIGdldFllYXIsXG4gIGlzVG9kYXksXG4gIGlzU2FtZURheSxcbiAgaXNTYW1lTW9udGgsXG4gIGlzU2FtZVllYXIsXG4gIGZvcm1hdCxcbiAgZ2V0RGF5LFxuICBzdWJEYXlzLFxuICBzZXREYXksXG4gIGFkZFllYXJzLFxuICBzdWJZZWFycyxcbiAgc2V0TW9udGgsXG59IGZyb20gJ2RhdGUtZm5zJztcblxuZXhwb3J0IHR5cGUgQWRkQ2xhc3MgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHsgW2s6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZXJuRGF0ZVBpY2tlck9wdGlvbnMge1xuICBtaW5ZZWFyPzogbnVtYmVyOyAvLyBkZWZhdWx0OiBjdXJyZW50IHllYXIgLSAzMFxuICBtYXhZZWFyPzogbnVtYmVyOyAvLyBkZWZhdWx0OiBjdXJyZW50IHllYXIgKyAzMFxuICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nOyAvLyBkZWZhdWx0OiAnTU1NIERbLF0gWVlZWSdcbiAgZGF5TmFtZXNGb3JtYXQ/OiBzdHJpbmc7IC8vIGRlZmF1bHQgJ2RkZCdcbiAgbW9udGhOYW1lc0Zvcm1hdD86IHN0cmluZzsgLy8gZGVmYXVsdCAnTU1NJ1xuICBmaXJzdENhbGVuZGFyRGF5PzogbnVtYmVyOyAvLyAwID0gU3VuZGF5IChkZWZhdWx0KSwgMSA9IE1vbmRheSwgLi5cbiAgbG9jYWxlPzogb2JqZWN0O1xuICBtaW5EYXRlPzogRGF0ZTtcbiAgbWF4RGF0ZT86IERhdGU7XG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIGlucHV0IGZpZWxkICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogW25nQ2xhc3NdIHRvIGFkZCB0byB0aGUgaW5wdXQgZmllbGQgKi9cbiAgYWRkQ2xhc3M/OiBBZGRDbGFzcztcbiAgLyoqIFtuZ1N0eWxlXSB0byBhZGQgdG8gdGhlIGlucHV0IGZpZWxkICovXG4gIGFkZFN0eWxlPzogeyBbazogc3RyaW5nXTogYW55IH0gfCBudWxsO1xuICAvKiogSUQgdG8gYXNzaWduIHRvIHRoZSBpbnB1dCBmaWVsZCAqL1xuICBmaWVsZElkPzogc3RyaW5nO1xuICAvKiogSWYgZmFsc2UsIGJhclRpdGxlSWZFbXB0eSB3aWxsIGJlIGRpc3JlZ2FyZGVkIGFuZCBhIGRhdGUgd2lsbCBhbHdheXMgYmUgc2hvd24uIERlZmF1bHQ6IHRydWUgKi9cbiAgd2Vla2VuZHNEYXk/OiBudW1iZXJbXTtcbiAgIC8qKiBTdW5kYXkgaXMgMCAsIEhpZ2hsaWdodHMgdGhlIHdlZWtlbmRzIHdpdGggZ3JheSBiYWNrZ3JvdW5kKiovXG4gIGhvbGlkYXlMaXN0PzogQXJyYXk8RGF0ZT47XG4gIC8qKiBMaXN0IG9mIEhvbGlkYXlzICoqL1xufVxuXG4vLyBDb3VudGVyIGZvciBjYWxjdWxhdGluZyB0aGUgYXV0by1pbmNyZW1lbnRpbmcgZmllbGQgSURcbmxldCBjb3VudGVyID0gMDtcblxuLyoqXG4gKiBJbnRlcm5hbCBsaWJyYXJ5IGhlbHBlciB0aGF0IGhlbHBzIHRvIGNoZWNrIGlmIHZhbHVlIGlzIGVtcHR5XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuY29uc3QgaXNOaWwgPSAodmFsdWU6IERhdGUgfCBNb2Rlcm5EYXRlUGlja2VyT3B0aW9ucykgPT4ge1xuICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHx8ICh2YWx1ZSA9PT0gbnVsbCk7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtbW9kZXJuZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnbmd4LW1vZGVybmRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnbmd4LW1vZGVybmRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5neE1vZGVybmRhdGVwaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TW9kZXJuZGF0ZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IE1vZGVybkRhdGVQaWNrZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGRhdGVwaWNrZXIncyBpbnB1dFxuICAgKi9cbiAgQElucHV0KCkgaGVhZGxlc3MgPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IGRhdGVwaWNrZXIncyB2aXNpYmlsaXR5IHN0YXRlXG4gICAqL1xuICBASW5wdXQoKSBpc09wZW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEYXRlcGlja2VyIGRyb3Bkb3duIHBvc2l0aW9uXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvbiA9ICdib3R0b20tcmlnaHQnO1xuXG4gIHByaXZhdGUgcG9zaXRpb25zID0gWydib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0J107XG5cbiAgaW5uZXJWYWx1ZTogRGF0ZTtcbiAgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gIGRpc3BsYXlGb3JtYXQ6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgYmFyVGl0bGU6IHN0cmluZztcbiAgYmFyVGl0bGVGb3JtYXQ6IHN0cmluZztcbiAgYmFyVGl0bGVJZkVtcHR5OiBzdHJpbmc7XG4gIG1pblllYXI6IG51bWJlcjtcbiAgbWF4WWVhcjogbnVtYmVyO1xuICBmaXJzdENhbGVuZGFyRGF5OiBudW1iZXI7XG4gIHZpZXc6IHN0cmluZztcbiAgeWVhcnM6IHsgeWVhcjogbnVtYmVyOyBpc1RoaXNZZWFyOiBib29sZWFuOyBpc1RvZGF5OiBib29sZWFuOyBpc1NlbGVjdGFibGU6IGJvb2xlYW4gfVtdO1xuICBkYXlOYW1lczogc3RyaW5nW107XG4gIG1vbnRoTmFtZXM6IEFycmF5PGFueT47XG4gIGRheU5hbWVzRm9ybWF0OiBzdHJpbmc7XG4gIG1vbnRoTmFtZXNGb3JtYXQ6IHN0cmluZztcbiAgZGF5czoge1xuICAgIGRhdGU6IERhdGU7XG4gICAgZGF5OiBudW1iZXI7XG4gICAgbW9udGg6IG51bWJlcjtcbiAgICB5ZWFyOiBudW1iZXI7XG4gICAgaW5UaGlzTW9udGg6IGJvb2xlYW47XG4gICAgaXNUb2RheTogYm9vbGVhbjtcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzU2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBpc1dlZWtlbmQ6IGJvb2xlYW47XG4gICAgaXNIb2xpZGF5OiBib29sZWFuO1xuICB9W107XG4gIGxvY2FsZTogb2JqZWN0O1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBhZGRDbGFzczogQWRkQ2xhc3M7XG4gIGFkZFN0eWxlOiB7IFtrOiBzdHJpbmddOiBhbnkgfSB8IG51bGw7XG4gIGZpZWxkSWQ6IHN0cmluZztcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHVzZUVtcHR5QmFyVGl0bGU6IGJvb2xlYW47XG4gIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWw6IERhdGUpIHtcbiAgICB0aGlzLmlubmVyVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuaW5uZXJWYWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlldyA9ICd5ZWFyJztcbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgdGhpcy5pbml0RGF5TmFtZXMoKTtcbiAgICB0aGlzLmluaXRZZWFycygpO1xuICAgIHRoaXMuaW5pdE1vbnRoTmFtZSgpO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIC8vIENoZWNrIGlmICdwb3NpdGlvbicgcHJvcGVydHkgaXMgY29ycmVjdFxuICAgIGlmICh0aGlzLnBvc2l0aW9ucy5pbmRleE9mKHRoaXMucG9zaXRpb24pID09PSAtMSkge1xuICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB0aGlzLnBvc2l0aW9ucy5qb2luKCcsICcpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBuZy1tb2Rlcm5kYXRlcGlja2VyOiBpbnZhbGlkIHBvc2l0aW9uIHByb3BlcnR5IHZhbHVlICcke3RoaXMucG9zaXRpb259JyAoZXhwZWN0ZWQ6ICR7ZXhwZWN0ZWRWYWx1ZXN9KWA7XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgICB0aGlzLmluaXREYXlOYW1lcygpO1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB0aGlzLmluaXRZZWFycygpO1xuICAgICAgdGhpcy5pbml0TW9udGhOYW1lKCk7XG4gIH1cblxuICBnZXQgZGVmYXVsdEZpZWxkSWQoKTogc3RyaW5nIHtcbiAgICAvLyBPbmx5IGV2YWx1YXRlIGFuZCBpbmNyZW1lbnQgaWYgcmVxdWlyZWRcbiAgICBjb25zdCB2YWx1ZSA9IGBkYXRlcGlja2VyLSR7Y291bnRlcisrfWA7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkZWZhdWx0RmllbGRJZCcsIHt2YWx1ZX0pO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc2V0T3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7IC8vIHRoaXMgY29uc3Qgd2FzIGFkZGVkIGJlY2F1c2UgZHVyaW5nIG15IHRlc3RzLCBJIG5vdGljZWQgdGhhdCBhdCB0aGlzIGxldmVsIHRoaXMuZGF0ZSBpcyB1bmRlZmluZWRcbiAgICB0aGlzLm1pblllYXIgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1pblllYXIgfHwgZ2V0WWVhcih0b2RheSkgLSAzMDtcbiAgICB0aGlzLm1heFllYXIgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1heFllYXIgfHwgZ2V0WWVhcih0b2RheSkgKyAzMDtcbiAgICB0aGlzLmRpc3BsYXlGb3JtYXQgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmRpc3BsYXlGb3JtYXQgfHwgJ01NTSBEWyxdIFlZWVknO1xuICAgIHRoaXMuYmFyVGl0bGVGb3JtYXQgPSAnWVlZWSc7XG4gICAgdGhpcy5kYXlOYW1lc0Zvcm1hdCA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZGF5TmFtZXNGb3JtYXQgfHwgJ2RkZCc7XG4gICAgdGhpcy5tb250aE5hbWVzRm9ybWF0ID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb250aE5hbWVzRm9ybWF0IHx8ICdNTU0nO1xuICAgIHRoaXMuYmFyVGl0bGVJZkVtcHR5ID0gKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKTtcbiAgICB0aGlzLmZpcnN0Q2FsZW5kYXJEYXkgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmZpcnN0Q2FsZW5kYXJEYXkgfHwgMDtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMub3B0aW9ucyAmJiB7IGxvY2FsZTogdGhpcy5vcHRpb25zLmxvY2FsZSB9IHx8IHt9O1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyIHx8ICcnO1xuICAgIHRoaXMuYWRkQ2xhc3MgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmFkZENsYXNzIHx8IHt9O1xuICAgIHRoaXMuYWRkU3R5bGUgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmFkZFN0eWxlIHx8IHt9O1xuICAgIHRoaXMuZmllbGRJZCA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZmllbGRJZCB8fCB0aGlzLmRlZmF1bHRGaWVsZElkO1xuICB9XG5cbiAgbmV4dFllYXIoKTogdm9pZCB7XG4gICAgICB0aGlzLmRhdGUgPSBhZGRZZWFycyh0aGlzLmRhdGUsIDEpO1xuICAgICAgdGhpcy5iYXJUaXRsZSA9IGZvcm1hdCh0aGlzLmRhdGUsIHRoaXMuYmFyVGl0bGVGb3JtYXQsIHRoaXMubG9jYWxlKTtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgdGhpcy5pbml0TW9udGhOYW1lKCk7XG4gIH1cblxuICBwcmV2WWVhcigpOiB2b2lkIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHN1YlllYXJzKHRoaXMuZGF0ZSwgMSk7XG4gICAgICB0aGlzLmJhclRpdGxlID0gZm9ybWF0KHRoaXMuZGF0ZSwgdGhpcy5iYXJUaXRsZUZvcm1hdCwgdGhpcy5sb2NhbGUpO1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB0aGlzLmluaXRNb250aE5hbWUoKTtcbiAgfVxuXG4gIHNldERhdGUoaTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlID0gdGhpcy5kYXlzW2ldLmRhdGU7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZGF0ZTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzZXRZZWFyKGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0ZSA9IHNldFllYXIodGhpcy5kYXRlLCB0aGlzLnllYXJzW2ldLnllYXIpO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuaW5pdE1vbnRoTmFtZSgpO1xuICAgIHRoaXMudmlldyA9ICd5ZWFyJztcbiAgfVxuXG4gIHNlbGVjdE1vbnRoKGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0ZSA9IHNldE1vbnRoKHRoaXMuZGF0ZSwgaSk7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5pbml0TW9udGhOYW1lKCk7XG4gICAgdGhpcy52aWV3ID0gJ3llYXInO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgc3BlY2lmaWVkIGRhdGUgaXMgaW4gcmFuZ2Ugb2YgbWluIGFuZCBtYXggZGF0ZXNcbiAgICogQHBhcmFtIGRhdGVcbiAgICovXG4gIHByaXZhdGUgaXNEYXRlU2VsZWN0YWJsZShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzTmlsKHRoaXMub3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbkRhdGVTZXQgPSAhaXNOaWwodGhpcy5vcHRpb25zLm1pbkRhdGUpO1xuICAgIGNvbnN0IG1heERhdGVTZXQgPSAhaXNOaWwodGhpcy5vcHRpb25zLm1heERhdGUpO1xuXG4gICAgY29uc3QgdGltZXN0YW1wID0gZGF0ZS52YWx1ZU9mKCk7XG5cbiAgICBpZiAobWluRGF0ZVNldCAmJiAodGltZXN0YW1wIDwgdGhpcy5vcHRpb25zLm1pbkRhdGUudmFsdWVPZigpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChtYXhEYXRlU2V0ICYmICh0aW1lc3RhbXAgPiB0aGlzLm9wdGlvbnMubWF4RGF0ZS52YWx1ZU9mKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGlzV2Vla2VuZERheShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZHNEYXkgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy53ZWVrZW5kc0RheSk7XG4gICAgaWYgKHdlZWtlbmRzRGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndlZWtlbmRzRGF5LmluZGV4T2YoZ2V0RGF5KGRhdGUpKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0hvbGlkYXkoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFyZUhvbGlkYXlzID0gQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuaG9saWRheUxpc3QpO1xuICAgIGlmIChhcmVIb2xpZGF5cykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ob2xpZGF5TGlzdC5zb21lKChkYXkpID0+IGlzU2FtZURheShkYXksIGRhdGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpbml0KCk6IHZvaWQge1xuICAgIC8vIHRoaXMuZGF0ZSBtYXkgYmUgbnVsbCBhZnRlciAucmVzZXQoKTsgZmFsbCBiYWNrIHRvIGN1cnJlbnQgZGF0ZS5cbiAgICBjb25zdCBhY3R1YWxEYXRlID0gdGhpcy5kYXRlIHx8IG5ldyBEYXRlKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGFydE9mTW9udGgoYWN0dWFsRGF0ZSk7XG4gICAgY29uc3QgZW5kID0gZW5kT2ZNb250aChhY3R1YWxEYXRlKTtcblxuICAgIHRoaXMuZGF5cyA9IGVhY2hEYXkoc3RhcnQsIGVuZCkubWFwKGRhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogZGF0ZSxcbiAgICAgICAgZGF5OiBnZXREYXRlKGRhdGUpLFxuICAgICAgICBtb250aDogZ2V0TW9udGgoZGF0ZSksXG4gICAgICAgIHllYXI6IGdldFllYXIoZGF0ZSksXG4gICAgICAgIGluVGhpc01vbnRoOiB0cnVlLFxuICAgICAgICBpc1RvZGF5OiBpc1RvZGF5KGRhdGUpLFxuICAgICAgICBpc1NlbGVjdGVkOiBpc1NhbWVEYXkoZGF0ZSwgdGhpcy5pbm5lclZhbHVlKSAmJiBpc1NhbWVNb250aChkYXRlLCB0aGlzLmlubmVyVmFsdWUpICYmIGlzU2FtZVllYXIoZGF0ZSwgdGhpcy5pbm5lclZhbHVlKSxcbiAgICAgICAgaXNTZWxlY3RhYmxlOiB0aGlzLmlzRGF0ZVNlbGVjdGFibGUoZGF0ZSksXG4gICAgICAgIGlzV2Vla2VuZDogdGhpcy5pc1dlZWtlbmREYXkoZGF0ZSksXG4gICAgICAgIGlzSG9saWRheTogdGhpcy5pc0hvbGlkYXkoZGF0ZSlcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCB0bXAgPSBnZXREYXkoc3RhcnQpIC0gdGhpcy5maXJzdENhbGVuZGFyRGF5O1xuICAgIGNvbnN0IHByZXZEYXlzID0gdG1wIDwgMCA/IDcgLSB0aGlzLmZpcnN0Q2FsZW5kYXJEYXkgOiB0bXA7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwcmV2RGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gc3ViRGF5cyhzdGFydCwgaSk7XG4gICAgICB0aGlzLmRheXMudW5zaGlmdCh7XG4gICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgIGRheTogZ2V0RGF0ZShkYXRlKSxcbiAgICAgICAgbW9udGg6IGdldE1vbnRoKGRhdGUpLFxuICAgICAgICB5ZWFyOiBnZXRZZWFyKGRhdGUpLFxuICAgICAgICBpblRoaXNNb250aDogZmFsc2UsXG4gICAgICAgIGlzVG9kYXk6IGlzVG9kYXkoZGF0ZSksXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2FtZURheShkYXRlLCB0aGlzLmlubmVyVmFsdWUpICYmIGlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuaW5uZXJWYWx1ZSkgJiYgaXNTYW1lWWVhcihkYXRlLCB0aGlzLmlubmVyVmFsdWUpLFxuICAgICAgICBpc1NlbGVjdGFibGU6IHRoaXMuaXNEYXRlU2VsZWN0YWJsZShkYXRlKSxcbiAgICAgICAgaXNXZWVrZW5kIDogdGhpcy5pc1dlZWtlbmREYXkoZGF0ZSksXG4gICAgICAgIGlzSG9saWRheTogdGhpcy5pc0hvbGlkYXkoZGF0ZSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gZm9ybWF0KHRoaXMuaW5uZXJWYWx1ZSwgdGhpcy5kaXNwbGF5Rm9ybWF0LCB0aGlzLmxvY2FsZSk7XG4gICAgICB0aGlzLmJhclRpdGxlID0gZm9ybWF0KHN0YXJ0LCB0aGlzLmJhclRpdGxlRm9ybWF0LCB0aGlzLmxvY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICB0aGlzLmJhclRpdGxlID0gdGhpcy51c2VFbXB0eUJhclRpdGxlID8gdGhpcy5iYXJUaXRsZUlmRW1wdHkgOiBmb3JtYXQodGhpcy5kYXRlLCB0aGlzLmJhclRpdGxlRm9ybWF0LCB0aGlzLmxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdFllYXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5tYXhZZWFyIC0gdGhpcy5taW5ZZWFyO1xuICAgIHRoaXMueWVhcnMgPSBBcnJheS5mcm9tKG5ldyBBcnJheShyYW5nZSksICh4LCBpKSA9PiBpICsgdGhpcy5taW5ZZWFyKS5tYXAoeWVhciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB5ZWFyLFxuICAgICAgICBpc1RoaXNZZWFyOiB5ZWFyID09PSBnZXRZZWFyKHRoaXMuZGF0ZSksXG4gICAgICAgIGlzVG9kYXk6IHllYXIgPT09IGdldFllYXIobmV3IERhdGUoKSksXG4gICAgICAgIGlzU2VsZWN0YWJsZTogdGhpcy5pc1llYXJTZWxlY3RhYmxlKHllYXIpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1llYXJTZWxlY3RhYmxlKGRhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1pbkRhdGUgPSAhaXNOaWwodGhpcy5vcHRpb25zLm1pbkRhdGUpID8gdGhpcy5vcHRpb25zLm1pbkRhdGUgOiBudWxsO1xuICAgIGNvbnN0IG1heERhdGUgPSAhaXNOaWwodGhpcy5vcHRpb25zLm1heERhdGUpID8gdGhpcy5vcHRpb25zLm1heERhdGUgOiBudWxsO1xuXG4gICAgaWYgKG1pbkRhdGUgJiYgbWF4RGF0ZSkge1xuICAgICAgcmV0dXJuIG1pbkRhdGUuZ2V0RnVsbFllYXIoKSA8PSBkYXRlICYmIGRhdGUgPD0gbWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGlmIChtaW5EYXRlKSB7XG4gICAgICByZXR1cm4gbWluRGF0ZS5nZXRGdWxsWWVhcigpIDw9IGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKG1heERhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlIDw9IG1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGluaXREYXlOYW1lcygpOiB2b2lkIHtcbiAgICB0aGlzLmRheU5hbWVzID0gW107XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpcnN0Q2FsZW5kYXJEYXk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IDYgKyBzdGFydDsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gc2V0RGF5KG5ldyBEYXRlKCksIGkpO1xuICAgICAgdGhpcy5kYXlOYW1lcy5wdXNoKGZvcm1hdChkYXRlLCB0aGlzLmRheU5hbWVzRm9ybWF0LCB0aGlzLmxvY2FsZSkpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRNb250aE5hbWUoKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdO1xuICAgIGNvbnN0IGFjdHVhbERhdGUgPSB0aGlzLmRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKGFjdHVhbERhdGUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gc3ViWWVhcnMobmV3IERhdGUoY3VycmVudERhdGUuc2V0TW9udGgoMTEpKSwgMSk7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gYWRkTW9udGhzKHN0YXJ0LCBpKTtcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGZvcm1hdChkYXRlLCB0aGlzLm1vbnRoTmFtZXNGb3JtYXQsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgaXNTZWxlY3RlZDogZGF0ZS5nZXRNb250aCgpID09PSBhY3R1YWxEYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGlzVGhpc01vbnRoOiBpc1NhbWVNb250aChkYXRlLCBuZXcgRGF0ZSgpKSAmJiBpc1NhbWVZZWFyKGFjdHVhbERhdGUsIG5ldyBEYXRlKCkpLFxuICAgICAgICBpc1NlbGVjdGFibGU6IHRoaXMuaXNNb250aFNlbGVjdGFibGUoZGF0ZSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubW9udGhOYW1lcyA9IG1vbnRoTmFtZXM7XG4gIH1cblxuICBwcml2YXRlIGlzTW9udGhTZWxlY3RhYmxlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBtaW5EYXRlID0gIWlzTmlsKHRoaXMub3B0aW9ucy5taW5EYXRlKSA/IHRoaXMub3B0aW9ucy5taW5EYXRlIDogbnVsbDtcbiAgICBjb25zdCBtYXhEYXRlID0gIWlzTmlsKHRoaXMub3B0aW9ucy5tYXhEYXRlKSA/IHRoaXMub3B0aW9ucy5tYXhEYXRlIDogbnVsbDtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuXG4gICAgaWYgKG1pbkRhdGUgJiYgbWF4RGF0ZSkge1xuICAgICAgY29uc3QgbWluWWVhciA9IG1pbkRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IG1heFllYXIgPSBtYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGlmICh5ZWFyIDwgbWluWWVhciB8fCB5ZWFyID4gbWF4WWVhcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ZWFyID09PSBtaW5ZZWFyICYmIG1vbnRoIDwgbWluRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHllYXIgPT09IG1heFllYXIgJiYgbW9udGggPiBtYXhEYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobWluRGF0ZSkge1xuICAgICAgaWYgKHllYXIgPCBtaW5EYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoeWVhciA9PT0gbWluRGF0ZS5nZXRGdWxsWWVhcigpICYmIG1vbnRoIDwgbWluRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG1heERhdGUpIHtcbiAgICAgIGlmICh5ZWFyID4gbWF4RGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHllYXIgPT09IG1heERhdGUuZ2V0RnVsbFllYXIoKSAmJiBtb250aCA+IG1heERhdGUuZ2V0TW9udGgoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlVmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcgPSB0aGlzLnZpZXcgPT09ICd5ZWFyJyA/ICd5ZWFycycgOiAneWVhcic7XG4gIH1cblxuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkO1xuXG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkICYmIHRoaXMudmlldyA9PT0gJ3llYXJzJykge1xuICAgICAgdGhpcy50b2dnbGVWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudmlldyA9PT0gJ3llYXJzJykge1xuICAgICAgdGhpcy50b2dnbGVWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoZmlyZVZhbHVlQ2hhbmdlRXZlbnQgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZSA9IG51bGw7XG4gICAgdGhpcy5pbm5lclZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmluaXRNb250aE5hbWUoKTtcbiAgICBpZiAoZmlyZVZhbHVlQ2hhbmdlRXZlbnQgJiYgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5pbm5lclZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbDogRGF0ZSkge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHZhbDtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbDtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgdGhpcy5pbml0TW9udGhOYW1lKCk7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGZvcm1hdCh0aGlzLmlubmVyVmFsdWUsIHRoaXMuZGlzcGxheUZvcm1hdCwgdGhpcy5sb2NhbGUpO1xuICAgICAgdGhpcy5iYXJUaXRsZSA9IGZvcm1hdChzdGFydE9mTW9udGgodmFsKSwgdGhpcy5iYXJUaXRsZUZvcm1hdCwgdGhpcy5sb2NhbGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgb25CbHVyKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uZ3gtbW9kZXJuZGF0ZXBpY2tlci1pbnB1dCcpO1xuXG4gICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGUudGFyZ2V0ID09PSBpbnB1dCB8fCBpbnB1dC5jb250YWlucyg8YW55PmUudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uZ3gtbW9kZXJuZGF0ZXBpY2tlci1jYWxlbmRhci1jb250YWluZXInKTtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpc1llYXJVbml0ID0gdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygneWVhci11bml0Jyk7XG4gICAgY29uc3QgaXNNb250aFVuaXQgPSB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb250aC11bml0Jyk7XG5cbiAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lciAhPT0gdGFyZ2V0ICYmICFjb250YWluZXIuY29udGFpbnModGFyZ2V0KSAmJiAhaXNZZWFyVW5pdCAmJiAhaXNNb250aFVuaXQpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuZ3gtbW9kZXJuZGF0ZXBpY2tlci1jb250YWluZXJcIj5cbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKm5nSWY9XCIhaGVhZGxlc3NcIiBjbGFzcz1cIm5neC1tb2Rlcm5kYXRlcGlja2VyLWlucHV0XCIgWyhuZ01vZGVsKV09XCJkaXNwbGF5VmFsdWVcIiByZWFkb25seSBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtuZ0NsYXNzXT1cImFkZENsYXNzXCIgW25nU3R5bGVdPVwiYWRkU3R5bGVcIiBbaWRdPVwiZmllbGRJZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjbGljayk9XCJ0b2dnbGUoKVwiIC8+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPGRpdiBjbGFzcz1cIm5neC1tb2Rlcm5kYXRlcGlja2VyLWNhbGVuZGFyLWNvbnRhaW5lciBuZ3gtbW9kZXJuZGF0ZXBpY2tlci1wb3NpdGlvbi17e3Bvc2l0aW9ufX1cIiAqbmdJZj1cImlzT3BlbmVkXCI+XG4gICAgPGRpdiBjbGFzcz1cInRvcGJhci1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNhbGVuZGFyLXNlbGVjdGlvbi15ZWFyXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNXB4XCIgaGVpZ2h0PVwiMTVweFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB4PVwiMHB4XCIgeT1cIjBweFwiXG4gIFx0ICAgICAgIHZpZXdCb3g9XCIwIDAgNDg5LjYgNDg5LjZcIiBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg5LjYgNDg5LjY7XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgICAgIChjbGljayk9XCJ2aWV3ID09PSAneWVhcicgJiYgcHJldlllYXIoKVwiPlxuICAgICAgICAgIDxnPlxuICAgICAgICAgIFx0PGc+XG4gICAgICAgICAgXHRcdDxwYXRoIHN0eWxlPVwiZmlsbDojMkMyRjMzO1wiIGQ9XCJNMjQ0LjgsNDg5LjZjMTM1LDAsMjQ0LjgtMTA5LjgsMjQ0LjgtMjQ0LjhTMzc5LjgsMCwyNDQuOCwwUzAsMTA5LjgsMCwyNDQuOFxuICAgICAgICAgIFx0XHRcdFMxMDkuOCw0ODkuNiwyNDQuOCw0ODkuNnogTTI0NC44LDE5LjhjMTI0LjEsMCwyMjUsMTAwLjksMjI1LDIyNXMtMTAwLjksMjI1LTIyNSwyMjVzLTIyNS0xMDAuOS0yMjUtMjI1UzEyMC43LDE5LjgsMjQ0LjgsMTkuOHpcIlxuICAgICAgICAgIFx0XHRcdC8+XG4gICAgICAgICAgXHRcdDxwYXRoIHN0eWxlPVwiZmlsbDojM0M5MkNBO1wiIGQ9XCJNMjY1LjUsMzI2LjFjMS45LDEuOSw0LjUsMi45LDcsMi45czUuMS0xLDctMi45YzMuOS0zLjksMy45LTEwLjEsMC0xNGwtNjcuMy02Ny4zbDY3LjMtNjcuM1xuICAgICAgICAgIFx0XHRcdGMzLjktMy45LDMuOS0xMC4xLDAtMTRzLTEwLjEtMy45LTE0LDBsLTc0LjMsNzQuM2MtMy45LDMuOS0zLjksMTAuMSwwLDE0TDI2NS41LDMyNi4xelwiLz5cbiAgICAgICAgICBcdDwvZz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRvcGJhci10aXRsZVwiIChjbGljayk9XCJ0b2dnbGVWaWV3KCk7IGluaXRZZWFycygpO1wiPnt7IGJhclRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTVweFwiIGhlaWdodD1cIjE1cHhcIiB2aWV3Qm94PVwiMCAwIDYgMTBcIiB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJMYXllcl8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHg9XCIwcHhcIiB5PVwiMHB4XCJcbiAgXHQgICAgICAgdmlld0JveD1cIjAgMCA0ODkuNiA0ODkuNlwiIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkuNiA0ODkuNjtcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInZpZXcgPT09ICd5ZWFyJyAmJiBuZXh0WWVhcigpXCI+XG4gICAgICAgICAgPGc+XG4gICAgICAgICAgXHQ8Zz5cbiAgICAgICAgICBcdFx0PHBhdGggc3R5bGU9XCJmaWxsOiMyQzJGMzM7XCIgZD1cIk0yNDQuOCw0ODkuNmMxMzUsMCwyNDQuOC0xMDkuOCwyNDQuOC0yNDQuOFMzNzkuOCwwLDI0NC44LDBTMCwxMDkuOCwwLDI0NC44XG4gICAgICAgICAgXHRcdFx0UzEwOS44LDQ4OS42LDI0NC44LDQ4OS42eiBNMjQ0LjgsMTkuOGMxMjQuMSwwLDIyNSwxMDAuOSwyMjUsMjI1cy0xMDAuOSwyMjUtMjI1LDIyNXMtMjI1LTEwMC45LTIyNS0yMjVTMTIwLjcsMTkuOCwyNDQuOCwxOS44elwiXG4gICAgICAgICAgXHRcdFx0Lz5cbiAgICAgICAgICBcdFx0PHBhdGggc3R5bGU9XCJmaWxsOiMzQzkyQ0E7XCIgZD1cIk0yMTAsMzI2LjFjMS45LDEuOSw0LjUsMi45LDcsMi45czUuMS0xLDctMi45bDc0LjMtNzQuM2MxLjktMS45LDIuOS00LjQsMi45LTdzLTEtNS4xLTIuOS03XG4gICAgICAgICAgXHRcdFx0TDIyNCwxNjMuNWMtMy45LTMuOS0xMC4xLTMuOS0xNCwwcy0zLjksMTAuMSwwLDE0bDY3LjMsNjcuM0wyMTAsMzEyLjFDMjA2LjIsMzE2LDIwNi4yLDMyMi4zLDIxMCwzMjYuMXpcIi8+XG4gICAgICAgICAgXHQ8L2c+XG4gICAgICAgICAgPC9nPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY2FsZW5kYXItZGF5LW5hbWVzXCIgKm5nSWY9XCJ2aWV3ID09PSAneWVhcidcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXktbmFtZS11bml0XCIgKm5nRm9yPVwibGV0IG5hbWUgb2YgZGF5TmFtZXNcIj57eyBuYW1lIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1haW4tY2FsZW5kYXItY29udGFpbmVyXCIgKm5nSWY9XCJ2aWV3ID09PSAneWVhcidcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNhbGVuZGFyLW1vbnRoLW5hbWVzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1uYW1lLXVuaXRcIiAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhOYW1lczsgbGV0IGluZGV4ID0gaW5kZXhcIiAoY2xpY2spPVwibW9udGguaXNTZWxlY3RhYmxlICYmIHNlbGVjdE1vbnRoKGluZGV4KVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9udGgtdW5pdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy10aGlzLW1vbnRoJzogbW9udGguaXNUaGlzTW9udGgsICAnaXMtZGlzYWJsZWQnOiAhbW9udGguaXNTZWxlY3RhYmxlICwnaXMtc2VsZWN0ZWQnOiBtb250aC5pc1NlbGVjdGVkfVwiPlxuICAgICAgICAgICAge3sgbW9udGgubmFtZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNhbGVuZGVyLWRheXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNhbGVuZGFyLWRheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LXVuaXRcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXM7IGxldCBpID0gaW5kZXg7XCIgPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnaXMtcHJldi1tb250aCc6ICFkYXkuaW5UaGlzTW9udGgsICdpcy10b2RheSc6IGRheS5pc1RvZGF5LCAgJ2lzLWRpc2FibGVkJzogIWRheS5pc1NlbGVjdGFibGUsICdpcy13ZWVrZW5kJzogZGF5LmlzV2Vla2VuZCAsICdpcy1ob2xpZGF5JyA6IGRheS5pc0hvbGlkYXksICdpcy1zZWxlY3RlZCc6IGRheS5pc1NlbGVjdGVkfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkYXkuaXNTZWxlY3RhYmxlICYmIHNldERhdGUoaSlcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRheSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWNhbGVuZGFyLWNvbnRhaW5lclwiICpuZ0lmPVwidmlldyA9PT0gJ3llYXJzJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY2FsZW5kYXIteWVhcnNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ5ZWFyLXVuaXRcIiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyczsgbGV0IGkgPSBpbmRleDtcIiBbbmdDbGFzc109XCJ7ICdpcy1zZWxlY3RlZCc6IHllYXIuaXNUaGlzWWVhciAsICdpcy10b2RheSc6IHllYXIuaXNUb2RheSAsICdpcy1kaXNhYmxlZCcgOiAheWVhci5pc1NlbGVjdGFibGV9XCIgKGNsaWNrKT1cInllYXIuaXNTZWxlY3RhYmxlICYmIHNldFllYXIoaSlcIj57eyB5ZWFyLnllYXIgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { NgxModerndatepickerComponent } from '../component/ngx-moderndatepicker.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgxModerndatepickerModule {
|
|
7
|
+
}
|
|
8
|
+
NgxModerndatepickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxModerndatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
NgxModerndatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxModerndatepickerModule, declarations: [NgxModerndatepickerComponent], imports: [CommonModule, FormsModule], exports: [NgxModerndatepickerComponent] });
|
|
10
|
+
NgxModerndatepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxModerndatepickerModule, imports: [[CommonModule, FormsModule]] });
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxModerndatepickerModule, decorators: [{
|
|
12
|
+
type: NgModule,
|
|
13
|
+
args: [{
|
|
14
|
+
declarations: [NgxModerndatepickerComponent],
|
|
15
|
+
imports: [CommonModule, FormsModule],
|
|
16
|
+
exports: [NgxModerndatepickerComponent]
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1vZGVybmRhdGVwaWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1tb2Rlcm5kYXRlcGlja2VyL21vZHVsZS9uZ3gtbW9kZXJuZGF0ZXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQU8zRixNQUFNLE9BQU8seUJBQXlCOztzSEFBekIseUJBQXlCO3VIQUF6Qix5QkFBeUIsaUJBSnJCLDRCQUE0QixhQUNqQyxZQUFZLEVBQUUsV0FBVyxhQUN6Qiw0QkFBNEI7dUhBRTNCLHlCQUF5QixZQUgzQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7MkZBR3pCLHlCQUF5QjtrQkFMckMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUM7aUJBQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTmd4TW9kZXJuZGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC9uZ3gtbW9kZXJuZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtOZ3hNb2Rlcm5kYXRlcGlja2VyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBleHBvcnRzOiBbTmd4TW9kZXJuZGF0ZXBpY2tlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TW9kZXJuZGF0ZXBpY2tlck1vZHVsZSB7IH1cbiJdfQ==
|