@odx/angular 5.7.4 → 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 (30) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/components/calendar/lib/calendar.config.d.ts +24 -93
  3. package/components/calendar/lib/directives/calendar-cell.directive.d.ts +0 -9
  4. package/components/calendar/lib/directives/calendar-view.directive.d.ts +0 -9
  5. package/components/calendar/lib/pipes/date-label.pipe.d.ts +7 -21
  6. package/components/calendar/lib/utils/get-A11y-label.d.ts +1 -2
  7. package/esm2022/components/calendar/lib/calendar.config.mjs +1 -12
  8. package/esm2022/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +3 -3
  9. package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +3 -3
  10. package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +3 -3
  11. package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +2 -2
  12. package/esm2022/components/calendar/lib/pipes/date-label.pipe.mjs +22 -9
  13. package/esm2022/components/calendar/lib/utils/get-A11y-label.mjs +10 -8
  14. package/esm2022/internal/lib/helpers/fast-equals.mjs +3 -0
  15. package/esm2022/internal/lib/helpers/index.mjs +2 -1
  16. package/esm2022/localization/lib/localization.config.mjs +3 -5
  17. package/esm2022/localization/lib/localization.logger.mjs +3 -0
  18. package/esm2022/localization/lib/localization.service.mjs +20 -29
  19. package/fesm2022/odx-angular-components-calendar.mjs +39 -34
  20. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  21. package/fesm2022/odx-angular-internal.mjs +4 -1
  22. package/fesm2022/odx-angular-internal.mjs.map +1 -1
  23. package/fesm2022/odx-angular-localization.mjs +24 -32
  24. package/fesm2022/odx-angular-localization.mjs.map +1 -1
  25. package/internal/lib/helpers/fast-equals.d.ts +1 -0
  26. package/internal/lib/helpers/index.d.ts +1 -0
  27. package/localization/lib/localization.config.d.ts +0 -2
  28. package/localization/lib/localization.logger.d.ts +3 -0
  29. package/localization/lib/localization.service.d.ts +3 -7
  30. package/package.json +8 -7
@@ -42,7 +42,7 @@ export let CalendarCellDirective = class CalendarCellDirective {
42
42
  }
43
43
  ngOnChanges(changes) {
44
44
  if (hasChanged(changes, ['date', 'calendarView'], false)) {
45
- this.ariaLabel = this.dateLabelPipe.transform(this.date, getA11yLabel(this.calendarView, this.config));
45
+ this.ariaLabel = this.dateLabelPipe.transform(this.date, getA11yLabel(this.calendarView));
46
46
  this.isCurrent = checkIdenticalDate(this.date, new Date(), this.calendarView);
47
47
  }
48
48
  if (this.activeDate && hasChanged(changes, ['date', 'activeDate'], false)) {
@@ -169,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
169
169
  type: Input,
170
170
  args: ['odxCalendarCellPreviewDate']
171
171
  }] } });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItY2VsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbGliL2RpcmVjdGl2ZXMvY2FsZW5kYXItY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFrQnpELFdBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXFCO0lBQTNCO1FBQ1ksdUJBQWtCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFakQsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7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S0FBSzt1QkFBQyw2QkFBNkI7Z0JBSTdCLGlCQUFpQjtzQkFEdkIsS0FBSzt1QkFBQyxrQ0FBa0M7Z0JBSWxDLFdBQVc7c0JBRGpCLEtBQUs7dUJBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNhYmxlZENvbnRyb2xsZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50LCBDU1NNb2RpZmllciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBkZWZlckZuLCBFdmVudE1hbmFnZXIsIGhhc0NoYW5nZWQsIGluamVjdEVsZW1lbnQsIE5nQ2hhbmdlcyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBpc1NhbWVNb250aCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGluamVjdENhbGVuZGFyQ29uZmlnIH0gZnJvbSAnLi4vY2FsZW5kYXIuY29uZmlnJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb25Nb2RlLCBDYWxlbmRhclZpZXcsIERhdGVSYW5nZVNlbGVjdGlvblN0YXRlLCBEYXRlUmFuZ2VTdGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBEYXRlTGFiZWxQaXBlIH0gZnJvbSAnLi4vcGlwZXMnO1xuaW1wb3J0IHsgY2hlY2tJZGVudGljYWxEYXRlLCBnZXRBMTF5TGFiZWwgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBjaGVja0NlbGxJblJhbmdlIH0gZnJvbSAnLi4vdXRpbHMvY2hlY2stY2VsbC1pbi1yYW5nZSc7XG5cbkBDU1NDb21wb25lbnQoJ2NhbGVuZGFyLWNlbGwnKVxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW29keENhbGVuZGFyQ2VsbF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtEaXNhYmxlZENvbnRyb2xsZXIuY29ubmVjdCgpLCBEYXRlTGFiZWxQaXBlXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuaXMtZGlzYWJsZWRdJzogJ2lzRGlzYWJsZWQnLFxuICAgICdbY2xhc3MuaXMtc2VsZWN0ZWRdJzogJ2lzU2VsZWN0ZWQnLFxuICAgICdbY2xhc3MuaXMtaW4tYW55LXJhbmdlXSc6ICdpc0luUmFuZ2UgfHwgaXNJblByZXZpZXdSYW5nZScsXG4gICAgJ1thdHRyLmhpZGRlbl0nOiAnaXNIaWRkZW4gfHwgbnVsbCcsXG4gICAgJ1t0YWJpbmRleF0nOiAnaXNBY3RpdmUgPyAwIDogLTEnLFxuICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICdhcmlhTGFiZWwnLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdpc0Rpc2FibGVkJyxcbiAgICAnW2F0dHIudHlwZV0nOiAnXCJidXR0b25cIicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ2VsbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkQ29udHJvbGxlciA9IERpc2FibGVkQ29udHJvbGxlci5pbmplY3QoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50TWFuYWdlciA9IGluamVjdChFdmVudE1hbmFnZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbGVuZGFyU2VydmljZSA9IGluamVjdChDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHJlZ2lzdGVyZWRFdmVudElkID0gJyc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdENhbGVuZGFyQ29uZmlnKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRlTGFiZWxQaXBlID0gaW5qZWN0KERhdGVMYWJlbFBpcGUpO1xuICBwcm90ZWN0ZWQgaXNBY3RpdmUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzSGlkZGVuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBhcmlhTGFiZWwgPSAnJztcblxuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kaXNhYmxlZENvbnRyb2xsZXI/LmRpc2FibGVkO1xuICB9XG5cbiAgQENTU01vZGlmaWVyKClcbiAgcHJvdGVjdGVkIGlzQ3VycmVudCA9IGZhbHNlO1xuXG4gIEBDU1NNb2RpZmllcigpXG4gIHByb3RlY3RlZCBhZGphY2VudCA9IGZhbHNlO1xuXG4gIEBDU1NNb2RpZmllcigpXG4gIHByb3RlY3RlZCBpc0luUmFuZ2UgPSBmYWxzZTtcblxuICBAQ1NTTW9kaWZpZXIoKVxuICBwcm90ZWN0ZWQgaXNSYW5nZVN0YXJ0ID0gZmFsc2U7XG5cbiAgQENTU01vZGlmaWVyKClcbiAgcHJvdGVjdGVkIGlzUmFuZ2VFbmQgPSBmYWxzZTtcblxuICBAQ1NTTW9kaWZpZXIoKVxuICBwcm90ZWN0ZWQgaXNJblByZXZpZXdSYW5nZSA9IGZhbHNlO1xuXG4gIEBDU1NNb2RpZmllcigpXG4gIHByb3RlY3RlZCBpc1ByZXZpZXdSYW5nZVN0YXJ0ID0gZmFsc2U7XG5cbiAgQENTU01vZGlmaWVyKClcbiAgcHJvdGVjdGVkIGlzUHJldmlld1JhbmdlRW5kID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgQElucHV0KCdvZHhDYWxlbmRhckNlbGwnKVxuICBwdWJsaWMgZGF0ZSE6IERhdGU7XG5cbiAgQElucHV0KCdvZHhDYWxlbmRhckNlbGxDYWxlbmRhclZpZXcnKVxuICBwdWJsaWMgY2FsZW5kYXJWaWV3ITogQ2FsZW5kYXJWaWV3O1xuXG4gIEBJbnB1dCgnb2R4Q2FsZW5kYXJDZWxsQWN0aXZlRGF0ZScpXG4gIHB1YmxpYyBhY3RpdmVEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCdvZHhDYWxlbmRhckNlbGxTZWxlY3RlZERhdGUnKVxuICBwdWJsaWMgc2VsZWN0ZWREYXRlPzogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgnb2R4Q2FsZW5kYXJDZWxsU2VsZWN0ZWREYXRlUmFuZ2UnKVxuICBwdWJsaWMgc2VsZWN0ZWREYXRlUmFuZ2U/OiBEYXRlUmFuZ2VTdGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgnb2R4Q2FsZW5kYXJDZWxsUHJldmlld0RhdGUnKVxuICBwdWJsaWMgcHJldmlld0RhdGU/OiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IE5nQ2hhbmdlczxDYWxlbmRhckNlbGxEaXJlY3RpdmU+KTogdm9pZCB7XG4gICAgaWYgKGhhc0NoYW5nZWQoY2hhbmdlcywgWydkYXRlJywgJ2NhbGVuZGFyVmlldyddLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuYXJpYUxhYmVsID0gdGhpcy5kYXRlTGFiZWxQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGUsIGdldEExMXlMYWJlbCh0aGlzLmNhbGVuZGFyVmlldywgdGhpcy5jb25maWcpKTtcbiAgICAgIHRoaXMuaXNDdXJyZW50ID0gY2hlY2tJZGVudGljYWxEYXRlKHRoaXMuZGF0ZSwgbmV3IERhdGUoKSwgdGhpcy5jYWxlbmRhclZpZXcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2RhdGUnLCAnYWN0aXZlRGF0ZSddLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBjaGVja0lkZW50aWNhbERhdGUodGhpcy5kYXRlLCB0aGlzLmFjdGl2ZURhdGUsIHRoaXMuY2FsZW5kYXJWaWV3KTtcbiAgICAgIGlmICh0aGlzLmNhbGVuZGFyVmlldyA9PT0gQ2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgIHRoaXMuYWRqYWNlbnQgPSAhaXNTYW1lTW9udGgodGhpcy5kYXRlLCB0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLmlzSGlkZGVuID0gdGhpcy5hZGphY2VudCAmJiAhdGhpcy5jb25maWcuZGlzcGxheUFkamFjZW50RGF5cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2RhdGUnLCAnc2VsZWN0ZWREYXRlJ10sIGZhbHNlKSkge1xuICAgICAgdGhpcy5pc1NlbGVjdGVkID0gY2hlY2tJZGVudGljYWxEYXRlKHRoaXMuZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUsIHRoaXMuY2FsZW5kYXJWaWV3KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0aW9uTW9kZSA9PT0gQ2FsZW5kYXJTZWxlY3Rpb25Nb2RlLkRhdGVSYW5nZSAmJiB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlICYmIGhhc0NoYW5nZWQoY2hhbmdlcywgWydkYXRlJywgJ3NlbGVjdGVkRGF0ZVJhbmdlJ10sIGZhbHNlKSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmRhdGVSYW5nZS5zdGFydDtcbiAgICAgIHRoaXMuaXNTZWxlY3RlZCA9IGNoZWNrSWRlbnRpY2FsRGF0ZSh0aGlzLmRhdGUsIHN0YXJ0IHx8IG5ldyBEYXRlKCksIHRoaXMuY2FsZW5kYXJWaWV3KTtcbiAgICAgIGNvbnN0IHJhbmdlVmFsaWRhdGlvbiA9IGNoZWNrQ2VsbEluUmFuZ2UodGhpcy5kYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLCB0aGlzLmNhbGVuZGFyVmlldywgRGF0ZVJhbmdlU2VsZWN0aW9uU3RhdGUuRW5kU2VsZWN0ZWQpO1xuICAgICAgdGhpcy5pc1JhbmdlU3RhcnQgPSByYW5nZVZhbGlkYXRpb24uaXNSYW5nZVN0YXJ0O1xuICAgICAgdGhpcy5pc1JhbmdlRW5kID0gcmFuZ2VWYWxpZGF0aW9uLmlzUmFuZ2VFbmQ7XG4gICAgICB0aGlzLmlzSW5SYW5nZSA9IHJhbmdlVmFsaWRhdGlvbi5pc0luUmFuZ2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcuc2VsZWN0aW9uTW9kZSA9PT0gQ2FsZW5kYXJTZWxlY3Rpb25Nb2RlLkRhdGVSYW5nZSAmJlxuICAgICAgdGhpcy5wcmV2aWV3RGF0ZSAmJlxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSAmJlxuICAgICAgaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2RhdGUnLCAnc2VsZWN0ZWREYXRlUmFuZ2UnLCAncHJldmlld0RhdGUnXSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHByZXZpZXdSYW5nZTogRGF0ZVJhbmdlU3RhdGUgPSB7XG4gICAgICAgIHNlbGVjdGlvblN0YXRlOiB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnNlbGVjdGlvblN0YXRlLFxuICAgICAgICBkYXRlUmFuZ2U6IHsgc3RhcnQ6IHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZGF0ZVJhbmdlLnN0YXJ0LCBlbmQ6IHRoaXMucHJldmlld0RhdGUgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCByYW5nZVZhbGlkYXRpb24gPSBjaGVja0NlbGxJblJhbmdlKHRoaXMuZGF0ZSwgcHJldmlld1JhbmdlLCB0aGlzLmNhbGVuZGFyVmlldywgRGF0ZVJhbmdlU2VsZWN0aW9uU3RhdGUuU3RhcnRTZWxlY3RlZCk7XG4gICAgICB0aGlzLmlzUHJldmlld1JhbmdlU3RhcnQgPSByYW5nZVZhbGlkYXRpb24uaXNSYW5nZVN0YXJ0O1xuICAgICAgdGhpcy5pc1ByZXZpZXdSYW5nZUVuZCA9IHJhbmdlVmFsaWRhdGlvbi5pc1JhbmdlRW5kO1xuICAgICAgdGhpcy5pc0luUHJldmlld1JhbmdlID0gcmFuZ2VWYWxpZGF0aW9uLmlzSW5SYW5nZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgZGVmZXJGbigoKSA9PiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdGlvbk1vZGUgPT09IENhbGVuZGFyU2VsZWN0aW9uTW9kZS5EYXRlUmFuZ2UgJiYgdGhpcy5jYWxlbmRhclZpZXcgPT09IENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95TGlzdGVuZXIodGhpcy5yZWdpc3RlcmVkRXZlbnRJZCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJlZEV2ZW50SWQgPSB0aGlzLmV2ZW50TWFuYWdlci5yZWdpc3RlcihcbiAgICAgIFsnbW91c2VvdmVyJ10sXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uuc2V0SG92ZXJlZERhdGUodGhpcy5kYXRlKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICApWzBdO1xuICB9XG59XG4iXX0=
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItY2VsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbGliL2RpcmVjdGl2ZXMvY2FsZW5kYXItY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFrQnpELFdBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXFCO0lBQTNCO1FBQ1ksdUJBQWtCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFakQsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7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QUk3QixpQkFBaUI7c0JBRHZCLEtBQUs7dUJBQUMsa0NBQWtDO2dCQUlsQyxXQUFXO3NCQURqQixLQUFLO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlzYWJsZWRDb250cm9sbGVyIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCwgQ1NTTW9kaWZpZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgZGVmZXJGbiwgRXZlbnRNYW5hZ2VyLCBoYXNDaGFuZ2VkLCBpbmplY3RFbGVtZW50LCBOZ0NoYW5nZXMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgaXNTYW1lTW9udGggfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBpbmplY3RDYWxlbmRhckNvbmZpZyB9IGZyb20gJy4uL2NhbGVuZGFyLmNvbmZpZyc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyU2VsZWN0aW9uTW9kZSwgQ2FsZW5kYXJWaWV3LCBEYXRlUmFuZ2VTZWxlY3Rpb25TdGF0ZSwgRGF0ZVJhbmdlU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0ZUxhYmVsUGlwZSB9IGZyb20gJy4uL3BpcGVzJztcbmltcG9ydCB7IGNoZWNrSWRlbnRpY2FsRGF0ZSwgZ2V0QTExeUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgY2hlY2tDZWxsSW5SYW5nZSB9IGZyb20gJy4uL3V0aWxzL2NoZWNrLWNlbGwtaW4tcmFuZ2UnO1xuXG5AQ1NTQ29tcG9uZW50KCdjYWxlbmRhci1jZWxsJylcbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tvZHhDYWxlbmRhckNlbGxdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbRGlzYWJsZWRDb250cm9sbGVyLmNvbm5lY3QoKSwgRGF0ZUxhYmVsUGlwZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmlzLWRpc2FibGVkXSc6ICdpc0Rpc2FibGVkJyxcbiAgICAnW2NsYXNzLmlzLXNlbGVjdGVkXSc6ICdpc1NlbGVjdGVkJyxcbiAgICAnW2NsYXNzLmlzLWluLWFueS1yYW5nZV0nOiAnaXNJblJhbmdlIHx8IGlzSW5QcmV2aWV3UmFuZ2UnLFxuICAgICdbYXR0ci5oaWRkZW5dJzogJ2lzSGlkZGVuIHx8IG51bGwnLFxuICAgICdbdGFiaW5kZXhdJzogJ2lzQWN0aXZlID8gMCA6IC0xJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnYXJpYUxhYmVsJyxcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnaXNEaXNhYmxlZCcsXG4gICAgJ1thdHRyLnR5cGVdJzogJ1wiYnV0dG9uXCInLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNlbGxEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlZENvbnRyb2xsZXIgPSBEaXNhYmxlZENvbnRyb2xsZXIuaW5qZWN0KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE1hbmFnZXIgPSBpbmplY3QoRXZlbnRNYW5hZ2VyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWdpc3RlcmVkRXZlbnRJZCA9ICcnO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3RDYWxlbmRhckNvbmZpZygpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0ZUxhYmVsUGlwZSA9IGluamVjdChEYXRlTGFiZWxQaXBlKTtcbiAgcHJvdGVjdGVkIGlzQWN0aXZlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc1NlbGVjdGVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc0hpZGRlbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYXJpYUxhYmVsID0gJyc7XG5cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGlzYWJsZWRDb250cm9sbGVyPy5kaXNhYmxlZDtcbiAgfVxuXG4gIEBDU1NNb2RpZmllcigpXG4gIHByb3RlY3RlZCBpc0N1cnJlbnQgPSBmYWxzZTtcblxuICBAQ1NTTW9kaWZpZXIoKVxuICBwcm90ZWN0ZWQgYWRqYWNlbnQgPSBmYWxzZTtcblxuICBAQ1NTTW9kaWZpZXIoKVxuICBwcm90ZWN0ZWQgaXNJblJhbmdlID0gZmFsc2U7XG5cbiAgQENTU01vZGlmaWVyKClcbiAgcHJvdGVjdGVkIGlzUmFuZ2VTdGFydCA9IGZhbHNlO1xuXG4gIEBDU1NNb2RpZmllcigpXG4gIHByb3RlY3RlZCBpc1JhbmdlRW5kID0gZmFsc2U7XG5cbiAgQENTU01vZGlmaWVyKClcbiAgcHJvdGVjdGVkIGlzSW5QcmV2aWV3UmFuZ2UgPSBmYWxzZTtcblxuICBAQ1NTTW9kaWZpZXIoKVxuICBwcm90ZWN0ZWQgaXNQcmV2aWV3UmFuZ2VTdGFydCA9IGZhbHNlO1xuXG4gIEBDU1NNb2RpZmllcigpXG4gIHByb3RlY3RlZCBpc1ByZXZpZXdSYW5nZUVuZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIEBJbnB1dCgnb2R4Q2FsZW5kYXJDZWxsJylcbiAgcHVibGljIGRhdGUhOiBEYXRlO1xuXG4gIEBJbnB1dCgnb2R4Q2FsZW5kYXJDZWxsQ2FsZW5kYXJWaWV3JylcbiAgcHVibGljIGNhbGVuZGFyVmlldyE6IENhbGVuZGFyVmlldztcblxuICBASW5wdXQoJ29keENhbGVuZGFyQ2VsbEFjdGl2ZURhdGUnKVxuICBwdWJsaWMgYWN0aXZlRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgnb2R4Q2FsZW5kYXJDZWxsU2VsZWN0ZWREYXRlJylcbiAgcHVibGljIHNlbGVjdGVkRGF0ZT86IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoJ29keENhbGVuZGFyQ2VsbFNlbGVjdGVkRGF0ZVJhbmdlJylcbiAgcHVibGljIHNlbGVjdGVkRGF0ZVJhbmdlPzogRGF0ZVJhbmdlU3RhdGUgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoJ29keENhbGVuZGFyQ2VsbFByZXZpZXdEYXRlJylcbiAgcHVibGljIHByZXZpZXdEYXRlPzogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBOZ0NoYW5nZXM8Q2FsZW5kYXJDZWxsRGlyZWN0aXZlPik6IHZvaWQge1xuICAgIGlmIChoYXNDaGFuZ2VkKGNoYW5nZXMsIFsnZGF0ZScsICdjYWxlbmRhclZpZXcnXSwgZmFsc2UpKSB7XG4gICAgICB0aGlzLmFyaWFMYWJlbCA9IHRoaXMuZGF0ZUxhYmVsUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlLCBnZXRBMTF5TGFiZWwodGhpcy5jYWxlbmRhclZpZXcpKTtcbiAgICAgIHRoaXMuaXNDdXJyZW50ID0gY2hlY2tJZGVudGljYWxEYXRlKHRoaXMuZGF0ZSwgbmV3IERhdGUoKSwgdGhpcy5jYWxlbmRhclZpZXcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2RhdGUnLCAnYWN0aXZlRGF0ZSddLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBjaGVja0lkZW50aWNhbERhdGUodGhpcy5kYXRlLCB0aGlzLmFjdGl2ZURhdGUsIHRoaXMuY2FsZW5kYXJWaWV3KTtcbiAgICAgIGlmICh0aGlzLmNhbGVuZGFyVmlldyA9PT0gQ2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgIHRoaXMuYWRqYWNlbnQgPSAhaXNTYW1lTW9udGgodGhpcy5kYXRlLCB0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLmlzSGlkZGVuID0gdGhpcy5hZGphY2VudCAmJiAhdGhpcy5jb25maWcuZGlzcGxheUFkamFjZW50RGF5cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2RhdGUnLCAnc2VsZWN0ZWREYXRlJ10sIGZhbHNlKSkge1xuICAgICAgdGhpcy5pc1NlbGVjdGVkID0gY2hlY2tJZGVudGljYWxEYXRlKHRoaXMuZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUsIHRoaXMuY2FsZW5kYXJWaWV3KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0aW9uTW9kZSA9PT0gQ2FsZW5kYXJTZWxlY3Rpb25Nb2RlLkRhdGVSYW5nZSAmJiB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlICYmIGhhc0NoYW5nZWQoY2hhbmdlcywgWydkYXRlJywgJ3NlbGVjdGVkRGF0ZVJhbmdlJ10sIGZhbHNlKSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmRhdGVSYW5nZS5zdGFydDtcbiAgICAgIHRoaXMuaXNTZWxlY3RlZCA9IGNoZWNrSWRlbnRpY2FsRGF0ZSh0aGlzLmRhdGUsIHN0YXJ0IHx8IG5ldyBEYXRlKCksIHRoaXMuY2FsZW5kYXJWaWV3KTtcbiAgICAgIGNvbnN0IHJhbmdlVmFsaWRhdGlvbiA9IGNoZWNrQ2VsbEluUmFuZ2UodGhpcy5kYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLCB0aGlzLmNhbGVuZGFyVmlldywgRGF0ZVJhbmdlU2VsZWN0aW9uU3RhdGUuRW5kU2VsZWN0ZWQpO1xuICAgICAgdGhpcy5pc1JhbmdlU3RhcnQgPSByYW5nZVZhbGlkYXRpb24uaXNSYW5nZVN0YXJ0O1xuICAgICAgdGhpcy5pc1JhbmdlRW5kID0gcmFuZ2VWYWxpZGF0aW9uLmlzUmFuZ2VFbmQ7XG4gICAgICB0aGlzLmlzSW5SYW5nZSA9IHJhbmdlVmFsaWRhdGlvbi5pc0luUmFuZ2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcuc2VsZWN0aW9uTW9kZSA9PT0gQ2FsZW5kYXJTZWxlY3Rpb25Nb2RlLkRhdGVSYW5nZSAmJlxuICAgICAgdGhpcy5wcmV2aWV3RGF0ZSAmJlxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSAmJlxuICAgICAgaGFzQ2hhbmdlZChjaGFuZ2VzLCBbJ2RhdGUnLCAnc2VsZWN0ZWREYXRlUmFuZ2UnLCAncHJldmlld0RhdGUnXSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHByZXZpZXdSYW5nZTogRGF0ZVJhbmdlU3RhdGUgPSB7XG4gICAgICAgIHNlbGVjdGlvblN0YXRlOiB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnNlbGVjdGlvblN0YXRlLFxuICAgICAgICBkYXRlUmFuZ2U6IHsgc3RhcnQ6IHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZGF0ZVJhbmdlLnN0YXJ0LCBlbmQ6IHRoaXMucHJldmlld0RhdGUgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCByYW5nZVZhbGlkYXRpb24gPSBjaGVja0NlbGxJblJhbmdlKHRoaXMuZGF0ZSwgcHJldmlld1JhbmdlLCB0aGlzLmNhbGVuZGFyVmlldywgRGF0ZVJhbmdlU2VsZWN0aW9uU3RhdGUuU3RhcnRTZWxlY3RlZCk7XG4gICAgICB0aGlzLmlzUHJldmlld1JhbmdlU3RhcnQgPSByYW5nZVZhbGlkYXRpb24uaXNSYW5nZVN0YXJ0O1xuICAgICAgdGhpcy5pc1ByZXZpZXdSYW5nZUVuZCA9IHJhbmdlVmFsaWRhdGlvbi5pc1JhbmdlRW5kO1xuICAgICAgdGhpcy5pc0luUHJldmlld1JhbmdlID0gcmFuZ2VWYWxpZGF0aW9uLmlzSW5SYW5nZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgZGVmZXJGbigoKSA9PiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdGlvbk1vZGUgPT09IENhbGVuZGFyU2VsZWN0aW9uTW9kZS5EYXRlUmFuZ2UgJiYgdGhpcy5jYWxlbmRhclZpZXcgPT09IENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95TGlzdGVuZXIodGhpcy5yZWdpc3RlcmVkRXZlbnRJZCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJlZEV2ZW50SWQgPSB0aGlzLmV2ZW50TWFuYWdlci5yZWdpc3RlcihcbiAgICAgIFsnbW91c2VvdmVyJ10sXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uuc2V0SG92ZXJlZERhdGUodGhpcy5kYXRlKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICApWzBdO1xuICB9XG59XG4iXX0=
@@ -1,25 +1,38 @@
1
- import { Pipe } from '@angular/core';
2
- import { format } from 'date-fns';
3
- import { injectCalendarConfig } from '../calendar.config';
1
+ import { ChangeDetectorRef, Pipe, inject } from '@angular/core';
2
+ import { WindowRef } from '@odx/angular';
3
+ import { fastDeepEqual } from '@odx/angular/internal';
4
+ import { LocalizationService } from '@odx/angular/localization';
4
5
  import * as i0 from "@angular/core";
5
6
  export class DateLabelPipe {
6
7
  constructor() {
7
- this.config = injectCalendarConfig();
8
+ this.localizationService = inject(LocalizationService);
9
+ this.windowRef = inject(WindowRef);
10
+ this.cdr = inject(ChangeDetectorRef);
11
+ this.lastValue = null;
12
+ this.lastFormatOptions = null;
13
+ this.formattedValue = '';
8
14
  }
9
- transform(value, dateFormat) {
15
+ transform(value, formatOptions) {
10
16
  if (!value)
11
17
  return '';
12
- return format(value, dateFormat, { locale: this.config.locale.getValue() });
18
+ if (value === this.lastValue && fastDeepEqual(formatOptions, this.lastFormatOptions)) {
19
+ return this.formattedValue;
20
+ }
21
+ this.formattedValue = this.windowRef.nativeWindow.Intl.DateTimeFormat(this.localizationService.getActiveLanguage(), formatOptions).format(value);
22
+ this.lastValue = value;
23
+ this.lastFormatOptions = formatOptions;
24
+ this.cdr.markForCheck();
25
+ return this.formattedValue;
13
26
  }
14
27
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
15
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, isStandalone: true, name: "odxDateLabel" }); }
28
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, isStandalone: true, name: "odxDateLabel", pure: false }); }
16
29
  }
17
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, decorators: [{
18
31
  type: Pipe,
19
32
  args: [{
20
33
  standalone: true,
21
34
  name: 'odxDateLabel',
22
- pure: true,
35
+ pure: false,
23
36
  }]
24
37
  }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1sYWJlbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvY2FsZW5kYXIvc3JjL2xpYi9waXBlcy9kYXRlLWxhYmVsLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFPMUQsTUFBTSxPQUFPLGFBQWE7SUFMMUI7UUFNa0IsV0FBTSxHQUFHLG9CQUFvQixFQUFFLENBQUM7S0FPakQ7SUFMUSxTQUFTLENBQUMsS0FBa0IsRUFBRSxVQUFrQjtRQUNyRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7K0dBUFUsYUFBYTs2R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUx6QixJQUFJO21CQUFDO29CQUNKLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsY0FBYztvQkFDcEIsSUFBSSxFQUFFLElBQUk7aUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBpbmplY3RDYWxlbmRhckNvbmZpZyB9IGZyb20gJy4uL2NhbGVuZGFyLmNvbmZpZyc7XG5cbkBQaXBlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgbmFtZTogJ29keERhdGVMYWJlbCcsXG4gIHB1cmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVMYWJlbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdENhbGVuZGFyQ29uZmlnKCk7XG5cbiAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogRGF0ZSB8IG51bGwsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuXG4gICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgZGF0ZUZvcm1hdCwgeyBsb2NhbGU6IHRoaXMuY29uZmlnLmxvY2FsZS5nZXRWYWx1ZSgpIH0pO1xuICB9XG59XG4iXX0=
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1sYWJlbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvY2FsZW5kYXIvc3JjL2xpYi9waXBlcy9kYXRlLWxhYmVsLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU9oRSxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQU1tQix3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6QyxjQUFTLEdBQWdCLElBQUksQ0FBQztRQUM5QixzQkFBaUIsR0FBc0MsSUFBSSxDQUFDO1FBQzVELG1CQUFjLEdBQUcsRUFBRSxDQUFDO0tBZ0I3QjtJQWRRLFNBQVMsQ0FBQyxLQUFrQixFQUFFLGFBQXlDO1FBQzVFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3BGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakosSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDOytHQXJCVSxhQUFhOzZHQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBTHpCLElBQUk7bUJBQUM7b0JBQ0osVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBmYXN0RGVlcEVxdWFsIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcblxuQFBpcGUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBuYW1lOiAnb2R4RGF0ZUxhYmVsJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVMYWJlbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25TZXJ2aWNlID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgbGFzdFZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdEZvcm1hdE9wdGlvbnM6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZm9ybWF0dGVkVmFsdWUgPSAnJztcblxuICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBEYXRlIHwgbnVsbCwgZm9ybWF0T3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcblxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5sYXN0VmFsdWUgJiYgZmFzdERlZXBFcXVhbChmb3JtYXRPcHRpb25zLCB0aGlzLmxhc3RGb3JtYXRPcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5JbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5nZXRBY3RpdmVMYW5ndWFnZSgpLCBmb3JtYXRPcHRpb25zKS5mb3JtYXQodmFsdWUpO1xuICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sYXN0Rm9ybWF0T3B0aW9ucyA9IGZvcm1hdE9wdGlvbnM7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgfVxufVxuIl19
@@ -1,10 +1,12 @@
1
1
  import { CalendarView } from '../models';
2
- const labelResolvers = {
3
- [CalendarView.Month]: (config) => config.dayA11yLabel,
4
- [CalendarView.Year]: (config) => config.monthA11yLabel,
5
- [CalendarView.Years]: (config) => config.yearA11yLabel,
6
- };
7
- export function getA11yLabel(calendarView, config) {
8
- return labelResolvers[calendarView](config);
2
+ export function getA11yLabel(calendarView) {
3
+ switch (calendarView) {
4
+ case CalendarView.Year:
5
+ return { month: 'long', year: 'numeric' };
6
+ case CalendarView.Years:
7
+ return { year: 'numeric' };
8
+ default:
9
+ return { month: 'long', day: '2-digit', year: 'numeric' };
10
+ }
9
11
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LUExMXktbGFiZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbGliL3V0aWxzL2dldC1BMTF5LWxhYmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsTUFBTSxjQUFjLEdBQTZEO0lBQy9FLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBc0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDckUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFzQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYztJQUN0RSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQXNCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhO0NBQ3ZFLENBQUM7QUFFRixNQUFNLFVBQVUsWUFBWSxDQUFDLFlBQTBCLEVBQUUsTUFBc0I7SUFDN0UsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbGVuZGFyQ29uZmlnIH0gZnJvbSAnLi4vY2FsZW5kYXIuY29uZmlnJztcbmltcG9ydCB7IENhbGVuZGFyVmlldyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmNvbnN0IGxhYmVsUmVzb2x2ZXJzOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCAoY29uZmlnOiBDYWxlbmRhckNvbmZpZykgPT4gc3RyaW5nPiA9IHtcbiAgW0NhbGVuZGFyVmlldy5Nb250aF06IChjb25maWc6IENhbGVuZGFyQ29uZmlnKSA9PiBjb25maWcuZGF5QTExeUxhYmVsLFxuICBbQ2FsZW5kYXJWaWV3LlllYXJdOiAoY29uZmlnOiBDYWxlbmRhckNvbmZpZykgPT4gY29uZmlnLm1vbnRoQTExeUxhYmVsLFxuICBbQ2FsZW5kYXJWaWV3LlllYXJzXTogKGNvbmZpZzogQ2FsZW5kYXJDb25maWcpID0+IGNvbmZpZy55ZWFyQTExeUxhYmVsLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEExMXlMYWJlbChjYWxlbmRhclZpZXc6IENhbGVuZGFyVmlldywgY29uZmlnOiBDYWxlbmRhckNvbmZpZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYWJlbFJlc29sdmVyc1tjYWxlbmRhclZpZXddKGNvbmZpZyk7XG59XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LUExMXktbGFiZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbGliL3V0aWxzL2dldC1BMTF5LWxhYmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUEwQjtJQUNyRCxRQUFRLFlBQVksRUFBRTtRQUNwQixLQUFLLFlBQVksQ0FBQyxJQUFJO1lBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUU1QyxLQUFLLFlBQVksQ0FBQyxLQUFLO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFFN0I7WUFDRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztLQUM3RDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYWxlbmRhclZpZXcgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QTExeUxhYmVsKGNhbGVuZGFyVmlldzogQ2FsZW5kYXJWaWV3KTogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMge1xuICBzd2l0Y2ggKGNhbGVuZGFyVmlldykge1xuICAgIGNhc2UgQ2FsZW5kYXJWaWV3LlllYXI6XG4gICAgICByZXR1cm4geyBtb250aDogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycgfTtcblxuICAgIGNhc2UgQ2FsZW5kYXJWaWV3LlllYXJzOlxuICAgICAgcmV0dXJuIHsgeWVhcjogJ251bWVyaWMnIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgbW9udGg6ICdsb25nJywgZGF5OiAnMi1kaWdpdCcsIHllYXI6ICdudW1lcmljJyB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { deepEqual } from 'fast-equals';
2
+ export const fastDeepEqual = (obj1, obj2) => deepEqual(obj1, obj2);
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC1lcXVhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW50ZXJuYWwvc3JjL2xpYi9oZWxwZXJzL2Zhc3QtZXF1YWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBYSxFQUFFLElBQWEsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJ2Zhc3QtZXF1YWxzJztcblxuZXhwb3J0IGNvbnN0IGZhc3REZWVwRXF1YWwgPSAob2JqMTogdW5rbm93biwgb2JqMjogdW5rbm93bikgPT4gZGVlcEVxdWFsKG9iajEsIG9iajIpO1xuIl19
@@ -1,6 +1,7 @@
1
1
  export * from './camel-to-kebab-case';
2
2
  export * from './decorator-property-name';
3
3
  export * from './deepmerge';
4
+ export * from './fast-equals';
4
5
  export * from './get-css-variables';
5
6
  export * from './get-enum-values';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW50ZXJuYWwvc3JjL2xpYi9oZWxwZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NhbWVsLXRvLWtlYmFiLWNhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3ItcHJvcGVydHktbmFtZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlZXBtZXJnZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1jc3MtdmFyaWFibGVzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWVudW0tdmFsdWVzJztcbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW50ZXJuYWwvc3JjL2xpYi9oZWxwZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NhbWVsLXRvLWtlYmFiLWNhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3ItcHJvcGVydHktbmFtZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlZXBtZXJnZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zhc3QtZXF1YWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWNzcy12YXJpYWJsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtZW51bS12YWx1ZXMnO1xuIl19
@@ -1,11 +1,9 @@
1
1
  import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
2
- import { createConfigTokens, getLanguageCode } from '@odx/angular/utils';
2
+ import { createConfigTokens } from '@odx/angular/utils';
3
3
  import { LocalizationService } from './localization.service';
4
- export const DEFAULT_AVAILABLE_LOCALES = ['en-US', 'en-GB', 'de-DE', 'es-ES', 'fr-FR', 'fr-CA'];
5
- export const DEFAULT_AVAILABLE_LANGUAGES = Array.from(new Set(DEFAULT_AVAILABLE_LOCALES.map(getLanguageCode)));
4
+ export const DEFAULT_AVAILABLE_LANGUAGES = ['en-US', 'en-GB', 'en', 'de-DE', 'de', 'es-ES', 'es', 'fr-FR', 'fr-CA', 'fr'];
6
5
  export const { LocalizationConfig, LocalizationDefaultConfig, injectLocalizationConfig, provideLocalizationConfig } = createConfigTokens('Localization', '@odx/angular/internal/translate', {
7
6
  availableLanguages: DEFAULT_AVAILABLE_LANGUAGES,
8
- availableLocales: DEFAULT_AVAILABLE_LOCALES,
9
7
  });
10
8
  export function provideLocalization(config, ...features) {
11
9
  return makeEnvironmentProviders([
@@ -19,4 +17,4 @@ export function provideLocalization(config, ...features) {
19
17
  features,
20
18
  ]);
21
19
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9sb2NhbGl6YXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEcsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBUS9HLE1BQU0sQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxrQkFBa0IsQ0FDdEksY0FBYyxFQUNkLGlDQUFpQyxFQUNqQztJQUNFLGtCQUFrQixFQUFFLDJCQUEyQjtJQUMvQyxnQkFBZ0IsRUFBRSx5QkFBeUI7Q0FDdEIsQ0FDeEIsQ0FBQztBQUVGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFtQyxFQUFFLEdBQUcsUUFBK0I7SUFDekcsT0FBTyx3QkFBd0IsQ0FBQztRQUM5Qix5QkFBeUIsQ0FBQyxNQUFNLENBQUM7UUFDakM7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxtQkFBd0MsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUU7WUFDeEcsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDM0IsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNELFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVDb25maWdUb2tlbnMsIGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBMYW5ndWFnZUxvYWRlckZuLCBMb2NhbGl6YXRpb25GZWF0dXJlIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BVkFJTEFCTEVfTE9DQUxFUyA9IFsnZW4tVVMnLCAnZW4tR0InLCAnZGUtREUnLCAnZXMtRVMnLCAnZnItRlInLCAnZnItQ0EnXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0FWQUlMQUJMRV9MQU5HVUFHRVMgPSBBcnJheS5mcm9tKG5ldyBTZXQoREVGQVVMVF9BVkFJTEFCTEVfTE9DQUxFUy5tYXAoZ2V0TGFuZ3VhZ2VDb2RlKSkpO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXphdGlvbkNvbmZpZyB7XG4gIGFjdGl2ZUxhbmd1YWdlTG9hZGVyPzogTGFuZ3VhZ2VMb2FkZXJGbjtcbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgYXZhaWxhYmxlTG9jYWxlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCB7IExvY2FsaXphdGlvbkNvbmZpZywgTG9jYWxpemF0aW9uRGVmYXVsdENvbmZpZywgaW5qZWN0TG9jYWxpemF0aW9uQ29uZmlnLCBwcm92aWRlTG9jYWxpemF0aW9uQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoXG4gICdMb2NhbGl6YXRpb24nLFxuICAnQG9keC9hbmd1bGFyL2ludGVybmFsL3RyYW5zbGF0ZScsXG4gIHtcbiAgICBhdmFpbGFibGVMYW5ndWFnZXM6IERFRkFVTFRfQVZBSUxBQkxFX0xBTkdVQUdFUyxcbiAgICBhdmFpbGFibGVMb2NhbGVzOiBERUZBVUxUX0FWQUlMQUJMRV9MT0NBTEVTLFxuICB9IGFzIExvY2FsaXphdGlvbkNvbmZpZyxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTG9jYWxpemF0aW9uKGNvbmZpZzogUGFydGlhbDxMb2NhbGl6YXRpb25Db25maWc+LCAuLi5mZWF0dXJlczogTG9jYWxpemF0aW9uRmVhdHVyZVtdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICBwcm92aWRlTG9jYWxpemF0aW9uQ29uZmlnKGNvbmZpZyksXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UpID0+ICgpID0+IGxvY2FsaXphdGlvblNlcnZpY2UubG9hZEFjdGl2ZUxhbmd1YWdlKCksXG4gICAgICBkZXBzOiBbTG9jYWxpemF0aW9uU2VydmljZV0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIGZlYXR1cmVzLFxuICBdKTtcbn1cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9sb2NhbGl6YXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFNMUgsTUFBTSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxHQUFHLGtCQUFrQixDQUN0SSxjQUFjLEVBQ2QsaUNBQWlDLEVBQ2pDO0lBQ0Usa0JBQWtCLEVBQUUsMkJBQTJCO0NBQzFCLENBQ3hCLENBQUM7QUFFRixNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBbUMsRUFBRSxHQUFHLFFBQStCO0lBQ3pHLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIseUJBQXlCLENBQUMsTUFBTSxDQUFDO1FBQ2pDO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLENBQUMsbUJBQXdDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFO1lBQ3hHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQzNCLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlQ29uZmlnVG9rZW5zIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmd1YWdlTG9hZGVyRm4sIExvY2FsaXphdGlvbkZlYXR1cmUgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FWQUlMQUJMRV9MQU5HVUFHRVMgPSBbJ2VuLVVTJywgJ2VuLUdCJywgJ2VuJywgJ2RlLURFJywgJ2RlJywgJ2VzLUVTJywgJ2VzJywgJ2ZyLUZSJywgJ2ZyLUNBJywgJ2ZyJ107XG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXphdGlvbkNvbmZpZyB7XG4gIGFjdGl2ZUxhbmd1YWdlTG9hZGVyPzogTGFuZ3VhZ2VMb2FkZXJGbjtcbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IHsgTG9jYWxpemF0aW9uQ29uZmlnLCBMb2NhbGl6YXRpb25EZWZhdWx0Q29uZmlnLCBpbmplY3RMb2NhbGl6YXRpb25Db25maWcsIHByb3ZpZGVMb2NhbGl6YXRpb25Db25maWcgfSA9IGNyZWF0ZUNvbmZpZ1Rva2VucyhcbiAgJ0xvY2FsaXphdGlvbicsXG4gICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJyxcbiAge1xuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogREVGQVVMVF9BVkFJTEFCTEVfTEFOR1VBR0VTLFxuICB9IGFzIExvY2FsaXphdGlvbkNvbmZpZyxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTG9jYWxpemF0aW9uKGNvbmZpZzogUGFydGlhbDxMb2NhbGl6YXRpb25Db25maWc+LCAuLi5mZWF0dXJlczogTG9jYWxpemF0aW9uRmVhdHVyZVtdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICBwcm92aWRlTG9jYWxpemF0aW9uQ29uZmlnKGNvbmZpZyksXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UpID0+ICgpID0+IGxvY2FsaXphdGlvblNlcnZpY2UubG9hZEFjdGl2ZUxhbmd1YWdlKCksXG4gICAgICBkZXBzOiBbTG9jYWxpemF0aW9uU2VydmljZV0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIGZlYXR1cmVzLFxuICBdKTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { Logger } from '@odx/angular/internal';
2
+ export default new Logger('@odx/angular/localization');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9sb2NhbGl6YXRpb24ubG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxlQUFlLElBQUksTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgTG9nZ2VyKCdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJyk7XG4iXX0=
@@ -1,51 +1,42 @@
1
1
  import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';
2
- import { getLanguageCode } from '@odx/angular/utils';
3
- import { BehaviorSubject, distinctUntilChanged, filter, firstValueFrom, from, isObservable, of, shareReplay } from 'rxjs';
2
+ import { BehaviorSubject, distinctUntilChanged, filter, firstValueFrom, from, isObservable, map, of, shareReplay } from 'rxjs';
4
3
  import { injectLocalizationConfig } from './localization.config';
4
+ import logger from './localization.logger';
5
5
  import * as i0 from "@angular/core";
6
6
  export class LocalizationService {
7
7
  constructor() {
8
- this.injector = inject(Injector);
9
8
  this.localizationConfig = injectLocalizationConfig();
10
- this.activeLanguage$$ = new BehaviorSubject(undefined);
11
- this.activeLocale$$ = new BehaviorSubject(undefined);
12
- this.activeLanguage$ = this.activeLanguage$$.pipe(filter(Boolean), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
9
+ this.injector = inject(Injector);
10
+ this.localeState$ = new BehaviorSubject(new Intl.Locale(this.localizationConfig.availableLanguages[0]));
11
+ this.activeLanguage$ = this.localeState$.pipe(filter(Boolean), map((x) => x.baseName), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
13
12
  this.availableLanguages = this.localizationConfig.availableLanguages;
14
13
  this.defaultLanguage = this.availableLanguages[0];
15
- this.availableLocales = this.localizationConfig.availableLocales;
16
- this.defaultLocale = this.availableLocales[0];
17
14
  }
18
15
  getActiveLanguage() {
19
- return this.activeLanguage$$.getValue() ?? this.defaultLanguage;
16
+ return this.localeState$.getValue()?.baseName ?? new Intl.Locale(this.defaultLanguage).baseName; // returns full locale name e.g. 'en-US' or just 'en' if no region info is attached
17
+ }
18
+ getActiveLanguageSubtag() {
19
+ return this.localeState$.getValue()?.language ?? new Intl.Locale(this.defaultLanguage).language; // returns two digits language subtag, e.g. 'en', 'fr'
20
20
  }
21
21
  setActiveLanguage(language) {
22
- if (this.availableLanguages.includes(language)) {
23
- this.activeLanguage$$.next(language);
24
- return;
22
+ try {
23
+ const locale = new Intl.Locale(language);
24
+ if (this.availableLanguages.includes(locale.baseName) || this.availableLanguages.includes(locale.language)) {
25
+ this.localeState$.next(locale);
26
+ }
27
+ else {
28
+ throw new Error(`Unrecognizable language '${language}'. Make sure it's a part of availableLanguages inside LocalizationService config.`);
29
+ }
25
30
  }
26
- const languageCode = getLanguageCode(language);
27
- if (this.availableLanguages.includes(languageCode)) {
28
- this.activeLanguage$$.next(languageCode);
29
- return;
30
- }
31
- this.activeLanguage$$.next(this.defaultLanguage);
32
- }
33
- getActiveLocale() {
34
- return this.activeLocale$$.getValue() ?? this.defaultLocale;
35
- }
36
- setActiveLocale(locale) {
37
- if (this.availableLocales.includes(locale)) {
38
- this.activeLocale$$.next(locale);
39
- return;
31
+ catch (error) {
32
+ logger.error(error);
40
33
  }
41
- this.activeLocale$$.next(this.defaultLocale);
42
34
  }
43
35
  async loadActiveLanguage() {
44
36
  return runInInjectionContext(this.injector, async () => {
45
37
  const activeLanguageLoader$ = this.createActiveLanguageLoader$();
46
38
  const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);
47
39
  this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);
48
- this.setActiveLocale(activeLanguage ?? this.defaultLocale);
49
40
  });
50
41
  }
51
42
  createActiveLanguageLoader$() {
@@ -65,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
65
56
  type: Injectable,
66
57
  args: [{ providedIn: 'root' }]
67
58
  }] });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFjLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUdqRSxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRW1CLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUM7UUFDdEUsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUM7UUFFckUsb0JBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0SSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUM7UUFDaEUsb0JBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO1FBQzVELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0tBa0QxRDtJQWhEUSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNsRSxDQUFDO0lBRU0saUJBQWlCLENBQUMsUUFBZ0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsT0FBTztTQUNSO1FBQ0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlELENBQUM7SUFFTSxlQUFlLENBQUMsTUFBYztRQUNuQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCO1FBQzdCLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sY0FBYyxHQUFHLE1BQU0sY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztRQUNsRSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELElBQUksUUFBUSxZQUFZLE9BQU8sRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7K0dBM0RVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRE4sTUFBTTs7NEZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBpc09ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxpemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24uY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxpemF0aW9uQ29uZmlnID0gaW5qZWN0TG9jYWxpemF0aW9uQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlTGFuZ3VhZ2UkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZUxvY2FsZSQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZUxhbmd1YWdlJCA9IHRoaXMuYWN0aXZlTGFuZ3VhZ2UkJC5waXBlKGZpbHRlcihCb29sZWFuKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLmxvY2FsaXphdGlvbkNvbmZpZy5hdmFpbGFibGVMYW5ndWFnZXM7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2UgPSB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1swXTtcbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJsZUxvY2FsZXMgPSB0aGlzLmxvY2FsaXphdGlvbkNvbmZpZy5hdmFpbGFibGVMb2NhbGVzO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdExvY2FsZSA9IHRoaXMuYXZhaWxhYmxlTG9jYWxlc1swXTtcblxuICBwdWJsaWMgZ2V0QWN0aXZlTGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVMYW5ndWFnZSQkLmdldFZhbHVlKCkgPz8gdGhpcy5kZWZhdWx0TGFuZ3VhZ2U7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5pbmNsdWRlcyhsYW5ndWFnZSkpIHtcbiAgICAgIHRoaXMuYWN0aXZlTGFuZ3VhZ2UkJC5uZXh0KGxhbmd1YWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gZ2V0TGFuZ3VhZ2VDb2RlKGxhbmd1YWdlKTtcbiAgICBpZiAodGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuaW5jbHVkZXMobGFuZ3VhZ2VDb2RlKSkge1xuICAgICAgdGhpcy5hY3RpdmVMYW5ndWFnZSQkLm5leHQobGFuZ3VhZ2VDb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVMYW5ndWFnZSQkLm5leHQodGhpcy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZUxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUxvY2FsZSQkLmdldFZhbHVlKCkgPz8gdGhpcy5kZWZhdWx0TG9jYWxlO1xuICB9XG5cbiAgcHVibGljIHNldEFjdGl2ZUxvY2FsZShsb2NhbGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF2YWlsYWJsZUxvY2FsZXMuaW5jbHVkZXMobG9jYWxlKSkge1xuICAgICAgdGhpcy5hY3RpdmVMb2NhbGUkJC5uZXh0KGxvY2FsZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlTG9jYWxlJCQubmV4dCh0aGlzLmRlZmF1bHRMb2NhbGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRBY3RpdmVMYW5ndWFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2ZUxhbmd1YWdlTG9hZGVyJCA9IHRoaXMuY3JlYXRlQWN0aXZlTGFuZ3VhZ2VMb2FkZXIkKCk7XG4gICAgICBjb25zdCBhY3RpdmVMYW5ndWFnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGFjdGl2ZUxhbmd1YWdlTG9hZGVyJCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICB0aGlzLnNldEFjdGl2ZUxhbmd1YWdlKGFjdGl2ZUxhbmd1YWdlID8/IHRoaXMuZGVmYXVsdExhbmd1YWdlKTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlTG9jYWxlKGFjdGl2ZUxhbmd1YWdlID8/IHRoaXMuZGVmYXVsdExvY2FsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFjdGl2ZUxhbmd1YWdlTG9hZGVyJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5sb2NhbGl6YXRpb25Db25maWcuYWN0aXZlTGFuZ3VhZ2VMb2FkZXI/LigpO1xuICAgIGlmIChpc09ic2VydmFibGUobGFuZ3VhZ2UpKSB7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHJldHVybiBmcm9tKGxhbmd1YWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKGxhbmd1YWdlKTtcbiAgfVxufVxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQWMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sTUFBTSxNQUFNLHVCQUF1QixDQUFDOztBQUczQyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRW1CLHVCQUFrQixHQUFHLHdCQUF3QixFQUFFLENBQUM7UUFDaEQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUEwQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3SCxvQkFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0RCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQ3RCLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFYyx1QkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUM7UUFDaEUsb0JBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7S0F5QzlEO0lBdkNRLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsbUZBQW1GO0lBQ3RMLENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNEQUFzRDtJQUN6SixDQUFDO0lBRU0saUJBQWlCLENBQUMsUUFBZ0I7UUFDdkMsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMxRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoQztpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixRQUFRLG1GQUFtRixDQUFDLENBQUM7YUFDMUk7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCO1FBQzdCLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sY0FBYyxHQUFHLE1BQU0sY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1FBQ2xFLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsQ0FBQzsrR0FyRFUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FETixNQUFNOzs0RkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdFZhbHVlRnJvbSwgZnJvbSwgaXNPYnNlcnZhYmxlLCBtYXAsIG9mLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxpemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24uY29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2NhbGl6YXRpb24ubG9nZ2VyJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25Db25maWcgPSBpbmplY3RMb2NhbGl6YXRpb25Db25maWcoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRsLkxvY2FsZSB8IHVuZGVmaW5lZD4obmV3IEludGwuTG9jYWxlKHRoaXMubG9jYWxpemF0aW9uQ29uZmlnLmF2YWlsYWJsZUxhbmd1YWdlc1swXSkpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVMYW5ndWFnZSQgPSB0aGlzLmxvY2FsZVN0YXRlJC5waXBlKFxuICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICBtYXAoKHgpID0+IHguYmFzZU5hbWUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gdGhpcy5sb2NhbGl6YXRpb25Db25maWcuYXZhaWxhYmxlTGFuZ3VhZ2VzO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdExhbmd1YWdlID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNbMF07XG5cbiAgcHVibGljIGdldEFjdGl2ZUxhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlU3RhdGUkLmdldFZhbHVlKCk/LmJhc2VOYW1lID8/IG5ldyBJbnRsLkxvY2FsZSh0aGlzLmRlZmF1bHRMYW5ndWFnZSkuYmFzZU5hbWU7IC8vIHJldHVybnMgZnVsbCBsb2NhbGUgbmFtZSBlLmcuICdlbi1VUycgb3IganVzdCAnZW4nIGlmIG5vIHJlZ2lvbiBpbmZvIGlzIGF0dGFjaGVkXG4gIH1cblxuICBwdWJsaWMgZ2V0QWN0aXZlTGFuZ3VhZ2VTdWJ0YWcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVTdGF0ZSQuZ2V0VmFsdWUoKT8ubGFuZ3VhZ2UgPz8gbmV3IEludGwuTG9jYWxlKHRoaXMuZGVmYXVsdExhbmd1YWdlKS5sYW5ndWFnZTsgLy8gcmV0dXJucyB0d28gZGlnaXRzIGxhbmd1YWdlIHN1YnRhZywgZS5nLiAnZW4nLCAnZnInXG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSBuZXcgSW50bC5Mb2NhbGUobGFuZ3VhZ2UpO1xuICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKGxvY2FsZS5iYXNlTmFtZSkgfHwgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuaW5jbHVkZXMobG9jYWxlLmxhbmd1YWdlKSkge1xuICAgICAgICB0aGlzLmxvY2FsZVN0YXRlJC5uZXh0KGxvY2FsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXphYmxlIGxhbmd1YWdlICcke2xhbmd1YWdlfScuIE1ha2Ugc3VyZSBpdCdzIGEgcGFydCBvZiBhdmFpbGFibGVMYW5ndWFnZXMgaW5zaWRlIExvY2FsaXphdGlvblNlcnZpY2UgY29uZmlnLmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkQWN0aXZlTGFuZ3VhZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVMYW5ndWFnZUxvYWRlciQgPSB0aGlzLmNyZWF0ZUFjdGl2ZUxhbmd1YWdlTG9hZGVyJCgpO1xuICAgICAgY29uc3QgYWN0aXZlTGFuZ3VhZ2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShhY3RpdmVMYW5ndWFnZUxvYWRlciQpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgdGhpcy5zZXRBY3RpdmVMYW5ndWFnZShhY3RpdmVMYW5ndWFnZSA/PyB0aGlzLmRlZmF1bHRMYW5ndWFnZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFjdGl2ZUxhbmd1YWdlTG9hZGVyJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5sb2NhbGl6YXRpb25Db25maWcuYWN0aXZlTGFuZ3VhZ2VMb2FkZXI/LigpO1xuICAgIGlmIChpc09ic2VydmFibGUobGFuZ3VhZ2UpKSB7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHJldHVybiBmcm9tKGxhbmd1YWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKGxhbmd1YWdlKTtcbiAgfVxufVxuIl19
@@ -1,17 +1,17 @@
1
1
  import { __decorate, __metadata } from 'tslib';
2
2
  import { A11yModule } from '@angular/cdk/a11y';
3
3
  import * as i0 from '@angular/core';
4
- import { EventEmitter, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, Pipe, inject, Directive } from '@angular/core';
4
+ import { EventEmitter, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, inject, ChangeDetectorRef, Pipe, Directive } from '@angular/core';
5
5
  import * as i2 from '@odx/angular';
6
- import { CoreModule, DisabledController } from '@odx/angular';
7
- import { CSSComponent, CSSModifier } from '@odx/angular/internal';
6
+ import { CoreModule, WindowRef, DisabledController } from '@odx/angular';
7
+ import { CSSComponent, fastDeepEqual, CSSModifier } from '@odx/angular/internal';
8
8
  import { createConfigTokens, isString, isPresent, injectElement, hasChanged, EventManager, deferFn, untilDestroyed, trackByIndex, isFunction } from '@odx/angular/utils';
9
- import { enGB } from 'date-fns/locale';
9
+ import { isSameDay, isSameMonth, isSameYear, endOfDay, endOfMonth, endOfYear, startOfDay, startOfMonth, startOfYear, isValid, toDate, isBefore, isEqual, addMonths, subMonths, isWithinInterval, startOfWeek, addDays, endOfWeek, eachMonthOfInterval, addYears, getYear, setYear, subDays, subWeeks, addWeeks, setMonth, getMonth } from 'date-fns';
10
10
  import { BehaviorSubject, shareReplay, map, filter, distinctUntilChanged, merge, defer, of, withLatestFrom } from 'rxjs';
11
- import { isSameDay, isSameMonth, isSameYear, endOfDay, endOfMonth, endOfYear, startOfDay, startOfMonth, startOfYear, isValid, toDate, isBefore, isEqual, addMonths, subMonths, format, isWithinInterval, startOfWeek, addDays, endOfWeek, eachMonthOfInterval, addYears, getYear, setYear, subDays, subWeeks, addWeeks, setMonth, getMonth } from 'date-fns';
12
11
  import { ActionGroupComponent } from '@odx/angular/components/action-group';
13
12
  import { ButtonComponent } from '@odx/angular/components/button';
14
13
  import { IconComponent } from '@odx/angular/components/icon';
14
+ import { LocalizationService } from '@odx/angular/localization';
15
15
  import * as i1 from '@angular/common';
16
16
  import { DOCUMENT } from '@angular/common';
17
17
  import * as i3 from '@ngrx/component';
@@ -23,16 +23,7 @@ var CalendarSelectionMode;
23
23
  })(CalendarSelectionMode || (CalendarSelectionMode = {}));
24
24
 
25
25
  const { CalendarConfig, CalendarDefaultConfig, injectCalendarConfig, provideCalendarConfig } = createConfigTokens('Calendar', '@odx/angular/components/calendar', {
26
- monthYearLabel: 'LLLL yyyy',
27
- monthLabel: 'LLL',
28
- weekLabel: 'EEEEE',
29
- dayLabel: 'd',
30
- yearLabel: 'yyyy',
31
- dayA11yLabel: 'MMMM dd, yyyy',
32
- monthA11yLabel: 'MMMM, yyyy',
33
- yearA11yLabel: 'yyyy',
34
26
  displayAdjacentDays: true,
35
- locale: new BehaviorSubject(enGB),
36
27
  selectionMode: CalendarSelectionMode.Date,
37
28
  yearView: {
38
29
  itemsPerRow: 3,
@@ -71,13 +62,15 @@ function checkIdenticalDate(currentDate, date, calendarView) {
71
62
  return dateValidators$4[calendarView](currentDate, date);
72
63
  }
73
64
 
74
- const labelResolvers = {
75
- [CalendarView.Month]: (config) => config.dayA11yLabel,
76
- [CalendarView.Year]: (config) => config.monthA11yLabel,
77
- [CalendarView.Years]: (config) => config.yearA11yLabel,
78
- };
79
- function getA11yLabel(calendarView, config) {
80
- return labelResolvers[calendarView](config);
65
+ function getA11yLabel(calendarView) {
66
+ switch (calendarView) {
67
+ case CalendarView.Year:
68
+ return { month: 'long', year: 'numeric' };
69
+ case CalendarView.Years:
70
+ return { year: 'numeric' };
71
+ default:
72
+ return { month: 'long', day: '2-digit', year: 'numeric' };
73
+ }
81
74
  }
82
75
 
83
76
  const dateValidators$3 = {
@@ -238,22 +231,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
238
231
 
239
232
  class DateLabelPipe {
240
233
  constructor() {
241
- this.config = injectCalendarConfig();
242
- }
243
- transform(value, dateFormat) {
234
+ this.localizationService = inject(LocalizationService);
235
+ this.windowRef = inject(WindowRef);
236
+ this.cdr = inject(ChangeDetectorRef);
237
+ this.lastValue = null;
238
+ this.lastFormatOptions = null;
239
+ this.formattedValue = '';
240
+ }
241
+ transform(value, formatOptions) {
244
242
  if (!value)
245
243
  return '';
246
- return format(value, dateFormat, { locale: this.config.locale.getValue() });
244
+ if (value === this.lastValue && fastDeepEqual(formatOptions, this.lastFormatOptions)) {
245
+ return this.formattedValue;
246
+ }
247
+ this.formattedValue = this.windowRef.nativeWindow.Intl.DateTimeFormat(this.localizationService.getActiveLanguage(), formatOptions).format(value);
248
+ this.lastValue = value;
249
+ this.lastFormatOptions = formatOptions;
250
+ this.cdr.markForCheck();
251
+ return this.formattedValue;
247
252
  }
248
253
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
249
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, isStandalone: true, name: "odxDateLabel" }); }
254
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, isStandalone: true, name: "odxDateLabel", pure: false }); }
250
255
  }
251
256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateLabelPipe, decorators: [{
252
257
  type: Pipe,
253
258
  args: [{
254
259
  standalone: true,
255
260
  name: 'odxDateLabel',
256
- pure: true,
261
+ pure: false,
257
262
  }]
258
263
  }] });
259
264
 
@@ -313,7 +318,7 @@ let CalendarCellDirective = class CalendarCellDirective {
313
318
  }
314
319
  ngOnChanges(changes) {
315
320
  if (hasChanged(changes, ['date', 'calendarView'], false)) {
316
- this.ariaLabel = this.dateLabelPipe.transform(this.date, getA11yLabel(this.calendarView, this.config));
321
+ this.ariaLabel = this.dateLabelPipe.transform(this.date, getA11yLabel(this.calendarView));
317
322
  this.isCurrent = checkIdenticalDate(this.date, new Date(), this.calendarView);
318
323
  }
319
324
  if (this.activeDate && hasChanged(changes, ['date', 'activeDate'], false)) {
@@ -612,14 +617,14 @@ let CalendarMonthComponent = class CalendarMonthComponent extends CalendarViewDi
612
617
  this.calendar.selectDate(value, { emitOutside: true });
613
618
  }
614
619
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarMonthComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
615
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarMonthComponent, isStandalone: true, selector: "odx-calendar-month", providers: [CalendarMonthService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (previous)=\"previousMonth($event)\"\n (next)=\"nextMonth($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.monthYearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ day | odxDateLabel: config.weekLabel }}\n </td>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n [odxCalendarCellPreviewDate]=\"previewDate\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: config.dayLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate", "odxCalendarCellSelectedDateRange", "odxCalendarCellPreviewDate"] }, { kind: "component", type: CalendarHeaderComponent, selector: "odx-calendar-header", inputs: ["activeDate", "calendarView", "minDate", "maxDate"], outputs: ["previous", "next", "changeView"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
620
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarMonthComponent, isStandalone: true, selector: "odx-calendar-month", providers: [CalendarMonthService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (previous)=\"previousMonth($event)\"\n (next)=\"nextMonth($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: { month: 'long', year: 'numeric' } }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ (day | odxDateLabel: { weekday: 'short' }).charAt(0) }}\n </td>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n [odxCalendarCellPreviewDate]=\"previewDate\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: { day: 'numeric' } }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate", "odxCalendarCellSelectedDateRange", "odxCalendarCellPreviewDate"] }, { kind: "component", type: CalendarHeaderComponent, selector: "odx-calendar-header", inputs: ["activeDate", "calendarView", "minDate", "maxDate"], outputs: ["previous", "next", "changeView"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
616
621
  };
617
622
  CalendarMonthComponent = __decorate([
618
623
  CSSComponent('calendar-month')
619
624
  ], CalendarMonthComponent);
620
625
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarMonthComponent, decorators: [{
621
626
  type: Component,
622
- args: [{ selector: 'odx-calendar-month', standalone: true, imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CalendarMonthService], template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (previous)=\"previousMonth($event)\"\n (next)=\"nextMonth($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.monthYearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ day | odxDateLabel: config.weekLabel }}\n </td>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n [odxCalendarCellPreviewDate]=\"previewDate\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: config.dayLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
627
+ args: [{ selector: 'odx-calendar-month', standalone: true, imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CalendarMonthService], template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (previous)=\"previousMonth($event)\"\n (next)=\"nextMonth($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: { month: 'long', year: 'numeric' } }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ (day | odxDateLabel: { weekday: 'short' }).charAt(0) }}\n </td>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n [odxCalendarCellPreviewDate]=\"previewDate\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: { day: 'numeric' } }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
623
628
  }] });
624
629
 
625
630
  let CalendarYearComponent = class CalendarYearComponent extends CalendarViewDirective {
@@ -655,14 +660,14 @@ let CalendarYearComponent = class CalendarYearComponent extends CalendarViewDire
655
660
  this.changeView();
656
661
  }
657
662
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarYearComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
658
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearComponent, isStandalone: true, selector: "odx-calendar-year", providers: [CalendarYearService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header\n (previous)=\"previousYear($event)\"\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (next)=\"nextYear($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.yearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: config.monthLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate", "odxCalendarCellSelectedDateRange", "odxCalendarCellPreviewDate"] }, { kind: "component", type: CalendarHeaderComponent, selector: "odx-calendar-header", inputs: ["activeDate", "calendarView", "minDate", "maxDate"], outputs: ["previous", "next", "changeView"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
663
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearComponent, isStandalone: true, selector: "odx-calendar-year", providers: [CalendarYearService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header\n (previous)=\"previousYear($event)\"\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (next)=\"nextYear($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: { year: 'numeric' } }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: { month: 'short' } }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate", "odxCalendarCellSelectedDateRange", "odxCalendarCellPreviewDate"] }, { kind: "component", type: CalendarHeaderComponent, selector: "odx-calendar-header", inputs: ["activeDate", "calendarView", "minDate", "maxDate"], outputs: ["previous", "next", "changeView"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
659
664
  };
660
665
  CalendarYearComponent = __decorate([
661
666
  CSSComponent('calendar-year')
662
667
  ], CalendarYearComponent);
663
668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarYearComponent, decorators: [{
664
669
  type: Component,
665
- args: [{ selector: 'odx-calendar-year', standalone: true, imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CalendarYearService], template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header\n (previous)=\"previousYear($event)\"\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (next)=\"nextYear($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.yearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: config.monthLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
670
+ args: [{ selector: 'odx-calendar-year', standalone: true, imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CalendarYearService], template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header\n (previous)=\"previousYear($event)\"\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (next)=\"nextYear($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: { year: 'numeric' } }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: { month: 'short' } }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
666
671
  }] });
667
672
 
668
673
  let CalendarYearsComponent = class CalendarYearsComponent extends CalendarViewDirective {
@@ -704,14 +709,14 @@ let CalendarYearsComponent = class CalendarYearsComponent extends CalendarViewDi
704
709
  }
705
710
  }
706
711
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarYearsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
707
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearsComponent, isStandalone: true, selector: "odx-calendar-years", providers: [CalendarYearsService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate", "odxCalendarCellSelectedDateRange", "odxCalendarCellPreviewDate"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
712
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearsComponent, isStandalone: true, selector: "odx-calendar-years", providers: [CalendarYearsService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: { year: 'numeric' } }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate", "odxCalendarCellSelectedDateRange", "odxCalendarCellPreviewDate"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
708
713
  };
709
714
  CalendarYearsComponent = __decorate([
710
715
  CSSComponent('calendar-years')
711
716
  ], CalendarYearsComponent);
712
717
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarYearsComponent, decorators: [{
713
718
  type: Component,
714
- args: [{ selector: 'odx-calendar-years', standalone: true, imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CalendarYearsService], template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
719
+ args: [{ selector: 'odx-calendar-years', standalone: true, imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CalendarYearsService], template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n [odxCalendarCellSelectedDateRange]=\"selectedDateRange\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: { year: 'numeric' } }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
715
720
  }] });
716
721
 
717
722
  class DaterangeService {