@skyux/datetime 11.27.0 → 11.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/documentation.json +2156 -2156
  2. package/esm2022/index.mjs +4 -4
  3. package/esm2022/lib/modules/date-pipe/fuzzy-date.pipe.mjs +2 -2
  4. package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +22 -9
  5. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar-change.mjs +2 -0
  6. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.mjs +383 -0
  7. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar-label.pipe.mjs +39 -0
  8. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar.component.mjs +100 -0
  9. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar.service.mjs +22 -0
  10. package/esm2022/lib/modules/datepicker/calendar/daypicker-button.component.mjs +23 -0
  11. package/esm2022/lib/modules/datepicker/calendar/daypicker-cell.component.mjs +129 -0
  12. package/esm2022/lib/modules/datepicker/calendar/daypicker-context.mjs +2 -0
  13. package/esm2022/lib/modules/datepicker/calendar/daypicker.component.mjs +221 -0
  14. package/esm2022/lib/modules/datepicker/calendar/monthpicker.component.mjs +80 -0
  15. package/esm2022/lib/modules/datepicker/calendar/yearpicker.component.mjs +87 -0
  16. package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +5 -4
  17. package/esm2022/lib/modules/datepicker/datepicker.component.mjs +24 -8
  18. package/esm2022/lib/modules/datepicker/datepicker.module.mjs +31 -67
  19. package/esm2022/lib/modules/datepicker/fuzzy/datepicker-input-fuzzy.directive.mjs +516 -0
  20. package/esm2022/lib/modules/datepicker/fuzzy/fuzzy-date.mjs +2 -0
  21. package/esm2022/lib/modules/datepicker/fuzzy/fuzzy-date.service.mjs +411 -0
  22. package/fesm2022/skyux-datetime.mjs +561 -553
  23. package/fesm2022/skyux-datetime.mjs.map +1 -1
  24. package/index.d.ts +5 -5
  25. package/lib/modules/date-pipe/fuzzy-date.pipe.d.ts +2 -2
  26. package/lib/modules/date-range-picker/date-range-picker.component.d.ts +6 -1
  27. package/lib/modules/datepicker/{datepicker-calendar-change.d.ts → calendar/datepicker-calendar-change.d.ts} +1 -1
  28. package/lib/modules/datepicker/{datepicker-calendar-inner.component.d.ts → calendar/datepicker-calendar-inner.component.d.ts} +6 -6
  29. package/lib/modules/datepicker/{datepicker-calendar.component.d.ts → calendar/datepicker-calendar.component.d.ts} +3 -3
  30. package/lib/modules/datepicker/calendar/datepicker-calendar.service.d.ts +16 -0
  31. package/lib/modules/datepicker/{daypicker-button.component.d.ts → calendar/daypicker-button.component.d.ts} +3 -3
  32. package/lib/modules/datepicker/{daypicker-cell.component.d.ts → calendar/daypicker-cell.component.d.ts} +5 -5
  33. package/lib/modules/datepicker/{datepicker-date.d.ts → calendar/daypicker-context.d.ts} +2 -1
  34. package/lib/modules/datepicker/{daypicker.component.d.ts → calendar/daypicker.component.d.ts} +4 -4
  35. package/lib/modules/datepicker/{monthpicker.component.d.ts → calendar/monthpicker.component.d.ts} +3 -3
  36. package/lib/modules/datepicker/{yearpicker.component.d.ts → calendar/yearpicker.component.d.ts} +3 -3
  37. package/lib/modules/datepicker/datepicker-input.directive.d.ts +1 -1
  38. package/lib/modules/datepicker/datepicker.component.d.ts +8 -3
  39. package/lib/modules/datepicker/datepicker.module.d.ts +11 -22
  40. package/lib/modules/datepicker/{datepicker-input-fuzzy.directive.d.ts → fuzzy/datepicker-input-fuzzy.directive.d.ts} +3 -3
  41. package/package.json +9 -9
  42. package/esm2022/lib/modules/datepicker/datepicker-calendar-change.mjs +0 -2
  43. package/esm2022/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +0 -381
  44. package/esm2022/lib/modules/datepicker/datepicker-calendar-label.pipe.mjs +0 -39
  45. package/esm2022/lib/modules/datepicker/datepicker-calendar.component.mjs +0 -96
  46. package/esm2022/lib/modules/datepicker/datepicker-date.mjs +0 -2
  47. package/esm2022/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +0 -515
  48. package/esm2022/lib/modules/datepicker/datepicker.service.mjs +0 -21
  49. package/esm2022/lib/modules/datepicker/daypicker-button.component.mjs +0 -22
  50. package/esm2022/lib/modules/datepicker/daypicker-cell.component.mjs +0 -128
  51. package/esm2022/lib/modules/datepicker/daypicker.component.mjs +0 -220
  52. package/esm2022/lib/modules/datepicker/fuzzy-date.mjs +0 -2
  53. package/esm2022/lib/modules/datepicker/fuzzy-date.service.mjs +0 -411
  54. package/esm2022/lib/modules/datepicker/monthpicker.component.mjs +0 -79
  55. package/esm2022/lib/modules/datepicker/yearpicker.component.mjs +0 -86
  56. package/lib/modules/datepicker/datepicker.service.d.ts +0 -15
  57. /package/lib/modules/datepicker/{datepicker-calendar-label.pipe.d.ts → calendar/datepicker-calendar-label.pipe.d.ts} +0 -0
  58. /package/lib/modules/datepicker/{fuzzy-date.d.ts → fuzzy/fuzzy-date.d.ts} +0 -0
  59. /package/lib/modules/datepicker/{fuzzy-date.service.d.ts → fuzzy/fuzzy-date.service.d.ts} +0 -0
@@ -1,515 +0,0 @@
1
- import { Directive, HostListener, Input, Optional, forwardRef, inject, } from '@angular/core';
2
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
4
- import { Subject } from 'rxjs';
5
- import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
6
- import { SkyDateFormatter } from './date-formatter';
7
- import { SkyDatepickerHostService } from './datepicker-host.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "./datepicker-config.service";
10
- import * as i2 from "./fuzzy-date.service";
11
- import * as i3 from "@skyux/i18n";
12
- import * as i4 from "./datepicker.component";
13
- const SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR = {
14
- provide: NG_VALUE_ACCESSOR,
15
- useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),
16
- multi: true,
17
- };
18
- const SKY_FUZZY_DATEPICKER_VALIDATOR = {
19
- provide: NG_VALIDATORS,
20
- useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),
21
- multi: true,
22
- };
23
- export class SkyFuzzyDatepickerInputDirective {
24
- /**
25
- * The date format for the input. Place this attribute on the `input` element
26
- * to override the default in `SkyDatepickerConfigService`.
27
- * @default "MM/DD/YYYY"
28
- */
29
- set dateFormat(value) {
30
- this.#_dateFormat = value;
31
- if (this.#value) {
32
- const formattedDate = this.#fuzzyDateService.format(this.#value, this.dateFormat, this.#locale);
33
- this.#setInputElementValue(formattedDate);
34
- this.#changeDetector.markForCheck();
35
- }
36
- }
37
- // TODO: Refactor to not have getter logic
38
- get dateFormat() {
39
- return (this.#_dateFormat ||
40
- this.#configService.dateFormat ||
41
- this.#preferredShortDateFormat);
42
- }
43
- /**
44
- * Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.
45
- * To set the disabled state on reactive forms, use the `FormControl` instead.
46
- * @default false
47
- */
48
- set disabled(value) {
49
- this.#_disabled = value;
50
- this.#datepickerComponent.disabled = value;
51
- this.#renderer.setProperty(this.#elementRef.nativeElement, 'disabled', value);
52
- }
53
- get disabled() {
54
- return this.#_disabled;
55
- }
56
- /**
57
- * Whether to prevent users from specifying dates that are in the future.
58
- * Place this attribute on the `input` element.
59
- * @default false
60
- */
61
- set futureDisabled(value) {
62
- this.#_futureDisabled = value;
63
- this.#datepickerComponent.maxDate = this.#getMaxDate();
64
- this.#onValidatorChange();
65
- }
66
- get futureDisabled() {
67
- return this.#_futureDisabled;
68
- }
69
- /**
70
- * The latest fuzzy date allowed. Place this attribute on the `input` element
71
- * to prevent fuzzy dates after a specified date. This property accepts
72
- * a `SkyFuzzyDate` value that includes numeric month, day, and year values.
73
- * For example: `{ month: 1, day: 1, year: 2027 }`.
74
- */
75
- set maxDate(value) {
76
- this.#_maxDate = value;
77
- this.#datepickerComponent.maxDate = this.#getMaxDate();
78
- this.#onValidatorChange();
79
- }
80
- get maxDate() {
81
- return this.#_maxDate;
82
- }
83
- /**
84
- * The earliest fuzzy date allowed. Place this attribute on the `input` element
85
- * to prevent fuzzy dates before a specified date. This property accepts a `SkyFuzzyDate` value
86
- * that includes numeric month, day, and year values.
87
- * For example: `{ month: 1, day: 1, year: 2007 }`.
88
- */
89
- set minDate(value) {
90
- this.#_minDate = value;
91
- this.#datepickerComponent.minDate = this.#getMinDate();
92
- this.#onValidatorChange();
93
- }
94
- get minDate() {
95
- return this.#_minDate;
96
- }
97
- /**
98
- * The fuzzy date to open the calendar to initially.
99
- * This property accepts a `SkyFuzzyDate` value that includes numeric month, day, and year values.
100
- * For example: `{ month: 1, day: 1, year: 2007 }`.
101
- * @default The current date
102
- */
103
- set startAtDate(value) {
104
- this.#_startAtDate = value;
105
- this.#datepickerComponent.startAtDate = this.#getStartAtDate();
106
- }
107
- // TODO: Refactor to not have getter logic
108
- get startAtDate() {
109
- return this.#_startAtDate;
110
- }
111
- /**
112
- * The starting day of the week in the calendar, where `0` sets the starting day
113
- * to Sunday. Place this attribute on the `input` element to override the default
114
- * in `SkyDatepickerConfigService`.
115
- * @default 0
116
- */
117
- set startingDay(value) {
118
- this.#_startingDay = value;
119
- this.#datepickerComponent.startingDay = this.startingDay;
120
- this.#onValidatorChange();
121
- }
122
- // TODO: Refactor to not have getter logic
123
- get startingDay() {
124
- return this.#_startingDay || this.#configService.startingDay;
125
- }
126
- /**
127
- * Whether to require the year in fuzzy dates.
128
- * @default false
129
- */
130
- set yearRequired(value) {
131
- this.#_yearRequired = value;
132
- this.#onValidatorChange();
133
- }
134
- get yearRequired() {
135
- return this.#_yearRequired;
136
- }
137
- get #value() {
138
- return this.#_value;
139
- }
140
- set #value(value) {
141
- this.#updateValue(value);
142
- }
143
- #control;
144
- #dateFormatter;
145
- #locale;
146
- #preferredShortDateFormat;
147
- #ngUnsubscribe;
148
- #notifyTouched;
149
- #_futureDisabled;
150
- #_dateFormat;
151
- #_disabled;
152
- #_maxDate;
153
- #_minDate;
154
- #_startAtDate;
155
- #_startingDay;
156
- #_value;
157
- #_yearRequired;
158
- #changeDetector;
159
- #configService;
160
- #elementRef;
161
- #fuzzyDateService;
162
- #renderer;
163
- #datepickerComponent;
164
- #datepickerHostSvc;
165
- constructor(changeDetector, configService, elementRef, fuzzyDateService, localeProvider, renderer, datepickerComponent) {
166
- /**
167
- * Whether to disable date validation on the fuzzy datepicker input.
168
- * @default false
169
- */
170
- this.skyDatepickerNoValidate = false;
171
- this.#dateFormatter = new SkyDateFormatter();
172
- this.#ngUnsubscribe = new Subject();
173
- this.#_futureDisabled = false;
174
- this.#_disabled = false;
175
- this.#_yearRequired = false;
176
- this.#datepickerHostSvc = inject(SkyDatepickerHostService, {
177
- optional: true,
178
- });
179
- // istanbul ignore next
180
- this.#onChange = (_) => { };
181
- // istanbul ignore next
182
- this.#onValidatorChange = () => { };
183
- if (!datepickerComponent) {
184
- throw new Error('You must wrap the `skyFuzzyDatepickerInput` directive within a ' +
185
- '`<sky-datepicker>` component!');
186
- }
187
- this.#changeDetector = changeDetector;
188
- this.#configService = configService;
189
- this.#elementRef = elementRef;
190
- this.#fuzzyDateService = fuzzyDateService;
191
- this.#renderer = renderer;
192
- this.#datepickerComponent = datepickerComponent;
193
- this.#locale = localeProvider.defaultLocale;
194
- localeProvider
195
- .getLocaleInfo()
196
- .pipe(takeUntil(this.#ngUnsubscribe))
197
- .subscribe((localeInfo) => {
198
- this.#locale = localeInfo.locale;
199
- SkyDateFormatter.setLocale(this.#locale);
200
- this.#preferredShortDateFormat =
201
- SkyDateFormatter.getPreferredShortDateFormat();
202
- });
203
- this.#datepickerHostSvc?.focusout
204
- .pipe(takeUntilDestroyed())
205
- .subscribe((evt) => {
206
- const isFocusingInput = evt.relatedTarget === this.#elementRef.nativeElement;
207
- if (!isFocusingInput) {
208
- this.#notifyTouched?.();
209
- }
210
- });
211
- }
212
- ngOnInit() {
213
- if (this.yearRequired) {
214
- if (this.dateFormat?.toLowerCase().indexOf('y') === -1) {
215
- throw new Error('You have configured conflicting settings. Year is required and dateFormat does not include year.');
216
- }
217
- }
218
- const element = this.#elementRef.nativeElement;
219
- this.#renderer.addClass(element, 'sky-form-control');
220
- }
221
- ngAfterContentInit() {
222
- this.#datepickerComponent.dateChange
223
- .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))
224
- .subscribe((value) => {
225
- this.#value = value;
226
- });
227
- }
228
- ngAfterViewInit() {
229
- // This is needed to address a bug in Angular 4.
230
- // When a control value is set initially, its value is not represented on the view.
231
- // See: https://github.com/angular/angular/issues/13792
232
- // Of note is the parent check which allows us to determine if the form is reactive.
233
- // Without this check there is a changed before checked error
234
- /* istanbul ignore else */
235
- if (this.#control && this.#control.parent) {
236
- setTimeout(() => {
237
- this.#control?.setValue(this.#value, {
238
- emitEvent: false,
239
- });
240
- this.#changeDetector.markForCheck();
241
- });
242
- }
243
- }
244
- ngOnDestroy() {
245
- this.#ngUnsubscribe.next();
246
- this.#ngUnsubscribe.complete();
247
- }
248
- onInputChange(event) {
249
- this.#onValueChange(event.target.value);
250
- }
251
- onInputBlur() {
252
- const formattedDate = this.#fuzzyDateService.format(this.#value, this.dateFormat, this.#locale);
253
- if (this.#control?.valid) {
254
- this.#setInputElementValue(formattedDate);
255
- }
256
- }
257
- onInput() {
258
- this.#control?.markAsDirty();
259
- }
260
- writeValue(value) {
261
- this.#updateValue(value, false);
262
- }
263
- validate(control) {
264
- if (!this.#control) {
265
- this.#control = control;
266
- }
267
- if (this.skyDatepickerNoValidate) {
268
- return null;
269
- }
270
- if (!this.#control.value) {
271
- return null;
272
- }
273
- const value = control.value;
274
- let fuzzyDate;
275
- let validationError = null;
276
- if (typeof value === 'string') {
277
- fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(value, this.dateFormat);
278
- }
279
- else {
280
- fuzzyDate = value;
281
- }
282
- if (!fuzzyDate) {
283
- validationError = {
284
- skyFuzzyDate: {
285
- invalid: value,
286
- },
287
- };
288
- }
289
- else {
290
- if (!fuzzyDate.year && this.yearRequired) {
291
- validationError = {
292
- skyFuzzyDate: {
293
- yearRequired: value,
294
- },
295
- };
296
- }
297
- if (!validationError && fuzzyDate.year) {
298
- let fuzzyDateRange;
299
- if (this.maxDate) {
300
- fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(fuzzyDate, this.maxDate);
301
- if (!fuzzyDateRange.valid) {
302
- validationError = {
303
- skyFuzzyDate: {
304
- maxDate: value,
305
- maxDateFormatted: this.#dateFormatter.format(fuzzyDateRange.endDate, this.dateFormat),
306
- },
307
- };
308
- }
309
- }
310
- if (!validationError && this.minDate) {
311
- fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(this.minDate, fuzzyDate);
312
- if (!fuzzyDateRange.valid) {
313
- validationError = {
314
- skyFuzzyDate: {
315
- minDate: value,
316
- minDateFormatted: this.#dateFormatter.format(fuzzyDateRange.startDate, this.dateFormat),
317
- },
318
- };
319
- }
320
- }
321
- if (!validationError && this.futureDisabled) {
322
- fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(fuzzyDate, this.#fuzzyDateService.getCurrentFuzzyDate());
323
- if (!fuzzyDateRange.valid) {
324
- validationError = {
325
- skyFuzzyDate: {
326
- futureDisabled: value,
327
- },
328
- };
329
- }
330
- }
331
- }
332
- }
333
- if (validationError) {
334
- // Mark the invalid control as touched so that the input's invalid CSS styles appear.
335
- // (This is only required when the invalid value is set by the FormControl constructor.)
336
- this.#control.markAsTouched();
337
- }
338
- return validationError;
339
- }
340
- registerOnChange(fn) {
341
- this.#onChange = fn;
342
- }
343
- registerOnTouched(fn) {
344
- this.#notifyTouched = fn;
345
- }
346
- registerOnValidatorChange(fn) {
347
- this.#onValidatorChange = fn;
348
- }
349
- setDisabledState(disabled) {
350
- this.disabled = disabled;
351
- this.#datepickerComponent.disabled = disabled;
352
- }
353
- /**
354
- * Detects changes to the underlying input element's value and updates the ngModel accordingly.
355
- * This is useful if you need to update the ngModel value before the input element loses focus.
356
- */
357
- detectInputValueChange() {
358
- this.#onValueChange(this.#elementRef.nativeElement.value);
359
- }
360
- onFocusout(evt) {
361
- if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {
362
- this.#notifyTouched?.();
363
- }
364
- }
365
- #onValueChange(newValue) {
366
- this.#value = newValue;
367
- }
368
- #setInputElementValue(value) {
369
- this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);
370
- }
371
- #getMaxDate() {
372
- if (this.maxDate) {
373
- const maxDate = this.#fuzzyDateService.getMomentFromFuzzyDate(this.maxDate);
374
- if (maxDate.isValid()) {
375
- return maxDate.toDate();
376
- }
377
- }
378
- else if (this.futureDisabled) {
379
- return new Date();
380
- }
381
- return this.#configService.maxDate;
382
- }
383
- #getMinDate() {
384
- if (this.minDate) {
385
- const minDate = this.#fuzzyDateService.getMomentFromFuzzyDate(this.minDate);
386
- if (minDate.isValid()) {
387
- return minDate.toDate();
388
- }
389
- }
390
- return this.#configService.minDate;
391
- }
392
- #getStartAtDate() {
393
- if (this.startAtDate) {
394
- const startAtDate = this.#fuzzyDateService.getMomentFromFuzzyDate(this.startAtDate);
395
- if (startAtDate.isValid()) {
396
- return startAtDate.toDate();
397
- }
398
- }
399
- return this.#configService.startAtDate;
400
- }
401
- /* istanbul ignore next */
402
- #fuzzyDatesEqual(dateA, dateB) {
403
- return (dateA !== undefined &&
404
- dateB !== undefined &&
405
- ((!dateA.day && !dateB.day) || dateA.day === dateB.day) &&
406
- ((!dateA.month && !dateB.month) || dateA.month === dateB.month) &&
407
- ((!dateA.year && !dateB.year) || dateA.year === dateB.year));
408
- }
409
- // istanbul ignore next
410
- #onChange;
411
- // istanbul ignore next
412
- #onValidatorChange;
413
- /**
414
- * Update the value of the form control and input element
415
- * @param emitEvent Denotes if we emit an event to the consumer's form control. We do not want to do this if the value is being updated via a `setValue` call or a `patchValue` call as this is already handled by Angular.
416
- * In these cases we do not want to fire `onChange` as it will cause extra `valueChange` and `statusChange` events and the status of the form should not be affected by these changes.
417
- */
418
- #updateValue(value, emitEvent = true) {
419
- if (this.#_value === value ||
420
- (this.#_value === undefined && value === null)) {
421
- return;
422
- }
423
- let fuzzyDate;
424
- let fuzzyMoment;
425
- let dateValue;
426
- let formattedDate;
427
- if (value instanceof Date) {
428
- dateValue = value;
429
- formattedDate = this.#dateFormatter.format(value, this.dateFormat);
430
- fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromSelectedDate(value, this.dateFormat);
431
- }
432
- else if (typeof value === 'string') {
433
- fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(value, this.dateFormat);
434
- if (fuzzyDate) {
435
- formattedDate = this.#fuzzyDateService.format(fuzzyDate, this.dateFormat, this.#locale);
436
- }
437
- if (!formattedDate) {
438
- formattedDate = value;
439
- }
440
- fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);
441
- if (fuzzyMoment) {
442
- dateValue = fuzzyMoment.toDate();
443
- }
444
- }
445
- else {
446
- fuzzyDate = value;
447
- formattedDate = this.#fuzzyDateService.format(fuzzyDate, this.dateFormat, this.#locale);
448
- fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);
449
- if (fuzzyMoment) {
450
- dateValue = fuzzyMoment.toDate();
451
- }
452
- }
453
- const areFuzzyDatesEqual = this.#fuzzyDatesEqual(this.#_value, fuzzyDate);
454
- const isNewValue = fuzzyDate !== this.#_value || !areFuzzyDatesEqual;
455
- this.#_value = fuzzyDate || value;
456
- if (isNewValue) {
457
- if (emitEvent) {
458
- this.#onChange(this.#_value);
459
- }
460
- else {
461
- this.#control?.setValue(this.#_value, { emitEvent: false });
462
- }
463
- this.#datepickerComponent.selectedDate = dateValue;
464
- }
465
- this.#setInputElementValue(formattedDate || '');
466
- }
467
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i2.SkyFuzzyDateService }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
468
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: SkyFuzzyDatepickerInputDirective, selector: "[skyFuzzyDatepickerInput]", inputs: { dateFormat: "dateFormat", disabled: "disabled", futureDisabled: "futureDisabled", maxDate: "maxDate", minDate: "minDate", startAtDate: "startAtDate", skyDatepickerNoValidate: "skyDatepickerNoValidate", startingDay: "startingDay", yearRequired: "yearRequired" }, host: { listeners: { "focusout": "onFocusout($event)", "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInput()" } }, providers: [
469
- SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,
470
- SKY_FUZZY_DATEPICKER_VALIDATOR,
471
- ], ngImport: i0 }); }
472
- }
473
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, decorators: [{
474
- type: Directive,
475
- args: [{
476
- selector: '[skyFuzzyDatepickerInput]',
477
- providers: [
478
- SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,
479
- SKY_FUZZY_DATEPICKER_VALIDATOR,
480
- ],
481
- host: {
482
- '(focusout)': 'onFocusout($event)',
483
- },
484
- }]
485
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i2.SkyFuzzyDateService }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i4.SkyDatepickerComponent, decorators: [{
486
- type: Optional
487
- }] }], propDecorators: { dateFormat: [{
488
- type: Input
489
- }], disabled: [{
490
- type: Input
491
- }], futureDisabled: [{
492
- type: Input
493
- }], maxDate: [{
494
- type: Input
495
- }], minDate: [{
496
- type: Input
497
- }], startAtDate: [{
498
- type: Input
499
- }], skyDatepickerNoValidate: [{
500
- type: Input
501
- }], startingDay: [{
502
- type: Input
503
- }], yearRequired: [{
504
- type: Input
505
- }], onInputChange: [{
506
- type: HostListener,
507
- args: ['change', ['$event']]
508
- }], onInputBlur: [{
509
- type: HostListener,
510
- args: ['blur']
511
- }], onInput: [{
512
- type: HostListener,
513
- args: ['input']
514
- }] } });
515
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQUtyRSxNQUFNLG1DQUFtQyxHQUFHO0lBQzFDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMvRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7SUFDL0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBWUYsTUFBTSxPQUFPLGdDQUFnQztJQVMzQzs7OztPQUlHO0lB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QUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDVCxtQ0FBbUM7d0JBQ25DLDhCQUE4QjtxQkFDL0I7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLFlBQVksRUFBRSxvQkFBb0I7cUJBQ25DO2lCQUNGOzswQkErTkksUUFBUTt5Q0EvTUEsVUFBVTtzQkFEcEIsS0FBSztnQkE4QkssUUFBUTtzQkFEbEIsS0FBSztnQkFzQkssY0FBYztzQkFEeEIsS0FBSztnQkFrQkssT0FBTztzQkFEakIsS0FBSztnQkFrQkssT0FBTztzQkFEakIsS0FBSztnQkFrQkssV0FBVztzQkFEckIsS0FBSztnQkFnQkMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVVLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBa0JLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBd0pDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU0zQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBY2IsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlRm9ybWF0dGVyIH0gZnJvbSAnLi9kYXRlLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VySG9zdFNlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGVTZXJ2aWNlIH0gZnJvbSAnLi9mdXp6eS1kYXRlLnNlcnZpY2UnO1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5RnV6enlEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICBdLFxuICBob3N0OiB7XG4gICAgJyhmb2N1c291dCknOiAnb25Gb2N1c291dCgkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RnV6enlEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGVGb3JtYXQgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGUsXG4gICAgICApO1xuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICB2YWx1ZSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJldmVudCB1c2VycyBmcm9tIHNwZWNpZnlpbmcgZGF0ZXMgdGhhdCBhcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZnV0dXJlRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZnV0dXJlRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1heERhdGUgPSB0aGlzLiNnZXRNYXhEYXRlKCk7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZnV0dXJlRGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19mdXR1cmVEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGZ1enp5IGRhdGUgYWxsb3dlZC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBwcmV2ZW50IGZ1enp5IGRhdGVzIGFmdGVyIGEgc3BlY2lmaWVkIGRhdGUuIFRoaXMgcHJvcGVydHkgYWNjZXB0c1xuICAgKiBhIGBTa3lGdXp6eURhdGVgIHZhbHVlIHRoYXQgaW5jbHVkZXMgbnVtZXJpYyBtb250aCwgZGF5LCBhbmQgeWVhciB2YWx1ZXMuXG4gICAqIEZvciBleGFtcGxlOiBgeyBtb250aDogMSwgZGF5OiAxLCB5ZWFyOiAyMDI3IH1gLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMuI2dldE1heERhdGUoKTtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19tYXhEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlYXJsaWVzdCBmdXp6eSBkYXRlIGFsbG93ZWQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gcHJldmVudCBmdXp6eSBkYXRlcyBiZWZvcmUgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWVcbiAgICogdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMDcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy4jZ2V0TWluRGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1enp5IGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYSBgU2t5RnV6enlEYXRlYCB2YWx1ZSB0aGF0IGluY2x1ZGVzIG51bWVyaWMgbW9udGgsIGRheSwgYW5kIHllYXIgdmFsdWVzLlxuICAgKiBGb3IgZXhhbXBsZTogYHsgbW9udGg6IDEsIGRheTogMSwgeWVhcjogMjAwNyB9YC5cbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgZGF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydEF0RGF0ZSh2YWx1ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0QXREYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydEF0RGF0ZSA9IHRoaXMuI2dldFN0YXJ0QXREYXRlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydEF0RGF0ZSgpOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRBdERhdGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGRhdGUgdmFsaWRhdGlvbiBvbiB0aGUgZnV6enkgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lEYXRlcGlja2VyTm9WYWxpZGF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGluIHRoZSBjYWxlbmRhciwgd2hlcmUgYDBgIHNldHMgdGhlIHN0YXJ0aW5nIGRheVxuICAgKiB0byBTdW5kYXkuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAgICogaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydGluZ0RheSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydGluZ0RheSA9IHRoaXMuc3RhcnRpbmdEYXk7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YXJ0aW5nRGF5IHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2Uuc3RhcnRpbmdEYXk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byByZXF1aXJlIHRoZSB5ZWFyIGluIGZ1enp5IGRhdGVzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB5ZWFyUmVxdWlyZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfeWVhclJlcXVpcmVkID0gdmFsdWU7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgeWVhclJlcXVpcmVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfeWVhclJlcXVpcmVkO1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcblxuICAjbG9jYWxlOiBzdHJpbmc7XG5cbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjbm90aWZ5VG91Y2hlZDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICNfZnV0dXJlRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjX2RhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19tYXhEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI19taW5EYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI19zdGFydEF0RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI195ZWFyUmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2U7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZTtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNkYXRlcGlja2VyQ29tcG9uZW50OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5ICNkYXRlcGlja2VySG9zdFN2YyA9IGluamVjdChTa3lEYXRlcGlja2VySG9zdFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZSxcbiAgICBsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXIsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBkYXRlcGlja2VyQ29tcG9uZW50PzogU2t5RGF0ZXBpY2tlckNvbXBvbmVudCxcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RnV6enlEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UgPSBjb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UgPSBmdXp6eURhdGVTZXJ2aWNlO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgICB0aGlzLiNsb2NhbGUgPSBsb2NhbGVQcm92aWRlci5kZWZhdWx0TG9jYWxlO1xuICAgIGxvY2FsZVByb3ZpZGVyXG4gICAgICAuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuI2xvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZSh0aGlzLiNsb2NhbGUpO1xuICAgICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI2RhdGVwaWNrZXJIb3N0U3ZjPy5mb2N1c291dFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNGb2N1c2luZ0lucHV0ID1cbiAgICAgICAgICBldnQucmVsYXRlZFRhcmdldCA9PT0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICghaXNGb2N1c2luZ0lucHV0KSB7XG4gICAgICAgICAgdGhpcy4jbm90aWZ5VG91Y2hlZD8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCd5JykgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IGhhdmUgY29uZmlndXJlZCBjb25mbGljdGluZyBzZXR0aW5ncy4gWWVhciBpcyByZXF1aXJlZCBhbmQgZGF0ZUZvcm1hdCBkb2VzIG5vdCBpbmNsdWRlIHllYXIuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kYXRlQ2hhbmdlXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogRGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLiN2YWx1ZSA9IHZhbHVlO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXG4gICAgaWYgKHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jY29udHJvbC5wYXJlbnQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiN2YWx1ZSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgcHVibGljIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgIHRoaXMuI3ZhbHVlLFxuICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgdGhpcy4jbG9jYWxlLFxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jY29udHJvbD8udmFsaWQpIHtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCB2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdXp6eURhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZnV6enlEYXRlLnllYXIgJiYgdGhpcy55ZWFyUmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgeWVhclJlcXVpcmVkOiB2YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiBmdXp6eURhdGUueWVhcikge1xuICAgICAgICBsZXQgZnV6enlEYXRlUmFuZ2U7XG5cbiAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtYXhEYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBtYXhEYXRlRm9ybWF0dGVkOiB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlLmVuZERhdGUsXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBtaW5EYXRlRm9ybWF0dGVkOiB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlLnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB0aGlzLmZ1dHVyZURpc2FibGVkKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICAgdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRDdXJyZW50RnV6enlEYXRlKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIGZ1dHVyZURpc2FibGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlUb3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkZvY3Vzb3V0KGV2dDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jZGF0ZXBpY2tlckhvc3RTdmM/LmlzRm9jdXNpbmdEYXRlcGlja2VyKGV2dCkpIHtcbiAgICAgIHRoaXMuI25vdGlmeVRvdWNoZWQ/LigpO1xuICAgIH1cbiAgfVxuXG4gICNvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiN2YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gICNnZXRNYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1heERhdGUpIHtcbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoXG4gICAgICAgIHRoaXMubWF4RGF0ZSxcbiAgICAgICk7XG4gICAgICBpZiAobWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1heERhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZ1dHVyZURpc2FibGVkKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZ1NlcnZpY2UubWF4RGF0ZTtcbiAgfVxuXG4gICNnZXRNaW5EYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoXG4gICAgICAgIHRoaXMubWluRGF0ZSxcbiAgICAgICk7XG4gICAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1pbkRhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAjZ2V0U3RhcnRBdERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc3RhcnRBdERhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXJ0QXREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKFxuICAgICAgICB0aGlzLnN0YXJ0QXREYXRlLFxuICAgICAgKTtcbiAgICAgIGlmIChzdGFydEF0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0QXREYXRlLnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jY29uZmlnU2VydmljZS5zdGFydEF0RGF0ZTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNmdXp6eURhdGVzRXF1YWwoZGF0ZUE/OiBTa3lGdXp6eURhdGUsIGRhdGVCPzogU2t5RnV6enlEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGVBICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGRhdGVCICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICgoIWRhdGVBLmRheSAmJiAhZGF0ZUIuZGF5KSB8fCBkYXRlQS5kYXkgPT09IGRhdGVCLmRheSkgJiZcbiAgICAgICgoIWRhdGVBLm1vbnRoICYmICFkYXRlQi5tb250aCkgfHwgZGF0ZUEubW9udGggPT09IGRhdGVCLm1vbnRoKSAmJlxuICAgICAgKCghZGF0ZUEueWVhciAmJiAhZGF0ZUIueWVhcikgfHwgZGF0ZUEueWVhciA9PT0gZGF0ZUIueWVhcilcbiAgICApO1xuICB9XG5cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICAjdXBkYXRlVmFsdWUodmFsdWU6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuI192YWx1ZSA9PT0gdmFsdWUgfHxcbiAgICAgICh0aGlzLiNfdmFsdWUgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZ1enp5TW9tZW50OiBhbnk7XG4gICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm9ybWF0dGVkRGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgZnV6enlEYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgKTtcbiAgICAgIGlmIChmdXp6eURhdGUpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgdGhpcy4jbG9jYWxlLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBmdXp6eU1vbWVudCA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpO1xuXG4gICAgICBpZiAoZnV6enlNb21lbnQpIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZnV6enlNb21lbnQudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlIGFzIFNreUZ1enp5RGF0ZTtcbiAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuI2xvY2FsZSxcbiAgICAgICk7XG4gICAgICBmdXp6eU1vbWVudCA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpO1xuXG4gICAgICBpZiAoZnV6enlNb21lbnQpIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZnV6enlNb21lbnQudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXJlRnV6enlEYXRlc0VxdWFsID0gdGhpcy4jZnV6enlEYXRlc0VxdWFsKHRoaXMuI192YWx1ZSwgZnV6enlEYXRlKTtcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gZnV6enlEYXRlICE9PSB0aGlzLiNfdmFsdWUgfHwgIWFyZUZ1enp5RGF0ZXNFcXVhbDtcblxuICAgIHRoaXMuI192YWx1ZSA9IGZ1enp5RGF0ZSB8fCB2YWx1ZTtcblxuICAgIGlmIChpc05ld1ZhbHVlKSB7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMuI29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSBkYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSB8fCAnJyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,21 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * @internal
6
- */
7
- export class SkyDatepickerService {
8
- constructor() {
9
- /**
10
- * Whether a key date popover is currently displayed.
11
- * Useful for communicating across all daypicker siblings when a popover is displayed.
12
- */
13
- this.keyDatePopoverStream = new Subject();
14
- }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDatepickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDatepickerService }); }
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDatepickerService, decorators: [{
19
- type: Injectable
20
- }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSS9COztHQUVHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUVFOzs7V0FHRztRQUNJLHlCQUFvQixHQUN6QixJQUFJLE9BQU8sRUFBaUMsQ0FBQztLQUNoRDsrR0FQWSxvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyRGF0ZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXRlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBrZXkgZGF0ZSBwb3BvdmVyIGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQuXG4gICAqIFVzZWZ1bCBmb3IgY29tbXVuaWNhdGluZyBhY3Jvc3MgYWxsIGRheXBpY2tlciBzaWJsaW5ncyB3aGVuIGEgcG9wb3ZlciBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBwdWJsaWMga2V5RGF0ZVBvcG92ZXJTdHJlYW06IFN1YmplY3Q8U2t5RGF0ZXBpY2tlckRhdGUgfCB1bmRlZmluZWQ+ID1cbiAgICBuZXcgU3ViamVjdDxTa3lEYXRlcGlja2VyRGF0ZSB8IHVuZGVmaW5lZD4oKTtcbn1cbiJdfQ==
@@ -1,22 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "./datepicker-calendar-inner.component";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "./datepicker-calendar-label.pipe";
6
- /**
7
- * @internal
8
- */
9
- export class SkyDayPickerButtonComponent {
10
- constructor(datepicker) {
11
- this.datepicker = datepicker;
12
- }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDayPickerButtonComponent, deps: [{ token: i1.SkyDatepickerCalendarInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SkyDayPickerButtonComponent, selector: "sky-daypicker-button", inputs: { date: "date" }, ngImport: i0, template: "@if (date) {\n <button\n class=\"sky-btn sky-btn-sm sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"date.disabled\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date),\n 'sky-datepicker-btn-disabled': date.disabled,\n 'sky-datepicker-btn-key-date': date.keyDate\n }\"\n [attr.aria-label]=\"date.date | skyDatepickerCalendarLabel\"\n (click)=\"datepicker.selectCalendar($event, date.date, true)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-secondary': date.secondary }\">\n {{ date.label }}\n </span>\n </button>\n}\n", styles: [".sky-datepicker-btn-date:not(.sky-theme-modern *){--sky-override-daypicker-disabled-style: italic;--sky-override-daypicker-key-date-color: #d93a3d;--sky-override-daypicker-key-date-left: 15px;--sky-override-daypicker-key-date-size: 5px;--sky-override-daypicker-key-date-top: 22px}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-datepicker-btn-date{--sky-override-daypicker-disabled-style: italic;--sky-override-daypicker-key-date-left: 12px;--sky-override-daypicker-key-date-top: 22px}.sky-datepicker-btn-disabled{font-style:var(--sky-override-daypicker-disabled-style)}.sky-datepicker-btn-key-date{position:relative}.sky-datepicker-btn-key-date:before{position:absolute;content:\"\";height:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxs));width:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxs));background-color:var(--sky-override-daypicker-key-date-color, var(--sky-color-icon-danger));border-radius:50%;left:var(--sky-override-daypicker-key-date-left, calc(50% - var(--sky-size-icon-xxs) / 2));top:var(--sky-override-daypicker-key-date-top, calc(50% + var(--sky-font-size-body-m) * var(--sky-font-line_height-body-m) / 2 - var(--sky-size-icon-xxs) / 2))}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i3.SkyDatepickerCalendarLabelPipe, name: "skyDatepickerCalendarLabel" }] }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDayPickerButtonComponent, decorators: [{
17
- type: Component,
18
- args: [{ selector: 'sky-daypicker-button', template: "@if (date) {\n <button\n class=\"sky-btn sky-btn-sm sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"date.disabled\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date),\n 'sky-datepicker-btn-disabled': date.disabled,\n 'sky-datepicker-btn-key-date': date.keyDate\n }\"\n [attr.aria-label]=\"date.date | skyDatepickerCalendarLabel\"\n (click)=\"datepicker.selectCalendar($event, date.date, true)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-secondary': date.secondary }\">\n {{ date.label }}\n </span>\n </button>\n}\n", styles: [".sky-datepicker-btn-date:not(.sky-theme-modern *){--sky-override-daypicker-disabled-style: italic;--sky-override-daypicker-key-date-color: #d93a3d;--sky-override-daypicker-key-date-left: 15px;--sky-override-daypicker-key-date-size: 5px;--sky-override-daypicker-key-date-top: 22px}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-datepicker-btn-date{--sky-override-daypicker-disabled-style: italic;--sky-override-daypicker-key-date-left: 12px;--sky-override-daypicker-key-date-top: 22px}.sky-datepicker-btn-disabled{font-style:var(--sky-override-daypicker-disabled-style)}.sky-datepicker-btn-key-date{position:relative}.sky-datepicker-btn-key-date:before{position:absolute;content:\"\";height:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxs));width:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxs));background-color:var(--sky-override-daypicker-key-date-color, var(--sky-color-icon-danger));border-radius:50%;left:var(--sky-override-daypicker-key-date-left, calc(50% - var(--sky-size-icon-xxs) / 2));top:var(--sky-override-daypicker-key-date-top, calc(50% + var(--sky-font-size-body-m) * var(--sky-font-line_height-body-m) / 2 - var(--sky-size-icon-xxs) / 2))}\n"] }]
19
- }], ctorParameters: () => [{ type: i1.SkyDatepickerCalendarInnerComponent }], propDecorators: { date: [{
20
- type: Input
21
- }] } });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFLakQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8sMkJBQTJCO0lBT3RDLFlBQW1CLFVBQStDO1FBQS9DLGVBQVUsR0FBVixVQUFVLENBQXFDO0lBQUcsQ0FBQzsrR0FQM0QsMkJBQTJCO21HQUEzQiwyQkFBMkIsc0ZDYnhDLGl0QkFxQkE7OzRGRFJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSxzQkFBc0I7d0dBU3pCLElBQUk7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXItaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJEYXRlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWRhdGUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF5cGlja2VyLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RheXBpY2tlci1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF5UGlja2VyQnV0dG9uQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRlIHRoaXMgcGlja2VyIGJ1dHRvbiB3aWxsIHJlcHJlc2VudCBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0ZTogU2t5RGF0ZXBpY2tlckRhdGUgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50KSB7fVxufVxuIiwiQGlmIChkYXRlKSB7XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1zbSBza3ktYnRuLWRlZmF1bHQgc2t5LWRhdGVwaWNrZXItYnRuLWRhdGVcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFtkaXNhYmxlZF09XCJkYXRlLmRpc2FibGVkXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWRhdGVwaWNrZXItYnRuLXNlbGVjdGVkJzogZGF0ZS5zZWxlY3RlZCxcbiAgICAgICdza3ktYnRuLWRpc2FibGVkJzogZGF0ZS5kaXNhYmxlZCxcbiAgICAgICdza3ktYnRuLWFjdGl2ZSc6IGRhdGVwaWNrZXIuaXNBY3RpdmUoZGF0ZSksXG4gICAgICAnc2t5LWRhdGVwaWNrZXItYnRuLWRpc2FibGVkJzogZGF0ZS5kaXNhYmxlZCxcbiAgICAgICdza3ktZGF0ZXBpY2tlci1idG4ta2V5LWRhdGUnOiBkYXRlLmtleURhdGVcbiAgICB9XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRhdGUuZGF0ZSB8IHNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsXCJcbiAgICAoY2xpY2spPVwiZGF0ZXBpY2tlci5zZWxlY3RDYWxlbmRhcigkZXZlbnQsIGRhdGUuZGF0ZSwgdHJ1ZSlcIlxuICA+XG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnc2t5LWRhdGVwaWNrZXItc2Vjb25kYXJ5JzogZGF0ZS5zZWNvbmRhcnkgfVwiPlxuICAgICAge3sgZGF0ZS5sYWJlbCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG59XG4iXX0=