@ardium-ui/ui 3.4.4 → 3.5.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 (55) hide show
  1. package/esm2022/lib/_internal/disablable-component.mjs +1 -1
  2. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +2 -2
  3. package/esm2022/lib/calendar/calendar.component.mjs +437 -0
  4. package/esm2022/lib/calendar/calendar.defaults.mjs +26 -0
  5. package/esm2022/lib/calendar/calendar.internal-types.mjs +2 -0
  6. package/esm2022/lib/calendar/calendar.module.mjs +24 -0
  7. package/esm2022/lib/calendar/calendar.types.mjs +6 -0
  8. package/esm2022/lib/calendar/index.mjs +5 -0
  9. package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +282 -0
  10. package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +65 -0
  11. package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +245 -0
  12. package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +22 -0
  13. package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +244 -0
  14. package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +14 -0
  15. package/esm2022/lib/inputs/date-input/date-input.component.mjs +357 -0
  16. package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +38 -0
  17. package/esm2022/lib/inputs/date-input/date-input.directive.mjs +59 -0
  18. package/esm2022/lib/inputs/date-input/date-input.module.mjs +50 -0
  19. package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +49 -0
  20. package/esm2022/lib/inputs/date-input/date-input.types.mjs +5 -0
  21. package/esm2022/lib/inputs/date-input/index.mjs +6 -0
  22. package/esm2022/public-api.mjs +3 -2
  23. package/fesm2022/ardium-ui-ui.mjs +1878 -52
  24. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  25. package/lib/_internal/disablable-component.d.ts +1 -1
  26. package/lib/calendar/calendar.component.d.ts +94 -0
  27. package/lib/calendar/calendar.defaults.d.ts +18 -0
  28. package/lib/calendar/calendar.internal-types.d.ts +4 -0
  29. package/lib/calendar/calendar.module.d.ts +14 -0
  30. package/lib/calendar/calendar.types.d.ts +83 -0
  31. package/lib/calendar/index.d.ts +4 -0
  32. package/lib/calendar/views/days-view/days-view.component.d.ts +68 -0
  33. package/lib/calendar/views/days-view/days-view.helpers.d.ts +20 -0
  34. package/lib/calendar/views/months-view/months-view.component.d.ts +61 -0
  35. package/lib/calendar/views/months-view/months-view.helpers.d.ts +3 -0
  36. package/lib/calendar/views/years-view/years-view.component.d.ts +59 -0
  37. package/lib/calendar/views/years-view/years-view.helpers.d.ts +3 -0
  38. package/lib/inputs/date-input/date-input.component.d.ts +95 -0
  39. package/lib/inputs/date-input/date-input.defaults.d.ts +30 -0
  40. package/lib/inputs/date-input/date-input.directive.d.ts +33 -0
  41. package/lib/inputs/date-input/date-input.module.d.ts +14 -0
  42. package/lib/inputs/date-input/date-input.serializers.d.ts +3 -0
  43. package/lib/inputs/date-input/date-input.types.d.ts +16 -0
  44. package/lib/inputs/date-input/index.d.ts +5 -0
  45. package/package.json +1 -1
  46. package/prebuilt-themes/default/calendar-OLD.css +294 -0
  47. package/prebuilt-themes/default/calendar-OLD.css.map +1 -0
  48. package/prebuilt-themes/default/calendar.css +100 -80
  49. package/prebuilt-themes/default/calendar.css.map +1 -1
  50. package/prebuilt-themes/default/inputs/date-input.css +68 -0
  51. package/prebuilt-themes/default/inputs/date-input.css.map +1 -0
  52. package/public-api.d.ts +2 -0
  53. package/themes/default/calendar-OLD.scss +183 -0
  54. package/themes/default/calendar.scss +120 -98
  55. package/themes/default/inputs/date-input.scss +32 -0
@@ -0,0 +1,26 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { _ngModelComponentDefaults } from '../_internal/ngmodel-component';
3
+ import { ComponentColor } from '../types/colors.types';
4
+ import { ArdCalendarView } from './calendar.types';
5
+ const _calendarDefaults = {
6
+ ..._ngModelComponentDefaults,
7
+ color: ComponentColor.Primary,
8
+ activeView: ArdCalendarView.Days,
9
+ activeYear: new Date().getFullYear(),
10
+ activeMonth: new Date().getMonth(),
11
+ firstWeekday: 1,
12
+ multipleYearPageChangeModifier: 5,
13
+ autoFocus: false,
14
+ min: null,
15
+ max: null,
16
+ filter: null,
17
+ };
18
+ export const ARD_CALENDAR_DEFAULTS = new InjectionToken('ard-calendar-defaults', {
19
+ factory: () => ({
20
+ ..._calendarDefaults,
21
+ }),
22
+ });
23
+ export function provideCalendarDefaults(config) {
24
+ return { provide: ARD_CALENDAR_DEFAULTS, useValue: { ..._calendarDefaults, ...config } };
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUE2QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQXVCLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBZXhFLE1BQU0saUJBQWlCLEdBQXdCO0lBQzdDLEdBQUcseUJBQXlCO0lBQzVCLEtBQUssRUFBRSxjQUFjLENBQUMsT0FBTztJQUM3QixVQUFVLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDaEMsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO0lBQ3BDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxZQUFZLEVBQUUsQ0FBQztJQUNmLDhCQUE4QixFQUFFLENBQUM7SUFDakMsU0FBUyxFQUFFLEtBQUs7SUFDaEIsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFzQix1QkFBdUIsRUFBRTtJQUNwRyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNkLEdBQUcsaUJBQWlCO0tBQ3JCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBb0M7SUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLGlCQUFpQixFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUMzRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBfbmdNb2RlbENvbXBvbmVudERlZmF1bHRzLCBfTmdNb2RlbENvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vX2ludGVybmFsL25nbW9kZWwtY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudENvbG9yIH0gZnJvbSAnLi4vdHlwZXMvY29sb3JzLnR5cGVzJztcbmltcG9ydCB7IEFyZENhbGVuZGFyRmlsdGVyRm4sIEFyZENhbGVuZGFyVmlldyB9IGZyb20gJy4vY2FsZW5kYXIudHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyZENhbGVuZGFyRGVmYXVsdHMgZXh0ZW5kcyBfTmdNb2RlbENvbXBvbmVudERlZmF1bHRzIHtcbiAgY29sb3I6IENvbXBvbmVudENvbG9yO1xuICBhY3RpdmVWaWV3OiBBcmRDYWxlbmRhclZpZXc7XG4gIGFjdGl2ZVllYXI6IG51bWJlcjtcbiAgYWN0aXZlTW9udGg6IG51bWJlcjtcbiAgZmlyc3RXZWVrZGF5OiBudW1iZXI7XG4gIG11bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllcjogbnVtYmVyO1xuICBhdXRvRm9jdXM6IGJvb2xlYW47XG4gIG1pbjogRGF0ZSB8IG51bGw7XG4gIG1heDogRGF0ZSB8IG51bGw7XG4gIGZpbHRlcjogQXJkQ2FsZW5kYXJGaWx0ZXJGbiB8IG51bGw7XG59XG5cbmNvbnN0IF9jYWxlbmRhckRlZmF1bHRzOiBBcmRDYWxlbmRhckRlZmF1bHRzID0ge1xuICAuLi5fbmdNb2RlbENvbXBvbmVudERlZmF1bHRzLFxuICBjb2xvcjogQ29tcG9uZW50Q29sb3IuUHJpbWFyeSxcbiAgYWN0aXZlVmlldzogQXJkQ2FsZW5kYXJWaWV3LkRheXMsXG4gIGFjdGl2ZVllYXI6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxcbiAgYWN0aXZlTW9udGg6IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSxcbiAgZmlyc3RXZWVrZGF5OiAxLFxuICBtdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXI6IDUsXG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIG1pbjogbnVsbCxcbiAgbWF4OiBudWxsLFxuICBmaWx0ZXI6IG51bGwsXG59O1xuXG5leHBvcnQgY29uc3QgQVJEX0NBTEVOREFSX0RFRkFVTFRTID0gbmV3IEluamVjdGlvblRva2VuPEFyZENhbGVuZGFyRGVmYXVsdHM+KCdhcmQtY2FsZW5kYXItZGVmYXVsdHMnLCB7XG4gIGZhY3Rvcnk6ICgpID0+ICh7XG4gICAgLi4uX2NhbGVuZGFyRGVmYXVsdHMsXG4gIH0pLFxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ2FsZW5kYXJEZWZhdWx0cyhjb25maWc6IFBhcnRpYWw8QXJkQ2FsZW5kYXJEZWZhdWx0cz4pOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IEFSRF9DQUxFTkRBUl9ERUZBVUxUUywgdXNlVmFsdWU6IHsgLi4uX2NhbGVuZGFyRGVmYXVsdHMsIC4uLmNvbmZpZyB9IH07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuaW50ZXJuYWwtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmludGVybmFsLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQXJyYXlJdGVtIHtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGRpc2FibGVkOiBib29sZWFuO1xyXG59Il19
@@ -0,0 +1,24 @@
1
+ import { CommonModule, DatePipe, UpperCasePipe } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { ArdiumButtonModule } from '../buttons/button';
4
+ import { ArdiumIconModule } from '../icon';
5
+ import { ArdiumIconButtonModule } from './../buttons/icon-button/icon-button.module';
6
+ import { ArdiumCalendarComponent } from './calendar.component';
7
+ import { DaysViewComponent } from './views/days-view/days-view.component';
8
+ import { MonthsViewComponent } from './views/months-view/months-view.component';
9
+ import { YearsViewComponent } from './views/years-view/years-view.component';
10
+ import * as i0 from "@angular/core";
11
+ export class ArdiumCalendarModule {
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
13
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarModule, declarations: [ArdiumCalendarComponent, DaysViewComponent, MonthsViewComponent, YearsViewComponent], imports: [CommonModule, DatePipe, UpperCasePipe, ArdiumIconButtonModule, ArdiumIconModule, ArdiumButtonModule], exports: [ArdiumCalendarComponent] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarModule, imports: [CommonModule, ArdiumIconButtonModule, ArdiumIconModule, ArdiumButtonModule] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ declarations: [ArdiumCalendarComponent, DaysViewComponent, MonthsViewComponent, YearsViewComponent],
20
+ imports: [CommonModule, DatePipe, UpperCasePipe, ArdiumIconButtonModule, ArdiumIconModule, ArdiumButtonModule],
21
+ exports: [ArdiumCalendarComponent],
22
+ }]
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBTzdFLE1BQU0sT0FBTyxvQkFBb0I7K0dBQXBCLG9CQUFvQjtnSEFBcEIsb0JBQW9CLGlCQUpoQix1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsYUFDeEYsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLGFBQ3JHLHVCQUF1QjtnSEFFcEIsb0JBQW9CLFlBSHJCLFlBQVksRUFBMkIsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCOzs0RkFHbEcsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO29CQUNuRyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQztvQkFDaEgsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSwgVXBwZXJDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXJkaXVtQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9ucy9idXR0b24nO1xuaW1wb3J0IHsgQXJkaXVtSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgQXJkaXVtSWNvbkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4vLi4vYnV0dG9ucy9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgQXJkaXVtQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXlzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9udGhzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFllYXJzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MveWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0FyZGl1bUNhbGVuZGFyQ29tcG9uZW50LCBEYXlzVmlld0NvbXBvbmVudCwgTW9udGhzVmlld0NvbXBvbmVudCwgWWVhcnNWaWV3Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGF0ZVBpcGUsIFVwcGVyQ2FzZVBpcGUsIEFyZGl1bUljb25CdXR0b25Nb2R1bGUsIEFyZGl1bUljb25Nb2R1bGUsIEFyZGl1bUJ1dHRvbk1vZHVsZV0sXG5leHBvcnRzOiBbQXJkaXVtQ2FsZW5kYXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBBcmRpdW1DYWxlbmRhck1vZHVsZSB7fVxuIl19
@@ -0,0 +1,6 @@
1
+ export const ArdCalendarView = {
2
+ Days: 'days',
3
+ Months: 'months',
4
+ Years: 'years',
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixJQUFJLEVBQUUsTUFBTTtJQUNaLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxPQUFPO0NBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBcmRDYWxlbmRhclZpZXcgPSB7XHJcbiAgRGF5czogJ2RheXMnLFxyXG4gIE1vbnRoczogJ21vbnRocycsXHJcbiAgWWVhcnM6ICd5ZWFycycsXHJcbn0gYXMgY29uc3Q7XHJcbmV4cG9ydCB0eXBlIEFyZENhbGVuZGFyVmlldyA9ICh0eXBlb2YgQXJkQ2FsZW5kYXJWaWV3KVtrZXlvZiB0eXBlb2YgQXJkQ2FsZW5kYXJWaWV3XTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlIHtcclxuICBsb3c6IERhdGU7XHJcbiAgaGlnaDogRGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBZZWFyUmFuZ2Uge1xyXG4gIGxvdzogbnVtYmVyO1xyXG4gIGhpZ2g6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQXJkQ2FsZW5kYXJGaWx0ZXJGbiA9IChkYXRlOiBEYXRlKSA9PiBib29sZWFuO1xyXG5cclxuLy8hIHRlbXBsYXRlIGNvbnRleHRzXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJZZWFyc1ZpZXdIZWFkZXJDb250ZXh0IHtcclxuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcclxuICBwcmV2UGFnZTogKCkgPT4gdm9pZDtcclxuICBvcGVuTW9udGhzVmlldzogKCkgPT4gdm9pZDtcclxuICBvcGVuRGF5c1ZpZXc6ICgpID0+IHZvaWQ7XHJcbiAgY2FuR29Ub05leHRQYWdlOiBib29sZWFuO1xyXG4gIGNhbkdvVG9QcmV2aW91c1BhZ2U6IGJvb2xlYW47XHJcbiAgeWVhclJhbmdlOiBZZWFyUmFuZ2U7XHJcbiAgZGF0ZVJhbmdlOiBEYXRlUmFuZ2U7XHJcbiAgJGltcGxpY2l0OiBEYXRlUmFuZ2U7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJNb250aHNWaWV3SGVhZGVyQ29udGV4dCB7XHJcbiAgbmV4dFBhZ2U6ICgpID0+IHZvaWQ7XHJcbiAgcHJldlBhZ2U6ICgpID0+IHZvaWQ7XHJcbiAgb3BlbkRheXNWaWV3OiAoKSA9PiB2b2lkO1xyXG4gIG9wZW5ZZWFyc1ZpZXc6ICgpID0+IHZvaWQ7XHJcbiAgY2FuR29Ub05leHRQYWdlOiBib29sZWFuO1xyXG4gIGNhbkdvVG9QcmV2aW91c1BhZ2U6IGJvb2xlYW47XHJcbiAgeWVhcjogbnVtYmVyO1xyXG4gIGRhdGU6IERhdGU7XHJcbiAgJGltcGxpY2l0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJEYXlzVmlld0hlYWRlckNvbnRleHQge1xyXG4gIG5leHRNb250aDogKCkgPT4gdm9pZDtcclxuICBwcmV2TW9udGg6ICgpID0+IHZvaWQ7XHJcbiAgbmV4dFllYXI6ICgpID0+IHZvaWQ7XHJcbiAgcHJldlllYXI6ICgpID0+IHZvaWQ7XHJcbiAgb3BlblllYXJzVmlldzogKCkgPT4gdm9pZDtcclxuICBvcGVuTW9udGhzVmlldzogKCkgPT4gdm9pZDtcclxuICBjYW5Hb1RvTmV4dFBhZ2U6IGJvb2xlYW47XHJcbiAgY2FuR29Ub1ByZXZpb3VzUGFnZTogYm9vbGVhbjtcclxuICB5ZWFyOiBudW1iZXI7XHJcbiAgbW9udGg6IG51bWJlcjtcclxuICAkaW1wbGljaXQ6IERhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJXZWVrZGF5Q29udGV4dCB7XHJcbiAgZGF5SW5kZXg6IG51bWJlcjtcclxuICBkYXRlOiBEYXRlO1xyXG4gICRpbXBsaWNpdDogRGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckZsb2F0aW5nTW9udGhDb250ZXh0IHtcclxuICBtb250aDogbnVtYmVyO1xyXG4gIGRhdGU6IERhdGU7XHJcbiAgJGltcGxpY2l0OiBEYXRlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyWWVhckNvbnRleHQge1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbiAgZGF0ZTogRGF0ZTtcclxuICAkaW1wbGljaXQ6IERhdGU7XHJcbiAgc2VsZWN0OiAoeWVhcjogbnVtYmVyKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyTW9udGhDb250ZXh0IHtcclxuICBtb250aDogbnVtYmVyO1xyXG4gIGRhdGU6IERhdGU7XHJcbiAgJGltcGxpY2l0OiBEYXRlO1xyXG4gIHNlbGVjdDogKG1vbnRoOiBudW1iZXIgfCBEYXRlKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRGF5Q29udGV4dCB7XHJcbiAgdmFsdWU6IG51bWJlcjtcclxuICBkYXRlOiBEYXRlO1xyXG4gICRpbXBsaWNpdDogbnVtYmVyO1xyXG4gIHNlbGVjdDogKGRheTogbnVtYmVyIHwgRGF0ZSkgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckFjdGlvbkJ1dHRvbnNDb250ZXh0IHtcclxuICBjYW5jZWw6ICgpID0+IHZvaWQ7XHJcbiAgYXBwbHk6ICgpID0+IHZvaWQ7XHJcbiAgcmVzZXQ6ICgpID0+IHZvaWQ7XHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ export * from './calendar.component';
2
+ export * from './calendar.defaults';
3
+ export * from './calendar.module';
4
+ export * from './calendar.types';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NhbGVuZGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NhbGVuZGFyLmRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vY2FsZW5kYXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY2FsZW5kYXIudHlwZXMnO1xuXG4iXX0=
@@ -0,0 +1,282 @@
1
+ import { ChangeDetectionStrategy, Component, computed, HostListener, input, output, viewChild, } from '@angular/core';
2
+ import { isMonthOutOfRange } from '../months-view/months-view.helpers';
3
+ import { getCalendarDayData, getCalendarWeekdayArray } from './days-view.helpers';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "../../../buttons/icon-button/icon-button.component";
7
+ import * as i3 from "../../../icon/icon.component";
8
+ import * as i4 from "../../../buttons/button/button.component";
9
+ const TODAY = new Date();
10
+ function isLeapYear(year) {
11
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
12
+ }
13
+ export class DaysViewComponent {
14
+ constructor() {
15
+ this.tabIndex = input.required();
16
+ this.readOnly = input.required();
17
+ this.disabled = input.required();
18
+ this.autoFocus = input.required();
19
+ this._isUsingKeyboard = input.required();
20
+ //! active year/month
21
+ this.activeYear = input.required();
22
+ this.activeMonth = input.required();
23
+ this.selectedDate = input.required();
24
+ this.min = input.required();
25
+ this.max = input.required();
26
+ this.isDayFilteredOut = input.required();
27
+ this.highlightedDay = input.required();
28
+ //! focusing
29
+ this.focusableElement = viewChild.required('focusableElement');
30
+ //! calendar data
31
+ this.firstWeekday = input.required();
32
+ this.activeCalendarData = computed(() => getCalendarDayData(this.activeYear(), this.activeMonth(), this.firstWeekday(), this.min(), this.max()));
33
+ this.reserveTopRow = computed(() => this.activeCalendarData().leadingSpaces < 3);
34
+ this.weekdayArray = computed(() => getCalendarWeekdayArray(this.firstWeekday()));
35
+ this.currentAriaLabel = computed(() => {
36
+ const day = this.highlightedDay();
37
+ if (day === null) {
38
+ return '';
39
+ }
40
+ return new Date(this.activeYear(), this.activeMonth(), day).toLocaleDateString(undefined, {
41
+ weekday: 'long',
42
+ year: 'numeric',
43
+ month: 'long',
44
+ day: 'numeric',
45
+ });
46
+ });
47
+ //! outputs
48
+ this.triggerOpenYearsView = output();
49
+ this.triggerOpenMonthsView = output();
50
+ this.triggerSelectDay = output();
51
+ this.triggerChangeMonth = output();
52
+ this.triggerChangeYear = output();
53
+ this.triggerHighlightDay = output();
54
+ this.triggerHighlightNextDay = output();
55
+ this.triggerHighlightPreviousDay = output();
56
+ this.triggerHighlightFirstDay = output();
57
+ this.triggerHighlightLastDay = output();
58
+ this.triggerHighlightSameDayPreviousPage = output();
59
+ this.triggerHighlightSameDayNextPage = output();
60
+ this.focusEvent = output({ alias: 'focus' });
61
+ this.blurEvent = output({ alias: 'blur' });
62
+ //! templates
63
+ this.daysViewHeaderTemplate = input.required();
64
+ this.floatingMonthTemplate = input.required();
65
+ this.weekdayTemplate = input.required();
66
+ this.dayTemplate = input.required();
67
+ //! template contexts
68
+ this.daysViewHeaderContext = computed(() => ({
69
+ nextMonth: () => {
70
+ this.triggerChangeMonth.emit(this.activeMonth() + 1);
71
+ },
72
+ prevMonth: () => {
73
+ this.triggerChangeMonth.emit(this.activeMonth() - 1);
74
+ },
75
+ nextYear: () => {
76
+ this.triggerChangeYear.emit(this.activeYear() + 1);
77
+ },
78
+ prevYear: () => {
79
+ this.triggerChangeYear.emit(this.activeYear() - 1);
80
+ },
81
+ openYearsView: () => {
82
+ this.triggerOpenYearsView.emit();
83
+ },
84
+ openMonthsView: () => {
85
+ this.triggerOpenMonthsView.emit();
86
+ },
87
+ canGoToNextPage: !this.isMonthOutOfRange(this.activeMonth() + 1),
88
+ canGoToPreviousPage: !this.isMonthOutOfRange(this.activeMonth() - 1),
89
+ year: this.activeYear(),
90
+ month: this.activeMonth(),
91
+ $implicit: new Date(this.activeYear(), this.activeMonth(), 1, 0, 0, 0, 0),
92
+ }));
93
+ this.weekdayContext = computed(() => (dayIndex) => {
94
+ const date = new Date(1970, 0, 4 + dayIndex);
95
+ return {
96
+ dayIndex,
97
+ date,
98
+ $implicit: date,
99
+ };
100
+ });
101
+ this.floatingMonthContext = computed(() => {
102
+ const date = new Date(this.activeYear(), this.activeMonth(), 1, 0, 0, 0, 0);
103
+ return {
104
+ month: this.activeMonth(),
105
+ date,
106
+ $implicit: date,
107
+ };
108
+ });
109
+ this.dayContext = computed(() => (day) => {
110
+ const date = new Date(this.activeYear(), this.activeMonth(), day);
111
+ return {
112
+ value: day,
113
+ date,
114
+ $implicit: day,
115
+ select: (dayOrDate) => {
116
+ this.triggerSelectDay.emit(dayOrDate instanceof Date ? dayOrDate.getDate() : dayOrDate);
117
+ },
118
+ };
119
+ });
120
+ }
121
+ onMouseMove() {
122
+ if (this._isUsingKeyboard())
123
+ return;
124
+ if (this.highlightedDay())
125
+ this.triggerHighlightDay.emit(null);
126
+ }
127
+ ngAfterViewInit() {
128
+ if (!this.autoFocus())
129
+ return;
130
+ this.focus();
131
+ this.triggerHighlightDay.emit(1);
132
+ }
133
+ focus() {
134
+ this.focusableElement().nativeElement.focus();
135
+ }
136
+ isDaySelected(day) {
137
+ if (day instanceof Date)
138
+ day = day.getDate();
139
+ return (this.selectedDate() !== null &&
140
+ this.activeYear() === this.selectedDate()?.getFullYear() &&
141
+ this.activeMonth() === this.selectedDate()?.getMonth() &&
142
+ day === this.selectedDate()?.getDate());
143
+ }
144
+ onCalendarDayMouseover(day) {
145
+ if (this._isUsingKeyboard())
146
+ return;
147
+ if (this.disabled() || this.readOnly())
148
+ return;
149
+ if (day && this.isDayFilteredOut()(day))
150
+ return;
151
+ this.triggerHighlightDay.emit(day);
152
+ }
153
+ onCalendarDayClick(day) {
154
+ if (this.disabled() || this.readOnly())
155
+ return;
156
+ if (day === null)
157
+ return;
158
+ if (this.isDayFilteredOut()(day))
159
+ return;
160
+ this.triggerHighlightDay.emit(day);
161
+ this.focus();
162
+ this.triggerSelectDay.emit(day);
163
+ }
164
+ onDayGridFocus() {
165
+ if (this.disabled() || this.readOnly())
166
+ return;
167
+ this.triggerHighlightFirstDay.emit();
168
+ }
169
+ onDayGridBlur() {
170
+ if (this.disabled() || this.readOnly())
171
+ return;
172
+ this.triggerHighlightDay.emit(null);
173
+ }
174
+ onDayGridClick() {
175
+ if (this.disabled() || this.readOnly())
176
+ return;
177
+ if (this.highlightedDay() !== null)
178
+ return;
179
+ this.triggerHighlightFirstDay.emit();
180
+ }
181
+ //! helpers
182
+ isDayToday(day) {
183
+ return this.activeYear() === TODAY.getFullYear() && this.activeMonth() === TODAY.getMonth() && day === TODAY.getDate();
184
+ }
185
+ isMonthOutOfRange(month) {
186
+ return isMonthOutOfRange(month, this.activeYear(), this.min(), this.max());
187
+ }
188
+ //! keyboard controls
189
+ onMainGridKeydown(event) {
190
+ if (this.disabled() || this.readOnly())
191
+ return;
192
+ switch (event.code) {
193
+ case 'Space':
194
+ case 'Enter':
195
+ this._onEnterPress(event);
196
+ break;
197
+ case 'ArrowUp':
198
+ this._onArrowUpPress(event);
199
+ break;
200
+ case 'ArrowDown':
201
+ this._onArrowDownPress(event);
202
+ break;
203
+ case 'ArrowLeft':
204
+ this._onArrowLeftPress(event);
205
+ break;
206
+ case 'ArrowRight':
207
+ this._onArrowRightPress(event);
208
+ break;
209
+ case 'Home':
210
+ this._onHomePress(event);
211
+ break;
212
+ case 'End':
213
+ this._onEndPress(event);
214
+ break;
215
+ case 'PageUp':
216
+ this._onPageUpPress(event);
217
+ break;
218
+ case 'PageDown':
219
+ this._onPageDownPress(event);
220
+ break;
221
+ default:
222
+ return;
223
+ }
224
+ }
225
+ //select currently selected entry
226
+ _onEnterPress(event) {
227
+ event.preventDefault();
228
+ this.triggerSelectDay.emit(this.highlightedDay());
229
+ }
230
+ //highlight the entry one line below
231
+ _onArrowDownPress(event) {
232
+ event.preventDefault();
233
+ this.triggerHighlightNextDay.emit(7);
234
+ }
235
+ //highlight the entry one line above
236
+ _onArrowUpPress(event) {
237
+ event.preventDefault();
238
+ this.triggerHighlightPreviousDay.emit(7);
239
+ }
240
+ //highlight next entry
241
+ _onArrowRightPress(event) {
242
+ event.preventDefault();
243
+ this.triggerHighlightNextDay.emit(1);
244
+ }
245
+ //highlight previous entry
246
+ _onArrowLeftPress(event) {
247
+ event.preventDefault();
248
+ this.triggerHighlightPreviousDay.emit(1);
249
+ }
250
+ //highlight first entry on the page
251
+ _onHomePress(event) {
252
+ event.preventDefault();
253
+ this.triggerHighlightFirstDay.emit();
254
+ }
255
+ //highlight last entry on the page
256
+ _onEndPress(event) {
257
+ event.preventDefault();
258
+ this.triggerHighlightLastDay.emit();
259
+ }
260
+ //alone: highlight same entry on the next page
261
+ //with alt: highlight same entry multiple pages after (12 pages)
262
+ _onPageDownPress(event) {
263
+ event.preventDefault();
264
+ this.triggerHighlightSameDayNextPage.emit(event.altKey);
265
+ }
266
+ //alone: highlight same entry on the previous page
267
+ //with alt: highlight same entry multiple pages before (12 pages)
268
+ _onPageUpPress(event) {
269
+ event.preventDefault();
270
+ this.triggerHighlightSameDayPreviousPage.emit(event.altKey);
271
+ }
272
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaysViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
273
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DaysViewComponent, selector: "ard-days-view", inputs: { tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: true, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: true, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: true, transformFunction: null }, _isUsingKeyboard: { classPropertyName: "_isUsingKeyboard", publicName: "_isUsingKeyboard", isSignal: true, isRequired: true, transformFunction: null }, activeYear: { classPropertyName: "activeYear", publicName: "activeYear", isSignal: true, isRequired: true, transformFunction: null }, activeMonth: { classPropertyName: "activeMonth", publicName: "activeMonth", isSignal: true, isRequired: true, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: true, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: true, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: true, transformFunction: null }, isDayFilteredOut: { classPropertyName: "isDayFilteredOut", publicName: "isDayFilteredOut", isSignal: true, isRequired: true, transformFunction: null }, highlightedDay: { classPropertyName: "highlightedDay", publicName: "highlightedDay", isSignal: true, isRequired: true, transformFunction: null }, firstWeekday: { classPropertyName: "firstWeekday", publicName: "firstWeekday", isSignal: true, isRequired: true, transformFunction: null }, daysViewHeaderTemplate: { classPropertyName: "daysViewHeaderTemplate", publicName: "daysViewHeaderTemplate", isSignal: true, isRequired: true, transformFunction: null }, floatingMonthTemplate: { classPropertyName: "floatingMonthTemplate", publicName: "floatingMonthTemplate", isSignal: true, isRequired: true, transformFunction: null }, weekdayTemplate: { classPropertyName: "weekdayTemplate", publicName: "weekdayTemplate", isSignal: true, isRequired: true, transformFunction: null }, dayTemplate: { classPropertyName: "dayTemplate", publicName: "dayTemplate", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { triggerOpenYearsView: "triggerOpenYearsView", triggerOpenMonthsView: "triggerOpenMonthsView", triggerSelectDay: "triggerSelectDay", triggerChangeMonth: "triggerChangeMonth", triggerChangeYear: "triggerChangeYear", triggerHighlightDay: "triggerHighlightDay", triggerHighlightNextDay: "triggerHighlightNextDay", triggerHighlightPreviousDay: "triggerHighlightPreviousDay", triggerHighlightFirstDay: "triggerHighlightFirstDay", triggerHighlightLastDay: "triggerHighlightLastDay", triggerHighlightSameDayPreviousPage: "triggerHighlightSameDayPreviousPage", triggerHighlightSameDayNextPage: "triggerHighlightSameDayNextPage", focusEvent: "focus", blurEvent: "blur" }, host: { listeners: { "mousemove": "onMouseMove()" } }, viewQueries: [{ propertyName: "focusableElement", first: true, predicate: ["focusableElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ard-days-view\">\r\n @if (!readOnly()) {\r\n <div class=\"ard-calendar__top-toolbar\">\r\n <ng-template\r\n #defaultDaysViewHeaderTemplate\r\n let-currDate\r\n let-nextMonth=\"nextMonth\"\r\n let-prevMonth=\"prevMonth\"\r\n let-canGoToNextMonth=\"canGoToNextPage\"\r\n let-canGoToPreviousMonth=\"canGoToPreviousPage\"\r\n let-openYearsView=\"openYearsView\"\r\n >\r\n <div class=\"ard-calendar__calendar-header\">\r\n <ard-button\r\n class=\"ard-calendar__header-button\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n variant=\"pill\"\r\n [tabIndex]=\"tabIndex()\"\r\n (click)=\"openYearsView()\"\r\n >\r\n {{ currDate | date : 'MMM YYYY' | uppercase }}\r\n <div class=\"ard-dropdown-arrow\"></div>\r\n </ard-button>\r\n <div class=\"ard-calendar__arrows\">\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"prevMonth()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToPreviousMonth\"\r\n >\r\n <ard-icon>chevron_left</ard-icon>\r\n </ard-icon-button>\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"nextMonth()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToNextMonth\"\r\n >\r\n <ard-icon>chevron_right</ard-icon>\r\n </ard-icon-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"daysViewHeaderTemplate() || defaultDaysViewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"daysViewHeaderContext()\"\r\n />\r\n </div>\r\n }\r\n <div class=\"ard-calendar__weekdays\">\r\n <ng-template\r\n #defaultWeekdayTemplate\r\n let-date\r\n >\r\n <div class=\"ard-calendar__weekday\">{{ date | date : 'EEEEE' }}</div>\r\n </ng-template>\r\n @for (weekdayIndex of weekdayArray(); track weekdayIndex) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"weekdayTemplate() || defaultWeekdayTemplate\"\r\n [ngTemplateOutletContext]=\"weekdayContext()(weekdayIndex)\"\r\n ></ng-template>\r\n }\r\n </div>\r\n <div\r\n #focusableElement\r\n class=\"ard-calendar__days-grid\"\r\n [class.ard-reserve-top-row]=\"reserveTopRow()\"\r\n [tabindex]=\"tabIndex()\"\r\n [ariaLabel]=\"currentAriaLabel()\"\r\n (focus)=\"focusEvent.emit($event)\"\r\n (focus)=\"onDayGridFocus()\"\r\n (blur)=\"blurEvent.emit($event)\"\r\n (blur)=\"onDayGridBlur()\"\r\n (click)=\"onDayGridClick()\"\r\n (keydown)=\"onMainGridKeydown($event)\"\r\n role=\"grid\"\r\n >\r\n <div class=\"ard-calendar__floating-month\">\r\n <ng-template\r\n #defaultFloatingMonthTemplate\r\n let-date\r\n >\r\n {{ date | date : 'LLL' | uppercase }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"floatingMonthTemplate() || defaultFloatingMonthTemplate\"\r\n [ngTemplateOutletContext]=\"floatingMonthContext()\"\r\n ></ng-template>\r\n </div>\r\n @for (week of activeCalendarData().array; track $index) { @for (day of week; track day ? day :\r\n activeCalendarData().leadingSpaces - $index) { @if (day === null) {\r\n <div class=\"ard-calendar__entry ard-calendar__entry-empty\"></div>\r\n } @else {\r\n <div\r\n class=\"ard-calendar__entry\"\r\n [class.ard-calendar__entry-highlighted]=\"highlightedDay() === day.value\"\r\n [class.ard-calendar__entry-disabled]=\"day.disabled || isDayFilteredOut()(day.value)\"\r\n [class.ard-calendar__entry-selected]=\"isDaySelected(day.value)\"\r\n [class.ard-calendar-today]=\"isDayToday(day.value)\"\r\n (click)=\"onCalendarDayClick(day.value)\"\r\n (mousemove)=\"$event.stopPropagation()\"\r\n (mouseover)=\"onCalendarDayMouseover(day.value)\"\r\n role=\"gridcell\"\r\n >\r\n <div class=\"ard-calendar__entry-button\">\r\n <div class=\"ard-focus-overlay\"></div>\r\n <div class=\"ard-button-content\">\r\n <ng-template\r\n #defaultDayTemplate\r\n let-day\r\n >\r\n {{ day }}\r\n </ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayTemplate() || defaultDayTemplate\"\r\n [ngTemplateOutletContext]=\"dayContext()(day.value)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n } } }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumIconButtonComponent, selector: "ard-icon-button", inputs: ["wrapperClasses", "type", "color", "lightColoring", "compact"] }, { kind: "component", type: i3.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }, { kind: "component", type: i4.ArdiumButtonComponent, selector: "ard-button", inputs: ["icon", "variant", "alignIcon", "vertical"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
274
+ }
275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaysViewComponent, decorators: [{
276
+ type: Component,
277
+ args: [{ selector: 'ard-days-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ard-days-view\">\r\n @if (!readOnly()) {\r\n <div class=\"ard-calendar__top-toolbar\">\r\n <ng-template\r\n #defaultDaysViewHeaderTemplate\r\n let-currDate\r\n let-nextMonth=\"nextMonth\"\r\n let-prevMonth=\"prevMonth\"\r\n let-canGoToNextMonth=\"canGoToNextPage\"\r\n let-canGoToPreviousMonth=\"canGoToPreviousPage\"\r\n let-openYearsView=\"openYearsView\"\r\n >\r\n <div class=\"ard-calendar__calendar-header\">\r\n <ard-button\r\n class=\"ard-calendar__header-button\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n variant=\"pill\"\r\n [tabIndex]=\"tabIndex()\"\r\n (click)=\"openYearsView()\"\r\n >\r\n {{ currDate | date : 'MMM YYYY' | uppercase }}\r\n <div class=\"ard-dropdown-arrow\"></div>\r\n </ard-button>\r\n <div class=\"ard-calendar__arrows\">\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"prevMonth()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToPreviousMonth\"\r\n >\r\n <ard-icon>chevron_left</ard-icon>\r\n </ard-icon-button>\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"nextMonth()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToNextMonth\"\r\n >\r\n <ard-icon>chevron_right</ard-icon>\r\n </ard-icon-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"daysViewHeaderTemplate() || defaultDaysViewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"daysViewHeaderContext()\"\r\n />\r\n </div>\r\n }\r\n <div class=\"ard-calendar__weekdays\">\r\n <ng-template\r\n #defaultWeekdayTemplate\r\n let-date\r\n >\r\n <div class=\"ard-calendar__weekday\">{{ date | date : 'EEEEE' }}</div>\r\n </ng-template>\r\n @for (weekdayIndex of weekdayArray(); track weekdayIndex) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"weekdayTemplate() || defaultWeekdayTemplate\"\r\n [ngTemplateOutletContext]=\"weekdayContext()(weekdayIndex)\"\r\n ></ng-template>\r\n }\r\n </div>\r\n <div\r\n #focusableElement\r\n class=\"ard-calendar__days-grid\"\r\n [class.ard-reserve-top-row]=\"reserveTopRow()\"\r\n [tabindex]=\"tabIndex()\"\r\n [ariaLabel]=\"currentAriaLabel()\"\r\n (focus)=\"focusEvent.emit($event)\"\r\n (focus)=\"onDayGridFocus()\"\r\n (blur)=\"blurEvent.emit($event)\"\r\n (blur)=\"onDayGridBlur()\"\r\n (click)=\"onDayGridClick()\"\r\n (keydown)=\"onMainGridKeydown($event)\"\r\n role=\"grid\"\r\n >\r\n <div class=\"ard-calendar__floating-month\">\r\n <ng-template\r\n #defaultFloatingMonthTemplate\r\n let-date\r\n >\r\n {{ date | date : 'LLL' | uppercase }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"floatingMonthTemplate() || defaultFloatingMonthTemplate\"\r\n [ngTemplateOutletContext]=\"floatingMonthContext()\"\r\n ></ng-template>\r\n </div>\r\n @for (week of activeCalendarData().array; track $index) { @for (day of week; track day ? day :\r\n activeCalendarData().leadingSpaces - $index) { @if (day === null) {\r\n <div class=\"ard-calendar__entry ard-calendar__entry-empty\"></div>\r\n } @else {\r\n <div\r\n class=\"ard-calendar__entry\"\r\n [class.ard-calendar__entry-highlighted]=\"highlightedDay() === day.value\"\r\n [class.ard-calendar__entry-disabled]=\"day.disabled || isDayFilteredOut()(day.value)\"\r\n [class.ard-calendar__entry-selected]=\"isDaySelected(day.value)\"\r\n [class.ard-calendar-today]=\"isDayToday(day.value)\"\r\n (click)=\"onCalendarDayClick(day.value)\"\r\n (mousemove)=\"$event.stopPropagation()\"\r\n (mouseover)=\"onCalendarDayMouseover(day.value)\"\r\n role=\"gridcell\"\r\n >\r\n <div class=\"ard-calendar__entry-button\">\r\n <div class=\"ard-focus-overlay\"></div>\r\n <div class=\"ard-button-content\">\r\n <ng-template\r\n #defaultDayTemplate\r\n let-day\r\n >\r\n {{ day }}\r\n </ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayTemplate() || defaultDayTemplate\"\r\n [ngTemplateOutletContext]=\"dayContext()(day.value)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n } } }\r\n </div>\r\n</div>\r\n" }]
278
+ }], propDecorators: { onMouseMove: [{
279
+ type: HostListener,
280
+ args: ['mousemove']
281
+ }] } });
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY2FsZW5kYXIvdmlld3MvZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL3ZpZXdzL2RheXMtdmlldy9kYXlzLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUVSLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBRWxGLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFFekIsU0FBUyxVQUFVLENBQUMsSUFBWTtJQUM5QixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBUUQsTUFBTSxPQUFPLGlCQUFpQjtJQU45QjtRQU9XLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDcEMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUNyQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRXJDLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFFdEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBY3RELHFCQUFxQjtRQUNaLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFFdkMsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFlLENBQUM7UUFFN0MsUUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWUsQ0FBQztRQUNwQyxRQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZSxDQUFDO1FBRXBDLHFCQUFnQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTJELENBQUM7UUFFN0YsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpQixDQUFDO1FBRTFELFlBQVk7UUFDSCxxQkFBZ0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUEwQixrQkFBa0IsQ0FBQyxDQUFDO1FBTTVGLGlCQUFpQjtRQUNSLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBRXhDLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDMUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUN2RyxDQUFDO1FBQ08sa0JBQWEsR0FBRyxRQUFRLENBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXJGLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFZNUUscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hGLE9BQU8sRUFBRSxNQUFNO2dCQUNmLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxNQUFNO2dCQUNiLEdBQUcsRUFBRSxTQUFTO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxXQUFXO1FBQ0YseUJBQW9CLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFDdEMsMEJBQXFCLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFFdkMscUJBQWdCLEdBQUcsTUFBTSxFQUFpQixDQUFDO1FBQzNDLHVCQUFrQixHQUFHLE1BQU0sRUFBaUIsQ0FBQztRQUM3QyxzQkFBaUIsR0FBRyxNQUFNLEVBQWlCLENBQUM7UUFFNUMsd0JBQW1CLEdBQUcsTUFBTSxFQUFpQixDQUFDO1FBQzlDLDRCQUF1QixHQUFHLE1BQU0sRUFBVSxDQUFDO1FBQzNDLGdDQUEyQixHQUFHLE1BQU0sRUFBVSxDQUFDO1FBQy9DLDZCQUF3QixHQUFHLE1BQU0sRUFBUSxDQUFDO1FBQzFDLDRCQUF1QixHQUFHLE1BQU0sRUFBUSxDQUFDO1FBQ3pDLHdDQUFtQyxHQUFHLE1BQU0sRUFBVyxDQUFDO1FBQ3hELG9DQUErQixHQUFHLE1BQU0sRUFBVyxDQUFDO1FBRXBELGVBQVUsR0FBRyxNQUFNLENBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRCxjQUFTLEdBQUcsTUFBTSxDQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFzSTNELGFBQWE7UUFDSiwyQkFBc0IsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEwRCxDQUFDO1FBQ2xHLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXlELENBQUM7UUFDaEcsb0JBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFtRCxDQUFDO1FBQ3BGLGdCQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBK0MsQ0FBQztRQUVyRixxQkFBcUI7UUFDWiwwQkFBcUIsR0FBRyxRQUFRLENBQWdDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDOUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsYUFBYSxFQUFFLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLENBQUM7WUFDRCxjQUFjLEVBQUUsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsQ0FBQztZQUNELGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekIsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVLLG1CQUFjLEdBQUcsUUFBUSxDQUErQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtZQUMxRyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUM3QyxPQUFPO2dCQUNMLFFBQVE7Z0JBQ1IsSUFBSTtnQkFDSixTQUFTLEVBQUUsSUFBSTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFTSx5QkFBb0IsR0FBRyxRQUFRLENBQStCLEdBQUcsRUFBRTtZQUMxRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxPQUFPO2dCQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QixJQUFJO2dCQUNKLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVNLGVBQVUsR0FBRyxRQUFRLENBQXNDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDeEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRSxPQUFPO2dCQUNMLEtBQUssRUFBRSxHQUFHO2dCQUNWLElBQUk7Z0JBQ0osU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsTUFBTSxFQUFFLENBQUMsU0FBd0IsRUFBRSxFQUFFO29CQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFGLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjtJQXJSQyxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFBRSxPQUFPO1FBQ3BDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBa0JELEtBQUs7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQVlELGFBQWEsQ0FBQyxHQUF5QjtRQUNyQyxJQUFJLEdBQUcsWUFBWSxJQUFJO1lBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQ0wsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLElBQUk7WUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUU7WUFDdEQsR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDdkMsQ0FBQztJQUNKLENBQUM7SUFrQ0Qsc0JBQXNCLENBQUMsR0FBa0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFBRSxPQUFPO1FBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQy9DLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsR0FBa0I7UUFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDL0MsSUFBSSxHQUFHLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXpDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQy9DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUMvQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUMzQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7SUFDWCxVQUFVLENBQUMsR0FBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6SCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsaUJBQWlCLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDL0MsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUNSLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSO2dCQUNFLE9BQU87UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELGlDQUFpQztJQUN6QixhQUFhLENBQUMsS0FBb0I7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELG9DQUFvQztJQUM1QixpQkFBaUIsQ0FBQyxLQUFvQjtRQUM1QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0Qsb0NBQW9DO0lBQzVCLGVBQWUsQ0FBQyxLQUFvQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0Qsc0JBQXNCO0lBQ2Qsa0JBQWtCLENBQUMsS0FBb0I7UUFDN0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELDBCQUEwQjtJQUNsQixpQkFBaUIsQ0FBQyxLQUFvQjtRQUM1QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsbUNBQW1DO0lBQzNCLFlBQVksQ0FBQyxLQUFvQjtRQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxrQ0FBa0M7SUFDMUIsV0FBVyxDQUFDLEtBQW9CO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUNELDhDQUE4QztJQUM5QyxnRUFBZ0U7SUFDeEQsZ0JBQWdCLENBQUMsS0FBb0I7UUFDM0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxrREFBa0Q7SUFDbEQsaUVBQWlFO0lBQ3pELGNBQWMsQ0FBQyxLQUFvQjtRQUN6QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQzsrR0EvTlUsaUJBQWlCO21HQUFqQixpQkFBaUIsNHRHQ2pDOUIscW5KQWtJQTs7NEZEakdhLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU07OEJBWS9DLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbnB1dCxcclxuICBvdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgdmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENhbGVuZGFyRGF5Q29udGV4dCxcclxuICBDYWxlbmRhckRheXNWaWV3SGVhZGVyQ29udGV4dCxcclxuICBDYWxlbmRhckZsb2F0aW5nTW9udGhDb250ZXh0LFxyXG4gIENhbGVuZGFyV2Vla2RheUNvbnRleHQsXHJcbn0gZnJvbSAnLi4vLi4vY2FsZW5kYXIudHlwZXMnO1xyXG5pbXBvcnQgeyBpc01vbnRoT3V0T2ZSYW5nZSB9IGZyb20gJy4uL21vbnRocy12aWV3L21vbnRocy12aWV3LmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBnZXRDYWxlbmRhckRheURhdGEsIGdldENhbGVuZGFyV2Vla2RheUFycmF5IH0gZnJvbSAnLi9kYXlzLXZpZXcuaGVscGVycyc7XHJcblxyXG5jb25zdCBUT0RBWSA9IG5ldyBEYXRlKCk7XHJcblxyXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtZGF5cy12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF5cy12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGF5cy12aWV3LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIERheXNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgdGFiSW5kZXggPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgcmVhZE9ubHkgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG4gIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcmVhZG9ubHkgYXV0b0ZvY3VzID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcmVhZG9ubHkgX2lzVXNpbmdLZXlib2FyZCA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZScpXHJcbiAgb25Nb3VzZU1vdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNVc2luZ0tleWJvYXJkKCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkRGF5KCkpIHRoaXMudHJpZ2dlckhpZ2hsaWdodERheS5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9Gb2N1cygpKSByZXR1cm47XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHREYXkuZW1pdCgxKTtcclxuICB9XHJcblxyXG4gIC8vISBhY3RpdmUgeWVhci9tb250aFxyXG4gIHJlYWRvbmx5IGFjdGl2ZVllYXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgYWN0aXZlTW9udGggPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XHJcblxyXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZSA9IGlucHV0LnJlcXVpcmVkPERhdGUgfCBudWxsPigpO1xyXG5cclxuICByZWFkb25seSBtaW4gPSBpbnB1dC5yZXF1aXJlZDxEYXRlIHwgbnVsbD4oKTtcclxuICByZWFkb25seSBtYXggPSBpbnB1dC5yZXF1aXJlZDxEYXRlIHwgbnVsbD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgaXNEYXlGaWx0ZXJlZE91dCA9IGlucHV0LnJlcXVpcmVkPChkYXk6IG51bWJlciwgbW9udGg/OiBudW1iZXIsIHllYXI/OiBudW1iZXIpID0+IGJvb2xlYW4+KCk7XHJcblxyXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkRGF5ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyIHwgbnVsbD4oKTtcclxuXHJcbiAgLy8hIGZvY3VzaW5nXHJcbiAgcmVhZG9ubHkgZm9jdXNhYmxlRWxlbWVudCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2ZvY3VzYWJsZUVsZW1lbnQnKTtcclxuXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyEgY2FsZW5kYXIgZGF0YVxyXG4gIHJlYWRvbmx5IGZpcnN0V2Vla2RheSA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuXHJcbiAgcmVhZG9ubHkgYWN0aXZlQ2FsZW5kYXJEYXRhID0gY29tcHV0ZWQoKCkgPT5cclxuICAgIGdldENhbGVuZGFyRGF5RGF0YSh0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5hY3RpdmVNb250aCgpLCB0aGlzLmZpcnN0V2Vla2RheSgpLCB0aGlzLm1pbigpLCB0aGlzLm1heCgpKVxyXG4gICk7XHJcbiAgcmVhZG9ubHkgcmVzZXJ2ZVRvcFJvdyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMuYWN0aXZlQ2FsZW5kYXJEYXRhKCkubGVhZGluZ1NwYWNlcyA8IDMpO1xyXG5cclxuICByZWFkb25seSB3ZWVrZGF5QXJyYXkgPSBjb21wdXRlZCgoKSA9PiBnZXRDYWxlbmRhcldlZWtkYXlBcnJheSh0aGlzLmZpcnN0V2Vla2RheSgpKSk7XHJcblxyXG4gIGlzRGF5U2VsZWN0ZWQoZGF5OiBudW1iZXIgfCBEYXRlIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGRheSBpbnN0YW5jZW9mIERhdGUpIGRheSA9IGRheS5nZXREYXRlKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSgpICE9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuYWN0aXZlWWVhcigpID09PSB0aGlzLnNlbGVjdGVkRGF0ZSgpPy5nZXRGdWxsWWVhcigpICYmXHJcbiAgICAgIHRoaXMuYWN0aXZlTW9udGgoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUoKT8uZ2V0TW9udGgoKSAmJlxyXG4gICAgICBkYXkgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldERhdGUoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGN1cnJlbnRBcmlhTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBkYXkgPSB0aGlzLmhpZ2hsaWdodGVkRGF5KCk7XHJcbiAgICBpZiAoZGF5ID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5hY3RpdmVNb250aCgpLCBkYXkpLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHtcclxuICAgICAgd2Vla2RheTogJ2xvbmcnLFxyXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXHJcbiAgICAgIG1vbnRoOiAnbG9uZycsXHJcbiAgICAgIGRheTogJ251bWVyaWMnLFxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIC8vISBvdXRwdXRzXHJcbiAgcmVhZG9ubHkgdHJpZ2dlck9wZW5ZZWFyc1ZpZXcgPSBvdXRwdXQ8dm9pZD4oKTtcclxuICByZWFkb25seSB0cmlnZ2VyT3Blbk1vbnRoc1ZpZXcgPSBvdXRwdXQ8dm9pZD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgdHJpZ2dlclNlbGVjdERheSA9IG91dHB1dDxudW1iZXIgfCBudWxsPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJDaGFuZ2VNb250aCA9IG91dHB1dDxudW1iZXIgfCBudWxsPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJDaGFuZ2VZZWFyID0gb3V0cHV0PG51bWJlciB8IG51bGw+KCk7XHJcblxyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHREYXkgPSBvdXRwdXQ8bnVtYmVyIHwgbnVsbD4oKTtcclxuICByZWFkb25seSB0cmlnZ2VySGlnaGxpZ2h0TmV4dERheSA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzRGF5ID0gb3V0cHV0PG51bWJlcj4oKTtcclxuICByZWFkb25seSB0cmlnZ2VySGlnaGxpZ2h0Rmlyc3REYXkgPSBvdXRwdXQ8dm9pZD4oKTtcclxuICByZWFkb25seSB0cmlnZ2VySGlnaGxpZ2h0TGFzdERheSA9IG91dHB1dDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRTYW1lRGF5UHJldmlvdXNQYWdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlckhpZ2hsaWdodFNhbWVEYXlOZXh0UGFnZSA9IG91dHB1dDxib29sZWFuPigpO1xyXG5cclxuICByZWFkb25seSBmb2N1c0V2ZW50ID0gb3V0cHV0PEZvY3VzRXZlbnQ+KHsgYWxpYXM6ICdmb2N1cycgfSk7XHJcbiAgcmVhZG9ubHkgYmx1ckV2ZW50ID0gb3V0cHV0PEZvY3VzRXZlbnQ+KHsgYWxpYXM6ICdibHVyJyB9KTtcclxuXHJcbiAgb25DYWxlbmRhckRheU1vdXNlb3ZlcihkYXk6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc1VzaW5nS2V5Ym9hcmQoKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHJldHVybjtcclxuICAgIGlmIChkYXkgJiYgdGhpcy5pc0RheUZpbHRlcmVkT3V0KCkoZGF5KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodERheS5lbWl0KGRheSk7XHJcbiAgfVxyXG4gIG9uQ2FsZW5kYXJEYXlDbGljayhkYXk6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICBpZiAoZGF5ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0RheUZpbHRlcmVkT3V0KCkoZGF5KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodERheS5lbWl0KGRheSk7XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3REYXkuZW1pdChkYXkpO1xyXG4gIH1cclxuICBvbkRheUdyaWRGb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRGaXJzdERheS5lbWl0KCk7XHJcbiAgfVxyXG4gIG9uRGF5R3JpZEJsdXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMucmVhZE9ubHkoKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0RGF5LmVtaXQobnVsbCk7XHJcbiAgfVxyXG4gIG9uRGF5R3JpZENsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkRGF5KCkgIT09IG51bGwpIHJldHVybjtcclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodEZpcnN0RGF5LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8vISBoZWxwZXJzXHJcbiAgaXNEYXlUb2RheShkYXk6IG51bWJlciB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVllYXIoKSA9PT0gVE9EQVkuZ2V0RnVsbFllYXIoKSAmJiB0aGlzLmFjdGl2ZU1vbnRoKCkgPT09IFRPREFZLmdldE1vbnRoKCkgJiYgZGF5ID09PSBUT0RBWS5nZXREYXRlKCk7XHJcbiAgfVxyXG4gIGlzTW9udGhPdXRPZlJhbmdlKG1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGlzTW9udGhPdXRPZlJhbmdlKG1vbnRoLCB0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XHJcbiAgfVxyXG5cclxuICAvLyEga2V5Ym9hcmQgY29udHJvbHNcclxuICBvbk1haW5HcmlkS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHJldHVybjtcclxuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICBjYXNlICdTcGFjZSc6XHJcbiAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICB0aGlzLl9vbkVudGVyUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICB0aGlzLl9vbkFycm93VXBQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgdGhpcy5fb25BcnJvd0Rvd25QcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgdGhpcy5fb25BcnJvd0xlZnRQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgIHRoaXMuX29uQXJyb3dSaWdodFByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSG9tZSc6XHJcbiAgICAgICAgdGhpcy5fb25Ib21lUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdFbmQnOlxyXG4gICAgICAgIHRoaXMuX29uRW5kUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQYWdlVXAnOlxyXG4gICAgICAgIHRoaXMuX29uUGFnZVVwUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQYWdlRG93bic6XHJcbiAgICAgICAgdGhpcy5fb25QYWdlRG93blByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICAvL3NlbGVjdCBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcclxuICBwcml2YXRlIF9vbkVudGVyUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy50cmlnZ2VyU2VsZWN0RGF5LmVtaXQodGhpcy5oaWdobGlnaHRlZERheSgpKTtcclxuICB9XHJcbiAgLy9oaWdobGlnaHQgdGhlIGVudHJ5IG9uZSBsaW5lIGJlbG93XHJcbiAgcHJpdmF0ZSBfb25BcnJvd0Rvd25QcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHROZXh0RGF5LmVtaXQoNyk7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IHRoZSBlbnRyeSBvbmUgbGluZSBhYm92ZVxyXG4gIHByaXZhdGUgX29uQXJyb3dVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzRGF5LmVtaXQoNyk7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IG5leHQgZW50cnlcclxuICBwcml2YXRlIF9vbkFycm93UmlnaHRQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHROZXh0RGF5LmVtaXQoMSk7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IHByZXZpb3VzIGVudHJ5XHJcbiAgcHJpdmF0ZSBfb25BcnJvd0xlZnRQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRQcmV2aW91c0RheS5lbWl0KDEpO1xyXG4gIH1cclxuICAvL2hpZ2hsaWdodCBmaXJzdCBlbnRyeSBvbiB0aGUgcGFnZVxyXG4gIHByaXZhdGUgX29uSG9tZVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodEZpcnN0RGF5LmVtaXQoKTtcclxuICB9XHJcbiAgLy9oaWdobGlnaHQgbGFzdCBlbnRyeSBvbiB0aGUgcGFnZVxyXG4gIHByaXZhdGUgX29uRW5kUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0TGFzdERheS5lbWl0KCk7XHJcbiAgfVxyXG4gIC8vYWxvbmU6IGhpZ2hsaWdodCBzYW1lIGVudHJ5IG9uIHRoZSBuZXh0IHBhZ2VcclxuICAvL3dpdGggYWx0OiBoaWdobGlnaHQgc2FtZSBlbnRyeSBtdWx0aXBsZSBwYWdlcyBhZnRlciAoMTIgcGFnZXMpXHJcbiAgcHJpdmF0ZSBfb25QYWdlRG93blByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodFNhbWVEYXlOZXh0UGFnZS5lbWl0KGV2ZW50LmFsdEtleSk7XHJcbiAgfVxyXG4gIC8vYWxvbmU6IGhpZ2hsaWdodCBzYW1lIGVudHJ5IG9uIHRoZSBwcmV2aW91cyBwYWdlXHJcbiAgLy93aXRoIGFsdDogaGlnaGxpZ2h0IHNhbWUgZW50cnkgbXVsdGlwbGUgcGFnZXMgYmVmb3JlICgxMiBwYWdlcylcclxuICBwcml2YXRlIF9vblBhZ2VVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodFNhbWVEYXlQcmV2aW91c1BhZ2UuZW1pdChldmVudC5hbHRLZXkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHRlbXBsYXRlc1xyXG4gIHJlYWRvbmx5IGRheXNWaWV3SGVhZGVyVGVtcGxhdGUgPSBpbnB1dC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxDYWxlbmRhckRheXNWaWV3SGVhZGVyQ29udGV4dD4gfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgZmxvYXRpbmdNb250aFRlbXBsYXRlID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8Q2FsZW5kYXJGbG9hdGluZ01vbnRoQ29udGV4dD4gfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgd2Vla2RheVRlbXBsYXRlID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8Q2FsZW5kYXJXZWVrZGF5Q29udGV4dD4gfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgZGF5VGVtcGxhdGUgPSBpbnB1dC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxDYWxlbmRhckRheUNvbnRleHQ+IHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICAvLyEgdGVtcGxhdGUgY29udGV4dHNcclxuICByZWFkb25seSBkYXlzVmlld0hlYWRlckNvbnRleHQgPSBjb21wdXRlZDxDYWxlbmRhckRheXNWaWV3SGVhZGVyQ29udGV4dD4oKCkgPT4gKHtcclxuICAgIG5leHRNb250aDogKCkgPT4ge1xyXG4gICAgICB0aGlzLnRyaWdnZXJDaGFuZ2VNb250aC5lbWl0KHRoaXMuYWN0aXZlTW9udGgoKSArIDEpO1xyXG4gICAgfSxcclxuICAgIHByZXZNb250aDogKCkgPT4ge1xyXG4gICAgICB0aGlzLnRyaWdnZXJDaGFuZ2VNb250aC5lbWl0KHRoaXMuYWN0aXZlTW9udGgoKSAtIDEpO1xyXG4gICAgfSxcclxuICAgIG5leHRZZWFyOiAoKSA9PiB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZVllYXIuZW1pdCh0aGlzLmFjdGl2ZVllYXIoKSArIDEpO1xyXG4gICAgfSxcclxuICAgIHByZXZZZWFyOiAoKSA9PiB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZVllYXIuZW1pdCh0aGlzLmFjdGl2ZVllYXIoKSAtIDEpO1xyXG4gICAgfSxcclxuICAgIG9wZW5ZZWFyc1ZpZXc6ICgpID0+IHtcclxuICAgICAgdGhpcy50cmlnZ2VyT3BlblllYXJzVmlldy5lbWl0KCk7XHJcbiAgICB9LFxyXG4gICAgb3Blbk1vbnRoc1ZpZXc6ICgpID0+IHtcclxuICAgICAgdGhpcy50cmlnZ2VyT3Blbk1vbnRoc1ZpZXcuZW1pdCgpO1xyXG4gICAgfSxcclxuICAgIGNhbkdvVG9OZXh0UGFnZTogIXRoaXMuaXNNb250aE91dE9mUmFuZ2UodGhpcy5hY3RpdmVNb250aCgpICsgMSksXHJcbiAgICBjYW5Hb1RvUHJldmlvdXNQYWdlOiAhdGhpcy5pc01vbnRoT3V0T2ZSYW5nZSh0aGlzLmFjdGl2ZU1vbnRoKCkgLSAxKSxcclxuICAgIHllYXI6IHRoaXMuYWN0aXZlWWVhcigpLFxyXG4gICAgbW9udGg6IHRoaXMuYWN0aXZlTW9udGgoKSxcclxuICAgICRpbXBsaWNpdDogbmV3IERhdGUodGhpcy5hY3RpdmVZZWFyKCksIHRoaXMuYWN0aXZlTW9udGgoKSwgMSwgMCwgMCwgMCwgMCksXHJcbiAgfSkpO1xyXG5cclxuICByZWFkb25seSB3ZWVrZGF5Q29udGV4dCA9IGNvbXB1dGVkPChkYXlJbmRleDogbnVtYmVyKSA9PiBDYWxlbmRhcldlZWtkYXlDb250ZXh0PigoKSA9PiAoZGF5SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDE5NzAsIDAsIDQgKyBkYXlJbmRleCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXlJbmRleCxcclxuICAgICAgZGF0ZSxcclxuICAgICAgJGltcGxpY2l0OiBkYXRlLFxyXG4gICAgfTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgZmxvYXRpbmdNb250aENvbnRleHQgPSBjb21wdXRlZDxDYWxlbmRhckZsb2F0aW5nTW9udGhDb250ZXh0PigoKSA9PiB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVZZWFyKCksIHRoaXMuYWN0aXZlTW9udGgoKSwgMSwgMCwgMCwgMCwgMCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtb250aDogdGhpcy5hY3RpdmVNb250aCgpLFxyXG4gICAgICBkYXRlLFxyXG4gICAgICAkaW1wbGljaXQ6IGRhdGUsXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBkYXlDb250ZXh0ID0gY29tcHV0ZWQ8KGRheTogbnVtYmVyKSA9PiBDYWxlbmRhckRheUNvbnRleHQ+KCgpID0+IChkYXk6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlWWVhcigpLCB0aGlzLmFjdGl2ZU1vbnRoKCksIGRheSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB2YWx1ZTogZGF5LFxyXG4gICAgICBkYXRlLFxyXG4gICAgICAkaW1wbGljaXQ6IGRheSxcclxuICAgICAgc2VsZWN0OiAoZGF5T3JEYXRlOiBudW1iZXIgfCBEYXRlKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyU2VsZWN0RGF5LmVtaXQoZGF5T3JEYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGRheU9yRGF0ZS5nZXREYXRlKCkgOiBkYXlPckRhdGUpO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9KTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXJkLWRheXMtdmlld1wiPlxyXG4gIEBpZiAoIXJlYWRPbmx5KCkpIHtcclxuICA8ZGl2IGNsYXNzPVwiYXJkLWNhbGVuZGFyX190b3AtdG9vbGJhclwiPlxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICNkZWZhdWx0RGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZVxyXG4gICAgICBsZXQtY3VyckRhdGVcclxuICAgICAgbGV0LW5leHRNb250aD1cIm5leHRNb250aFwiXHJcbiAgICAgIGxldC1wcmV2TW9udGg9XCJwcmV2TW9udGhcIlxyXG4gICAgICBsZXQtY2FuR29Ub05leHRNb250aD1cImNhbkdvVG9OZXh0UGFnZVwiXHJcbiAgICAgIGxldC1jYW5Hb1RvUHJldmlvdXNNb250aD1cImNhbkdvVG9QcmV2aW91c1BhZ2VcIlxyXG4gICAgICBsZXQtb3BlblllYXJzVmlldz1cIm9wZW5ZZWFyc1ZpZXdcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXJkLWNhbGVuZGFyX19jYWxlbmRhci1oZWFkZXJcIj5cclxuICAgICAgICA8YXJkLWJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX2hlYWRlci1idXR0b25cIlxyXG4gICAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgIGNvbG9yPVwibm9uZVwiXHJcbiAgICAgICAgICB2YXJpYW50PVwicGlsbFwiXHJcbiAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblllYXJzVmlldygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBjdXJyRGF0ZSB8IGRhdGUgOiAnTU1NIFlZWVknIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWRyb3Bkb3duLWFycm93XCI+PC9kaXY+XHJcbiAgICAgICAgPC9hcmQtYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX2Fycm93c1wiPlxyXG4gICAgICAgICAgPGFyZC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cIm5vbmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldk1vbnRoKClcIlxyXG4gICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29Ub1ByZXZpb3VzTW9udGhcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YXJkLWljb24+Y2hldnJvbl9sZWZ0PC9hcmQtaWNvbj5cclxuICAgICAgICAgIDwvYXJkLWljb24tYnV0dG9uPlxyXG4gICAgICAgICAgPGFyZC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cIm5vbmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIlxyXG4gICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29Ub05leHRNb250aFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhcmQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9hcmQtaWNvbj5cclxuICAgICAgICAgIDwvYXJkLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRheXNWaWV3SGVhZGVyVGVtcGxhdGUoKSB8fCBkZWZhdWx0RGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZVwiXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJkYXlzVmlld0hlYWRlckNvbnRleHQoKVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuICA8ZGl2IGNsYXNzPVwiYXJkLWNhbGVuZGFyX193ZWVrZGF5c1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICNkZWZhdWx0V2Vla2RheVRlbXBsYXRlXHJcbiAgICAgIGxldC1kYXRlXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX3dlZWtkYXlcIj57eyBkYXRlIHwgZGF0ZSA6ICdFRUVFRScgfX08L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBAZm9yICh3ZWVrZGF5SW5kZXggb2Ygd2Vla2RheUFycmF5KCk7IHRyYWNrIHdlZWtkYXlJbmRleCkge1xyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndlZWtkYXlUZW1wbGF0ZSgpIHx8IGRlZmF1bHRXZWVrZGF5VGVtcGxhdGVcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwid2Vla2RheUNvbnRleHQoKSh3ZWVrZGF5SW5kZXgpXCJcclxuICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgICNmb2N1c2FibGVFbGVtZW50XHJcbiAgICBjbGFzcz1cImFyZC1jYWxlbmRhcl9fZGF5cy1ncmlkXCJcclxuICAgIFtjbGFzcy5hcmQtcmVzZXJ2ZS10b3Atcm93XT1cInJlc2VydmVUb3BSb3coKVwiXHJcbiAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICBbYXJpYUxhYmVsXT1cImN1cnJlbnRBcmlhTGFiZWwoKVwiXHJcbiAgICAoZm9jdXMpPVwiZm9jdXNFdmVudC5lbWl0KCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRGF5R3JpZEZvY3VzKClcIlxyXG4gICAgKGJsdXIpPVwiYmx1ckV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJvbkRheUdyaWRCbHVyKClcIlxyXG4gICAgKGNsaWNrKT1cIm9uRGF5R3JpZENsaWNrKClcIlxyXG4gICAgKGtleWRvd24pPVwib25NYWluR3JpZEtleWRvd24oJGV2ZW50KVwiXHJcbiAgICByb2xlPVwiZ3JpZFwiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImFyZC1jYWxlbmRhcl9fZmxvYXRpbmctbW9udGhcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgI2RlZmF1bHRGbG9hdGluZ01vbnRoVGVtcGxhdGVcclxuICAgICAgICBsZXQtZGF0ZVxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZGF0ZSB8IGRhdGUgOiAnTExMJyB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmxvYXRpbmdNb250aFRlbXBsYXRlKCkgfHwgZGVmYXVsdEZsb2F0aW5nTW9udGhUZW1wbGF0ZVwiXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImZsb2F0aW5nTW9udGhDb250ZXh0KClcIlxyXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgQGZvciAod2VlayBvZiBhY3RpdmVDYWxlbmRhckRhdGEoKS5hcnJheTsgdHJhY2sgJGluZGV4KSB7IEBmb3IgKGRheSBvZiB3ZWVrOyB0cmFjayBkYXkgPyBkYXkgOlxyXG4gICAgYWN0aXZlQ2FsZW5kYXJEYXRhKCkubGVhZGluZ1NwYWNlcyAtICRpbmRleCkgeyBAaWYgKGRheSA9PT0gbnVsbCkge1xyXG4gICAgPGRpdiBjbGFzcz1cImFyZC1jYWxlbmRhcl9fZW50cnkgYXJkLWNhbGVuZGFyX19lbnRyeS1lbXB0eVwiPjwvZGl2PlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYXJkLWNhbGVuZGFyX19lbnRyeVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXJfX2VudHJ5LWhpZ2hsaWdodGVkXT1cImhpZ2hsaWdodGVkRGF5KCkgPT09IGRheS52YWx1ZVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXJfX2VudHJ5LWRpc2FibGVkXT1cImRheS5kaXNhYmxlZCB8fCBpc0RheUZpbHRlcmVkT3V0KCkoZGF5LnZhbHVlKVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXJfX2VudHJ5LXNlbGVjdGVkXT1cImlzRGF5U2VsZWN0ZWQoZGF5LnZhbHVlKVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXItdG9kYXldPVwiaXNEYXlUb2RheShkYXkudmFsdWUpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2FsZW5kYXJEYXlDbGljayhkYXkudmFsdWUpXCJcclxuICAgICAgKG1vdXNlbW92ZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAobW91c2VvdmVyKT1cIm9uQ2FsZW5kYXJEYXlNb3VzZW92ZXIoZGF5LnZhbHVlKVwiXHJcbiAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX2VudHJ5LWJ1dHRvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZm9jdXMtb3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtYnV0dG9uLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAjZGVmYXVsdERheVRlbXBsYXRlXHJcbiAgICAgICAgICAgIGxldC1kYXlcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZGF5IH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRheVRlbXBsYXRlKCkgfHwgZGVmYXVsdERheVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImRheUNvbnRleHQoKShkYXkudmFsdWUpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9IH0gfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,65 @@
1
+ import { isDefined } from 'simple-bool';
2
+ /**
3
+ * Generates a layout array to be used to create a calendar page for the given year and month.
4
+ *
5
+ * The returned object contains an array to create the layout from, the number of leading and trailing spaces in the layout, and the number of weeks (full or not) in the month.
6
+ * @param year The year of the current active view
7
+ * @param monthIndex The month index of the current active view
8
+ * @param firstWeekday The index of the first weekday in the calendar layout. Starts at Sunday (index 0), ends with Saturday (index 6). Defaults to 1.
9
+ * @returns A {@link CalendarData} object.
10
+ */
11
+ export function getCalendarDayData(year, monthIndex, firstWeekday = 1, min, max) {
12
+ firstWeekday %= 7;
13
+ const firstDayDate = new Date(year, monthIndex, 1);
14
+ const firstDayWeekday = (firstDayDate.getDay() - firstWeekday + 7) % 7;
15
+ const lastDayDate = new Date(firstDayDate);
16
+ lastDayDate.setMonth(firstDayDate.getMonth() + 1); // advance the month by 1
17
+ lastDayDate.setDate(0); // set the date to 0, which essentially means "the last day of the previous month"
18
+ const lastDay = lastDayDate.getDate();
19
+ const calendarArray = [];
20
+ let currentDay = firstDayWeekday * -1; // how many empty spaces to add
21
+ let trailingSpaces = 0;
22
+ let totalWeeks = NaN;
23
+ for (let week = 0; week < 6; week++) {
24
+ const currentWeek = [];
25
+ // add days for the whole week
26
+ for (let weekday = 0; weekday < 7; weekday++) {
27
+ currentDay++;
28
+ // add empty space before the first day of the month
29
+ if (currentDay < 1 || currentDay > lastDay) {
30
+ currentWeek.push(null);
31
+ trailingSpaces++;
32
+ continue;
33
+ }
34
+ // add the day number
35
+ currentWeek.push({
36
+ value: currentDay,
37
+ disabled: !!isDayOutOfRange(currentDay, monthIndex, year, min, max),
38
+ });
39
+ }
40
+ calendarArray.push(currentWeek);
41
+ if (currentDay > lastDay) {
42
+ totalWeeks = week + 1;
43
+ break;
44
+ }
45
+ }
46
+ trailingSpaces -= firstDayWeekday;
47
+ return {
48
+ array: calendarArray,
49
+ leadingSpaces: firstDayWeekday,
50
+ trailingSpaces,
51
+ weeks: totalWeeks,
52
+ };
53
+ }
54
+ export function getCalendarWeekdayArray(firstWeekday = 1) {
55
+ return [0, 1, 2, 3, 4, 5, 6].map(v => (v + firstWeekday) % 7);
56
+ }
57
+ export function isDayOutOfRange(day, month, year, min, max) {
58
+ const date = new Date(year, month, day);
59
+ if (isDefined(min) && date < min)
60
+ return -1;
61
+ if (isDefined(max) && date > max)
62
+ return 1;
63
+ return 0;
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cy12aWV3LmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL3ZpZXdzL2RheXMtdmlldy9kYXlzLXZpZXcuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBWXhDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxJQUFZLEVBQ1osVUFBa0IsRUFDbEIsWUFBWSxHQUFHLENBQUMsRUFDaEIsR0FBZ0IsRUFDaEIsR0FBZ0I7SUFFaEIsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUVsQixNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7SUFDNUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtGQUFrRjtJQUMxRyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFdEMsTUFBTSxhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUN4QyxJQUFJLFVBQVUsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7SUFDdEUsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUVyQixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQWlDLEVBQUUsQ0FBQztRQUNyRCw4QkFBOEI7UUFDOUIsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzdDLFVBQVUsRUFBRSxDQUFDO1lBQ2Isb0RBQW9EO1lBQ3BELElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQzNDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixTQUFTO1lBQ1gsQ0FBQztZQUNELHFCQUFxQjtZQUNyQixXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNmLEtBQUssRUFBRSxVQUFVO2dCQUNqQixRQUFRLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO2FBQ3BFLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksVUFBVSxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE1BQU07UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUNELGNBQWMsSUFBSSxlQUFlLENBQUM7SUFFbEMsT0FBTztRQUNMLEtBQUssRUFBRSxhQUFhO1FBQ3BCLGFBQWEsRUFBRSxlQUFlO1FBQzlCLGNBQWM7UUFDZCxLQUFLLEVBQUUsVUFBVTtLQUNsQixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxZQUFZLEdBQUcsQ0FBQztJQUN0RCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxJQUFZLEVBQUUsR0FBZ0IsRUFBRSxHQUFnQjtJQUMxRyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1QyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJ3NpbXBsZS1ib29sJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJBcnJheUl0ZW0gfSBmcm9tICcuLi8uLi9jYWxlbmRhci5pbnRlcm5hbC10eXBlcyc7XHJcblxyXG5leHBvcnQgdHlwZSBDYWxlbmRhckFycmF5ID0gKENhbGVuZGFyQXJyYXlJdGVtIHwgbnVsbClbXVtdO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckRhdGEge1xyXG4gIGFycmF5OiBDYWxlbmRhckFycmF5O1xyXG4gIGxlYWRpbmdTcGFjZXM6IG51bWJlcjtcclxuICB0cmFpbGluZ1NwYWNlczogbnVtYmVyO1xyXG4gIHdlZWtzOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsYXlvdXQgYXJyYXkgdG8gYmUgdXNlZCB0byBjcmVhdGUgYSBjYWxlbmRhciBwYWdlIGZvciB0aGUgZ2l2ZW4geWVhciBhbmQgbW9udGguXHJcbiAqXHJcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgY29udGFpbnMgYW4gYXJyYXkgdG8gY3JlYXRlIHRoZSBsYXlvdXQgZnJvbSwgdGhlIG51bWJlciBvZiBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGhlIGxheW91dCwgYW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgKGZ1bGwgb3Igbm90KSBpbiB0aGUgbW9udGguXHJcbiAqIEBwYXJhbSB5ZWFyIFRoZSB5ZWFyIG9mIHRoZSBjdXJyZW50IGFjdGl2ZSB2aWV3XHJcbiAqIEBwYXJhbSBtb250aEluZGV4IFRoZSBtb250aCBpbmRleCBvZiB0aGUgY3VycmVudCBhY3RpdmUgdmlld1xyXG4gKiBAcGFyYW0gZmlyc3RXZWVrZGF5IFRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgd2Vla2RheSBpbiB0aGUgY2FsZW5kYXIgbGF5b3V0LiBTdGFydHMgYXQgU3VuZGF5IChpbmRleCAwKSwgZW5kcyB3aXRoIFNhdHVyZGF5IChpbmRleCA2KS4gRGVmYXVsdHMgdG8gMS5cclxuICogQHJldHVybnMgQSB7QGxpbmsgQ2FsZW5kYXJEYXRhfSBvYmplY3QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJEYXlEYXRhKFxyXG4gIHllYXI6IG51bWJlcixcclxuICBtb250aEluZGV4OiBudW1iZXIsXHJcbiAgZmlyc3RXZWVrZGF5ID0gMSxcclxuICBtaW46IERhdGUgfCBudWxsLFxyXG4gIG1heDogRGF0ZSB8IG51bGxcclxuKTogQ2FsZW5kYXJEYXRhIHtcclxuICBmaXJzdFdlZWtkYXkgJT0gNztcclxuXHJcbiAgY29uc3QgZmlyc3REYXlEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgMSk7XHJcbiAgY29uc3QgZmlyc3REYXlXZWVrZGF5ID0gKGZpcnN0RGF5RGF0ZS5nZXREYXkoKSAtIGZpcnN0V2Vla2RheSArIDcpICUgNztcclxuXHJcbiAgY29uc3QgbGFzdERheURhdGUgPSBuZXcgRGF0ZShmaXJzdERheURhdGUpO1xyXG4gIGxhc3REYXlEYXRlLnNldE1vbnRoKGZpcnN0RGF5RGF0ZS5nZXRNb250aCgpICsgMSk7IC8vIGFkdmFuY2UgdGhlIG1vbnRoIGJ5IDFcclxuICBsYXN0RGF5RGF0ZS5zZXREYXRlKDApOyAvLyBzZXQgdGhlIGRhdGUgdG8gMCwgd2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgXCJ0aGUgbGFzdCBkYXkgb2YgdGhlIHByZXZpb3VzIG1vbnRoXCJcclxuICBjb25zdCBsYXN0RGF5ID0gbGFzdERheURhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICBjb25zdCBjYWxlbmRhckFycmF5OiBDYWxlbmRhckFycmF5ID0gW107XHJcbiAgbGV0IGN1cnJlbnREYXkgPSBmaXJzdERheVdlZWtkYXkgKiAtMTsgLy8gaG93IG1hbnkgZW1wdHkgc3BhY2VzIHRvIGFkZFxyXG4gIGxldCB0cmFpbGluZ1NwYWNlcyA9IDA7XHJcbiAgbGV0IHRvdGFsV2Vla3MgPSBOYU47XHJcblxyXG4gIGZvciAobGV0IHdlZWsgPSAwOyB3ZWVrIDwgNjsgd2VlaysrKSB7XHJcbiAgICBjb25zdCBjdXJyZW50V2VlazogKENhbGVuZGFyQXJyYXlJdGVtIHwgbnVsbClbXSA9IFtdO1xyXG4gICAgLy8gYWRkIGRheXMgZm9yIHRoZSB3aG9sZSB3ZWVrXHJcbiAgICBmb3IgKGxldCB3ZWVrZGF5ID0gMDsgd2Vla2RheSA8IDc7IHdlZWtkYXkrKykge1xyXG4gICAgICBjdXJyZW50RGF5Kys7XHJcbiAgICAgIC8vIGFkZCBlbXB0eSBzcGFjZSBiZWZvcmUgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcclxuICAgICAgaWYgKGN1cnJlbnREYXkgPCAxIHx8IGN1cnJlbnREYXkgPiBsYXN0RGF5KSB7XHJcbiAgICAgICAgY3VycmVudFdlZWsucHVzaChudWxsKTtcclxuICAgICAgICB0cmFpbGluZ1NwYWNlcysrO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGFkZCB0aGUgZGF5IG51bWJlclxyXG4gICAgICBjdXJyZW50V2Vlay5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogY3VycmVudERheSxcclxuICAgICAgICBkaXNhYmxlZDogISFpc0RheU91dE9mUmFuZ2UoY3VycmVudERheSwgbW9udGhJbmRleCwgeWVhciwgbWluLCBtYXgpLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhbGVuZGFyQXJyYXkucHVzaChjdXJyZW50V2Vlayk7XHJcbiAgICBpZiAoY3VycmVudERheSA+IGxhc3REYXkpIHtcclxuICAgICAgdG90YWxXZWVrcyA9IHdlZWsgKyAxO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgdHJhaWxpbmdTcGFjZXMgLT0gZmlyc3REYXlXZWVrZGF5O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgYXJyYXk6IGNhbGVuZGFyQXJyYXksXHJcbiAgICBsZWFkaW5nU3BhY2VzOiBmaXJzdERheVdlZWtkYXksXHJcbiAgICB0cmFpbGluZ1NwYWNlcyxcclxuICAgIHdlZWtzOiB0b3RhbFdlZWtzLFxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWxlbmRhcldlZWtkYXlBcnJheShmaXJzdFdlZWtkYXkgPSAxKTogbnVtYmVyW10ge1xyXG4gIHJldHVybiBbMCwgMSwgMiwgMywgNCwgNSwgNl0ubWFwKHYgPT4gKHYgKyBmaXJzdFdlZWtkYXkpICUgNyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RheU91dE9mUmFuZ2UoZGF5OiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlciwgbWluOiBEYXRlIHwgbnVsbCwgbWF4OiBEYXRlIHwgbnVsbCk6IG51bWJlciB7XHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG4gIGlmIChpc0RlZmluZWQobWluKSAmJiBkYXRlIDwgbWluKSByZXR1cm4gLTE7XHJcbiAgaWYgKGlzRGVmaW5lZChtYXgpICYmIGRhdGUgPiBtYXgpIHJldHVybiAxO1xyXG4gIHJldHVybiAwO1xyXG59XHJcbiJdfQ==