@odx/angular 5.5.6 → 5.7.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 (90) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/components/calendar/lib/calendar.component.d.ts +9 -3
  3. package/components/calendar/lib/calendar.config.d.ts +11 -0
  4. package/components/calendar/lib/calendar.service.d.ts +10 -4
  5. package/components/calendar/lib/components/calendar-month/calendar-month.component.d.ts +1 -3
  6. package/components/calendar/lib/daterange.service.d.ts +14 -0
  7. package/components/calendar/lib/directives/calendar-cell.directive.d.ts +19 -4
  8. package/components/calendar/lib/directives/calendar-view.directive.d.ts +5 -2
  9. package/components/calendar/lib/models/date-range.d.ts +18 -0
  10. package/components/calendar/lib/models/index.d.ts +3 -0
  11. package/components/calendar/lib/models/selected-date.d.ts +9 -0
  12. package/components/calendar/lib/models/selection-mode.d.ts +4 -0
  13. package/components/calendar/lib/pipes/date-label.pipe.d.ts +1 -0
  14. package/components/calendar/lib/utils/check-cell-in-range.d.ts +7 -0
  15. package/components/calendar/lib/utils/index.d.ts +1 -0
  16. package/components/calendar/lib/utils/validate-daterange.d.ts +1 -0
  17. package/components/daterangepicker/README.md +3 -0
  18. package/components/daterangepicker/index.d.ts +7 -0
  19. package/components/daterangepicker/lib/daterangepicker.component.d.ts +40 -0
  20. package/components/daterangepicker/lib/daterangepicker.config.d.ts +29 -0
  21. package/components/daterangepicker/lib/daterangepicker.module.d.ts +11 -0
  22. package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +25 -0
  23. package/components/daterangepicker/lib/directives/index.d.ts +1 -0
  24. package/components/daterangepicker/lib/models/daterangepicker-input-date-order.d.ts +1 -0
  25. package/components/daterangepicker/lib/models/daterangepicker-input-pattern.d.ts +1 -0
  26. package/components/daterangepicker/lib/models/index.d.ts +2 -0
  27. package/components/daterangepicker/lib/range.validator.d.ts +10 -0
  28. package/components/daterangepicker/lib/required.validator.d.ts +10 -0
  29. package/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.d.ts +3 -0
  30. package/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.d.ts +2 -0
  31. package/components/daterangepicker/lib/utils/index.d.ts +2 -0
  32. package/components/list/index.d.ts +1 -0
  33. package/components/list/lib/components/list-item/list-item.component.d.ts +6 -1
  34. package/components/list/lib/models/index.d.ts +1 -0
  35. package/components/list/lib/models/list-item-variant.d.ts +6 -0
  36. package/esm2022/cdk/active-indicator/lib/active-indicator.directive.mjs +2 -2
  37. package/esm2022/components/calendar/lib/calendar.component.mjs +25 -11
  38. package/esm2022/components/calendar/lib/calendar.config.mjs +3 -1
  39. package/esm2022/components/calendar/lib/calendar.service.mjs +28 -13
  40. package/esm2022/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +6 -10
  41. package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +4 -4
  42. package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +4 -4
  43. package/esm2022/components/calendar/lib/daterange.service.mjs +57 -0
  44. package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +85 -5
  45. package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +8 -2
  46. package/esm2022/components/calendar/lib/models/date-range.mjs +7 -0
  47. package/esm2022/components/calendar/lib/models/index.mjs +4 -1
  48. package/esm2022/components/calendar/lib/models/selected-date.mjs +5 -0
  49. package/esm2022/components/calendar/lib/models/selection-mode.mjs +6 -0
  50. package/esm2022/components/calendar/lib/services/calendar-month.service.mjs +1 -1
  51. package/esm2022/components/calendar/lib/utils/check-cell-in-range.mjs +28 -0
  52. package/esm2022/components/calendar/lib/utils/index.mjs +2 -1
  53. package/esm2022/components/calendar/lib/utils/validate-daterange.mjs +5 -0
  54. package/esm2022/components/datepicker/lib/datepicker.component.mjs +2 -2
  55. package/esm2022/components/daterangepicker/index.mjs +8 -0
  56. package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +174 -0
  57. package/esm2022/components/daterangepicker/lib/daterangepicker.config.mjs +7 -0
  58. package/esm2022/components/daterangepicker/lib/daterangepicker.module.mjs +21 -0
  59. package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +65 -0
  60. package/esm2022/components/daterangepicker/lib/directives/index.mjs +2 -0
  61. package/esm2022/components/daterangepicker/lib/models/daterangepicker-input-date-order.mjs +2 -0
  62. package/esm2022/components/daterangepicker/lib/models/daterangepicker-input-pattern.mjs +2 -0
  63. package/esm2022/components/daterangepicker/lib/models/index.mjs +3 -0
  64. package/esm2022/components/daterangepicker/lib/range.validator.mjs +37 -0
  65. package/esm2022/components/daterangepicker/lib/required.validator.mjs +34 -0
  66. package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.mjs +16 -0
  67. package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.mjs +30 -0
  68. package/esm2022/components/daterangepicker/lib/utils/index.mjs +3 -0
  69. package/esm2022/components/daterangepicker/odx-angular-components-daterangepicker.mjs +5 -0
  70. package/esm2022/components/list/index.mjs +2 -1
  71. package/esm2022/components/list/lib/components/list-item/list-item.component.mjs +13 -2
  72. package/esm2022/components/list/lib/models/index.mjs +2 -0
  73. package/esm2022/components/list/lib/models/list-item-variant.mjs +6 -0
  74. package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +2 -2
  75. package/esm2022/utils/lib/helpers/event-manager.mjs +27 -8
  76. package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
  77. package/fesm2022/odx-angular-components-calendar.mjs +261 -56
  78. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  79. package/fesm2022/odx-angular-components-datepicker.mjs +1 -1
  80. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  81. package/fesm2022/odx-angular-components-daterangepicker.mjs +364 -0
  82. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -0
  83. package/fesm2022/odx-angular-components-list.mjs +18 -2
  84. package/fesm2022/odx-angular-components-list.mjs.map +1 -1
  85. package/fesm2022/odx-angular-components-notification.mjs +1 -1
  86. package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
  87. package/fesm2022/odx-angular-utils.mjs +33 -16
  88. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  89. package/package.json +7 -1
  90. package/utils/lib/helpers/event-manager.d.ts +3 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @odx/angular
2
2
 
3
+ ## 5.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 7bbcd5c: Updated List item colors and add warning state, danger attribute is deprecated.
8
+
9
+ ## 5.6.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 4262ef8: Added a daterangepicker component
14
+
3
15
  ## 5.5.6
4
16
 
5
17
  ### Patch Changes
@@ -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 { CalendarView, DateFilter, DateType } from './models';
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
- protected readonly CalendarView: typeof CalendarView;
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 { CalendarView, DateType } from './models';
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 selectedDate$$;
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
- selectDate(value: DateType | null): void;
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, {}, { "selectedChange": "selectedChange"; }, never, never, true, 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
+ }
@@ -1,4 +1,7 @@
1
1
  export * from './calendar-view';
2
2
  export * from './date-filter';
3
+ export * from './date-range';
3
4
  export * from './date-type';
4
5
  export * from './date-validator';
6
+ export * from './selected-date';
7
+ export * from './selection-mode';
@@ -0,0 +1,9 @@
1
+ export interface DateSelectEvent {
2
+ date: Date | null;
3
+ options: DateSelectOptions;
4
+ }
5
+ export interface DateSelectOptions {
6
+ skipDaterangeUpdate?: boolean;
7
+ emitOutside?: boolean;
8
+ }
9
+ export declare const dateSelectOptionsDefaults: DateSelectOptions;
@@ -0,0 +1,4 @@
1
+ export declare enum CalendarSelectionMode {
2
+ Date = 0,
3
+ DateRange = 1
4
+ }
@@ -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,3 @@
1
+ # @odx/angular/components/daterangepicker
2
+
3
+ Secondary entry point of `@odx/angular`. It can be used by importing from `@odx/angular/components/daterangepicker`.
@@ -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
+ }
@@ -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,2 @@
1
+ export * from './daterangepicker-input-date-order';
2
+ export * from './daterangepicker-input-pattern';
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ import { DaterangepickerConfig } from '../daterangepicker.config';
2
+ export declare function getDaterangepickerInputFormat(config: DaterangepickerConfig): string;
3
+ export declare function getDaterangepickerInputMask(config: DaterangepickerConfig): string;
@@ -0,0 +1,2 @@
1
+ import { DaterangepickerConfig } from '../daterangepicker.config';
2
+ export declare function getDaterangepickerInputValueAsDate(config: DaterangepickerConfig, value: string): Date | null;
@@ -0,0 +1,2 @@
1
+ export * from './get-daterangepicker-input-pattern';
2
+ export * from './get-daterangepicker-input-value-as-date';
@@ -1,3 +1,4 @@
1
1
  export * from './lib/components';
2
2
  export * from './lib/list.component';
3
3
  export * from './lib/list.module';
4
+ export * from './lib/models';
@@ -1,16 +1,21 @@
1
1
  import { OnChanges } from '@angular/core';
2
2
  import { NgChanges } from '@odx/angular/utils';
3
+ import { ListItemVariant } from '../../models';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@odx/angular";
5
6
  export declare class ListItemComponent implements OnChanges {
6
7
  private readonly withTabIndex;
7
8
  readonly element: import("@angular/core").ElementRef<HTMLElement>;
9
+ /**
10
+ * @deprecated Use `variant` instead
11
+ */
8
12
  danger: boolean;
13
+ variant: ListItemVariant;
9
14
  muted: boolean;
10
15
  selected: boolean;
11
16
  ngOnChanges(changes: NgChanges<ListItemComponent>): void;
12
17
  static ɵfac: i0.ɵɵFactoryDeclaration<ListItemComponent, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<ListItemComponent, "odx-list-item, [odxListItem]", never, { "danger": { "alias": "danger"; "required": false; }; "muted": { "alias": "muted"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, {}, never, ["[odxListPrefix], [odxListItemPrefix]", "*", "[odxListSuffix], [odxListItemSuffix]"], true, [{ directive: typeof i1.WithDisabledState; inputs: {}; outputs: {}; }, { directive: typeof i1.WithTabIndex; inputs: {}; outputs: {}; }]>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListItemComponent, "odx-list-item, [odxListItem]", never, { "danger": { "alias": "danger"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "muted": { "alias": "muted"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, {}, never, ["[odxListPrefix], [odxListItemPrefix]", "*", "[odxListSuffix], [odxListItemSuffix]"], true, [{ directive: typeof i1.WithDisabledState; inputs: {}; outputs: {}; }, { directive: typeof i1.WithTabIndex; inputs: {}; outputs: {}; }]>;
14
19
  static ngAcceptInputType_danger: unknown;
15
20
  static ngAcceptInputType_muted: unknown;
16
21
  static ngAcceptInputType_selected: unknown;
@@ -0,0 +1 @@
1
+ export * from './list-item-variant';
@@ -0,0 +1,6 @@
1
+ export type ListItemVariant = (typeof ListItemVariant)[keyof typeof ListItemVariant];
2
+ export declare const ListItemVariant: {
3
+ readonly DEFAULT: "default";
4
+ readonly DANGER: "danger";
5
+ readonly WARNING: "warning";
6
+ };
@@ -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, distinctUntilChanged, EMPTY, switchMap } from 'rxjs';
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==