{"version":3,"file":"datepicker.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/calendar-body/calendar-body.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/calendar-body/calendar-body.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker-errors.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/date-range.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker-token.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/month-view/month-view.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/month-view/month-view.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/calendar/calendar.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/calendar/calendar-header.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/calendar/calendar.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker-content/datepicker-content.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker-content/datepicker-content.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker-toggle/datepicker-toggle.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker-toggle/datepicker-toggle.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker/datepicker.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker/datepicker.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/date-input/date-input.directive.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/datepicker/datepicker.module.ts"],"sourcesContent":["import {\n  afterNextRender,\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Injector,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\n\n/** Extra CSS classes that can be associated with a calendar cell. */\nexport type SbbCalendarCellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\n/** Function that can generate the extra classes that should be added to a calendar cell. */\nexport type SbbCalendarCellClassFunction<D> = (date: D) => SbbCalendarCellCssClasses;\n\nlet uniqueIdCounter = 0;\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class SbbCalendarCell {\n  readonly id = uniqueIdCounter++;\n  constructor(\n    public value: number,\n    public displayValue: string,\n    public ariaLabel: string,\n    public enabled: boolean,\n    public rangeBackground?: string | null,\n    public cssClasses: SbbCalendarCellCssClasses = {},\n  ) {}\n}\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: '[sbb-calendar-body]',\n  templateUrl: './calendar-body.html',\n  exportAs: 'sbbCalendarBody',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-calendar-body',\n    '[attr.aria-readonly]': 'true',\n    role: 'grid',\n  },\n})\nexport class SbbCalendarBody implements AfterViewChecked {\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n\n  /**\n   * Used to focus the active cell after change detection has run.\n   */\n  private _focusActiveCellAfterViewChecked = false;\n\n  /** The label for the table. (e.g. \"Jan 2017\"). */\n  @Input() label: string;\n\n  /** The cells to display in the table. */\n  @Input()\n  set rows(rows) {\n    if (rows !== this._rows) {\n      this._rows = rows;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n  get rows() {\n    return this._rows;\n  }\n  private _rows: SbbCalendarCell[][];\n\n  /** Week of year for each row. */\n  @Input() weeksInMonth: number[] = [];\n\n  /** The value in the table that corresponds to today. */\n  @Input() todayValue: number;\n\n  /** The value in the table that is currently selected. */\n  @Input() selectedValue: number;\n\n  /** The minimum number of free cells needed to fit the label in the first row. */\n  @Input() labelMinRequiredCells: number;\n\n  /** The number of columns in the table. */\n  @Input() numCols: number = 7;\n\n  /** Whether to allow selection of disabled cells. */\n  @Input() allowDisabledSelection: boolean = false;\n\n  /** The cell number of the active cell in the table. */\n  @Input() activeCell: number = 0;\n\n  /** Whether the week can be selected. */\n  @Input() isWeekSelectable: boolean = false;\n\n  /** Whether the weekday can be selected. */\n  @Input() isWeekdaySelectable: boolean = false;\n\n  /** Emits when a new value is selected. */\n  @Output() readonly selectedValueChange: EventEmitter<number> = new EventEmitter<number>();\n\n  /** Emits when a week is selected */\n  @Output() readonly selectedWeekChange: EventEmitter<number> = new EventEmitter<number>();\n\n  @Output() readonly activeDateChange = new EventEmitter<number>();\n\n  private _injector = inject(Injector);\n\n  /**\n   * Tracking function for rows based on their identity. Ideally we would use some sort of\n   * key on the row, but that would require a breaking change for the `rows` input. We don't\n   * use the built-in identity tracking, because it logs warnings.\n   */\n  _trackRow = (row: SbbCalendarCell[]) => row;\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewChecked() {\n    if (this._focusActiveCellAfterViewChecked) {\n      this.focusActiveCell();\n      this._focusActiveCellAfterViewChecked = false;\n    }\n  }\n\n  cellClicked(cell: SbbCalendarCell): void {\n    if (!this.allowDisabledSelection && !cell.enabled) {\n      return;\n    }\n    this.selectedValueChange.emit(cell.value);\n  }\n\n  onWeekClicked(week: number) {\n    this.selectedWeekChange.emit(week);\n  }\n\n  _emitActiveDateChange(cell: SbbCalendarCell, event: FocusEvent): void {\n    if (cell.enabled) {\n      this.activeDateChange.emit(cell.value);\n    }\n  }\n\n  /** The number of blank cells to put at the beginning for the first row. */\n  get firstRowOffset(): number {\n    return this.rows && this.rows.length && this.rows[0].length\n      ? this.numCols - this.rows[0].length\n      : 0;\n  }\n\n  isActiveCell(rowIndex: number, colIndex: number): boolean {\n    let cellNumber = rowIndex * this.numCols + colIndex;\n\n    // Account for the fact that the first row may not have as many cells.\n    if (rowIndex) {\n      cellNumber -= this.firstRowOffset;\n    }\n\n    return cellNumber === this.activeCell;\n  }\n\n  /**\n   * Focuses the active cell after the microtask queue is empty.\n   *\n   * Adding a 0ms setTimeout seems to fix Voiceover losing focus when pressing PageUp/PageDown\n   * (issue angular/components#24330).\n   *\n   * Determined a 0ms by gradually increasing duration from 0 and testing two use cases with screen\n   * reader enabled:\n   *\n   * 1. Pressing PageUp/PageDown repeatedly with pausing between each key press.\n   * 2. Pressing and holding the PageDown key with repeated keys enabled.\n   *\n   * Test 1 worked roughly 95-99% of the time with 0ms and got a little bit better as the duration\n   * increased. Test 2 got slightly better until the duration was long enough to interfere with\n   * repeated keys. If the repeated key speed was faster than the timeout duration, then pressing\n   * and holding pagedown caused the entire page to scroll.\n   *\n   * Since repeated key speed can verify across machines, determined that any duration could\n   * potentially interfere with repeated keys. 0ms would be best because it almost entirely\n   * eliminates the focus being lost in Voiceover without causing unintended side effects.\n   * Adding delay also complicates writing tests.\n   */\n  focusActiveCell() {\n    afterNextRender(\n      () => {\n        setTimeout(() => {\n          const activeCell: HTMLElement | null = this._elementRef.nativeElement.querySelector(\n            '.sbb-calendar-body-active',\n          );\n\n          if (activeCell) {\n            activeCell.focus();\n          }\n        });\n      },\n      {\n        injector: this._injector,\n      },\n    );\n  }\n\n  /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n  _scheduleFocusActiveCellAfterViewChecked() {\n    this._focusActiveCellAfterViewChecked = true;\n  }\n}\n","<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n  <tr role=\"row\">\n    @if (weeksInMonth.length) {\n      <td role=\"gridcell\" [style.width.%]=\"100 / (numCols + 1)\">\n        @switch (isWeekSelectable) {\n          @case (true) {\n            <button\n              type=\"button\"\n              class=\"sbb-calendar-body-cell sbb-button-reset-frameless sbb-calendar-body-week\"\n              (click)=\"onWeekClicked(weeksInMonth[rowIndex])\"\n            >\n              <span class=\"sbb-calendar-body-cell-content\">{{ weeksInMonth[rowIndex] }}</span>\n            </button>\n          }\n          @case (false) {\n            <div class=\"sbb-calendar-body-cell sbb-calendar-body-week\">\n              <span class=\"sbb-calendar-body-cell-content\">{{ weeksInMonth[rowIndex] }}</span>\n            </div>\n          }\n        }\n      </td>\n    }\n    <!--\n    This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n    because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n    table cells is maintained by setting the top and bottom padding as a percentage of the width\n    (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n    -->\n    @if (rowIndex === 0 && firstRowOffset) {\n      <td class=\"sbb-calendar-body-label\" [attr.colspan]=\"firstRowOffset\"></td>\n    }\n    <!--\n    Each gridcell in the calendar contains a button, which signals to assistive technology that the\n    cell is interactable, as well as the selection state via `aria-pressed`. See angular/components#23476 for\n    background.\n    -->\n    @for (item of row; track item.id; let colIndex = $index) {\n      <td\n        role=\"gridcell\"\n        class=\"sbb-calendar-body-cell-container\"\n        [class.sbb-first-cell]=\"colIndex === 0\"\n        [style.width.%]=\"100 / (numCols + (weeksInMonth.length ? 1 : 0))\"\n        [attr.data-sbb-row]=\"rowIndex\"\n        [attr.data-sbb-col]=\"colIndex\"\n      >\n        <button\n          type=\"button\"\n          class=\"sbb-calendar-body-cell sbb-button-reset-frameless\"\n          [class]=\"item.cssClasses\"\n          [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n          [class.sbb-calendar-body-disabled]=\"!item.enabled\"\n          [class.sbb-calendar-body-active]=\"isActiveCell(rowIndex, colIndex)\"\n          [class.sbb-calendar-body-range-background]=\"item.rangeBackground === 'range'\"\n          [class.sbb-calendar-body-range-background-offset-start]=\"\n            item.rangeBackground !== null && rowIndex === 0 && firstRowOffset && colIndex === 0\n          \"\n          [class.sbb-calendar-body-selected-begin]=\"item.rangeBackground === 'begin'\"\n          [class.sbb-calendar-body-selected-end]=\"item.rangeBackground === 'end'\"\n          [class.sbb-calendar-body-selected]=\"selectedValue === item.value\"\n          [class.sbb-calendar-body-today]=\"todayValue === item.value\"\n          [attr.aria-label]=\"item.ariaLabel\"\n          [attr.aria-disabled]=\"!item.enabled || null\"\n          [attr.aria-pressed]=\"selectedValue === item.value\"\n          [attr.aria-current]=\"todayValue === item.value ? 'date' : null\"\n          (click)=\"cellClicked(item)\"\n          (focus)=\"_emitActiveDateChange(item, $event)\"\n        >\n          <span class=\"sbb-calendar-body-cell-content\">{{ item.displayValue }}</span>\n        </button>\n      </td>\n    }\n  </tr>\n}\n","export function createMissingDateImplError(provider: string) {\n  return Error(`SbbDatepicker: No provider found for ${provider}.`);\n}\n","export class SbbDateRange<D> {\n  constructor(\n    readonly start: D,\n    readonly end: D,\n  ) {}\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const SBB_DATEPICKER = new InjectionToken<any>('SBB_DATEPICKER');\n","import {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  LOCALE_ID,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbDateAdapter, SbbDateFormats, SBB_DATE_FORMATS, TypeRef } from '@sbb-esta/angular/core';\n\nimport {\n  SbbCalendarBody,\n  SbbCalendarCell,\n  SbbCalendarCellClassFunction,\n} from '../calendar-body/calendar-body';\nimport { SbbDateRange } from '../date-range';\nimport { createMissingDateImplError } from '../datepicker-errors';\nimport { SBB_DATEPICKER } from '../datepicker-token';\nimport type { SbbDatepicker } from '../datepicker/datepicker';\n\nconst DAYS_PER_WEEK = 7;\n\n@Component({\n  selector: 'sbb-month-view',\n  templateUrl: './month-view.html',\n  exportAs: 'sbbMonthView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SbbCalendarBody],\n})\nexport class SbbMonthView<D> implements AfterContentInit {\n  _dateAdapter: SbbDateAdapter<D> = inject<SbbDateAdapter<D>>(SbbDateAdapter, {\n    optional: true,\n  })!;\n  readonly locale = inject(LOCALE_ID);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _dateFormats = inject<SbbDateFormats>(SBB_DATE_FORMATS, { optional: true })!;\n\n  /** The date to display in this month view (everything other than the month and year is ignored). */\n  @Input()\n  get activeDate(): D {\n    return this._activeDate;\n  }\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    const validDate =\n      this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n    if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n      this.init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): D | null {\n    return this._selected;\n  }\n  set selected(value: D | null) {\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n    this.selectedDate = this._getDateInCurrentMonth(this._selected);\n  }\n  private _selected: D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null {\n    return this._minDate;\n  }\n  set minDate(value: D | null) {\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null {\n    return this._maxDate;\n  }\n  set maxDate(value: D | null) {\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custDom CSS classes to dates. */\n  @Input()\n  get dateClass(): SbbCalendarCellClassFunction<D> | null {\n    return this._dateClass;\n  }\n  set dateClass(dateClass: SbbCalendarCellClassFunction<D> | null) {\n    this._dateClass = dateClass;\n    this._updateDateClasses();\n  }\n  _dateClass: SbbCalendarCellClassFunction<D> | null;\n\n  /** Whether to display the week number. */\n  @Input() showWeekNumbers: boolean = false;\n\n  /** Whether the week can be selected. */\n  @Input() isWeekSelectable: boolean = false;\n\n  /** Whether the weekday can be selected. */\n  @Input() isWeekdaySelectable: boolean = false;\n\n  /** Emits when a new date is selected. */\n  @Output()\n  readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n  /** Emits when a new week is selected. */\n  @Output()\n  readonly selectedWeekChange: EventEmitter<{\n    week: number;\n    rangeInMonth: SbbDateRange<D>;\n  } | null> = new EventEmitter();\n\n  /** Emits when a weekday is selected. */\n  @Output() readonly selectedWeekdayChange: EventEmitter<number> = new EventEmitter<number>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly userSelection: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(SbbCalendarBody, { static: true }) sbbCalendarBody: SbbCalendarBody;\n\n  /** The label for this month (e.g. \"January 2017\"). */\n  monthLabel: string;\n\n  /** Grid of calendar cells representing the dates of the month. */\n  weeks: SbbCalendarCell[][];\n\n  /** Week of year for each row. */\n  weeksInMonth: number[] = [];\n\n  /** The number of blank cells in the first row before the 1st of the month. */\n  firstWeekOffset: number;\n\n  /**\n   * The date of the month that the currently selected Date falls on.\n   * Null if the currently selected Date is in another month.\n   */\n  selectedDate: number | null;\n\n  /**\n   * The weekday that is currently selected.\n   */\n  selectedWeekday: number | null;\n\n  /** The date of the month that today falls on. Null if today is in another month. */\n  todayDate: number | null;\n\n  /** The names of the weekdays. */\n  weekdays: { long: string; narrow: string; index: number }[];\n\n  /** Currently active date range. */\n  @Input()\n  get dateRange() {\n    return this._dateRange;\n  }\n  set dateRange(dateRange) {\n    this._dateRange = dateRange;\n    this._updateRangeBackground();\n  }\n  private _dateRange: SbbDateRange<D> | null = null;\n\n  private _datePicker: SbbDatepicker<D>;\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const datepicker = inject<TypeRef<SbbDatepicker<D>>>(SBB_DATEPICKER, { optional: true })!;\n\n    if (!this._dateAdapter) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('SBB_DATE_FORMATS');\n    }\n\n    this._datePicker = datepicker;\n\n    const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n    const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n    const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n\n    // Rotate the labels for days of the week based on the configured first day of the week.\n    const weekdays = longWeekdays.map((long, i) => {\n      return { long, narrow: narrowWeekdays[i], index: i };\n    });\n    this.weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this.init();\n  }\n\n  /** Handles when a new date is selected. */\n  dateSelected(date: number) {\n    if (this.selectedDate !== date) {\n      const selectedDate = this._getDateFromDayOfMonth(date);\n\n      this.selectedChange.emit(selectedDate);\n    }\n\n    this.userSelection.emit();\n  }\n\n  /** Handles week selection */\n  weekSelected(week: number) {\n    const weekIndex = this.weeksInMonth.findIndex((w) => w === week);\n    if (weekIndex < 0 || weekIndex >= this.weeks.length) {\n      return;\n    }\n\n    const selectedWeek = this.weeks[weekIndex];\n    this.selectedWeekChange.emit({\n      week,\n      rangeInMonth: new SbbDateRange(\n        this._getDateFromDayOfMonth(selectedWeek[0].value),\n        this._getDateFromDayOfMonth(selectedWeek[selectedWeek.length - 1].value),\n      ),\n    });\n  }\n\n  /** Handles weekday selection. */\n  weekdaySelected(weekday: number) {\n    if (this.selectedWeekday !== weekday) {\n      this.selectedWeekdayChange.emit(weekday);\n    }\n  }\n\n  /**\n   * Takes the index of a calendar body cell wrapped in an event as argument. For the date that\n   * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n   * that date.\n   *\n   * This function is used to match each component's model of the active date with the calendar\n   * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n   * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n   * updated value asynchronously via the `activeCell` Input.\n   */\n  _updateActiveDate(month: number) {\n    const oldActiveDate = this._activeDate;\n    this.activeDate = this._getDateFromDayOfMonth(month);\n\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this._activeDate);\n    }\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in month view. */\n  handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    const oldActiveDate = this._activeDate;\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarDays(\n          this._activeDate,\n          1 - this._dateAdapter.getDate(this._activeDate),\n        );\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarDays(\n          this._activeDate,\n          this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n            this._dateAdapter.getDate(this._activeDate),\n        );\n        break;\n      case PAGE_UP:\n        this.activeDate = event.altKey\n          ? this._dateAdapter.addCalendarYears(this._activeDate, -1)\n          : this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n        break;\n      case PAGE_DOWN:\n        this.activeDate = event.altKey\n          ? this._dateAdapter.addCalendarYears(this._activeDate, 1)\n          : this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n        break;\n      case ENTER:\n        if (!this.dateFilter || this.dateFilter(this._activeDate)) {\n          this.dateSelected(this._dateAdapter.getDate(this._activeDate));\n          this.userSelection.emit();\n          // Prevent unexpected default actions such as form submission.\n          event.preventDefault();\n        }\n        return;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n      this._focusActiveCellAfterViewChecked();\n    }\n\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Initializes this month view. */\n  init() {\n    const datepicker = this._datePicker;\n    if (\n      datepicker &&\n      datepicker.connected &&\n      datepicker.datepickerInput.value &&\n      datepicker.connected.datepickerInput.value\n    ) {\n      this._dateRange = new SbbDateRange(\n        datepicker.datepickerInput.value,\n        datepicker.connected.datepickerInput.value,\n      );\n    } else if (\n      datepicker &&\n      datepicker.main &&\n      datepicker.datepickerInput.value &&\n      datepicker.main.datepickerInput.value\n    ) {\n      this._dateRange = new SbbDateRange(\n        datepicker.main.datepickerInput.value,\n        datepicker.datepickerInput.value,\n      );\n    }\n\n    this.selectedDate = this._getDateInCurrentMonth(this.selected);\n    this.todayDate = this._getDateInCurrentMonth(this._dateAdapter.today());\n    this.monthLabel = this._dateAdapter\n      .getMonthNames('short')\n      [this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();\n\n    const firstOfMonth = this._dateAdapter.createDate(\n      this._dateAdapter.getYear(this.activeDate),\n      this._dateAdapter.getMonth(this.activeDate),\n      1,\n    );\n    this.firstWeekOffset =\n      (DAYS_PER_WEEK +\n        this._dateAdapter.getDayOfWeek(firstOfMonth) -\n        this._dateAdapter.getFirstDayOfWeek()) %\n      DAYS_PER_WEEK;\n\n    this._createWeekCells();\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  focusActiveCell() {\n    this.sbbCalendarBody.focusActiveCell();\n  }\n\n  /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n  _focusActiveCellAfterViewChecked() {\n    this.sbbCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n  }\n\n  /**\n   * Takes a day of the month and returns a new date in the same month and year as the currently\n   *  active date. The returned date will have the same day of the month as the argument date.\n   */\n  private _getDateFromDayOfMonth(dayOfMonth: number): D {\n    return this._dateAdapter.createDate(\n      this._dateAdapter.getYear(this.activeDate),\n      this._dateAdapter.getMonth(this.activeDate),\n      dayOfMonth,\n    );\n  }\n\n  /** Creates MatCalendarCells for the dates in this month. */\n  private _createWeekCells() {\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n    const dateNames = this._dateAdapter.getDateNames();\n    const month = this._dateAdapter.getMonth(this.activeDate);\n    const year = this._dateAdapter.getYear(this.activeDate);\n    this.weeks = [[]];\n    this.weeksInMonth = [];\n\n    // The angular datepipe does not take the firstDayOfWeek into account.\n    // Issue: https://github.com/angular/angular/issues/39606\n    // Stackblitz: https://stackblitz.com/edit/angular-ivy-k6rjgv\n    // As a consequence, if the firstDayOfWeek is 1 (Monday) and the first day of month\n    // is a Sunday (0) the calculation of week numbers does not work as expected.\n    // The following workaround fixes this issue.\n    const isFirstDayASunday =\n      this._dateAdapter.getFirstDayOfWeek() === 1 && this.firstWeekOffset === 6;\n\n    for (let i = 0, cell = this.firstWeekOffset; i < daysInMonth; i++, cell++) {\n      if (cell === DAYS_PER_WEEK) {\n        this.weeks.push([]);\n        cell = 0;\n      }\n      const date = this._dateAdapter.createDate(year, month, i + 1);\n      if (i === 0 || cell === 0) {\n        if (i === 0 && isFirstDayASunday) {\n          const prevDate = this._dateAdapter.addCalendarDays(date, -1);\n          this.weeksInMonth.push(parseInt(this._dateAdapter.format(prevDate, 'w'), 10));\n        } else {\n          this.weeksInMonth.push(parseInt(this._dateAdapter.format(date, 'w'), 10));\n        }\n      }\n      const enabled = this._shouldEnableDate(date);\n      const ariaLabel = this._dateAdapter.format(date, this._dateFormats.dateA11yLabel);\n      const rangeBackground = this._shouldApplyRangeBackground(date);\n      const cellClasses = this._dateClass ? this._dateClass(date) : undefined;\n\n      this.weeks[this.weeks.length - 1].push(\n        new SbbCalendarCell(i + 1, dateNames[i], ariaLabel, enabled, rangeBackground, cellClasses),\n      );\n    }\n  }\n\n  private _updateDateClasses() {\n    let isUpdated = false;\n    const year = this._dateAdapter.getYear(this.activeDate);\n    const month = this._dateAdapter.getMonth(this.activeDate);\n    if (this.weeks) {\n      for (let i = 0; i < this.weeks.length; i++) {\n        for (let j = 0; j < this.weeks[i].length; j++) {\n          const date = this._dateAdapter.createDate(year, month, this.weeks[i][j].value);\n          const cellClasses = this._dateClass ? this._dateClass(date) : undefined;\n          isUpdated = isUpdated || this.weeks[i][j].cssClasses !== cellClasses;\n          this.weeks[i][j].cssClasses = cellClasses || {};\n        }\n      }\n\n      if (isUpdated) {\n        this.weeks = [...this.weeks];\n      }\n    }\n  }\n\n  private _updateRangeBackground() {\n    let isUpdated = false;\n    if (this.weeks) {\n      const year = this._dateAdapter.getYear(this.activeDate);\n      const month = this._dateAdapter.getMonth(this.activeDate);\n      for (let i = 0; i < this.weeks.length; i++) {\n        for (let j = 0; j < this.weeks[i].length; j++) {\n          const date = this._dateAdapter.createDate(year, month, this.weeks[i][j].value);\n          const rangeBackground = this._shouldApplyRangeBackground(date);\n          isUpdated = isUpdated || this.weeks[i][j].rangeBackground !== rangeBackground;\n          this.weeks[i][j].rangeBackground = rangeBackground;\n        }\n      }\n      if (isUpdated) {\n        this.weeks = [...this.weeks];\n      }\n    }\n  }\n\n  private _shouldApplyRangeBackground(date: D): string | null {\n    if (\n      this.dateRange &&\n      this.dateRange.start &&\n      this.dateRange.end &&\n      !this._dateAdapter.sameDate(this.dateRange.start, this.dateRange.end)\n    ) {\n      if (\n        this._dateAdapter.compareDate(date, this.dateRange.start) > 0 &&\n        this._dateAdapter.compareDate(date, this.dateRange.end) < 0\n      ) {\n        return 'range';\n      }\n      return this._isRangeLimit(date);\n    }\n    return null;\n  }\n\n  private _isRangeLimit(date: D) {\n    if (this._dateAdapter.compareDate(date, this.dateRange!.start) === 0) {\n      return 'begin';\n    } else if (this._dateAdapter.compareDate(date, this.dateRange!.end) === 0) {\n      return 'end';\n    } else {\n      return null;\n    }\n  }\n\n  /** Date filter for the month */\n  private _shouldEnableDate(date: D): boolean {\n    return (\n      !!date &&\n      (!this.dateFilter || this.dateFilter(date)) &&\n      (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n      (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0)\n    );\n  }\n\n  /**\n   * Gets the date in this month that the given Date falls on.\n   * Returns null if the given Date is in another month.\n   */\n  private _getDateInCurrentMonth(date: D | null): number | null {\n    return date && this._hasSameMonthAndYear(date, this.activeDate)\n      ? this._dateAdapter.getDate(date)\n      : null;\n  }\n\n  /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n  private _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n    return !!(\n      d1 &&\n      d2 &&\n      this._dateAdapter.getMonth(d1) === this._dateAdapter.getMonth(d2) &&\n      this._dateAdapter.getYear(d1) === this._dateAdapter.getYear(d2)\n    );\n  }\n\n  /**\n   * @param obj The object to check.\n   * @returns The given object if it is both a date instance and valid, otherwise null.\n   */\n  private _getValidDateOrNull(obj: any): D | null {\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\n  }\n}\n","<table class=\"sbb-calendar-table\">\n  <thead class=\"sbb-calendar-table-header\">\n    <tr>\n      @if (showWeekNumbers) {\n        <th>#</th>\n      }\n      @for (day of weekdays; track day.index) {\n        <th>\n          @switch (isWeekdaySelectable) {\n            @case (true) {\n              <button\n                type=\"button\"\n                tabindex=\"0\"\n                class=\"sbb-button-reset-frameless sbb-calendar-body-weekday\"\n                [attr.aria-label]=\"day.long\"\n                (click)=\"weekdaySelected(day.index)\"\n              >\n                {{ day.narrow }}\n              </button>\n            }\n            @case (false) {\n              <span class=\"cdk-visually-hidden\">{{ day.long }}</span>\n              <span aria-hidden=\"true\">{{ day.narrow }}</span>\n            }\n          }\n        </th>\n      }\n    </tr>\n    <tr>\n      <th class=\"sbb-calendar-table-header-divider\" colspan=\"7\" aria-hidden=\"true\"></th>\n    </tr>\n  </thead>\n  <tbody\n    sbb-calendar-body\n    label=\"{{ monthLabel }}\"\n    [rows]=\"weeks\"\n    [weeksInMonth]=\"showWeekNumbers ? weeksInMonth : []\"\n    [todayValue]=\"todayDate!\"\n    [selectedValue]=\"selectedDate!\"\n    [labelMinRequiredCells]=\"3\"\n    [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\n    [isWeekSelectable]=\"isWeekSelectable\"\n    [isWeekdaySelectable]=\"isWeekdaySelectable\"\n    (selectedValueChange)=\"dateSelected($event)\"\n    (selectedWeekChange)=\"weekSelected($event)\"\n    (activeDateChange)=\"_updateActiveDate($event)\"\n    (keydown)=\"handleCalendarBodyKeydown($event)\"\n  ></tbody>\n</table>\n","// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"@angular/localize/init\" />\n\nimport { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { CdkPortalOutlet, ComponentPortal, ComponentType, Portal } from '@angular/cdk/portal';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbDateAdapter, SbbDateFormats, SBB_DATE_FORMATS } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\nimport { isObservable, Observable, of, Subject } from 'rxjs';\n\nimport { SbbCalendarCellClassFunction } from '../calendar-body/calendar-body';\nimport { SbbDateRange } from '../date-range';\nimport { createMissingDateImplError } from '../datepicker-errors';\nimport { SbbMonthView } from '../month-view/month-view';\n\n@Component({\n  selector: 'sbb-calendar-header',\n  exportAs: 'sbbCalendarHeader',\n  templateUrl: './calendar-header.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-calendar-header sbb-icon-scaled',\n  },\n  imports: [SbbIconModule],\n})\nexport class SbbCalendarHeader<D> {\n  private _dateAdapter = inject<SbbDateAdapter<D>>(SbbDateAdapter, { optional: true })!;\n\n  _labelSwitchToPreviousMonth: string = $localize`:Button label to switch to the previous month@@sbbDatepickerSwitchToPreviousMonth:Change to the previous month`;\n\n  _labelSwitchToNextMonth: string = $localize`:Button label to switch to the next month@@sbbDatepickerSwitchToNextMonth:Change to the next month`;\n\n  _labelSwitchToPreviousYear: string = $localize`:Button label to switch to the previous year@@sbbDatepickerSwitchToPreviousYear:Change to the previous year`;\n\n  _labelSwitchToNextYear: string = $localize`:Button label to switch to the next year@@sbbDatepickerSwitchToNextYear:Change to the next year`;\n\n  public calendar: SbbCalendar<D> = inject(SbbCalendar);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const changeDetectorRef = inject(ChangeDetectorRef);\n    this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n  }\n\n  /** The label for the current calendar view. */\n  get monthText(): string {\n    return this._dateAdapter.getMonthName(this.calendar.activeDate);\n  }\n\n  /** The label for the current calendar view. */\n  get yearText(): string {\n    return this._dateAdapter.getYearName(this.calendar.activeDate);\n  }\n\n  /** Handles user clicks on the previous button. */\n  previousMonthClicked(): void {\n    const newActiveDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1);\n    this._assignActiveDate(newActiveDate);\n  }\n\n  /** Handles user clicks on the next button. */\n  nextMonthClicked(): void {\n    const newActiveDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1);\n    this._assignActiveDate(newActiveDate);\n  }\n\n  /** Whether the previous period button is enabled. */\n  previousMonthEnabled(): boolean {\n    return (\n      !this.calendar.minDate ||\n      !this._isSameMonthView(this.calendar.activeDate, this.calendar.minDate)\n    );\n  }\n\n  /** Whether the next period button is enabled. */\n  nextMonthEnabled(): boolean {\n    return (\n      !this.calendar.maxDate ||\n      !this._isSameMonthView(this.calendar.activeDate, this.calendar.maxDate)\n    );\n  }\n\n  /** Whether the two dates represent the same month. */\n  private _isSameMonthView(date1: D, date2: D): boolean {\n    return (\n      this._dateAdapter.getYear(date1) === this._dateAdapter.getYear(date2) &&\n      this._dateAdapter.getMonth(date1) === this._dateAdapter.getMonth(date2)\n    );\n  }\n\n  /** Handles user clicks on the previous button. */\n  previousYearClicked(): void {\n    const newActiveDate = this._dateAdapter.addCalendarYears(this.calendar.activeDate, -1);\n    this._assignActiveDate(newActiveDate);\n  }\n\n  /** Handles user clicks on the next button. */\n  nextYearClicked(): void {\n    const newActiveDate = this._dateAdapter.addCalendarYears(this.calendar.activeDate, 1);\n    this._assignActiveDate(newActiveDate);\n  }\n\n  /** Whether the previous period button is enabled. */\n  previousYearEnabled(): boolean {\n    return (\n      !this.calendar.minDate ||\n      !this._isSameYearView(this.calendar.activeDate, this.calendar.minDate)\n    );\n  }\n\n  /** Whether the next period button is enabled. */\n  nextYearEnabled(): boolean {\n    return (\n      !this.calendar.maxDate ||\n      !this._isSameYearView(this.calendar.activeDate, this.calendar.maxDate)\n    );\n  }\n\n  /** Whether the two dates represent the same month. */\n  private _isSameYearView(date1: D, date2: D): boolean {\n    return this._dateAdapter.getYear(date1) === this._dateAdapter.getYear(date2);\n  }\n\n  private _assignActiveDate(date: D) {\n    if (this.calendar.minDate && this._dateAdapter.compareDate(this.calendar.minDate, date) > 0) {\n      this.calendar.activeDate = this.calendar.minDate;\n    } else if (\n      this.calendar.maxDate &&\n      this._dateAdapter.compareDate(this.calendar.maxDate, date) < 0\n    ) {\n      this.calendar.activeDate = this.calendar.maxDate;\n    } else {\n      this.calendar.activeDate = date;\n    }\n  }\n}\n\n/**\n * A calendar that is used as part of the datepicker.\n */\n@Component({\n  selector: 'sbb-calendar',\n  templateUrl: 'calendar.html',\n  styleUrls: ['calendar.css'],\n  exportAs: 'sbbCalendar',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-calendar',\n  },\n  imports: [CdkPortalOutlet, CdkMonitorFocus, SbbMonthView, AsyncPipe],\n})\nexport class SbbCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges {\n  private _dateAdapter = inject<SbbDateAdapter<D>>(SbbDateAdapter, { optional: true })!;\n  private _dateFormats = inject<SbbDateFormats>(SBB_DATE_FORMATS, { optional: true })!;\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n\n  /** An input indicating the type of the header component, if set. */\n  @Input() headerComponent: ComponentType<any>;\n\n  /** A portal containing the header component type for this calendar. */\n  calendarHeaderPortal: Portal<any>;\n\n  /**\n   * Used for scheduling that focus should be moved to the active cell on the next tick.\n   * We need to schedule it, rather than do it immediately, because we have to wait\n   * for Angular to re-evaluate the view children.\n   */\n  private _moveFocusOnNextTick = false;\n\n  /** A date representing the period (month or year) to start the calendar in. */\n  @Input()\n  get startAt(): D | null {\n    return this._startAt;\n  }\n  set startAt(value: D | null) {\n    this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _startAt: D | null;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): D | null {\n    return this._selected;\n  }\n  set selected(value: D | null) {\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _selected: D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null {\n    return this._minDate;\n  }\n  set minDate(value: D | null) {\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null {\n    return this._maxDate;\n  }\n  set maxDate(value: D | null) {\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** Whether to display the week number. */\n  @Input() showWeekNumbers: boolean = false;\n\n  /** Currently active date range. */\n  @Input() dateRange: SbbDateRange<D> | null = null;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function or observable of function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: SbbCalendarCellClassFunction<D> | Observable<SbbCalendarCellClassFunction<D>>;\n\n  /** Observable of `dateClass` function. */\n  _dateClassObservable: Observable<SbbCalendarCellClassFunction<D>>;\n\n  /** Emits when the currently selected date changes. */\n  @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits when the currently selected week changes. */\n  @Output()\n  readonly selectedWeekChange: EventEmitter<{\n    week: number;\n    start: D;\n    end: D;\n  } | null> = new EventEmitter();\n\n  /** Emits when the currently selected weekday changes. */\n  @Output() readonly selectedWeekdayChange: EventEmitter<number> = new EventEmitter<number>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly userSelection: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Reference to the current month view component. */\n  @ViewChild(SbbMonthView, { static: true }) monthView: SbbMonthView<D>;\n\n  /**\n   * The current active date. This determines which time period is shown and which date is\n   * highlighted when using keyboard navigation.\n   */\n  get activeDate(): D {\n    return this._clampedActiveDate;\n  }\n  set activeDate(value: D) {\n    this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n    this.stateChanges.next();\n  }\n  private _clampedActiveDate: D;\n\n  /** Emits whenever there is a state change that the header may need to respond to. */\n  stateChanges: Subject<void> = new Subject<void>();\n\n  constructor(...args: unknown[]);\n  constructor() {\n    if (!this._dateAdapter) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('SBB_DATE_FORMATS');\n    }\n  }\n\n  ngAfterContentInit() {\n    this.calendarHeaderPortal = new ComponentPortal(this.headerComponent || SbbCalendarHeader);\n    this.activeDate = this.startAt || this._dateAdapter.today();\n  }\n\n  ngAfterViewChecked() {\n    if (this._moveFocusOnNextTick) {\n      this._moveFocusOnNextTick = false;\n      this.focusActiveCell();\n    }\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    // Ignore date changes that are at a different time on the same day. This fixes issues where\n    // the calendar re-renders when there is no meaningful change to [minDate] or [maxDate]\n    // (angular/components#24435).\n    const minDateChange: SimpleChange | undefined =\n      changes['minDate'] &&\n      !this._dateAdapter.sameDate(changes['minDate'].previousValue, changes['minDate'].currentValue)\n        ? changes['minDate']\n        : undefined;\n    const maxDateChange: SimpleChange | undefined =\n      changes['maxDate'] &&\n      !this._dateAdapter.sameDate(changes['maxDate'].previousValue, changes['maxDate'].currentValue)\n        ? changes['maxDate']\n        : undefined;\n\n    const changeRequiringRerender = minDateChange || maxDateChange || changes['dateFilter'];\n\n    if (changeRequiringRerender && !changeRequiringRerender.firstChange) {\n      const view = this._getCurrentViewComponent();\n\n      if (view) {\n        // Schedule focus to be moved to the active date since re-rendering\n        // can blur the active cell.\n        this._moveFocusOnNextTick = true;\n\n        // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n        // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n        this._changeDetectorRef.detectChanges();\n        view.init();\n      }\n    }\n\n    if (\n      changes['dateClass'] &&\n      changes['dateClass'].previousValue !== changes['dateClass'].currentValue\n    ) {\n      this._dateClassObservable = isObservable(this.dateClass)\n        ? this.dateClass\n        : of(this.dateClass);\n    }\n\n    this.stateChanges.next();\n  }\n\n  focusActiveCell() {\n    this._getCurrentViewComponent().focusActiveCell();\n  }\n\n  /** Handles date selection in the month view. */\n  dateSelected(date: D | null): void {\n    if (date && !this._dateAdapter.sameDate(date, this.selected)) {\n      this.selectedChange.emit(date);\n    }\n  }\n\n  /** Handles week selection in the month view. */\n  weekSelected(week: { week: number; rangeInMonth: SbbDateRange<D> } | null) {\n    this.selectedWeekChange.emit(\n      week && {\n        week: week.week,\n        start: week.rangeInMonth.start,\n        end: week.rangeInMonth.end,\n      },\n    );\n  }\n\n  /** Handles weekday selection in the month view. */\n  weekdaySelected(weekday: number) {\n    this.selectedWeekdayChange.emit(weekday);\n  }\n\n  userSelected(): void {\n    this.userSelection.emit();\n  }\n\n  /**\n   * @param obj The object to check.\n   * @returns The given object if it is both a date instance and valid, otherwise null.\n   */\n  private _getValidDateOrNull(obj: any): D | null {\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\n  }\n\n  /** Returns the component instance that corresponds to the current calendar view. */\n  private _getCurrentViewComponent() {\n    return this.monthView;\n  }\n}\n","<div class=\"sbb-calendar-controls\">\n  <div class=\"sbb-calendar-controls-months\">\n    <button\n      type=\"button\"\n      class=\"sbb-calendar-controls-button sbb-calendar-controls-button-previous\"\n      [disabled]=\"!previousMonthEnabled()\"\n      (click)=\"previousMonthClicked()\"\n      [attr.aria-label]=\"_labelSwitchToPreviousMonth\"\n    >\n      <sbb-icon svgIcon=\"chevron-small-left-small\"></sbb-icon>\n    </button>\n    <span class=\"sbb-calendar-controls-label\" [attr.aria-label]=\"monthText\" aria-live=\"polite\">{{\n      monthText\n    }}</span>\n    <button\n      type=\"button\"\n      class=\"sbb-calendar-controls-button sbb-calendar-controls-button-next\"\n      [disabled]=\"!nextMonthEnabled()\"\n      (click)=\"nextMonthClicked()\"\n      [attr.aria-label]=\"_labelSwitchToNextMonth\"\n    >\n      <sbb-icon svgIcon=\"chevron-small-right-small\"></sbb-icon>\n    </button>\n  </div>\n  <div class=\"sbb-calendar-controls-years\">\n    <button\n      type=\"button\"\n      class=\"sbb-calendar-controls-button sbb-calendar-controls-button-previous\"\n      [disabled]=\"!previousYearEnabled()\"\n      (click)=\"previousYearClicked()\"\n      [attr.aria-label]=\"_labelSwitchToPreviousYear\"\n    >\n      <sbb-icon svgIcon=\"chevron-small-left-small\"></sbb-icon>\n    </button>\n    <span class=\"sbb-calendar-controls-label\" [attr.aria-label]=\"yearText\" aria-live=\"polite\">{{\n      yearText\n    }}</span>\n    <button\n      type=\"button\"\n      class=\"sbb-calendar-controls-button sbb-calendar-controls-button-next\"\n      [disabled]=\"!nextYearEnabled()\"\n      (click)=\"nextYearClicked()\"\n      [attr.aria-label]=\"_labelSwitchToNextYear\"\n    >\n      <sbb-icon svgIcon=\"chevron-small-right-small\"></sbb-icon>\n    </button>\n  </div>\n</div>\n","<ng-template [cdkPortalOutlet]=\"calendarHeaderPortal\"></ng-template>\n\n<div class=\"sbb-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n  <sbb-month-view\n    [(activeDate)]=\"activeDate\"\n    [selected]=\"selected\"\n    [dateFilter]=\"dateFilter\"\n    [dateRange]=\"dateRange\"\n    [dateClass]=\"_dateClassObservable | async\"\n    [showWeekNumbers]=\"showWeekNumbers\"\n    [maxDate]=\"maxDate\"\n    [minDate]=\"minDate\"\n    [isWeekSelectable]=\"selectedWeekChange.observers.length > 0\"\n    [isWeekdaySelectable]=\"selectedWeekdayChange.observers.length > 0\"\n    (selectedChange)=\"dateSelected($event)\"\n    (selectedWeekChange)=\"weekSelected($event)\"\n    (selectedWeekdayChange)=\"weekdaySelected($event)\"\n    (userSelection)=\"userSelected()\"\n  >\n  </sbb-month-view>\n</div>\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\n\nimport { SbbCalendar } from '../calendar/calendar';\nimport { SbbDatepicker } from '../datepicker/datepicker';\n\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * SbbCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n  selector: 'sbb-datepicker-content',\n  templateUrl: 'datepicker-content.html',\n  styleUrls: ['datepicker-content.css'],\n  exportAs: 'sbbDatepickerContent',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-datepicker-content',\n  },\n  imports: [SbbCalendar, CdkTrapFocus],\n})\nexport class SbbDatepickerContent<D> implements AfterViewInit {\n  /** Reference to the internal calendar component. */\n  @ViewChild(SbbCalendar, { static: true }) calendar: SbbCalendar<D>;\n\n  /** Reference to the datepicker that created the overlay. */\n  datepicker: SbbDatepicker<D>;\n\n  /** Whether the datepicker is above or below the input. */\n  isAbove: boolean;\n\n  /** Id of the label for the `role=\"dialog\"` element. */\n  _dialogLabelId: string | null;\n\n  ngAfterViewInit() {\n    this.calendar.focusActiveCell();\n  }\n}\n","<sbb-calendar\n  cdkTrapFocus\n  role=\"dialog\"\n  [attr.aria-modal]=\"true\"\n  [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n  class=\"sbb-datepicker-content-container\"\n  [id]=\"datepicker.id\"\n  [class]=\"datepicker.panelClass\"\n  [startAt]=\"datepicker.startAt\"\n  [minDate]=\"datepicker.minDate\"\n  [maxDate]=\"datepicker.maxDate\"\n  [dateFilter]=\"datepicker.dateFilter\"\n  [headerComponent]=\"datepicker.calendarHeaderComponent\"\n  [selected]=\"datepicker.selected\"\n  (selectedChange)=\"datepicker.select($event)\"\n  (userSelection)=\"datepicker.close()\"\n>\n</sbb-calendar>\n","// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"@angular/localize/init\" />\n\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  HostAttributeToken,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\nimport { merge, Observable, of, Subscription } from 'rxjs';\n\nimport { SBB_DATEPICKER } from '../datepicker-token';\nimport type { SbbDatepicker } from '../datepicker/datepicker';\n\n@Component({\n  selector: 'sbb-datepicker-toggle',\n  templateUrl: './datepicker-toggle.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-datepicker-toggle',\n    '[class.sbb-datepicker-toggle-active]': 'this._datepicker && this._datepicker.opened',\n    '[attr.tabindex]': 'null',\n  },\n  imports: [SbbIconModule],\n})\nexport class SbbDatepickerToggle<D> implements OnDestroy, OnChanges, AfterContentInit {\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  _datepicker: SbbDatepicker<D> = inject<SbbDatepicker<D>>(SBB_DATEPICKER);\n  _labelShowCalendar: string = $localize`:Open calendar@@sbbDatepickerOpenCalendar:Show calendar`;\n\n  private _stateChanges = Subscription.EMPTY;\n\n  /** Tabindex for the toggle. */\n  @Input() tabIndex: number | null;\n\n  /** Whether the toggle button is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled === undefined ? this._datepicker.disabled : this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n  }\n  private _disabled?: boolean;\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n    const parsedTabIndex = Number(defaultTabIndex);\n    this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['datepicker']) {\n      this._watchStateChanges();\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.unsubscribe();\n  }\n\n  ngAfterContentInit() {\n    this._watchStateChanges();\n  }\n\n  /** Open datepicker calendar. */\n  open(event: Event): void {\n    if (this._datepicker && !this.disabled) {\n      this._datepicker.open();\n      event.stopPropagation();\n    }\n  }\n\n  private _watchStateChanges() {\n    const datepickerDisabled = this._datepicker ? this._datepicker.disabledChange : of();\n    const inputDisabled =\n      this._datepicker && this._datepicker.datepickerInput\n        ? this._datepicker.datepickerInput.disabledChange\n        : of();\n    const datepickerToggled = this._datepicker\n      ? merge(this._datepicker.openedStream, this._datepicker.closedStream)\n      : of();\n\n    this._stateChanges.unsubscribe();\n    this._stateChanges = merge(\n      datepickerDisabled as Observable<void>,\n      inputDisabled as Observable<void>,\n      datepickerToggled,\n    ).subscribe(() => this._changeDetectorRef.markForCheck());\n  }\n}\n","<button\n  aria-haspopup=\"true\"\n  [attr.aria-label]=\"_labelShowCalendar\"\n  [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n  [disabled]=\"disabled\"\n  (click)=\"open($event)\"\n  type=\"button\"\n  class=\"sbb-datepicker-toggle-button sbb-icon-scaled\"\n>\n  <sbb-icon svgIcon=\"calendar-small\"></sbb-icon>\n</button>\n","// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"@angular/localize/init\" />\n\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  PositionStrategy,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport {\n  afterNextRender,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  LOCALE_ID,\n  OnDestroy,\n  Output,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbDateAdapter } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { bufferCount, filter, mapTo, tap } from 'rxjs/operators';\n\nimport { SbbDateInput } from '../date-input/date-input.directive';\nimport { SbbDatepickerContent } from '../datepicker-content/datepicker-content';\nimport { createMissingDateImplError } from '../datepicker-errors';\nimport { SbbDatepickerToggle } from '../datepicker-toggle/datepicker-toggle';\nimport { SBB_DATEPICKER } from '../datepicker-token';\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const SBB_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'sbb-datepicker-scroll-strategy',\n);\n\n/** @docs-private */\nexport function SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: SBB_DATEPICKER_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n@Component({\n  selector: 'sbb-datepicker',\n  templateUrl: './datepicker.html',\n  styleUrls: ['./datepicker.css'],\n  exportAs: 'sbbDatepicker',\n  providers: [{ provide: SBB_DATEPICKER, useExisting: SbbDatepicker }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'sbb-datepicker',\n    '[class.sbb-datepicker-arrows-enabled]': 'arrowsVisible',\n    '[class.sbb-datepicker-toggle-enabled]': 'toggleVisible',\n    '[class.sbb-datepicker-disabled]': 'disabled',\n  },\n  imports: [SbbIconModule, SbbDatepickerToggle],\n})\nexport class SbbDatepicker<D> implements OnDestroy {\n  private _overlay = inject(Overlay);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _scrollStrategy = inject(SBB_DATEPICKER_SCROLL_STRATEGY);\n  private _dateAdapter = inject<SbbDateAdapter<D>>(SbbDateAdapter, { optional: true })!;\n  readonly locale = inject(LOCALE_ID);\n\n  /** An input indicating the type of the custom header component for the calendar, if set. */\n  @Input() calendarHeaderComponent: ComponentType<any>;\n\n  /** The date to open the calendar to initially. */\n  @Input()\n  get startAt(): D | null {\n    // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n    // selected value is.\n    return this._startAt || (this.datepickerInput ? this.datepickerInput.value : null);\n  }\n  set startAt(value: D | null) {\n    this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _startAt: D | null;\n\n  /** Whether the datepicker pop-up should be disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled === undefined && this.datepickerInput\n      ? this.datepickerInput.disabled\n      : !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    if (value !== this._disabled) {\n      this._disabled = value;\n      this.disabledChange.next(value);\n    }\n  }\n  private _disabled?: boolean;\n\n  /** Classes to be passed to the date picker panel. */\n  @Input() panelClass: string | string[];\n\n  /** Second datepicker to be used in 2 datepickers use case */\n  @Input()\n  set connected(value: SbbDatepicker<D> | null) {\n    if (value !== this._connected && this._connected) {\n      this._connected.main = null;\n    }\n    if (value) {\n      value.main = this;\n    }\n    this._connected = value;\n  }\n  get connected(): SbbDatepicker<D> | null {\n    return this._connected;\n  }\n  private _connected: SbbDatepicker<D> | null;\n\n  main: SbbDatepicker<D> | null;\n\n  /**\n   * Whether arrows are enabled, which allow navigation to the next/previous day.\n   * They also support min and max date limits.\n   * Defaults to false.\n   */\n  @Input({ transform: booleanAttribute }) arrows: boolean;\n\n  /** Whether arrows should be shown. */\n  get arrowsVisible() {\n    return this.arrows && !this.datepickerInput?.readonly;\n  }\n\n  /** Whether the datepicker toggle is enabled. Defaults to true. */\n  @Input({ transform: booleanAttribute }) toggle: boolean = true;\n\n  /** Whether the datepicker toggle should be hidden. Defaults to false. */\n  @Input({ transform: booleanAttribute })\n  set notoggle(value: boolean) {\n    this.toggle = !value;\n  }\n\n  /** Whether the toggle should be shown. */\n  get toggleVisible() {\n    return this.toggle && !this.datepickerInput?.readonly;\n  }\n\n  /** Emits when the datepicker has been opened. */\n  @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Emits when the datepicker has been closed. */\n  @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Whether the calendar is open. */\n  @Input({ transform: booleanAttribute })\n  get opened(): boolean {\n    return this._opened;\n  }\n  set opened(value: boolean) {\n    if (value) {\n      this.open();\n    } else {\n      this.close();\n    }\n  }\n  private _opened = false;\n\n  /** The id for the datepicker calendar. */\n  id: string = inject(_IdGenerator).getId('sbb-datepicker-');\n\n  /** The currently selected date. */\n  get selected(): D | null {\n    return this._validSelected;\n  }\n  set selected(value: D | null) {\n    this._validSelected = value;\n    this._changeDetectorRef.markForCheck();\n  }\n  private _validSelected: D | null = null;\n\n  /** The minimum selectable date. */\n  get minDate(): D | null {\n    return this.datepickerInput && this.datepickerInput.min;\n  }\n\n  /** The maximum selectable date. */\n  get maxDate(): D | null {\n    return this.datepickerInput && this.datepickerInput.max;\n  }\n\n  /** Currently active date filter function. */\n  get dateFilter(): (date: D | null) => boolean {\n    return this.datepickerInput && this.datepickerInput.dateFilter;\n  }\n\n  /** Whether the previous day is reachable and therefore next buttons should be shown or not. */\n  get prevDayActive(): boolean {\n    return (\n      this.arrowsVisible &&\n      this.datepickerInput &&\n      !!this.datepickerInput.value &&\n      (!this.minDate || this._dateAdapter.compareDate(this.datepickerInput.value, this.minDate) > 0)\n    );\n  }\n\n  /** Whether the next day is reachable and therefore next buttons should be shown or not. */\n  get nextDayActive(): boolean {\n    return (\n      this.arrowsVisible &&\n      this.datepickerInput &&\n      !!this.datepickerInput.value &&\n      (!this.maxDate || this._dateAdapter.compareDate(this.datepickerInput.value, this.maxDate) < 0)\n    );\n  }\n\n  /** The next day button's aria-label */\n  @Input()\n  nextDayAriaLabel: string =\n    $localize`:Next day button's aria-label@@sbbDatePickerNextDayAriaLabel:Next day`;\n\n  /** The previous day button's aria-label */\n  @Input()\n  prevDayAriaLabel: string =\n    $localize`:Previous day button's aria-label@@sbbDatePickerPrevDayAriaLabel:Previous day`;\n\n  /** A reference to the overlay when the calendar is opened as a popup. */\n  popupRef: OverlayRef;\n\n  /** A portal containing the calendar for this datepicker. */\n  private _calendarPortal: ComponentPortal<SbbDatepickerContent<D>>;\n\n  /** Reference to the component instantiated in popup mode. */\n  private _popupComponentRef: ComponentRef<SbbDatepickerContent<D>> | null;\n\n  /** The element that was focused before the datepicker was opened. */\n  private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n  /** Subscription to value changes in the associated input element. */\n  private _inputSubscription = Subscription.EMPTY;\n\n  private _inputChangeSubscription = Subscription.EMPTY;\n\n  private _connectedDatepickerSubscription = Subscription.EMPTY;\n\n  private _posStrategySubscription = Subscription.EMPTY;\n\n  private _mainDatepickerSubscription? = Subscription.EMPTY;\n\n  /** The input element this datepicker is associated with. */\n  datepickerInput: SbbDateInput<D>;\n\n  /** Emits when the datepicker is disabled. */\n  readonly disabledChange = new Subject<boolean>();\n\n  /** Emits new selected date when selected date changes. */\n  readonly selectedChanged = new Subject<D>();\n\n  private _injector = inject(Injector);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    if (!this._dateAdapter) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n    this._dateAdapter.setLocale(this.locale);\n  }\n\n  ngOnDestroy() {\n    this.close();\n    this._inputSubscription.unsubscribe();\n    this._inputChangeSubscription.unsubscribe();\n    this._connectedDatepickerSubscription.unsubscribe();\n    this._mainDatepickerSubscription?.unsubscribe();\n    this.disabledChange.complete();\n\n    if (this.popupRef) {\n      this._posStrategySubscription.unsubscribe();\n      this.popupRef.dispose();\n      this._popupComponentRef = null;\n    }\n  }\n\n  /** Selects the given date */\n  select(date: D): void {\n    const oldValue = this.selected;\n    this.selected = date;\n    if (!this._dateAdapter.sameDate(oldValue, this.selected)) {\n      this.selectedChanged.next(date);\n    }\n  }\n\n  /** Set next day as selected. */\n  nextDay() {\n    if (this.selected) {\n      this.selected = this._dateAdapter.addCalendarDays(this.selected, 1);\n      this.selectedChanged.next(this.selected);\n    }\n  }\n\n  /** Set previous day as selected. */\n  prevDay() {\n    if (this.selected) {\n      this.selected = this._dateAdapter.addCalendarDays(this.selected, -1);\n      this.selectedChanged.next(this.selected);\n    }\n  }\n\n  /**\n   * Register an input with this datepicker.\n   * @param input The datepicker input to register with this datepicker.\n   */\n  registerInput(input: SbbDateInput<D>): void {\n    if (this.datepickerInput) {\n      throw Error('A SbbDatepicker can only be associated with a single input.');\n    }\n    this.datepickerInput = input;\n    this._inputSubscription = this.datepickerInput.valueChange.subscribe(\n      (value: D | null) => (this.selected = value),\n    );\n    this._inputChangeSubscription = merge(\n      this.datepickerInput.disabledChange,\n      this.datepickerInput.readonlyChange,\n    ).subscribe(() => this._changeDetectorRef.markForCheck());\n\n    // If the main datepicker date changes, we need to do a `markForCheck` to update the arrow keys.\n    this._mainDatepickerSubscription = this.main?.datepickerInput.valueChange.subscribe(() =>\n      this._changeDetectorRef.markForCheck(),\n    );\n\n    // The connected datepicker is only opened on the following conditions:\n    // This datepicker has a connected datepicker and has been opened, a value selected, closed\n    // and the connected datepicker has no value or a value before the selected date.\n    this._connectedDatepickerSubscription = merge(\n      this.openedStream.pipe(mapTo('opened')),\n      this.selectedChanged.pipe(mapTo('selected')),\n      this.closedStream.pipe(mapTo('closed')),\n    )\n      .pipe(\n        bufferCount(3, 1),\n        filter(\n          ([o, s, c]) =>\n            !!this.connected &&\n            !!this.datepickerInput.value &&\n            o === 'opened' &&\n            s === 'selected' &&\n            c === 'closed' &&\n            (!this.connected.datepickerInput.value ||\n              this._dateAdapter.compareDate(\n                this.datepickerInput.value,\n                this.connected.datepickerInput.value,\n              ) > 0),\n        ),\n        tap(() => {\n          if (this.connected!.datepickerInput.value) {\n            this.connected!.datepickerInput.value = null;\n            this.connected!.datepickerInput._cvaOnChange(null);\n          }\n        }),\n      )\n      .subscribe(() => this.connected!.open());\n  }\n\n  /** Open the calendar. */\n  open(): void {\n    if (this._opened || this.disabled) {\n      return;\n    }\n    if (!this.datepickerInput) {\n      throw Error('Attempted to open an SbbDatepicker with no associated input.');\n    }\n    this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n\n    this._openAsPopup();\n    this._opened = true;\n    this.openedStream.emit();\n  }\n\n  /** Close the calendar. */\n  close(): void {\n    if (!this._opened) {\n      return;\n    }\n    if (this.popupRef && this.popupRef.hasAttached()) {\n      this.popupRef.detach();\n    }\n    if (this._calendarPortal && this._calendarPortal.isAttached) {\n      this._calendarPortal.detach();\n    }\n\n    const completeClose = () => {\n      // The `_opened` could've been reset already if\n      // we got two events in quick succession.\n      if (this._opened) {\n        this._opened = false;\n        this.closedStream.emit();\n        this._focusedElementBeforeOpen = null;\n      }\n    };\n\n    if (\n      this._focusedElementBeforeOpen &&\n      typeof this._focusedElementBeforeOpen.focus === 'function'\n    ) {\n      // Because IE moves focus asynchronously, we can't count on it being restored before we've\n      // marked the datepicker as closed. If the event fires out of sequence and the element that\n      // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n      // able to close the calendar at all. We work around it by making the logic, that marks\n      // the datepicker as closed, async as well.\n      this._focusedElementBeforeOpen.focus();\n      setTimeout(completeClose);\n    } else {\n      completeClose();\n    }\n  }\n\n  private _getPanelClasses(): Array<string> {\n    return [\n      'sbb-datepicker-panel',\n      this.arrows ? 'sbb-datepicker-with-arrows' : 'sbb-datepicker-no-arrows',\n    ];\n  }\n\n  /** Open the calendar as a popup. */\n  private _openAsPopup(): void {\n    if (!this._calendarPortal) {\n      this._calendarPortal = new ComponentPortal<SbbDatepickerContent<D>>(\n        SbbDatepickerContent,\n        this._viewContainerRef,\n      );\n    }\n\n    if (!this.popupRef) {\n      this._createPopup();\n    } else {\n      this.popupRef.getConfig().panelClass = this._getPanelClasses();\n    }\n\n    if (!this.popupRef.hasAttached()) {\n      this._popupComponentRef = this.popupRef.attach(this._calendarPortal);\n      this._popupComponentRef.instance.datepicker = this;\n      this._popupComponentRef.instance._dialogLabelId = this.datepickerInput.getOverlayLabelId();\n\n      // Update the position once the calendar has rendered.\n      afterNextRender(\n        () => {\n          this.popupRef.updatePosition();\n        },\n        {\n          injector: this._injector,\n        },\n      );\n    }\n  }\n\n  /** Create the popup. */\n  private _createPopup(): void {\n    const overlayConfig = new OverlayConfig({\n      positionStrategy: this._createPopupPositionStrategy(),\n      hasBackdrop: true,\n      backdropClass: 'sbb-overlay-transparent-backdrop',\n      scrollStrategy: this._scrollStrategy(),\n      panelClass: this._getPanelClasses(),\n    });\n\n    this.popupRef = this._overlay.create(overlayConfig);\n\n    merge(\n      this.popupRef.backdropClick(),\n      this.popupRef.detachments(),\n      this.popupRef.keydownEvents().pipe(\n        filter((event) => {\n          // Closing on alt + up is only valid when there's an input associated with the datepicker.\n          return (\n            event.keyCode === ESCAPE ||\n            (this.datepickerInput && event.altKey && event.keyCode === UP_ARROW)\n          );\n        }),\n      ),\n    ).subscribe(() => this.close());\n  }\n\n  /** Create the popup PositionStrategy. */\n  private _createPopupPositionStrategy(): PositionStrategy {\n    const posStrategy = this._overlay\n      .position()\n      .flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin())\n      .withTransformOriginOn('.sbb-datepicker-content')\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withPositions([\n        {\n          originX: 'start',\n          originY: 'bottom',\n          overlayX: 'start',\n          overlayY: 'top',\n        },\n        {\n          originX: 'start',\n          originY: 'top',\n          overlayX: 'start',\n          overlayY: 'bottom',\n        },\n        {\n          originX: 'end',\n          originY: 'bottom',\n          overlayX: 'end',\n          overlayY: 'top',\n        },\n        {\n          originX: 'end',\n          originY: 'top',\n          overlayX: 'end',\n          overlayY: 'bottom',\n        },\n        {\n          originX: 'start',\n          originY: 'center',\n          overlayX: 'start',\n          overlayY: 'center',\n          panelClass: 'sbb-datepicker-panel-centered',\n        },\n        {\n          originX: 'end',\n          originY: 'center',\n          overlayX: 'end',\n          overlayY: 'center',\n          panelClass: 'sbb-datepicker-panel-centered',\n        },\n      ]);\n\n    this._posStrategySubscription = posStrategy.positionChanges.subscribe((pos) => {\n      if (pos.connectionPair.originY === 'top') {\n        this.popupRef.hostElement.classList.add('sbb-datepicker-panel-above');\n      } else {\n        this.popupRef.hostElement.classList.remove('sbb-datepicker-panel-above');\n      }\n    });\n\n    return posStrategy;\n  }\n\n  /**\n   * @param obj The object to check.\n   * @returns The given object if it is both a date instance and valid, otherwise null.\n   */\n  private _getValidDateOrNull(obj: any): D | null {\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\n  }\n}\n","@if (prevDayActive) {\n  <button\n    type=\"button\"\n    class=\"sbb-datepicker-arrow-button sbb-datepicker-arrow-button-left sbb-icon-scaled\"\n    [attr.aria-label]=\"prevDayAriaLabel\"\n    [disabled]=\"disabled\"\n    (click)=\"prevDay()\"\n  >\n    <sbb-icon svgIcon=\"chevron-small-left-small\"></sbb-icon>\n  </button>\n}\n@if (toggleVisible) {\n  <sbb-datepicker-toggle></sbb-datepicker-toggle>\n}\n<ng-content></ng-content>\n@if (nextDayActive) {\n  <button\n    type=\"button\"\n    class=\"sbb-datepicker-arrow-button sbb-datepicker-arrow-button-right sbb-icon-scaled\"\n    [attr.aria-label]=\"nextDayAriaLabel\"\n    [disabled]=\"disabled\"\n    (click)=\"nextDay()\"\n  >\n    <sbb-icon svgIcon=\"chevron-small-right-small\"></sbb-icon>\n  </button>\n}\n","import { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport {\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { SbbDateAdapter, SbbDateFormats, SBB_DATE_FORMATS, TypeRef } from '@sbb-esta/angular/core';\nimport { SbbFormField, SBB_FORM_FIELD } from '@sbb-esta/angular/form-field';\nimport { SBB_INPUT_VALUE_ACCESSOR } from '@sbb-esta/angular/input';\nimport { Subscription } from 'rxjs';\n\nimport { createMissingDateImplError } from '../datepicker-errors';\nimport { SbbDatepicker } from '../datepicker/datepicker';\n\n/**\n * An event used for date input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use SbbDateInputEvent instead.\n */\nexport class SbbDateInputEvent<D> {\n  /** The new value for the target date input. */\n  value: D | null;\n\n  constructor(\n    /** Reference to the date input component that emitted the event. */\n    public target: SbbDateInput<D>,\n    /** Reference to the native input element associated with the date input. */\n    public targetElement: HTMLElement,\n  ) {\n    this.value = this.target.value;\n  }\n}\n\nexport const SBB_DATE_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => SbbDateInput),\n  multi: true,\n};\n\nexport const SBB_DATE_VALIDATORS: any = {\n  provide: NG_VALIDATORS,\n  useExisting: forwardRef(() => SbbDateInput),\n  multi: true,\n};\n\n@Directive({\n  selector: 'input[sbbDateInput]',\n  exportAs: 'sbbDateInput',\n  providers: [\n    SBB_DATE_VALUE_ACCESSOR,\n    SBB_DATE_VALIDATORS,\n    { provide: SBB_INPUT_VALUE_ACCESSOR, useExisting: SbbDateInput },\n  ],\n  host: {\n    class: 'sbb-date-input',\n    '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(this._datepicker?.opened && this._datepicker.id) || null',\n    '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n    '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n    '[disabled]': 'this.disabled',\n  },\n})\nexport class SbbDateInput<D> implements ControlValueAccessor, Validator, OnInit, OnDestroy {\n  private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  _dateAdapter: SbbDateAdapter<D> = inject<SbbDateAdapter<D>>(SbbDateAdapter, {\n    optional: true,\n  })!;\n  private _dateFormats = inject<SbbDateFormats>(SBB_DATE_FORMATS, { optional: true })!;\n  _datepicker: SbbDatepicker<D> = inject<SbbDatepicker<D>>(SbbDatepicker, { optional: true })!;\n  private _formField = inject<SbbFormField>(SBB_FORM_FIELD, { optional: true });\n\n  /** Function that can be used to filter out dates within the datepicker. */\n  @Input()\n  set dateFilter(value: (date: D | null) => boolean) {\n    this._dateFilter = value;\n    this._validatorOnChange();\n  }\n  get dateFilter() {\n    return this._dateFilter;\n  }\n  private _dateFilter: (date: D | null) => boolean;\n\n  /** The value of the input. */\n  @Input()\n  get value(): D | null {\n    return this._value;\n  }\n  set value(value: D | null) {\n    value = this._dateAdapter.deserialize(value);\n    this._lastValueValid = !value || this._dateAdapter.isValid(value);\n    value = this._getValidDateOrNull(value);\n    const oldDate = this.value;\n    this._value = value;\n    this._formatValue(value);\n\n    if (!this._dateAdapter.sameDate(oldDate, value)) {\n      this.valueChange.emit(value);\n    }\n  }\n  private _value: D | null;\n\n  /** The minimum valid date. */\n  @Input()\n  get min(): D | null {\n    return (\n      this._min ||\n      (this._datepicker &&\n      this._datepicker.main &&\n      this._datepicker.main.datepickerInput &&\n      this._datepicker.main.datepickerInput.value\n        ? this._datepicker.main.datepickerInput.value\n        : null)\n    );\n  }\n  set min(value: D | null) {\n    this._min = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n    this._validatorOnChange();\n  }\n  private _min: D | null;\n\n  /** The maximum valid date. */\n  @Input()\n  get max(): D | null {\n    return this._max;\n  }\n  set max(value: D | null) {\n    this._max = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n    this._validatorOnChange();\n  }\n  private _max: D | null;\n\n  /** Whether the datepicker-input is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    const newValue = value;\n    const element = this._elementRef.nativeElement;\n\n    if (this._disabled !== newValue) {\n      this._disabled = newValue;\n      this.disabledChange.emit(newValue);\n    }\n\n    // We need to null check the `blur` method, because it's undefined during SSR.\n    if (newValue && element.blur) {\n      // Normally, native input elements automatically blur if they turn disabled. This behavior\n      // is problematic, because it would mean that it triggers another change detection cycle,\n      // which then causes a changed after checked error if the input element was focused before.\n      element.blur();\n    }\n  }\n  private _disabled = false;\n\n  /** Whether the element is readonly. */\n  @Input({ transform: booleanAttribute })\n  get readonly(): boolean {\n    return this._readonly;\n  }\n  set readonly(value: boolean) {\n    this._readonly = value;\n    this.readonlyChange.next(this._readonly);\n  }\n  private _readonly = false;\n\n  /** Emits when a `change` event is fired on this `<input>`. */\n  @Output() readonly dateChange: EventEmitter<SbbDateInputEvent<D>> = new EventEmitter<\n    SbbDateInputEvent<D>\n  >();\n\n  /** Emits when an `input` event is fired on this `<input>`. */\n  @Output() readonly dateInput: EventEmitter<SbbDateInputEvent<D>> = new EventEmitter<\n    SbbDateInputEvent<D>\n  >();\n\n  /** Emits when the input gets blurred. */\n  @Output() readonly inputBlurred: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Emits when the value changes (either due to user input or programmatic change). */\n  valueChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n  /** Emits when the disabled state has changed */\n  disabledChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  /** Emits when the readonly state has changed */\n  readonlyChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  private _datepickerSubscription = Subscription.EMPTY;\n\n  /** Whether the last value set on the input was valid. */\n  private _lastValueValid = false;\n\n  /** `View -> model callback called when date input has been touched` */\n  _onTouched: () => void = () => {};\n\n  /** `View -> model callback called when value changes` */\n  _cvaOnChange: (value: any) => void = () => {};\n\n  private _validatorOnChange = () => {};\n\n  /** The form control validator for whether the input parses. */\n  private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n    return this._lastValueValid\n      ? null\n      : { sbbDateParse: { text: this._elementRef.nativeElement.value } };\n  };\n\n  /** The form control validator for the min date. */\n  private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    return !this.min || !controlValue || this._dateAdapter.compareDate(this.min, controlValue) <= 0\n      ? null\n      : { sbbDateMin: { min: this.min, actual: controlValue } };\n  };\n\n  /** The form control validator for the max date. */\n  private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    return !this.max || !controlValue || this._dateAdapter.compareDate(this.max, controlValue) >= 0\n      ? null\n      : { sbbDateMax: { max: this.max, actual: controlValue } };\n  };\n\n  /** The form control validator for the date filter. */\n  private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    return !this._dateFilter || !controlValue || this._dateFilter(controlValue)\n      ? null\n      : { sbbDateFilter: true };\n  };\n\n  /** The combined form control validator for this input. */\n  // tslint:disable-next-line:member-ordering\n  private _validator: ValidatorFn | null = Validators.compose([\n    this._parseValidator,\n    this._minValidator,\n    this._maxValidator,\n    this._filterValidator,\n  ]);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    if (!this._dateAdapter) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('SBB_DATE_FORMATS');\n    }\n  }\n\n  ngOnInit(): void {\n    if (!this._datepicker) {\n      return;\n    }\n\n    this._datepicker.registerInput(this);\n    this._datepickerSubscription.unsubscribe();\n\n    this._datepickerSubscription = this._datepicker.selectedChanged.subscribe((selected: D) => {\n      this.value = selected;\n      this._cvaOnChange(selected);\n      this._onTouched();\n      this.dateInput.emit(new SbbDateInputEvent(this, this._elementRef.nativeElement));\n      this.dateChange.emit(new SbbDateInputEvent(this, this._elementRef.nativeElement));\n    });\n  }\n\n  ngOnDestroy() {\n    this._datepickerSubscription.unsubscribe();\n    this.valueChange.complete();\n    this.disabledChange.complete();\n  }\n\n  /** @docs-private */\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  /** @docs-private */\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this._validator ? this._validator(c) : null;\n  }\n\n  /**\n   * Gets the element that the datepicker popup should be connected to.\n   * @return The element to connect the popup to.\n   */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._elementRef;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: D): void {\n    this.value = value;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: (value: any) => void): void {\n    this._cvaOnChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  @HostListener('keydown', ['$event'])\n  _onKeydown(event: TypeRef<KeyboardEvent>) {\n    if (this._datepicker && event.altKey && event.keyCode === DOWN_ARROW) {\n      this._datepicker.open();\n      event.preventDefault();\n    }\n  }\n\n  @HostListener('input', ['$event'])\n  _onInput(event: Event) {\n    const value = (event.target as HTMLInputElement).value;\n    let date = this._dateAdapter.parse(value);\n    this._lastValueValid = !date || this._dateAdapter.isValid(date);\n    date = this._getValidDateOrNull(date);\n\n    if (!this._dateAdapter.sameDate(date, this._value)) {\n      this._value = date;\n      this._cvaOnChange(date);\n      this.valueChange.emit(date);\n      this.dateInput.emit(new SbbDateInputEvent(this, this._elementRef.nativeElement));\n    } else {\n      this._validatorOnChange();\n    }\n  }\n\n  @HostListener('change')\n  _onChange() {\n    this.dateChange.emit(new SbbDateInputEvent(this, this._elementRef.nativeElement));\n  }\n\n  /** Handles blur events on the input. */\n  @HostListener('blur')\n  _onBlur() {\n    // Reformat the input only if we have a valid value.\n    if (this.value) {\n      this._formatValue(this.value);\n    }\n\n    this._onTouched();\n    this.inputBlurred.emit();\n  }\n\n  /** Formats a value and sets it on the input element. */\n  private _formatValue(value: D | null) {\n    const displayFormat = this._datepicker\n      ? this._dateFormats.dateInput\n      : (this._dateFormats.dateInputPure ?? this._dateFormats.dateInput);\n    this._elementRef.nativeElement.value =\n      value != null ? this._dateAdapter.format(value, displayFormat) : '';\n  }\n\n  /**\n   * @param obj The object to check.\n   * @returns The given object if it is both a date instance and valid, otherwise null.\n   */\n  private _getValidDateOrNull(obj: any): D | null {\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\n  }\n\n  /** Gets the ID of an element that should be used a description for the calendar overlay. */\n  getOverlayLabelId(): string | null {\n    if (this._formField) {\n      return this._formField.getLabelId();\n    }\n\n    return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n  }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { NgModule } from '@angular/core';\nimport { provideNativeDateAdapter } from '@sbb-esta/angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbCalendarBody } from './calendar-body/calendar-body';\nimport { SbbCalendar, SbbCalendarHeader } from './calendar/calendar';\nimport { SbbDateInput } from './date-input/date-input.directive';\nimport { SbbDatepickerContent } from './datepicker-content/datepicker-content';\nimport { SbbDatepickerToggle } from './datepicker-toggle/datepicker-toggle';\nimport {\n  SbbDatepicker,\n  SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './datepicker/datepicker';\nimport { SbbMonthView } from './month-view/month-view';\n\n@NgModule({\n  imports: [\n    PortalModule,\n    A11yModule,\n    OverlayModule,\n    SbbCommonModule,\n    SbbIconModule,\n    SbbDatepicker,\n    SbbDatepickerToggle,\n    SbbDatepickerContent,\n    SbbCalendar,\n    SbbCalendarHeader,\n    SbbMonthView,\n    SbbCalendarBody,\n    SbbDateInput,\n  ],\n  exports: [\n    SbbDatepicker,\n    SbbDatepickerToggle,\n    SbbDatepickerContent,\n    SbbCalendar,\n    SbbCalendarHeader,\n    SbbMonthView,\n    SbbCalendarBody,\n    SbbDateInput,\n  ],\n  providers: [SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, provideNativeDateAdapter()],\n})\nexport class SbbDatepickerModule {}\n"],"names":["uniqueIdCounter","SbbCalendarCell","value","displayValue","ariaLabel","enabled","rangeBackground","cssClasses","id","constructor","SbbCalendarBody","_elementRef","inject","ElementRef","_changeDetectorRef","ChangeDetectorRef","_focusActiveCellAfterViewChecked","label","rows","_rows","markForCheck","weeksInMonth","todayValue","selectedValue","labelMinRequiredCells","numCols","allowDisabledSelection","activeCell","isWeekSelectable","isWeekdaySelectable","selectedValueChange","EventEmitter","selectedWeekChange","activeDateChange","_injector","Injector","_trackRow","row","ngAfterViewChecked","focusActiveCell","cellClicked","cell","emit","onWeekClicked","week","_emitActiveDateChange","event","firstRowOffset","length","isActiveCell","rowIndex","colIndex","cellNumber","afterNextRender","setTimeout","nativeElement","querySelector","focus","injector","_scheduleFocusActiveCellAfterViewChecked","deps","target","i0","ɵɵFactoryTarget","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","type","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","decorators","exportAs","host","class","role","template","Input","Output","createMissingDateImplError","provider","Error","SbbDateRange","start","end","SBB_DATEPICKER","InjectionToken","DAYS_PER_WEEK","SbbMonthView","_dateAdapter","SbbDateAdapter","optional","locale","LOCALE_ID","_dateFormats","SBB_DATE_FORMATS","activeDate","_activeDate","oldActiveDate","validDate","_getValidDateOrNull","deserialize","today","clampDate","minDate","maxDate","_hasSameMonthAndYear","init","selected","_selected","selectedDate","_getDateInCurrentMonth","_minDate","_maxDate","dateFilter","dateClass","_dateClass","_updateDateClasses","showWeekNumbers","selectedChange","selectedWeekdayChange","userSelection","sbbCalendarBody","monthLabel","weeks","firstWeekOffset","selectedWeekday","todayDate","weekdays","dateRange","_dateRange","_updateRangeBackground","_datePicker","datepicker","firstDayOfWeek","getFirstDayOfWeek","narrowWeekdays","getDayOfWeekNames","longWeekdays","map","long","i","narrow","index","slice","concat","ngAfterContentInit","dateSelected","date","_getDateFromDayOfMonth","weekSelected","weekIndex","findIndex","w","selectedWeek","rangeInMonth","weekdaySelected","weekday","_updateActiveDate","month","compareDate","handleCalendarBodyKeydown","keyCode","LEFT_ARROW","addCalendarDays","RIGHT_ARROW","UP_ARROW","DOWN_ARROW","HOME","getDate","END","getNumDaysInMonth","PAGE_UP","altKey","addCalendarYears","addCalendarMonths","PAGE_DOWN","ENTER","preventDefault","connected","datepickerInput","main","getMonthNames","getMonth","toLocaleUpperCase","firstOfMonth","createDate","getYear","getDayOfWeek","_createWeekCells","dayOfMonth","daysInMonth","dateNames","getDateNames","year","isFirstDayASunday","push","prevDate","parseInt","format","_shouldEnableDate","dateA11yLabel","_shouldApplyRangeBackground","cellClasses","undefined","isUpdated","j","sameDate","_isRangeLimit","d1","d2","obj","isDateInstance","isValid","isStandalone","selector","inputs","outputs","viewQueries","propertyName","first","predicate","descendants","static","ngImport","args","imports","ViewChild","SbbCalendarHeader","_labelSwitchToPreviousMonth","$localize","_labelSwitchToNextMonth","_labelSwitchToPreviousYear","_labelSwitchToNextYear","calendar","SbbCalendar","changeDetectorRef","stateChanges","subscribe","monthText","getMonthName","yearText","getYearName","previousMonthClicked","newActiveDate","_assignActiveDate","nextMonthClicked","previousMonthEnabled","_isSameMonthView","nextMonthEnabled","date1","date2","previousYearClicked","nextYearClicked","previousYearEnabled","_isSameYearView","nextYearEnabled","classAttribute","dependencies","kind","SbbIconModule","i1","SbbIcon","headerComponent","calendarHeaderPortal","_moveFocusOnNextTick","startAt","_startAt","_dateClassObservable","monthView","_clampedActiveDate","next","Subject","ComponentPortal","ngOnDestroy","complete","ngOnChanges","changes","minDateChange","previousValue","currentValue","maxDateChange","changeRequiringRerender","firstChange","view","_getCurrentViewComponent","detectChanges","isObservable","of","userSelected","usesOnChanges","styles","CdkPortalOutlet","CdkMonitorFocus","AsyncPipe","name","SbbDatepickerContent","isAbove","_dialogLabelId","ngAfterViewInit","CdkTrapFocus","SbbDatepickerToggle","_datepicker","_labelShowCalendar","_stateChanges","Subscription","EMPTY","tabIndex","disabled","_disabled","defaultTabIndex","HostAttributeToken","parsedTabIndex","Number","_watchStateChanges","unsubscribe","open","stopPropagation","datepickerDisabled","disabledChange","inputDisabled","datepickerToggled","merge","openedStream","closedStream","booleanAttribute","properties","transform","SBB_DATEPICKER_SCROLL_STRATEGY","SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","SBB_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","provide","Overlay","useFactory","SbbDatepicker","_overlay","_viewContainerRef","ViewContainerRef","_scrollStrategy","calendarHeaderComponent","panelClass","_connected","arrows","arrowsVisible","readonly","toggle","notoggle","toggleVisible","opened","_opened","close","_IdGenerator","getId","_validSelected","min","max","prevDayActive","nextDayActive","nextDayAriaLabel","prevDayAriaLabel","popupRef","_calendarPortal","_popupComponentRef","_focusedElementBeforeOpen","_inputSubscription","_inputChangeSubscription","_connectedDatepickerSubscription","_posStrategySubscription","_mainDatepickerSubscription","selectedChanged","setLocale","dispose","select","oldValue","nextDay","prevDay","registerInput","input","valueChange","readonlyChange","pipe","mapTo","bufferCount","filter","o","s","c","tap","_cvaOnChange","_getFocusedElementPierceShadowDom","_openAsPopup","hasAttached","detach","isAttached","completeClose","_getPanelClasses","_createPopup","getConfig","attach","instance","getOverlayLabelId","updatePosition","overlayConfig","OverlayConfig","positionStrategy","_createPopupPositionStrategy","hasBackdrop","backdropClass","scrollStrategy","create","backdropClick","detachments","keydownEvents","ESCAPE","posStrategy","position","flexibleConnectedTo","getConnectedOverlayOrigin","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withPositions","originX","originY","overlayX","overlayY","positionChanges","pos","connectionPair","hostElement","classList","add","remove","providers","useExisting","SbbDateInputEvent","targetElement","SBB_DATE_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","SbbDateInput","multi","SBB_DATE_VALIDATORS","NG_VALIDATORS","_formField","SBB_FORM_FIELD","_dateFilter","_validatorOnChange","_value","_lastValueValid","oldDate","_formatValue","_min","_max","newValue","element","blur","_readonly","dateChange","dateInput","inputBlurred","_datepickerSubscription","_onTouched","_parseValidator","sbbDateParse","text","_minValidator","control","controlValue","sbbDateMin","actual","_maxValidator","sbbDateMax","_filterValidator","sbbDateFilter","_validator","Validators","compose","ngOnInit","registerOnValidatorChange","fn","validate","writeValue","registerOnChange","registerOnTouched","setDisabledState","isDisabled","_onKeydown","_onInput","parse","_onChange","_onBlur","displayFormat","dateInputPure","getLabelId","getAttribute","Directive","ɵdir","ɵɵngDeclareDirective","listeners","SBB_INPUT_VALUE_ACCESSOR","HostListener","SbbDatepickerModule","NgModule","ɵmod","ɵɵngDeclareNgModule","PortalModule","A11yModule","OverlayModule","SbbCommonModule","provideNativeDateAdapter","exports"],"mappings":"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"}