@fundamental-ngx/core 0.61.2-rc.9 → 0.61.3

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 (120) hide show
  1. package/fesm2022/fundamental-ngx-core-action-sheet.mjs +2 -3
  2. package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  3. package/fesm2022/fundamental-ngx-core-avatar-group.mjs +4 -6
  4. package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  5. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +13 -11
  6. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  7. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +7 -5
  8. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  9. package/fesm2022/fundamental-ngx-core-calendar.mjs +31 -35
  10. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  11. package/fesm2022/fundamental-ngx-core-carousel.mjs +2 -2
  12. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  13. package/fesm2022/fundamental-ngx-core-combobox.mjs +3 -5
  14. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-date-picker.mjs +2 -2
  16. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +2 -2
  18. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-datetime.mjs +13 -7
  20. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-core-dialog.mjs +16 -11
  22. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +13 -13
  24. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +2 -2
  26. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-core-form.mjs +1 -1
  28. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-core-grid-list.mjs +4 -4
  30. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-core-info-label.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-core-inline-help.mjs +65 -59
  34. package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
  36. package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-core-menu.mjs +5 -5
  38. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-core-message-box.mjs +7 -7
  40. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-core-message-strip.mjs +49 -44
  42. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +20 -25
  44. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-core-multi-input.mjs +8 -6
  46. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-core-nested-list.mjs +21 -22
  48. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-core-notification.mjs +16 -13
  50. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-object-identifier.mjs +2 -2
  52. package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-core-object-number.mjs +2 -2
  54. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  55. package/fesm2022/fundamental-ngx-core-object-status.mjs +2 -2
  56. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  57. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +2 -2
  58. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  59. package/fesm2022/fundamental-ngx-core-pagination.mjs +14 -11
  60. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  61. package/fesm2022/fundamental-ngx-core-popover.mjs +9 -3
  62. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  63. package/fesm2022/fundamental-ngx-core-product-switch.mjs +2 -2
  64. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +7 -4
  66. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  67. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +11 -10
  68. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  69. package/fesm2022/fundamental-ngx-core-select.mjs +6 -7
  70. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-core-shellbar.mjs +6 -6
  72. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-core-slider.mjs +6 -6
  74. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-core-split-button.mjs +2 -2
  76. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  77. package/fesm2022/fundamental-ngx-core-step-input.mjs +2 -2
  78. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  79. package/fesm2022/fundamental-ngx-core-switch.mjs +2 -2
  80. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  81. package/fesm2022/fundamental-ngx-core-tabs.mjs +2 -2
  82. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-text.mjs +2 -2
  84. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-time-picker.mjs +29 -4
  86. package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-time.mjs +4 -4
  88. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-token.mjs +15 -12
  90. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-toolbar.mjs +3 -5
  92. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-tree.mjs +4 -4
  94. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +4 -4
  96. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-user-menu.mjs +3 -5
  98. package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +2 -2
  100. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  101. package/package.json +3 -3
  102. package/types/fundamental-ngx-core-breadcrumb.d.ts +5 -5
  103. package/types/fundamental-ngx-core-busy-indicator.d.ts +3 -3
  104. package/types/fundamental-ngx-core-combobox.d.ts +2 -4
  105. package/types/fundamental-ngx-core-datetime.d.ts +5 -1
  106. package/types/fundamental-ngx-core-dialog.d.ts +1 -1
  107. package/types/fundamental-ngx-core-dynamic-page.d.ts +2 -1
  108. package/types/fundamental-ngx-core-inline-help.d.ts +45 -24
  109. package/types/fundamental-ngx-core-menu.d.ts +0 -2
  110. package/types/fundamental-ngx-core-message-box.d.ts +1 -1
  111. package/types/fundamental-ngx-core-message-strip.d.ts +12 -3
  112. package/types/fundamental-ngx-core-multi-combobox.d.ts +1 -1
  113. package/types/fundamental-ngx-core-nested-list.d.ts +10 -10
  114. package/types/fundamental-ngx-core-notification.d.ts +7 -5
  115. package/types/fundamental-ngx-core-pagination.d.ts +4 -3
  116. package/types/fundamental-ngx-core-rating-indicator.d.ts +2 -3
  117. package/types/fundamental-ngx-core-segmented-button.d.ts +5 -3
  118. package/types/fundamental-ngx-core-slider.d.ts +1 -1
  119. package/types/fundamental-ngx-core-time-picker.d.ts +17 -1
  120. package/types/fundamental-ngx-core-token.d.ts +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-calendar.mjs","sources":["../../../../libs/core/calendar/calendar-directives.ts","../../../../libs/core/calendar/calendar.service.ts","../../../../libs/core/calendar/types.ts","../../../../libs/core/calendar/calendar-header/calendar-header.component.ts","../../../../libs/core/calendar/calendar-header/calendar-header.component.html","../../../../libs/core/calendar/calendar-legend/calendar-legend-focusing.service.ts","../../../../libs/core/calendar/calendar-legend/calendar-legend-item.component.ts","../../../../libs/core/calendar/calendar-legend/calendar-legend.component.ts","../../../../libs/core/calendar/models/common.ts","../../../../libs/core/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.html","../../../../libs/core/calendar/models/calendar-day.ts","../../../../libs/core/calendar/models/date-range.ts","../../../../libs/core/calendar/calendar-views/calendar-day-view/calendar-day-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-day-view/calendar-day-view.component.html","../../../../libs/core/calendar/calendar-views/calendar-month-view/calendar-month-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-month-view/calendar-month-view.component.html","../../../../libs/core/calendar/calendar-views/calendar-year-view/calendar-year-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-year-view/calendar-year-view.component.html","../../../../libs/core/calendar/calendar-errors.ts","../../../../libs/core/calendar/i18n/calendar-i18n-labels.ts","../../../../libs/core/calendar/patch-deprecated-i18n-labels.ts","../../../../libs/core/calendar/calendar.component.ts","../../../../libs/core/calendar/calendar.component.html","../../../../libs/core/calendar/calendar.module.ts","../../../../libs/core/calendar/fundamental-ngx-core-calendar.ts"],"sourcesContent":["import { Attribute, Directive } from '@angular/core';\nimport { resolveTranslationSignal } from '@fundamental-ngx/i18n';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-calendar-close-button]',\n host: {\n class: 'fd-calendar__close-button',\n '[attr.aria-label]': '_originalAriaLabel || _closeCalendarLabel()',\n '[attr.title]': '_originalTitle || _closeCalendarLabel()'\n },\n standalone: true\n})\nexport class CalendarCloseButtonDirective {\n /** @hidden */\n protected _closeCalendarLabel = resolveTranslationSignal('coreCalendar.closeCalendarLabel');\n\n /** @hidden */\n constructor(\n @Attribute('aria-label') protected _originalAriaLabel: string,\n @Attribute('title') protected _originalTitle: string\n ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { EscapeFocusFunction } from './models/common';\n\n@Injectable()\nexport class CalendarService {\n /** Row amount */\n rowAmount = 3;\n\n /** Column amount */\n colAmount = 4;\n\n /** Event thrown, when the element is selected by space or enter keys */\n onKeySelect: Subject<{ index: number; event: KeyboardEvent }> = new Subject<{\n index: number;\n event: KeyboardEvent;\n }>();\n\n /** Event thrown, when the focus goes after list of elements */\n onListEndApproach: Subject<number> = new Subject<number>();\n\n /** Event thrown, when the focus goes before list of elements */\n onListStartApproach: Subject<number> = new Subject<number>();\n\n /** Event thrown, when the focus is changed. */\n onFocusIdChange: Subject<number> = new Subject<number>();\n\n /** Left Arrow Id, which will be focused by default on focus escape */\n leftArrowId: string;\n\n /** Function that is called when the focus would escape the element. */\n focusEscapeFunction: EscapeFocusFunction;\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /**\n * Standardized method to calculate grid [x][y] to index number\n */\n getId(row: number, col: number): number {\n return row * this.colAmount + col;\n }\n\n /**\n * Method that handles keydown events, dedicated for All Calendar views, which have a list with row x col elements.\n * Triggers the events, when the focus approaches start and end of list. Or when there is basic change of focus.\n * Triggers also event, when the element is selected by enter key, or space bar.\n * @param event KeyboardEvent\n * @param index which is number (0 - (rowAmount * colAmount))\n */\n onKeydownHandler(event: KeyboardEvent, index: number): void {\n const rtl = this._rtlService?.rtl() ?? false;\n\n switch (event.key) {\n case 'Spacebar':\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.onKeySelect.next({ index, event });\n break;\n }\n case 'Left':\n case 'ArrowLeft': {\n event.preventDefault();\n if (!rtl) {\n this.focusLeftElement(index);\n } else {\n this.focusRightElement(index);\n }\n break;\n }\n case 'Right':\n case 'ArrowRight': {\n event.preventDefault();\n if (!rtl) {\n this.focusRightElement(index);\n } else {\n this.focusLeftElement(index);\n }\n break;\n }\n case 'Up':\n case 'ArrowUp': {\n event.preventDefault();\n if (index <= this.colAmount - 1) {\n this.onListStartApproach.next(this.getId(this.rowAmount - 1, 0) + index);\n } else {\n this.onFocusIdChange.next(index - this.colAmount);\n }\n break;\n }\n case 'Down':\n case 'ArrowDown': {\n event.preventDefault();\n if (index >= this.getId(this.rowAmount - 1, 0)) {\n this.onListEndApproach.next(index - this.getId(this.rowAmount - 1, 0));\n } else {\n this.onFocusIdChange.next(index + this.colAmount);\n }\n break;\n }\n case 'Tab': {\n if (!event.shiftKey) {\n if (typeof this.focusEscapeFunction === 'function') {\n this.focusEscapeFunction(event);\n } else {\n const element = document.getElementById(this.leftArrowId);\n if (element) {\n element.focus();\n }\n }\n event.preventDefault();\n break;\n }\n }\n }\n }\n\n /**\n * @hidden\n * Right Element focus trigger\n */\n focusRightElement(index: number): void {\n if (index === this.getId(this.rowAmount, 0) - 1) {\n this.onListEndApproach.next(0);\n } else {\n this.onFocusIdChange.next(index + 1);\n }\n }\n\n /**\n * @hidden\n * Left Element focus trigger\n */\n focusLeftElement(index: number): void {\n if (index === 0) {\n this.onListStartApproach.next(this.getId(this.rowAmount, 0) - 1);\n } else {\n this.onFocusIdChange.next(index - 1);\n }\n }\n}\n","import { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { CalendarCurrent } from './models/calendar-current';\n\n/** Type of calendar */\nexport type CalendarType = 'single' | 'range';\n\n/** Enum of calendarTypes */\nexport enum CalendarTypeEnum {\n Single = 'single',\n Range = 'range'\n}\n\n/** Type for the calendar view */\nexport type FdCalendarView = 'day' | 'month' | 'year' | 'aggregatedYear';\n\n/** Type for the calendar view */\nexport enum FdCalendarViewEnum {\n Day = 'day',\n Month = 'month',\n Year = 'year',\n AggregatedYear = 'aggregatedYear'\n}\n\n/** Type for the days of the week. */\nexport type DaysOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport type NavigationButtonDisableFunction<D> = (\n date: Nullable<D>,\n currentlyDisplayedDate: CalendarCurrent,\n activeView: FdCalendarView\n) => boolean;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../calendar.service';\nimport { CalendarCurrent } from '../models/calendar-current';\nimport { CalendarYearGrid } from '../models/calendar-year-grid';\nimport { FdCalendarView, FdCalendarViewEnum } from '../types';\n\n/**\n * Internal use only.\n * Header of the calendar component.\n */\n@Component({\n selector: 'fd-calendar-header',\n templateUrl: './calendar-header.component.html',\n styleUrl: './calendar-header.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarHeaderComponent<D> implements OnInit, OnChanges {\n /** Currently active view. Needed for a11y labels. */\n @Input()\n activeView: FdCalendarView;\n\n /** Currently displayed date on the calendar. */\n @Input()\n currentlyDisplayed: CalendarCurrent;\n\n /** whether previous navigation button should be disabled in the header. */\n @Input()\n previousButtonDisabled: boolean;\n\n /** whether next navigation button should be disabled in the header. */\n @Input()\n nextButtonDisabled: boolean;\n\n /**\n * Object to customize year grid\n */\n @Input()\n set calendarYearGrid(yearGrid: CalendarYearGrid) {\n this._amountOfYearsPerPeriod = yearGrid.cols * yearGrid.rows - 1;\n this._calculateSelectAggregatedYearLabel();\n }\n\n /** Calendar ID */\n @Input()\n id: string;\n\n /** Whether calendar should be rendered in mobile landscape mode. */\n @Input()\n mobileLandscape = false;\n\n /** Event emitted when the active view should change. */\n @Output()\n readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event emitted when the previous button is clicked. */\n @Output()\n readonly previousClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the next button is clicked. */\n @Output()\n readonly nextClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild('prevButton', { read: ElementRef })\n _prevButtonComponent: ElementRef;\n\n /** Aria label for the previous button. Depends on the active view. */\n get previousAriaLabel(): 'coreCalendar.previousMonthLabel' | 'coreCalendar.previousYearLabel' {\n return this.isOnDayView ? 'coreCalendar.previousMonthLabel' : 'coreCalendar.previousYearLabel';\n }\n\n /** Aria label for the next button. Depends on the active view. */\n get nextAriaLabel(): 'coreCalendar.nextMonthLabel' | 'coreCalendar.nextYearLabel' {\n return this.isOnDayView ? 'coreCalendar.nextMonthLabel' : 'coreCalendar.nextYearLabel';\n }\n\n /** Button aria label to open month selection view. */\n get selectMonthAriaLabel(): 'coreCalendar.monthSelectionLabel' | 'coreCalendar.dateSelectionLabel' {\n return this.isOnMonthView ? 'coreCalendar.dateSelectionLabel' : 'coreCalendar.monthSelectionLabel';\n }\n\n /** Button aria label to open aggregated years selection view. */\n get selectAggregatedYearAriaLabel(): 'coreCalendar.yearsRangeSelectionLabel' | 'coreCalendar.dateSelectionLabel' {\n return this.isOnAggregatedYearsView\n ? 'coreCalendar.dateSelectionLabel'\n : 'coreCalendar.yearsRangeSelectionLabel';\n }\n\n /** Button label to open month selection view. */\n selectMonthLabel: string;\n\n /** Button label to open year selection view. */\n selectYearLabel: string;\n\n /** Button label to open aggregated years selection view. */\n selectAggregatedYearLabel: string;\n\n /** Get information is calendar is on aggregated years view */\n get isOnAggregatedYearsView(): boolean {\n return this.activeView === FdCalendarViewEnum.AggregatedYear;\n }\n\n /** Get information is calendar is on year view */\n get isOnYearView(): boolean {\n return this.activeView === FdCalendarViewEnum.Year;\n }\n\n /** Get information is calendar is on month view */\n get isOnMonthView(): boolean {\n return this.activeView === FdCalendarViewEnum.Month;\n }\n\n /** Get information is calendar is on day view */\n get isOnDayView(): boolean {\n return this.activeView === FdCalendarViewEnum.Day;\n }\n\n /**\n * Component id\n */\n get viewId(): string {\n return this.id + '-header';\n }\n\n /**\n * @hidden\n * Previous button id\n */\n get _prevButtonId(): string {\n return this.viewId + '-left-arrow';\n }\n\n /**\n * @hidden\n * Next button id\n */\n get _nextButtonId(): string {\n return this.viewId + '-right-arrow';\n }\n\n /**\n * @hidden\n * Month label id\n */\n get _monthButtonLabelId(): string {\n return this.viewId + '-month-label';\n }\n\n /**\n * @hidden\n * Select month aria label id\n */\n get _selectMonthButtonAriaLabelId(): string {\n return this.viewId + '-select-month-aria-label';\n }\n\n /**\n * @hidden\n * Year label id\n */\n get _yearButtonLabelId(): string {\n return this.viewId + '-year-label';\n }\n\n /**\n * @hidden\n * Select year aria label id\n */\n get _selectYearButtonAriaLabelId(): string {\n return this.viewId + '-select-year-aria-label';\n }\n\n /**\n * @hidden\n * Years range label id\n */\n get _yearsRangeButtonLabelId(): string {\n return this.viewId + '-years-range-label';\n }\n\n /**\n * @hidden\n * Select years range aria label id\n */\n get _selectYearsRangeButtonAriaLabelId(): string {\n return this.viewId + '-select-years-range-aria-label';\n }\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** Month names */\n private _monthNames: string[] = [];\n\n /** Get information about amount of years displayed at once on year view */\n private _amountOfYearsPerPeriod = 1;\n\n /** @hidden */\n constructor(\n private _changeDetRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n private _dateTimeAdapter: DatetimeAdapter<D>\n ) {}\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes.currentlyDisplayed && !changes.currentlyDisplayed.firstChange) ||\n (changes.activeView && !changes.activeView.firstChange)\n ) {\n this._calculateLabels();\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._calendarService.leftArrowId = this._prevButtonId;\n\n this._calculateMonthNames();\n\n this._calculateLabels();\n\n this._listenToLocaleChanges();\n }\n\n /**\n * Focus on focusable control within the header\n */\n focus(): void {\n this._prevButtonComponent.nativeElement?.focus();\n }\n\n /** @hidden */\n _processViewChange(type: FdCalendarView, event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n\n this.activeView = type === this.activeView ? FdCalendarViewEnum.Day : type;\n\n this.activeViewChange.emit(this.activeView);\n }\n\n /** @hidden */\n private _listenToLocaleChanges(): void {\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._calculateMonthNames();\n this._calculateLabels();\n this._changeDetRef.markForCheck();\n });\n }\n\n /** @hidden */\n private _calculateLabels(): void {\n this._calculateSelectMonthLabel();\n this._calculateSelectYearLabel();\n this._calculateSelectAggregatedYearLabel();\n }\n\n /** @hidden */\n private _calculateSelectMonthLabel(): void {\n this.selectMonthLabel = this._monthNames[this._getNormalizedDate().month - 1];\n }\n\n /** @hidden */\n private _calculateSelectYearLabel(): void {\n this.selectYearLabel = this._getYearName(this._getNormalizedDate().year);\n }\n\n /** @hidden */\n private _calculateSelectAggregatedYearLabel(): void {\n this.selectAggregatedYearLabel = `${this._getYearName(this._getNormalizedDate().year)}-${this._getYearName(\n this._getNormalizedDate().year + this._amountOfYearsPerPeriod\n )}`;\n }\n\n /** @hidden */\n private _calculateMonthNames(): void {\n this._monthNames = this._dateTimeAdapter.getMonthNames('long');\n }\n\n /** @hidden */\n private _getYearName(year: number): string {\n return this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year));\n }\n\n /** @hidden */\n private _getNormalizedDate(): CalendarCurrent {\n return {\n year: isNaN(this.currentlyDisplayed.year)\n ? this._dateTimeAdapter.getYear(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.year,\n month: isNaN(this.currentlyDisplayed.month)\n ? this._dateTimeAdapter.getMonth(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.month\n };\n }\n}\n","<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"(previousAriaLabel | fdTranslate)()\"\n [ariaLabel]=\"(previousAriaLabel | fdTranslate)()\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n @if (isOnDayView || isOnMonthView) {\n @if (!isOnMonthView) {\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n }\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n }\n @if (isOnAggregatedYearsView || isOnYearView) {\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n }\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"(nextAriaLabel | fdTranslate)()\"\n [ariaLabel]=\"(nextAriaLabel | fdTranslate)()\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ (selectMonthAriaLabel | fdTranslate)() }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ ('coreCalendar.yearSelectionLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ (selectAggregatedYearAriaLabel | fdTranslate)() }}</div>\n</div>\n","import { Injectable, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\n@Injectable()\nexport class CalendarLegendFocusingService {\n /** Signal to track the focused special day number. Only one legend item can have focus at a time. */\n readonly focusedSpecialDayNumber = signal<Nullable<number>>(null);\n\n /** Clearing the focused element */\n clearFocusedElement(): void {\n this.focusedSpecialDayNumber.set(null);\n }\n\n /** Setting the special day number that is currently focused */\n handleLegendItemFocus(specialDayNumber: Nullable<number>): void {\n this.focusedSpecialDayNumber.set(specialDayNumber);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n ViewEncapsulation\n} from '@angular/core';\n\n@Component({\n selector: 'fd-calendar-legend-item',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"fd-calendar-legend__marker\"></span>\n <span class=\"fd-calendar-legend__text\">\n <ng-content>{{ text() }}</ng-content>\n </span>\n `,\n host: {\n tabindex: '0',\n '[class]': '_componentClasses()'\n }\n})\nexport class CalendarLegendItemComponent {\n /** The text of the legend item */\n text = input<string | undefined>();\n\n /** The color of the legend item marker */\n color = input<string>();\n\n /** If the marker is a circle or a square */\n circle = input<boolean>();\n\n /** @hidden */\n class = input<string | undefined>('');\n\n /** @hidden */\n readonly elementRef = inject(ElementRef);\n\n /** @hidden Computed CSS classes based on inputs */\n protected readonly _componentClasses = computed(() => {\n const classes = ['fd-calendar-legend__item'];\n\n classes.push(this.class()!);\n\n if (this.circle()) {\n classes.push('fd-calendar-legend__item--appointment');\n }\n\n if (this.color()) {\n classes.push(`fd-calendar-legend__item--${this.color()}`);\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { FocusableItemDirective, FocusableListDirective, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarLegendFocusingService } from './calendar-legend-focusing.service';\nimport { CalendarLegendItemComponent } from './calendar-legend-item.component';\n\n@Component({\n selector: 'fd-calendar-legend',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content></ng-content>\n <ng-container>\n <div fdkFocusableList>\n @if (displayTodayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--today\"\n [text]=\"('coreCalendar.todayLabel' | fdTranslate)()\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displaySelectedLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--selected\"\n [text]=\"('coreCalendar.dateSelectedLabel' | fdTranslate)()\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--work\"\n [text]=\"('coreCalendar.workDayLabel' | fdTranslate)()\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayNonWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--non-work\"\n [text]=\"('coreCalendar.nonWorkDayLabel' | fdTranslate)()\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n\n @for (rule of specialDaysRules(); track rule.specialDayNumber) {\n <fd-calendar-legend-item\n fdkFocusableItem\n [text]=\"rule.legendText\"\n [circle]=\"rule.appointment\"\n [color]=\"'placeholder-' + rule.specialDayNumber\"\n (focus)=\"_handleFocusedElementEvent(rule.specialDayNumber)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n </div>\n </ng-container>\n `,\n host: {\n class: 'fd-calendar-legend',\n '[class.fd-calendar-legend--auto-column]': 'col()'\n },\n imports: [CalendarLegendItemComponent, FocusableListDirective, FocusableItemDirective, FdTranslatePipe]\n})\nexport class CalendarLegendComponent<D> {\n /**\n * Make it a column instead\n */\n col = input<boolean>(false);\n\n /** Whether to display the legend item for today's date. */\n displayTodayLegendItem = input<boolean>(true);\n\n /** Whether to display the legend item for the currently selected date. */\n displaySelectedLegendItem = input<boolean>(true);\n\n /** Whether to display the legend item for work days. */\n displayWorkDayLegendItem = input<boolean>(true);\n\n /** Whether to display the legend item for non-work days. */\n displayNonWorkDayLegendItem = input<boolean>(true);\n\n /**\n * Special days rules to be displayed in the legend\n */\n specialDaysRules = input<SpecialDayRule<D>[]>([]);\n\n /** @hidden */\n private readonly _focusingService = inject(CalendarLegendFocusingService, { optional: true });\n\n /** @hidden */\n _handleFocusedElementEvent(specialDayNumber: Nullable<number>): void {\n this._focusingService?.handleLegendItemFocus(specialDayNumber);\n }\n}\n","import { Nullable } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Base Calendar Cell\n */\nexport interface BaseCalendarCell {\n /** Representation in string */\n label: string;\n /** cell unique id */\n id?: string;\n /** currently active (today) */\n current?: boolean;\n /** selected cell */\n selected?: boolean;\n /** disabled cell */\n disabled?: boolean;\n /** cell tabindex */\n tabIndex?: number;\n /** aria-label */\n ariaLabel?: string;\n /** aria-labelledby */\n ariaLabelledBy?: string;\n /** list index */\n index?: number;\n}\n\nexport interface FocusableCalendarView {\n setFocusOnCell(): void;\n}\n\n/**\n * Calendar active cell strategy\n */\nexport abstract class AbstractCalendarActiveCellStrategy<T extends BaseCalendarCell = BaseCalendarCell> {\n /**\n * Calculate which table cell should be active\n */\n abstract getActiveCell(cells: T[]): T | null;\n}\n\nexport class DefaultCalendarActiveCellStrategy<\n T extends BaseCalendarCell = BaseCalendarCell\n> extends AbstractCalendarActiveCellStrategy<T> {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells: T[]): T | null {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n return cells[0] || null;\n }\n}\n\nexport type EscapeFocusFunction = Nullable<(event?: KeyboardEvent) => void>;\n\nexport type DisableDateFunction<D> = Nullable<(date: D) => boolean>;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { AggregatedYear, CalendarAggregatedYear } from '../../models/aggregated-year';\nimport { CalendarYearGrid } from '../../models/calendar-year-grid';\nimport { DefaultCalendarActiveCellStrategy, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\n\n@Component({\n selector: 'fd-calendar-aggregated-year-view',\n templateUrl: './calendar-aggregated-year-view.component.html',\n styleUrl: './calendar-aggregated-year-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'viewId'\n },\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarAggregatedYearViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** Parameter used in id of years used for help with focusing on the correct element during keyboard navigation. */\n @Input()\n id: string;\n\n /** Function that is called when the focus would escape the element. */\n @Input()\n focusEscapeFunction: EscapeFocusFunction;\n\n /** Parameter holding the year that is currently selected. */\n @Input()\n yearSelected: number;\n\n /**\n * Object to customize aggregated year grid\n */\n @Input()\n aggregatedYearsViewGrid: CalendarYearGrid;\n\n /**\n * Object to customize year grid\n */\n @Input()\n yearViewGrid: CalendarYearGrid;\n\n /** Event fired when a year is selected. */\n @Output()\n readonly yearsClicked: EventEmitter<AggregatedYear> = new EventEmitter<AggregatedYear>();\n\n /**\n * View ID\n */\n get viewId(): string {\n return this.id + '-years-range-view';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /**\n * @hidden\n * This variable is used to define which year from calendarYearList should be focusable by tab key\n */\n _activeYear: AggregatedYear;\n\n /**\n * @hidden\n * Parameter that stores the dozen of years that are currently being displayed.\n */\n _calendarYearListGrid: CalendarAggregatedYear[][];\n\n /**\n * @hidden\n * Current period of years selected\n */\n _yearsSelected: AggregatedYear | null;\n\n /**\n * @hidden\n * Parameter storing the year of the present day.\n */\n _currentYear: number;\n\n /**\n * @hidden\n * Parameter storing first shown year on list\n */\n private _firstYearInList: number;\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _initiated = false;\n\n /** @hidden */\n constructor(\n private _eRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n private _dateTimeAdapter: DatetimeAdapter<D>,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n ) {\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._initiated = true;\n\n this._setupKeyboardService();\n\n this._firstYearInList = this.yearSelected - this._yearsInOnePeriod();\n\n this._constructYearsGrid();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearsGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (\n this._initiated &&\n ('yearSelected' in changes ||\n 'aggregatedYearsViewGrid' in changes ||\n 'yearViewGrid' in changes ||\n 'id' in changes)\n ) {\n this._constructYearsGrid();\n }\n }\n\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear: CalendarAggregatedYear, event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this._yearsSelected = selectedYear.years;\n this.yearsClicked.emit(this._yearsSelected);\n }\n\n /** Method used to load the previous 12 years to be displayed. */\n loadNextYearsList(): void {\n this._firstYearInList += this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n\n /** Method used to load the next 12 years to be displayed. */\n loadPreviousYearsList(): void {\n this._firstYearInList -= this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell(): void {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearsList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n\n /** Method for handling the keyboard navigation. */\n _onKeydownYearHandler(event: KeyboardEvent, index: number): void {\n this._calendarService.onKeydownHandler(event, index);\n }\n\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Method returning index of aggregated year index cell\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * Get id of calendar's aggregated year item\n */\n _getId(index: number): string {\n return this.viewId + '-aggregated-years-' + index;\n }\n\n /**\n * @hidden\n * Check if specified year is between start year and end year)\n */\n _isBetween(aggregatedYear: AggregatedYear, yearToCheck: number): boolean {\n return aggregatedYear.endYear >= yearToCheck && aggregatedYear.startYear <= yearToCheck;\n }\n\n /** @hidden */\n private _constructYearsGrid(): void {\n const displayedYearsAmount: number = this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n const calendarYearList: CalendarAggregatedYear[] = [];\n this._calendarYearListGrid = [];\n\n for (let index = 0; index < displayedYearsAmount; ++index) {\n /**\n * Generates object with certain period of years,\n * which depends on amount of years displayed in year view\n */\n\n const years: AggregatedYear = {\n startYear: this._firstYearInList + this._yearsInOnePeriod() * index,\n endYear: this._firstYearInList + this._yearsInOnePeriod() * (index + 1) - 1\n };\n\n calendarYearList.push({\n years,\n label: this._getYearsName(years),\n ariaLabel: this._getAriaYearsName(years),\n selected: this._isBetween(years, this.yearSelected),\n current: this._isBetween(years, this._currentYear),\n index\n });\n }\n\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.aggregatedYearsViewGrid.cols));\n }\n\n const yearsCellSelected = calendarYearList.find((cell) => this._isBetween(cell.years, this.yearSelected));\n this._yearsSelected = yearsCellSelected ? yearsCellSelected.years : null;\n this._activeYear = this._getActiveYear();\n\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.years === this._activeYear ? 0 : -1;\n });\n });\n\n this._changeDetectorRef.detectChanges();\n }\n\n /**\n * @hidden\n * Returns year name as a string.\n */\n private _getYearsName(years: AggregatedYear): string {\n const startYearFormatted = this._dateTimeAdapter.getYearName(\n this._dateTimeAdapter.createDate(years.startYear, 1, 1)\n );\n const endYearFormatted = this._dateTimeAdapter.getYearName(\n this._dateTimeAdapter.createDate(years.endYear, 1, 1)\n );\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(\n years.endYear,\n endYearFormatted\n )}`;\n }\n\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n private _getAriaYearsName(years: AggregatedYear): string {\n const startYearFormatted = this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(years.startYear, 1, 1),\n this._dateTimeFormats.display.yearA11yLabel\n );\n const endYearFormatted = this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(years.endYear, 1, 1),\n this._dateTimeFormats.display.yearA11yLabel\n );\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(\n years.endYear,\n endYearFormatted\n )}`;\n }\n\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n private _getYearString(year: number, defaultStr: string): string {\n if (typeof this.aggregatedYearsViewGrid.yearMapping === 'function') {\n return this.aggregatedYearsViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n private _yearsInOnePeriod(): number {\n if (this.yearViewGrid) {\n return this.yearViewGrid.cols * this.yearViewGrid.rows;\n } else {\n return 12;\n }\n }\n\n /**\n * @hidden\n * Amount of years displayed in aggregated year view\n */\n private _periodsAmount(): number {\n return this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n }\n\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n private _getActiveYear(): AggregatedYear {\n const selectedYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this.yearSelected));\n if (selectedYearCell) {\n return selectedYearCell.years;\n }\n\n const currentYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this._currentYear));\n if (currentYearCell) {\n return currentYearCell.years;\n }\n\n return this._calendarYearListGrid[0][0].years;\n }\n\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n private _getYearsList(): CalendarAggregatedYear[] {\n return (<CalendarAggregatedYear[]>[]).concat(...this._calendarYearListGrid);\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this._calendarService.rowAmount = this.aggregatedYearsViewGrid.rows;\n this._calendarService.colAmount = this.aggregatedYearsViewGrid.cols;\n\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index }) => this.selectYear(this._getYearsList()[index]));\n\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n\n /** @hidden */\n private _focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"('coreCalendar.calendarYearsRangeViewDescription' | fdTranslate)()\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\">\n @for (cell of colYears; track cell + '' + colIndex; let colIndex = $index) {\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n [class.fd-calendar__my-item--current]=\"cell.current\"\n [class.is-active]=\"cell.selected\"\n [attr.id]=\"cell.id\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.data-fd-calendar-years]=\"cell.years.startYear + '-' + cell.years.endYear\"\n (keydown)=\"_onKeydownYearHandler($event, cell.index)\"\n (click)=\"selectYear(cell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"cell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n cell.id +\n '-aria-label ' +\n (cell.current ? _todayLabelId + ' ' : '') +\n (cell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ cell.label }}\n </span>\n </button>\n <span hidden aria-hidden=\"true\" [attr.id]=\"cell.id + '-aria-label'\">\n {{ cell.ariaLabel }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ ('coreCalendar.todayLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ ('coreCalendar.dateSelectedLabel' | fdTranslate)() }}</div>\n</div>\n","import { AbstractCalendarActiveCellStrategy, BaseCalendarCell } from './common';\nexport interface CalendarDay<D> extends BaseCalendarCell {\n date: D; // date representation\n weekDay: number; // weeks number in the year\n weekend: boolean; // to highlight Saturday and Sunday\n monthStatus?: 'previous' | 'current' | 'next'; // to mark days from sibling months\n specialDayNumber?: number; // special day marker flag\n shouldHideSpecialDayMarker?: boolean; // if the special day should be marked\n blocked?: boolean; // blocked date\n past?: boolean; // date in past\n selectedFirst?: boolean; // to highlight the first selected date in the range\n selectedLast?: boolean; // to highlight the last selected date in the range\n selectedRange?: boolean; // to highlight dates in the range between selectedFirst and selectedLast\n hoverRange?: boolean; // \"true\" for days included in date range selection before the the selection is confirmed\n isTabIndexed?: boolean; // if \"true\" sets day cell tabindex to \"0\"\n}\n\n/**\n * Active Calendar Day cell strategy\n */\nexport class ActiveCalendarDayCellStrategy<D = unknown> extends AbstractCalendarActiveCellStrategy<CalendarDay<D>> {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells: CalendarDay<D>[]): CalendarDay<D> | null {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n const fistDayInMonth = cells.find((cell) => cell.monthStatus === 'current');\n if (fistDayInMonth) {\n return fistDayInMonth;\n }\n return cells[0] || null;\n }\n}\n","/** A class representing a range of dates. */\nexport class DateRange<D> {\n /**\n * Date range.\n * @param start\n * @param end\n */\n constructor(\n /** The start date of the range. */\n readonly start: D | null,\n /** The end date of the range. */\n readonly end: D | null\n ) {}\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n EventEmitter,\n Inject,\n inject,\n Input,\n input,\n model,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { SpecialDayRule } from '@fundamental-ngx/core/shared';\n\nimport { CalendarCurrent } from '../../models/calendar-current';\nimport { ActiveCalendarDayCellStrategy as CalendarActiveDayCellStrategy, CalendarDay } from '../../models/calendar-day';\nimport { DateRange } from '../../models/date-range';\n\nimport { NgClass } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { shallowEqual } from 'fast-equals';\nimport { CalendarLegendFocusingService } from '../../calendar-legend/calendar-legend-focusing.service';\nimport { CalendarService } from '../../calendar.service';\nimport { DisableDateFunction, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\nimport { CalendarType, CalendarTypeEnum, DaysOfWeek } from '../../types';\n\n/** Component representing the day view of the calendar. */\n@Component({\n selector: 'fd-calendar-day-view',\n templateUrl: './calendar-day-view.component.html',\n styleUrl: './calendar-day-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId',\n class: 'fd-calendar__dates'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FdTranslatePipe, NgClass]\n})\nexport class CalendarDayViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** Currently displayed month and year for days */\n @Input()\n set currentlyDisplayed(currentlyDisplayed: CalendarCurrent) {\n if (!shallowEqual(currentlyDisplayed, this._currentlyDisplayed)) {\n this._currentlyDisplayed = currentlyDisplayed;\n this._buildDayViewGrid();\n }\n }\n\n get currentlyDisplayed(): CalendarCurrent {\n return this._currentlyDisplayed;\n }\n\n /** The currently selected date model in single mode. */\n @Input()\n set selectedDate(date: Nullable<D>) {\n this._selectedDate = date;\n if (this._dayViewGrid) {\n const dayFromDate = this._calendarDayList.find((day) => this._isSameDay(day.date, date));\n this._changeSelectedSingleDay(dayFromDate, this._calendarDayList);\n }\n }\n\n get selectedDate(): Nullable<D> {\n return this._selectedDate;\n }\n\n /** The currently selected date model in multiple mode. */\n @Input()\n set selectedMultipleDates(dates: Array<D>) {\n this._selectedMultipleDates = dates;\n if (dates && this._dayViewGrid) {\n const formattedDates = this._calendarDayList.filter((day) =>\n dates?.some((date) => this._isSameDay(day.date, date))\n );\n this._changeSelectedMultipleDays(formattedDates, this._calendarDayList);\n }\n }\n\n get selectedMultipleDates(): Nullable<Array<D>> {\n return this._selectedMultipleDates;\n }\n\n /** The currently selected FdDates model start and end in range mode. */\n @Input()\n set selectedRangeDate(dateRange: DateRange<D>) {\n if (\n dateRange &&\n this.selectedRangeDate &&\n this._isSameDay(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDay(dateRange.end, this.selectedRangeDate.end)\n ) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._dayViewGrid) {\n this._changeSelectedRangeDays(dateRange, this._calendarDayList);\n }\n }\n\n get selectedRangeDate(): DateRange<D> {\n return this._selectedRangeDate;\n }\n\n /** The currently selected FdDates model start and end in multiple range mode. */\n @Input()\n set selectedMultipleDateRanges(dateRanges: Array<DateRange<D>>) {\n if (\n dateRanges &&\n this.selectedMultipleDateRanges &&\n dateRanges.length === this.selectedMultipleDateRanges.length &&\n dateRanges.every(\n (range, index) =>\n this._isSameDay(range.start, this.selectedMultipleDateRanges[index].start) &&\n this._isSameDay(range.end, this.selectedMultipleDateRanges[index].end)\n )\n ) {\n return;\n }\n this._selectedMultipleDateRanges = dateRanges || [];\n if (this._dayViewGrid) {\n this._changeSelectedMultipleRangeDays(dateRanges, this._calendarDayList);\n }\n }\n\n get selectedMultipleDateRanges(): Array<DateRange<D>> {\n return this._selectedMultipleDateRanges;\n }\n\n /** Event emitted always, when next month is selected, by focus */\n @Output()\n readonly nextMonthSelect: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted always, when previous month is selected, by focus */\n @Output()\n readonly previousMonthSelect: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /**\n * Function used to disable certain dates in the calendar.\n * @param date date type\n */\n disableFunction = model<DisableDateFunction<D>>();\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n * @param date date representation\n */\n disableRangeStartFunction = model<DisableDateFunction<D>>();\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n * @param date date representation\n */\n disableRangeEndFunction = model<DisableDateFunction<D>>();\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n startingDayOfWeek = model<DaysOfWeek>();\n\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n calType = model<CalendarType>(CalendarTypeEnum.Single);\n\n /** Id of the calendar. If none is provided, one will be generated. */\n id = input<string>();\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected.\n */\n rangeHoverEffect = model(false);\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n markWeekends = input(false);\n\n /**\n * Whether user wants to show week numbers next to days\n */\n showWeekNumbers = input(true);\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n allowMultipleSelection = model(false);\n\n /** Function that allows to specify which function would be called, when focus wants to escape */\n focusEscapeFunction = input<EscapeFocusFunction>();\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with date object as a parameter. ex:\n * `rule: (date: D) => this.dateAdapter.getDay(date) === 1`, which will mark all sundays as special day.\n */\n specialDaysRules = input<SpecialDayRule<D>[]>([]);\n\n /**\n * @hidden\n * Actual day grid with previous/current/next month days\n */\n _dayViewGrid: CalendarDay<D>[][];\n\n /**\n * @hidden\n * Array of week numbers displayed for current month/year\n */\n _weeks: string[];\n\n /**\n * @hidden\n * Array of CSS classes for each week day in calendar header, computed based on whether the calendar type is 'multi'\n * and the date is not disabled.\n */\n _weekHeaderClasses: string[] = [];\n /**\n * @hidden\n * Computed signal for the focused special day number\n */\n protected readonly _focusedSpecialDayNumber = computed<Nullable<number>>(\n () => this.legendFocusedService?.focusedSpecialDayNumber() ?? null\n );\n\n /** @hidden */\n private _selectedDate: Nullable<D>;\n\n /** @hidden */\n private _selectedMultipleDates: Array<D> = [];\n\n /** @hidden */\n private _selectedRangeDate: DateRange<D>;\n\n /** @hidden */\n private _selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /**\n * @hidden\n * Days per week\n */\n private readonly _amountOfCols = 7;\n /** @hidden */\n private _isOnRangePick = false;\n /** @hidden */\n private _isInitiated = false;\n\n /** @hidden */\n private _currentlyDisplayed: CalendarCurrent;\n\n /**\n * @hidden\n * Variable that contains short weekday names.\n */\n private _shortWeekDays: string[];\n\n /**\n * @hidden\n * Variable that contains short weekday names.\n */\n private _longWeekDays: string[];\n\n /**\n * @hidden\n * global variable to store the new range.\n */\n private _newRange: { start: D | null; end: D | null } | null = null;\n\n /**\n * @hidden\n * Cache of days with special markers for efficient legend focus updates\n */\n private _daysWithSpecialMarkers: CalendarDay<D>[] = [];\n\n /** @hidden */\n private readonly legendFocusedService = inject(CalendarLegendFocusingService, { optional: true });\n\n /** @hidden */\n constructor(\n private eRef: ElementRef,\n private changeDetRef: ChangeDetectorRef,\n private calendarService: CalendarService,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats,\n public _dateTimeAdapter: DatetimeAdapter<D>\n ) {\n // Effect to update grid when legend focus changes\n effect(() => {\n const focusedNumber = this._focusedSpecialDayNumber();\n if (this._dayViewGrid && this._isInitiated) {\n this._updateLegendFocusState(focusedNumber);\n }\n });\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._isInitiated = true;\n\n this._setupKeyboardService();\n\n this._refreshShortWeekDays();\n\n this._buildDayViewGrid();\n\n this._computeWeekHeaderClasses();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._refreshShortWeekDays();\n this._buildDayViewGrid();\n this.changeDetRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n /** Changes of those properties are done inside its setters */\n if (\n !changes['selectedDate'] &&\n !changes['selectedMultipleDates'] &&\n !changes['selectedRangeDate'] &&\n !changes['currentlyDisplayed']\n ) {\n this._buildDayViewGrid();\n }\n if (changes['startingDayOfWeek']) {\n this._refreshShortWeekDays();\n }\n if (changes['specialDaysRules']) {\n this._buildDayViewGrid();\n }\n }\n\n /**\n * @hidden\n * Selects a date in single mode, toggles selection in multi mode, or sets the range in range mode.\n * Handles the selection of a date based on the calendar type.\n * @param day The calendar day to be selected.\n * @param event Optional mouse event for handling event propagation.\n */\n selectDate(day: CalendarDay<D>, event?: MouseEvent | KeyboardEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n if (day.disabled || day.blocked) {\n return;\n }\n\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._toggleMultiDate(day);\n } else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectMultipleRangeDates(day);\n }\n } else {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._selectSingleDate(day);\n } else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectRangeDate(day);\n }\n }\n\n this._handleRangeHoverEffect(event);\n this.changeDetRef.markForCheck();\n }\n\n /**\n * Toggles the selection of a week on the calendar.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n handleWeekSelectionByDays(selectedWeek: Array<CalendarDay<D>>): void {\n this.toggleWeekSelection(selectedWeek);\n }\n\n /**\n * Toggles the selection of a week on the calendar based on the weekday index.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param weekDayIndex The index of the weekday to be toggled.\n */\n handleWeekSelectionByIndex(weekDayIndex: number): void {\n const selectedWeek: Array<CalendarDay<D>> = this._dayViewGrid.map((row) => row[weekDayIndex]);\n this.toggleWeekSelection(selectedWeek);\n }\n\n /**\n * Set focus on default focusable cell\n */\n setFocusOnCell(): void {\n const cellToFocus = new CalendarActiveDayCellStrategy().getActiveCell(this._calendarDayList);\n if (!cellToFocus?.index && cellToFocus?.index !== 0) {\n return;\n }\n this.focusOnCellByIndex(cellToFocus.index);\n }\n\n /** @hidden */\n _refreshHoverRange(day: CalendarDay<D>): void {\n if (this.allowMultipleSelection()) {\n this._handleMultiRangeHover(day);\n } else {\n this._handleSingleRangeHover(day);\n }\n }\n\n /**\n * @hidden\n * Amount of selected days\n * 0, when there is no day selected, or start date is invalid,\n * 1, when there is only valid start date, or end date is same as start date,\n * 2, when both dates are valid\n */\n get _selectCounter(): number {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (\n this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDay(this.selectedRangeDate.start, this.selectedRangeDate.end))\n ) {\n return 1;\n }\n if (\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n ) {\n return 2;\n }\n return 0;\n }\n\n /**\n * @hidden\n * Total amount of selected days across multiple ranges.\n * Sums the counts of valid days in each date range.\n */\n get _selectMultipleCounter(): number {\n let counter = this._selectedMultipleDateRanges.reduce((count, range) => {\n if (range.start) {\n count++;\n }\n if (range.end) {\n count++;\n }\n return count;\n }, 0);\n\n // Account for the newRange\n if (this._newRange) {\n if (this._newRange.start) {\n counter++;\n }\n if (this._newRange.end) {\n counter++;\n }\n }\n\n return counter;\n }\n\n /**\n * @hidden\n * Method that returns short weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get shortWeekDays(): string[] {\n return this._shortWeekDays;\n }\n\n /**\n * @hidden\n * Method that returns weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get longWeekDays(): string[] {\n return this._longWeekDays;\n }\n\n /**\n * @hidden\n * Function that gives array of all displayed CalendarDays\n */\n get _calendarDayList(): CalendarDay<D>[] {\n return this._dayViewGrid.reduce((totalCalendarRows: CalendarDay<D>[], calendarRow: CalendarDay<D>[]) => {\n if (!calendarRow) {\n calendarRow = [];\n }\n return totalCalendarRows.concat(calendarRow);\n }, []);\n }\n\n /**\n * View ID\n */\n get viewId(): string {\n return this.id() + '-day-view';\n }\n\n /**\n * @hidden\n * Week column header ID\n */\n get _weekNumbersColumnHeaderId(): string {\n return this.viewId + '-week-column-header';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /**\n * @hidden\n * Date range start date label ID\n */\n get _dateRangeStartLabelId(): string {\n return this.viewId + '-range-start-date-label';\n }\n\n /**\n * @hidden\n * Date range end date label ID\n */\n get _dateRangeEndLabelId(): string {\n return this.viewId + '-range-end-date-label';\n }\n\n /**\n * @hidden\n * Date in past label ID\n */\n get _dateInPastLabelId(): string {\n return this.viewId + '-day-in-past-label';\n }\n\n /**\n * @hidden\n * Method that handles day cells keydown events,\n * @param event KeyboardEvent\n * @param cell CalendarDay\n * @param index with specified column and row as a x and y\n */\n _onKeydownDayHandler(event: KeyboardEvent, cell: CalendarDay<D>, index: number): void {\n if (event.key === 'Tab' && !event.shiftKey) {\n if (this.focusEscapeFunction()) {\n this.focusEscapeFunction()!(event);\n }\n } else {\n this.calendarService.onKeydownHandler(event, index);\n }\n }\n\n /**\n * @hidden\n * Method that allow to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this.eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this.calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * Method that selects previous month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n private _selectPreviousMonth(): void {\n this._currentlyDisplayed = this._getPreviousMonth();\n this._buildDayViewGrid();\n this.previousMonthSelect.emit();\n }\n\n /**\n * @hidden\n * Method that selects next month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n private _selectNextMonth(): void {\n this._currentlyDisplayed = this._getNextMonth();\n this._buildDayViewGrid();\n this.nextMonthSelect.emit();\n }\n\n /**\n * @hidden\n * Updates the legend focus state for calendar days with special markers\n * @param focusedSpecialDayNumber The currently focused special day number, or null/undefined if no legend item is focused\n */\n private _updateLegendFocusState(focusedSpecialDayNumber: Nullable<number>): void {\n if (!this._dayViewGrid || this._daysWithSpecialMarkers.length === 0) {\n return;\n }\n\n // Only iterate through days that have special markers (typically 2-10 days instead of 42)\n this._daysWithSpecialMarkers.forEach((day) => {\n if (focusedSpecialDayNumber == null) {\n // No legend item focused - show all markers\n day.shouldHideSpecialDayMarker = false;\n } else {\n // Legend item focused - hide markers that don't match\n day.shouldHideSpecialDayMarker = day.specialDayNumber !== focusedSpecialDayNumber;\n }\n });\n this.changeDetRef.markForCheck();\n }\n\n /**\n * @hidden\n * Method that creates array of CalendarDay models which will be shown on day grid,\n * depending on current month and year.\n */\n private _populateCalendar(): CalendarDay<D>[] {\n let calendar: CalendarDay<D>[] = [];\n\n calendar = this._getPreviousMonthDays(calendar);\n calendar = calendar.concat(this._getCurrentMonthDays());\n calendar = this._getNextMonthDays(calendar);\n\n calendar.forEach((call, index: number) => {\n call.id = this._getCellIdByIndex(index);\n call.index = index;\n });\n\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedMultipleDates) {\n const _days = calendar.filter((day) =>\n this._selectedMultipleDates?.some((date) => this._isSameDay(day.date, date))\n );\n this._changeSelectedMultipleDays(_days, calendar);\n }\n\n if (this.calType() === CalendarTypeEnum.Range && this._selectedMultipleDateRanges) {\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, calendar);\n }\n } else {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedDate) {\n const _day = calendar.find((day) => this._isSameDay(day.date, this._selectedDate));\n this._changeSelectedSingleDay(_day, calendar);\n }\n\n if (this.calType() === CalendarTypeEnum.Range && this._selectedRangeDate) {\n this._changeSelectedRangeDays(this._selectedRangeDate, calendar);\n }\n }\n\n return calendar;\n }\n\n /**\n * @hidden\n * Method that builds 2 dimensions day view grid, also sets up currently displayed month, or year,\n * when there is not any.\n */\n private _buildDayViewGrid(): void {\n if (!this._isInitiated) {\n return;\n }\n\n if (!this.currentlyDisplayed || this._isInvalidDate()) {\n if (this.selectedDate) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(this.selectedDate),\n year: this._dateTimeAdapter.getYear(this.selectedDate)\n };\n } else {\n const today = this._dateTimeAdapter.today();\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(today),\n year: this._dateTimeAdapter.getYear(today)\n };\n }\n }\n\n const calendarDays = this._populateCalendar();\n const dayViewGrid: CalendarDay<D>[][] = [];\n\n while (calendarDays.length > 0) {\n dayViewGrid.push(calendarDays.splice(0, this._amountOfCols));\n }\n\n this.calendarService.rowAmount = dayViewGrid.length;\n\n this._dayViewGrid = dayViewGrid;\n this._weeks = this._refreshWeekCount();\n\n // Cache days with special markers for efficient legend focus updates\n this._daysWithSpecialMarkers = this._calendarDayList.filter((day) => day.specialDayNumber !== undefined);\n }\n\n /** @hidden */\n private _isInvalidDate(): boolean {\n return isNaN(this.currentlyDisplayed.year) || isNaN(this.currentlyDisplayed.month);\n }\n\n /**\n * @hidden\n * Get id of calendar's day item\n */\n private _getCellIdByIndex(index: number): string {\n return this.viewId + '-day-' + index + '';\n }\n\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains every single day of currently shown month/year.\n */\n private _getCurrentMonthDays(): CalendarDay<D>[] {\n const month = this.currentlyDisplayed.month;\n const year = this.currentlyDisplayed.year;\n const calendarDays: CalendarDay<D>[] = [];\n const amountOfDaysInCurrentMonth: number = this._dateTimeAdapter.getNumDaysInMonth(\n this._dateTimeAdapter.createDate(year, month, 1)\n );\n const now = this._dateTimeAdapter.now();\n for (let dayNumber = 1; dayNumber <= amountOfDaysInCurrentMonth; dayNumber++) {\n const date: D = this._dateTimeAdapter.createDate(year, month, dayNumber);\n calendarDays.push({\n ...this._getDay(date),\n monthStatus: 'current',\n current: this._isSameDay(now, date)\n });\n }\n const cell = this._getActiveCell(calendarDays);\n cell && (cell.isTabIndexed = true);\n return calendarDays;\n }\n\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected day, return selected day\n * if there is no selected day, but there is today day, return today day\n * if there is no today, or selected, return first one\n */\n private _getActiveCell(calendarDays: CalendarDay<D>[]): CalendarDay<D> | null {\n return new CalendarActiveDayCellStrategy<D>().getActiveCell(calendarDays);\n }\n\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains last 0-6 days of previous month/year. Theses days\n * fills the gap between starting startingDayOfWeek and first day of current month\n */\n private _getPreviousMonthDays(calendarDays: CalendarDay<D>[]): CalendarDay<D>[] {\n const month = this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.month - 1 : 12;\n const year =\n this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year - 1;\n const amountOfDaysInCurrentMonth: number = this._dateTimeAdapter.getNumDaysInMonth(\n this._dateTimeAdapter.createDate(year, month, 1)\n );\n const prevMonthLastDate = this._dateTimeAdapter.createDate(year, month, amountOfDaysInCurrentMonth);\n const prevMonthLastDay = amountOfDaysInCurrentMonth;\n let prevMonthLastWeekDay = this._dateTimeAdapter.getDayOfWeek(prevMonthLastDate) - this.startingDayOfWeek()!;\n\n /** Checking if there are some days cut by startingDayOfWeek option\n * If yes, there is whole week added, to avoid hiding\n */\n if (prevMonthLastWeekDay < 0) {\n prevMonthLastWeekDay = prevMonthLastWeekDay + 7;\n }\n\n if (prevMonthLastWeekDay < 6) {\n while (prevMonthLastWeekDay >= 0) {\n const prevMonthDay = prevMonthLastDay - prevMonthLastWeekDay;\n const date = this._dateTimeAdapter.createDate(year, month, prevMonthDay);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'previous' });\n prevMonthLastWeekDay--;\n }\n }\n return calendarDays;\n }\n\n /**\n * @hidden\n * Method which provides array of CalendarDay, which contains first days of next month/year. Theses days\n * fills the gap between last day of current day and end of 6-weeks calendar grid.\n */\n private _getNextMonthDays(calendarDays: CalendarDay<D>[]): CalendarDay<D>[] {\n const month = this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.month + 1 : 1;\n const year =\n this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year + 1;\n\n // The calendar grid can have 5 (35 days) or 6 (42 days) weeks\n const nextMonthDisplayedDays = (42 - calendarDays.length) % 7;\n\n for (let nextD = 1; nextD <= nextMonthDisplayedDays; nextD++) {\n const date = this._dateTimeAdapter.createDate(year, month, nextD);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'next' });\n }\n return calendarDays;\n }\n\n /** @hidden */\n private _isWeekendDay(dayOfWeek: number): boolean {\n return dayOfWeek === 1 || dayOfWeek === 7;\n }\n\n /**\n * @hidden\n * Method that generates whole day model basing on date, disabling functions, block functions, and actually\n * chosen range / single date.\n */\n private _getDay(date: D): CalendarDay<D> {\n const weekDay = this._dateTimeAdapter.getDayOfWeek(date);\n const dayOfMonth = this._dateTimeAdapter.getDate(date);\n const dateNames = this._dateTimeAdapter.getDateNames();\n const isPast = this._dateTimeAdapter.compareDate(date, this._dateTimeAdapter.today()) < 0;\n const day: CalendarDay<D> = {\n date,\n label: dateNames[dayOfMonth - 1],\n weekDay,\n weekend: this._isWeekendDay(weekDay),\n ariaLabel: this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateA11yLabel),\n specialDayNumber: this._getSpecialDay(date) ?? undefined,\n past: isPast,\n shouldHideSpecialDayMarker: false\n };\n\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n day.disabled = this.disableFunction()!(date);\n }\n\n return day;\n }\n\n /**\n * @hidden\n * Method that is called to refresh i18n short week days.\n */\n private _refreshShortWeekDays(): void {\n const shortDayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('short');\n const dayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('long');\n\n this._shortWeekDays = shortDayOfWeekNames\n .slice(this.startingDayOfWeek()! - 1)\n .concat(shortDayOfWeekNames.slice(0, this.startingDayOfWeek()! - 1));\n\n this._longWeekDays = dayOfWeekNames\n .slice(this.startingDayOfWeek()! - 1)\n .concat(dayOfWeekNames.slice(0, this.startingDayOfWeek()! - 1));\n\n this.changeDetRef.markForCheck();\n }\n\n /**\n * @hidden\n * Gets special day number of specified date model\n */\n private _getSpecialDay(date: D): number | null {\n const specialDay = this.specialDaysRules().find((specialDayRule) => specialDayRule.rule(date));\n if (specialDay) {\n return specialDay.specialDayNumber;\n }\n return null;\n }\n\n /**\n * @hidden\n * Method that returns array of week's count\n */\n private _refreshWeekCount(): string[] {\n const calendarDayList = this._calendarDayList;\n const weekNumbers: string[] = [];\n for (let index = 6; index < calendarDayList.length; index = index + 6) {\n weekNumbers.push(this._dateTimeAdapter.getWeekName(calendarDayList[index].date));\n }\n return weekNumbers;\n }\n\n /**\n * @hidden\n * Get year and month for previous year\n */\n private _getPreviousMonth(): CalendarCurrent {\n if (this._currentlyDisplayed.month > 1) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month - 1 };\n } else {\n return { year: this._currentlyDisplayed.year - 1, month: 12 };\n }\n }\n\n /**\n * @hidden\n * Get year and month for next year\n */\n private _getNextMonth(): CalendarCurrent {\n if (this._currentlyDisplayed.month < 12) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month + 1 };\n } else {\n return { year: this._currentlyDisplayed.year + 1, month: 1 };\n }\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this.calendarService.colAmount = this._amountOfCols;\n\n this.calendarService.focusEscapeFunction = this.focusEscapeFunction()!;\n\n this.calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._refreshHoverRange(this._calendarDayList[index]);\n this.focusOnCellByIndex(index);\n });\n\n this.calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectDate(this._calendarDayList[index], event);\n });\n\n this.calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectPreviousMonth();\n /**\n * Calculate focused cell in new grid\n */\n const originalMonth = this._getNextMonth(); // month that was before moving back\n const originalAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(\n originalMonth.year,\n originalMonth.month,\n this.startingDayOfWeek()!\n );\n const prevMonthAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(\n this._currentlyDisplayed.year,\n this._currentlyDisplayed.month,\n this.startingDayOfWeek()!\n );\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index - 7 * (originalAmountOfWeeks - prevMonthAmountOfWeeks));\n });\n\n this.calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectNextMonth();\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index);\n });\n }\n\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n */\n private _changeSelectedSingleDay(day: Nullable<CalendarDay<D>>, calendar: CalendarDay<D>[]): void {\n calendar.forEach((_day) => (_day.selected = false));\n if (day && !day.blocked && !day.disabled) {\n day.selected = true;\n }\n this.refreshTabIndex(calendar);\n }\n\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n *\n * @param dates - An array of CalendarDay objects to be marked as selected\n * @param calendar - The calendar array containing all CalendarDay objects\n */\n private _changeSelectedMultipleDays(dates: Nullable<Array<CalendarDay<D>>>, calendar: CalendarDay<D>[]): void {\n calendar.forEach((day) => (day.selected = false));\n\n if (dates) {\n dates.forEach((date) => {\n const matchingDay = calendar.find((day) => this._isSameDay(day.date, date.date));\n if (matchingDay && !matchingDay.blocked && !matchingDay.disabled) {\n matchingDay.selected = true;\n }\n });\n }\n\n this.refreshTabIndex(calendar);\n }\n\n /**\n * @hidden\n * Change properties of range days, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected days.\n */\n private _changeSelectedRangeDays(dates: DateRange<D>, calendar: CalendarDay<D>[]): void {\n /** Pull list of calendar days */\n const calendarList = calendar;\n\n /** Reset changing properties */\n calendarList.forEach(\n (_day) =>\n (_day.selectedFirst =\n _day.selectedLast =\n _day.selected =\n _day.isTabIndexed =\n _day.disabled =\n _day.hoverRange =\n _day.selectedRange =\n false)\n );\n\n if (dates) {\n let startDay: CalendarDay<D> | undefined;\n let endDay: CalendarDay<D> | undefined;\n if (dates.start) {\n /** Find start date and mark it as selected */\n startDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.start));\n if (\n startDay &&\n !startDay.blocked &&\n !startDay.disabled &&\n (typeof this.disableRangeStartFunction() !== 'function' ||\n !this.disableRangeStartFunction()?.(startDay.date))\n ) {\n startDay.selected = true;\n startDay.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end date and mark it as selected */\n endDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.end));\n if (\n endDay &&\n !endDay.blocked &&\n !endDay.disabled &&\n (typeof this.disableRangeEndFunction() !== 'function' ||\n !this.disableRangeEndFunction()?.(endDay.date))\n ) {\n endDay.selected = true;\n endDay.selectedLast = true;\n }\n }\n\n /** Verify if start day and end day is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all days, which are between start and end date */\n calendarList\n .filter(\n (_day) =>\n (_day.selectedRange = this._dateTimeAdapter.isBetween(_day.date, dates.start!, dates.end!))\n )\n .forEach((_day) => (_day.selectedRange = true));\n }\n }\n\n this.refreshTabIndex(calendarList);\n\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n calendarList.forEach((_day) => (_day.disabled = this.disableFunction()!(_day.date)));\n }\n\n if ((this._selectCounter === 0 || this._selectCounter === 2) && this.disableRangeStartFunction()) {\n calendarList.forEach(\n (_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()!(_day.date))\n );\n } else if (this._selectCounter === 1 && this.disableRangeEndFunction()) {\n calendarList.forEach(\n (_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()!(_day.date))\n );\n }\n }\n\n /**\n * @hidden\n * Change properties of range days for multiple ranges.\n * This method is called to not rebuild the whole grid from scratch.\n * It just changes properties of newly selected/unselected days.\n */\n private _changeSelectedMultipleRangeDays(datesArray: Array<DateRange<D>>, calendar: CalendarDay<D>[]): void {\n // Reset changing properties\n calendar.forEach((_day) => {\n _day.selectedFirst = false;\n _day.selectedLast = false;\n _day.selectedRange = false;\n _day.selected = false;\n _day.isTabIndexed = false;\n _day.disabled = false;\n _day.hoverRange = false;\n _day.disabled = false;\n });\n\n datesArray.forEach((dates) => {\n if (dates) {\n let startDay: CalendarDay<D> | undefined;\n let endDay: CalendarDay<D> | undefined;\n if (dates.start) {\n // Find start date and mark it as selected\n startDay = calendar.find((_day) => this._isSameDay(_day.date, dates.start));\n if (startDay) {\n startDay.selectedFirst = true;\n startDay.selected = true;\n }\n }\n if (dates.end) {\n // Find end date and mark it as selected\n endDay = calendar.find((_day) => this._isSameDay(_day.date, dates.end));\n if (endDay) {\n endDay.selectedLast = true;\n endDay.selected = true;\n }\n }\n\n // Mark all days between start and end as selected range\n if (dates.start && dates.end) {\n calendar.forEach((_day) => {\n if (this._isDateInRange(_day.date, dates)) {\n _day.selectedRange = true;\n _day.selected = true;\n }\n });\n }\n }\n });\n\n this.refreshTabIndex(calendar);\n\n // Apply disabled state to days marked with passed function\n if (this.disableFunction()) {\n calendar.forEach((_day) => (_day.disabled = this.disableFunction()!(_day.date)));\n }\n\n if (\n (this._selectMultipleCounter === 0 || this._selectMultipleCounter % 2 === 0) &&\n this.disableRangeStartFunction()\n ) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()!(_day.date)));\n } else if (this._selectMultipleCounter % 2 === 1 && this.disableRangeEndFunction()) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()!(_day.date)));\n }\n }\n\n /** @hidden */\n private refreshTabIndex(calendar: CalendarDay<D>[]): void {\n calendar.forEach((_day) => (_day.isTabIndexed = false));\n const cell = this._getActiveCell(calendar.filter((_day) => _day.monthStatus === 'current'));\n cell && (cell.isTabIndexed = true);\n }\n\n /** @hidden */\n private focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getCellIdByIndex(index)}`);\n }\n\n /**\n * @hidden\n * Check if dates are equal\n */\n private _isSameDay(date1: Nullable<D>, date2: Nullable<D>): boolean {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n\n /**\n * @hidden\n * Selects a single date and updates the selected date in single mode.\n * @param day The calendar day to be selected.\n */\n private _selectSingleDate(day: CalendarDay<D>): void {\n this._calendarDayList.forEach((_day) => (_day.selected = false));\n day.selected = true;\n this._selectedDate = day.date;\n this.selectedDateChange.emit(day.date);\n }\n\n /**\n * @hidden\n * Toggles the selection of a date in multi mode.\n * Adds the date if not selected, removes it if already selected.\n * @param day The calendar day to be toggled.\n */\n private _toggleMultiDate(day: CalendarDay<D>): void {\n const dateIndex = this._selectedMultipleDates.findIndex((d) => this._isSameDay(d, day.date));\n let newSelectedDates: D[];\n\n if (dateIndex > -1) {\n newSelectedDates = this._selectedMultipleDates.filter((_, index) => index !== dateIndex);\n day.selected = false;\n } else {\n newSelectedDates = [...this._selectedMultipleDates, day.date];\n day.selected = true;\n }\n\n this._selectedMultipleDates = newSelectedDates;\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param day The calendar day to be selected or updated in the range.\n */\n private _selectRangeDate(day: CalendarDay<D>): void {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: day.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n } else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start!, day.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeDays(this._selectedRangeDate, this._calendarDayList);\n }\n\n /**\n * @hidden\n * Selects or updates multiple ranges of dates in range mode.\n * Handles the start and end dates and updates the selected ranges.\n * @param day The calendar day to be selected or updated in the range.\n */\n private _selectMultipleRangeDates(day: CalendarDay<D>): void {\n let tempRanges = this._selectedMultipleDateRanges?.filter((range) => range.start || range.end) || [];\n\n // Handles the existing range by updating or merging it with the new day selection.\n tempRanges = this._handleExistingRange(tempRanges, day);\n\n if (this._selectMultipleCounter % 2 === 0) {\n // Start a new range\n this._newRange = { start: day.date, end: null };\n } else {\n // Check for reverse selection\n if (\n this._newRange &&\n this._newRange.start &&\n this._dateTimeAdapter.compareDate(this._newRange.start, day.date) > 0\n ) {\n this._newRange = { start: day.date, end: this._newRange.start };\n } else if (this._newRange) {\n this._newRange.end = day.date as D;\n }\n if (this._newRange) {\n tempRanges.push(this._newRange);\n }\n this._newRange = null;\n }\n\n tempRanges = this._mergeOverlappingRanges(tempRanges);\n\n this._selectedMultipleDateRanges = tempRanges;\n\n // Check if all ranges have both start and end dates filled\n const allRangesComplete = this._selectedMultipleDateRanges.every((range) => range.start && range.end);\n\n if (allRangesComplete && tempRanges.length > 0) {\n this.selectedMultipleDateRangesChange.emit(this._selectedMultipleDateRanges);\n }\n\n // Update the calendar view\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, this._calendarDayList);\n }\n\n /**\n * Merges overlapping date ranges into a single range.\n *\n * @param ranges - An array of date ranges to be merged.\n * @returns An array of merged date ranges.\n */\n private _mergeOverlappingRanges(ranges: Array<DateRange<D>>): Array<DateRange<D>> {\n if (ranges.length <= 1) {\n return ranges;\n }\n\n ranges.sort((a, b) => this._dateTimeAdapter.compareDate(a.start!, b.start!));\n\n const mergedRanges: Array<DateRange<D>> = [];\n let currentRange = ranges[0];\n\n for (let i = 1; i < ranges.length; i++) {\n const nextRange = ranges[i];\n\n if (this._dateTimeAdapter.compareDate(currentRange.end!, nextRange.start!) >= 0) {\n currentRange = {\n start: currentRange.start,\n end:\n this._dateTimeAdapter.compareDate(currentRange.end!, nextRange.end!) >= 0\n ? currentRange.end\n : nextRange.end\n };\n } else {\n mergedRanges.push(currentRange);\n currentRange = nextRange;\n }\n }\n\n mergedRanges.push(currentRange);\n return mergedRanges;\n }\n\n /**\n * Handles the case where the selected day is part of an existing range.\n *\n * @param tempRanges - An array of date ranges to be checked.\n * @param day - The calendar day to be checked.\n * @returns An array of date ranges with the updated range if the selected day is part of an existing range.\n */\n private _handleExistingRange(tempRanges: DateRange<D>[], day: CalendarDay<D>): DateRange<D>[] {\n if (tempRanges.length > 0) {\n const existingRangeIndex = tempRanges.findIndex((range) => this._isDateInRange(day.date, range));\n const existingRange = tempRanges[existingRangeIndex];\n\n if (existingRangeIndex !== -1 && existingRange.end) {\n tempRanges.splice(existingRangeIndex, 1);\n }\n }\n return tempRanges;\n }\n\n /**\n * @hidden\n * Checks if a date is within a given date range.\n * @param date The date to check.\n * @param range The date range.\n * @returns True if the date is in the range, false otherwise.\n */\n private _isDateInRange(date: D, range: DateRange<D>): boolean {\n return this._dateTimeAdapter.isBetween(date, range.start!, range.end!);\n }\n\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n private _getOrderedRange(date1: D, date2: D): { start: D; end: D } {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n private _handleRangeHoverEffect(event?: MouseEvent | KeyboardEvent): void {\n if (this.allowMultipleSelection()) {\n if (\n this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectMultipleCounter === 1 &&\n event\n ) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n } else {\n if (\n this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectCounter === 1 &&\n event\n ) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n }\n }\n\n /**\n * Helper method to toggle the selection of a week.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n private toggleWeekSelection(selectedWeek: Array<CalendarDay<D>>): void {\n const selectableDays = selectedWeek.filter((day) => !day.disabled);\n const isCurrentWeekSelected = selectableDays.every((day) => day.selected);\n\n if (!isCurrentWeekSelected) {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = true;\n if (!this._selectedMultipleDates.some((selectedDate) => this._isSameDay(selectedDate, day.date))) {\n this._selectedMultipleDates.push(day.date);\n }\n }\n });\n } else {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = false;\n this._selectedMultipleDates = this._selectedMultipleDates.filter(\n (selectedDate) => !this._isSameDay(selectedDate, day.date)\n );\n }\n });\n }\n\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n\n /**\n * @hidden\n * Computes the CSS class for each week day in calendar header based on whether the calendar type is 'multi'\n * and the date is not disabled.\n * Stores the computed classes in the weekHeaderClasses array.\n */\n private _computeWeekHeaderClasses(): void {\n this._weekHeaderClasses = this._calendarDayList.map(() =>\n this.calType() !== CalendarTypeEnum.Range && this.allowMultipleSelection()! && this.disableFunction()!\n ? 'event-enabled'\n : ''\n );\n }\n\n /**\n * @hidden\n * Handles hover effect for single-range selection mode.\n * @param day The calendar day that is hovered.\n */\n private _handleSingleRangeHover(day: CalendarDay<D>): void {\n // Handle single range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(day.date, start) < 0) {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) < 0;\n });\n } else {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) > 0;\n });\n }\n }\n }\n\n /**\n * @hidden\n * Handles hover effect for multi-range selection mode.\n * @param day The calendar day that is hovered.\n */\n private _handleMultiRangeHover(day: CalendarDay<D>): void {\n // Determine the start date from the most recent range with a null end date\n let startDate: D | null | any = this._newRange?.start;\n if (this._selectedMultipleDateRanges.length > 0) {\n // Find the most recent range with an end date of null\n const activeRanges = this._selectedMultipleDateRanges.filter((range) => range.end === null);\n if (activeRanges.length > 0) {\n const mostRecentRange = activeRanges[activeRanges.length - 1];\n startDate = mostRecentRange.start;\n }\n }\n if (startDate && startDate) {\n if (this._dateTimeAdapter.compareDate(day.date, startDate) < 0) {\n // Hovering backwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) < 0;\n });\n } else {\n // Hovering forwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) > 0;\n });\n }\n } else {\n // No start date, clear hover\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange = false;\n });\n }\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--dates\"\n role=\"grid\"\n [attr.aria-roledescription]=\"('coreCalendar.calendarDayViewDescription' | fdTranslate)()\"\n>\n <thead class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" role=\"row\">\n @if (showWeekNumbers()) {\n <th\n class=\"fd-calendar__item fd-calendar__item--side-helper\"\n role=\"columnheader\"\n [attr.id]=\"_weekNumbersColumnHeaderId\"\n [attr.aria-label]=\"('coreCalendar.weekColumnLabel' | fdTranslate)()\"\n ></th>\n }\n @for (day of shortWeekDays; track day + '' + i; let i = $index) {\n <th\n class=\"fd-calendar__item fd-calendar__item--side-helper\"\n [ngClass]=\"_weekHeaderClasses[i]\"\n role=\"columnheader\"\n [attr.aria-label]=\"longWeekDays[i]\"\n (click)=\"handleWeekSelectionByIndex(i)\"\n >\n <div class=\"fd-calendar__text-wrapper\">\n <span class=\"fd-calendar__text\">{{ day }}</span>\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (row of _dayViewGrid; track row + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\" role=\"row\">\n @if (showWeekNumbers()) {\n <th\n class=\"fd-calendar__item fd-calendar__item--side-helper\"\n [ngClass]=\"{ 'event-enabled': allowMultipleSelection() && calType() !== 'range' }\"\n role=\"rowheader\"\n scope=\"row\"\n [attr.data-fd-calendar-week]=\"_weeks[rowIndex]\"\n [attr.id]=\"viewId + '-week-' + _weeks[rowIndex]\"\n [attr.aria-labelledby]=\"\n _weekNumbersColumnHeaderId + ' ' + (viewId + '-week-' + _weeks[rowIndex])\n \"\n (click)=\"handleWeekSelectionByDays(row)\"\n >\n @if (_weeks && _weeks[rowIndex]) {\n <div class=\"fd-calendar__text-wrapper\">\n <span class=\"fd-calendar__text\">\n {{ _weeks[rowIndex] }}\n </span>\n </div>\n }\n </th>\n }\n @for (cell of row; track cell + '' + cellIndex; let cellIndex = $index) {\n <td\n class=\"fd-calendar__item\"\n role=\"gridcell\"\n [class.fd-calendar__item--selected]=\"cell.selectedFirst || cell.selectedLast || cell.selected\"\n [class.fd-calendar__item--range]=\"\n (cell.selectedRange || cell.hoverRange) && !cell.selectedFirst && !cell.selectedLast\n \"\n [class.fd-calendar__item--today]=\"cell.current\"\n [class.fd-calendar__item--weekend]=\"\n cell.weekend && markWeekends() && cell.monthStatus === 'current'\n \"\n [class.fd-calendar__item--other]=\"cell.monthStatus !== 'current'\"\n [class.is-disabled]=\"cell.disabled\"\n [class]=\"\n cell.specialDayNumber && !cell.shouldHideSpecialDayMarker\n ? 'fd-calendar__item--legend-' + cell.specialDayNumber\n : ''\n \"\n [attr.id]=\"cell.id\"\n [attr.data-fd-calendar-date-day]=\"cell.label\"\n [attr.data-fd-calendar-day]=\"cell.index\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled\"\n [attr.tabindex]=\"cell.isTabIndexed ? 0 : -1\"\n (click)=\"selectDate(cell, $event)\"\n (mouseenter)=\"_refreshHoverRange(cell)\"\n (keydown)=\"_onKeydownDayHandler($event, cell, _getIndex(rowIndex, cellIndex))\"\n >\n <div class=\"fd-calendar__text-wrapper\">\n <span\n class=\"fd-calendar__text\"\n role=\"button\"\n [attr.aria-labelledby]=\"\n cell.id +\n '-aria-label ' +\n (cell.selectedFirst ? _dateRangeStartLabelId + ' ' : '') +\n (cell.selectedLast ? _dateRangeEndLabelId + ' ' : '') +\n (cell.current ? _todayLabelId + ' ' : '') +\n (cell.selected && calType() === 'single' ? _selectedDateLabelId + ' ' : '') +\n (cell.past ? _dateInPastLabelId : '')\n \"\n >{{ cell.label }}</span\n >\n <span hidden aria-hidden=\"true\" [attr.id]=\"cell.id + '-aria-label'\">\n {{ cell.ariaLabel }}\n </span>\n </div>\n </td>\n }\n </tr>\n }\n @if (_dayViewGrid.length <= 5) {\n <tr class=\"fd-calendar__row\">\n <td class=\"fd-calendar__item hidden-day\"></td>\n </tr>\n }\n @if (_dayViewGrid.length === 4) {\n <tr class=\"fd-calendar__row\">\n <td class=\"fd-calendar__item hidden-day\"></td>\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ ('coreCalendar.todayLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ ('coreCalendar.dateSelectedLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_dateRangeStartLabelId\">{{ ('coreCalendar.rangeStartLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_dateRangeEndLabelId\">{{ ('coreCalendar.rangeEndLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_dateInPastLabelId\">{{ ('coreCalendar.dayInPastLabel' | fdTranslate)() }}</div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { CalendarMonth } from '../../models/calendar-month';\nimport { DefaultCalendarActiveCellStrategy, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\n\n/** Component representing the month view of the calendar. */\n@Component({\n selector: 'fd-calendar-month-view',\n templateUrl: './calendar-month-view.component.html',\n styleUrl: './calendar-month-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarMonthViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** The id of the calendar passed from the parent component */\n @Input()\n id: string;\n\n /** A number (1-12) representing the selected month */\n @Input()\n monthSelected: number;\n\n /** A function that handles escape focus */\n @Input()\n focusEscapeFunction: EscapeFocusFunction;\n\n /** A year the month view is referring to */\n @Input()\n year: number;\n\n /** Whether to pick the date range in month year format without picking days */\n @Input()\n isDateRangeMonthYearFormat: boolean;\n\n /** An event fired when a new month is selected */\n @Output()\n readonly monthClicked: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /**\n * Whether user wants to mark month cells on hover.\n * Works only on range mode, when start month is selected.\n */\n @Input()\n rangeHoverEffect = false;\n\n /**\n * @hidden\n * Month grid table\n */\n _calendarMonthListGrid: CalendarMonth<D>[][];\n\n /**\n * @hidden\n * A number offset used to achieve the 1-12 representation of the calendar\n */\n private readonly _monthOffset: number = 1;\n /** @hidden */\n private readonly _amountOfColPerRow: number = 3;\n /** @hidden */\n private readonly _amountOfRows: number = 4;\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _initiated = false;\n\n /** @hidden */\n private _selectedRangeDate: DateRange<D>;\n\n private _isOnRangePick = false;\n\n /** @hidden */\n constructor(\n private _eRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats,\n private _dateTimeAdapter: DatetimeAdapter<D>\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._initiated = true;\n this._setupKeyboardService();\n this._constructMonthGrid();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructMonthGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._initiated && ('monthSelected' in changes || 'year' in changes || 'id' in changes)) {\n this._constructMonthGrid();\n }\n }\n\n /** Get a number (1-12) representing the current month */\n get currentMonth(): number {\n return this._dateTimeAdapter.getMonth(this._dateTimeAdapter.today());\n }\n\n /** Getter for the private class member _monthOffset */\n get monthOffset(): number {\n return this._monthOffset;\n }\n\n /** View ID */\n get viewId(): string {\n return this.id + '-month-view';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /** The currently selected FdDates model start and end in range mode. */\n @Input()\n set selectedRangeDate(dateRange: DateRange<D>) {\n if (\n dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)\n ) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarMonthListGrid) {\n this._changeSelectedRangeMonths(dateRange, this._getMonthList());\n }\n }\n\n get selectedRangeDate(): DateRange<D> {\n return this._selectedRangeDate;\n }\n\n /**\n * @hidden\n * Amount of selected months\n * 0, when there is no month selected, or start month is invalid,\n * 1, when there is only valid start month, or end month is same as start month,\n * 2, when both dates are valid\n */\n get _selectCounter(): number {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (\n this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))\n ) {\n return 1;\n }\n if (\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n ) {\n return 2;\n }\n return 0;\n }\n\n /**\n * @hidden\n * Method for handling the keyboard events (a11y)\n */\n _onKeydownMonthHandler(event: KeyboardEvent, index: number): void {\n this._calendarService.onKeydownHandler(event, index);\n }\n\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Method returning id of month cell\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * @param index month grid cell index\n */\n _getId(index: number): string {\n return this.viewId + '-month-' + index;\n }\n\n /**\n * @hidden\n * Method that checks if this is current month\n */\n _isCurrent(id: number): boolean {\n return id + this._monthOffset === this.currentMonth;\n }\n\n /**\n * @hidden\n * Method that check if this is selected month\n */\n _isSelected(id: number): boolean {\n return id + this._monthOffset === this.monthSelected;\n }\n\n /** Method for handling the mouse click event when a month is selected */\n selectMonth(monthCell: CalendarMonth<D>, event?: MouseEvent | KeyboardEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n this.monthSelected = monthCell.month;\n this.monthClicked.emit(this.monthSelected);\n\n // when date range start date is selected start the hover effect between the date range\n if (this.isDateRangeMonthYearFormat) {\n this._selectRangeDate(monthCell);\n this._handleRangeHoverEffect(event);\n }\n }\n\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell(): void {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getMonthList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param month The calendar month that is hovered.\n */\n _handleRangeHover(month: CalendarMonth<D>): void {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(month.date, start) < 0) {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) > 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) < 0;\n });\n } else {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) < 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) > 0;\n });\n }\n }\n }\n\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n private _handleRangeHoverEffect(event?: MouseEvent | KeyboardEvent): void {\n if (this.isDateRangeMonthYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n }\n\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param month The calendar month to be selected or updated in the range.\n */\n private _selectRangeDate(month: CalendarMonth<D>): void {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: month.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n } else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start!, month.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeMonths(this._selectedRangeDate, this._getMonthList());\n }\n\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n private _getOrderedRange(date1: D, date2: D): { start: D; end: D } {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n\n /**\n * @hidden\n * Change properties of range months, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected months.\n */\n private _changeSelectedRangeMonths(dates: DateRange<D>, calendar: CalendarMonth<D>[]): void {\n /** Pull list of calendar month */\n const calendarList = calendar;\n\n /** Reset changing properties */\n calendarList.forEach(\n (_month) =>\n (_month.selectedFirst =\n _month.selectedLast =\n _month.selected =\n _month.disabled =\n _month.hoverRange =\n _month.selectedRange =\n false)\n );\n\n if (dates) {\n let startMonth: CalendarMonth<D> | undefined;\n let endMonth: CalendarMonth<D> | undefined;\n if (dates.start) {\n /** Find start month and mark it as selected */\n startMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.start));\n if (startMonth) {\n startMonth.selected = true;\n startMonth.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end month and mark it as selected */\n endMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.end));\n if (endMonth) {\n endMonth.selected = true;\n endMonth.selectedLast = true;\n }\n }\n\n /** Verify if start month and end month is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all months, which are between start and end date */\n calendarList\n .filter(\n (_month) =>\n (_month.selectedRange = this._dateTimeAdapter.isBetween(\n _month.date,\n dates.start!,\n dates.end!\n ))\n )\n .forEach((_month) => (_month.selectedRange = true));\n }\n }\n }\n\n /**\n * @hidden\n * Check if dates are equal\n */\n private _isSameDate(date1: Nullable<D>, date2: Nullable<D>): boolean {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n\n /**\n * @hidden\n * Method that create month grid with required meta data\n */\n private _constructMonthGrid(): void {\n const monthNames: string[] = this.isDateRangeMonthYearFormat\n ? this._dateTimeAdapter.getMonthNames('long')\n : this._dateTimeAdapter.getMonthNames('short');\n\n const monthList: CalendarMonth<D>[] = monthNames.map((monthName, index): CalendarMonth<D> => {\n const month = index + this.monthOffset;\n return {\n date: this._dateTimeAdapter.createDate(this.year, month),\n month,\n label: monthName,\n ariaLabel: this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(this.year, month, 1),\n this._dateTimeFormats.display.monthA11yLabel\n ),\n index,\n selected: month === this.monthSelected,\n current: month === this.currentMonth,\n tabIndex: month === this.monthSelected ? 0 : -1\n };\n });\n\n // if the date range is selected\n if (this.isDateRangeMonthYearFormat) {\n this._changeSelectedRangeMonths(this._selectedRangeDate, monthList);\n }\n\n this._calendarMonthListGrid = [];\n /** Creating 2d grid */\n while (monthList.length) {\n this._calendarMonthListGrid.push(monthList.splice(0, this._amountOfColPerRow));\n }\n\n this._calendarMonthListGrid.forEach((row, rowIndex) => {\n row.forEach((monthCell, colIndex) => {\n monthCell.id = this._getId(this._getIndex(rowIndex, colIndex));\n });\n });\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this._calendarService.rowAmount = this._amountOfRows;\n this._calendarService.colAmount = this._amountOfColPerRow;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getMonthList()[index]);\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index, event }) => this.selectMonth(this._getMonthList()[index], event));\n }\n\n /**\n * @hidden\n * Returns transformed 1d array from 2d month grid.\n */\n private _getMonthList(): CalendarMonth<D>[] {\n return (<CalendarMonth<D>[]>[]).concat(...this._calendarMonthListGrid);\n }\n\n /** @hidden */\n private _focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--months\"\n role=\"grid\"\n [attr.aria-roledescription]=\"('coreCalendar.calendarMonthViewDescription' | fdTranslate)()\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (colMonths of _calendarMonthListGrid; track colMonths + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\" role=\"row\">\n @for (monthCell of colMonths; track monthCell + '' + colIndex; let colIndex = $index) {\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n [class.fd-calendar__my-item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (mouseenter)=\"_handleRangeHover(monthCell)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n [class.fd-button--toggled]=\"\n monthCell.selectedRange ||\n monthCell.hoverRange ||\n monthCell.selectedFirst ||\n monthCell.selectedLast\n \"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ ('coreCalendar.todayLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ ('coreCalendar.dateSelectedLabel' | fdTranslate)() }}</div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { CalendarYear, CalendarYearGrid } from '../../models/calendar-year-grid';\nimport { DefaultCalendarActiveCellStrategy, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\n\n/** Component representing the YearView of the Calendar Component. */\n@Component({\n selector: 'fd-calendar-year-view',\n templateUrl: './calendar-year-view.component.html',\n styleUrl: './calendar-year-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarYearViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** The id of the calendar passed from the parent component */\n @Input()\n id: string;\n\n /** Function that is called when the focus would escape the element. */\n @Input()\n focusEscapeFunction: EscapeFocusFunction;\n\n /** Parameter holding the year that is currently selected. */\n @Input()\n yearSelected: number;\n\n /**\n * Object to customize year grid\n */\n @Input()\n yearViewGrid: CalendarYearGrid;\n\n /** Whether the date range is year format only excluding month and day */\n @Input()\n isDateRangeYearFormat: boolean;\n\n /**\n * Whether user wants to mark year cells on hover.\n * Works only on range mode, when start year is selected.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Event fired when a year is selected. */\n @Output()\n readonly yearClicked: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /**\n * @hidden\n * This variable is used to define which year from calendarYearList should be focusable by tab key\n */\n _activeYear: number;\n\n /**\n * @hidden\n * Parameter that stores the dozen of years that are currently being displayed.\n */\n _calendarYearListGrid: CalendarYear<D>[][];\n\n /**\n * @hidden\n * Parameter storing the year of the present day.\n */\n _currentYear: number;\n\n /**\n * @hidden\n * Parameter storing first shown year on list\n */\n _firstYearInList: number;\n\n /** View ID */\n get viewId(): string {\n return this.id + '-year-view';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n /** @hidden */\n private _initiated = false;\n\n /** @hidden */\n private _selectedRangeDate: DateRange<D>;\n\n /** @hidden */\n private _isOnRangePick = false;\n\n /** @hidden */\n constructor(\n private _eRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n private _dateTimeAdapter: DatetimeAdapter<D>,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n ) {\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n this._firstYearInList = this._currentYear;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._initiated = true;\n\n this._setupKeyboardService();\n this._firstYearInList = this.yearSelected;\n this._constructYearGrid();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._initiated && ('yearViewGrid' in changes || 'yearSelected' in changes || 'id' in changes)) {\n this._constructYearGrid();\n }\n }\n\n /** The currently selected FdDates model start and end in range mode. */\n @Input()\n set selectedRangeDate(dateRange: DateRange<D>) {\n if (\n dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)\n ) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarYearListGrid) {\n this._changeSelectedRangeYears(dateRange, this._getYearList());\n }\n }\n\n get selectedRangeDate(): DateRange<D> {\n return this._selectedRangeDate;\n }\n\n /**\n * @hidden\n * Amount of selected years\n * 0, when there is no year selected, or start year is invalid,\n * 1, when there is only valid start year, or end year is same as start year,\n * 2, when both dates are valid\n */\n get _selectCounter(): number {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (\n this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))\n ) {\n return 1;\n }\n if (\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n ) {\n return 2;\n }\n return 0;\n }\n\n /** Method used to load the previous {{col * row}} years to be displayed. */\n loadNextYearList(): void {\n this._firstYearInList += this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n\n /** Method used to load the next {{col * row}} years to be displayed. */\n loadPreviousYearList(): void {\n this._firstYearInList -= this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear: CalendarYear<D>, event?: MouseEvent | KeyboardEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.yearSelected = selectedYear.year;\n this.yearClicked.emit(this.yearSelected);\n\n if (this.isDateRangeYearFormat) {\n this._selectRangeDate(selectedYear);\n this._handleRangeHoverEffect(event);\n }\n }\n\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell(): void {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n\n /**\n * @hidden\n * Method for handling the keyboard navigation.\n */\n _onKeydownYearHandler(event: KeyboardEvent, index: number): void {\n this._calendarService.onKeydownHandler(event, index);\n }\n\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * Get grid cell id be index\n * @param index\n */\n _getId(index: number): string {\n return this.viewId + '-year-' + index;\n }\n\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param year The calendar year that is hovered.\n */\n _handleRangeHover(year: CalendarYear<D>): void {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(year.date, start) < 0) {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) > 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) < 0;\n });\n } else {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) < 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) > 0;\n });\n }\n }\n }\n\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n private _getActiveYear(): number {\n const selectedYearCell = this._getYearList().find(({ year }) => year === this.yearSelected);\n if (selectedYearCell) {\n return selectedYearCell.year;\n }\n\n const currentYearCell = this._getYearList().find(({ year }) => year === this._currentYear);\n if (currentYearCell) {\n return currentYearCell.year;\n }\n\n return this._calendarYearListGrid[0][0].year;\n }\n\n /** @hidden */\n private _constructYearGrid(): void {\n const displayedYearsAmount: number = this.yearViewGrid.cols * this.yearViewGrid.rows;\n const calendarYearList: CalendarYear<D>[] = [];\n this._calendarYearListGrid = [];\n\n for (let x = 0; x < displayedYearsAmount; ++x) {\n const year = this._firstYearInList + x;\n calendarYearList.push({\n date: this._dateTimeAdapter.createDate(year),\n year,\n label: this._getYearName(year),\n ariaLabel: this._getAriaYearName(year),\n selected: year === this.yearSelected,\n current: year === this._currentYear,\n index: x\n });\n }\n\n // if the date range is selected\n if (this.isDateRangeYearFormat) {\n this._changeSelectedRangeYears(this._selectedRangeDate, calendarYearList);\n }\n\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.yearViewGrid.cols));\n }\n\n this._activeYear = this._getActiveYear();\n\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.year === this._activeYear ? 0 : -1;\n });\n });\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n private _handleRangeHoverEffect(event?: MouseEvent | KeyboardEvent): void {\n if (this.isDateRangeYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n }\n\n /**\n * @hidden\n * Change properties of range years, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected years.\n */\n private _changeSelectedRangeYears(dates: DateRange<D>, calendar: CalendarYear<D>[]): void {\n /** Pull list of calendar year */\n const calendarList = calendar;\n\n /** Reset changing properties */\n calendarList.forEach(\n (_year) =>\n (_year.selectedFirst =\n _year.selectedLast =\n _year.selected =\n _year.disabled =\n _year.hoverRange =\n _year.selectedRange =\n false)\n );\n\n if (dates) {\n let startYear: CalendarYear<D> | undefined;\n let endYear: CalendarYear<D> | undefined;\n if (dates.start) {\n /** Find start year and mark it as selected */\n startYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.start));\n if (startYear) {\n startYear.selected = true;\n startYear.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end year and mark it as selected */\n endYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.end));\n if (endYear) {\n endYear.selected = true;\n endYear.selectedLast = true;\n }\n }\n\n /** Verify if start year and end year is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all years, which are between start and end date */\n calendarList\n .filter(\n (_year) =>\n (_year.selectedRange = this._dateTimeAdapter.isBetween(\n _year.date,\n dates.start!,\n dates.end!\n ))\n )\n .forEach((_year) => (_year.selectedRange = true));\n }\n }\n }\n\n /**\n * @hidden\n * Check if dates are equal\n */\n private _isSameDate(date1: Nullable<D>, date2: Nullable<D>): boolean {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n\n /**\n * @hidden\n * Selects or updates the range of years in range mode.\n * Handles the start and end years and updates the selected range.\n * @param year The calendar year to be selected or updated in the range.\n */\n private _selectRangeDate(year: CalendarYear<D>): void {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: year.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n } else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start!, year.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeYears(this._selectedRangeDate, this._getYearList());\n }\n\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n private _getOrderedRange(date1: D, date2: D): { start: D; end: D } {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n\n /**\n * @hidden\n * Returns year name as a string.\n */\n private _getYearName(year: number): string {\n const formatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year, 1, 1));\n return this._getYearString(year, formatted);\n }\n\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n private _getAriaYearName(year: number): string {\n const formatted = this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(year, 1, 1),\n this._dateTimeFormats.display.yearA11yLabel\n );\n return this._getYearString(year, formatted);\n }\n\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n private _getYearString(year: number, defaultStr: string): string {\n if (typeof this.yearViewGrid.yearMapping === 'function') {\n return this.yearViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n private _getYearList(): CalendarYear<D>[] {\n return (<CalendarYear<D>[]>[]).concat(...this._calendarYearListGrid);\n }\n\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n private _getAmountOfYearsShownAtOnce(): number {\n return this.yearViewGrid.rows * this.yearViewGrid.cols;\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this._calendarService.colAmount = this.yearViewGrid.cols;\n this._calendarService.rowAmount = this.yearViewGrid.rows;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getYearList()[index]);\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectYear(this._getYearList()[index], event);\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n\n /** @hidden */\n private _focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"('coreCalendar.calendarYearsViewDescription' | fdTranslate)()\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\" role=\"row\">\n @for (yearCell of colYears; track yearCell + '' + colIndex; let colIndex = $index) {\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n [class.fd-calendar__my-item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (mouseenter)=\"_handleRangeHover(yearCell)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n [class.fd-button--toggled]=\"\n yearCell.selectedRange ||\n yearCell.hoverRange ||\n yearCell.selectedFirst ||\n yearCell.selectedLast\n \"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ ('coreCalendar.todayLabel' | fdTranslate)() }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ ('coreCalendar.dateSelectedLabel' | fdTranslate)() }}</div>\n</div>\n","/** Create an Error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `Calendar: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import { FD_LANGUAGE_ENGLISH } from '@fundamental-ngx/i18n';\nimport { Subject } from 'rxjs';\n\n/**\n * Provides i18n support for labels inside the calendar component.\n * @deprecated use i18n `coreCalendar` key instead\n */\nexport class CalendarI18nLabels {\n /** This is event that should be called, when labels are changed, to let component detect an changes. */\n readonly labelsChange: Subject<void> = new Subject();\n\n /** Year selection aria label. Used on the button to navigate to the years view. */\n yearSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearSelectionLabel;\n\n /** Years range selection aria label. Used on the button to navigate to the years range view. */\n yearsRangeSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearsRangeSelectionLabel;\n\n /** Month selection aria label. Used on the button to navigate to the months view. */\n monthSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.monthSelectionLabel;\n\n /** Day selection aria label. Used on the button to navigate to the day view. */\n dateSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectionLabel;\n\n /** Previous year aria label. Used on the button to switch to a previous year in the years view. */\n previousYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousYearLabel;\n\n /** Next year aria label. Used on the button to switch to a next year in the years view. */\n nextYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextYearLabel;\n\n /** Previous month aria label. Used on the button to switch to a previous month in the months view. */\n previousMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousMonthLabel;\n\n /** Next month aria label. Used on the button to switch to a next month in the months view. */\n nextMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextMonthLabel;\n\n /** Week number column label */\n weekColumnLabel = FD_LANGUAGE_ENGLISH.coreCalendar.weekColumnLabel;\n\n /** Selected date label. Used on the selected day/month/year cell. */\n dateSelectedLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectedLabel;\n\n /** Is used to describe present date */\n todayLabel = FD_LANGUAGE_ENGLISH.coreCalendar.todayLabel;\n\n /** Range start label. Used for date range selection */\n rangeStartLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeStartLabel;\n\n /** Range end label. Used for date range selection */\n rangeEndLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeEndLabel;\n\n /** Past days aria label. Used when days in the past are accessed */\n dayInPastLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dayInPastLabel;\n\n /** Past days aria label. Used when days in the past are accessed */\n closeCalendarLabel = FD_LANGUAGE_ENGLISH.coreCalendar.closeCalendarLabel;\n\n /** Calendar day view aria role description. */\n calendarDayViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarDayViewDescription;\n\n /** Calendar month view aria role description. */\n calendarMonthViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarMonthViewDescription;\n\n /** Calendar years view aria role description. */\n calendarYearsViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsViewDescription;\n\n /** Calendar years range view aria role description. */\n calendarYearsRangeViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsRangeViewDescription;\n}\n","import { computed, inject, Signal } from '@angular/core';\nimport { FD_LANGUAGE_SIGNAL, FdLanguage } from '@fundamental-ngx/i18n';\nimport { CalendarI18nLabels } from './i18n/calendar-i18n-labels';\n\n/**\n * Use deprecated `CalendarI18nLabels` to patch `FD_LANGUAGE_SIGNAL` signal\n */\nexport function patchDeprecatedI18nLabels(): Signal<FdLanguage> {\n const deprecatedSymbol = inject(CalendarI18nLabels, { optional: true });\n if (deprecatedSymbol) {\n const parentSignal = inject(FD_LANGUAGE_SIGNAL, { skipSelf: true });\n return computed(() => {\n const existingLang = parentSignal();\n return {\n ...existingLang,\n coreCalendar: {\n ...existingLang.coreCalendar,\n ...deprecatedSymbol\n }\n } as FdLanguage;\n });\n }\n return inject(FD_LANGUAGE_SIGNAL, { skipSelf: true });\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { SpecialDayRule } from '@fundamental-ngx/core/shared';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FD_LANGUAGE_SIGNAL } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './calendar-errors';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarLegendFocusingService } from './calendar-legend/calendar-legend-focusing.service';\nimport { CalendarLegendComponent } from './calendar-legend/calendar-legend.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarService } from './calendar.service';\nimport { AggregatedYear } from './models/aggregated-year';\nimport { CalendarCurrent } from './models/calendar-current';\nimport { CalendarYearGrid } from './models/calendar-year-grid';\nimport { DisableDateFunction, EscapeFocusFunction, FocusableCalendarView } from './models/common';\nimport { DateRange } from './models/date-range';\nimport { patchDeprecatedI18nLabels } from './patch-deprecated-i18n-labels';\nimport {\n CalendarType,\n CalendarTypeEnum,\n DaysOfWeek,\n FdCalendarView,\n FdCalendarViewEnum,\n NavigationButtonDisableFunction\n} from './types';\n\nlet calendarUniqueId = 0;\n\n/**\n * Months: 1 = January, 12 = december.\n * Days: 1 = Sunday, 7 = Saturday\n *\n * Calendar component used for selecting dates, typically used by the DatePicker and DateTimePicker components.\n * Supports the Angular forms module, enabling form validity, ngModel, etc.\n * ```html\n * <fd-calendar></fd-calendar>\n * ```\n *\n */\n@Component({\n selector: 'fd-calendar',\n templateUrl: './calendar.component.html',\n styleUrl: './calendar.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n CalendarService,\n CalendarLegendFocusingService,\n contentDensityObserverProviders(),\n {\n provide: FD_LANGUAGE_SIGNAL,\n useFactory: patchDeprecatedI18nLabels\n }\n ],\n host: {\n '[attr.id]': 'id',\n class: 'fd-calendar fd-has-display-block'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ContentDensityModule,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarLegendComponent\n ]\n})\nexport class CalendarComponent<D> implements OnInit, OnChanges, ControlValueAccessor, Validator, OnDestroy {\n /** The currently selected date model in single mode. */\n @Input()\n selectedDate: Nullable<D>;\n\n /** The currently selected date model in multiple mode. */\n @Input()\n selectedMultipleDates: Array<D>;\n\n /** The currently selected date model with start and end in range mode. */\n @Input()\n selectedRangeDate: DateRange<D>;\n\n /** The currently selected date model with multiple ranges. */\n @Input()\n selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = false;\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n @Input()\n allowMultipleSelection = false;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n @HostBinding('class.fd-calendar--mobile-landscape')\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n @HostBinding('class.fd-calendar--mobile-portrait')\n mobilePortrait = false;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' */\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /**\n * The type of calendar\n * 'single' for single date selection\n * 'range' for a range of dates.\n */\n @Input()\n calType: CalendarType = CalendarTypeEnum.Single;\n\n /** Id of the calendar. If none is provided, one will be generated. */\n @Input()\n id = 'fd-calendar-' + calendarUniqueId++;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with D object as a parameter. ex:\n * `rule: (fdDate: D) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Whether to pick the date range in month or year or days format\n * Day format will have a month and year including day\n * Month format will have year including month\n * Year format will have just year\n * Values can be 'month' for Month format, 'year' for Year format or nothing for day format\n */\n @Input()\n dateRangeFormat = '';\n\n /** Event thrown every time active view is changed */\n @Output()\n readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /** Event thrown every time when value is overwritten from outside and throw back isValid */\n @Output()\n readonly isValidDateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event thrown every time when calendar should be closed */\n @Output()\n readonly closeCalendar: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event thrown, when close button is clicked */\n @Output()\n readonly closeClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(CalendarDayViewComponent)\n _dayViewComponent: CalendarDayViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarMonthViewComponent)\n _monthViewComponent: CalendarMonthViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarYearViewComponent)\n _yearViewComponent: CalendarYearViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarAggregatedYearViewComponent)\n _aggregatedYearViewComponent: CalendarAggregatedYearViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarHeaderComponent)\n _calendarHeaderComponent: CalendarHeaderComponent<D>;\n\n /**\n * Function used to disable previous button in the calendar header.\n * @param date selected date\n * @param currentlyDisplayedDate currently displayed date\n * @param activeView current view of calendar\n */\n @Input()\n previousButtonDisableFunction: NavigationButtonDisableFunction<D>;\n\n /**\n * Function used to disable next button in the calendar header.\n * @param date selected date\n * @param currentlyDisplayedDate currently displayed date\n * @param activeView current view of calendar\n */\n @Input()\n nextButtonDisableFunction: NavigationButtonDisableFunction<D>;\n\n /**\n * Whether to show the calendar legend below the calendar.\n * The legend displays special day markers and their meanings.\n */\n @Input()\n showCalendarLegend = false;\n\n /**\n * Whether to display the legend in column layout (true) or row layout (false).\n * Column layout is useful when legend is displayed alongside the calendar.\n */\n @Input()\n legendCol = false;\n\n /**\n * @hidden\n * Currently displayed days depending on month and year\n */\n _currentlyDisplayed: CalendarCurrent;\n\n /** @hidden */\n previousButtonDisabled: boolean;\n\n /** @hidden */\n nextButtonDisabled: boolean;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _adapterStartingDayOfWeek: DaysOfWeek;\n\n /** @hidden */\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n _contentDensityObserver: ContentDensityObserver,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n ) {\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n _contentDensityObserver.subscribe();\n // set default value\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1) as DaysOfWeek;\n this.selectedDate = this._dateTimeAdapter.today();\n this._changeDetectorRef.markForCheck();\n this._listenToLocaleChanges();\n }\n\n /** That allows to define function that should happen, when focus should normally escape of component */\n @Input()\n escapeFocusFunction: EscapeFocusFunction = (event?: KeyboardEvent): void => {\n event?.preventDefault();\n this._calendarHeaderComponent?.focus();\n };\n\n /**\n * Function used to disable certain dates in the calendar.\n */\n @Input()\n disableFunction: DisableDateFunction<D> = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n @Input()\n disableRangeStartFunction: DisableDateFunction<D> = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n @Input()\n disableRangeEndFunction: DisableDateFunction<D> = () => false;\n\n /** @hidden */\n @HostListener('focusout', ['$event'])\n focusOut(event: FocusEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n onChange: (_: D | Array<D> | DateRange<D> | Array<DateRange<D>>) => void = () => {};\n\n /** @hidden */\n onTouched: () => void = () => {};\n\n /** @hidden */\n ngOnInit(): void {\n this._prepareDisplayedView();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (\n 'nextButtonDisableFunction' in changes ||\n 'previousButtonDisableFunction' in changes ||\n '_currentlyDisplayed' in changes\n ) {\n this._setNavigationButtonsStates();\n }\n }\n\n /** @hidden */\n getWeekStartDay(): DaysOfWeek {\n return this.startingDayOfWeek === undefined ? this._adapterStartingDayOfWeek : this.startingDayOfWeek;\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms.\n */\n writeValue(selected: D | Array<D> | DateRange<D> | Array<DateRange<D>>): void {\n let valid = true;\n\n const isValidDate = (date: D | null): boolean => date != null && this._dateTimeAdapter.isValid(date);\n const isValidRange = (range: DateRange<D>): boolean =>\n range != null && isValidDate(range.start) && isValidDate(range.end);\n\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n const dates = Array.isArray(selected) ? (selected as Array<D>) : [selected as D];\n valid = dates.every(isValidDate);\n this.selectedMultipleDates = dates;\n } else if (this.calType === CalendarTypeEnum.Range) {\n const ranges = Array.isArray(selected) ? (selected as Array<DateRange<D>>) : [];\n valid = ranges.every(isValidRange);\n this.selectedMultipleDateRanges = ranges.map((range) => ({\n start: range?.start || null,\n end: range?.end || null\n }));\n }\n } else {\n if (this.calType === CalendarTypeEnum.Single) {\n valid = isValidDate(selected as D);\n this.selectedDate = selected as D;\n } else if (this.calType === CalendarTypeEnum.Range) {\n const range = selected as DateRange<D>;\n valid = range && isValidRange(range);\n this.selectedRangeDate = range\n ? { start: range.start || null, end: range.end || null }\n : {\n start: null,\n end: null\n };\n }\n }\n\n if (valid) {\n this._prepareDisplayedView();\n }\n\n this._changeDetectorRef.detectChanges();\n this.isValidDateChange.emit(valid);\n }\n\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate(): { [key: string]: any } | null {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n\n /** @hidden */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Method that handle active view change and throws event.\n *\n * Fired by calendar header component.\n */\n handleActiveViewChange(activeView: FdCalendarView): void {\n if (activeView === this.activeView) {\n return;\n }\n\n this.activeView = activeView;\n\n this.activeViewChange.emit(activeView);\n\n if (activeView === FdCalendarViewEnum.Month) {\n this.onMonthViewSelected();\n }\n if (activeView === FdCalendarViewEnum.Year) {\n this.onYearViewSelected();\n }\n if (activeView === FdCalendarViewEnum.AggregatedYear) {\n this.onYearsRangeViewSelected();\n }\n\n this._setNavigationButtonsStates();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected single date changed\n */\n selectedDateChanged(date: D): void {\n this.selectedDate = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedDateChange.emit(date);\n this.closeCalendar.emit();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected multi date changed\n */\n selectedMultipleDatesChanged(date: Array<D>): void {\n this.selectedMultipleDates = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedMultipleDatesChange.emit(date);\n this.closeCalendar.emit();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedRangeDateChanged(dates: DateRange<D>): void {\n if (dates) {\n this.selectedRangeDate = { start: dates.start, end: dates.end };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this.closeCalendar.emit();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedMultipleDateRangesChanged(dates: Array<DateRange<D>>): void {\n if (dates) {\n this.selectedMultipleDateRanges = dates;\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n this.onChange(this.selectedMultipleDateRanges);\n this.closeCalendar.emit();\n }\n }\n\n /** Function that handles next arrow icon click, depending on current view it changes month, year or list of years */\n handleNextArrowClick(): void {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayNextMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayNextYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayNextYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayNextYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n\n /** Function that handles previous arrow icon click, depending on current view it changes month, year or list of years */\n handlePreviousArrowClick(): void {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayPreviousMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayPreviousYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayPreviousYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayPreviousYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n\n /** Function that allows to switch actual view to next month */\n displayNextMonth(): void {\n if (this._currentlyDisplayed.month === 12) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year + 1, month: 1 };\n } else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month + 1\n };\n }\n }\n\n /** Function that allows to switch actual view to previous month */\n displayPreviousMonth(): void {\n if (this._currentlyDisplayed.month <= 1) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year - 1, month: 12 };\n } else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month - 1\n };\n }\n }\n\n /** Function that allows to switch actual view to next year */\n displayNextYear(): void {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year + 1 };\n }\n\n /** Function that allows to switch actual view to previous year */\n displayPreviousYear(): void {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year - 1 };\n }\n\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearList(): void {\n this._yearViewComponent.loadNextYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearList(): void {\n this._yearViewComponent.loadPreviousYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearsList(): void {\n this._aggregatedYearViewComponent.loadNextYearsList();\n }\n\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearsList(): void {\n this._aggregatedYearViewComponent.loadPreviousYearsList();\n }\n\n /**\n * Function that allows to change currently displayed month/year configuration,\n * which are connected to days displayed\n */\n setCurrentlyDisplayed(date: Nullable<D>): void {\n if (this._dateTimeAdapter.isValid(date)) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(date!),\n year: this._dateTimeAdapter.getYear(date!)\n };\n }\n }\n\n /**\n * Set initial focus on one of the calendar's element\n */\n initialFocus(): void {\n this._getActiveFocusableView()?.setFocusOnCell();\n }\n\n /**\n * @hidden\n * Function that handles changes from month view child component, changes actual view and changes currently displayed month\n */\n handleMonthViewChange(month: number): void {\n this._currentlyDisplayed = { month, year: this._currentlyDisplayed.year };\n // if mm/yyyy format date is not enabled then only show days view\n if (!this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n\n this.activeViewChange.emit(this.activeView);\n }\n\n /** Select year */\n selectedYear(yearSelected: number): void {\n this._currentlyDisplayed.year = yearSelected;\n\n // if month format date range is enabled then on selecting year show month view else show days view\n // if year format date range is enabled then view remains same on selecting year\n if (this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Month;\n this.onMonthViewSelected();\n } else if (this.isDateRangeYearFormat()) {\n this.activeView = FdCalendarViewEnum.Year;\n this.onYearViewSelected();\n } else {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n }\n\n /** Select year range */\n selectedYears(yearsSelected: AggregatedYear): void {\n this.activeView = FdCalendarViewEnum.Year;\n this._currentlyDisplayed = {\n ...this._currentlyDisplayed,\n year: yearsSelected.startYear\n };\n this.onYearViewSelected();\n }\n\n /** @hidden */\n onDaysViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._dayViewComponent?.setFocusOnCell();\n }\n\n /** @hidden */\n onMonthViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._monthViewComponent?.setFocusOnCell();\n }\n\n /** @hidden */\n onYearViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._yearViewComponent?.setFocusOnCell();\n }\n\n /** @hidden */\n onYearsRangeViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._aggregatedYearViewComponent?.setFocusOnCell();\n }\n\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid(): boolean {\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n return (\n this.selectedMultipleDates &&\n this.selectedMultipleDates.every((d) => this._dateTimeAdapter.isValid(d))\n );\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (\n this.selectedMultipleDateRanges &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.start)) &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.end))\n );\n }\n } else {\n if (this.calType === CalendarTypeEnum.Single) {\n return this._dateTimeAdapter.isValid(this.selectedDate);\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (\n this.selectedRangeDate &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n );\n }\n }\n return false;\n }\n\n /** Whether the date range format is month */\n isDateRangeMonthFormat(): boolean {\n return this.dateRangeFormat === 'month';\n }\n\n /** Whether the date range format is year */\n isDateRangeYearFormat(): boolean {\n return this.dateRangeFormat === 'year';\n }\n\n /** @hidden */\n private _listenToLocaleChanges(): void {\n this._subscriptions.add(\n this._dateTimeAdapter.localeChanges.subscribe(() => {\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1) as DaysOfWeek;\n this._changeDetectorRef.markForCheck();\n })\n );\n }\n\n /**\n * @hidden\n * Method that sets up the currently displayed variables, like shown month and year.\n * Day grid is based on currently displayed month and year\n */\n private _prepareDisplayedView(): void {\n const { selectedDate, selectedRangeDate, selectedMultipleDates, selectedMultipleDateRanges } = this;\n\n if (\n this.calType === CalendarTypeEnum.Single &&\n this._dateTimeAdapter.isValid(selectedDate) &&\n !this.allowMultipleSelection\n ) {\n this._setCurrentlyDisplayed(selectedDate as D);\n } else if (selectedMultipleDates?.length > 0 && this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDates[0]);\n } else if (selectedRangeDate?.start && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.start);\n } else if (selectedRangeDate?.end && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.end);\n } else if (\n selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].start &&\n this.allowMultipleSelection\n ) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].start);\n } else if (\n selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].end &&\n this.allowMultipleSelection\n ) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].end);\n } else {\n const today = this._dateTimeAdapter.today();\n this._setCurrentlyDisplayed(today);\n }\n }\n\n /** @hidden */\n private _setCurrentlyDisplayed(date: D): void {\n this._currentlyDisplayed = {\n year: this._dateTimeAdapter.getYear(date),\n month: this._dateTimeAdapter.getMonth(date)\n };\n }\n\n /** @hidden */\n private _getActiveFocusableView(): FocusableCalendarView | null {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n return this._dayViewComponent;\n case FdCalendarViewEnum.Month:\n return this._monthViewComponent;\n case FdCalendarViewEnum.Year:\n return this._yearViewComponent;\n case FdCalendarViewEnum.AggregatedYear:\n return this._aggregatedYearViewComponent;\n default:\n return null;\n }\n }\n\n /** @hidden */\n private _setNavigationButtonsStates(): void {\n this.previousButtonDisabled = this._isNavigationButtonDisabled(this.previousButtonDisableFunction);\n this.nextButtonDisabled = this._isNavigationButtonDisabled(this.nextButtonDisableFunction);\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n private _isNavigationButtonDisabled(disableFunction?: NavigationButtonDisableFunction<D>): boolean {\n return (\n typeof disableFunction === 'function' &&\n disableFunction(this.selectedDate, this._currentlyDisplayed, this.activeView)\n );\n }\n}\n","<fd-calendar-header\n [currentlyDisplayed]=\"_currentlyDisplayed\"\n [activeView]=\"activeView\"\n [id]=\"id\"\n [calendarYearGrid]=\"yearGrid\"\n (closeClicked)=\"closeClicked.emit()\"\n (nextClicked)=\"handleNextArrowClick()\"\n (previousClicked)=\"handlePreviousArrowClick()\"\n [previousButtonDisabled]=\"previousButtonDisabled\"\n [nextButtonDisabled]=\"nextButtonDisabled\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n></fd-calendar-header>\n@if (_currentlyDisplayed) {\n @if (activeView === 'day') {\n <fd-calendar-day-view\n [selectedDate]=\"selectedDate\"\n [selectedMultipleDates]=\"selectedMultipleDates\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [selectedMultipleDateRanges]=\"selectedMultipleDateRanges\"\n (selectedDateChange)=\"selectedDateChanged($event)\"\n (selectedMultipleDatesChange)=\"selectedMultipleDatesChanged($event)\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n (selectedMultipleDateRangesChange)=\"selectedMultipleDateRangesChanged($event)\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [allowMultipleSelection]=\"allowMultipleSelection\"\n [markWeekends]=\"markWeekends\"\n [currentlyDisplayed]=\"_currentlyDisplayed\"\n [startingDayOfWeek]=\"getWeekStartDay()\"\n [disableFunction]=\"disableFunction\"\n [disableRangeEndFunction]=\"disableRangeEndFunction\"\n [disableRangeStartFunction]=\"disableRangeStartFunction\"\n [calType]=\"calType\"\n [id]=\"id\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n [specialDaysRules]=\"specialDaysRules\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n (nextMonthSelect)=\"displayNextMonth()\"\n (previousMonthSelect)=\"displayPreviousMonth()\"\n ></fd-calendar-day-view>\n } @else if (activeView === 'month') {\n <fd-calendar-month-view\n [monthSelected]=\"_currentlyDisplayed.month\"\n [year]=\"_currentlyDisplayed.year\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n [isDateRangeMonthYearFormat]=\"isDateRangeMonthFormat()\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n (monthClicked)=\"handleMonthViewChange($event)\"\n ></fd-calendar-month-view>\n } @else if (activeView === 'year') {\n <fd-calendar-year-view\n [yearSelected]=\"_currentlyDisplayed.year\"\n [yearViewGrid]=\"yearGrid\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n [isDateRangeYearFormat]=\"isDateRangeYearFormat()\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n (yearClicked)=\"selectedYear($event)\"\n >\n </fd-calendar-year-view>\n } @else if (activeView === 'aggregatedYear') {\n <fd-calendar-aggregated-year-view\n (yearsClicked)=\"selectedYears($event)\"\n [yearSelected]=\"_currentlyDisplayed.year\"\n [yearViewGrid]=\"yearGrid\"\n [aggregatedYearsViewGrid]=\"aggregatedYearGrid\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n >\n </fd-calendar-aggregated-year-view>\n }\n}\n@if (showCalendarLegend && specialDaysRules.length > 0) {\n <fd-calendar-legend [specialDaysRules]=\"specialDaysRules\" [col]=\"legendCol\"> </fd-calendar-legend>\n}\n","import { NgModule } from '@angular/core';\n\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { CalendarCloseButtonDirective } from './calendar-directives';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarComponent } from './calendar.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [\n CalendarComponent,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective\n ],\n exports: [\n CalendarComponent,\n CalendarDayViewComponent,\n CalendarHeaderComponent,\n CalendarYearViewComponent,\n CalendarMonthViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective,\n ContentDensityModule\n ]\n})\nexport class CalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService","CalendarActiveDayCellStrategy"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-calendar.mjs","sources":["../../../../libs/core/calendar/calendar-directives.ts","../../../../libs/core/calendar/calendar.service.ts","../../../../libs/core/calendar/types.ts","../../../../libs/core/calendar/calendar-header/calendar-header.component.ts","../../../../libs/core/calendar/calendar-header/calendar-header.component.html","../../../../libs/core/calendar/calendar-legend/calendar-legend-focusing.service.ts","../../../../libs/core/calendar/calendar-legend/calendar-legend-item.component.ts","../../../../libs/core/calendar/calendar-legend/calendar-legend.component.ts","../../../../libs/core/calendar/models/common.ts","../../../../libs/core/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.html","../../../../libs/core/calendar/models/calendar-day.ts","../../../../libs/core/calendar/models/date-range.ts","../../../../libs/core/calendar/calendar-views/calendar-day-view/calendar-day-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-day-view/calendar-day-view.component.html","../../../../libs/core/calendar/calendar-views/calendar-month-view/calendar-month-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-month-view/calendar-month-view.component.html","../../../../libs/core/calendar/calendar-views/calendar-year-view/calendar-year-view.component.ts","../../../../libs/core/calendar/calendar-views/calendar-year-view/calendar-year-view.component.html","../../../../libs/core/calendar/calendar-errors.ts","../../../../libs/core/calendar/i18n/calendar-i18n-labels.ts","../../../../libs/core/calendar/patch-deprecated-i18n-labels.ts","../../../../libs/core/calendar/calendar.component.ts","../../../../libs/core/calendar/calendar.component.html","../../../../libs/core/calendar/calendar.module.ts","../../../../libs/core/calendar/fundamental-ngx-core-calendar.ts"],"sourcesContent":["import { Attribute, Directive } from '@angular/core';\nimport { resolveTranslationSignal } from '@fundamental-ngx/i18n';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-calendar-close-button]',\n host: {\n class: 'fd-calendar__close-button',\n '[attr.aria-label]': '_originalAriaLabel || _closeCalendarLabel()',\n '[attr.title]': '_originalTitle || _closeCalendarLabel()'\n },\n standalone: true\n})\nexport class CalendarCloseButtonDirective {\n /** @hidden */\n protected _closeCalendarLabel = resolveTranslationSignal('coreCalendar.closeCalendarLabel');\n\n /** @hidden */\n constructor(\n @Attribute('aria-label') protected _originalAriaLabel: string,\n @Attribute('title') protected _originalTitle: string\n ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { EscapeFocusFunction } from './models/common';\n\n@Injectable()\nexport class CalendarService {\n /** Row amount */\n rowAmount = 3;\n\n /** Column amount */\n colAmount = 4;\n\n /** Event thrown, when the element is selected by space or enter keys */\n onKeySelect: Subject<{ index: number; event: KeyboardEvent }> = new Subject<{\n index: number;\n event: KeyboardEvent;\n }>();\n\n /** Event thrown, when the focus goes after list of elements */\n onListEndApproach: Subject<number> = new Subject<number>();\n\n /** Event thrown, when the focus goes before list of elements */\n onListStartApproach: Subject<number> = new Subject<number>();\n\n /** Event thrown, when the focus is changed. */\n onFocusIdChange: Subject<number> = new Subject<number>();\n\n /** Left Arrow Id, which will be focused by default on focus escape */\n leftArrowId: string;\n\n /** Function that is called when the focus would escape the element. */\n focusEscapeFunction: EscapeFocusFunction;\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /**\n * Standardized method to calculate grid [x][y] to index number\n */\n getId(row: number, col: number): number {\n return row * this.colAmount + col;\n }\n\n /**\n * Method that handles keydown events, dedicated for All Calendar views, which have a list with row x col elements.\n * Triggers the events, when the focus approaches start and end of list. Or when there is basic change of focus.\n * Triggers also event, when the element is selected by enter key, or space bar.\n * @param event KeyboardEvent\n * @param index which is number (0 - (rowAmount * colAmount))\n */\n onKeydownHandler(event: KeyboardEvent, index: number): void {\n const rtl = this._rtlService?.rtl() ?? false;\n\n switch (event.key) {\n case 'Spacebar':\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.onKeySelect.next({ index, event });\n break;\n }\n case 'Left':\n case 'ArrowLeft': {\n event.preventDefault();\n if (!rtl) {\n this.focusLeftElement(index);\n } else {\n this.focusRightElement(index);\n }\n break;\n }\n case 'Right':\n case 'ArrowRight': {\n event.preventDefault();\n if (!rtl) {\n this.focusRightElement(index);\n } else {\n this.focusLeftElement(index);\n }\n break;\n }\n case 'Up':\n case 'ArrowUp': {\n event.preventDefault();\n if (index <= this.colAmount - 1) {\n this.onListStartApproach.next(this.getId(this.rowAmount - 1, 0) + index);\n } else {\n this.onFocusIdChange.next(index - this.colAmount);\n }\n break;\n }\n case 'Down':\n case 'ArrowDown': {\n event.preventDefault();\n if (index >= this.getId(this.rowAmount - 1, 0)) {\n this.onListEndApproach.next(index - this.getId(this.rowAmount - 1, 0));\n } else {\n this.onFocusIdChange.next(index + this.colAmount);\n }\n break;\n }\n case 'Tab': {\n if (!event.shiftKey) {\n if (typeof this.focusEscapeFunction === 'function') {\n this.focusEscapeFunction(event);\n } else {\n const element = document.getElementById(this.leftArrowId);\n if (element) {\n element.focus();\n }\n }\n event.preventDefault();\n break;\n }\n }\n }\n }\n\n /**\n * @hidden\n * Right Element focus trigger\n */\n focusRightElement(index: number): void {\n if (index === this.getId(this.rowAmount, 0) - 1) {\n this.onListEndApproach.next(0);\n } else {\n this.onFocusIdChange.next(index + 1);\n }\n }\n\n /**\n * @hidden\n * Left Element focus trigger\n */\n focusLeftElement(index: number): void {\n if (index === 0) {\n this.onListStartApproach.next(this.getId(this.rowAmount, 0) - 1);\n } else {\n this.onFocusIdChange.next(index - 1);\n }\n }\n}\n","import { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { CalendarCurrent } from './models/calendar-current';\n\n/** Type of calendar */\nexport type CalendarType = 'single' | 'range';\n\n/** Enum of calendarTypes */\nexport enum CalendarTypeEnum {\n Single = 'single',\n Range = 'range'\n}\n\n/** Type for the calendar view */\nexport type FdCalendarView = 'day' | 'month' | 'year' | 'aggregatedYear';\n\n/** Type for the calendar view */\nexport enum FdCalendarViewEnum {\n Day = 'day',\n Month = 'month',\n Year = 'year',\n AggregatedYear = 'aggregatedYear'\n}\n\n/** Type for the days of the week. */\nexport type DaysOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport type NavigationButtonDisableFunction<D> = (\n date: Nullable<D>,\n currentlyDisplayedDate: CalendarCurrent,\n activeView: FdCalendarView\n) => boolean;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../calendar.service';\nimport { CalendarCurrent } from '../models/calendar-current';\nimport { CalendarYearGrid } from '../models/calendar-year-grid';\nimport { FdCalendarView, FdCalendarViewEnum } from '../types';\n\n/**\n * Internal use only.\n * Header of the calendar component.\n */\n@Component({\n selector: 'fd-calendar-header',\n templateUrl: './calendar-header.component.html',\n styleUrl: './calendar-header.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarHeaderComponent<D> implements OnInit, OnChanges {\n /** Currently active view. Needed for a11y labels. */\n @Input()\n activeView: FdCalendarView;\n\n /** Currently displayed date on the calendar. */\n @Input()\n currentlyDisplayed: CalendarCurrent;\n\n /** whether previous navigation button should be disabled in the header. */\n @Input()\n previousButtonDisabled: boolean;\n\n /** whether next navigation button should be disabled in the header. */\n @Input()\n nextButtonDisabled: boolean;\n\n /**\n * Object to customize year grid\n */\n @Input()\n set calendarYearGrid(yearGrid: CalendarYearGrid) {\n this._amountOfYearsPerPeriod = yearGrid.cols * yearGrid.rows - 1;\n this._calculateSelectAggregatedYearLabel();\n }\n\n /** Calendar ID */\n @Input()\n id: string;\n\n /** Whether calendar should be rendered in mobile landscape mode. */\n @Input()\n mobileLandscape = false;\n\n /** Event emitted when the active view should change. */\n @Output()\n readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event emitted when the previous button is clicked. */\n @Output()\n readonly previousClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the next button is clicked. */\n @Output()\n readonly nextClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild('prevButton', { read: ElementRef })\n _prevButtonComponent: ElementRef;\n\n /** Aria label for the previous button. Depends on the active view. */\n get previousAriaLabel(): 'coreCalendar.previousMonthLabel' | 'coreCalendar.previousYearLabel' {\n return this.isOnDayView ? 'coreCalendar.previousMonthLabel' : 'coreCalendar.previousYearLabel';\n }\n\n /** Aria label for the next button. Depends on the active view. */\n get nextAriaLabel(): 'coreCalendar.nextMonthLabel' | 'coreCalendar.nextYearLabel' {\n return this.isOnDayView ? 'coreCalendar.nextMonthLabel' : 'coreCalendar.nextYearLabel';\n }\n\n /** Button aria label to open month selection view. */\n get selectMonthAriaLabel(): 'coreCalendar.monthSelectionLabel' | 'coreCalendar.dateSelectionLabel' {\n return this.isOnMonthView ? 'coreCalendar.dateSelectionLabel' : 'coreCalendar.monthSelectionLabel';\n }\n\n /** Button aria label to open aggregated years selection view. */\n get selectAggregatedYearAriaLabel(): 'coreCalendar.yearsRangeSelectionLabel' | 'coreCalendar.dateSelectionLabel' {\n return this.isOnAggregatedYearsView\n ? 'coreCalendar.dateSelectionLabel'\n : 'coreCalendar.yearsRangeSelectionLabel';\n }\n\n /** Button label to open month selection view. */\n selectMonthLabel: string;\n\n /** Button label to open year selection view. */\n selectYearLabel: string;\n\n /** Button label to open aggregated years selection view. */\n selectAggregatedYearLabel: string;\n\n /** Get information is calendar is on aggregated years view */\n get isOnAggregatedYearsView(): boolean {\n return this.activeView === FdCalendarViewEnum.AggregatedYear;\n }\n\n /** Get information is calendar is on year view */\n get isOnYearView(): boolean {\n return this.activeView === FdCalendarViewEnum.Year;\n }\n\n /** Get information is calendar is on month view */\n get isOnMonthView(): boolean {\n return this.activeView === FdCalendarViewEnum.Month;\n }\n\n /** Get information is calendar is on day view */\n get isOnDayView(): boolean {\n return this.activeView === FdCalendarViewEnum.Day;\n }\n\n /**\n * Component id\n */\n get viewId(): string {\n return this.id + '-header';\n }\n\n /**\n * @hidden\n * Previous button id\n */\n get _prevButtonId(): string {\n return this.viewId + '-left-arrow';\n }\n\n /**\n * @hidden\n * Next button id\n */\n get _nextButtonId(): string {\n return this.viewId + '-right-arrow';\n }\n\n /**\n * @hidden\n * Month label id\n */\n get _monthButtonLabelId(): string {\n return this.viewId + '-month-label';\n }\n\n /**\n * @hidden\n * Select month aria label id\n */\n get _selectMonthButtonAriaLabelId(): string {\n return this.viewId + '-select-month-aria-label';\n }\n\n /**\n * @hidden\n * Year label id\n */\n get _yearButtonLabelId(): string {\n return this.viewId + '-year-label';\n }\n\n /**\n * @hidden\n * Select year aria label id\n */\n get _selectYearButtonAriaLabelId(): string {\n return this.viewId + '-select-year-aria-label';\n }\n\n /**\n * @hidden\n * Years range label id\n */\n get _yearsRangeButtonLabelId(): string {\n return this.viewId + '-years-range-label';\n }\n\n /**\n * @hidden\n * Select years range aria label id\n */\n get _selectYearsRangeButtonAriaLabelId(): string {\n return this.viewId + '-select-years-range-aria-label';\n }\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** Month names */\n private _monthNames: string[] = [];\n\n /** Get information about amount of years displayed at once on year view */\n private _amountOfYearsPerPeriod = 1;\n\n /** @hidden */\n constructor(\n private _changeDetRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n private _dateTimeAdapter: DatetimeAdapter<D>\n ) {}\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes.currentlyDisplayed && !changes.currentlyDisplayed.firstChange) ||\n (changes.activeView && !changes.activeView.firstChange)\n ) {\n this._calculateLabels();\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._calendarService.leftArrowId = this._prevButtonId;\n\n this._calculateMonthNames();\n\n this._calculateLabels();\n\n this._listenToLocaleChanges();\n }\n\n /**\n * Focus on focusable control within the header\n */\n focus(): void {\n this._prevButtonComponent.nativeElement?.focus();\n }\n\n /** @hidden */\n _processViewChange(type: FdCalendarView, event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n\n this.activeView = type === this.activeView ? FdCalendarViewEnum.Day : type;\n\n this.activeViewChange.emit(this.activeView);\n }\n\n /** @hidden */\n private _listenToLocaleChanges(): void {\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._calculateMonthNames();\n this._calculateLabels();\n this._changeDetRef.markForCheck();\n });\n }\n\n /** @hidden */\n private _calculateLabels(): void {\n this._calculateSelectMonthLabel();\n this._calculateSelectYearLabel();\n this._calculateSelectAggregatedYearLabel();\n }\n\n /** @hidden */\n private _calculateSelectMonthLabel(): void {\n this.selectMonthLabel = this._monthNames[this._getNormalizedDate().month - 1];\n }\n\n /** @hidden */\n private _calculateSelectYearLabel(): void {\n this.selectYearLabel = this._getYearName(this._getNormalizedDate().year);\n }\n\n /** @hidden */\n private _calculateSelectAggregatedYearLabel(): void {\n this.selectAggregatedYearLabel = `${this._getYearName(this._getNormalizedDate().year)}-${this._getYearName(\n this._getNormalizedDate().year + this._amountOfYearsPerPeriod\n )}`;\n }\n\n /** @hidden */\n private _calculateMonthNames(): void {\n this._monthNames = this._dateTimeAdapter.getMonthNames('long');\n }\n\n /** @hidden */\n private _getYearName(year: number): string {\n return this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year));\n }\n\n /** @hidden */\n private _getNormalizedDate(): CalendarCurrent {\n return {\n year: isNaN(this.currentlyDisplayed.year)\n ? this._dateTimeAdapter.getYear(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.year,\n month: isNaN(this.currentlyDisplayed.month)\n ? this._dateTimeAdapter.getMonth(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.month\n };\n }\n}\n","<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel | fdTranslate\"\n [ariaLabel]=\"previousAriaLabel | fdTranslate\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n @if (isOnDayView || isOnMonthView) {\n @if (!isOnMonthView) {\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n }\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n }\n @if (isOnAggregatedYearsView || isOnYearView) {\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n }\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel | fdTranslate\"\n [ariaLabel]=\"nextAriaLabel | fdTranslate\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel | fdTranslate }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\n</div>\n","import { Injectable, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\n@Injectable()\nexport class CalendarLegendFocusingService {\n /** Signal to track the focused special day number. Only one legend item can have focus at a time. */\n readonly focusedSpecialDayNumber = signal<Nullable<number>>(null);\n\n /** Clearing the focused element */\n clearFocusedElement(): void {\n this.focusedSpecialDayNumber.set(null);\n }\n\n /** Setting the special day number that is currently focused */\n handleLegendItemFocus(specialDayNumber: Nullable<number>): void {\n this.focusedSpecialDayNumber.set(specialDayNumber);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n ViewEncapsulation\n} from '@angular/core';\n\n@Component({\n selector: 'fd-calendar-legend-item',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"fd-calendar-legend__marker\"></span>\n <span class=\"fd-calendar-legend__text\">\n <ng-content>{{ text() }}</ng-content>\n </span>\n `,\n host: {\n tabindex: '0',\n '[class]': '_componentClasses()'\n }\n})\nexport class CalendarLegendItemComponent {\n /** The text of the legend item */\n text = input<string | undefined>();\n\n /** The color of the legend item marker */\n color = input<string>();\n\n /** If the marker is a circle or a square */\n circle = input<boolean>();\n\n /** @hidden */\n class = input<string | undefined>('');\n\n /** @hidden */\n readonly elementRef = inject(ElementRef);\n\n /** @hidden Computed CSS classes based on inputs */\n protected readonly _componentClasses = computed(() => {\n const classes = ['fd-calendar-legend__item'];\n\n classes.push(this.class()!);\n\n if (this.circle()) {\n classes.push('fd-calendar-legend__item--appointment');\n }\n\n if (this.color()) {\n classes.push(`fd-calendar-legend__item--${this.color()}`);\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { FocusableItemDirective, FocusableListDirective, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarLegendFocusingService } from './calendar-legend-focusing.service';\nimport { CalendarLegendItemComponent } from './calendar-legend-item.component';\n\n@Component({\n selector: 'fd-calendar-legend',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content></ng-content>\n <ng-container>\n <div fdkFocusableList>\n @if (displayTodayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--today\"\n [text]=\"'coreCalendar.todayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displaySelectedLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--selected\"\n [text]=\"'coreCalendar.dateSelectedLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--work\"\n [text]=\"'coreCalendar.workDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayNonWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--non-work\"\n [text]=\"'coreCalendar.nonWorkDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n\n @for (rule of specialDaysRules(); track rule.specialDayNumber) {\n <fd-calendar-legend-item\n fdkFocusableItem\n [text]=\"rule.legendText\"\n [circle]=\"rule.appointment\"\n [color]=\"'placeholder-' + rule.specialDayNumber\"\n (focus)=\"_handleFocusedElementEvent(rule.specialDayNumber)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n </div>\n </ng-container>\n `,\n host: {\n class: 'fd-calendar-legend',\n '[class.fd-calendar-legend--auto-column]': 'col()'\n },\n imports: [CalendarLegendItemComponent, FocusableListDirective, FocusableItemDirective, FdTranslatePipe]\n})\nexport class CalendarLegendComponent<D> {\n /**\n * Make it a column instead\n */\n col = input<boolean>(false);\n\n /** Whether to display the legend item for today's date. */\n displayTodayLegendItem = input<boolean>(true);\n\n /** Whether to display the legend item for the currently selected date. */\n displaySelectedLegendItem = input<boolean>(true);\n\n /** Whether to display the legend item for work days. */\n displayWorkDayLegendItem = input<boolean>(true);\n\n /** Whether to display the legend item for non-work days. */\n displayNonWorkDayLegendItem = input<boolean>(true);\n\n /**\n * Special days rules to be displayed in the legend\n */\n specialDaysRules = input<SpecialDayRule<D>[]>([]);\n\n /** @hidden */\n private readonly _focusingService = inject(CalendarLegendFocusingService, { optional: true });\n\n /** @hidden */\n _handleFocusedElementEvent(specialDayNumber: Nullable<number>): void {\n this._focusingService?.handleLegendItemFocus(specialDayNumber);\n }\n}\n","import { Nullable } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Base Calendar Cell\n */\nexport interface BaseCalendarCell {\n /** Representation in string */\n label: string;\n /** cell unique id */\n id?: string;\n /** currently active (today) */\n current?: boolean;\n /** selected cell */\n selected?: boolean;\n /** disabled cell */\n disabled?: boolean;\n /** cell tabindex */\n tabIndex?: number;\n /** aria-label */\n ariaLabel?: string;\n /** aria-labelledby */\n ariaLabelledBy?: string;\n /** list index */\n index?: number;\n}\n\nexport interface FocusableCalendarView {\n setFocusOnCell(): void;\n}\n\n/**\n * Calendar active cell strategy\n */\nexport abstract class AbstractCalendarActiveCellStrategy<T extends BaseCalendarCell = BaseCalendarCell> {\n /**\n * Calculate which table cell should be active\n */\n abstract getActiveCell(cells: T[]): T | null;\n}\n\nexport class DefaultCalendarActiveCellStrategy<\n T extends BaseCalendarCell = BaseCalendarCell\n> extends AbstractCalendarActiveCellStrategy<T> {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells: T[]): T | null {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n return cells[0] || null;\n }\n}\n\nexport type EscapeFocusFunction = Nullable<(event?: KeyboardEvent) => void>;\n\nexport type DisableDateFunction<D> = Nullable<(date: D) => boolean>;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { AggregatedYear, CalendarAggregatedYear } from '../../models/aggregated-year';\nimport { CalendarYearGrid } from '../../models/calendar-year-grid';\nimport { DefaultCalendarActiveCellStrategy, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\n\n@Component({\n selector: 'fd-calendar-aggregated-year-view',\n templateUrl: './calendar-aggregated-year-view.component.html',\n styleUrl: './calendar-aggregated-year-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'viewId'\n },\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarAggregatedYearViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** Parameter used in id of years used for help with focusing on the correct element during keyboard navigation. */\n @Input()\n id: string;\n\n /** Function that is called when the focus would escape the element. */\n @Input()\n focusEscapeFunction: EscapeFocusFunction;\n\n /** Parameter holding the year that is currently selected. */\n @Input()\n yearSelected: number;\n\n /**\n * Object to customize aggregated year grid\n */\n @Input()\n aggregatedYearsViewGrid: CalendarYearGrid;\n\n /**\n * Object to customize year grid\n */\n @Input()\n yearViewGrid: CalendarYearGrid;\n\n /** Event fired when a year is selected. */\n @Output()\n readonly yearsClicked: EventEmitter<AggregatedYear> = new EventEmitter<AggregatedYear>();\n\n /**\n * View ID\n */\n get viewId(): string {\n return this.id + '-years-range-view';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /**\n * @hidden\n * This variable is used to define which year from calendarYearList should be focusable by tab key\n */\n _activeYear: AggregatedYear;\n\n /**\n * @hidden\n * Parameter that stores the dozen of years that are currently being displayed.\n */\n _calendarYearListGrid: CalendarAggregatedYear[][];\n\n /**\n * @hidden\n * Current period of years selected\n */\n _yearsSelected: AggregatedYear | null;\n\n /**\n * @hidden\n * Parameter storing the year of the present day.\n */\n _currentYear: number;\n\n /**\n * @hidden\n * Parameter storing first shown year on list\n */\n private _firstYearInList: number;\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _initiated = false;\n\n /** @hidden */\n constructor(\n private _eRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n private _dateTimeAdapter: DatetimeAdapter<D>,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n ) {\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._initiated = true;\n\n this._setupKeyboardService();\n\n this._firstYearInList = this.yearSelected - this._yearsInOnePeriod();\n\n this._constructYearsGrid();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearsGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (\n this._initiated &&\n ('yearSelected' in changes ||\n 'aggregatedYearsViewGrid' in changes ||\n 'yearViewGrid' in changes ||\n 'id' in changes)\n ) {\n this._constructYearsGrid();\n }\n }\n\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear: CalendarAggregatedYear, event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this._yearsSelected = selectedYear.years;\n this.yearsClicked.emit(this._yearsSelected);\n }\n\n /** Method used to load the previous 12 years to be displayed. */\n loadNextYearsList(): void {\n this._firstYearInList += this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n\n /** Method used to load the next 12 years to be displayed. */\n loadPreviousYearsList(): void {\n this._firstYearInList -= this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell(): void {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearsList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n\n /** Method for handling the keyboard navigation. */\n _onKeydownYearHandler(event: KeyboardEvent, index: number): void {\n this._calendarService.onKeydownHandler(event, index);\n }\n\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Method returning index of aggregated year index cell\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * Get id of calendar's aggregated year item\n */\n _getId(index: number): string {\n return this.viewId + '-aggregated-years-' + index;\n }\n\n /**\n * @hidden\n * Check if specified year is between start year and end year)\n */\n _isBetween(aggregatedYear: AggregatedYear, yearToCheck: number): boolean {\n return aggregatedYear.endYear >= yearToCheck && aggregatedYear.startYear <= yearToCheck;\n }\n\n /** @hidden */\n private _constructYearsGrid(): void {\n const displayedYearsAmount: number = this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n const calendarYearList: CalendarAggregatedYear[] = [];\n this._calendarYearListGrid = [];\n\n for (let index = 0; index < displayedYearsAmount; ++index) {\n /**\n * Generates object with certain period of years,\n * which depends on amount of years displayed in year view\n */\n\n const years: AggregatedYear = {\n startYear: this._firstYearInList + this._yearsInOnePeriod() * index,\n endYear: this._firstYearInList + this._yearsInOnePeriod() * (index + 1) - 1\n };\n\n calendarYearList.push({\n years,\n label: this._getYearsName(years),\n ariaLabel: this._getAriaYearsName(years),\n selected: this._isBetween(years, this.yearSelected),\n current: this._isBetween(years, this._currentYear),\n index\n });\n }\n\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.aggregatedYearsViewGrid.cols));\n }\n\n const yearsCellSelected = calendarYearList.find((cell) => this._isBetween(cell.years, this.yearSelected));\n this._yearsSelected = yearsCellSelected ? yearsCellSelected.years : null;\n this._activeYear = this._getActiveYear();\n\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.years === this._activeYear ? 0 : -1;\n });\n });\n\n this._changeDetectorRef.detectChanges();\n }\n\n /**\n * @hidden\n * Returns year name as a string.\n */\n private _getYearsName(years: AggregatedYear): string {\n const startYearFormatted = this._dateTimeAdapter.getYearName(\n this._dateTimeAdapter.createDate(years.startYear, 1, 1)\n );\n const endYearFormatted = this._dateTimeAdapter.getYearName(\n this._dateTimeAdapter.createDate(years.endYear, 1, 1)\n );\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(\n years.endYear,\n endYearFormatted\n )}`;\n }\n\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n private _getAriaYearsName(years: AggregatedYear): string {\n const startYearFormatted = this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(years.startYear, 1, 1),\n this._dateTimeFormats.display.yearA11yLabel\n );\n const endYearFormatted = this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(years.endYear, 1, 1),\n this._dateTimeFormats.display.yearA11yLabel\n );\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(\n years.endYear,\n endYearFormatted\n )}`;\n }\n\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n private _getYearString(year: number, defaultStr: string): string {\n if (typeof this.aggregatedYearsViewGrid.yearMapping === 'function') {\n return this.aggregatedYearsViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n private _yearsInOnePeriod(): number {\n if (this.yearViewGrid) {\n return this.yearViewGrid.cols * this.yearViewGrid.rows;\n } else {\n return 12;\n }\n }\n\n /**\n * @hidden\n * Amount of years displayed in aggregated year view\n */\n private _periodsAmount(): number {\n return this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n }\n\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n private _getActiveYear(): AggregatedYear {\n const selectedYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this.yearSelected));\n if (selectedYearCell) {\n return selectedYearCell.years;\n }\n\n const currentYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this._currentYear));\n if (currentYearCell) {\n return currentYearCell.years;\n }\n\n return this._calendarYearListGrid[0][0].years;\n }\n\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n private _getYearsList(): CalendarAggregatedYear[] {\n return (<CalendarAggregatedYear[]>[]).concat(...this._calendarYearListGrid);\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this._calendarService.rowAmount = this.aggregatedYearsViewGrid.rows;\n this._calendarService.colAmount = this.aggregatedYearsViewGrid.cols;\n\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index }) => this.selectYear(this._getYearsList()[index]));\n\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n\n /** @hidden */\n private _focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarYearsRangeViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\">\n @for (cell of colYears; track cell + '' + colIndex; let colIndex = $index) {\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n [class.fd-calendar__my-item--current]=\"cell.current\"\n [class.is-active]=\"cell.selected\"\n [attr.id]=\"cell.id\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.data-fd-calendar-years]=\"cell.years.startYear + '-' + cell.years.endYear\"\n (keydown)=\"_onKeydownYearHandler($event, cell.index)\"\n (click)=\"selectYear(cell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"cell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n cell.id +\n '-aria-label ' +\n (cell.current ? _todayLabelId + ' ' : '') +\n (cell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ cell.label }}\n </span>\n </button>\n <span hidden aria-hidden=\"true\" [attr.id]=\"cell.id + '-aria-label'\">\n {{ cell.ariaLabel }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n","import { AbstractCalendarActiveCellStrategy, BaseCalendarCell } from './common';\nexport interface CalendarDay<D> extends BaseCalendarCell {\n date: D; // date representation\n weekDay: number; // weeks number in the year\n weekend: boolean; // to highlight Saturday and Sunday\n monthStatus?: 'previous' | 'current' | 'next'; // to mark days from sibling months\n specialDayNumber?: number; // special day marker flag\n shouldHideSpecialDayMarker?: boolean; // if the special day should be marked\n blocked?: boolean; // blocked date\n past?: boolean; // date in past\n selectedFirst?: boolean; // to highlight the first selected date in the range\n selectedLast?: boolean; // to highlight the last selected date in the range\n selectedRange?: boolean; // to highlight dates in the range between selectedFirst and selectedLast\n hoverRange?: boolean; // \"true\" for days included in date range selection before the the selection is confirmed\n isTabIndexed?: boolean; // if \"true\" sets day cell tabindex to \"0\"\n}\n\n/**\n * Active Calendar Day cell strategy\n */\nexport class ActiveCalendarDayCellStrategy<D = unknown> extends AbstractCalendarActiveCellStrategy<CalendarDay<D>> {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells: CalendarDay<D>[]): CalendarDay<D> | null {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n const fistDayInMonth = cells.find((cell) => cell.monthStatus === 'current');\n if (fistDayInMonth) {\n return fistDayInMonth;\n }\n return cells[0] || null;\n }\n}\n","/** A class representing a range of dates. */\nexport class DateRange<D> {\n /**\n * Date range.\n * @param start\n * @param end\n */\n constructor(\n /** The start date of the range. */\n readonly start: D | null,\n /** The end date of the range. */\n readonly end: D | null\n ) {}\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n EventEmitter,\n Inject,\n inject,\n Input,\n input,\n model,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { SpecialDayRule } from '@fundamental-ngx/core/shared';\n\nimport { CalendarCurrent } from '../../models/calendar-current';\nimport { ActiveCalendarDayCellStrategy as CalendarActiveDayCellStrategy, CalendarDay } from '../../models/calendar-day';\nimport { DateRange } from '../../models/date-range';\n\nimport { NgClass } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { shallowEqual } from 'fast-equals';\nimport { CalendarLegendFocusingService } from '../../calendar-legend/calendar-legend-focusing.service';\nimport { CalendarService } from '../../calendar.service';\nimport { DisableDateFunction, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\nimport { CalendarType, CalendarTypeEnum, DaysOfWeek } from '../../types';\n\n/** Component representing the day view of the calendar. */\n@Component({\n selector: 'fd-calendar-day-view',\n templateUrl: './calendar-day-view.component.html',\n styleUrl: './calendar-day-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId',\n class: 'fd-calendar__dates'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FdTranslatePipe, NgClass]\n})\nexport class CalendarDayViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** Currently displayed month and year for days */\n @Input()\n set currentlyDisplayed(currentlyDisplayed: CalendarCurrent) {\n if (!shallowEqual(currentlyDisplayed, this._currentlyDisplayed)) {\n this._currentlyDisplayed = currentlyDisplayed;\n this._buildDayViewGrid();\n }\n }\n\n get currentlyDisplayed(): CalendarCurrent {\n return this._currentlyDisplayed;\n }\n\n /** The currently selected date model in single mode. */\n @Input()\n set selectedDate(date: Nullable<D>) {\n this._selectedDate = date;\n if (this._dayViewGrid) {\n const dayFromDate = this._calendarDayList.find((day) => this._isSameDay(day.date, date));\n this._changeSelectedSingleDay(dayFromDate, this._calendarDayList);\n }\n }\n\n get selectedDate(): Nullable<D> {\n return this._selectedDate;\n }\n\n /** The currently selected date model in multiple mode. */\n @Input()\n set selectedMultipleDates(dates: Array<D>) {\n this._selectedMultipleDates = dates;\n if (dates && this._dayViewGrid) {\n const formattedDates = this._calendarDayList.filter((day) =>\n dates?.some((date) => this._isSameDay(day.date, date))\n );\n this._changeSelectedMultipleDays(formattedDates, this._calendarDayList);\n }\n }\n\n get selectedMultipleDates(): Nullable<Array<D>> {\n return this._selectedMultipleDates;\n }\n\n /** The currently selected FdDates model start and end in range mode. */\n @Input()\n set selectedRangeDate(dateRange: DateRange<D>) {\n if (\n dateRange &&\n this.selectedRangeDate &&\n this._isSameDay(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDay(dateRange.end, this.selectedRangeDate.end)\n ) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._dayViewGrid) {\n this._changeSelectedRangeDays(dateRange, this._calendarDayList);\n }\n }\n\n get selectedRangeDate(): DateRange<D> {\n return this._selectedRangeDate;\n }\n\n /** The currently selected FdDates model start and end in multiple range mode. */\n @Input()\n set selectedMultipleDateRanges(dateRanges: Array<DateRange<D>>) {\n if (\n dateRanges &&\n this.selectedMultipleDateRanges &&\n dateRanges.length === this.selectedMultipleDateRanges.length &&\n dateRanges.every(\n (range, index) =>\n this._isSameDay(range.start, this.selectedMultipleDateRanges[index].start) &&\n this._isSameDay(range.end, this.selectedMultipleDateRanges[index].end)\n )\n ) {\n return;\n }\n this._selectedMultipleDateRanges = dateRanges || [];\n if (this._dayViewGrid) {\n this._changeSelectedMultipleRangeDays(dateRanges, this._calendarDayList);\n }\n }\n\n get selectedMultipleDateRanges(): Array<DateRange<D>> {\n return this._selectedMultipleDateRanges;\n }\n\n /** Event emitted always, when next month is selected, by focus */\n @Output()\n readonly nextMonthSelect: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted always, when previous month is selected, by focus */\n @Output()\n readonly previousMonthSelect: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /**\n * Function used to disable certain dates in the calendar.\n * @param date date type\n */\n disableFunction = model<DisableDateFunction<D>>();\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n * @param date date representation\n */\n disableRangeStartFunction = model<DisableDateFunction<D>>();\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n * @param date date representation\n */\n disableRangeEndFunction = model<DisableDateFunction<D>>();\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n startingDayOfWeek = model<DaysOfWeek>();\n\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n calType = model<CalendarType>(CalendarTypeEnum.Single);\n\n /** Id of the calendar. If none is provided, one will be generated. */\n id = input<string>();\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected.\n */\n rangeHoverEffect = model(false);\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n markWeekends = input(false);\n\n /**\n * Whether user wants to show week numbers next to days\n */\n showWeekNumbers = input(true);\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n allowMultipleSelection = model(false);\n\n /** Function that allows to specify which function would be called, when focus wants to escape */\n focusEscapeFunction = input<EscapeFocusFunction>();\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with date object as a parameter. ex:\n * `rule: (date: D) => this.dateAdapter.getDay(date) === 1`, which will mark all sundays as special day.\n */\n specialDaysRules = input<SpecialDayRule<D>[]>([]);\n\n /**\n * @hidden\n * Actual day grid with previous/current/next month days\n */\n _dayViewGrid: CalendarDay<D>[][];\n\n /**\n * @hidden\n * Array of week numbers displayed for current month/year\n */\n _weeks: string[];\n\n /**\n * @hidden\n * Array of CSS classes for each week day in calendar header, computed based on whether the calendar type is 'multi'\n * and the date is not disabled.\n */\n _weekHeaderClasses: string[] = [];\n /**\n * @hidden\n * Computed signal for the focused special day number\n */\n protected readonly _focusedSpecialDayNumber = computed<Nullable<number>>(\n () => this.legendFocusedService?.focusedSpecialDayNumber() ?? null\n );\n\n /** @hidden */\n private _selectedDate: Nullable<D>;\n\n /** @hidden */\n private _selectedMultipleDates: Array<D> = [];\n\n /** @hidden */\n private _selectedRangeDate: DateRange<D>;\n\n /** @hidden */\n private _selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /**\n * @hidden\n * Days per week\n */\n private readonly _amountOfCols = 7;\n /** @hidden */\n private _isOnRangePick = false;\n /** @hidden */\n private _isInitiated = false;\n\n /** @hidden */\n private _currentlyDisplayed: CalendarCurrent;\n\n /**\n * @hidden\n * Variable that contains short weekday names.\n */\n private _shortWeekDays: string[];\n\n /**\n * @hidden\n * Variable that contains short weekday names.\n */\n private _longWeekDays: string[];\n\n /**\n * @hidden\n * global variable to store the new range.\n */\n private _newRange: { start: D | null; end: D | null } | null = null;\n\n /**\n * @hidden\n * Cache of days with special markers for efficient legend focus updates\n */\n private _daysWithSpecialMarkers: CalendarDay<D>[] = [];\n\n /** @hidden */\n private readonly legendFocusedService = inject(CalendarLegendFocusingService, { optional: true });\n\n /** @hidden */\n constructor(\n private eRef: ElementRef,\n private changeDetRef: ChangeDetectorRef,\n private calendarService: CalendarService,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats,\n public _dateTimeAdapter: DatetimeAdapter<D>\n ) {\n // Effect to update grid when legend focus changes\n effect(() => {\n const focusedNumber = this._focusedSpecialDayNumber();\n if (this._dayViewGrid && this._isInitiated) {\n this._updateLegendFocusState(focusedNumber);\n }\n });\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._isInitiated = true;\n\n this._setupKeyboardService();\n\n this._refreshShortWeekDays();\n\n this._buildDayViewGrid();\n\n this._computeWeekHeaderClasses();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._refreshShortWeekDays();\n this._buildDayViewGrid();\n this.changeDetRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n /** Changes of those properties are done inside its setters */\n if (\n !changes['selectedDate'] &&\n !changes['selectedMultipleDates'] &&\n !changes['selectedRangeDate'] &&\n !changes['currentlyDisplayed']\n ) {\n this._buildDayViewGrid();\n }\n if (changes['startingDayOfWeek']) {\n this._refreshShortWeekDays();\n }\n if (changes['specialDaysRules']) {\n this._buildDayViewGrid();\n }\n }\n\n /**\n * @hidden\n * Selects a date in single mode, toggles selection in multi mode, or sets the range in range mode.\n * Handles the selection of a date based on the calendar type.\n * @param day The calendar day to be selected.\n * @param event Optional mouse event for handling event propagation.\n */\n selectDate(day: CalendarDay<D>, event?: MouseEvent | KeyboardEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n if (day.disabled || day.blocked) {\n return;\n }\n\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._toggleMultiDate(day);\n } else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectMultipleRangeDates(day);\n }\n } else {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._selectSingleDate(day);\n } else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectRangeDate(day);\n }\n }\n\n this._handleRangeHoverEffect(event);\n this.changeDetRef.markForCheck();\n }\n\n /**\n * Toggles the selection of a week on the calendar.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n handleWeekSelectionByDays(selectedWeek: Array<CalendarDay<D>>): void {\n this.toggleWeekSelection(selectedWeek);\n }\n\n /**\n * Toggles the selection of a week on the calendar based on the weekday index.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param weekDayIndex The index of the weekday to be toggled.\n */\n handleWeekSelectionByIndex(weekDayIndex: number): void {\n const selectedWeek: Array<CalendarDay<D>> = this._dayViewGrid.map((row) => row[weekDayIndex]);\n this.toggleWeekSelection(selectedWeek);\n }\n\n /**\n * Set focus on default focusable cell\n */\n setFocusOnCell(): void {\n const cellToFocus = new CalendarActiveDayCellStrategy().getActiveCell(this._calendarDayList);\n if (!cellToFocus?.index && cellToFocus?.index !== 0) {\n return;\n }\n this.focusOnCellByIndex(cellToFocus.index);\n }\n\n /** @hidden */\n _refreshHoverRange(day: CalendarDay<D>): void {\n if (this.allowMultipleSelection()) {\n this._handleMultiRangeHover(day);\n } else {\n this._handleSingleRangeHover(day);\n }\n }\n\n /**\n * @hidden\n * Amount of selected days\n * 0, when there is no day selected, or start date is invalid,\n * 1, when there is only valid start date, or end date is same as start date,\n * 2, when both dates are valid\n */\n get _selectCounter(): number {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (\n this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDay(this.selectedRangeDate.start, this.selectedRangeDate.end))\n ) {\n return 1;\n }\n if (\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n ) {\n return 2;\n }\n return 0;\n }\n\n /**\n * @hidden\n * Total amount of selected days across multiple ranges.\n * Sums the counts of valid days in each date range.\n */\n get _selectMultipleCounter(): number {\n let counter = this._selectedMultipleDateRanges.reduce((count, range) => {\n if (range.start) {\n count++;\n }\n if (range.end) {\n count++;\n }\n return count;\n }, 0);\n\n // Account for the newRange\n if (this._newRange) {\n if (this._newRange.start) {\n counter++;\n }\n if (this._newRange.end) {\n counter++;\n }\n }\n\n return counter;\n }\n\n /**\n * @hidden\n * Method that returns short weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get shortWeekDays(): string[] {\n return this._shortWeekDays;\n }\n\n /**\n * @hidden\n * Method that returns weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get longWeekDays(): string[] {\n return this._longWeekDays;\n }\n\n /**\n * @hidden\n * Function that gives array of all displayed CalendarDays\n */\n get _calendarDayList(): CalendarDay<D>[] {\n return this._dayViewGrid.reduce((totalCalendarRows: CalendarDay<D>[], calendarRow: CalendarDay<D>[]) => {\n if (!calendarRow) {\n calendarRow = [];\n }\n return totalCalendarRows.concat(calendarRow);\n }, []);\n }\n\n /**\n * View ID\n */\n get viewId(): string {\n return this.id() + '-day-view';\n }\n\n /**\n * @hidden\n * Week column header ID\n */\n get _weekNumbersColumnHeaderId(): string {\n return this.viewId + '-week-column-header';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /**\n * @hidden\n * Date range start date label ID\n */\n get _dateRangeStartLabelId(): string {\n return this.viewId + '-range-start-date-label';\n }\n\n /**\n * @hidden\n * Date range end date label ID\n */\n get _dateRangeEndLabelId(): string {\n return this.viewId + '-range-end-date-label';\n }\n\n /**\n * @hidden\n * Date in past label ID\n */\n get _dateInPastLabelId(): string {\n return this.viewId + '-day-in-past-label';\n }\n\n /**\n * @hidden\n * Method that handles day cells keydown events,\n * @param event KeyboardEvent\n * @param cell CalendarDay\n * @param index with specified column and row as a x and y\n */\n _onKeydownDayHandler(event: KeyboardEvent, cell: CalendarDay<D>, index: number): void {\n if (event.key === 'Tab' && !event.shiftKey) {\n if (this.focusEscapeFunction()) {\n this.focusEscapeFunction()!(event);\n }\n } else {\n this.calendarService.onKeydownHandler(event, index);\n }\n }\n\n /**\n * @hidden\n * Method that allow to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this.eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this.calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * Method that selects previous month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n private _selectPreviousMonth(): void {\n this._currentlyDisplayed = this._getPreviousMonth();\n this._buildDayViewGrid();\n this.previousMonthSelect.emit();\n }\n\n /**\n * @hidden\n * Method that selects next month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n private _selectNextMonth(): void {\n this._currentlyDisplayed = this._getNextMonth();\n this._buildDayViewGrid();\n this.nextMonthSelect.emit();\n }\n\n /**\n * @hidden\n * Updates the legend focus state for calendar days with special markers\n * @param focusedSpecialDayNumber The currently focused special day number, or null/undefined if no legend item is focused\n */\n private _updateLegendFocusState(focusedSpecialDayNumber: Nullable<number>): void {\n if (!this._dayViewGrid || this._daysWithSpecialMarkers.length === 0) {\n return;\n }\n\n // Only iterate through days that have special markers (typically 2-10 days instead of 42)\n this._daysWithSpecialMarkers.forEach((day) => {\n if (focusedSpecialDayNumber == null) {\n // No legend item focused - show all markers\n day.shouldHideSpecialDayMarker = false;\n } else {\n // Legend item focused - hide markers that don't match\n day.shouldHideSpecialDayMarker = day.specialDayNumber !== focusedSpecialDayNumber;\n }\n });\n this.changeDetRef.markForCheck();\n }\n\n /**\n * @hidden\n * Method that creates array of CalendarDay models which will be shown on day grid,\n * depending on current month and year.\n */\n private _populateCalendar(): CalendarDay<D>[] {\n let calendar: CalendarDay<D>[] = [];\n\n calendar = this._getPreviousMonthDays(calendar);\n calendar = calendar.concat(this._getCurrentMonthDays());\n calendar = this._getNextMonthDays(calendar);\n\n calendar.forEach((call, index: number) => {\n call.id = this._getCellIdByIndex(index);\n call.index = index;\n });\n\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedMultipleDates) {\n const _days = calendar.filter((day) =>\n this._selectedMultipleDates?.some((date) => this._isSameDay(day.date, date))\n );\n this._changeSelectedMultipleDays(_days, calendar);\n }\n\n if (this.calType() === CalendarTypeEnum.Range && this._selectedMultipleDateRanges) {\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, calendar);\n }\n } else {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedDate) {\n const _day = calendar.find((day) => this._isSameDay(day.date, this._selectedDate));\n this._changeSelectedSingleDay(_day, calendar);\n }\n\n if (this.calType() === CalendarTypeEnum.Range && this._selectedRangeDate) {\n this._changeSelectedRangeDays(this._selectedRangeDate, calendar);\n }\n }\n\n return calendar;\n }\n\n /**\n * @hidden\n * Method that builds 2 dimensions day view grid, also sets up currently displayed month, or year,\n * when there is not any.\n */\n private _buildDayViewGrid(): void {\n if (!this._isInitiated) {\n return;\n }\n\n if (!this.currentlyDisplayed || this._isInvalidDate()) {\n if (this.selectedDate) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(this.selectedDate),\n year: this._dateTimeAdapter.getYear(this.selectedDate)\n };\n } else {\n const today = this._dateTimeAdapter.today();\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(today),\n year: this._dateTimeAdapter.getYear(today)\n };\n }\n }\n\n const calendarDays = this._populateCalendar();\n const dayViewGrid: CalendarDay<D>[][] = [];\n\n while (calendarDays.length > 0) {\n dayViewGrid.push(calendarDays.splice(0, this._amountOfCols));\n }\n\n this.calendarService.rowAmount = dayViewGrid.length;\n\n this._dayViewGrid = dayViewGrid;\n this._weeks = this._refreshWeekCount();\n\n // Cache days with special markers for efficient legend focus updates\n this._daysWithSpecialMarkers = this._calendarDayList.filter((day) => day.specialDayNumber !== undefined);\n }\n\n /** @hidden */\n private _isInvalidDate(): boolean {\n return isNaN(this.currentlyDisplayed.year) || isNaN(this.currentlyDisplayed.month);\n }\n\n /**\n * @hidden\n * Get id of calendar's day item\n */\n private _getCellIdByIndex(index: number): string {\n return this.viewId + '-day-' + index + '';\n }\n\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains every single day of currently shown month/year.\n */\n private _getCurrentMonthDays(): CalendarDay<D>[] {\n const month = this.currentlyDisplayed.month;\n const year = this.currentlyDisplayed.year;\n const calendarDays: CalendarDay<D>[] = [];\n const amountOfDaysInCurrentMonth: number = this._dateTimeAdapter.getNumDaysInMonth(\n this._dateTimeAdapter.createDate(year, month, 1)\n );\n const now = this._dateTimeAdapter.now();\n for (let dayNumber = 1; dayNumber <= amountOfDaysInCurrentMonth; dayNumber++) {\n const date: D = this._dateTimeAdapter.createDate(year, month, dayNumber);\n calendarDays.push({\n ...this._getDay(date),\n monthStatus: 'current',\n current: this._isSameDay(now, date)\n });\n }\n const cell = this._getActiveCell(calendarDays);\n cell && (cell.isTabIndexed = true);\n return calendarDays;\n }\n\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected day, return selected day\n * if there is no selected day, but there is today day, return today day\n * if there is no today, or selected, return first one\n */\n private _getActiveCell(calendarDays: CalendarDay<D>[]): CalendarDay<D> | null {\n return new CalendarActiveDayCellStrategy<D>().getActiveCell(calendarDays);\n }\n\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains last 0-6 days of previous month/year. Theses days\n * fills the gap between starting startingDayOfWeek and first day of current month\n */\n private _getPreviousMonthDays(calendarDays: CalendarDay<D>[]): CalendarDay<D>[] {\n const month = this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.month - 1 : 12;\n const year =\n this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year - 1;\n const amountOfDaysInCurrentMonth: number = this._dateTimeAdapter.getNumDaysInMonth(\n this._dateTimeAdapter.createDate(year, month, 1)\n );\n const prevMonthLastDate = this._dateTimeAdapter.createDate(year, month, amountOfDaysInCurrentMonth);\n const prevMonthLastDay = amountOfDaysInCurrentMonth;\n let prevMonthLastWeekDay = this._dateTimeAdapter.getDayOfWeek(prevMonthLastDate) - this.startingDayOfWeek()!;\n\n /** Checking if there are some days cut by startingDayOfWeek option\n * If yes, there is whole week added, to avoid hiding\n */\n if (prevMonthLastWeekDay < 0) {\n prevMonthLastWeekDay = prevMonthLastWeekDay + 7;\n }\n\n if (prevMonthLastWeekDay < 6) {\n while (prevMonthLastWeekDay >= 0) {\n const prevMonthDay = prevMonthLastDay - prevMonthLastWeekDay;\n const date = this._dateTimeAdapter.createDate(year, month, prevMonthDay);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'previous' });\n prevMonthLastWeekDay--;\n }\n }\n return calendarDays;\n }\n\n /**\n * @hidden\n * Method which provides array of CalendarDay, which contains first days of next month/year. Theses days\n * fills the gap between last day of current day and end of 6-weeks calendar grid.\n */\n private _getNextMonthDays(calendarDays: CalendarDay<D>[]): CalendarDay<D>[] {\n const month = this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.month + 1 : 1;\n const year =\n this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year + 1;\n\n // The calendar grid can have 5 (35 days) or 6 (42 days) weeks\n const nextMonthDisplayedDays = (42 - calendarDays.length) % 7;\n\n for (let nextD = 1; nextD <= nextMonthDisplayedDays; nextD++) {\n const date = this._dateTimeAdapter.createDate(year, month, nextD);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'next' });\n }\n return calendarDays;\n }\n\n /** @hidden */\n private _isWeekendDay(dayOfWeek: number): boolean {\n return dayOfWeek === 1 || dayOfWeek === 7;\n }\n\n /**\n * @hidden\n * Method that generates whole day model basing on date, disabling functions, block functions, and actually\n * chosen range / single date.\n */\n private _getDay(date: D): CalendarDay<D> {\n const weekDay = this._dateTimeAdapter.getDayOfWeek(date);\n const dayOfMonth = this._dateTimeAdapter.getDate(date);\n const dateNames = this._dateTimeAdapter.getDateNames();\n const isPast = this._dateTimeAdapter.compareDate(date, this._dateTimeAdapter.today()) < 0;\n const day: CalendarDay<D> = {\n date,\n label: dateNames[dayOfMonth - 1],\n weekDay,\n weekend: this._isWeekendDay(weekDay),\n ariaLabel: this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateA11yLabel),\n specialDayNumber: this._getSpecialDay(date) ?? undefined,\n past: isPast,\n shouldHideSpecialDayMarker: false\n };\n\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n day.disabled = this.disableFunction()!(date);\n }\n\n return day;\n }\n\n /**\n * @hidden\n * Method that is called to refresh i18n short week days.\n */\n private _refreshShortWeekDays(): void {\n const shortDayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('short');\n const dayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('long');\n\n this._shortWeekDays = shortDayOfWeekNames\n .slice(this.startingDayOfWeek()! - 1)\n .concat(shortDayOfWeekNames.slice(0, this.startingDayOfWeek()! - 1));\n\n this._longWeekDays = dayOfWeekNames\n .slice(this.startingDayOfWeek()! - 1)\n .concat(dayOfWeekNames.slice(0, this.startingDayOfWeek()! - 1));\n\n this.changeDetRef.markForCheck();\n }\n\n /**\n * @hidden\n * Gets special day number of specified date model\n */\n private _getSpecialDay(date: D): number | null {\n const specialDay = this.specialDaysRules().find((specialDayRule) => specialDayRule.rule(date));\n if (specialDay) {\n return specialDay.specialDayNumber;\n }\n return null;\n }\n\n /**\n * @hidden\n * Method that returns array of week's count\n */\n private _refreshWeekCount(): string[] {\n const calendarDayList = this._calendarDayList;\n const weekNumbers: string[] = [];\n for (let index = 6; index < calendarDayList.length; index = index + 6) {\n weekNumbers.push(this._dateTimeAdapter.getWeekName(calendarDayList[index].date));\n }\n return weekNumbers;\n }\n\n /**\n * @hidden\n * Get year and month for previous year\n */\n private _getPreviousMonth(): CalendarCurrent {\n if (this._currentlyDisplayed.month > 1) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month - 1 };\n } else {\n return { year: this._currentlyDisplayed.year - 1, month: 12 };\n }\n }\n\n /**\n * @hidden\n * Get year and month for next year\n */\n private _getNextMonth(): CalendarCurrent {\n if (this._currentlyDisplayed.month < 12) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month + 1 };\n } else {\n return { year: this._currentlyDisplayed.year + 1, month: 1 };\n }\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this.calendarService.colAmount = this._amountOfCols;\n\n this.calendarService.focusEscapeFunction = this.focusEscapeFunction()!;\n\n this.calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._refreshHoverRange(this._calendarDayList[index]);\n this.focusOnCellByIndex(index);\n });\n\n this.calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectDate(this._calendarDayList[index], event);\n });\n\n this.calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectPreviousMonth();\n /**\n * Calculate focused cell in new grid\n */\n const originalMonth = this._getNextMonth(); // month that was before moving back\n const originalAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(\n originalMonth.year,\n originalMonth.month,\n this.startingDayOfWeek()!\n );\n const prevMonthAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(\n this._currentlyDisplayed.year,\n this._currentlyDisplayed.month,\n this.startingDayOfWeek()!\n );\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index - 7 * (originalAmountOfWeeks - prevMonthAmountOfWeeks));\n });\n\n this.calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectNextMonth();\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index);\n });\n }\n\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n */\n private _changeSelectedSingleDay(day: Nullable<CalendarDay<D>>, calendar: CalendarDay<D>[]): void {\n calendar.forEach((_day) => (_day.selected = false));\n if (day && !day.blocked && !day.disabled) {\n day.selected = true;\n }\n this.refreshTabIndex(calendar);\n }\n\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n *\n * @param dates - An array of CalendarDay objects to be marked as selected\n * @param calendar - The calendar array containing all CalendarDay objects\n */\n private _changeSelectedMultipleDays(dates: Nullable<Array<CalendarDay<D>>>, calendar: CalendarDay<D>[]): void {\n calendar.forEach((day) => (day.selected = false));\n\n if (dates) {\n dates.forEach((date) => {\n const matchingDay = calendar.find((day) => this._isSameDay(day.date, date.date));\n if (matchingDay && !matchingDay.blocked && !matchingDay.disabled) {\n matchingDay.selected = true;\n }\n });\n }\n\n this.refreshTabIndex(calendar);\n }\n\n /**\n * @hidden\n * Change properties of range days, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected days.\n */\n private _changeSelectedRangeDays(dates: DateRange<D>, calendar: CalendarDay<D>[]): void {\n /** Pull list of calendar days */\n const calendarList = calendar;\n\n /** Reset changing properties */\n calendarList.forEach(\n (_day) =>\n (_day.selectedFirst =\n _day.selectedLast =\n _day.selected =\n _day.isTabIndexed =\n _day.disabled =\n _day.hoverRange =\n _day.selectedRange =\n false)\n );\n\n if (dates) {\n let startDay: CalendarDay<D> | undefined;\n let endDay: CalendarDay<D> | undefined;\n if (dates.start) {\n /** Find start date and mark it as selected */\n startDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.start));\n if (\n startDay &&\n !startDay.blocked &&\n !startDay.disabled &&\n (typeof this.disableRangeStartFunction() !== 'function' ||\n !this.disableRangeStartFunction()?.(startDay.date))\n ) {\n startDay.selected = true;\n startDay.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end date and mark it as selected */\n endDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.end));\n if (\n endDay &&\n !endDay.blocked &&\n !endDay.disabled &&\n (typeof this.disableRangeEndFunction() !== 'function' ||\n !this.disableRangeEndFunction()?.(endDay.date))\n ) {\n endDay.selected = true;\n endDay.selectedLast = true;\n }\n }\n\n /** Verify if start day and end day is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all days, which are between start and end date */\n calendarList\n .filter(\n (_day) =>\n (_day.selectedRange = this._dateTimeAdapter.isBetween(_day.date, dates.start!, dates.end!))\n )\n .forEach((_day) => (_day.selectedRange = true));\n }\n }\n\n this.refreshTabIndex(calendarList);\n\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n calendarList.forEach((_day) => (_day.disabled = this.disableFunction()!(_day.date)));\n }\n\n if ((this._selectCounter === 0 || this._selectCounter === 2) && this.disableRangeStartFunction()) {\n calendarList.forEach(\n (_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()!(_day.date))\n );\n } else if (this._selectCounter === 1 && this.disableRangeEndFunction()) {\n calendarList.forEach(\n (_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()!(_day.date))\n );\n }\n }\n\n /**\n * @hidden\n * Change properties of range days for multiple ranges.\n * This method is called to not rebuild the whole grid from scratch.\n * It just changes properties of newly selected/unselected days.\n */\n private _changeSelectedMultipleRangeDays(datesArray: Array<DateRange<D>>, calendar: CalendarDay<D>[]): void {\n // Reset changing properties\n calendar.forEach((_day) => {\n _day.selectedFirst = false;\n _day.selectedLast = false;\n _day.selectedRange = false;\n _day.selected = false;\n _day.isTabIndexed = false;\n _day.disabled = false;\n _day.hoverRange = false;\n _day.disabled = false;\n });\n\n datesArray.forEach((dates) => {\n if (dates) {\n let startDay: CalendarDay<D> | undefined;\n let endDay: CalendarDay<D> | undefined;\n if (dates.start) {\n // Find start date and mark it as selected\n startDay = calendar.find((_day) => this._isSameDay(_day.date, dates.start));\n if (startDay) {\n startDay.selectedFirst = true;\n startDay.selected = true;\n }\n }\n if (dates.end) {\n // Find end date and mark it as selected\n endDay = calendar.find((_day) => this._isSameDay(_day.date, dates.end));\n if (endDay) {\n endDay.selectedLast = true;\n endDay.selected = true;\n }\n }\n\n // Mark all days between start and end as selected range\n if (dates.start && dates.end) {\n calendar.forEach((_day) => {\n if (this._isDateInRange(_day.date, dates)) {\n _day.selectedRange = true;\n _day.selected = true;\n }\n });\n }\n }\n });\n\n this.refreshTabIndex(calendar);\n\n // Apply disabled state to days marked with passed function\n if (this.disableFunction()) {\n calendar.forEach((_day) => (_day.disabled = this.disableFunction()!(_day.date)));\n }\n\n if (\n (this._selectMultipleCounter === 0 || this._selectMultipleCounter % 2 === 0) &&\n this.disableRangeStartFunction()\n ) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()!(_day.date)));\n } else if (this._selectMultipleCounter % 2 === 1 && this.disableRangeEndFunction()) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()!(_day.date)));\n }\n }\n\n /** @hidden */\n private refreshTabIndex(calendar: CalendarDay<D>[]): void {\n calendar.forEach((_day) => (_day.isTabIndexed = false));\n const cell = this._getActiveCell(calendar.filter((_day) => _day.monthStatus === 'current'));\n cell && (cell.isTabIndexed = true);\n }\n\n /** @hidden */\n private focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getCellIdByIndex(index)}`);\n }\n\n /**\n * @hidden\n * Check if dates are equal\n */\n private _isSameDay(date1: Nullable<D>, date2: Nullable<D>): boolean {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n\n /**\n * @hidden\n * Selects a single date and updates the selected date in single mode.\n * @param day The calendar day to be selected.\n */\n private _selectSingleDate(day: CalendarDay<D>): void {\n this._calendarDayList.forEach((_day) => (_day.selected = false));\n day.selected = true;\n this._selectedDate = day.date;\n this.selectedDateChange.emit(day.date);\n }\n\n /**\n * @hidden\n * Toggles the selection of a date in multi mode.\n * Adds the date if not selected, removes it if already selected.\n * @param day The calendar day to be toggled.\n */\n private _toggleMultiDate(day: CalendarDay<D>): void {\n const dateIndex = this._selectedMultipleDates.findIndex((d) => this._isSameDay(d, day.date));\n let newSelectedDates: D[];\n\n if (dateIndex > -1) {\n newSelectedDates = this._selectedMultipleDates.filter((_, index) => index !== dateIndex);\n day.selected = false;\n } else {\n newSelectedDates = [...this._selectedMultipleDates, day.date];\n day.selected = true;\n }\n\n this._selectedMultipleDates = newSelectedDates;\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param day The calendar day to be selected or updated in the range.\n */\n private _selectRangeDate(day: CalendarDay<D>): void {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: day.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n } else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start!, day.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeDays(this._selectedRangeDate, this._calendarDayList);\n }\n\n /**\n * @hidden\n * Selects or updates multiple ranges of dates in range mode.\n * Handles the start and end dates and updates the selected ranges.\n * @param day The calendar day to be selected or updated in the range.\n */\n private _selectMultipleRangeDates(day: CalendarDay<D>): void {\n let tempRanges = this._selectedMultipleDateRanges?.filter((range) => range.start || range.end) || [];\n\n // Handles the existing range by updating or merging it with the new day selection.\n tempRanges = this._handleExistingRange(tempRanges, day);\n\n if (this._selectMultipleCounter % 2 === 0) {\n // Start a new range\n this._newRange = { start: day.date, end: null };\n } else {\n // Check for reverse selection\n if (\n this._newRange &&\n this._newRange.start &&\n this._dateTimeAdapter.compareDate(this._newRange.start, day.date) > 0\n ) {\n this._newRange = { start: day.date, end: this._newRange.start };\n } else if (this._newRange) {\n this._newRange.end = day.date as D;\n }\n if (this._newRange) {\n tempRanges.push(this._newRange);\n }\n this._newRange = null;\n }\n\n tempRanges = this._mergeOverlappingRanges(tempRanges);\n\n this._selectedMultipleDateRanges = tempRanges;\n\n // Check if all ranges have both start and end dates filled\n const allRangesComplete = this._selectedMultipleDateRanges.every((range) => range.start && range.end);\n\n if (allRangesComplete && tempRanges.length > 0) {\n this.selectedMultipleDateRangesChange.emit(this._selectedMultipleDateRanges);\n }\n\n // Update the calendar view\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, this._calendarDayList);\n }\n\n /**\n * Merges overlapping date ranges into a single range.\n *\n * @param ranges - An array of date ranges to be merged.\n * @returns An array of merged date ranges.\n */\n private _mergeOverlappingRanges(ranges: Array<DateRange<D>>): Array<DateRange<D>> {\n if (ranges.length <= 1) {\n return ranges;\n }\n\n ranges.sort((a, b) => this._dateTimeAdapter.compareDate(a.start!, b.start!));\n\n const mergedRanges: Array<DateRange<D>> = [];\n let currentRange = ranges[0];\n\n for (let i = 1; i < ranges.length; i++) {\n const nextRange = ranges[i];\n\n if (this._dateTimeAdapter.compareDate(currentRange.end!, nextRange.start!) >= 0) {\n currentRange = {\n start: currentRange.start,\n end:\n this._dateTimeAdapter.compareDate(currentRange.end!, nextRange.end!) >= 0\n ? currentRange.end\n : nextRange.end\n };\n } else {\n mergedRanges.push(currentRange);\n currentRange = nextRange;\n }\n }\n\n mergedRanges.push(currentRange);\n return mergedRanges;\n }\n\n /**\n * Handles the case where the selected day is part of an existing range.\n *\n * @param tempRanges - An array of date ranges to be checked.\n * @param day - The calendar day to be checked.\n * @returns An array of date ranges with the updated range if the selected day is part of an existing range.\n */\n private _handleExistingRange(tempRanges: DateRange<D>[], day: CalendarDay<D>): DateRange<D>[] {\n if (tempRanges.length > 0) {\n const existingRangeIndex = tempRanges.findIndex((range) => this._isDateInRange(day.date, range));\n const existingRange = tempRanges[existingRangeIndex];\n\n if (existingRangeIndex !== -1 && existingRange.end) {\n tempRanges.splice(existingRangeIndex, 1);\n }\n }\n return tempRanges;\n }\n\n /**\n * @hidden\n * Checks if a date is within a given date range.\n * @param date The date to check.\n * @param range The date range.\n * @returns True if the date is in the range, false otherwise.\n */\n private _isDateInRange(date: D, range: DateRange<D>): boolean {\n return this._dateTimeAdapter.isBetween(date, range.start!, range.end!);\n }\n\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n private _getOrderedRange(date1: D, date2: D): { start: D; end: D } {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n private _handleRangeHoverEffect(event?: MouseEvent | KeyboardEvent): void {\n if (this.allowMultipleSelection()) {\n if (\n this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectMultipleCounter === 1 &&\n event\n ) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n } else {\n if (\n this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectCounter === 1 &&\n event\n ) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n }\n }\n\n /**\n * Helper method to toggle the selection of a week.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n private toggleWeekSelection(selectedWeek: Array<CalendarDay<D>>): void {\n const selectableDays = selectedWeek.filter((day) => !day.disabled);\n const isCurrentWeekSelected = selectableDays.every((day) => day.selected);\n\n if (!isCurrentWeekSelected) {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = true;\n if (!this._selectedMultipleDates.some((selectedDate) => this._isSameDay(selectedDate, day.date))) {\n this._selectedMultipleDates.push(day.date);\n }\n }\n });\n } else {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = false;\n this._selectedMultipleDates = this._selectedMultipleDates.filter(\n (selectedDate) => !this._isSameDay(selectedDate, day.date)\n );\n }\n });\n }\n\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n\n /**\n * @hidden\n * Computes the CSS class for each week day in calendar header based on whether the calendar type is 'multi'\n * and the date is not disabled.\n * Stores the computed classes in the weekHeaderClasses array.\n */\n private _computeWeekHeaderClasses(): void {\n this._weekHeaderClasses = this._calendarDayList.map(() =>\n this.calType() !== CalendarTypeEnum.Range && this.allowMultipleSelection()! && this.disableFunction()!\n ? 'event-enabled'\n : ''\n );\n }\n\n /**\n * @hidden\n * Handles hover effect for single-range selection mode.\n * @param day The calendar day that is hovered.\n */\n private _handleSingleRangeHover(day: CalendarDay<D>): void {\n // Handle single range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(day.date, start) < 0) {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) < 0;\n });\n } else {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) > 0;\n });\n }\n }\n }\n\n /**\n * @hidden\n * Handles hover effect for multi-range selection mode.\n * @param day The calendar day that is hovered.\n */\n private _handleMultiRangeHover(day: CalendarDay<D>): void {\n // Determine the start date from the most recent range with a null end date\n let startDate: D | null | any = this._newRange?.start;\n if (this._selectedMultipleDateRanges.length > 0) {\n // Find the most recent range with an end date of null\n const activeRanges = this._selectedMultipleDateRanges.filter((range) => range.end === null);\n if (activeRanges.length > 0) {\n const mostRecentRange = activeRanges[activeRanges.length - 1];\n startDate = mostRecentRange.start;\n }\n }\n if (startDate && startDate) {\n if (this._dateTimeAdapter.compareDate(day.date, startDate) < 0) {\n // Hovering backwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) < 0;\n });\n } else {\n // Hovering forwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) > 0;\n });\n }\n } else {\n // No start date, clear hover\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange = false;\n });\n }\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--dates\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarDayViewDescription' | fdTranslate\"\n>\n <thead class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" role=\"row\">\n @if (showWeekNumbers()) {\n <th\n class=\"fd-calendar__item fd-calendar__item--side-helper\"\n role=\"columnheader\"\n [attr.id]=\"_weekNumbersColumnHeaderId\"\n [attr.aria-label]=\"'coreCalendar.weekColumnLabel' | fdTranslate\"\n ></th>\n }\n @for (day of shortWeekDays; track day + '' + i; let i = $index) {\n <th\n class=\"fd-calendar__item fd-calendar__item--side-helper\"\n [ngClass]=\"_weekHeaderClasses[i]\"\n role=\"columnheader\"\n [attr.aria-label]=\"longWeekDays[i]\"\n (click)=\"handleWeekSelectionByIndex(i)\"\n >\n <div class=\"fd-calendar__text-wrapper\">\n <span class=\"fd-calendar__text\">{{ day }}</span>\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (row of _dayViewGrid; track row + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\" role=\"row\">\n @if (showWeekNumbers()) {\n <th\n class=\"fd-calendar__item fd-calendar__item--side-helper\"\n [ngClass]=\"{ 'event-enabled': allowMultipleSelection() && calType() !== 'range' }\"\n role=\"rowheader\"\n scope=\"row\"\n [attr.data-fd-calendar-week]=\"_weeks[rowIndex]\"\n [attr.id]=\"viewId + '-week-' + _weeks[rowIndex]\"\n [attr.aria-labelledby]=\"\n _weekNumbersColumnHeaderId + ' ' + (viewId + '-week-' + _weeks[rowIndex])\n \"\n (click)=\"handleWeekSelectionByDays(row)\"\n >\n @if (_weeks && _weeks[rowIndex]) {\n <div class=\"fd-calendar__text-wrapper\">\n <span class=\"fd-calendar__text\">\n {{ _weeks[rowIndex] }}\n </span>\n </div>\n }\n </th>\n }\n @for (cell of row; track cell + '' + cellIndex; let cellIndex = $index) {\n <td\n class=\"fd-calendar__item\"\n role=\"gridcell\"\n [class.fd-calendar__item--selected]=\"cell.selectedFirst || cell.selectedLast || cell.selected\"\n [class.fd-calendar__item--range]=\"\n (cell.selectedRange || cell.hoverRange) && !cell.selectedFirst && !cell.selectedLast\n \"\n [class.fd-calendar__item--today]=\"cell.current\"\n [class.fd-calendar__item--weekend]=\"\n cell.weekend && markWeekends() && cell.monthStatus === 'current'\n \"\n [class.fd-calendar__item--other]=\"cell.monthStatus !== 'current'\"\n [class.is-disabled]=\"cell.disabled\"\n [class]=\"\n cell.specialDayNumber && !cell.shouldHideSpecialDayMarker\n ? 'fd-calendar__item--legend-' + cell.specialDayNumber\n : ''\n \"\n [attr.id]=\"cell.id\"\n [attr.data-fd-calendar-date-day]=\"cell.label\"\n [attr.data-fd-calendar-day]=\"cell.index\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled\"\n [attr.tabindex]=\"cell.isTabIndexed ? 0 : -1\"\n (click)=\"selectDate(cell, $event)\"\n (mouseenter)=\"_refreshHoverRange(cell)\"\n (keydown)=\"_onKeydownDayHandler($event, cell, _getIndex(rowIndex, cellIndex))\"\n >\n <div class=\"fd-calendar__text-wrapper\">\n <span\n class=\"fd-calendar__text\"\n role=\"button\"\n [attr.aria-labelledby]=\"\n cell.id +\n '-aria-label ' +\n (cell.selectedFirst ? _dateRangeStartLabelId + ' ' : '') +\n (cell.selectedLast ? _dateRangeEndLabelId + ' ' : '') +\n (cell.current ? _todayLabelId + ' ' : '') +\n (cell.selected && calType() === 'single' ? _selectedDateLabelId + ' ' : '') +\n (cell.past ? _dateInPastLabelId : '')\n \"\n >{{ cell.label }}</span\n >\n <span hidden aria-hidden=\"true\" [attr.id]=\"cell.id + '-aria-label'\">\n {{ cell.ariaLabel }}\n </span>\n </div>\n </td>\n }\n </tr>\n }\n @if (_dayViewGrid.length <= 5) {\n <tr class=\"fd-calendar__row\">\n <td class=\"fd-calendar__item hidden-day\"></td>\n </tr>\n }\n @if (_dayViewGrid.length === 4) {\n <tr class=\"fd-calendar__row\">\n <td class=\"fd-calendar__item hidden-day\"></td>\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_dateRangeStartLabelId\">{{ 'coreCalendar.rangeStartLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_dateRangeEndLabelId\">{{ 'coreCalendar.rangeEndLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_dateInPastLabelId\">{{ 'coreCalendar.dayInPastLabel' | fdTranslate }}</div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { CalendarMonth } from '../../models/calendar-month';\nimport { DefaultCalendarActiveCellStrategy, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\n\n/** Component representing the month view of the calendar. */\n@Component({\n selector: 'fd-calendar-month-view',\n templateUrl: './calendar-month-view.component.html',\n styleUrl: './calendar-month-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarMonthViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** The id of the calendar passed from the parent component */\n @Input()\n id: string;\n\n /** A number (1-12) representing the selected month */\n @Input()\n monthSelected: number;\n\n /** A function that handles escape focus */\n @Input()\n focusEscapeFunction: EscapeFocusFunction;\n\n /** A year the month view is referring to */\n @Input()\n year: number;\n\n /** Whether to pick the date range in month year format without picking days */\n @Input()\n isDateRangeMonthYearFormat: boolean;\n\n /** An event fired when a new month is selected */\n @Output()\n readonly monthClicked: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /**\n * Whether user wants to mark month cells on hover.\n * Works only on range mode, when start month is selected.\n */\n @Input()\n rangeHoverEffect = false;\n\n /**\n * @hidden\n * Month grid table\n */\n _calendarMonthListGrid: CalendarMonth<D>[][];\n\n /**\n * @hidden\n * A number offset used to achieve the 1-12 representation of the calendar\n */\n private readonly _monthOffset: number = 1;\n /** @hidden */\n private readonly _amountOfColPerRow: number = 3;\n /** @hidden */\n private readonly _amountOfRows: number = 4;\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _initiated = false;\n\n /** @hidden */\n private _selectedRangeDate: DateRange<D>;\n\n private _isOnRangePick = false;\n\n /** @hidden */\n constructor(\n private _eRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats,\n private _dateTimeAdapter: DatetimeAdapter<D>\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._initiated = true;\n this._setupKeyboardService();\n this._constructMonthGrid();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructMonthGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._initiated && ('monthSelected' in changes || 'year' in changes || 'id' in changes)) {\n this._constructMonthGrid();\n }\n }\n\n /** Get a number (1-12) representing the current month */\n get currentMonth(): number {\n return this._dateTimeAdapter.getMonth(this._dateTimeAdapter.today());\n }\n\n /** Getter for the private class member _monthOffset */\n get monthOffset(): number {\n return this._monthOffset;\n }\n\n /** View ID */\n get viewId(): string {\n return this.id + '-month-view';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /** The currently selected FdDates model start and end in range mode. */\n @Input()\n set selectedRangeDate(dateRange: DateRange<D>) {\n if (\n dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)\n ) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarMonthListGrid) {\n this._changeSelectedRangeMonths(dateRange, this._getMonthList());\n }\n }\n\n get selectedRangeDate(): DateRange<D> {\n return this._selectedRangeDate;\n }\n\n /**\n * @hidden\n * Amount of selected months\n * 0, when there is no month selected, or start month is invalid,\n * 1, when there is only valid start month, or end month is same as start month,\n * 2, when both dates are valid\n */\n get _selectCounter(): number {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (\n this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))\n ) {\n return 1;\n }\n if (\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n ) {\n return 2;\n }\n return 0;\n }\n\n /**\n * @hidden\n * Method for handling the keyboard events (a11y)\n */\n _onKeydownMonthHandler(event: KeyboardEvent, index: number): void {\n this._calendarService.onKeydownHandler(event, index);\n }\n\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Method returning id of month cell\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * @param index month grid cell index\n */\n _getId(index: number): string {\n return this.viewId + '-month-' + index;\n }\n\n /**\n * @hidden\n * Method that checks if this is current month\n */\n _isCurrent(id: number): boolean {\n return id + this._monthOffset === this.currentMonth;\n }\n\n /**\n * @hidden\n * Method that check if this is selected month\n */\n _isSelected(id: number): boolean {\n return id + this._monthOffset === this.monthSelected;\n }\n\n /** Method for handling the mouse click event when a month is selected */\n selectMonth(monthCell: CalendarMonth<D>, event?: MouseEvent | KeyboardEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n this.monthSelected = monthCell.month;\n this.monthClicked.emit(this.monthSelected);\n\n // when date range start date is selected start the hover effect between the date range\n if (this.isDateRangeMonthYearFormat) {\n this._selectRangeDate(monthCell);\n this._handleRangeHoverEffect(event);\n }\n }\n\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell(): void {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getMonthList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param month The calendar month that is hovered.\n */\n _handleRangeHover(month: CalendarMonth<D>): void {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(month.date, start) < 0) {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) > 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) < 0;\n });\n } else {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) < 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) > 0;\n });\n }\n }\n }\n\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n private _handleRangeHoverEffect(event?: MouseEvent | KeyboardEvent): void {\n if (this.isDateRangeMonthYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n }\n\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param month The calendar month to be selected or updated in the range.\n */\n private _selectRangeDate(month: CalendarMonth<D>): void {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: month.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n } else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start!, month.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeMonths(this._selectedRangeDate, this._getMonthList());\n }\n\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n private _getOrderedRange(date1: D, date2: D): { start: D; end: D } {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n\n /**\n * @hidden\n * Change properties of range months, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected months.\n */\n private _changeSelectedRangeMonths(dates: DateRange<D>, calendar: CalendarMonth<D>[]): void {\n /** Pull list of calendar month */\n const calendarList = calendar;\n\n /** Reset changing properties */\n calendarList.forEach(\n (_month) =>\n (_month.selectedFirst =\n _month.selectedLast =\n _month.selected =\n _month.disabled =\n _month.hoverRange =\n _month.selectedRange =\n false)\n );\n\n if (dates) {\n let startMonth: CalendarMonth<D> | undefined;\n let endMonth: CalendarMonth<D> | undefined;\n if (dates.start) {\n /** Find start month and mark it as selected */\n startMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.start));\n if (startMonth) {\n startMonth.selected = true;\n startMonth.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end month and mark it as selected */\n endMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.end));\n if (endMonth) {\n endMonth.selected = true;\n endMonth.selectedLast = true;\n }\n }\n\n /** Verify if start month and end month is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all months, which are between start and end date */\n calendarList\n .filter(\n (_month) =>\n (_month.selectedRange = this._dateTimeAdapter.isBetween(\n _month.date,\n dates.start!,\n dates.end!\n ))\n )\n .forEach((_month) => (_month.selectedRange = true));\n }\n }\n }\n\n /**\n * @hidden\n * Check if dates are equal\n */\n private _isSameDate(date1: Nullable<D>, date2: Nullable<D>): boolean {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n\n /**\n * @hidden\n * Method that create month grid with required meta data\n */\n private _constructMonthGrid(): void {\n const monthNames: string[] = this.isDateRangeMonthYearFormat\n ? this._dateTimeAdapter.getMonthNames('long')\n : this._dateTimeAdapter.getMonthNames('short');\n\n const monthList: CalendarMonth<D>[] = monthNames.map((monthName, index): CalendarMonth<D> => {\n const month = index + this.monthOffset;\n return {\n date: this._dateTimeAdapter.createDate(this.year, month),\n month,\n label: monthName,\n ariaLabel: this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(this.year, month, 1),\n this._dateTimeFormats.display.monthA11yLabel\n ),\n index,\n selected: month === this.monthSelected,\n current: month === this.currentMonth,\n tabIndex: month === this.monthSelected ? 0 : -1\n };\n });\n\n // if the date range is selected\n if (this.isDateRangeMonthYearFormat) {\n this._changeSelectedRangeMonths(this._selectedRangeDate, monthList);\n }\n\n this._calendarMonthListGrid = [];\n /** Creating 2d grid */\n while (monthList.length) {\n this._calendarMonthListGrid.push(monthList.splice(0, this._amountOfColPerRow));\n }\n\n this._calendarMonthListGrid.forEach((row, rowIndex) => {\n row.forEach((monthCell, colIndex) => {\n monthCell.id = this._getId(this._getIndex(rowIndex, colIndex));\n });\n });\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this._calendarService.rowAmount = this._amountOfRows;\n this._calendarService.colAmount = this._amountOfColPerRow;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getMonthList()[index]);\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index, event }) => this.selectMonth(this._getMonthList()[index], event));\n }\n\n /**\n * @hidden\n * Returns transformed 1d array from 2d month grid.\n */\n private _getMonthList(): CalendarMonth<D>[] {\n return (<CalendarMonth<D>[]>[]).concat(...this._calendarMonthListGrid);\n }\n\n /** @hidden */\n private _focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--months\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (colMonths of _calendarMonthListGrid; track colMonths + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\" role=\"row\">\n @for (monthCell of colMonths; track monthCell + '' + colIndex; let colIndex = $index) {\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n [class.fd-calendar__my-item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (mouseenter)=\"_handleRangeHover(monthCell)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n [class.fd-button--toggled]=\"\n monthCell.selectedRange ||\n monthCell.hoverRange ||\n monthCell.selectedFirst ||\n monthCell.selectedLast\n \"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject\n} from '@angular/core';\n\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { CalendarYear, CalendarYearGrid } from '../../models/calendar-year-grid';\nimport { DefaultCalendarActiveCellStrategy, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\n\n/** Component representing the YearView of the Calendar Component. */\n@Component({\n selector: 'fd-calendar-year-view',\n templateUrl: './calendar-year-view.component.html',\n styleUrl: './calendar-year-view.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'viewId'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class CalendarYearViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {\n /** The id of the calendar passed from the parent component */\n @Input()\n id: string;\n\n /** Function that is called when the focus would escape the element. */\n @Input()\n focusEscapeFunction: EscapeFocusFunction;\n\n /** Parameter holding the year that is currently selected. */\n @Input()\n yearSelected: number;\n\n /**\n * Object to customize year grid\n */\n @Input()\n yearViewGrid: CalendarYearGrid;\n\n /** Whether the date range is year format only excluding month and day */\n @Input()\n isDateRangeYearFormat: boolean;\n\n /**\n * Whether user wants to mark year cells on hover.\n * Works only on range mode, when start year is selected.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Event fired when a year is selected. */\n @Output()\n readonly yearClicked: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /**\n * @hidden\n * This variable is used to define which year from calendarYearList should be focusable by tab key\n */\n _activeYear: number;\n\n /**\n * @hidden\n * Parameter that stores the dozen of years that are currently being displayed.\n */\n _calendarYearListGrid: CalendarYear<D>[][];\n\n /**\n * @hidden\n * Parameter storing the year of the present day.\n */\n _currentYear: number;\n\n /**\n * @hidden\n * Parameter storing first shown year on list\n */\n _firstYearInList: number;\n\n /** View ID */\n get viewId(): string {\n return this.id + '-year-view';\n }\n\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId(): string {\n return this.viewId + '-today-label';\n }\n\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId(): string {\n return this.viewId + '-selected-date-label';\n }\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n /** @hidden */\n private _initiated = false;\n\n /** @hidden */\n private _selectedRangeDate: DateRange<D>;\n\n /** @hidden */\n private _isOnRangePick = false;\n\n /** @hidden */\n constructor(\n private _eRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _calendarService: CalendarService,\n private _dateTimeAdapter: DatetimeAdapter<D>,\n @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n ) {\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n this._firstYearInList = this._currentYear;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._initiated = true;\n\n this._setupKeyboardService();\n this._firstYearInList = this.yearSelected;\n this._constructYearGrid();\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._initiated && ('yearViewGrid' in changes || 'yearSelected' in changes || 'id' in changes)) {\n this._constructYearGrid();\n }\n }\n\n /** The currently selected FdDates model start and end in range mode. */\n @Input()\n set selectedRangeDate(dateRange: DateRange<D>) {\n if (\n dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)\n ) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarYearListGrid) {\n this._changeSelectedRangeYears(dateRange, this._getYearList());\n }\n }\n\n get selectedRangeDate(): DateRange<D> {\n return this._selectedRangeDate;\n }\n\n /**\n * @hidden\n * Amount of selected years\n * 0, when there is no year selected, or start year is invalid,\n * 1, when there is only valid start year, or end year is same as start year,\n * 2, when both dates are valid\n */\n get _selectCounter(): number {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (\n this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))\n ) {\n return 1;\n }\n if (\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n ) {\n return 2;\n }\n return 0;\n }\n\n /** Method used to load the previous {{col * row}} years to be displayed. */\n loadNextYearList(): void {\n this._firstYearInList += this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n\n /** Method used to load the next {{col * row}} years to be displayed. */\n loadPreviousYearList(): void {\n this._firstYearInList -= this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear: CalendarYear<D>, event?: MouseEvent | KeyboardEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.yearSelected = selectedYear.year;\n this.yearClicked.emit(this.yearSelected);\n\n if (this.isDateRangeYearFormat) {\n this._selectRangeDate(selectedYear);\n this._handleRangeHoverEffect(event);\n }\n }\n\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell(): void {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n\n /**\n * @hidden\n * Method for handling the keyboard navigation.\n */\n _onKeydownYearHandler(event: KeyboardEvent, index: number): void {\n this._calendarService.onKeydownHandler(event, index);\n }\n\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector: string): void {\n const elementToFocus: HTMLElement = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex: number, colIndex: number): number {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n\n /**\n * @hidden\n * Get grid cell id be index\n * @param index\n */\n _getId(index: number): string {\n return this.viewId + '-year-' + index;\n }\n\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param year The calendar year that is hovered.\n */\n _handleRangeHover(year: CalendarYear<D>): void {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(year.date, start) < 0) {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) > 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) < 0;\n });\n } else {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) < 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) > 0;\n });\n }\n }\n }\n\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n private _getActiveYear(): number {\n const selectedYearCell = this._getYearList().find(({ year }) => year === this.yearSelected);\n if (selectedYearCell) {\n return selectedYearCell.year;\n }\n\n const currentYearCell = this._getYearList().find(({ year }) => year === this._currentYear);\n if (currentYearCell) {\n return currentYearCell.year;\n }\n\n return this._calendarYearListGrid[0][0].year;\n }\n\n /** @hidden */\n private _constructYearGrid(): void {\n const displayedYearsAmount: number = this.yearViewGrid.cols * this.yearViewGrid.rows;\n const calendarYearList: CalendarYear<D>[] = [];\n this._calendarYearListGrid = [];\n\n for (let x = 0; x < displayedYearsAmount; ++x) {\n const year = this._firstYearInList + x;\n calendarYearList.push({\n date: this._dateTimeAdapter.createDate(year),\n year,\n label: this._getYearName(year),\n ariaLabel: this._getAriaYearName(year),\n selected: year === this.yearSelected,\n current: year === this._currentYear,\n index: x\n });\n }\n\n // if the date range is selected\n if (this.isDateRangeYearFormat) {\n this._changeSelectedRangeYears(this._selectedRangeDate, calendarYearList);\n }\n\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.yearViewGrid.cols));\n }\n\n this._activeYear = this._getActiveYear();\n\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.year === this._activeYear ? 0 : -1;\n });\n });\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n private _handleRangeHoverEffect(event?: MouseEvent | KeyboardEvent): void {\n if (this.isDateRangeYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n } else {\n this._isOnRangePick = false;\n }\n }\n\n /**\n * @hidden\n * Change properties of range years, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected years.\n */\n private _changeSelectedRangeYears(dates: DateRange<D>, calendar: CalendarYear<D>[]): void {\n /** Pull list of calendar year */\n const calendarList = calendar;\n\n /** Reset changing properties */\n calendarList.forEach(\n (_year) =>\n (_year.selectedFirst =\n _year.selectedLast =\n _year.selected =\n _year.disabled =\n _year.hoverRange =\n _year.selectedRange =\n false)\n );\n\n if (dates) {\n let startYear: CalendarYear<D> | undefined;\n let endYear: CalendarYear<D> | undefined;\n if (dates.start) {\n /** Find start year and mark it as selected */\n startYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.start));\n if (startYear) {\n startYear.selected = true;\n startYear.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end year and mark it as selected */\n endYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.end));\n if (endYear) {\n endYear.selected = true;\n endYear.selectedLast = true;\n }\n }\n\n /** Verify if start year and end year is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all years, which are between start and end date */\n calendarList\n .filter(\n (_year) =>\n (_year.selectedRange = this._dateTimeAdapter.isBetween(\n _year.date,\n dates.start!,\n dates.end!\n ))\n )\n .forEach((_year) => (_year.selectedRange = true));\n }\n }\n }\n\n /**\n * @hidden\n * Check if dates are equal\n */\n private _isSameDate(date1: Nullable<D>, date2: Nullable<D>): boolean {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n\n /**\n * @hidden\n * Selects or updates the range of years in range mode.\n * Handles the start and end years and updates the selected range.\n * @param year The calendar year to be selected or updated in the range.\n */\n private _selectRangeDate(year: CalendarYear<D>): void {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: year.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n } else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start!, year.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeYears(this._selectedRangeDate, this._getYearList());\n }\n\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n private _getOrderedRange(date1: D, date2: D): { start: D; end: D } {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n\n /**\n * @hidden\n * Returns year name as a string.\n */\n private _getYearName(year: number): string {\n const formatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year, 1, 1));\n return this._getYearString(year, formatted);\n }\n\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n private _getAriaYearName(year: number): string {\n const formatted = this._dateTimeAdapter.format(\n this._dateTimeAdapter.createDate(year, 1, 1),\n this._dateTimeFormats.display.yearA11yLabel\n );\n return this._getYearString(year, formatted);\n }\n\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n private _getYearString(year: number, defaultStr: string): string {\n if (typeof this.yearViewGrid.yearMapping === 'function') {\n return this.yearViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n private _getYearList(): CalendarYear<D>[] {\n return (<CalendarYear<D>[]>[]).concat(...this._calendarYearListGrid);\n }\n\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n private _getAmountOfYearsShownAtOnce(): number {\n return this.yearViewGrid.rows * this.yearViewGrid.cols;\n }\n\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n private _setupKeyboardService(): void {\n this._calendarService.colAmount = this.yearViewGrid.cols;\n this._calendarService.rowAmount = this.yearViewGrid.rows;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getYearList()[index]);\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectYear(this._getYearList()[index], event);\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n\n /** @hidden */\n private _focusOnCellByIndex(index: number): void {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n}\n","<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\n <tr class=\"fd-calendar__row\" role=\"row\">\n @for (yearCell of colYears; track yearCell + '' + colIndex; let colIndex = $index) {\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n [class.fd-calendar__my-item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (mouseenter)=\"_handleRangeHover(yearCell)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n [class.fd-button--toggled]=\"\n yearCell.selectedRange ||\n yearCell.hoverRange ||\n yearCell.selectedFirst ||\n yearCell.selectedLast\n \"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n","/** Create an Error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `Calendar: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import { FD_LANGUAGE_ENGLISH } from '@fundamental-ngx/i18n';\nimport { Subject } from 'rxjs';\n\n/**\n * Provides i18n support for labels inside the calendar component.\n * @deprecated use i18n `coreCalendar` key instead\n */\nexport class CalendarI18nLabels {\n /** This is event that should be called, when labels are changed, to let component detect an changes. */\n readonly labelsChange: Subject<void> = new Subject();\n\n /** Year selection aria label. Used on the button to navigate to the years view. */\n yearSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearSelectionLabel;\n\n /** Years range selection aria label. Used on the button to navigate to the years range view. */\n yearsRangeSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearsRangeSelectionLabel;\n\n /** Month selection aria label. Used on the button to navigate to the months view. */\n monthSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.monthSelectionLabel;\n\n /** Day selection aria label. Used on the button to navigate to the day view. */\n dateSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectionLabel;\n\n /** Previous year aria label. Used on the button to switch to a previous year in the years view. */\n previousYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousYearLabel;\n\n /** Next year aria label. Used on the button to switch to a next year in the years view. */\n nextYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextYearLabel;\n\n /** Previous month aria label. Used on the button to switch to a previous month in the months view. */\n previousMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousMonthLabel;\n\n /** Next month aria label. Used on the button to switch to a next month in the months view. */\n nextMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextMonthLabel;\n\n /** Week number column label */\n weekColumnLabel = FD_LANGUAGE_ENGLISH.coreCalendar.weekColumnLabel;\n\n /** Selected date label. Used on the selected day/month/year cell. */\n dateSelectedLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectedLabel;\n\n /** Is used to describe present date */\n todayLabel = FD_LANGUAGE_ENGLISH.coreCalendar.todayLabel;\n\n /** Range start label. Used for date range selection */\n rangeStartLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeStartLabel;\n\n /** Range end label. Used for date range selection */\n rangeEndLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeEndLabel;\n\n /** Past days aria label. Used when days in the past are accessed */\n dayInPastLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dayInPastLabel;\n\n /** Past days aria label. Used when days in the past are accessed */\n closeCalendarLabel = FD_LANGUAGE_ENGLISH.coreCalendar.closeCalendarLabel;\n\n /** Calendar day view aria role description. */\n calendarDayViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarDayViewDescription;\n\n /** Calendar month view aria role description. */\n calendarMonthViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarMonthViewDescription;\n\n /** Calendar years view aria role description. */\n calendarYearsViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsViewDescription;\n\n /** Calendar years range view aria role description. */\n calendarYearsRangeViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsRangeViewDescription;\n}\n","import { inject } from '@angular/core';\nimport { FD_LANGUAGE, FdLanguage } from '@fundamental-ngx/i18n';\nimport { Observable, map, startWith, switchMap } from 'rxjs';\nimport { CalendarI18nLabels } from './i18n/calendar-i18n-labels';\n\n/**\n * Use deprecated `CalendarI18nLabels` to patch `FD_LANGUAGE` observable\n */\nexport function patchDeprecatedI18nLabels(): Observable<FdLanguage> {\n const deprecatedSymbol = inject(CalendarI18nLabels, { optional: true });\n if (deprecatedSymbol) {\n return inject(FD_LANGUAGE, { skipSelf: true }).pipe(\n switchMap((existingLang) =>\n deprecatedSymbol.labelsChange.pipe(\n startWith(null),\n map(() => existingLang)\n )\n ),\n map((existingLang) => ({\n ...existingLang,\n coreCalendar: {\n ...existingLang.coreCalendar,\n ...deprecatedSymbol\n }\n }))\n );\n }\n return inject(FD_LANGUAGE, { skipSelf: true });\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { SpecialDayRule } from '@fundamental-ngx/core/shared';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FD_LANGUAGE } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './calendar-errors';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarLegendFocusingService } from './calendar-legend/calendar-legend-focusing.service';\nimport { CalendarLegendComponent } from './calendar-legend/calendar-legend.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarService } from './calendar.service';\nimport { AggregatedYear } from './models/aggregated-year';\nimport { CalendarCurrent } from './models/calendar-current';\nimport { CalendarYearGrid } from './models/calendar-year-grid';\nimport { DisableDateFunction, EscapeFocusFunction, FocusableCalendarView } from './models/common';\nimport { DateRange } from './models/date-range';\nimport { patchDeprecatedI18nLabels } from './patch-deprecated-i18n-labels';\nimport {\n CalendarType,\n CalendarTypeEnum,\n DaysOfWeek,\n FdCalendarView,\n FdCalendarViewEnum,\n NavigationButtonDisableFunction\n} from './types';\n\nlet calendarUniqueId = 0;\n\n/**\n * Months: 1 = January, 12 = december.\n * Days: 1 = Sunday, 7 = Saturday\n *\n * Calendar component used for selecting dates, typically used by the DatePicker and DateTimePicker components.\n * Supports the Angular forms module, enabling form validity, ngModel, etc.\n * ```html\n * <fd-calendar></fd-calendar>\n * ```\n *\n */\n@Component({\n selector: 'fd-calendar',\n templateUrl: './calendar.component.html',\n styleUrl: './calendar.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n CalendarService,\n CalendarLegendFocusingService,\n contentDensityObserverProviders(),\n {\n provide: FD_LANGUAGE,\n useFactory: patchDeprecatedI18nLabels\n }\n ],\n host: {\n '[attr.id]': 'id',\n class: 'fd-calendar fd-has-display-block'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ContentDensityModule,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarLegendComponent\n ]\n})\nexport class CalendarComponent<D> implements OnInit, OnChanges, ControlValueAccessor, Validator, OnDestroy {\n /** The currently selected date model in single mode. */\n @Input()\n selectedDate: Nullable<D>;\n\n /** The currently selected date model in multiple mode. */\n @Input()\n selectedMultipleDates: Array<D>;\n\n /** The currently selected date model with start and end in range mode. */\n @Input()\n selectedRangeDate: DateRange<D>;\n\n /** The currently selected date model with multiple ranges. */\n @Input()\n selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = false;\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n @Input()\n allowMultipleSelection = false;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n @HostBinding('class.fd-calendar--mobile-landscape')\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n @HostBinding('class.fd-calendar--mobile-portrait')\n mobilePortrait = false;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' */\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /**\n * The type of calendar\n * 'single' for single date selection\n * 'range' for a range of dates.\n */\n @Input()\n calType: CalendarType = CalendarTypeEnum.Single;\n\n /** Id of the calendar. If none is provided, one will be generated. */\n @Input()\n id = 'fd-calendar-' + calendarUniqueId++;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with D object as a parameter. ex:\n * `rule: (fdDate: D) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Whether to pick the date range in month or year or days format\n * Day format will have a month and year including day\n * Month format will have year including month\n * Year format will have just year\n * Values can be 'month' for Month format, 'year' for Year format or nothing for day format\n */\n @Input()\n dateRangeFormat = '';\n\n /** Event thrown every time active view is changed */\n @Output()\n readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /** Event thrown every time when value is overwritten from outside and throw back isValid */\n @Output()\n readonly isValidDateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event thrown every time when calendar should be closed */\n @Output()\n readonly closeCalendar: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event thrown, when close button is clicked */\n @Output()\n readonly closeClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(CalendarDayViewComponent)\n _dayViewComponent: CalendarDayViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarMonthViewComponent)\n _monthViewComponent: CalendarMonthViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarYearViewComponent)\n _yearViewComponent: CalendarYearViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarAggregatedYearViewComponent)\n _aggregatedYearViewComponent: CalendarAggregatedYearViewComponent<D>;\n\n /** @hidden */\n @ViewChild(CalendarHeaderComponent)\n _calendarHeaderComponent: CalendarHeaderComponent<D>;\n\n /**\n * Function used to disable previous button in the calendar header.\n * @param date selected date\n * @param currentlyDisplayedDate currently displayed date\n * @param activeView current view of calendar\n */\n @Input()\n previousButtonDisableFunction: NavigationButtonDisableFunction<D>;\n\n /**\n * Function used to disable next button in the calendar header.\n * @param date selected date\n * @param currentlyDisplayedDate currently displayed date\n * @param activeView current view of calendar\n */\n @Input()\n nextButtonDisableFunction: NavigationButtonDisableFunction<D>;\n\n /**\n * Whether to show the calendar legend below the calendar.\n * The legend displays special day markers and their meanings.\n */\n @Input()\n showCalendarLegend = false;\n\n /**\n * Whether to display the legend in column layout (true) or row layout (false).\n * Column layout is useful when legend is displayed alongside the calendar.\n */\n @Input()\n legendCol = false;\n\n /**\n * @hidden\n * Currently displayed days depending on month and year\n */\n _currentlyDisplayed: CalendarCurrent;\n\n /** @hidden */\n previousButtonDisabled: boolean;\n\n /** @hidden */\n nextButtonDisabled: boolean;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _adapterStartingDayOfWeek: DaysOfWeek;\n\n /** @hidden */\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n _contentDensityObserver: ContentDensityObserver,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n ) {\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n _contentDensityObserver.subscribe();\n // set default value\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1) as DaysOfWeek;\n this.selectedDate = this._dateTimeAdapter.today();\n this._changeDetectorRef.markForCheck();\n this._listenToLocaleChanges();\n }\n\n /** That allows to define function that should happen, when focus should normally escape of component */\n @Input()\n escapeFocusFunction: EscapeFocusFunction = (event?: KeyboardEvent): void => {\n event?.preventDefault();\n this._calendarHeaderComponent?.focus();\n };\n\n /**\n * Function used to disable certain dates in the calendar.\n */\n @Input()\n disableFunction: DisableDateFunction<D> = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n @Input()\n disableRangeStartFunction: DisableDateFunction<D> = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n @Input()\n disableRangeEndFunction: DisableDateFunction<D> = () => false;\n\n /** @hidden */\n @HostListener('focusout', ['$event'])\n focusOut(event: FocusEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n onChange: (_: D | Array<D> | DateRange<D> | Array<DateRange<D>>) => void = () => {};\n\n /** @hidden */\n onTouched: () => void = () => {};\n\n /** @hidden */\n ngOnInit(): void {\n this._prepareDisplayedView();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (\n 'nextButtonDisableFunction' in changes ||\n 'previousButtonDisableFunction' in changes ||\n '_currentlyDisplayed' in changes\n ) {\n this._setNavigationButtonsStates();\n }\n }\n\n /** @hidden */\n getWeekStartDay(): DaysOfWeek {\n return this.startingDayOfWeek === undefined ? this._adapterStartingDayOfWeek : this.startingDayOfWeek;\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms.\n */\n writeValue(selected: D | Array<D> | DateRange<D> | Array<DateRange<D>>): void {\n let valid = true;\n\n const isValidDate = (date: D | null): boolean => date != null && this._dateTimeAdapter.isValid(date);\n const isValidRange = (range: DateRange<D>): boolean =>\n range != null && isValidDate(range.start) && isValidDate(range.end);\n\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n const dates = Array.isArray(selected) ? (selected as Array<D>) : [selected as D];\n valid = dates.every(isValidDate);\n this.selectedMultipleDates = dates;\n } else if (this.calType === CalendarTypeEnum.Range) {\n const ranges = Array.isArray(selected) ? (selected as Array<DateRange<D>>) : [];\n valid = ranges.every(isValidRange);\n this.selectedMultipleDateRanges = ranges.map((range) => ({\n start: range?.start || null,\n end: range?.end || null\n }));\n }\n } else {\n if (this.calType === CalendarTypeEnum.Single) {\n valid = isValidDate(selected as D);\n this.selectedDate = selected as D;\n } else if (this.calType === CalendarTypeEnum.Range) {\n const range = selected as DateRange<D>;\n valid = range && isValidRange(range);\n this.selectedRangeDate = range\n ? { start: range.start || null, end: range.end || null }\n : {\n start: null,\n end: null\n };\n }\n }\n\n if (valid) {\n this._prepareDisplayedView();\n }\n\n this._changeDetectorRef.detectChanges();\n this.isValidDateChange.emit(valid);\n }\n\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate(): { [key: string]: any } | null {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n\n /** @hidden */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Method that handle active view change and throws event.\n *\n * Fired by calendar header component.\n */\n handleActiveViewChange(activeView: FdCalendarView): void {\n if (activeView === this.activeView) {\n return;\n }\n\n this.activeView = activeView;\n\n this.activeViewChange.emit(activeView);\n\n if (activeView === FdCalendarViewEnum.Month) {\n this.onMonthViewSelected();\n }\n if (activeView === FdCalendarViewEnum.Year) {\n this.onYearViewSelected();\n }\n if (activeView === FdCalendarViewEnum.AggregatedYear) {\n this.onYearsRangeViewSelected();\n }\n\n this._setNavigationButtonsStates();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected single date changed\n */\n selectedDateChanged(date: D): void {\n this.selectedDate = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedDateChange.emit(date);\n this.closeCalendar.emit();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected multi date changed\n */\n selectedMultipleDatesChanged(date: Array<D>): void {\n this.selectedMultipleDates = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedMultipleDatesChange.emit(date);\n this.closeCalendar.emit();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedRangeDateChanged(dates: DateRange<D>): void {\n if (dates) {\n this.selectedRangeDate = { start: dates.start, end: dates.end };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this.closeCalendar.emit();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedMultipleDateRangesChanged(dates: Array<DateRange<D>>): void {\n if (dates) {\n this.selectedMultipleDateRanges = dates;\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n this.onChange(this.selectedMultipleDateRanges);\n this.closeCalendar.emit();\n }\n }\n\n /** Function that handles next arrow icon click, depending on current view it changes month, year or list of years */\n handleNextArrowClick(): void {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayNextMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayNextYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayNextYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayNextYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n\n /** Function that handles previous arrow icon click, depending on current view it changes month, year or list of years */\n handlePreviousArrowClick(): void {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayPreviousMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayPreviousYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayPreviousYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayPreviousYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n\n /** Function that allows to switch actual view to next month */\n displayNextMonth(): void {\n if (this._currentlyDisplayed.month === 12) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year + 1, month: 1 };\n } else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month + 1\n };\n }\n }\n\n /** Function that allows to switch actual view to previous month */\n displayPreviousMonth(): void {\n if (this._currentlyDisplayed.month <= 1) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year - 1, month: 12 };\n } else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month - 1\n };\n }\n }\n\n /** Function that allows to switch actual view to next year */\n displayNextYear(): void {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year + 1 };\n }\n\n /** Function that allows to switch actual view to previous year */\n displayPreviousYear(): void {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year - 1 };\n }\n\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearList(): void {\n this._yearViewComponent.loadNextYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearList(): void {\n this._yearViewComponent.loadPreviousYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearsList(): void {\n this._aggregatedYearViewComponent.loadNextYearsList();\n }\n\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearsList(): void {\n this._aggregatedYearViewComponent.loadPreviousYearsList();\n }\n\n /**\n * Function that allows to change currently displayed month/year configuration,\n * which are connected to days displayed\n */\n setCurrentlyDisplayed(date: Nullable<D>): void {\n if (this._dateTimeAdapter.isValid(date)) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(date!),\n year: this._dateTimeAdapter.getYear(date!)\n };\n }\n }\n\n /**\n * Set initial focus on one of the calendar's element\n */\n initialFocus(): void {\n this._getActiveFocusableView()?.setFocusOnCell();\n }\n\n /**\n * @hidden\n * Function that handles changes from month view child component, changes actual view and changes currently displayed month\n */\n handleMonthViewChange(month: number): void {\n this._currentlyDisplayed = { month, year: this._currentlyDisplayed.year };\n // if mm/yyyy format date is not enabled then only show days view\n if (!this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n\n this.activeViewChange.emit(this.activeView);\n }\n\n /** Select year */\n selectedYear(yearSelected: number): void {\n this._currentlyDisplayed.year = yearSelected;\n\n // if month format date range is enabled then on selecting year show month view else show days view\n // if year format date range is enabled then view remains same on selecting year\n if (this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Month;\n this.onMonthViewSelected();\n } else if (this.isDateRangeYearFormat()) {\n this.activeView = FdCalendarViewEnum.Year;\n this.onYearViewSelected();\n } else {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n }\n\n /** Select year range */\n selectedYears(yearsSelected: AggregatedYear): void {\n this.activeView = FdCalendarViewEnum.Year;\n this._currentlyDisplayed = {\n ...this._currentlyDisplayed,\n year: yearsSelected.startYear\n };\n this.onYearViewSelected();\n }\n\n /** @hidden */\n onDaysViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._dayViewComponent?.setFocusOnCell();\n }\n\n /** @hidden */\n onMonthViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._monthViewComponent?.setFocusOnCell();\n }\n\n /** @hidden */\n onYearViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._yearViewComponent?.setFocusOnCell();\n }\n\n /** @hidden */\n onYearsRangeViewSelected(): void {\n this._changeDetectorRef.detectChanges();\n this._aggregatedYearViewComponent?.setFocusOnCell();\n }\n\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid(): boolean {\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n return (\n this.selectedMultipleDates &&\n this.selectedMultipleDates.every((d) => this._dateTimeAdapter.isValid(d))\n );\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (\n this.selectedMultipleDateRanges &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.start)) &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.end))\n );\n }\n } else {\n if (this.calType === CalendarTypeEnum.Single) {\n return this._dateTimeAdapter.isValid(this.selectedDate);\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (\n this.selectedRangeDate &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)\n );\n }\n }\n return false;\n }\n\n /** Whether the date range format is month */\n isDateRangeMonthFormat(): boolean {\n return this.dateRangeFormat === 'month';\n }\n\n /** Whether the date range format is year */\n isDateRangeYearFormat(): boolean {\n return this.dateRangeFormat === 'year';\n }\n\n /** @hidden */\n private _listenToLocaleChanges(): void {\n this._subscriptions.add(\n this._dateTimeAdapter.localeChanges.subscribe(() => {\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1) as DaysOfWeek;\n this._changeDetectorRef.markForCheck();\n })\n );\n }\n\n /**\n * @hidden\n * Method that sets up the currently displayed variables, like shown month and year.\n * Day grid is based on currently displayed month and year\n */\n private _prepareDisplayedView(): void {\n const { selectedDate, selectedRangeDate, selectedMultipleDates, selectedMultipleDateRanges } = this;\n\n if (\n this.calType === CalendarTypeEnum.Single &&\n this._dateTimeAdapter.isValid(selectedDate) &&\n !this.allowMultipleSelection\n ) {\n this._setCurrentlyDisplayed(selectedDate as D);\n } else if (selectedMultipleDates?.length > 0 && this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDates[0]);\n } else if (selectedRangeDate?.start && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.start);\n } else if (selectedRangeDate?.end && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.end);\n } else if (\n selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].start &&\n this.allowMultipleSelection\n ) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].start);\n } else if (\n selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].end &&\n this.allowMultipleSelection\n ) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].end);\n } else {\n const today = this._dateTimeAdapter.today();\n this._setCurrentlyDisplayed(today);\n }\n }\n\n /** @hidden */\n private _setCurrentlyDisplayed(date: D): void {\n this._currentlyDisplayed = {\n year: this._dateTimeAdapter.getYear(date),\n month: this._dateTimeAdapter.getMonth(date)\n };\n }\n\n /** @hidden */\n private _getActiveFocusableView(): FocusableCalendarView | null {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n return this._dayViewComponent;\n case FdCalendarViewEnum.Month:\n return this._monthViewComponent;\n case FdCalendarViewEnum.Year:\n return this._yearViewComponent;\n case FdCalendarViewEnum.AggregatedYear:\n return this._aggregatedYearViewComponent;\n default:\n return null;\n }\n }\n\n /** @hidden */\n private _setNavigationButtonsStates(): void {\n this.previousButtonDisabled = this._isNavigationButtonDisabled(this.previousButtonDisableFunction);\n this.nextButtonDisabled = this._isNavigationButtonDisabled(this.nextButtonDisableFunction);\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n private _isNavigationButtonDisabled(disableFunction?: NavigationButtonDisableFunction<D>): boolean {\n return (\n typeof disableFunction === 'function' &&\n disableFunction(this.selectedDate, this._currentlyDisplayed, this.activeView)\n );\n }\n}\n","<fd-calendar-header\n [currentlyDisplayed]=\"_currentlyDisplayed\"\n [activeView]=\"activeView\"\n [id]=\"id\"\n [calendarYearGrid]=\"yearGrid\"\n (closeClicked)=\"closeClicked.emit()\"\n (nextClicked)=\"handleNextArrowClick()\"\n (previousClicked)=\"handlePreviousArrowClick()\"\n [previousButtonDisabled]=\"previousButtonDisabled\"\n [nextButtonDisabled]=\"nextButtonDisabled\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n></fd-calendar-header>\n@if (_currentlyDisplayed) {\n @if (activeView === 'day') {\n <fd-calendar-day-view\n [selectedDate]=\"selectedDate\"\n [selectedMultipleDates]=\"selectedMultipleDates\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [selectedMultipleDateRanges]=\"selectedMultipleDateRanges\"\n (selectedDateChange)=\"selectedDateChanged($event)\"\n (selectedMultipleDatesChange)=\"selectedMultipleDatesChanged($event)\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n (selectedMultipleDateRangesChange)=\"selectedMultipleDateRangesChanged($event)\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [allowMultipleSelection]=\"allowMultipleSelection\"\n [markWeekends]=\"markWeekends\"\n [currentlyDisplayed]=\"_currentlyDisplayed\"\n [startingDayOfWeek]=\"getWeekStartDay()\"\n [disableFunction]=\"disableFunction\"\n [disableRangeEndFunction]=\"disableRangeEndFunction\"\n [disableRangeStartFunction]=\"disableRangeStartFunction\"\n [calType]=\"calType\"\n [id]=\"id\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n [specialDaysRules]=\"specialDaysRules\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n (nextMonthSelect)=\"displayNextMonth()\"\n (previousMonthSelect)=\"displayPreviousMonth()\"\n ></fd-calendar-day-view>\n } @else if (activeView === 'month') {\n <fd-calendar-month-view\n [monthSelected]=\"_currentlyDisplayed.month\"\n [year]=\"_currentlyDisplayed.year\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n [isDateRangeMonthYearFormat]=\"isDateRangeMonthFormat()\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n (monthClicked)=\"handleMonthViewChange($event)\"\n ></fd-calendar-month-view>\n } @else if (activeView === 'year') {\n <fd-calendar-year-view\n [yearSelected]=\"_currentlyDisplayed.year\"\n [yearViewGrid]=\"yearGrid\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n [isDateRangeYearFormat]=\"isDateRangeYearFormat()\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n (yearClicked)=\"selectedYear($event)\"\n >\n </fd-calendar-year-view>\n } @else if (activeView === 'aggregatedYear') {\n <fd-calendar-aggregated-year-view\n (yearsClicked)=\"selectedYears($event)\"\n [yearSelected]=\"_currentlyDisplayed.year\"\n [yearViewGrid]=\"yearGrid\"\n [aggregatedYearsViewGrid]=\"aggregatedYearGrid\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n >\n </fd-calendar-aggregated-year-view>\n }\n}\n@if (showCalendarLegend && specialDaysRules.length > 0) {\n <fd-calendar-legend [specialDaysRules]=\"specialDaysRules\" [col]=\"legendCol\"> </fd-calendar-legend>\n}\n","import { NgModule } from '@angular/core';\n\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { CalendarCloseButtonDirective } from './calendar-directives';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarComponent } from './calendar.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [\n CalendarComponent,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective\n ],\n exports: [\n CalendarComponent,\n CalendarDayViewComponent,\n CalendarHeaderComponent,\n CalendarYearViewComponent,\n CalendarMonthViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective,\n ContentDensityModule\n ]\n})\nexport class CalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService","CalendarActiveDayCellStrategy"],"mappings":"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"}