@odx/angular 5.5.5 → 5.6.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.
- package/CHANGELOG.md +12 -0
- package/components/calendar/lib/calendar.component.d.ts +9 -3
- package/components/calendar/lib/calendar.config.d.ts +11 -0
- package/components/calendar/lib/calendar.service.d.ts +10 -4
- package/components/calendar/lib/components/calendar-month/calendar-month.component.d.ts +1 -3
- package/components/calendar/lib/daterange.service.d.ts +14 -0
- package/components/calendar/lib/directives/calendar-cell.directive.d.ts +19 -4
- package/components/calendar/lib/directives/calendar-view.directive.d.ts +5 -2
- package/components/calendar/lib/models/date-range.d.ts +18 -0
- package/components/calendar/lib/models/index.d.ts +3 -0
- package/components/calendar/lib/models/selected-date.d.ts +9 -0
- package/components/calendar/lib/models/selection-mode.d.ts +4 -0
- package/components/calendar/lib/pipes/date-label.pipe.d.ts +1 -0
- package/components/calendar/lib/utils/check-cell-in-range.d.ts +7 -0
- package/components/calendar/lib/utils/index.d.ts +1 -0
- package/components/calendar/lib/utils/validate-daterange.d.ts +1 -0
- package/components/daterangepicker/README.md +3 -0
- package/components/daterangepicker/index.d.ts +7 -0
- package/components/daterangepicker/lib/daterangepicker.component.d.ts +40 -0
- package/components/daterangepicker/lib/daterangepicker.config.d.ts +29 -0
- package/components/daterangepicker/lib/daterangepicker.module.d.ts +11 -0
- package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +25 -0
- package/components/daterangepicker/lib/directives/index.d.ts +1 -0
- package/components/daterangepicker/lib/models/daterangepicker-input-date-order.d.ts +1 -0
- package/components/daterangepicker/lib/models/daterangepicker-input-pattern.d.ts +1 -0
- package/components/daterangepicker/lib/models/index.d.ts +2 -0
- package/components/daterangepicker/lib/range.validator.d.ts +10 -0
- package/components/daterangepicker/lib/required.validator.d.ts +10 -0
- package/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.d.ts +3 -0
- package/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.d.ts +2 -0
- package/components/daterangepicker/lib/utils/index.d.ts +2 -0
- package/esm2022/cdk/active-indicator/lib/active-indicator.directive.mjs +2 -2
- package/esm2022/components/calendar/lib/calendar.component.mjs +25 -11
- package/esm2022/components/calendar/lib/calendar.config.mjs +3 -1
- package/esm2022/components/calendar/lib/calendar.service.mjs +28 -13
- package/esm2022/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +6 -10
- package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +4 -4
- package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +4 -4
- package/esm2022/components/calendar/lib/daterange.service.mjs +57 -0
- package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +85 -5
- package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +8 -2
- package/esm2022/components/calendar/lib/models/date-range.mjs +7 -0
- package/esm2022/components/calendar/lib/models/index.mjs +4 -1
- package/esm2022/components/calendar/lib/models/selected-date.mjs +5 -0
- package/esm2022/components/calendar/lib/models/selection-mode.mjs +6 -0
- package/esm2022/components/calendar/lib/services/calendar-month.service.mjs +1 -1
- package/esm2022/components/calendar/lib/utils/check-cell-in-range.mjs +28 -0
- package/esm2022/components/calendar/lib/utils/index.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/validate-daterange.mjs +5 -0
- package/esm2022/components/datepicker/lib/datepicker.component.mjs +2 -2
- package/esm2022/components/daterangepicker/index.mjs +8 -0
- package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +174 -0
- package/esm2022/components/daterangepicker/lib/daterangepicker.config.mjs +7 -0
- package/esm2022/components/daterangepicker/lib/daterangepicker.module.mjs +21 -0
- package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +65 -0
- package/esm2022/components/daterangepicker/lib/directives/index.mjs +2 -0
- package/esm2022/components/daterangepicker/lib/models/daterangepicker-input-date-order.mjs +2 -0
- package/esm2022/components/daterangepicker/lib/models/daterangepicker-input-pattern.mjs +2 -0
- package/esm2022/components/daterangepicker/lib/models/index.mjs +3 -0
- package/esm2022/components/daterangepicker/lib/range.validator.mjs +37 -0
- package/esm2022/components/daterangepicker/lib/required.validator.mjs +34 -0
- package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.mjs +16 -0
- package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.mjs +30 -0
- package/esm2022/components/daterangepicker/lib/utils/index.mjs +3 -0
- package/esm2022/components/daterangepicker/odx-angular-components-daterangepicker.mjs +5 -0
- package/esm2022/components/list/lib/components/expandable-list-item/expandable-list-item.component.mjs +3 -3
- package/esm2022/utils/lib/helpers/event-manager.mjs +27 -8
- package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
- package/fesm2022/odx-angular-components-calendar.mjs +261 -56
- package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-datepicker.mjs +1 -1
- package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-daterangepicker.mjs +364 -0
- package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -0
- package/fesm2022/odx-angular-components-list.mjs +2 -2
- package/fesm2022/odx-angular-components-list.mjs.map +1 -1
- package/fesm2022/odx-angular-utils.mjs +33 -16
- package/fesm2022/odx-angular-utils.mjs.map +1 -1
- package/package.json +7 -1
- package/utils/lib/helpers/event-manager.d.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges } from '@angular/core';
|
|
2
2
|
import { NgChanges } from '@odx/angular/utils';
|
|
3
3
|
import { CalendarService } from './calendar.service';
|
|
4
|
-
import {
|
|
4
|
+
import { DaterangeService } from './daterange.service';
|
|
5
|
+
import { CalendarView, DateFilter, DateRange, DateType, DateTypeRange } from './models';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export declare class CalendarComponent implements OnChanges {
|
|
7
|
-
|
|
8
|
+
private readonly config;
|
|
8
9
|
protected readonly calendar: CalendarService;
|
|
10
|
+
protected readonly daterange: DaterangeService;
|
|
11
|
+
protected readonly CalendarView: typeof CalendarView;
|
|
9
12
|
readonly element: import("@angular/core").ElementRef<HTMLElement>;
|
|
10
13
|
selectedDate: DateType | null;
|
|
14
|
+
selectedDateRange?: DateTypeRange | null;
|
|
11
15
|
minDate?: Date | null;
|
|
12
16
|
maxDate?: Date | null;
|
|
13
17
|
filterFn?: DateFilter | null;
|
|
14
18
|
selectedDateChange: EventEmitter<Date | null>;
|
|
19
|
+
selectedDateRangeChange: EventEmitter<DateRange | null>;
|
|
20
|
+
constructor();
|
|
15
21
|
ngOnChanges(changes: NgChanges<CalendarComponent>): void;
|
|
16
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarComponent, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarComponent, "odx-calendar", never, { "selectedDate": { "alias": "selectedDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "filterFn": { "alias": "filterFn"; "required": false; }; }, { "selectedDateChange": "selectedDateChange"; }, never, never, true, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarComponent, "odx-calendar", never, { "selectedDate": { "alias": "selectedDate"; "required": false; }; "selectedDateRange": { "alias": "selectedDateRange"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "filterFn": { "alias": "filterFn"; "required": false; }; }, { "selectedDateChange": "selectedDateChange"; "selectedDateRangeChange": "selectedDateRangeChange"; }, never, never, true, never>;
|
|
18
24
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Locale } from 'date-fns';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { CalendarSelectionMode } from './models/selection-mode';
|
|
3
4
|
export interface CalendarConfig {
|
|
4
5
|
/**
|
|
5
6
|
* Pattern by which month-year label is transformed
|
|
@@ -51,6 +52,11 @@ export interface CalendarConfig {
|
|
|
51
52
|
* @default enGB
|
|
52
53
|
*/
|
|
53
54
|
locale: BehaviorSubject<Locale>;
|
|
55
|
+
/**
|
|
56
|
+
* Setting by which calendar switches to selecting a date range
|
|
57
|
+
* @default CalendarSelectionMode.Date
|
|
58
|
+
*/
|
|
59
|
+
selectionMode: CalendarSelectionMode;
|
|
54
60
|
yearView: {
|
|
55
61
|
itemsPerRow: number;
|
|
56
62
|
};
|
|
@@ -70,6 +76,7 @@ export declare const CalendarConfig: import("@angular/core").InjectionToken<Part
|
|
|
70
76
|
yearA11yLabel: string;
|
|
71
77
|
displayAdjacentDays: boolean;
|
|
72
78
|
locale: BehaviorSubject<Locale>;
|
|
79
|
+
selectionMode: CalendarSelectionMode;
|
|
73
80
|
yearView: {
|
|
74
81
|
itemsPerRow: number;
|
|
75
82
|
};
|
|
@@ -88,6 +95,7 @@ export declare const CalendarConfig: import("@angular/core").InjectionToken<Part
|
|
|
88
95
|
yearA11yLabel: string;
|
|
89
96
|
displayAdjacentDays: boolean;
|
|
90
97
|
locale: BehaviorSubject<Locale>;
|
|
98
|
+
selectionMode: CalendarSelectionMode;
|
|
91
99
|
yearView: {
|
|
92
100
|
itemsPerRow: number;
|
|
93
101
|
};
|
|
@@ -106,6 +114,7 @@ export declare const CalendarConfig: import("@angular/core").InjectionToken<Part
|
|
|
106
114
|
yearA11yLabel: string;
|
|
107
115
|
displayAdjacentDays: boolean;
|
|
108
116
|
locale: BehaviorSubject<Locale>;
|
|
117
|
+
selectionMode: CalendarSelectionMode;
|
|
109
118
|
yearView: {
|
|
110
119
|
itemsPerRow: number;
|
|
111
120
|
};
|
|
@@ -124,6 +133,7 @@ export declare const CalendarConfig: import("@angular/core").InjectionToken<Part
|
|
|
124
133
|
yearA11yLabel: string;
|
|
125
134
|
displayAdjacentDays: boolean;
|
|
126
135
|
locale: BehaviorSubject<Locale>;
|
|
136
|
+
selectionMode: CalendarSelectionMode;
|
|
127
137
|
yearView: {
|
|
128
138
|
itemsPerRow: number;
|
|
129
139
|
};
|
|
@@ -142,6 +152,7 @@ export declare const CalendarConfig: import("@angular/core").InjectionToken<Part
|
|
|
142
152
|
yearA11yLabel: string;
|
|
143
153
|
displayAdjacentDays: boolean;
|
|
144
154
|
locale: BehaviorSubject<Locale>;
|
|
155
|
+
selectionMode: CalendarSelectionMode;
|
|
145
156
|
yearView: {
|
|
146
157
|
itemsPerRow: number;
|
|
147
158
|
};
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { CalendarView, DateSelectEvent, DateSelectOptions, DateType } from './models';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class CalendarService {
|
|
4
|
-
private readonly calendarView$$;
|
|
5
5
|
private readonly activeDate$$;
|
|
6
|
-
private readonly
|
|
6
|
+
private readonly hoveredDate$$;
|
|
7
|
+
private readonly calendarView$$;
|
|
8
|
+
private readonly dateSelectEvents$$;
|
|
9
|
+
readonly outputDate$: EventEmitter<Date | null>;
|
|
7
10
|
readonly calendarView$: import("rxjs").Observable<CalendarView>;
|
|
11
|
+
readonly dateSelectEvents$: import("rxjs").Observable<DateSelectEvent>;
|
|
8
12
|
readonly selectedDate$: import("rxjs").Observable<Date | null>;
|
|
9
13
|
readonly activeDate$: import("rxjs").Observable<Date>;
|
|
14
|
+
readonly previewDate$: import("rxjs").Observable<Date>;
|
|
10
15
|
setActiveDate(value: DateType | null): void;
|
|
11
|
-
|
|
16
|
+
setHoveredDate(value: DateType | null): void;
|
|
17
|
+
selectDate(value: DateType | null, options?: DateSelectOptions): void;
|
|
12
18
|
changeView(view: CalendarView): void;
|
|
13
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarService, never>;
|
|
14
20
|
static ɵprov: i0.ɵɵInjectableDeclaration<CalendarService>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
1
|
import { CalendarViewDirective } from '../../directives';
|
|
3
2
|
import { CalendarView } from '../../models';
|
|
4
3
|
import { CalendarMonthService } from '../../services';
|
|
@@ -7,7 +6,6 @@ export declare class CalendarMonthComponent extends CalendarViewDirective {
|
|
|
7
6
|
protected readonly calendarMonth: CalendarMonthService;
|
|
8
7
|
protected readonly nextView = CalendarView.Years;
|
|
9
8
|
protected readonly currentView = CalendarView.Month;
|
|
10
|
-
selectedChange: EventEmitter<Date | null>;
|
|
11
9
|
protected previousDay(event: Event): void;
|
|
12
10
|
protected nextDay(event: Event): void;
|
|
13
11
|
protected previousWeek(event: Event): void;
|
|
@@ -16,5 +14,5 @@ export declare class CalendarMonthComponent extends CalendarViewDirective {
|
|
|
16
14
|
protected nextMonth(event: Event): void;
|
|
17
15
|
protected selectDate(value: Date): void;
|
|
18
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarMonthComponent, never>;
|
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarMonthComponent, "odx-calendar-month", never, {}, {
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarMonthComponent, "odx-calendar-month", never, {}, {}, never, never, true, never>;
|
|
20
18
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { DateRange, DateTypeRange } from './models';
|
|
4
|
+
import { DateRangeState } from './models/date-range';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class DaterangeService {
|
|
7
|
+
private readonly calendar;
|
|
8
|
+
private readonly dateRangeState$$;
|
|
9
|
+
readonly outputDateRange$: EventEmitter<DateRange | null>;
|
|
10
|
+
readonly dateRangeState$: Observable<DateRangeState>;
|
|
11
|
+
setDateRange(value: DateTypeRange): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DaterangeService, never>;
|
|
13
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DaterangeService>;
|
|
14
|
+
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { OnChanges } from '@angular/core';
|
|
1
|
+
import { OnChanges, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { NgChanges } from '@odx/angular/utils';
|
|
3
|
-
import { CalendarView } from '../models';
|
|
3
|
+
import { CalendarSelectionMode, CalendarView, DateRangeState } from '../models';
|
|
4
4
|
import { DateLabelPipe } from '../pipes';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class CalendarCellDirective implements OnChanges {
|
|
6
|
+
export declare class CalendarCellDirective implements OnChanges, OnInit, OnDestroy {
|
|
7
7
|
private readonly disabledController;
|
|
8
|
+
private readonly eventManager;
|
|
9
|
+
private readonly calendarService;
|
|
10
|
+
private registeredEventId;
|
|
8
11
|
protected readonly config: {
|
|
9
12
|
monthYearLabel: string;
|
|
10
13
|
monthLabel: string;
|
|
@@ -16,6 +19,7 @@ export declare class CalendarCellDirective implements OnChanges {
|
|
|
16
19
|
yearA11yLabel: string;
|
|
17
20
|
displayAdjacentDays: boolean;
|
|
18
21
|
locale: import("rxjs").BehaviorSubject<import("date-fns").Locale>;
|
|
22
|
+
selectionMode: CalendarSelectionMode;
|
|
19
23
|
yearView: {
|
|
20
24
|
itemsPerRow: number;
|
|
21
25
|
};
|
|
@@ -32,12 +36,23 @@ export declare class CalendarCellDirective implements OnChanges {
|
|
|
32
36
|
protected get isDisabled(): boolean;
|
|
33
37
|
protected isCurrent: boolean;
|
|
34
38
|
protected adjacent: boolean;
|
|
39
|
+
protected isInRange: boolean;
|
|
40
|
+
protected isRangeStart: boolean;
|
|
41
|
+
protected isRangeEnd: boolean;
|
|
42
|
+
protected isInPreviewRange: boolean;
|
|
43
|
+
protected isPreviewRangeStart: boolean;
|
|
44
|
+
protected isPreviewRangeEnd: boolean;
|
|
35
45
|
readonly element: import("@angular/core").ElementRef<HTMLElement>;
|
|
36
46
|
date: Date;
|
|
37
47
|
calendarView: CalendarView;
|
|
38
48
|
activeDate: Date | null;
|
|
39
49
|
selectedDate?: Date | null;
|
|
50
|
+
selectedDateRange?: DateRangeState | null;
|
|
51
|
+
previewDate?: Date | null;
|
|
40
52
|
ngOnChanges(changes: NgChanges<CalendarCellDirective>): void;
|
|
53
|
+
ngOnInit(): void;
|
|
54
|
+
ngOnDestroy(): void;
|
|
55
|
+
private registerEvents;
|
|
41
56
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarCellDirective, never>;
|
|
42
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CalendarCellDirective, "[odxCalendarCell]", never, { "date": { "alias": "odxCalendarCell"; "required": false; }; "calendarView": { "alias": "odxCalendarCellCalendarView"; "required": false; }; "activeDate": { "alias": "odxCalendarCellActiveDate"; "required": false; }; "selectedDate": { "alias": "odxCalendarCellSelectedDate"; "required": false; }; }, {}, never, never, true, never>;
|
|
57
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CalendarCellDirective, "[odxCalendarCell]", never, { "date": { "alias": "odxCalendarCell"; "required": false; }; "calendarView": { "alias": "odxCalendarCellCalendarView"; "required": false; }; "activeDate": { "alias": "odxCalendarCellActiveDate"; "required": false; }; "selectedDate": { "alias": "odxCalendarCellSelectedDate"; "required": false; }; "selectedDateRange": { "alias": "odxCalendarCellSelectedDateRange"; "required": false; }; "previewDate": { "alias": "odxCalendarCellPreviewDate"; "required": false; }; }, {}, never, never, true, never>;
|
|
43
58
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { trackByIndex } from '@odx/angular/utils';
|
|
2
2
|
import { CalendarService } from '../calendar.service';
|
|
3
|
-
import { CalendarView, DateFilter } from '../models';
|
|
3
|
+
import { CalendarView, DateFilter, DateRangeState } from '../models';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare abstract class CalendarViewDirective {
|
|
6
6
|
protected readonly takeUntilDestroyed: <T>() => import("rxjs").MonoTypeOperatorFunction<T>;
|
|
@@ -16,6 +16,7 @@ export declare abstract class CalendarViewDirective {
|
|
|
16
16
|
yearA11yLabel: string;
|
|
17
17
|
displayAdjacentDays: boolean;
|
|
18
18
|
locale: import("rxjs").BehaviorSubject<import("date-fns").Locale>;
|
|
19
|
+
selectionMode: import("../models").CalendarSelectionMode;
|
|
19
20
|
yearView: {
|
|
20
21
|
itemsPerRow: number;
|
|
21
22
|
};
|
|
@@ -30,6 +31,8 @@ export declare abstract class CalendarViewDirective {
|
|
|
30
31
|
readonly element: import("@angular/core").ElementRef<HTMLElement>;
|
|
31
32
|
activeDate: Date;
|
|
32
33
|
selectedDate?: Date | null;
|
|
34
|
+
selectedDateRange?: DateRangeState | null;
|
|
35
|
+
previewDate?: Date | null;
|
|
33
36
|
minDate?: Date | null;
|
|
34
37
|
maxDate?: Date | null;
|
|
35
38
|
filterFn?: DateFilter | null;
|
|
@@ -37,5 +40,5 @@ export declare abstract class CalendarViewDirective {
|
|
|
37
40
|
protected changeView(): void;
|
|
38
41
|
protected updateActiveDate(event: Event, date: Date): void;
|
|
39
42
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarViewDirective, never>;
|
|
40
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CalendarViewDirective, never, never, { "activeDate": { "alias": "activeDate"; "required": false; }; "selectedDate": { "alias": "selectedDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "filterFn": { "alias": "filterFn"; "required": false; }; }, {}, never, never, true, never>;
|
|
43
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CalendarViewDirective, never, never, { "activeDate": { "alias": "activeDate"; "required": false; }; "selectedDate": { "alias": "selectedDate"; "required": false; }; "selectedDateRange": { "alias": "selectedDateRange"; "required": false; }; "previewDate": { "alias": "previewDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "filterFn": { "alias": "filterFn"; "required": false; }; }, {}, never, never, true, never>;
|
|
41
44
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DateType } from './date-type';
|
|
2
|
+
export interface DateTypeRange {
|
|
3
|
+
start: DateType | null;
|
|
4
|
+
end: DateType | null;
|
|
5
|
+
}
|
|
6
|
+
export interface DateRange {
|
|
7
|
+
start: Date | null;
|
|
8
|
+
end: Date | null;
|
|
9
|
+
}
|
|
10
|
+
export declare enum DateRangeSelectionState {
|
|
11
|
+
NothingSelected = "NothingSelected",
|
|
12
|
+
StartSelected = "StartSelected",
|
|
13
|
+
EndSelected = "EndSelected"
|
|
14
|
+
}
|
|
15
|
+
export interface DateRangeState {
|
|
16
|
+
selectionState: DateRangeSelectionState;
|
|
17
|
+
dateRange: DateRange;
|
|
18
|
+
}
|
|
@@ -12,6 +12,7 @@ export declare class DateLabelPipe implements PipeTransform {
|
|
|
12
12
|
yearA11yLabel: string;
|
|
13
13
|
displayAdjacentDays: boolean;
|
|
14
14
|
locale: import("rxjs").BehaviorSubject<import("date-fns").Locale>;
|
|
15
|
+
selectionMode: import("@odx/angular/components/calendar").CalendarSelectionMode;
|
|
15
16
|
yearView: {
|
|
16
17
|
itemsPerRow: number;
|
|
17
18
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CalendarView, DateRangeSelectionState, DateRangeState } from '../models';
|
|
2
|
+
export interface DateRangeValidationInfo {
|
|
3
|
+
isRangeStart: boolean;
|
|
4
|
+
isRangeEnd: boolean;
|
|
5
|
+
isInRange: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function checkCellInRange(date: Date, dateRangeState: DateRangeState, calendarView: CalendarView, targetSelectionState: DateRangeSelectionState): DateRangeValidationInfo;
|
|
@@ -2,6 +2,7 @@ export * from './check-identical-date';
|
|
|
2
2
|
export * from './get-A11y-label';
|
|
3
3
|
export * from './is-date-disabled';
|
|
4
4
|
export * from './parse-date';
|
|
5
|
+
export * from './validate-daterange';
|
|
5
6
|
export * from './validate-max-date';
|
|
6
7
|
export * from './validate-min-date';
|
|
7
8
|
export * from './validate-next-date-set';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function validateDaterange(start: Date, end: Date): boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/daterangepicker.component';
|
|
2
|
+
export * from './lib/daterangepicker.config';
|
|
3
|
+
export * from './lib/daterangepicker.module';
|
|
4
|
+
export * from './lib/directives';
|
|
5
|
+
export * from './lib/models';
|
|
6
|
+
export * from './lib/range.validator';
|
|
7
|
+
export * from './lib/required.validator';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AfterViewInit, ElementRef, EventEmitter, QueryList } from '@angular/core';
|
|
2
|
+
import { CustomFormControl } from '@odx/angular/cdk/custom-form-control';
|
|
3
|
+
import { DateFilter, DateRange } from '@odx/angular/components/calendar';
|
|
4
|
+
import { DropdownDirective } from '@odx/angular/components/dropdown';
|
|
5
|
+
import { Position } from '@odx/angular/utils';
|
|
6
|
+
import { DaterangepickerInputControlDirective } from './directives';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class DaterangepickerComponent extends CustomFormControl<DateRange | null> implements AfterViewInit {
|
|
9
|
+
protected readonly takeUntilDestroyed: <T>() => import("rxjs").MonoTypeOperatorFunction<T>;
|
|
10
|
+
protected readonly config: {
|
|
11
|
+
inputDateOrder: string;
|
|
12
|
+
inputDateSeparator: string;
|
|
13
|
+
};
|
|
14
|
+
readonly element: ElementRef<HTMLElement>;
|
|
15
|
+
get isOpen(): boolean;
|
|
16
|
+
today: Date;
|
|
17
|
+
filterFn: DateFilter | null;
|
|
18
|
+
minDate: Date | null;
|
|
19
|
+
maxDate: Date | null;
|
|
20
|
+
dropdownPosition: Position;
|
|
21
|
+
selectedChange: EventEmitter<DateRange>;
|
|
22
|
+
dropdown: DropdownDirective;
|
|
23
|
+
dropdownTriggerElement: ElementRef<HTMLElement>;
|
|
24
|
+
dateFields: QueryList<DaterangepickerInputControlDirective>;
|
|
25
|
+
startDateMirror: ElementRef<HTMLElement>;
|
|
26
|
+
endDateMirror: ElementRef<HTMLElement>;
|
|
27
|
+
get startDateField(): DaterangepickerInputControlDirective | undefined;
|
|
28
|
+
get endDateField(): DaterangepickerInputControlDirective | undefined;
|
|
29
|
+
constructor();
|
|
30
|
+
ngAfterViewInit(): void;
|
|
31
|
+
selectDateRange(value: DateRange | null): void;
|
|
32
|
+
protected handleDateFieldChanges(): void;
|
|
33
|
+
protected updateWidth(target: DaterangepickerInputControlDirective | undefined, source: ElementRef<HTMLElement>, value?: string): void;
|
|
34
|
+
protected handleDateFieldFocus(): void;
|
|
35
|
+
protected openDaterangepicker(event: KeyboardEvent): void;
|
|
36
|
+
private updateStartDateField;
|
|
37
|
+
private updateEndDateField;
|
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DaterangepickerComponent, never>;
|
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DaterangepickerComponent, "odx-daterangepicker", never, { "filterFn": { "alias": "filterFn"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; }; }, { "selectedChange": "selectedChange"; }, ["dateFields"], ["input[odxDaterangepickerStartDateControl]", "input[odxDaterangepickerEndDateControl]"], true, never>;
|
|
40
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DaterangepickerInputDateOrder } from './models';
|
|
2
|
+
export interface DaterangepickerConfig {
|
|
3
|
+
/**
|
|
4
|
+
* Date's order ('DMY' | 'MDY' | 'YMD').
|
|
5
|
+
* @default DaterangepickerInputDateOrder.DMY
|
|
6
|
+
*/
|
|
7
|
+
inputDateOrder: DaterangepickerInputDateOrder;
|
|
8
|
+
/**
|
|
9
|
+
* Single-character date's separator (dot, slash etc.).
|
|
10
|
+
* @default '.'
|
|
11
|
+
*/
|
|
12
|
+
inputDateSeparator: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const DaterangepickerConfig: import("@angular/core").InjectionToken<Partial<{
|
|
15
|
+
inputDateOrder: string;
|
|
16
|
+
inputDateSeparator: string;
|
|
17
|
+
}>>, DaterangepickerDefaultConfig: {
|
|
18
|
+
inputDateOrder: string;
|
|
19
|
+
inputDateSeparator: string;
|
|
20
|
+
}, injectDaterangepickerConfig: () => {
|
|
21
|
+
inputDateOrder: string;
|
|
22
|
+
inputDateSeparator: string;
|
|
23
|
+
}, provideDaterangepickerConfig: <D extends import("@odx/angular/utils").ConfigDependencies<unknown> = import("@odx/angular/utils").ConfigDependencies<Partial<{
|
|
24
|
+
inputDateOrder: string;
|
|
25
|
+
inputDateSeparator: string;
|
|
26
|
+
}>>>(config: import("@odx/angular/utils").ConfigProvider<Partial<{
|
|
27
|
+
inputDateOrder: string;
|
|
28
|
+
inputDateSeparator: string;
|
|
29
|
+
}>, D>) => import("@angular/core").FactoryProvider | import("@angular/core").ValueProvider;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./daterangepicker.component";
|
|
3
|
+
import * as i2 from "./directives/daterangepicker-input-control.directive";
|
|
4
|
+
import * as i3 from "./range.validator";
|
|
5
|
+
import * as i4 from "./required.validator";
|
|
6
|
+
import * as i5 from "@odx/angular";
|
|
7
|
+
export declare class DaterangepickerModule {
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DaterangepickerModule, never>;
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DaterangepickerModule, never, [typeof i1.DaterangepickerComponent, typeof i2.DaterangepickerInputControlDirective, typeof i3.DaterangepickerRangeValidator, typeof i4.DaterangepickerRequiredValidator], [typeof i5.CoreModule, typeof i1.DaterangepickerComponent, typeof i2.DaterangepickerInputControlDirective, typeof i3.DaterangepickerRangeValidator, typeof i4.DaterangepickerRequiredValidator]>;
|
|
10
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<DaterangepickerModule>;
|
|
11
|
+
}
|
package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { ReadonlyController } from '@odx/angular';
|
|
3
|
+
import { InputControlDirective } from '@odx/angular/cdk/custom-form-control';
|
|
4
|
+
import { NgxMaskPipe } from 'ngx-mask';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@odx/angular";
|
|
7
|
+
export declare class DaterangepickerInputControlDirective extends InputControlDirective {
|
|
8
|
+
private readonly maskConfig;
|
|
9
|
+
protected readonly readonlyController: ReadonlyController | null;
|
|
10
|
+
protected readonly config: {
|
|
11
|
+
inputDateOrder: string;
|
|
12
|
+
inputDateSeparator: string;
|
|
13
|
+
};
|
|
14
|
+
protected readonly inputMask: string;
|
|
15
|
+
protected readonly ngxMaskPipe: NgxMaskPipe;
|
|
16
|
+
focused: EventEmitter<boolean>;
|
|
17
|
+
valueChange$: import("rxjs").Observable<string>;
|
|
18
|
+
applyMask(): void;
|
|
19
|
+
get valueAsDate(): Date | null;
|
|
20
|
+
get placeholder(): string;
|
|
21
|
+
protected handleFocusIn(): void;
|
|
22
|
+
protected handleFocusOut(): void;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DaterangepickerInputControlDirective, never>;
|
|
24
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DaterangepickerInputControlDirective, "input[odxDaterangepickerControl],input[odxDaterangepickerStartDateControl], input[odxDaterangepickerEndDateControl]", never, {}, { "focused": "focused"; }, never, never, true, [{ directive: typeof i1.WithTabIndex; inputs: {}; outputs: {}; }]>;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './daterangepicker-input-control.directive';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DatepickerInputDateOrder as DaterangepickerInputDateOrder } from '@odx/angular/components/datepicker';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DatepickerInputFormat as DaterangepickerInputFormat, DatepickerInputMask as DaterangepickerInputMask, DatepickerInputPattern as DaterangepickerInputPattern, } from '@odx/angular/components/datepicker';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FormControl } from '@angular/forms';
|
|
2
|
+
import { DateRange } from '@odx/angular/components/calendar';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class DaterangepickerRangeValidator {
|
|
5
|
+
validate({ value }: FormControl<DateRange | null>): false | {
|
|
6
|
+
invalidRange: boolean;
|
|
7
|
+
} | null;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DaterangepickerRangeValidator, never>;
|
|
9
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DaterangepickerRangeValidator, "odx-daterangepicker[formControlName], odx-daterangepicker[formControl], odx-daterangepicker[ngModel]", never, {}, {}, never, never, true, never>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FormControl } from '@angular/forms';
|
|
2
|
+
import { DateRange } from '@odx/angular/components/calendar';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class DaterangepickerRequiredValidator {
|
|
5
|
+
validate({ value }: FormControl<DateRange | null>): false | {
|
|
6
|
+
required: boolean;
|
|
7
|
+
};
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DaterangepickerRequiredValidator, never>;
|
|
9
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DaterangepickerRequiredValidator, "odx-daterangepicker[required][formControlName], odx-daterangepicker[required][formControl], odx-daterangepicker[required][ngModel]", never, {}, {}, never, never, true, never>;
|
|
10
|
+
}
|
|
@@ -3,7 +3,7 @@ import { Directive, Input } from '@angular/core';
|
|
|
3
3
|
import { CSSComponent, CSSModifier } from '@odx/angular/internal';
|
|
4
4
|
import { fromElementResize$ } from '@odx/angular/rxjs';
|
|
5
5
|
import { applyStyles, disableCSSTransitions, hasChanged, injectElement, isPresent, px, untilDestroyed } from '@odx/angular/utils';
|
|
6
|
-
import { BehaviorSubject,
|
|
6
|
+
import { BehaviorSubject, EMPTY, distinctUntilChanged, switchMap } from 'rxjs';
|
|
7
7
|
import { ActiveIndicatorPosition } from './models';
|
|
8
8
|
import { ActiveIndicatorDirection } from './models/active-indicator-direction';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
@@ -124,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
124
124
|
type: Input,
|
|
125
125
|
args: ['odxActiveIndicatorPosition']
|
|
126
126
|
}] } });
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWluZGljYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2FjdGl2ZS1pbmRpY2F0b3Ivc3JjL2xpYi9hY3RpdmUtaW5kaWNhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0ksT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFPeEUsV0FBTSx3QkFBd0IsR0FBOUIsTUFBTSx3QkFBd0I7SUFBOUI7UUFDWSx1QkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN0QyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUNoRSxjQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3BELG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzFCLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMs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QztTQUNmO0lBQ0gsQ0FBQzsrR0F2R1Usd0JBQXdCO21HQUF4Qix3QkFBd0I7O0FBYTVCO0lBRE4sV0FBVyxFQUFFOzswREFDVTtBQWVqQjtJQUZOLFdBQVcsRUFBRTs7MkRBRW1FO0FBNUJ0RSx3QkFBd0I7SUFMcEMsWUFBWSxDQUFDLHNCQUFzQixDQUFDO0dBS3hCLHdCQUF3QixDQXdHcEM7NEZBeEdZLHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHNCQUFzQjtpQkFDakM7OEJBY1EsUUFBUSxNQUdSLGFBQWE7c0JBRG5CLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUloQixNQUFNO3NCQURoQixLQUFLO3VCQUFDLDBCQUEwQjtnQkFVMUIsU0FBUztzQkFEZixLQUFLO3VCQUFDLDZCQUE2QjtnQkFJN0IsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50LCBDU1NNb2RpZmllciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBmcm9tRWxlbWVudFJlc2l6ZSQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvcnhqcyc7XG5pbXBvcnQgeyBhcHBseVN0eWxlcywgZGlzYWJsZUNTU1RyYW5zaXRpb25zLCBoYXNDaGFuZ2VkLCBpbmplY3RFbGVtZW50LCBpc1ByZXNlbnQsIE5nQ2hhbmdlcywgcHgsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIEVNUFRZLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2ZUluZGljYXRvclBvc2l0aW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWN0aXZlSW5kaWNhdG9yRGlyZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvYWN0aXZlLWluZGljYXRvci1kaXJlY3Rpb24nO1xuXG5AQ1NTQ29tcG9uZW50KCdjZGstYWN0aXZlLWluZGljYXRvcicpXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbb2R4QWN0aXZlSW5kaWNhdG9yXScsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2ZUluZGljYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRFbGVtZW50JCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25SZXNpemUkID0gdGhpcy5wYXJlbnRFbGVtZW50JCQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHN3aXRjaE1hcCgocGFyZW50RWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmVudEVsZW1lbnQgPyBmcm9tRWxlbWVudFJlc2l6ZSQocGFyZW50RWxlbWVudCkgOiBFTVBUWTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIEBDU1NNb2RpZmllcigpXG4gIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnb2R4QWN0aXZlSW5kaWNhdG9yJylcbiAgcHVibGljIGFjdGl2ZUVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgnb2R4QWN0aXZlSW5kaWNhdG9yUGFyZW50JylcbiAgcHVibGljIHNldCBwYXJlbnQodmFsdWU6IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIHRoaXMucGFyZW50RWxlbWVudCQkLm5leHQodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50RWxlbWVudCQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAQ1NTTW9kaWZpZXIoKVxuICBASW5wdXQoJ29keEFjdGl2ZUluZGljYXRvckRpcmVjdGlvbicpXG4gIHB1YmxpYyBkaXJlY3Rpb246IEFjdGl2ZUluZGljYXRvckRpcmVjdGlvbiA9IEFjdGl2ZUluZGljYXRvckRpcmVjdGlvbi5IT1JJWk9OVEFMO1xuXG4gIEBJbnB1dCgnb2R4QWN0aXZlSW5kaWNhdG9yUG9zaXRpb24nKVxuICBwdWJsaWMgcG9zaXRpb246IEFjdGl2ZUluZGljYXRvclBvc2l0aW9uID0gQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uQ0VOVEVSO1xuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vblJlc2l6ZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTdHlsZXMoKSk7XG4gICAgdGhpcy5wYXJlbnQgPz89IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogTmdDaGFuZ2VzPEFjdGl2ZUluZGljYXRvckRpcmVjdGl2ZT4pOiB2b2lkIHtcbiAgICBpZiAoaGFzQ2hhbmdlZChjaGFuZ2VzLCAnYWN0aXZlRWxlbWVudCcsIGZhbHNlKSkge1xuICAgICAgdGhpcy5pc0FjdGl2ZSA9ICEhdGhpcy5hY3RpdmVFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2FjdGl2ZUVsZW1lbnQnLCAnZGlyZWN0aW9uJywgJ3Bvc2l0aW9uJ10pKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0eWxlcyghaXNQcmVzZW50KGNoYW5nZXMuYWN0aXZlRWxlbWVudD8ucHJldmlvdXNWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGVzKGRpc2FibGVUcmFuc2l0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMuZGlyZWN0aW9uID09PSBBY3RpdmVJbmRpY2F0b3JEaXJlY3Rpb24uSE9SSVpPTlRBTDtcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5kaXJlY3Rpb24gPT09IEFjdGl2ZUluZGljYXRvckRpcmVjdGlvbi5WRVJUSUNBTDtcbiAgICBjb25zdCByZWxhdGl2ZU9mZnNldCA9IHRoaXMuZ2V0SW5kaWNhdG9yUmVsYXRpdmVPZmZzZXQoKTtcblxuICAgIGxldCB0cmFuc2Zvcm0gPSBudWxsO1xuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uWCA9IHRoaXMuZ2V0SW5kaWNhdG9yUG9zaXRpb25YKHRoaXMuYWN0aXZlRWxlbWVudCk7XG4gICAgICB0cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke3B4KHBvc2l0aW9uWCl9KSB0cmFuc2xhdGVYKCR7cmVsYXRpdmVPZmZzZXR9JSlgO1xuICAgIH1cbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xuICAgICAgY29uc3QgcG9zaXRpb25ZID0gdGhpcy5nZXRJbmRpY2F0b3JQb3NpdGlvblkodGhpcy5hY3RpdmVFbGVtZW50KTtcbiAgICAgIHRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7cHgocG9zaXRpb25ZKX0pIHRyYW5zbGF0ZVkoJHtyZWxhdGl2ZU9mZnNldH0lKWA7XG4gICAgfVxuXG4gICAgZGlzYWJsZVRyYW5zaXRpb24gJiYgZGlzYWJsZUNTU1RyYW5zaXRpb25zKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgICBhcHBseVN0eWxlcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwge1xuICAgICAgdHJhbnNmb3JtLFxuICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHB4KHRoaXMuYWN0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCkgOiBudWxsLFxuICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gcHgodGhpcy5hY3RpdmVFbGVtZW50Lm9mZnNldEhlaWdodCkgOiBudWxsLFxuICAgIH0pO1xuICAgIGRpc2FibGVUcmFuc2l0aW9uICYmIGRpc2FibGVDU1NUcmFuc2l0aW9ucyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRpY2F0b3JQb3NpdGlvblgoYWN0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5wb3NpdGlvbikge1xuICAgICAgY2FzZSBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbi5TVEFSVDpcbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uQ0VOVEVSOlxuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgYWN0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICBjYXNlIEFjdGl2ZUluZGljYXRvclBvc2l0aW9uLkVORDpcbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIGFjdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRpY2F0b3JQb3NpdGlvblkoYWN0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5wb3NpdGlvbikge1xuICAgICAgY2FzZSBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbi5TVEFSVDpcbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgY2FzZSBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbi5DRU5URVI6XG4gICAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50Lm9mZnNldFRvcCArIGFjdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uRU5EOlxuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyBhY3RpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEluZGljYXRvclJlbGF0aXZlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLnBvc2l0aW9uKSB7XG4gICAgICBjYXNlIEFjdGl2ZUluZGljYXRvclBvc2l0aW9uLlNUQVJUOlxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uQ0VOVEVSOlxuICAgICAgICByZXR1cm4gLTUwO1xuICAgICAgY2FzZSBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbi5FTkQ6XG4gICAgICAgIHJldHVybiAtMTAwO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWluZGljYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2FjdGl2ZS1pbmRpY2F0b3Ivc3JjL2xpYi9hY3RpdmUtaW5kaWNhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFhLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0ksT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFPeEUsV0FBTSx3QkFBd0IsR0FBOUIsTUFBTSx3QkFBd0I7SUFBOUI7UUFDWSx1QkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN0QyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUNoRSxjQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3BELG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzFCLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMs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QztTQUNmO0lBQ0gsQ0FBQzsrR0F2R1Usd0JBQXdCO21HQUF4Qix3QkFBd0I7O0FBYTVCO0lBRE4sV0FBVyxFQUFFOzswREFDVTtBQWVqQjtJQUZOLFdBQVcsRUFBRTs7MkRBRW1FO0FBNUJ0RSx3QkFBd0I7SUFMcEMsWUFBWSxDQUFDLHNCQUFzQixDQUFDO0dBS3hCLHdCQUF3QixDQXdHcEM7NEZBeEdZLHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHNCQUFzQjtpQkFDakM7OEJBY1EsUUFBUSxNQUdSLGFBQWE7c0JBRG5CLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUloQixNQUFNO3NCQURoQixLQUFLO3VCQUFDLDBCQUEwQjtnQkFVMUIsU0FBUztzQkFEZixLQUFLO3VCQUFDLDZCQUE2QjtnQkFJN0IsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50LCBDU1NNb2RpZmllciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBmcm9tRWxlbWVudFJlc2l6ZSQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvcnhqcyc7XG5pbXBvcnQgeyBOZ0NoYW5nZXMsIGFwcGx5U3R5bGVzLCBkaXNhYmxlQ1NTVHJhbnNpdGlvbnMsIGhhc0NoYW5nZWQsIGluamVjdEVsZW1lbnQsIGlzUHJlc2VudCwgcHgsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2ZUluZGljYXRvclBvc2l0aW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWN0aXZlSW5kaWNhdG9yRGlyZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvYWN0aXZlLWluZGljYXRvci1kaXJlY3Rpb24nO1xuXG5AQ1NTQ29tcG9uZW50KCdjZGstYWN0aXZlLWluZGljYXRvcicpXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbb2R4QWN0aXZlSW5kaWNhdG9yXScsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2ZUluZGljYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRFbGVtZW50JCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25SZXNpemUkID0gdGhpcy5wYXJlbnRFbGVtZW50JCQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHN3aXRjaE1hcCgocGFyZW50RWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmVudEVsZW1lbnQgPyBmcm9tRWxlbWVudFJlc2l6ZSQocGFyZW50RWxlbWVudCkgOiBFTVBUWTtcbiAgICB9KSxcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdEVsZW1lbnQoKTtcblxuICBAQ1NTTW9kaWZpZXIoKVxuICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBASW5wdXQoJ29keEFjdGl2ZUluZGljYXRvcicpXG4gIHB1YmxpYyBhY3RpdmVFbGVtZW50PzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoJ29keEFjdGl2ZUluZGljYXRvclBhcmVudCcpXG4gIHB1YmxpYyBzZXQgcGFyZW50KHZhbHVlOiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQkJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnQkJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQENTU01vZGlmaWVyKClcbiAgQElucHV0KCdvZHhBY3RpdmVJbmRpY2F0b3JEaXJlY3Rpb24nKVxuICBwdWJsaWMgZGlyZWN0aW9uOiBBY3RpdmVJbmRpY2F0b3JEaXJlY3Rpb24gPSBBY3RpdmVJbmRpY2F0b3JEaXJlY3Rpb24uSE9SSVpPTlRBTDtcblxuICBASW5wdXQoJ29keEFjdGl2ZUluZGljYXRvclBvc2l0aW9uJylcbiAgcHVibGljIHBvc2l0aW9uOiBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbiA9IEFjdGl2ZUluZGljYXRvclBvc2l0aW9uLkNFTlRFUjtcblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub25SZXNpemUkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU3R5bGVzKCkpO1xuICAgIHRoaXMucGFyZW50ID8/PSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IE5nQ2hhbmdlczxBY3RpdmVJbmRpY2F0b3JEaXJlY3RpdmU+KTogdm9pZCB7XG4gICAgaWYgKGhhc0NoYW5nZWQoY2hhbmdlcywgJ2FjdGl2ZUVsZW1lbnQnLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSAhIXRoaXMuYWN0aXZlRWxlbWVudDtcbiAgICB9XG4gICAgaWYgKGhhc0NoYW5nZWQoY2hhbmdlcywgWydhY3RpdmVFbGVtZW50JywgJ2RpcmVjdGlvbicsICdwb3NpdGlvbiddKSkge1xuICAgICAgdGhpcy51cGRhdGVTdHlsZXMoIWlzUHJlc2VudChjaGFuZ2VzLmFjdGl2ZUVsZW1lbnQ/LnByZXZpb3VzVmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0eWxlcyhkaXNhYmxlVHJhbnNpdGlvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmRpcmVjdGlvbiA9PT0gQWN0aXZlSW5kaWNhdG9yRGlyZWN0aW9uLkhPUklaT05UQUw7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuZGlyZWN0aW9uID09PSBBY3RpdmVJbmRpY2F0b3JEaXJlY3Rpb24uVkVSVElDQUw7XG4gICAgY29uc3QgcmVsYXRpdmVPZmZzZXQgPSB0aGlzLmdldEluZGljYXRvclJlbGF0aXZlT2Zmc2V0KCk7XG5cbiAgICBsZXQgdHJhbnNmb3JtID0gbnVsbDtcbiAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICBjb25zdCBwb3NpdGlvblggPSB0aGlzLmdldEluZGljYXRvclBvc2l0aW9uWCh0aGlzLmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgdHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtweChwb3NpdGlvblgpfSkgdHJhbnNsYXRlWCgke3JlbGF0aXZlT2Zmc2V0fSUpYDtcbiAgICB9XG4gICAgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uWSA9IHRoaXMuZ2V0SW5kaWNhdG9yUG9zaXRpb25ZKHRoaXMuYWN0aXZlRWxlbWVudCk7XG4gICAgICB0cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3B4KHBvc2l0aW9uWSl9KSB0cmFuc2xhdGVZKCR7cmVsYXRpdmVPZmZzZXR9JSlgO1xuICAgIH1cblxuICAgIGRpc2FibGVUcmFuc2l0aW9uICYmIGRpc2FibGVDU1NUcmFuc2l0aW9ucyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gICAgYXBwbHlTdHlsZXModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBweCh0aGlzLmFjdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpIDogbnVsbCxcbiAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHB4KHRoaXMuYWN0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpIDogbnVsbCxcbiAgICB9KTtcbiAgICBkaXNhYmxlVHJhbnNpdGlvbiAmJiBkaXNhYmxlQ1NTVHJhbnNpdGlvbnModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kaWNhdG9yUG9zaXRpb25YKGFjdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb24pIHtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uU1RBUlQ6XG4gICAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICBjYXNlIEFjdGl2ZUluZGljYXRvclBvc2l0aW9uLkNFTlRFUjpcbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIGFjdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgY2FzZSBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbi5FTkQ6XG4gICAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50Lm9mZnNldExlZnQgKyBhY3RpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kaWNhdG9yUG9zaXRpb25ZKGFjdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb24pIHtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uU1RBUlQ6XG4gICAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uQ0VOVEVSOlxuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyBhY3RpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7XG4gICAgICBjYXNlIEFjdGl2ZUluZGljYXRvclBvc2l0aW9uLkVORDpcbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQub2Zmc2V0VG9wICsgYWN0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRpY2F0b3JSZWxhdGl2ZU9mZnNldCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5wb3NpdGlvbikge1xuICAgICAgY2FzZSBBY3RpdmVJbmRpY2F0b3JQb3NpdGlvbi5TVEFSVDpcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBjYXNlIEFjdGl2ZUluZGljYXRvclBvc2l0aW9uLkNFTlRFUjpcbiAgICAgICAgcmV0dXJuIC01MDtcbiAgICAgIGNhc2UgQWN0aXZlSW5kaWNhdG9yUG9zaXRpb24uRU5EOlxuICAgICAgICByZXR1cm4gLTEwMDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|