@acpaas-ui/ngx-calendar 5.2.1 → 6.0.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/README.md +8 -8
  2. package/esm2020/acpaas-ui-ngx-calendar.mjs +5 -0
  3. package/esm2020/lib/calendar.conf.mjs +27 -0
  4. package/esm2020/lib/calendar.module.mjs +66 -0
  5. package/esm2020/lib/components/calendar/calendar.component.mjs +214 -0
  6. package/esm2020/lib/components/decennia/decennia.component.mjs +85 -0
  7. package/esm2020/lib/components/month/month.component.mjs +158 -0
  8. package/esm2020/lib/components/year/year.component.mjs +84 -0
  9. package/esm2020/lib/services/calendar.service.mjs +56 -0
  10. package/esm2020/lib/types/calendar.types.mjs +4 -0
  11. package/esm2020/public-api.mjs +9 -0
  12. package/fesm2015/acpaas-ui-ngx-calendar.mjs +728 -0
  13. package/fesm2015/acpaas-ui-ngx-calendar.mjs.map +1 -0
  14. package/fesm2020/acpaas-ui-ngx-calendar.mjs +667 -0
  15. package/fesm2020/acpaas-ui-ngx-calendar.mjs.map +1 -0
  16. package/{acpaas-ui-ngx-calendar.d.ts → index.d.ts} +1 -0
  17. package/lib/calendar.conf.d.ts +3 -2
  18. package/lib/calendar.module.d.ts +11 -1
  19. package/lib/components/calendar/calendar.component.d.ts +4 -1
  20. package/lib/components/decennia/decennia.component.d.ts +3 -0
  21. package/lib/components/month/month.component.d.ts +4 -1
  22. package/lib/components/year/year.component.d.ts +3 -0
  23. package/lib/services/calendar.service.d.ts +4 -1
  24. package/lib/types/calendar.types.d.ts +2 -2
  25. package/package.json +32 -19
  26. package/CHANGELOG.md +0 -291
  27. package/acpaas-ui-ngx-calendar.metadata.json +0 -1
  28. package/bundles/acpaas-ui-ngx-calendar.umd.js +0 -1181
  29. package/bundles/acpaas-ui-ngx-calendar.umd.js.map +0 -1
  30. package/bundles/acpaas-ui-ngx-calendar.umd.min.js +0 -16
  31. package/bundles/acpaas-ui-ngx-calendar.umd.min.js.map +0 -1
  32. package/esm2015/acpaas-ui-ngx-calendar.js +0 -10
  33. package/esm2015/lib/calendar.conf.js +0 -36
  34. package/esm2015/lib/calendar.module.js +0 -59
  35. package/esm2015/lib/components/calendar/calendar.component.js +0 -238
  36. package/esm2015/lib/components/decennia/decennia.component.js +0 -96
  37. package/esm2015/lib/components/month/month.component.js +0 -201
  38. package/esm2015/lib/components/year/year.component.js +0 -90
  39. package/esm2015/lib/services/calendar.service.js +0 -101
  40. package/esm2015/lib/types/calendar.types.js +0 -34
  41. package/esm2015/public-api.js +0 -14
  42. package/esm5/acpaas-ui-ngx-calendar.js +0 -10
  43. package/esm5/lib/calendar.conf.js +0 -36
  44. package/esm5/lib/calendar.module.js +0 -68
  45. package/esm5/lib/components/calendar/calendar.component.js +0 -265
  46. package/esm5/lib/components/decennia/decennia.component.js +0 -114
  47. package/esm5/lib/components/month/month.component.js +0 -230
  48. package/esm5/lib/components/year/year.component.js +0 -99
  49. package/esm5/lib/services/calendar.service.js +0 -129
  50. package/esm5/lib/types/calendar.types.js +0 -34
  51. package/esm5/public-api.js +0 -14
  52. package/fesm2015/acpaas-ui-ngx-calendar.js +0 -846
  53. package/fesm2015/acpaas-ui-ngx-calendar.js.map +0 -1
  54. package/fesm5/acpaas-ui-ngx-calendar.js +0 -959
  55. package/fesm5/acpaas-ui-ngx-calendar.js.map +0 -1
package/README.md CHANGED
@@ -14,13 +14,13 @@ Visit our [documentation site](https://antwerp-ui.digipolis.be/) for full how-to
14
14
 
15
15
  ### API
16
16
 
17
- | Name | Default value | Description |
18
- | ----------- | ------ | -------------------------- |
19
- | `@Input() selectedDate: Date;` | - | The date the user selected. Will be used as a base for the different calendar views. |
20
- | `@Input() range: DateRange;` | - | A date range to decide which dates are available for selection. |
21
- | `@Input() weekdayLabels: WeekdayLabelsConfig;` | - | Override the default weekday labels. Can also be done in the `forChild` method. |
22
- | `@Input() monthLabels: MonthLabelsConfig;` | - | Override the default month labels. Can also be done in the `forChild` method. |
23
- | `@Output() selectDate: EventEmitter<any>` | - | Will emit the selected date and completion state (the date is complete when a day is picked). |
17
+ | Name | Default value | Description |
18
+ | ---------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------- |
19
+ | `@Input() selectedDate: Date;` | - | The date the user selected. Will be used as a base for the different calendar views. |
20
+ | `@Input() range: DateRange;` | - | A date range to decide which dates are available for selection. |
21
+ | `@Input() weekdayLabels: WeekdayLabelsConfig;` | - | Override the default weekday labels. Can also be done in the `forChild` method. |
22
+ | `@Input() monthLabels: MonthLabelsConfig;` | - | Override the default month labels. Can also be done in the `forChild` method. |
23
+ | `@Output() selectDate: EventEmitter<any>` | - | Will emit the selected date and completion state (the date is complete when a day is picked). |
24
24
 
25
25
  ### Example
26
26
 
@@ -41,7 +41,7 @@ export class AppModule {};
41
41
  ```
42
42
 
43
43
  ```
44
- import { DateRange } from '@acpaas-ui/js-date-utils';
44
+ import { DateRange } from '@acpaas-ui/ngx-utils';
45
45
 
46
46
  public clickedDate: Date = new Date();
47
47
  public range: DateRange = [1, 6];
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNwYWFzLXVpLW5neC1jYWxlbmRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3BhYXMtdWktbmd4LWNhbGVuZGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const CALENDAR_DEFAULT_WEEKDAY_LABELS = [
3
+ 'Maandag',
4
+ 'Dinsdag',
5
+ 'Woensdag',
6
+ 'Donderdag',
7
+ 'Vrijdag',
8
+ 'Zaterdag',
9
+ 'Zondag',
10
+ ];
11
+ export const CALENDAR_DEFAULT_MONTH_LABELS = [
12
+ 'Januari',
13
+ 'Februari',
14
+ 'Maart',
15
+ 'April',
16
+ 'Mei',
17
+ 'Juni',
18
+ 'Juli',
19
+ 'Augustus',
20
+ 'September',
21
+ 'Oktober',
22
+ 'November',
23
+ 'December',
24
+ ];
25
+ export const CALENDAR_WEEKDAY_LABELS = new InjectionToken('weekdayLabels');
26
+ export const CALENDAR_MONTH_LABELS = new InjectionToken('monthLabels');
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29uZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY2FsZW5kYXIuY29uZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHO0lBQzdDLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFdBQVc7SUFDWCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFFBQVE7Q0FDVCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsU0FBUztJQUNULFVBQVU7SUFDVixPQUFPO0lBQ1AsT0FBTztJQUNQLEtBQUs7SUFDTCxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixXQUFXO0lBQ1gsU0FBUztJQUNULFVBQVU7SUFDVixVQUFVO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUFzQixlQUFlLENBQUMsQ0FBQztBQUNoRyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9udGhMYWJlbHNDb25maWcsIFdlZWtkYXlMYWJlbHNDb25maWcgfSBmcm9tICcuL3R5cGVzL2NhbGVuZGFyLnR5cGVzJztcblxuZXhwb3J0IGNvbnN0IENBTEVOREFSX0RFRkFVTFRfV0VFS0RBWV9MQUJFTFMgPSBbXG4gICdNYWFuZGFnJyxcbiAgJ0RpbnNkYWcnLFxuICAnV29lbnNkYWcnLFxuICAnRG9uZGVyZGFnJyxcbiAgJ1ZyaWpkYWcnLFxuICAnWmF0ZXJkYWcnLFxuICAnWm9uZGFnJyxcbl07XG5cbmV4cG9ydCBjb25zdCBDQUxFTkRBUl9ERUZBVUxUX01PTlRIX0xBQkVMUyA9IFtcbiAgJ0phbnVhcmknLFxuICAnRmVicnVhcmknLFxuICAnTWFhcnQnLFxuICAnQXByaWwnLFxuICAnTWVpJyxcbiAgJ0p1bmknLFxuICAnSnVsaScsXG4gICdBdWd1c3R1cycsXG4gICdTZXB0ZW1iZXInLFxuICAnT2t0b2JlcicsXG4gICdOb3ZlbWJlcicsXG4gICdEZWNlbWJlcicsXG5dO1xuXG5leHBvcnQgY29uc3QgQ0FMRU5EQVJfV0VFS0RBWV9MQUJFTFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48V2Vla2RheUxhYmVsc0NvbmZpZz4oJ3dlZWtkYXlMYWJlbHMnKTtcbmV4cG9ydCBjb25zdCBDQUxFTkRBUl9NT05USF9MQUJFTFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TW9udGhMYWJlbHNDb25maWc+KCdtb250aExhYmVscycpO1xuIl19
@@ -0,0 +1,66 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { IconModule } from '@acpaas-ui/ngx-icon';
4
+ import { CALENDAR_DEFAULT_MONTH_LABELS, CALENDAR_DEFAULT_WEEKDAY_LABELS, CALENDAR_MONTH_LABELS, CALENDAR_WEEKDAY_LABELS, } from './calendar.conf';
5
+ import { CalendarService } from './services/calendar.service';
6
+ import { CalendarComponent } from './components/calendar/calendar.component';
7
+ import { CalendarDecenniaComponent } from './components/decennia/decennia.component';
8
+ import { CalendarMonthComponent } from './components/month/month.component';
9
+ import { CalendarYearComponent } from './components/year/year.component';
10
+ import * as i0 from "@angular/core";
11
+ export class CalendarModule {
12
+ static forChild(weekdayLabels, monthLabels) {
13
+ return {
14
+ ngModule: CalendarModule,
15
+ providers: [
16
+ CalendarService,
17
+ { provide: CALENDAR_WEEKDAY_LABELS, useValue: weekdayLabels },
18
+ { provide: CALENDAR_MONTH_LABELS, useValue: monthLabels },
19
+ ],
20
+ };
21
+ }
22
+ }
23
+ /** @nocollapse */ CalendarModule.ɵfac = function CalendarModule_Factory(t) { return new (t || CalendarModule)(); };
24
+ /** @nocollapse */ CalendarModule.ɵmod = /** @pureOrBreakMyCode */ i0.ɵɵdefineNgModule({ type: CalendarModule });
25
+ /** @nocollapse */ CalendarModule.ɵinj = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjector({ providers: [
26
+ CalendarService,
27
+ {
28
+ provide: CALENDAR_WEEKDAY_LABELS,
29
+ useValue: CALENDAR_DEFAULT_WEEKDAY_LABELS,
30
+ },
31
+ { provide: CALENDAR_MONTH_LABELS, useValue: CALENDAR_DEFAULT_MONTH_LABELS },
32
+ ], imports: [CommonModule, IconModule] });
33
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CalendarModule, [{
34
+ type: NgModule,
35
+ args: [{
36
+ imports: [CommonModule, IconModule],
37
+ declarations: [
38
+ CalendarComponent,
39
+ CalendarDecenniaComponent,
40
+ CalendarMonthComponent,
41
+ CalendarYearComponent,
42
+ ],
43
+ exports: [
44
+ CalendarComponent,
45
+ CalendarDecenniaComponent,
46
+ CalendarMonthComponent,
47
+ CalendarYearComponent,
48
+ ],
49
+ providers: [
50
+ CalendarService,
51
+ {
52
+ provide: CALENDAR_WEEKDAY_LABELS,
53
+ useValue: CALENDAR_DEFAULT_WEEKDAY_LABELS,
54
+ },
55
+ { provide: CALENDAR_MONTH_LABELS, useValue: CALENDAR_DEFAULT_MONTH_LABELS },
56
+ ],
57
+ }]
58
+ }], null, null); })();
59
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CalendarModule, { declarations: [CalendarComponent,
60
+ CalendarDecenniaComponent,
61
+ CalendarMonthComponent,
62
+ CalendarYearComponent], imports: [CommonModule, IconModule], exports: [CalendarComponent,
63
+ CalendarDecenniaComponent,
64
+ CalendarMonthComponent,
65
+ CalendarYearComponent] }); })();
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jYWxlbmRhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIsdUJBQXVCLEdBQ3hCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXlCekUsTUFBTSxPQUFPLGNBQWM7SUFDekIsTUFBTSxDQUFDLFFBQVEsQ0FDYixhQUFrQyxFQUNsQyxXQUE4QjtRQUU5QixPQUFPO1lBQ0wsUUFBUSxFQUFFLGNBQWM7WUFDeEIsU0FBUyxFQUFFO2dCQUNULGVBQWU7Z0JBQ2YsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtnQkFDN0QsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTthQUMxRDtTQUNGLENBQUM7SUFDSixDQUFDOzsrRkFiVSxjQUFjOytGQUFkLGNBQWM7b0dBVGQ7UUFDVCxlQUFlO1FBQ2Y7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFFBQVEsRUFBRSwrQkFBK0I7U0FDMUM7UUFDRCxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLEVBQUU7S0FDNUUsWUFwQlMsWUFBWSxFQUFFLFVBQVU7dUZBc0J2QixjQUFjO2NBdkIxQixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztnQkFDbkMsWUFBWSxFQUFFO29CQUNaLGlCQUFpQjtvQkFDakIseUJBQXlCO29CQUN6QixzQkFBc0I7b0JBQ3RCLHFCQUFxQjtpQkFDdEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLGlCQUFpQjtvQkFDakIseUJBQXlCO29CQUN6QixzQkFBc0I7b0JBQ3RCLHFCQUFxQjtpQkFDdEI7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGVBQWU7b0JBQ2Y7d0JBQ0UsT0FBTyxFQUFFLHVCQUF1Qjt3QkFDaEMsUUFBUSxFQUFFLCtCQUErQjtxQkFDMUM7b0JBQ0QsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUFFO2lCQUM1RTthQUNGOzt3RkFDWSxjQUFjLG1CQXBCdkIsaUJBQWlCO1FBQ2pCLHlCQUF5QjtRQUN6QixzQkFBc0I7UUFDdEIscUJBQXFCLGFBTGIsWUFBWSxFQUFFLFVBQVUsYUFRaEMsaUJBQWlCO1FBQ2pCLHlCQUF5QjtRQUN6QixzQkFBc0I7UUFDdEIscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnQGFjcGFhcy11aS9uZ3gtaWNvbic7XG5pbXBvcnQge1xuICBDQUxFTkRBUl9ERUZBVUxUX01PTlRIX0xBQkVMUyxcbiAgQ0FMRU5EQVJfREVGQVVMVF9XRUVLREFZX0xBQkVMUyxcbiAgQ0FMRU5EQVJfTU9OVEhfTEFCRUxTLFxuICBDQUxFTkRBUl9XRUVLREFZX0xBQkVMUyxcbn0gZnJvbSAnLi9jYWxlbmRhci5jb25mJztcbmltcG9ydCB7IE1vbnRoTGFiZWxzQ29uZmlnLCBXZWVrZGF5TGFiZWxzQ29uZmlnIH0gZnJvbSAnLi90eXBlcy9jYWxlbmRhci50eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGVjZW5uaWFDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGVjZW5uaWEvZGVjZW5uaWEuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyTW9udGhDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbW9udGgvbW9udGguY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy95ZWFyL3llYXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIENhbGVuZGFyRGVjZW5uaWFDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJNb250aENvbXBvbmVudCxcbiAgICBDYWxlbmRhclllYXJDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBDYWxlbmRhckRlY2VubmlhQ29tcG9uZW50LFxuICAgIENhbGVuZGFyTW9udGhDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJZZWFyQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBDYWxlbmRhclNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogQ0FMRU5EQVJfV0VFS0RBWV9MQUJFTFMsXG4gICAgICB1c2VWYWx1ZTogQ0FMRU5EQVJfREVGQVVMVF9XRUVLREFZX0xBQkVMUyxcbiAgICB9LFxuICAgIHsgcHJvdmlkZTogQ0FMRU5EQVJfTU9OVEhfTEFCRUxTLCB1c2VWYWx1ZTogQ0FMRU5EQVJfREVGQVVMVF9NT05USF9MQUJFTFMgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJNb2R1bGUge1xuICBzdGF0aWMgZm9yQ2hpbGQoXG4gICAgd2Vla2RheUxhYmVsczogV2Vla2RheUxhYmVsc0NvbmZpZyxcbiAgICBtb250aExhYmVsczogTW9udGhMYWJlbHNDb25maWdcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IENhbGVuZGFyTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgeyBwcm92aWRlOiBDQUxFTkRBUl9XRUVLREFZX0xBQkVMUywgdXNlVmFsdWU6IHdlZWtkYXlMYWJlbHMgfSxcbiAgICAgICAgeyBwcm92aWRlOiBDQUxFTkRBUl9NT05USF9MQUJFTFMsIHVzZVZhbHVlOiBtb250aExhYmVscyB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,214 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, Output, } from '@angular/core';
2
+ import { DateHelper } from '@acpaas-ui/ngx-utils';
3
+ import { CALENDAR_DEFAULT_MONTH_LABELS, CALENDAR_DEFAULT_WEEKDAY_LABELS, CALENDAR_MONTH_LABELS, CALENDAR_WEEKDAY_LABELS, } from '../../calendar.conf';
4
+ import { CALENDAR_VIEW_DECENNIA, CALENDAR_VIEW_MONTH, CALENDAR_VIEW_YEAR, } from '../../types/calendar.types';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/calendar.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@acpaas-ui/ngx-icon";
9
+ import * as i4 from "../decennia/decennia.component";
10
+ import * as i5 from "../month/month.component";
11
+ import * as i6 from "../year/year.component";
12
+ function CalendarComponent_aui_calendar_month_10_Template(rf, ctx) { if (rf & 1) {
13
+ const _r4 = i0.ɵɵgetCurrentView();
14
+ i0.ɵɵelementStart(0, "aui-calendar-month", 10);
15
+ i0.ɵɵlistener("selectDate", function CalendarComponent_aui_calendar_month_10_Template_aui_calendar_month_selectDate_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.pickDate($event)); });
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const ctx_r0 = i0.ɵɵnextContext();
19
+ i0.ɵɵproperty("activeDate", ctx_r0.activeDate)("range", ctx_r0.range)("interval", ctx_r0.interval)("selectedDate", ctx_r0.selectedDate)("weekdayLabels", ctx_r0.weekdayLabels);
20
+ } }
21
+ function CalendarComponent_aui_calendar_year_11_Template(rf, ctx) { if (rf & 1) {
22
+ const _r6 = i0.ɵɵgetCurrentView();
23
+ i0.ɵɵelementStart(0, "aui-calendar-year", 11);
24
+ i0.ɵɵlistener("selectDate", function CalendarComponent_aui_calendar_year_11_Template_aui_calendar_year_selectDate_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.pickDate($event)); });
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const ctx_r1 = i0.ɵɵnextContext();
28
+ i0.ɵɵproperty("activeDate", ctx_r1.activeDate)("monthLabels", ctx_r1.monthLabels)("selectedDate", ctx_r1.selectedDate);
29
+ } }
30
+ function CalendarComponent_aui_calendar_decennia_12_Template(rf, ctx) { if (rf & 1) {
31
+ const _r8 = i0.ɵɵgetCurrentView();
32
+ i0.ɵɵelementStart(0, "aui-calendar-decennia", 12);
33
+ i0.ɵɵlistener("selectDate", function CalendarComponent_aui_calendar_decennia_12_Template_aui_calendar_decennia_selectDate_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.pickDate($event)); });
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ const ctx_r2 = i0.ɵɵnextContext();
37
+ i0.ɵɵproperty("activeDate", ctx_r2.activeDate)("selectedDate", ctx_r2.selectedDate);
38
+ } }
39
+ export class CalendarComponent {
40
+ constructor(moduleMonthLabels = CALENDAR_DEFAULT_MONTH_LABELS, moduleWeekdayLabels = CALENDAR_DEFAULT_WEEKDAY_LABELS, calendarService) {
41
+ this.moduleMonthLabels = moduleMonthLabels;
42
+ this.moduleWeekdayLabels = moduleWeekdayLabels;
43
+ this.calendarService = calendarService;
44
+ this.role = 'application';
45
+ this.ariahidden = 'false';
46
+ this.ariaPreviousLabels = ['Ga naar vorige maand', 'Ga naar vorig jaar', 'Ga naar vorige 18 jaren'];
47
+ this.ariaNextLabels = ['Ga naar volgende maand', 'Ga naar volgend jaar', 'Ga naar volgende 18 jaren'];
48
+ this.selectDate = new EventEmitter();
49
+ this.CALENDAR_VIEW_MONTH = CALENDAR_VIEW_MONTH;
50
+ this.CALENDAR_VIEW_YEAR = CALENDAR_VIEW_YEAR;
51
+ this.CALENDAR_VIEW_DECENNIA = CALENDAR_VIEW_DECENNIA;
52
+ this.activeView = CALENDAR_VIEW_MONTH;
53
+ this.headerLabel = '';
54
+ this.ariaPreviousLabel = this.ariaPreviousLabels[0];
55
+ this.ariaNextLabel = this.ariaNextLabels[0];
56
+ }
57
+ ngOnInit() {
58
+ this.initControl();
59
+ }
60
+ ngOnChanges(changes) {
61
+ const selectedDate = changes.selectedDate && changes.selectedDate.currentValue ? changes.selectedDate : null;
62
+ if (typeof this.monthLabels !== 'undefined' &&
63
+ selectedDate &&
64
+ !DateHelper.datesAreEqual(selectedDate.currentValue, selectedDate.previousValue)) {
65
+ this.activeDate = this.selectedDate;
66
+ this.updateHeaderLabel();
67
+ }
68
+ else {
69
+ let activeDateToSet = new Date();
70
+ if (this.interval && this.interval.isInRange(activeDateToSet)) {
71
+ activeDateToSet = this.interval.min;
72
+ }
73
+ this.activeDate = DateHelper.parseDate(activeDateToSet);
74
+ this.initControl();
75
+ }
76
+ }
77
+ updateActiveDate(factor = 0) {
78
+ const activeDate = this.activeDate ? new Date(this.activeDate) : new Date();
79
+ switch (this.activeView) {
80
+ case CALENDAR_VIEW_MONTH:
81
+ activeDate.setMonth(activeDate.getMonth() + factor);
82
+ break;
83
+ case CALENDAR_VIEW_YEAR:
84
+ activeDate.setFullYear(activeDate.getFullYear() + factor);
85
+ break;
86
+ case CALENDAR_VIEW_DECENNIA:
87
+ activeDate.setFullYear(activeDate.getFullYear() + 18 * factor);
88
+ break;
89
+ }
90
+ this.activeDate = activeDate;
91
+ this.updateHeaderLabel();
92
+ }
93
+ switchView(factor = 1) {
94
+ const views = [CALENDAR_VIEW_MONTH, CALENDAR_VIEW_YEAR, CALENDAR_VIEW_DECENNIA];
95
+ const currView = views.indexOf(this.activeView);
96
+ let nextView = currView + factor >= views.length ? 0 : currView + factor;
97
+ nextView = nextView < 0 ? views.length - 1 : nextView;
98
+ this.activeView = views[nextView];
99
+ // reset activeDate when returning to month view without model update
100
+ if (this.selectedDate && nextView === 0 && factor === 1) {
101
+ this.activeDate = this.selectedDate;
102
+ }
103
+ this.updateHeaderLabel();
104
+ }
105
+ updateHeaderLabel() {
106
+ switch (this.activeView) {
107
+ case CALENDAR_VIEW_MONTH:
108
+ this.headerLabel = this.monthLabels[this.activeDate.getMonth()] + ' ' + this.activeDate.getFullYear();
109
+ this.ariaPreviousLabel = this.ariaPreviousLabels[0];
110
+ this.ariaNextLabel = this.ariaNextLabels[0];
111
+ break;
112
+ case CALENDAR_VIEW_YEAR:
113
+ this.headerLabel = String(this.activeDate.getFullYear());
114
+ this.ariaPreviousLabel = this.ariaPreviousLabels[1];
115
+ this.ariaNextLabel = this.ariaNextLabels[1];
116
+ break;
117
+ case CALENDAR_VIEW_DECENNIA:
118
+ const startYear = this.activeDate.getFullYear();
119
+ this.headerLabel = `${startYear} - ${startYear + 17}`;
120
+ this.ariaPreviousLabel = this.ariaPreviousLabels[2];
121
+ this.ariaNextLabel = this.ariaNextLabels[2];
122
+ break;
123
+ }
124
+ }
125
+ pickDate(date) {
126
+ const complete = this.activeView === CALENDAR_VIEW_MONTH;
127
+ this.selectDate.emit({
128
+ date,
129
+ complete,
130
+ });
131
+ if (!complete) {
132
+ this.activeDate = date;
133
+ this.switchView(-1);
134
+ }
135
+ }
136
+ initControl() {
137
+ this.weekdayLabels = this.weekdayLabels || this.moduleWeekdayLabels;
138
+ this.monthLabels = this.monthLabels || this.moduleMonthLabels;
139
+ this.activeDate = this.calendarService.getClosestDateForRange(this.activeDate, this.range);
140
+ if (this.selectedDate) {
141
+ this.activeDate = this.selectedDate;
142
+ this.updateActiveDate();
143
+ }
144
+ this.updateHeaderLabel();
145
+ }
146
+ }
147
+ /** @nocollapse */ CalendarComponent.ɵfac = function CalendarComponent_Factory(t) { return new (t || CalendarComponent)(i0.ɵɵdirectiveInject(CALENDAR_MONTH_LABELS), i0.ɵɵdirectiveInject(CALENDAR_WEEKDAY_LABELS), i0.ɵɵdirectiveInject(i1.CalendarService)); };
148
+ /** @nocollapse */ CalendarComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: CalendarComponent, selectors: [["aui-calendar"]], hostVars: 2, hostBindings: function CalendarComponent_HostBindings(rf, ctx) { if (rf & 2) {
149
+ i0.ɵɵattribute("role", ctx.role)("aria-hidden", ctx.ariahidden);
150
+ } }, inputs: { ariaPreviousLabels: "ariaPreviousLabels", ariaNextLabels: "ariaNextLabels", selectedDate: "selectedDate", range: "range", interval: "interval", weekdayLabels: "weekdayLabels", monthLabels: "monthLabels" }, outputs: { selectDate: "selectDate" }, features: [i0.ɵɵNgOnChangesFeature], decls: 13, vars: 8, consts: [[1, "m-datepicker__nav"], ["type", "button", 1, "m-datepicker__nav-title", 3, "click"], ["name", "ai-arrow-down-1", "role", "button", "tabindex", "0"], [1, "m-datepicker__nav-pagination"], ["type", "button", 1, "a-button", "a-button--text", "a-button--primary", "has-icon", 3, "click"], ["name", "ai-arrow-left-1"], ["name", "ai-arrow-right-1"], [3, "activeDate", "range", "interval", "selectedDate", "weekdayLabels", "selectDate", 4, "ngIf"], [3, "activeDate", "monthLabels", "selectedDate", "selectDate", 4, "ngIf"], [3, "activeDate", "selectedDate", "selectDate", 4, "ngIf"], [3, "activeDate", "range", "interval", "selectedDate", "weekdayLabels", "selectDate"], [3, "activeDate", "monthLabels", "selectedDate", "selectDate"], [3, "activeDate", "selectedDate", "selectDate"]], template: function CalendarComponent_Template(rf, ctx) { if (rf & 1) {
151
+ i0.ɵɵelementStart(0, "div", 0)(1, "button", 1);
152
+ i0.ɵɵlistener("click", function CalendarComponent_Template_button_click_1_listener() { return ctx.switchView(); });
153
+ i0.ɵɵtext(2);
154
+ i0.ɵɵpipe(3, "titlecase");
155
+ i0.ɵɵelement(4, "aui-icon", 2);
156
+ i0.ɵɵelementEnd();
157
+ i0.ɵɵelementStart(5, "div", 3)(6, "button", 4);
158
+ i0.ɵɵlistener("click", function CalendarComponent_Template_button_click_6_listener() { return ctx.updateActiveDate(-1); });
159
+ i0.ɵɵelement(7, "aui-icon", 5);
160
+ i0.ɵɵelementEnd();
161
+ i0.ɵɵelementStart(8, "button", 4);
162
+ i0.ɵɵlistener("click", function CalendarComponent_Template_button_click_8_listener() { return ctx.updateActiveDate(1); });
163
+ i0.ɵɵelement(9, "aui-icon", 6);
164
+ i0.ɵɵelementEnd()()();
165
+ i0.ɵɵtemplate(10, CalendarComponent_aui_calendar_month_10_Template, 1, 5, "aui-calendar-month", 7);
166
+ i0.ɵɵtemplate(11, CalendarComponent_aui_calendar_year_11_Template, 1, 3, "aui-calendar-year", 8);
167
+ i0.ɵɵtemplate(12, CalendarComponent_aui_calendar_decennia_12_Template, 1, 2, "aui-calendar-decennia", 9);
168
+ } if (rf & 2) {
169
+ i0.ɵɵadvance(2);
170
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 6, ctx.headerLabel), " ");
171
+ i0.ɵɵadvance(4);
172
+ i0.ɵɵattribute("aria-label", ctx.ariaPreviousLabel);
173
+ i0.ɵɵadvance(2);
174
+ i0.ɵɵattribute("aria-label", ctx.ariaNextLabel);
175
+ i0.ɵɵadvance(2);
176
+ i0.ɵɵproperty("ngIf", ctx.activeView === ctx.CALENDAR_VIEW_MONTH);
177
+ i0.ɵɵadvance(1);
178
+ i0.ɵɵproperty("ngIf", ctx.activeView === ctx.CALENDAR_VIEW_YEAR);
179
+ i0.ɵɵadvance(1);
180
+ i0.ɵɵproperty("ngIf", ctx.activeView === ctx.CALENDAR_VIEW_DECENNIA);
181
+ } }, dependencies: [i2.NgIf, i3.IconComponent, i4.CalendarDecenniaComponent, i5.CalendarMonthComponent, i6.CalendarYearComponent, i2.TitleCasePipe], encapsulation: 2, changeDetection: 0 });
182
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CalendarComponent, [{
183
+ type: Component,
184
+ args: [{ selector: 'aui-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"m-datepicker__nav\">\n <button (click)=\"switchView()\" class=\"m-datepicker__nav-title\" type=\"button\">\n {{ headerLabel | titlecase }}\n <aui-icon name=\"ai-arrow-down-1\" role=\"button\" tabindex=\"0\" />\n </button>\n\n <div class=\"m-datepicker__nav-pagination\">\n <button\n (click)=\"updateActiveDate(-1)\"\n [attr.aria-label]=\"ariaPreviousLabel\"\n class=\"a-button a-button--text a-button--primary has-icon\"\n type=\"button\"\n >\n <aui-icon name=\"ai-arrow-left-1\"></aui-icon>\n </button>\n <button\n (click)=\"updateActiveDate(1)\"\n [attr.aria-label]=\"ariaNextLabel\"\n class=\"a-button a-button--text a-button--primary has-icon\"\n type=\"button\"\n >\n <aui-icon name=\"ai-arrow-right-1\"></aui-icon>\n </button>\n </div>\n</div>\n<aui-calendar-month\n (selectDate)=\"pickDate($event)\"\n *ngIf=\"activeView === CALENDAR_VIEW_MONTH\"\n [activeDate]=\"activeDate\"\n [range]=\"range\"\n [interval]=\"interval\"\n [selectedDate]=\"selectedDate\"\n [weekdayLabels]=\"weekdayLabels\"\n></aui-calendar-month>\n<aui-calendar-year\n (selectDate)=\"pickDate($event)\"\n *ngIf=\"activeView === CALENDAR_VIEW_YEAR\"\n [activeDate]=\"activeDate\"\n [monthLabels]=\"monthLabels\"\n [selectedDate]=\"selectedDate\"\n></aui-calendar-year>\n<aui-calendar-decennia\n (selectDate)=\"pickDate($event)\"\n *ngIf=\"activeView === CALENDAR_VIEW_DECENNIA\"\n [activeDate]=\"activeDate\"\n [selectedDate]=\"selectedDate\"\n></aui-calendar-decennia>" }]
185
+ }], function () { return [{ type: undefined, decorators: [{
186
+ type: Inject,
187
+ args: [CALENDAR_MONTH_LABELS]
188
+ }] }, { type: undefined, decorators: [{
189
+ type: Inject,
190
+ args: [CALENDAR_WEEKDAY_LABELS]
191
+ }] }, { type: i1.CalendarService }]; }, { role: [{
192
+ type: HostBinding,
193
+ args: ['attr.role']
194
+ }], ariahidden: [{
195
+ type: HostBinding,
196
+ args: ['attr.aria-hidden']
197
+ }], ariaPreviousLabels: [{
198
+ type: Input
199
+ }], ariaNextLabels: [{
200
+ type: Input
201
+ }], selectedDate: [{
202
+ type: Input
203
+ }], range: [{
204
+ type: Input
205
+ }], interval: [{
206
+ type: Input
207
+ }], weekdayLabels: [{
208
+ type: Input
209
+ }], monthLabels: [{
210
+ type: Input
211
+ }], selectDate: [{
212
+ type: Output
213
+ }] }); })();
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIsdUJBQXVCLEdBQ3hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBR25CLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7SUNGcEMsOENBUUM7SUFQQywwTUFBYyxlQUFBLHVCQUFnQixDQUFBLElBQUM7SUFPaEMsaUJBQXFCOzs7SUFMcEIsOENBQXlCLHVCQUFBLDZCQUFBLHFDQUFBLHVDQUFBOzs7O0lBTTNCLDZDQU1DO0lBTEMsd01BQWMsZUFBQSx1QkFBZ0IsQ0FBQSxJQUFDO0lBS2hDLGlCQUFvQjs7O0lBSG5CLDhDQUF5QixtQ0FBQSxxQ0FBQTs7OztJQUkzQixpREFLQztJQUpDLGdOQUFjLGVBQUEsdUJBQWdCLENBQUEsSUFBQztJQUloQyxpQkFBd0I7OztJQUZ2Qiw4Q0FBeUIscUNBQUE7O0FEUjNCLE1BQU0sT0FBTyxpQkFBaUI7SUF3QjVCLFlBQ3dDLG9CQUFvQiw2QkFBNkIsRUFDL0Msc0JBQXNCLCtCQUErQixFQUNyRixlQUFnQztRQUZGLHNC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dUJBQUMscUJBQXFCOztzQkFDNUIsTUFBTTt1QkFBQyx1QkFBdUI7c0RBekJQLElBQUk7a0JBQTdCLFdBQVc7bUJBQUMsV0FBVztZQUNTLFVBQVU7a0JBQTFDLFdBQVc7bUJBQUMsa0JBQWtCO1lBRXRCLGtCQUFrQjtrQkFBMUIsS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUs7WUFFRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csS0FBSztrQkFBYixLQUFLO1lBRU4sUUFBUTtrQkFEUCxLQUFLO1lBRUcsYUFBYTtrQkFBckIsS0FBSztZQUNHLFdBQVc7a0JBQW5CLEtBQUs7WUFDSSxVQUFVO2tCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERhdGVIZWxwZXIsIERhdGVSYW5nZSB9IGZyb20gJ0BhY3BhYXMtdWkvbmd4LXV0aWxzJztcblxuaW1wb3J0IHtcbiAgQ0FMRU5EQVJfREVGQVVMVF9NT05USF9MQUJFTFMsXG4gIENBTEVOREFSX0RFRkFVTFRfV0VFS0RBWV9MQUJFTFMsXG4gIENBTEVOREFSX01PTlRIX0xBQkVMUyxcbiAgQ0FMRU5EQVJfV0VFS0RBWV9MQUJFTFMsXG59IGZyb20gJy4uLy4uL2NhbGVuZGFyLmNvbmYnO1xuaW1wb3J0IHtcbiAgQ0FMRU5EQVJfVklFV19ERUNFTk5JQSxcbiAgQ0FMRU5EQVJfVklFV19NT05USCxcbiAgQ0FMRU5EQVJfVklFV19ZRUFSLFxuICBNb250aExhYmVsc0NvbmZpZyxcbiAgV2Vla2RheUxhYmVsc0NvbmZpZyxcbn0gZnJvbSAnLi4vLi4vdHlwZXMvY2FsZW5kYXIudHlwZXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBJbnRlcnZhbCB9IGZyb20gJ0BhY3BhYXMtdWkvbmd4LXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVpLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnYXBwbGljYXRpb24nO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oaWRkZW4nKSBhcmlhaGlkZGVuID0gJ2ZhbHNlJztcblxuICBASW5wdXQoKSBhcmlhUHJldmlvdXNMYWJlbHMgPSBbJ0dhIG5hYXIgdm9yaWdlIG1hYW5kJywgJ0dhIG5hYXIgdm9yaWcgamFhcicsICdHYSBuYWFyIHZvcmlnZSAxOCBqYXJlbiddO1xuICBASW5wdXQoKSBhcmlhTmV4dExhYmVscyA9IFsnR2EgbmFhciB2b2xnZW5kZSBtYWFuZCcsICdHYSBuYWFyIHZvbGdlbmQgamFhcicsICdHYSBuYWFyIHZvbGdlbmRlIDE4IGphcmVuJ107XG5cbiAgQElucHV0KCkgc2VsZWN0ZWREYXRlOiBEYXRlO1xuICBASW5wdXQoKSByYW5nZTogRGF0ZVJhbmdlO1xuICBASW5wdXQoKVxuICBpbnRlcnZhbD86IEludGVydmFsLklJbnRlcnZhbDxEYXRlPjtcbiAgQElucHV0KCkgd2Vla2RheUxhYmVsczogV2Vla2RheUxhYmVsc0NvbmZpZztcbiAgQElucHV0KCkgbW9udGhMYWJlbHM6IE1vbnRoTGFiZWxzQ29uZmlnO1xuICBAT3V0cHV0KCkgc2VsZWN0RGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgQ0FMRU5EQVJfVklFV19NT05USCA9IENBTEVOREFSX1ZJRVdfTU9OVEg7XG4gIHB1YmxpYyBDQUxFTkRBUl9WSUVXX1lFQVIgPSBDQUxFTkRBUl9WSUVXX1lFQVI7XG4gIHB1YmxpYyBDQUxFTkRBUl9WSUVXX0RFQ0VOTklBID0gQ0FMRU5EQVJfVklFV19ERUNFTk5JQTtcbiAgcHVibGljIGFjdGl2ZURhdGU6IERhdGU7XG4gIHB1YmxpYyBhY3RpdmVWaWV3OiBzdHJpbmcgPSBDQUxFTkRBUl9WSUVXX01PTlRIO1xuICBwdWJsaWMgaGVhZGVyTGFiZWwgPSAnJztcbiAgcHVibGljIGFyaWFQcmV2aW91c0xhYmVsID0gdGhpcy5hcmlhUHJldmlvdXNMYWJlbHNbMF07XG4gIHB1YmxpYyBhcmlhTmV4dExhYmVsID0gdGhpcy5hcmlhTmV4dExhYmVsc1swXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KENBTEVOREFSX01PTlRIX0xBQkVMUykgcHVibGljIG1vZHVsZU1vbnRoTGFiZWxzID0gQ0FMRU5EQVJfREVGQVVMVF9NT05USF9MQUJFTFMsXG4gICAgQEluamVjdChDQUxFTkRBUl9XRUVLREFZX0xBQkVMUykgcHVibGljIG1vZHVsZVdlZWtkYXlMYWJlbHMgPSBDQUxFTkRBUl9ERUZBVUxUX1dFRUtEQVlfTEFCRUxTLFxuICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRDb250cm9sKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gY2hhbmdlcy5zZWxlY3RlZERhdGUgJiYgY2hhbmdlcy5zZWxlY3RlZERhdGUuY3VycmVudFZhbHVlID8gY2hhbmdlcy5zZWxlY3RlZERhdGUgOiBudWxsO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMubW9udGhMYWJlbHMgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBzZWxlY3RlZERhdGUgJiZcbiAgICAgICFEYXRlSGVscGVyLmRhdGVzQXJlRXF1YWwoc2VsZWN0ZWREYXRlLmN1cnJlbnRWYWx1ZSwgc2VsZWN0ZWREYXRlLnByZXZpb3VzVmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyTGFiZWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGFjdGl2ZURhdGVUb1NldCA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICh0aGlzLmludGVydmFsICYmIHRoaXMuaW50ZXJ2YWwuaXNJblJhbmdlKGFjdGl2ZURhdGVUb1NldCkpIHtcbiAgICAgICAgYWN0aXZlRGF0ZVRvU2V0ID0gdGhpcy5pbnRlcnZhbC5taW47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IERhdGVIZWxwZXIucGFyc2VEYXRlKGFjdGl2ZURhdGVUb1NldCk7XG5cbiAgICAgIHRoaXMuaW5pdENvbnRyb2woKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVBY3RpdmVEYXRlKGZhY3RvcjogbnVtYmVyID0gMCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZURhdGUgPSB0aGlzLmFjdGl2ZURhdGUgPyBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUpIDogbmV3IERhdGUoKTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICBjYXNlIENBTEVOREFSX1ZJRVdfTU9OVEg6XG4gICAgICAgIGFjdGl2ZURhdGUuc2V0TW9udGgoYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgZmFjdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENBTEVOREFSX1ZJRVdfWUVBUjpcbiAgICAgICAgYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihhY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkgKyBmYWN0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0FMRU5EQVJfVklFV19ERUNFTk5JQTpcbiAgICAgICAgYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihhY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkgKyAxOCAqIGZhY3Rvcik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGFjdGl2ZURhdGU7XG4gICAgdGhpcy51cGRhdGVIZWFkZXJMYWJlbCgpO1xuICB9XG5cbiAgc3dpdGNoVmlldyhmYWN0b3I6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3cyA9IFtDQUxFTkRBUl9WSUVXX01PTlRILCBDQUxFTkRBUl9WSUVXX1lFQVIsIENBTEVOREFSX1ZJRVdfREVDRU5OSUFdO1xuXG4gICAgY29uc3QgY3VyclZpZXcgPSB2aWV3cy5pbmRleE9mKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgbGV0IG5leHRWaWV3ID0gY3VyclZpZXcgKyBmYWN0b3IgPj0gdmlld3MubGVuZ3RoID8gMCA6IGN1cnJWaWV3ICsgZmFjdG9yO1xuICAgIG5leHRWaWV3ID0gbmV4dFZpZXcgPCAwID8gdmlld3MubGVuZ3RoIC0gMSA6IG5leHRWaWV3O1xuXG4gICAgdGhpcy5hY3RpdmVWaWV3ID0gdmlld3NbbmV4dFZpZXddO1xuXG4gICAgLy8gcmVzZXQgYWN0aXZlRGF0ZSB3aGVuIHJldHVybmluZyB0byBtb250aCB2aWV3IHdpdGhvdXQgbW9kZWwgdXBkYXRlXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlICYmIG5leHRWaWV3ID09PSAwICYmIGZhY3RvciA9PT0gMSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVIZWFkZXJMYWJlbCgpO1xuICB9XG5cbiAgdXBkYXRlSGVhZGVyTGFiZWwoKTogdm9pZCB7XG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgIGNhc2UgQ0FMRU5EQVJfVklFV19NT05USDpcbiAgICAgICAgdGhpcy5oZWFkZXJMYWJlbCA9IHRoaXMubW9udGhMYWJlbHNbdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCldICsgJyAnICsgdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHRoaXMuYXJpYVByZXZpb3VzTGFiZWwgPSB0aGlzLmFyaWFQcmV2aW91c0xhYmVsc1swXTtcbiAgICAgICAgdGhpcy5hcmlhTmV4dExhYmVsID0gdGhpcy5hcmlhTmV4dExhYmVsc1swXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENBTEVOREFSX1ZJRVdfWUVBUjpcbiAgICAgICAgdGhpcy5oZWFkZXJMYWJlbCA9IFN0cmluZyh0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMuYXJpYVByZXZpb3VzTGFiZWwgPSB0aGlzLmFyaWFQcmV2aW91c0xhYmVsc1sxXTtcbiAgICAgICAgdGhpcy5hcmlhTmV4dExhYmVsID0gdGhpcy5hcmlhTmV4dExhYmVsc1sxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENBTEVOREFSX1ZJRVdfREVDRU5OSUE6XG4gICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB0aGlzLmhlYWRlckxhYmVsID0gYCR7c3RhcnRZZWFyfSAtICR7c3RhcnRZZWFyICsgMTd9YDtcbiAgICAgICAgdGhpcy5hcmlhUHJldmlvdXNMYWJlbCA9IHRoaXMuYXJpYVByZXZpb3VzTGFiZWxzWzJdO1xuICAgICAgICB0aGlzLmFyaWFOZXh0TGFiZWwgPSB0aGlzLmFyaWFOZXh0TGFiZWxzWzJdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwaWNrRGF0ZShkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY29tcGxldGUgPSB0aGlzLmFjdGl2ZVZpZXcgPT09IENBTEVOREFSX1ZJRVdfTU9OVEg7XG5cbiAgICB0aGlzLnNlbGVjdERhdGUuZW1pdCh7XG4gICAgICBkYXRlLFxuICAgICAgY29tcGxldGUsXG4gICAgfSk7XG5cbiAgICBpZiAoIWNvbXBsZXRlKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xuICAgICAgdGhpcy5zd2l0Y2hWaWV3KC0xKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRDb250cm9sKCk6IHZvaWQge1xuICAgIHRoaXMud2Vla2RheUxhYmVscyA9IHRoaXMud2Vla2RheUxhYmVscyB8fCB0aGlzLm1vZHVsZVdlZWtkYXlMYWJlbHM7XG4gICAgdGhpcy5tb250aExhYmVscyA9IHRoaXMubW9udGhMYWJlbHMgfHwgdGhpcy5tb2R1bGVNb250aExhYmVscztcbiAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRDbG9zZXN0RGF0ZUZvclJhbmdlKHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5yYW5nZSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUhlYWRlckxhYmVsKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtLWRhdGVwaWNrZXJfX25hdlwiPlxuICA8YnV0dG9uIChjbGljayk9XCJzd2l0Y2hWaWV3KClcIiBjbGFzcz1cIm0tZGF0ZXBpY2tlcl9fbmF2LXRpdGxlXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgIHt7IGhlYWRlckxhYmVsIHwgdGl0bGVjYXNlIH19XG4gICAgPGF1aS1pY29uIG5hbWU9XCJhaS1hcnJvdy1kb3duLTFcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgLz5cbiAgPC9idXR0b24+XG5cbiAgPGRpdiBjbGFzcz1cIm0tZGF0ZXBpY2tlcl9fbmF2LXBhZ2luYXRpb25cIj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwidXBkYXRlQWN0aXZlRGF0ZSgtMSlcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhUHJldmlvdXNMYWJlbFwiXG4gICAgICBjbGFzcz1cImEtYnV0dG9uIGEtYnV0dG9uLS10ZXh0IGEtYnV0dG9uLS1wcmltYXJ5IGhhcy1pY29uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxhdWktaWNvbiBuYW1lPVwiYWktYXJyb3ctbGVmdC0xXCI+PC9hdWktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwidXBkYXRlQWN0aXZlRGF0ZSgxKVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFOZXh0TGFiZWxcIlxuICAgICAgY2xhc3M9XCJhLWJ1dHRvbiBhLWJ1dHRvbi0tdGV4dCBhLWJ1dHRvbi0tcHJpbWFyeSBoYXMtaWNvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8YXVpLWljb24gbmFtZT1cImFpLWFycm93LXJpZ2h0LTFcIj48L2F1aS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGF1aS1jYWxlbmRhci1tb250aFxuICAoc2VsZWN0RGF0ZSk9XCJwaWNrRGF0ZSgkZXZlbnQpXCJcbiAgKm5nSWY9XCJhY3RpdmVWaWV3ID09PSBDQUxFTkRBUl9WSUVXX01PTlRIXCJcbiAgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gIFtyYW5nZV09XCJyYW5nZVwiXG4gIFtpbnRlcnZhbF09XCJpbnRlcnZhbFwiXG4gIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgW3dlZWtkYXlMYWJlbHNdPVwid2Vla2RheUxhYmVsc1wiXG4+PC9hdWktY2FsZW5kYXItbW9udGg+XG48YXVpLWNhbGVuZGFyLXllYXJcbiAgKHNlbGVjdERhdGUpPVwicGlja0RhdGUoJGV2ZW50KVwiXG4gICpuZ0lmPVwiYWN0aXZlVmlldyA9PT0gQ0FMRU5EQVJfVklFV19ZRUFSXCJcbiAgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gIFttb250aExhYmVsc109XCJtb250aExhYmVsc1wiXG4gIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbj48L2F1aS1jYWxlbmRhci15ZWFyPlxuPGF1aS1jYWxlbmRhci1kZWNlbm5pYVxuICAoc2VsZWN0RGF0ZSk9XCJwaWNrRGF0ZSgkZXZlbnQpXCJcbiAgKm5nSWY9XCJhY3RpdmVWaWV3ID09PSBDQUxFTkRBUl9WSUVXX0RFQ0VOTklBXCJcbiAgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbj48L2F1aS1jYWxlbmRhci1kZWNlbm5pYT4iXX0=
@@ -0,0 +1,85 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { chunk, get } from 'lodash-es';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ const _c0 = function (a0, a1) { return { "is-current": a0, "is-selected": a1 }; };
6
+ function CalendarDecenniaComponent_tr_3_td_1_Template(rf, ctx) { if (rf & 1) {
7
+ const _r5 = i0.ɵɵgetCurrentView();
8
+ i0.ɵɵelementStart(0, "td")(1, "button", 3);
9
+ i0.ɵɵlistener("click", function CalendarDecenniaComponent_tr_3_td_1_Template_button_click_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r5); const year_r3 = restoredCtx.$implicit; const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.pickDate($event, year_r3)); });
10
+ i0.ɵɵtext(2);
11
+ i0.ɵɵelementEnd()();
12
+ } if (rf & 2) {
13
+ const year_r3 = ctx.$implicit;
14
+ const ctx_r2 = i0.ɵɵnextContext(2);
15
+ i0.ɵɵadvance(1);
16
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c0, year_r3 === ctx_r2.current, year_r3 === ctx_r2.selectedYear));
17
+ i0.ɵɵadvance(1);
18
+ i0.ɵɵtextInterpolate1(" ", year_r3, " ");
19
+ } }
20
+ function CalendarDecenniaComponent_tr_3_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelementStart(0, "tr");
22
+ i0.ɵɵtemplate(1, CalendarDecenniaComponent_tr_3_td_1_Template, 3, 5, "td", 2);
23
+ i0.ɵɵelementEnd();
24
+ } if (rf & 2) {
25
+ const group_r1 = ctx.$implicit;
26
+ i0.ɵɵadvance(1);
27
+ i0.ɵɵproperty("ngForOf", group_r1);
28
+ } }
29
+ export class CalendarDecenniaComponent {
30
+ constructor() {
31
+ this.selectDate = new EventEmitter();
32
+ this.years = [];
33
+ this.selectedYear = -1;
34
+ this.current = -1;
35
+ }
36
+ ngOnInit() {
37
+ const current = new Date();
38
+ this.current = current.getFullYear();
39
+ }
40
+ ngOnChanges(changes) {
41
+ const currentValue = get(changes, 'activeDate.currentValue');
42
+ const previousValue = get(changes, 'activeDate.previousValue');
43
+ const currentYear = currentValue instanceof Date ? currentValue.getFullYear() : -1;
44
+ const previousYear = previousValue instanceof Date ? previousValue.getFullYear() : -1;
45
+ const outOfRange = previousYear > currentYear || previousYear + 17 < currentYear;
46
+ if (currentYear >= 0 && outOfRange) {
47
+ this.updateYears();
48
+ }
49
+ this.selectedYear = this.selectedDate instanceof Date ? this.selectedDate.getFullYear() : -1;
50
+ }
51
+ pickDate(event, date) {
52
+ event.stopPropagation();
53
+ const selectedDate = new Date(this.activeDate);
54
+ selectedDate.setFullYear(date);
55
+ this.selectDate.emit(selectedDate);
56
+ }
57
+ updateYears() {
58
+ const years = [];
59
+ const activeYear = this.activeDate.getFullYear();
60
+ for (let i = activeYear; i < activeYear + 18; i += 1) {
61
+ years.push(i);
62
+ }
63
+ this.years = chunk(years, 3);
64
+ }
65
+ }
66
+ /** @nocollapse */ CalendarDecenniaComponent.ɵfac = function CalendarDecenniaComponent_Factory(t) { return new (t || CalendarDecenniaComponent)(); };
67
+ /** @nocollapse */ CalendarDecenniaComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: CalendarDecenniaComponent, selectors: [["aui-calendar-decennia"]], inputs: { selectedDate: "selectedDate", activeDate: "activeDate" }, outputs: { selectDate: "selectDate" }, features: [i0.ɵɵNgOnChangesFeature], decls: 4, vars: 1, consts: [[1, "m-datepicker__list"], [1, "m-datepicker__list-body"], [4, "ngFor", "ngForOf"], ["type", "button", 3, "ngClass", "click"]], template: function CalendarDecenniaComponent_Template(rf, ctx) { if (rf & 1) {
68
+ i0.ɵɵelementStart(0, "div", 0)(1, "table")(2, "tbody", 1);
69
+ i0.ɵɵtemplate(3, CalendarDecenniaComponent_tr_3_Template, 2, 1, "tr", 2);
70
+ i0.ɵɵelementEnd()()();
71
+ } if (rf & 2) {
72
+ i0.ɵɵadvance(3);
73
+ i0.ɵɵproperty("ngForOf", ctx.years);
74
+ } }, dependencies: [i1.NgClass, i1.NgForOf], encapsulation: 2, changeDetection: 0 });
75
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CalendarDecenniaComponent, [{
76
+ type: Component,
77
+ args: [{ selector: 'aui-calendar-decennia', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"m-datepicker__list\">\n <table>\n <tbody class=\"m-datepicker__list-body\">\n <tr *ngFor=\"let group of years\">\n <td *ngFor=\"let year of group\">\n <button\n (click)=\"pickDate($event, year)\"\n [ngClass]=\"{\n 'is-current': year === current,\n 'is-selected': year === selectedYear\n }\"\n type=\"button\"\n >\n {{ year }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n" }]
78
+ }], null, { selectedDate: [{
79
+ type: Input
80
+ }], activeDate: [{
81
+ type: Input
82
+ }], selectDate: [{
83
+ type: Output
84
+ }] }); })();
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjZW5uaWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlY2VubmlhL2RlY2VubmlhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNlbm5pYS9kZWNlbm5pYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7OztJQ0cvQiwwQkFBK0IsZ0JBQUE7SUFFM0IsNE9BQVMsZUFBQSxnQ0FBc0IsQ0FBQSxJQUFDO0lBT2hDLFlBQ0Y7SUFBQSxpQkFBUyxFQUFBOzs7O0lBUFAsZUFHRTtJQUhGLGlIQUdFO0lBR0YsZUFDRjtJQURFLHdDQUNGOzs7SUFYSiwwQkFBZ0M7SUFDOUIsNkVBV0s7SUFDUCxpQkFBSzs7O0lBWmtCLGVBQVE7SUFBUixrQ0FBUTs7QURJckMsTUFBTSxPQUFPLHlCQUF5QjtJQUx0QztRQVFZLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5DLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxpQkFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztLQXdDckI7SUF0Q1EsUUFBUTtRQUNiLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDN0QsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLFlBQVksWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsTUFBTSxZQUFZLEdBQUcsYUFBYSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixNQUFNLFVBQVUsR0FBRyxZQUFZLEdBQUcsV0FBVyxJQUFJLFlBQVksR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBRWpGLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFpQixFQUFFLElBQVk7UUFDdEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpELEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNmO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7O3FIQTlDVSx5QkFBeUI7MkdBQXpCLHlCQUF5QjtRQ1J0Qyw4QkFBZ0MsWUFBQSxlQUFBO1FBRzFCLHdFQWFLO1FBQ1AsaUJBQVEsRUFBQSxFQUFBOztRQWRnQixlQUFRO1FBQVIsbUNBQVE7O3VGREt2Qix5QkFBeUI7Y0FMckMsU0FBUzsyQkFDRSx1QkFBdUIsbUJBRWhCLHVCQUF1QixDQUFDLE1BQU07Z0JBR3RDLFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksVUFBVTtrQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNodW5rLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdWktY2FsZW5kYXItZGVjZW5uaWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVjZW5uaWEuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJEZWNlbm5pYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2VsZWN0ZWREYXRlOiBEYXRlO1xuICBASW5wdXQoKSBhY3RpdmVEYXRlOiBEYXRlO1xuICBAT3V0cHV0KCkgc2VsZWN0RGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgeWVhcnMgPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkWWVhciA9IC0xO1xuICBwdWJsaWMgY3VycmVudCA9IC0xO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLmN1cnJlbnQgPSBjdXJyZW50LmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0KGNoYW5nZXMsICdhY3RpdmVEYXRlLmN1cnJlbnRWYWx1ZScpO1xuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBnZXQoY2hhbmdlcywgJ2FjdGl2ZURhdGUucHJldmlvdXNWYWx1ZScpO1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpIDogLTE7XG4gICAgY29uc3QgcHJldmlvdXNZZWFyID0gcHJldmlvdXNWYWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBwcmV2aW91c1ZhbHVlLmdldEZ1bGxZZWFyKCkgOiAtMTtcbiAgICBjb25zdCBvdXRPZlJhbmdlID0gcHJldmlvdXNZZWFyID4gY3VycmVudFllYXIgfHwgcHJldmlvdXNZZWFyICsgMTcgPCBjdXJyZW50WWVhcjtcblxuICAgIGlmIChjdXJyZW50WWVhciA+PSAwICYmIG91dE9mUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlWWVhcnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlIGluc3RhbmNlb2YgRGF0ZSA/IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCkgOiAtMTtcbiAgfVxuXG4gIHBpY2tEYXRlKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBudW1iZXIpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgc2VsZWN0ZWREYXRlLnNldEZ1bGxZZWFyKGRhdGUpO1xuXG4gICAgdGhpcy5zZWxlY3REYXRlLmVtaXQoc2VsZWN0ZWREYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlWWVhcnMoKTogdm9pZCB7XG4gICAgY29uc3QgeWVhcnMgPSBbXTtcbiAgICBjb25zdCBhY3RpdmVZZWFyID0gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICBmb3IgKGxldCBpID0gYWN0aXZlWWVhcjsgaSA8IGFjdGl2ZVllYXIgKyAxODsgaSArPSAxKSB7XG4gICAgICB5ZWFycy5wdXNoKGkpO1xuICAgIH1cblxuICAgIHRoaXMueWVhcnMgPSBjaHVuayh5ZWFycywgMyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtLWRhdGVwaWNrZXJfX2xpc3RcIj5cbiAgPHRhYmxlPlxuICAgIDx0Ym9keSBjbGFzcz1cIm0tZGF0ZXBpY2tlcl9fbGlzdC1ib2R5XCI+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHllYXJzXCI+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgeWVhciBvZiBncm91cFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJwaWNrRGF0ZSgkZXZlbnQsIHllYXIpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWN1cnJlbnQnOiB5ZWFyID09PSBjdXJyZW50LFxuICAgICAgICAgICAgICAnaXMtc2VsZWN0ZWQnOiB5ZWFyID09PSBzZWxlY3RlZFllYXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgeWVhciB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC9kaXY+XG4iXX0=