{"version":3,"file":"mtxDatetimepicker.mjs","sources":["../../../projects/extensions/datetimepicker/datetimepicker-filtertype.ts","../../../projects/extensions/datetimepicker/clock.ts","../../../projects/extensions/datetimepicker/clock.html","../../../projects/extensions/datetimepicker/datetimepicker-animations.ts","../../../projects/extensions/datetimepicker/datetimepicker-errors.ts","../../../projects/extensions/datetimepicker/calendar-body.ts","../../../projects/extensions/datetimepicker/calendar-body.html","../../../projects/extensions/datetimepicker/month-view.ts","../../../projects/extensions/datetimepicker/month-view.html","../../../projects/extensions/datetimepicker/multi-year-view.ts","../../../projects/extensions/datetimepicker/multi-year-view.html","../../../projects/extensions/datetimepicker/datetimepicker-intl.ts","../../../projects/extensions/datetimepicker/time.ts","../../../projects/extensions/datetimepicker/time.html","../../../projects/extensions/datetimepicker/year-view.ts","../../../projects/extensions/datetimepicker/year-view.html","../../../projects/extensions/datetimepicker/calendar.ts","../../../projects/extensions/datetimepicker/calendar.html","../../../projects/extensions/datetimepicker/datetimepicker.ts","../../../projects/extensions/datetimepicker/datetimepicker-content.html","../../../projects/extensions/datetimepicker/datetimepicker-input.ts","../../../projects/extensions/datetimepicker/datetimepicker-toggle.ts","../../../projects/extensions/datetimepicker/datetimepicker-toggle.html","../../../projects/extensions/datetimepicker/datetimepicker-actions.ts","../../../projects/extensions/datetimepicker/datetimepicker-module.ts","../../../projects/extensions/datetimepicker/mtxDatetimepicker.ts"],"sourcesContent":["export enum MtxDatetimepickerFilterType {\n  DATE,\n  HOUR,\n  MINUTE,\n}\n","import { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  ViewEncapsulation,\n  booleanAttribute,\n} from '@angular/core';\n\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxAMPM } from './datetimepicker-types';\n\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n\nexport const CLOCK_RADIUS = 50;\nexport const CLOCK_INNER_RADIUS = 27.5;\nexport const CLOCK_OUTER_RADIUS = 41.25;\nexport const CLOCK_TICK_RADIUS = 7.0833;\n\n/** Possible views for datetimepicker clock. */\nexport type MtxClockView = 'hour' | 'minute';\n\n/**\n * A clock that is used as part of the datetimepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mtx-clock',\n  templateUrl: 'clock.html',\n  styleUrl: 'clock.scss',\n  host: {\n    'role': 'clock',\n    'class': 'mtx-clock',\n    '(mousedown)': '_pointerDown($event)',\n    '(touchstart)': '_pointerDown($event)',\n  },\n  exportAs: 'mtxClock',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class MtxClock<D> implements AfterContentInit, OnDestroy, OnChanges {\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n  /** Step over minutes. */\n  @Input() interval: number = 1;\n\n  /** Whether the clock uses 12 hour format. */\n  @Input({ transform: booleanAttribute }) twelvehour: boolean = false;\n\n  /** Whether the time is now in AM or PM. */\n  @Input() AMPM: MtxAMPM = 'AM';\n\n  /** Emits when the currently selected date changes. */\n  @Output() selectedChange = new EventEmitter<D>();\n\n  /** Emits when any date is activated. */\n  @Output() activeDateChange = new EventEmitter<D>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection = new EventEmitter<void>();\n\n  /** Whether the clock is in hour view. */\n  _hourView: boolean = true;\n\n  _hours: any[] = [];\n\n  _minutes: any[] = [];\n\n  _selectedHour!: number;\n\n  _selectedMinute!: number;\n\n  private _timeChanged = false;\n\n  constructor(\n    private _elementRef: ElementRef,\n    private _adapter: DatetimeAdapter<D>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    @Inject(DOCUMENT) private _document: any\n  ) {}\n\n  /**\n   * The date to display in this clock view.\n   */\n  @Input()\n  get activeDate(): D {\n    return this._activeDate;\n  }\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n    if (!this._adapter.sameMinute(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._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n    if (this._selected) {\n      this.activeDate = this._selected;\n    }\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._adapter.getValidDateOrNull(this._adapter.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._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n  }\n  private _maxDate!: D | null;\n\n  /** Whether the clock should be started in hour or minute view. */\n  @Input()\n  set startView(value: MtxClockView) {\n    this._hourView = value !== 'minute';\n  }\n\n  get _hand() {\n    const hour = this._adapter.getHour(this.activeDate);\n    this._selectedHour = hour;\n    this._selectedMinute = this._adapter.getMinute(this.activeDate);\n    let deg = 0;\n    let radius = CLOCK_OUTER_RADIUS;\n    if (this._hourView) {\n      const outer = this._selectedHour > 0 && this._selectedHour < 13;\n      radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\n      if (this.twelvehour) {\n        radius = CLOCK_OUTER_RADIUS;\n      }\n      deg = Math.round(this._selectedHour * (360 / (24 / 2)));\n    } else {\n      deg = Math.round(this._selectedMinute * (360 / 60));\n    }\n    return {\n      height: `${radius}%`,\n      marginTop: `${50 - radius}%`,\n      transform: `rotate(${deg}deg)`,\n    };\n  }\n\n  ngAfterContentInit() {\n    this.activeDate = this._activeDate || this._adapter.today();\n    this._init();\n  }\n\n  ngOnDestroy() {\n    this._removeGlobalEvents();\n  }\n\n  ngOnChanges(): void {\n    this._init();\n  }\n\n  /** Called when the user has put their pointer down on the clock. */\n  private _pointerDown = (event: TouchEvent | MouseEvent) => {\n    this._timeChanged = false;\n    this.setTime(event);\n    this._bindGlobalEvents(event);\n  };\n\n  /**\n   * Called when the user has moved their pointer after\n   * starting to drag. Bound on the document level.\n   */\n  private _pointerMove = (event: TouchEvent | MouseEvent) => {\n    if (event.cancelable) {\n      event.preventDefault();\n    }\n    this.setTime(event);\n  };\n\n  /** Called when the user has lifted their pointer. Bound on the document level. */\n  private _pointerUp = (event: TouchEvent | MouseEvent) => {\n    if (event.cancelable) {\n      event.preventDefault();\n    }\n    this._removeGlobalEvents();\n\n    if (this._timeChanged) {\n      this.selectedChange.emit(this.activeDate);\n      if (!this._hourView) {\n        this._userSelection.emit();\n      }\n    }\n  };\n\n  /** Binds our global move and end events. */\n  private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n    // Note that we bind the events to the `document`, because it allows us to capture\n    // drag cancel events where the user's pointer is outside the browser window.\n    const document = this._document;\n    const isTouch = isTouchEvent(triggerEvent);\n    const moveEventName = isTouch ? 'touchmove' : 'mousemove';\n    const endEventName = isTouch ? 'touchend' : 'mouseup';\n    document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n    document.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n    if (isTouch) {\n      document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);\n    }\n  }\n\n  /** Removes any global event listeners that we may have added. */\n  private _removeGlobalEvents() {\n    const document = this._document;\n    document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);\n    document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);\n    document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);\n    document.removeEventListener('touchend', this._pointerUp, activeEventOptions);\n    document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);\n  }\n\n  /** Initializes this clock view. */\n  private _init() {\n    this._hours.length = 0;\n    this._minutes.length = 0;\n\n    const hourNames = this._adapter.getHourNames();\n    const minuteNames = this._adapter.getMinuteNames();\n    if (this.twelvehour) {\n      const hours = [];\n      for (let i = 0; i < hourNames.length; i++) {\n        const radian = (i / 6) * Math.PI;\n        const radius = CLOCK_OUTER_RADIUS;\n\n        const hour = i;\n        const date = this._adapter.createDatetime(\n          this._adapter.getYear(this.activeDate),\n          this._adapter.getMonth(this.activeDate),\n          this._adapter.getDate(this.activeDate),\n          hour,\n          0\n        );\n\n        // Check if the date is enabled, no need to respect the minute setting here\n        const enabled =\n          (!this.minDate ||\n            (this._adapter.compareDatetime(date, this.minDate, false) as number) >= 0) &&\n          (!this.maxDate ||\n            (this._adapter.compareDatetime(date, this.maxDate, false) as number) <= 0) &&\n          (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.HOUR));\n\n        // display value for twelvehour clock should be from 1-12 not including 0 and not above 12\n        hours.push({\n          value: i,\n          displayValue: i % 12 === 0 ? '12' : hourNames[i % 12],\n          enabled,\n          top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\n          left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\n        });\n      }\n\n      // filter out AM or PM hours based on AMPM\n      if (this.AMPM === 'AM') {\n        this._hours = hours.filter(x => x.value < 12);\n      } else {\n        this._hours = hours.filter(x => x.value >= 12);\n      }\n    } else {\n      for (let i = 0; i < hourNames.length; i++) {\n        const radian = (i / 6) * Math.PI;\n        const outer = i > 0 && i < 13;\n        const radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\n        const date = this._adapter.createDatetime(\n          this._adapter.getYear(this.activeDate),\n          this._adapter.getMonth(this.activeDate),\n          this._adapter.getDate(this.activeDate),\n          i,\n          0\n        );\n\n        // Check if the date is enabled, no need to respect the minute setting here\n        const enabled =\n          (!this.minDate ||\n            (this._adapter.compareDatetime(date, this.minDate, false) as number) >= 0) &&\n          (!this.maxDate ||\n            (this._adapter.compareDatetime(date, this.maxDate, false) as number) <= 0) &&\n          (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.HOUR));\n\n        this._hours.push({\n          value: i,\n          displayValue: i === 0 ? '00' : hourNames[i],\n          enabled,\n          top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\n          left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\n          fontSize: i > 0 && i < 13 ? '' : '80%',\n        });\n      }\n    }\n\n    for (let i = 0; i < minuteNames.length; i += 5) {\n      const radian = (i / 30) * Math.PI;\n      const date = this._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        this._adapter.getMonth(this.activeDate),\n        this._adapter.getDate(this.activeDate),\n        this._adapter.getHour(this.activeDate),\n        i\n      );\n      const enabled =\n        (!this.minDate || (this._adapter.compareDatetime(date, this.minDate) as number) >= 0) &&\n        (!this.maxDate || (this._adapter.compareDatetime(date, this.maxDate) as number) <= 0) &&\n        (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.MINUTE));\n      this._minutes.push({\n        value: i,\n        displayValue: i === 0 ? '00' : minuteNames[i],\n        enabled,\n        top: CLOCK_RADIUS - Math.cos(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\n        left: CLOCK_RADIUS + Math.sin(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\n      });\n    }\n  }\n\n  /**\n   * Set Time\n   * @param event\n   */\n  private setTime(event: TouchEvent | MouseEvent) {\n    const trigger = this._elementRef.nativeElement;\n    const triggerRect = trigger.getBoundingClientRect();\n    const width = trigger.offsetWidth;\n    const height = trigger.offsetHeight;\n    const { pageX, pageY } = getPointerPositionOnPage(event);\n    const x = width / 2 - (pageX - triggerRect.left - window.pageXOffset);\n    const y = height / 2 - (pageY - triggerRect.top - window.pageYOffset);\n\n    let radian = Math.atan2(-x, y);\n    const unit = Math.PI / (this._hourView ? 6 : this.interval ? 30 / this.interval : 30);\n    const z = Math.sqrt(x * x + y * y);\n    const outer =\n      this._hourView &&\n      z > (width * (CLOCK_OUTER_RADIUS / 100) + width * (CLOCK_INNER_RADIUS / 100)) / 2;\n\n    if (radian < 0) {\n      radian = Math.PI * 2 + radian;\n    }\n    let value = Math.round(radian / unit);\n\n    let date;\n    if (this._hourView) {\n      if (this.twelvehour) {\n        if (this.AMPM === 'AM') {\n          value = value === 0 ? 12 : value;\n        } else {\n          // if we chosen 12 in PM, the value should be 0 for 0:00,\n          // else we can safely add 12 to the final value\n          value = value === 12 ? 0 : value + 12;\n        }\n      } else {\n        if (value === 12) {\n          value = 0;\n        }\n        value = outer ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n      }\n\n      date = this._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        this._adapter.getMonth(this.activeDate),\n        this._adapter.getDate(this.activeDate),\n        value,\n        this._adapter.getMinute(this.activeDate)\n      );\n    } else {\n      if (this.interval) {\n        value *= this.interval;\n      }\n      if (value === 60) {\n        value = 0;\n      }\n      date = this._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        this._adapter.getMonth(this.activeDate),\n        this._adapter.getDate(this.activeDate),\n        this._adapter.getHour(this.activeDate),\n        value\n      );\n    }\n\n    // if there is a dateFilter, check if the date is allowed if it is not then do not set/emit new date\n    // https://github.com/ng-matero/extensions/issues/244\n    if (\n      this.dateFilter &&\n      !this.dateFilter(\n        date,\n        this._hourView ? MtxDatetimepickerFilterType.HOUR : MtxDatetimepickerFilterType.MINUTE\n      )\n    ) {\n      return;\n    }\n\n    this._timeChanged = true;\n    this.activeDate = date;\n    this._changeDetectorRef.markForCheck();\n    this.activeDateChange.emit(this.activeDate);\n  }\n}\n\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n  // This function is called for every pixel that the user has dragged so we need it to be\n  // as fast as possible. Since we only bind mouse events and touch events, we can assume\n  // that if the event's name starts with `t`, it's a touch event.\n  return event.type[0] === 't';\n}\n\n/** Gets the coordinates of a touch or mouse event relative to the document. */\nfunction getPointerPositionOnPage(event: MouseEvent | TouchEvent) {\n  let point: { pageX: number; pageY: number };\n\n  if (isTouchEvent(event)) {\n    // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n    point = event.touches[0] || event.changedTouches[0];\n  } else {\n    point = event;\n  }\n\n  return point;\n}\n","<div class=\"mtx-clock-wrapper\">\n  <div class=\"mtx-clock-center\"></div>\n  <div class=\"mtx-clock-hand\" [style]=\"_hand\"></div>\n  <div class=\"mtx-clock-hours\" [class.active]=\"_hourView\">\n    @for (item of _hours; track item.value) {\n      <div\n        class=\"mtx-clock-cell\"\n        [class.mtx-clock-cell-disabled]=\"!item.enabled\"\n        [class.mtx-clock-cell-selected]=\"_selectedHour === item.value\"\n        [style.fontSize]=\"item.fontSize\"\n        [style.left]=\"item.left+'%'\"\n        [style.top]=\"item.top+'%'\">{{ item.displayValue }}</div>\n    }\n  </div>\n  <div class=\"mtx-clock-minutes\" [class.active]=\"!_hourView\">\n    @for (item of _minutes; track item.value) {\n      <div\n        class=\"mtx-clock-cell\"\n        [class.mtx-clock-cell-disabled]=\"!item.enabled\"\n        [class.mtx-clock-cell-selected]=\"_selectedMinute === item.value\"\n        [style.left]=\"item.left+'%'\"\n        [style.top]=\"item.top+'%'\">{{ item.displayValue }}</div>\n    }\n  </div>\n</div>\n","import {\n  animate,\n  AnimationTriggerMetadata,\n  keyframes,\n  state,\n  style,\n  transition,\n  trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material datetimepicker.\n * @docs-private\n */\nexport const mtxDatetimepickerAnimations: {\n  readonly transformPanel: AnimationTriggerMetadata;\n  readonly fadeInCalendar: AnimationTriggerMetadata;\n  readonly slideCalendar: AnimationTriggerMetadata;\n} = {\n  /** Transforms the height of the datetimepicker's calendar. */\n  transformPanel: trigger('transformPanel', [\n    transition(\n      'void => enter-dropdown',\n      animate(\n        '120ms cubic-bezier(0, 0, 0.2, 1)',\n        keyframes([\n          style({ opacity: 0, transform: 'scale(1, 0.8)' }),\n          style({ opacity: 1, transform: 'scale(1, 1)' }),\n        ])\n      )\n    ),\n    transition(\n      'void => enter-dialog',\n      animate(\n        '150ms cubic-bezier(0, 0, 0.2, 1)',\n        keyframes([\n          style({ opacity: 0, transform: 'scale(0.7)' }),\n          style({ transform: 'none', opacity: 1 }),\n        ])\n      )\n    ),\n    transition('* => void', animate('100ms linear', style({ opacity: 0 }))),\n  ]),\n\n  /** Fades in the content of the calendar. */\n  fadeInCalendar: trigger('fadeInCalendar', [\n    state('void', style({ opacity: 0 })),\n    state('enter', style({ opacity: 1 })),\n\n    // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n    // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n    transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')),\n  ]),\n\n  slideCalendar: trigger('slideCalendar', [\n    transition('* => left', [\n      animate(\n        180,\n        keyframes([\n          style({ transform: 'translateX(100%)', offset: 0.5 }),\n          style({ transform: 'translateX(-100%)', offset: 0.51 }),\n          style({ transform: 'translateX(0)', offset: 1 }),\n        ])\n      ),\n    ]),\n    transition('* => right', [\n      animate(\n        180,\n        keyframes([\n          style({ transform: 'translateX(-100%)', offset: 0.5 }),\n          style({ transform: 'translateX(100%)', offset: 0.51 }),\n          style({ transform: 'translateX(0)', offset: 1 }),\n        ])\n      ),\n    ]),\n  ]),\n};\n","/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n  return Error(\n    `MtxDatetimepicker: No provider found for ${provider}. You must add one of the following ` +\n      `to your app config: provideNativeDatetimeAdapter, provideDateFnsDatetimeAdapter,` +\n      `provideLuxonDatetimeAdapter, provideMomentDatetimeAdapter, or provide a ` +\n      `custom implementation.`\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MtxCalendarCell {\n  constructor(\n    public value: number,\n    public displayValue: string,\n    public ariaLabel: string,\n    public enabled: boolean\n  ) {}\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n  selector: '[mtx-calendar-body]',\n  templateUrl: 'calendar-body.html',\n  styleUrl: 'calendar-body.scss',\n  host: {\n    class: 'mtx-calendar-body',\n  },\n  exportAs: 'mtxCalendarBody',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class MtxCalendarBody {\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() rows!: MtxCalendarCell[][];\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 = 7;\n\n  /** Whether to allow selection of disabled cells. */\n  @Input() allowDisabledSelection = false;\n\n  /** The cell number of the active cell in the table. */\n  @Input() activeCell = 0;\n\n  /** Emits when a new value is selected. */\n  @Output() selectedValueChange = new EventEmitter<number>();\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  _cellClicked(cell: MtxCalendarCell): void {\n    if (!this.allowDisabledSelection && !cell.enabled) {\n      return;\n    }\n    this.selectedValueChange.emit(cell.value);\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  If there's not enough space in the first row, create a separate label row. We mark this row as\n  aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n  <tr aria-hidden=\"true\">\n    <td class=\"mtx-calendar-body-label\" [attr.colspan]=\"numCols\">{{ label }}</td>\n  </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track row; let rowIndex = $index) {\n  <tr role=\"row\">\n    <!--\n      We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\n    -->\n    @if (rowIndex === 0 && _firstRowOffset) {\n      <td\n        class=\"mtx-calendar-body-label\" [attr.colspan]=\"_firstRowOffset\" aria-hidden=\"true\">\n        {{ _firstRowOffset >= labelMinRequiredCells ? label : '' }}\n      </td>\n    }\n    @for (item of row; track item; let colIndex = $index) {\n      <td\n        role=\"gridcell\"\n        class=\"mtx-calendar-body-cell\"\n        [class.mtx-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n        [class.mtx-calendar-body-disabled]=\"!item.enabled\"\n        [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n        [attr.data-mat-row]=\"rowIndex\"\n        [attr.data-mat-col]=\"colIndex\"\n        [attr.aria-label]=\"item.ariaLabel\"\n        [attr.aria-disabled]=\"!item.enabled || null\"\n        (click)=\"_cellClicked(item)\">\n        <div class=\"mtx-calendar-body-cell-content\"\n          [class.mtx-calendar-body-selected]=\"selectedValue === item.value\"\n          [class.mtx-calendar-body-today]=\"todayValue === item.value\"\n          [attr.aria-selected]=\"selectedValue === item.value\">\n          {{ item.displayValue }}\n        </div>\n      </td>\n    }\n  </tr>\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  DatetimeAdapter,\n  MTX_DATETIME_FORMATS,\n  MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\n\nconst DAYS_PER_WEEK = 7;\n\n/**\n * An internal component used to display a single month in the datetimepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mtx-month-view',\n  templateUrl: 'month-view.html',\n  exportAs: 'mtxMonthView',\n  animations: [mtxDatetimepickerAnimations.slideCalendar],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MtxCalendarBody],\n})\nexport class MtxMonthView<D> implements AfterContentInit {\n  @Input() type: MtxDatetimepickerType = 'date';\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter!: (date: D) => boolean;\n\n  /** Emits when a new date is selected. */\n  @Output() selectedChange = new EventEmitter<D>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection = new EventEmitter<void>();\n\n  /** Grid of calendar cells representing the dates of the month. */\n  _weeks!: MtxCalendarCell[][];\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  /** 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 }[];\n\n  _calendarState!: string;\n\n  constructor(\n    @Optional() public _adapter: DatetimeAdapter<D>,\n    @Optional() @Inject(MTX_DATETIME_FORMATS) private _dateFormats: MtxDatetimeFormats\n  ) {\n    if (!this._adapter) {\n      throw createMissingDateImplError('DatetimeAdapter');\n    }\n\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n    }\n\n    const firstDayOfWeek = this._adapter.getFirstDayOfWeek();\n    const narrowWeekdays = this._adapter.getDayOfWeekNames('narrow');\n    const longWeekdays = this._adapter.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] };\n    });\n    this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n    this._activeDate = this._adapter.today();\n  }\n\n  private _activeDate: D;\n\n  /**\n   * The date to display in this month view (everything other than the month and year is ignored).\n   */\n  @Input()\n  get activeDate(): D {\n    return this._activeDate;\n  }\n\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    this._activeDate = value || this._adapter.today();\n    if (\n      oldActiveDate &&\n      this._activeDate &&\n      !this._adapter.sameMonthAndYear(oldActiveDate, this._activeDate)\n    ) {\n      this._init();\n      if (this._adapter.isInNextMonth(oldActiveDate, this._activeDate)) {\n        this.calendarState('right');\n      } else {\n        this.calendarState('left');\n      }\n    }\n  }\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): D {\n    return this._selected;\n  }\n  set selected(value: D) {\n    this._selected = value;\n    this._selectedDate = this._getDateInCurrentMonth(this.selected);\n  }\n  private _selected!: D;\n\n  ngAfterContentInit(): void {\n    this._init();\n  }\n\n  /** Handles when a new date is selected. */\n  _dateSelected(date: number) {\n    const dateObject = this._adapter.createDatetime(\n      this._adapter.getYear(this.activeDate),\n      this._adapter.getMonth(this.activeDate),\n      date,\n      this._adapter.getHour(this.activeDate),\n      this._adapter.getMinute(this.activeDate)\n    );\n    this.selectedChange.emit(dateObject);\n    this._activeDate = dateObject;\n\n    if (this.type === 'date') {\n      this._userSelection.emit();\n    }\n  }\n\n  _calendarStateDone() {\n    this._calendarState = '';\n  }\n\n  /** Initializes this month view. */\n  private _init() {\n    this._selectedDate = this._getDateInCurrentMonth(this.selected);\n    this._todayDate = this._getDateInCurrentMonth(this._adapter.today());\n\n    const firstOfMonth = this._adapter.createDatetime(\n      this._adapter.getYear(this.activeDate),\n      this._adapter.getMonth(this.activeDate),\n      1,\n      this._adapter.getHour(this.activeDate),\n      this._adapter.getMinute(this.activeDate)\n    );\n    this._firstWeekOffset =\n      (DAYS_PER_WEEK +\n        this._adapter.getDayOfWeek(firstOfMonth) -\n        this._adapter.getFirstDayOfWeek()) %\n      DAYS_PER_WEEK;\n\n    this._createWeekCells();\n  }\n\n  /** Creates MdCalendarCells for the dates in this month. */\n  private _createWeekCells() {\n    const daysInMonth = this._adapter.getNumDaysInMonth(this.activeDate);\n    const dateNames = this._adapter.getDateNames();\n    this._weeks = [[]];\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._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        this._adapter.getMonth(this.activeDate),\n        i + 1,\n        this._adapter.getHour(this.activeDate),\n        this._adapter.getMinute(this.activeDate)\n      );\n      const enabled = !this.dateFilter || this.dateFilter(date);\n      const ariaLabel = this._adapter.format(date, this._dateFormats.display.dateA11yLabel);\n      this._weeks[this._weeks.length - 1].push(\n        new MtxCalendarCell(i + 1, dateNames[i], ariaLabel, enabled)\n      );\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): number | null {\n    return this._adapter.sameMonthAndYear(date, this.activeDate)\n      ? this._adapter.getDate(date)\n      : null;\n  }\n\n  private calendarState(direction: string): void {\n    this._calendarState = direction;\n  }\n}\n","<table class=\"mtx-calendar-table\" role=\"grid\">\n  <thead class=\"mtx-calendar-table-header\">\n    <tr>\n      @for (day of _weekdays; track day) {\n        <th [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\n      }\n    </tr>\n  </thead>\n  <tbody mtx-calendar-body\n    (@slideCalendar.done)=\"_calendarStateDone()\"\n    [@slideCalendar]=\"_calendarState\"\n    [rows]=\"_weeks\"\n    [todayValue]=\"_todayDate!\"\n    [activeCell]=\"_adapter.getDate(activeDate) - 1\"\n    [selectedValue]=\"_selectedDate!\"\n    (selectedValueChange)=\"_dateSelected($event)\"></tbody>\n</table>\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  DatetimeAdapter,\n  MTX_DATETIME_FORMATS,\n  MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display multiple years in the datetimepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mtx-multi-year-view',\n  templateUrl: 'multi-year-view.html',\n  exportAs: 'mtxMultiYearView',\n  animations: [mtxDatetimepickerAnimations.slideCalendar],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MtxCalendarBody],\n})\nexport class MtxMultiYearView<D> implements AfterContentInit {\n  @Input() type: MtxDatetimepickerType = 'date';\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter!: (date: D) => boolean;\n\n  /** Emits when a new month is selected. */\n  @Output() selectedChange = new EventEmitter<D>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection = new EventEmitter<void>();\n\n  /** Grid of calendar cells representing the years in the range. */\n  _years!: MtxCalendarCell[][];\n\n  /** The label for this year range (e.g. \"2000-2020\"). */\n  _yearLabel!: string;\n\n  /** The year in this range that today falls on. Null if today is in a different range. */\n  _todayYear!: number;\n\n  /**\n   * The year in this range that the selected Date falls on.\n   * Null if the selected Date is in a different range.\n   */\n  _selectedYear!: number | null;\n\n  _calendarState!: string;\n\n  constructor(\n    @Optional() public _adapter: DatetimeAdapter<D>,\n    @Optional() @Inject(MTX_DATETIME_FORMATS) private _dateFormats: MtxDatetimeFormats\n  ) {\n    if (!this._adapter) {\n      throw createMissingDateImplError('DatetimeAdapter');\n    }\n\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n    }\n\n    this._activeDate = this._adapter.today();\n  }\n\n  /** The date to display in this multi year view */\n  @Input()\n  get activeDate(): D {\n    return this._activeDate;\n  }\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    this._activeDate = value || this._adapter.today();\n    if (\n      oldActiveDate &&\n      this._activeDate &&\n      !isSameMultiYearView(\n        this._adapter,\n        oldActiveDate,\n        this._activeDate,\n        this.minDate,\n        this.maxDate\n      )\n    ) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): D {\n    return this._selected;\n  }\n  set selected(value: D) {\n    this._selected = value;\n    this._selectedYear = this._selected && this._adapter.getYear(this._selected);\n  }\n  private _selected!: D;\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._adapter.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._adapter.deserialize(value));\n  }\n  private _maxDate!: D | null;\n\n  ngAfterContentInit() {\n    this._init();\n  }\n\n  /** Handles when a new year is selected. */\n  _yearSelected(year: number) {\n    const month = this._adapter.getMonth(this.activeDate);\n    const normalizedDate = this._adapter.createDatetime(year, month, 1, 0, 0);\n\n    const dateObject = this._adapter.createDatetime(\n      year,\n      month,\n      Math.min(\n        this._adapter.getDate(this.activeDate),\n        this._adapter.getNumDaysInMonth(normalizedDate)\n      ),\n      this._adapter.getHour(this.activeDate),\n      this._adapter.getMinute(this.activeDate)\n    );\n\n    this.selectedChange.emit(dateObject);\n    this._activeDate = dateObject;\n\n    if (this.type === 'year') {\n      this._userSelection.emit();\n    }\n  }\n\n  _getActiveCell(): number {\n    return getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);\n  }\n\n  _calendarStateDone() {\n    this._calendarState = '';\n  }\n\n  /** Initializes this year view. */\n  private _init() {\n    this._todayYear = this._adapter.getYear(this._adapter.today());\n    this._yearLabel = this._adapter.getYearName(this.activeDate);\n\n    const activeYear = this._adapter.getYear(this.activeDate);\n\n    const minYearOfPage =\n      activeYear - getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);\n\n    this._years = [];\n    for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n      row.push(minYearOfPage + i);\n      if (row.length === yearsPerRow) {\n        this._years.push(row.map(year => this._createCellForYear(year)));\n        row = [];\n      }\n    }\n  }\n\n  /** Creates an MtxCalendarCell for the given year. */\n  private _createCellForYear(year: number) {\n    const yearName = this._adapter.getYearName(this._adapter.createDate(year, 0, 1));\n    return new MtxCalendarCell(year, yearName, yearName, this._shouldEnableYear(year));\n  }\n\n  /** Whether the given year is enabled. */\n  private _shouldEnableYear(year: number) {\n    // disable if the year is greater than maxDate lower than minDate\n    if (\n      year === undefined ||\n      year === null ||\n      (this.maxDate && year > this._adapter.getYear(this.maxDate)) ||\n      (this.minDate && year < this._adapter.getYear(this.minDate))\n    ) {\n      return false;\n    }\n\n    // enable if it reaches here and there's no filter defined\n    if (!this.dateFilter) {\n      return true;\n    }\n\n    const firstOfYear = this._adapter.createDate(year, 0, 1);\n\n    // If any date in the year is enabled count the year as enabled.\n    for (\n      let date = firstOfYear;\n      this._adapter.getYear(date) === year;\n      date = this._adapter.addCalendarDays(date, 1)\n    ) {\n      if (this.dateFilter(date)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Gets the year in this years range that the given Date falls on.\n   * Returns null if the given Date is not in this range.\n   */\n  private _getYearInCurrentRange(date: D) {\n    const year = this._adapter.getYear(date);\n    return this._isInRange(year) ? year : null;\n  }\n\n  /**\n   * Validate if the current year is in the current range\n   * Returns true if is in range else returns false\n   */\n  private _isInRange(year: number): boolean {\n    return true;\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._adapter.isDateInstance(obj) && this._adapter.isValid(obj) ? obj : null;\n  }\n}\n\nexport function isSameMultiYearView<D>(\n  dateAdapter: DatetimeAdapter<D>,\n  date1: D,\n  date2: D,\n  minDate: D | null,\n  maxDate: D | null\n): boolean {\n  const year1 = dateAdapter.getYear(date1);\n  const year2 = dateAdapter.getYear(date2);\n  const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n  return (\n    Math.floor((year1 - startingYear) / yearsPerPage) ===\n    Math.floor((year2 - startingYear) / yearsPerPage)\n  );\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(\n  dateAdapter: DatetimeAdapter<D>,\n  activeDate: D,\n  minDate: D | null,\n  maxDate: D | null\n): number {\n  const activeYear = dateAdapter.getYear(activeDate);\n  return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(\n  dateAdapter: DatetimeAdapter<D>,\n  minDate: D | null,\n  maxDate: D | null\n): number {\n  let startingYear = 0;\n  if (maxDate) {\n    const maxYear = dateAdapter.getYear(maxDate);\n    startingYear = maxYear - yearsPerPage + 1;\n  } else if (minDate) {\n    startingYear = dateAdapter.getYear(minDate);\n  }\n  return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a: number, b: number): number {\n  return ((a % b) + b) % b;\n}\n","<table class=\"mtx-calendar-table\" role=\"grid\">\n  <thead class=\"mtx-calendar-table-header\"></thead>\n  <tbody mtx-calendar-body\n         (@slideCalendar.done)=\"_calendarStateDone()\"\n         [@slideCalendar]=\"_calendarState\"\n         [todayValue]=\"_todayYear\"\n         [rows]=\"_years\"\n         [numCols]=\"4\"\n         [activeCell]=\"_getActiveCell()\"\n         [allowDisabledSelection]=\"true\"\n         [selectedValue]=\"_selectedYear!\"\n         (selectedValueChange)=\"_yearSelected($event)\"></tbody>\n</table>\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MtxDatetimepickerIntl {\n  /**\n   * Stream to emit from when labels are changed. Use this to notify components when the labels have\n   * changed after initialization.\n   */\n  readonly changes = new Subject<void>();\n\n  /** A label for the calendar popup (used by screen readers). */\n  calendarLabel = 'Calendar';\n\n  /** A label for the button used to open the calendar popup (used by screen readers). */\n  openCalendarLabel = 'Open calendar';\n\n  /** Label for the button used to close the calendar popup. */\n  closeCalendarLabel = 'Close calendar';\n\n  /** A label for the previous month button (used by screen readers). */\n  prevMonthLabel = 'Previous month';\n\n  /** A label for the next month button (used by screen readers). */\n  nextMonthLabel = 'Next month';\n\n  /** A label for the previous year button (used by screen readers). */\n  prevYearLabel = 'Previous year';\n\n  /** A label for the next year button (used by screen readers). */\n  nextYearLabel = 'Next year';\n\n  /** A label for the previous multi-year button (used by screen readers). */\n  prevMultiYearLabel = 'Previous 24 years';\n\n  /** A label for the next multi-year button (used by screen readers). */\n  nextMultiYearLabel = 'Next 24 years';\n\n  /** A label for the 'switch to month view' button (used by screen readers). */\n  switchToMonthViewLabel = 'Choose date';\n\n  /** A label for the 'switch to year view' button (used by screen readers). */\n  switchToYearViewLabel = 'Choose month';\n\n  /** A label for the 'switch to multi-year view' button (used by screen readers). */\n  switchToMultiYearViewLabel = 'Choose month and year';\n\n  /** A label for the first date of a range of dates (used by screen readers). */\n  startDateLabel = 'Start date';\n\n  /** A label for the last date of a range of dates (used by screen readers). */\n  endDateLabel = 'End date';\n\n  /** Formats a range of years (used for visuals). */\n  formatYearRange(start: string, end: string): string {\n    return `${start} \\u2013 ${end}`;\n  }\n\n  /** Formats a label for a range of years (used by screen readers). */\n  formatYearRangeLabel(start: string, end: string): string {\n    return `${start} to ${end}`;\n  }\n\n  /** A label for the 'switch to clock hour view' button (used by screen readers). */\n  switchToClockHourViewLabel = 'Choose hour';\n\n  /** A label for the 'switch to clock minute view' button (used by screen readers). */\n  switchToClockMinuteViewLabel = 'Choose minute';\n\n  /** Label used for ok button within the manual time input. */\n  okLabel = 'OK';\n\n  /** Label used for cancel button within the manual time input. */\n  cancelLabel = 'Cancel';\n}\n","import { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { SubscriptionLike } from 'rxjs';\n\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxClock, MtxClockView } from './clock';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxAMPM } from './datetimepicker-types';\n\nfunction pad(num: NumberInput, size: number) {\n  num = String(num);\n  while (num.length < size) num = '0' + num;\n  return num;\n}\n\n@Directive({\n  selector: 'input.mtx-time-input',\n  host: {\n    '(blur)': 'blur($event)',\n    '(focus)': 'focus($event)',\n  },\n  exportAs: 'mtxTimeInput',\n  standalone: true,\n})\nexport class MtxTimeInput implements OnDestroy {\n  @Input('timeInterval')\n  set timeInterval(value: NumberInput) {\n    this._interval = coerceNumberProperty(value);\n  }\n  private _interval: number = 1;\n\n  @Input('timeMin')\n  set timeMin(value: NumberInput) {\n    this._min = coerceNumberProperty(value);\n  }\n  private _min = 0;\n\n  @Input('timeMax')\n  set timeMax(value: NumberInput) {\n    this._max = coerceNumberProperty(value);\n  }\n  private _max = Infinity;\n\n  @Input('timeValue')\n  set timeValue(value: NumberInput) {\n    this._value = coerceNumberProperty(value);\n    if (!this.hasFocus) {\n      this.writeValue(this._value);\n    }\n    this.writePlaceholder(this._value);\n  }\n\n  @Output() timeValueChanged = new EventEmitter<NumberInput>();\n\n  private _value: NumberInput;\n\n  private keyDownListener = this.keyDownHandler.bind(this);\n  private keyPressListener = this.keyPressHandler.bind(this);\n  private inputEventListener = this.inputChangedHandler.bind(this);\n\n  constructor(\n    private element: ElementRef,\n    private cdr: ChangeDetectorRef\n  ) {\n    this.inputElement.addEventListener('keydown', this.keyDownListener, {\n      passive: true,\n    });\n\n    // Do not passive since we want to be able to preventDefault()\n    this.inputElement.addEventListener('keypress', this.keyPressListener);\n    this.inputElement.addEventListener('input', this.inputEventListener, {\n      passive: true,\n    });\n  }\n\n  get hasFocus() {\n    return this.element.nativeElement && this.element?.nativeElement === document?.activeElement;\n  }\n\n  get inputElement() {\n    return this.element.nativeElement as HTMLInputElement;\n  }\n\n  // We look here at the placeholder value, because we write '' into the value on focus\n  // placeholder should always be up to date with \"currentValue\"\n  get valid() {\n    // At the start _value is undefined therefore this would result in not valid and\n    // make a ugly warning border afterwards we can safely check\n    if (this._value) {\n      const currentValue = String(this.inputElement.value);\n\n      // It can be that currentValue is empty due to we removing the value on focus,\n      // if that is the case we should check previous value which should be in the placeholder\n      if (currentValue.length) {\n        return this._value == this.inputElement.value;\n      } else {\n        return this._value == this.inputElement.placeholder;\n      }\n    }\n    return true;\n  }\n\n  get invalid() {\n    return !this.valid;\n  }\n\n  blur() {\n    this.writeValue(this._value);\n    this.writePlaceholder(this._value);\n  }\n\n  focus() {\n    this.writeValue('');\n  }\n\n  /**\n   * Write value to inputElement\n   * @param value NumberInput\n   */\n  writeValue(value: NumberInput) {\n    if (value !== '') {\n      this.inputElement.value = pad(value, 2);\n    } else {\n      this.inputElement.value = '';\n    }\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Writes value to placeholder\n   * @param value NumberInput\n   */\n  writePlaceholder(value: NumberInput) {\n    this.inputElement.placeholder = pad(value, 2);\n    this.cdr.markForCheck();\n  }\n\n  keyDownHandler(event: KeyboardEvent) {\n    if (String(this.inputElement.value).length > 0) {\n      let value: number | null = null;\n      if (event.keyCode === UP_ARROW) {\n        value = coerceNumberProperty(this._value);\n        value += this._interval;\n        event.stopPropagation();\n      } else if (event.keyCode === DOWN_ARROW) {\n        value = coerceNumberProperty(this._value);\n        value -= this._interval;\n        event.stopPropagation();\n      }\n\n      // if value has changed\n      if (typeof value === 'number') {\n        this.writeValue(value);\n        this.writePlaceholder(value);\n        this.clampInputValue();\n        this.timeValueChanged.emit(this._value);\n      }\n    }\n  }\n\n  /**\n   * Prevent non number inputs in the inputElement with the exception of Enter/BackSpace\n   * @param event KeyboardEvent\n   */\n  keyPressHandler(event: KeyboardEvent) {\n    const key = event?.key ?? null;\n    if (isNaN(Number(key)) && key !== 'Enter') {\n      event.preventDefault();\n    }\n  }\n\n  inputChangedHandler() {\n    this.clampInputValue();\n    this.timeValueChanged.emit(this._value);\n  }\n\n  clampInputValue() {\n    if (this.inputElement?.value === '') {\n      return;\n    }\n\n    const value = coerceNumberProperty(this.inputElement?.value ?? null);\n    // if this._min === 0, we should allow 0\n    if (value || (this._min === 0 && value === 0)) {\n      const clampedValue = Math.min(Math.max(value, this._min), this._max);\n      if (clampedValue !== value) {\n        this.writeValue(clampedValue);\n        this.writePlaceholder(clampedValue);\n      }\n      this._value = clampedValue;\n    }\n  }\n\n  /**\n   * Remove event listeners on destruction\n   */\n  ngOnDestroy(): void {\n    this.inputElement.removeEventListener('keydown', this.keyDownListener);\n    this.inputElement.removeEventListener('keypress', this.keyPressListener);\n    this.inputElement.removeEventListener('input', this.inputEventListener);\n  }\n}\n\n@Component({\n  selector: 'mtx-time',\n  templateUrl: 'time.html',\n  styleUrl: 'time.scss',\n  exportAs: 'mtxTime',\n  host: {\n    class: 'mtx-time',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MatButton, MtxClock, MtxTimeInput],\n})\nexport class MtxTime<D> implements OnChanges, AfterViewInit, OnDestroy {\n  /** Emits when the currently selected date changes. */\n  @Output() readonly selectedChange = new EventEmitter<D>();\n\n  /** Emits when any date changes. */\n  @Output() readonly activeDateChange = new EventEmitter<D>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection = new EventEmitter<void>();\n\n  /** Emits when AM/PM button are clicked. */\n  @Output() readonly ampmChange = new EventEmitter<MtxAMPM>();\n\n  /** Emits when AM/PM button are clicked. */\n  @Output() readonly clockViewChange = new EventEmitter<MtxClockView>();\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n  /** Step over minutes. */\n  @Input() interval: number = 1;\n\n  /** Input for action buttons. */\n  @Input() actionsPortal: TemplatePortal | null = null;\n\n  @ViewChild('hourInput', { read: ElementRef<HTMLInputElement> })\n  protected hourInputElement: ElementRef<HTMLInputElement> | undefined;\n\n  @ViewChild('hourInput', { read: MtxTimeInput })\n  protected hourInputDirective: MtxTimeInput | undefined;\n\n  @ViewChild('minuteInput', { read: ElementRef<HTMLInputElement> })\n  protected minuteInputElement: ElementRef<HTMLInputElement> | undefined;\n\n  @ViewChild('minuteInput', { read: MtxTimeInput })\n  protected minuteInputDirective: MtxTimeInput | undefined;\n\n  datetimepickerIntlChangesSubscription: SubscriptionLike;\n\n  /** Whether the clock uses 12 hour format. */\n  @Input({ transform: booleanAttribute }) twelvehour = false;\n\n  /** Whether the time is now in AM or PM. */\n  @Input() AMPM: MtxAMPM = 'AM';\n\n  /**\n   * The date to display in this clock view.\n   */\n  @Input()\n  get activeDate(): D {\n    return this._activeDate;\n  }\n  set activeDate(value: D) {\n    this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\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._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n    if (this._selected) {\n      this.activeDate = this._selected;\n    }\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\n  set minDate(value: D | null) {\n    this._minDate = this._adapter.getValidDateOrNull(this._adapter.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._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n  }\n  private _maxDate!: D | null;\n\n  /** Whether the clock should be started in hour or minute view. */\n  @Input()\n  get clockView() {\n    return this._clockView;\n  }\n  set clockView(value: MtxClockView) {\n    this._clockView = value;\n  }\n  /** Whether the clock is in hour view. */\n  private _clockView: MtxClockView = 'hour';\n\n  get isHourView() {\n    return this._clockView === 'hour';\n  }\n\n  get isMinuteView() {\n    return this._clockView === 'hour';\n  }\n\n  get hour() {\n    if (!this.activeDate) {\n      if (this.twelvehour) {\n        return '12';\n      } else {\n        return '00';\n      }\n    }\n\n    const hour = Number(this._adapter.getHour(this.activeDate));\n    if (!this.twelvehour) {\n      return this.prefixWithZero(hour);\n    }\n\n    if (hour === 0) {\n      return '12';\n    } else {\n      return this.prefixWithZero(hour > 12 ? hour - 12 : hour);\n    }\n  }\n\n  get minute() {\n    if (this.activeDate) {\n      return this.prefixWithZero(this._adapter.getMinute(this.activeDate));\n    }\n\n    return '00';\n  }\n\n  prefixWithZero(value: number) {\n    if (value < 10) {\n      return '0' + String(value);\n    }\n\n    return String(value);\n  }\n\n  constructor(\n    private _adapter: DatetimeAdapter<D>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    protected _datetimepickerIntl: MtxDatetimepickerIntl\n  ) {\n    this.datetimepickerIntlChangesSubscription = this._datetimepickerIntl.changes.subscribe(() => {\n      this._changeDetectorRef.detectChanges();\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // when clockView changes by input we should focus the correct input\n    if (changes.clockView) {\n      if (changes.clockView.currentValue !== changes.clockView.previousValue) {\n        this.focusInputElement();\n      }\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.focusInputElement();\n  }\n\n  ngOnDestroy(): void {\n    if (this.datetimepickerIntlChangesSubscription) {\n      this.datetimepickerIntlChangesSubscription.unsubscribe();\n    }\n  }\n\n  focusInputElement() {\n    if (this.clockView === 'hour') {\n      if (this.hourInputElement) {\n        this.hourInputElement.nativeElement.focus();\n      }\n    } else {\n      if (this.minuteInputElement) {\n        this.minuteInputElement.nativeElement.focus();\n      }\n    }\n  }\n\n  _handleHourInputChange(value: NumberInput) {\n    const hour = coerceNumberProperty(value);\n    if (hour || hour === 0) {\n      const newValue = this._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        this._adapter.getMonth(this.activeDate),\n        this._adapter.getDate(this.activeDate),\n        this._updateHourForAmPm(hour),\n        this._adapter.getMinute(this.activeDate)\n      );\n\n      this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);\n      this.activeDateChange.emit(this.activeDate);\n\n      // If previously we did set [mtxValue]=\"13\" and the input changed to 6, and the clamping\n      // will make it \"13\" again then the hourInputDirective will not have been updated\n      // since \"13\" === \"13\" same reference so no change detected by directly setting it within\n      // this handler, we handle this usecase\n      if (this.hourInputDirective) {\n        this.hourInputDirective.timeValue = this.hour;\n      }\n    }\n  }\n\n  _updateHourForAmPm(value: number) {\n    if (!this.twelvehour) {\n      return value;\n    }\n\n    // value should be between 1-12\n    if (this.AMPM === 'AM') {\n      if (value === 0 || value === 12) {\n        return 0;\n      }\n      return value;\n    }\n    // PM\n    else {\n      if (value === 0 || value === 12) {\n        return 12;\n      }\n\n      // other cases, we should add 12 to the value aka 3:00 PM = 3 + 12 = 15:00\n      return value + 12;\n    }\n  }\n\n  _handleMinuteInputChange(value: NumberInput) {\n    const minute = coerceNumberProperty(value);\n    if (minute || minute === 0) {\n      const newValue = this._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        this._adapter.getMonth(this.activeDate),\n        this._adapter.getDate(this.activeDate),\n        this._adapter.getHour(this.activeDate),\n        minute\n      );\n\n      this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);\n      this.activeDateChange.emit(this.activeDate);\n\n      // If previously we did set [mtxValue]=\"40\" and the input changed to 30, and the clamping\n      // will make it \"40\" again then the minuteInputDirective will not have been updated\n      // since \"40\" === \"40\" same reference so no change detected by directly setting it within\n      // this handler, we handle this usecase\n      if (this.minuteInputDirective) {\n        this.minuteInputDirective.timeValue = this.minute;\n      }\n    }\n  }\n\n  _handleFocus(clockView: MtxClockView) {\n    this.clockView = clockView;\n    this.clockViewChange.emit(clockView);\n  }\n\n  _timeSelected(date: D): void {\n    if (this.clockView === 'hour') {\n      this.clockView = 'minute';\n    }\n    this._activeDate = this.selected = date;\n  }\n\n  _onActiveDateChange(date: D) {\n    this._activeDate = date;\n    this.activeDateChange.emit(date);\n  }\n\n  _handleSelection() {\n    if (this.actionsPortal && this._selected) {\n      this.selectedChange.emit(this._selected);\n    }\n  }\n\n  _handleOk() {\n    if (this._selected) {\n      this.selectedChange.emit(this._selected);\n    }\n    this._userSelection.emit();\n  }\n\n  _handleCancel() {\n    this._userSelection.emit();\n  }\n}\n","<div class=\"mtx-time-input-wrapper\">\n  <div class=\"mtx-time-input-inner\">\n    <input class=\"mtx-time-input\"\n      [class.mtx-time-input-active]=\"clockView === 'hour'\"\n      [class.mtx-time-input-warning]=\"!hourInput.valid\"\n      #hourInput=\"mtxTimeInput\"\n      type=\"text\"\n      inputmode=\"numeric\"\n      maxlength=\"2\"\n      [timeMin]=\"twelvehour ? 1 : 0\"\n      [timeMax]=\"twelvehour ? 12 : 23\"\n      [timeValue]=\"hour\"\n      (timeValueChanged)=\"_handleHourInputChange($event)\"\n      (focus)=\"_handleFocus('hour')\" />\n\n    <div class=\"mtx-time-seperator\">:</div>\n\n    <input class=\"mtx-time-input\"\n      [class.mtx-time-input-active]=\"clockView === 'minute'\"\n      [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n      #minuteInput=\"mtxTimeInput\"\n      type=\"text\"\n      inputmode=\"numeric\"\n      maxlength=\"2\"\n      [timeMin]=\"0\"\n      [timeMax]=\"59\"\n      [timeValue]=\"minute\"\n      (timeValueChanged)=\"_handleMinuteInputChange($event)\"\n      [timeInterval]=\"interval\"\n      (focus)=\"_handleFocus('minute')\" />\n\n    @if (twelvehour) {\n      <div class=\"mtx-time-ampm\">\n        <button mat-button type=\"button\" class=\"mtx-time-am\"\n          [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n          (keydown)=\"$event.stopPropagation()\"\n          (click)=\"ampmChange.emit('AM')\">AM</button>\n        <button mat-button type=\"button\" class=\"mtx-time-pm\"\n          [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n          (keydown)=\"$event.stopPropagation()\"\n          (click)=\"ampmChange.emit('PM')\">PM</button>\n      </div>\n    }\n  </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n  (activeDateChange)=\"_onActiveDateChange($event)\"\n  (_userSelection)=\"_handleSelection()\"\n  [AMPM]=\"AMPM\"\n  [dateFilter]=\"dateFilter\"\n  [interval]=\"interval\"\n  [maxDate]=\"maxDate\"\n  [minDate]=\"minDate\"\n  [selected]=\"selected\"\n  [startView]=\"clockView\"\n  [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n@if (!actionsPortal) {\n  <div class=\"mtx-time-button-wrapper\">\n    <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"_handleCancel()\">\n      {{ _datetimepickerIntl.cancelLabel }}\n    </button>\n    <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"_handleOk()\"\n      [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n      {{ _datetimepickerIntl.okLabel }}\n    </button>\n  </div>\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  DatetimeAdapter,\n  MTX_DATETIME_FORMATS,\n  MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\n\n/**\n * An internal component used to display a single year in the datetimepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mtx-year-view',\n  templateUrl: 'year-view.html',\n  exportAs: 'mtxYearView',\n  animations: [mtxDatetimepickerAnimations.slideCalendar],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MtxCalendarBody],\n})\nexport class MtxYearView<D> implements AfterContentInit {\n  @Input() type: MtxDatetimepickerType = 'date';\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter!: (date: D) => boolean;\n\n  /** Emits when a new month is selected. */\n  @Output() selectedChange = new EventEmitter<D>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection = new EventEmitter<void>();\n\n  /** Grid of calendar cells representing the months of the year. */\n  _months!: MtxCalendarCell[][];\n\n  /** The label for this year (e.g. \"2017\"). */\n  _yearLabel!: string;\n\n  /** The month in this year that today falls on. Null if today is in a different year. */\n  _todayMonth!: number | null;\n\n  /**\n   * The month in this year that the selected Date falls on.\n   * Null if the selected Date is in a different year.\n   */\n  _selectedMonth!: number | null;\n\n  _calendarState!: string;\n\n  constructor(\n    @Optional() public _adapter: DatetimeAdapter<D>,\n    @Optional() @Inject(MTX_DATETIME_FORMATS) private _dateFormats: MtxDatetimeFormats\n  ) {\n    if (!this._adapter) {\n      throw createMissingDateImplError('DatetimeAdapter');\n    }\n\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n    }\n\n    this._activeDate = this._adapter.today();\n  }\n\n  private _activeDate: D;\n\n  /** The date to display in this year view (everything other than the year is ignored). */\n  @Input()\n  get activeDate(): D {\n    return this._activeDate;\n  }\n\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    this._activeDate = value || this._adapter.today();\n    if (\n      oldActiveDate &&\n      this._activeDate &&\n      !this._adapter.sameYear(oldActiveDate, this._activeDate)\n    ) {\n      this._init();\n      // if (oldActiveDate < this._activeDate) {\n      //  this.calendarState('right');\n      // } else {\n      //  this.calendarState('left');\n      // }\n    }\n  }\n\n  private _selected!: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): D {\n    return this._selected;\n  }\n\n  set selected(value: D) {\n    this._selected = value;\n    this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n  }\n\n  ngAfterContentInit() {\n    this._init();\n  }\n\n  /** Handles when a new month is selected. */\n  _monthSelected(month: number) {\n    const normalizedDate = this._adapter.createDatetime(\n      this._adapter.getYear(this.activeDate),\n      month,\n      1,\n      0,\n      0\n    );\n\n    const dateObject = this._adapter.createDatetime(\n      this._adapter.getYear(this.activeDate),\n      month,\n      Math.min(\n        this._adapter.getDate(this.activeDate),\n        this._adapter.getNumDaysInMonth(normalizedDate)\n      ),\n      this._adapter.getHour(this.activeDate),\n      this._adapter.getMinute(this.activeDate)\n    );\n\n    this.selectedChange.emit(dateObject);\n    this._activeDate = dateObject;\n\n    if (this.type === 'month') {\n      this._userSelection.emit();\n    }\n  }\n\n  _calendarStateDone() {\n    this._calendarState = '';\n  }\n\n  /** Initializes this month view. */\n  private _init() {\n    this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n    this._todayMonth = this._getMonthInCurrentYear(this._adapter.today());\n    this._yearLabel = this._adapter.getYearName(this.activeDate);\n\n    const monthNames = this._adapter.getMonthNames('short');\n    // First row of months only contains 5 elements so we can fit the year label on the same row.\n    this._months = [\n      [0, 1, 2, 3],\n      [4, 5, 6, 7],\n      [8, 9, 10, 11],\n    ].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n  }\n\n  /**\n   * Gets the month in this year that the given Date falls on.\n   * Returns null if the given Date is in another year.\n   */\n  private _getMonthInCurrentYear(date: D) {\n    return this._adapter.sameYear(date, this.activeDate) ? this._adapter.getMonth(date) : null;\n  }\n\n  /** Creates an MdCalendarCell for the given month. */\n  private _createCellForMonth(month: number, monthName: string) {\n    const ariaLabel = this._adapter.format(\n      this._adapter.createDatetime(\n        this._adapter.getYear(this.activeDate),\n        month,\n        1,\n        this._adapter.getHour(this.activeDate),\n        this._adapter.getMinute(this.activeDate)\n      ),\n      this._dateFormats.display.monthYearA11yLabel\n    );\n    return new MtxCalendarCell(\n      month,\n      monthName.toLocaleUpperCase(),\n      ariaLabel,\n      this._isMonthEnabled(month)\n    );\n  }\n\n  // private calendarState(direction: string): void {\n  //   this._calendarState = direction;\n  // }\n\n  /** Whether the given month is enabled. */\n  private _isMonthEnabled(month: number) {\n    if (!this.dateFilter) {\n      return true;\n    }\n\n    const firstOfMonth = this._adapter.createDatetime(\n      this._adapter.getYear(this.activeDate),\n      month,\n      1,\n      this._adapter.getHour(this.activeDate),\n      this._adapter.getMinute(this.activeDate)\n    );\n\n    // If any date in the month is enabled count the month as enabled.\n    for (\n      let date = firstOfMonth;\n      this._adapter.getMonth(date) === month;\n      date = this._adapter.addCalendarDays(date, 1)\n    ) {\n      if (this.dateFilter(date)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\n","<table class=\"mtx-calendar-table\" role=\"grid\">\n  <thead class=\"mtx-calendar-table-header\"></thead>\n  <tbody mtx-calendar-body\n         (@slideCalendar.done)=\"_calendarStateDone()\"\n         [@slideCalendar]=\"_calendarState\"\n         [label]=\"_yearLabel\"\n         [rows]=\"_months\"\n         [todayValue]=\"_todayMonth!\"\n         [labelMinRequiredCells]=\"2\"\n         [numCols]=\"4\"\n         [activeCell]=\"_adapter.getMonth(activeDate)\"\n         [selectedValue]=\"_selectedMonth!\"\n         (selectedValueChange)=\"_monthSelected($event)\"\n         [allowDisabledSelection]=\"true\"></tbody>\n</table>\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  CdkPortalOutlet,\n  ComponentPortal,\n  ComponentType,\n  Portal,\n  TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Injector,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n  ViewEncapsulation,\n  afterNextRender,\n  booleanAttribute,\n  inject,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n  DatetimeAdapter,\n  MTX_DATETIME_FORMATS,\n  MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { Subscription } from 'rxjs';\nimport { MtxClock, MtxClockView } from './clock';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxAMPM, MtxCalendarView, MtxDatetimepickerType } from './datetimepicker-types';\nimport { MtxMonthView } from './month-view';\nimport {\n  MtxMultiYearView,\n  getActiveOffset,\n  isSameMultiYearView,\n  yearsPerPage,\n  yearsPerRow,\n} from './multi-year-view';\nimport { MtxTime } from './time';\nimport { MtxYearView } from './year-view';\n\n/**\n * A calendar that is used as part of the datetimepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mtx-calendar',\n  templateUrl: 'calendar.html',\n  styleUrl: 'calendar.scss',\n  host: {\n    'class': 'mtx-calendar',\n    '[class.mtx-calendar-with-time-input]': 'timeInput',\n    'tabindex': '0',\n    '(keydown)': '_handleCalendarBodyKeydown($event)',\n  },\n  exportAs: 'mtxCalendar',\n  animations: [mtxDatetimepickerAnimations.slideCalendar],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CdkPortalOutlet,\n    MatButton,\n    MatIconButton,\n    MtxMonthView,\n    MtxYearView,\n    MtxMultiYearView,\n    MtxTime,\n    MtxClock,\n  ],\n})\nexport class MtxCalendar<D> implements AfterContentInit, OnDestroy {\n  /** Whether to show multi-year view. */\n  @Input({ transform: booleanAttribute }) multiYearSelector = false;\n\n  /** Whether the clock uses 12 hour format. */\n  @Input({ transform: booleanAttribute }) twelvehour = false;\n\n  /** Whether the calendar should be started in month or year view. */\n  @Input() startView: MtxCalendarView = 'month';\n\n  /** Step over minutes. */\n  @Input() timeInterval: number = 1;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n  /** Prevent user to select same date time */\n  @Input() preventSameDateTimeSelection = false;\n\n  /** Input for custom header component */\n  @Input() headerComponent!: ComponentType<any>;\n\n  /** Input for action buttons. */\n  @Input() actionsPortal: TemplatePortal | null = null;\n\n  /** Emits when the currently selected date changes. */\n  @Output() selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits when the view has been changed. */\n  @Output() viewChanged: EventEmitter<MtxCalendarView> = new EventEmitter<MtxCalendarView>();\n\n  @Output() _userSelection = new EventEmitter<void>();\n\n  _AMPM!: MtxAMPM;\n\n  _clockView: MtxClockView = 'hour';\n\n  _calendarState!: string;\n\n  /** A portal containing the header component. */\n  _calendarHeaderPortal!: Portal<any>;\n\n  private _intlChanges: Subscription;\n\n  private _clampedActiveDate!: D;\n\n  private _injector = inject(Injector);\n\n  constructor(\n    private _elementRef: ElementRef,\n    private _intl: MtxDatetimepickerIntl,\n    private _ngZone: NgZone,\n    @Optional() private _adapter: DatetimeAdapter<D>,\n    @Optional() @Inject(MTX_DATETIME_FORMATS) private _dateFormats: MtxDatetimeFormats,\n    _changeDetectorRef: ChangeDetectorRef\n  ) {\n    if (!this._adapter) {\n      throw createMissingDateImplError('DatetimeAdapter');\n    }\n\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n    }\n\n    this._intlChanges = _intl.changes.subscribe(() => _changeDetectorRef.markForCheck());\n  }\n\n  /** The display type of datetimepicker. */\n  @Input()\n  get type(): MtxDatetimepickerType {\n    return this._type;\n  }\n  set type(value: MtxDatetimepickerType) {\n    this._type = value || 'date';\n    if (this.type === 'year') {\n      this.multiYearSelector = true;\n    }\n  }\n  private _type: MtxDatetimepickerType = 'date';\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._adapter.getValidDateOrNull(value);\n  }\n  private _startAt!: D | null;\n\n  /**\n   * Whether the calendar is in time mode. In time mode the calendar clock gets time input elements\n   * rather then just clock. When touchUi is enabled this will be disabled\n   */\n  @Input({ transform: booleanAttribute }) timeInput = false;\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._adapter.getValidDateOrNull(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._adapter.getValidDateOrNull(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._adapter.getValidDateOrNull(value);\n  }\n  private _maxDate!: D | null;\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\n  set _activeDate(value: D) {\n    const oldActiveDate = this._clampedActiveDate;\n    this._clampedActiveDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n\n    // whenever active date changed, and possibly got clamped we should adjust the am/pm setting\n    this._selectAMPM(this._clampedActiveDate);\n    if (\n      oldActiveDate &&\n      this._clampedActiveDate &&\n      this.currentView === 'month' &&\n      !this._adapter.sameMonthAndYear(oldActiveDate, this._clampedActiveDate)\n    ) {\n      if (this._adapter.isInNextMonth(oldActiveDate, this._clampedActiveDate)) {\n        this.calendarState('right');\n      } else {\n        this.calendarState('left');\n      }\n    }\n  }\n\n  /** Whether the calendar is in month view. */\n  get currentView(): MtxCalendarView {\n    return this._currentView;\n  }\n  set currentView(view: MtxCalendarView) {\n    this._currentView = view;\n    this.viewChanged.emit(view);\n  }\n  private _currentView!: MtxCalendarView;\n\n  get _yearPeriodText(): string {\n    if (this.currentView === 'multi-year') {\n      // The offset from the active year to the \"slot\" for the starting year is the\n      // *actual* first rendered year in the multi-year view, and the last year is\n      // just yearsPerPage - 1 away.\n      const activeYear = this._adapter.getYear(this._activeDate);\n      const minYearOfPage =\n        activeYear - getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate);\n      const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n      const minYearName = this._adapter.getYearName(this._adapter.createDate(minYearOfPage, 0, 1));\n      const maxYearName = this._adapter.getYearName(this._adapter.createDate(maxYearOfPage, 0, 1));\n      return this._intl.formatYearRange(minYearName, maxYearName);\n    }\n\n    return this.currentView === 'month'\n      ? this._adapter.getMonthNames('long')[this._adapter.getMonth(this._activeDate)]\n      : this._adapter.getYearName(this._activeDate);\n  }\n\n  get _yearButtonText(): string {\n    return this._adapter.getYearName(this._activeDate);\n  }\n\n  get _yearButtonLabel(): string {\n    return this.multiYearSelector\n      ? this._intl.switchToMultiYearViewLabel\n      : this._intl.switchToYearViewLabel;\n  }\n\n  get _dateButtonText(): string {\n    switch (this.type) {\n      case 'month':\n        return this._adapter.getMonthNames('long')[this._adapter.getMonth(this._activeDate)];\n      default:\n        return this._adapter.format(\n          this._activeDate,\n          this._dateFormats.display.popupHeaderDateLabel\n        );\n    }\n  }\n\n  get _dateButtonLabel(): string {\n    return this._intl.switchToMonthViewLabel;\n  }\n\n  get _hoursButtonText(): string {\n    let hour = this._adapter.getHour(this._activeDate);\n    if (this.twelvehour) {\n      if (hour === 0) {\n        hour = 24;\n      }\n      hour = hour > 12 ? hour - 12 : hour;\n    }\n    return this._2digit(hour);\n  }\n\n  get _hourButtonLabel(): string {\n    return this._intl.switchToClockHourViewLabel;\n  }\n\n  get _minutesButtonText(): string {\n    return this._2digit(this._adapter.getMinute(this._activeDate));\n  }\n\n  get _minuteButtonLabel(): string {\n    return this._intl.switchToClockMinuteViewLabel;\n  }\n\n  get _prevButtonLabel(): string {\n    switch (this._currentView) {\n      case 'month':\n        return this._intl.prevMonthLabel;\n      case 'year':\n        return this._intl.prevYearLabel;\n      case 'multi-year':\n        return this._intl.prevMultiYearLabel;\n      default:\n        return '';\n    }\n  }\n\n  get _nextButtonLabel(): string {\n    switch (this._currentView) {\n      case 'month':\n        return this._intl.nextMonthLabel;\n      case 'year':\n        return this._intl.nextYearLabel;\n      case 'multi-year':\n        return this._intl.nextMultiYearLabel;\n      default:\n        return '';\n    }\n  }\n\n  /** Date filter for the month and year views. */\n  _dateFilterForViews = (date: D) => {\n    return (\n      !!date &&\n      (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.DATE)) &&\n      (!this.minDate || this._adapter.compareDate(date, this.minDate) >= 0) &&\n      (!this.maxDate || this._adapter.compareDate(date, this.maxDate) <= 0)\n    );\n  };\n\n  _userSelected(): void {\n    this._userSelection.emit();\n  }\n\n  ngAfterContentInit() {\n    if (this.headerComponent) {\n      this._calendarHeaderPortal = new ComponentPortal(this.headerComponent);\n    }\n    this._activeDate = this.startAt || this._adapter.today();\n    this._selectAMPM(this._activeDate);\n\n    if (this.type === 'year') {\n      this.currentView = 'multi-year';\n    } else if (this.type === 'month') {\n      this.currentView = 'year';\n    } else if (this.type === 'time') {\n      this.currentView = 'clock';\n    } else {\n      this.currentView = this.startView || 'month';\n    }\n  }\n\n  ngOnDestroy() {\n    this._intlChanges.unsubscribe();\n  }\n\n  /** Handles date selection in the month view. */\n  _dateSelected(date: D): void {\n    if (this.type === 'date') {\n      if (!this._adapter.sameDate(date, this.selected) || !this.preventSameDateTimeSelection) {\n        this.selectedChange.emit(date);\n      }\n    } else {\n      this.selectedChange.emit(date);\n      this._activeDate = date;\n      this.currentView = 'clock';\n    }\n  }\n\n  /** Handles month selection in the year view. */\n  _monthSelected(month: D): void {\n    if (this.type === 'month') {\n      if (\n        !this._adapter.sameMonthAndYear(month, this.selected) ||\n        !this.preventSameDateTimeSelection\n      ) {\n        this.selectedChange.emit(this._adapter.getFirstDateOfMonth(month));\n      }\n    } else {\n      this._activeDate = month;\n      this.currentView = 'month';\n      this._clockView = 'hour';\n    }\n  }\n\n  /** Handles year selection in the multi year view. */\n  _yearSelected(year: D): void {\n    if (this.type === 'year') {\n      if (!this._adapter.sameYear(year, this.selected as D) || !this.preventSameDateTimeSelection) {\n        const normalizedDate = this._adapter.createDatetime(\n          this._adapter.getYear(year),\n          0,\n          1,\n          0,\n          0\n        );\n        this.selectedChange.emit(normalizedDate);\n      }\n    } else {\n      this._activeDate = year;\n      this.currentView = 'year';\n    }\n  }\n\n  _timeSelected(date: D) {\n    this._activeDate = this._updateDate(date);\n    if (!this._adapter.sameDatetime(date, this.selected) || !this.preventSameDateTimeSelection) {\n      this.selectedChange.emit(date);\n    }\n  }\n\n  _dialTimeSelected(date: D): void {\n    if (this._clockView !== 'minute') {\n      this._activeDate = this._updateDate(date);\n      this._clockView = 'minute';\n    } else {\n      if (!this._adapter.sameDatetime(date, this.selected) || !this.preventSameDateTimeSelection) {\n        this.selectedChange.emit(date);\n      }\n    }\n  }\n\n  _onActiveDateChange(date: D) {\n    this._activeDate = date;\n  }\n\n  _updateDate(date: D): D {\n    if (this.twelvehour) {\n      const HOUR = this._adapter.getHour(date);\n      if (HOUR === 12) {\n        if (this._AMPM === 'AM') {\n          return this._adapter.addCalendarHours(date, -12);\n        }\n      } else if (this._AMPM === 'PM') {\n        return this._adapter.addCalendarHours(date, 12);\n      }\n    }\n    return date;\n  }\n\n  _selectAMPM(date: D) {\n    const hour = this._adapter.getHour(date);\n    if (hour > 11) {\n      this._AMPM = 'PM';\n    } else {\n      this._AMPM = 'AM';\n    }\n  }\n\n  _ampmClicked(source: MtxAMPM): void {\n    this._currentView = 'clock';\n\n    if (source === this._AMPM) {\n      return;\n    }\n\n    // if AMPM changed from PM to AM substract 12 hours\n    const currentHour = this._adapter.getHour(this._activeDate);\n    let newHourValue;\n    if (source === 'AM') {\n      newHourValue = currentHour >= 12 ? this._adapter.getHour(this._activeDate) - 12 : 12;\n    }\n    // otherwise add 12 hours\n    else {\n      newHourValue = (currentHour + 12) % 24;\n    }\n\n    const newActiveDate = this._adapter.clampDate(\n      this._adapter.createDatetime(\n        this._adapter.getYear(this._activeDate),\n        this._adapter.getMonth(this._activeDate),\n        this._adapter.getDate(this._activeDate),\n        newHourValue,\n        this._adapter.getMinute(this._activeDate)\n      ),\n      this.minDate,\n      this.maxDate\n    );\n\n    // only if our clamped date is not changed, we know we can apply the newActiveDate to the\n    // activeDate\n    if (this._adapter.getHour(newActiveDate) === newHourValue) {\n      this._activeDate = newActiveDate;\n      this._AMPM = source;\n    }\n  }\n\n  _yearClicked(): void {\n    if (this.type === 'year' || this.multiYearSelector) {\n      this.currentView = 'multi-year';\n      return;\n    }\n    this.currentView = 'year';\n  }\n\n  _dateClicked(): void {\n    if (this.type !== 'month') {\n      this.currentView = 'month';\n    }\n  }\n\n  _hoursClicked(): void {\n    this.currentView = 'clock';\n    this._clockView = 'hour';\n  }\n\n  _minutesClicked(): void {\n    this.currentView = 'clock';\n    this._clockView = 'minute';\n  }\n\n  /** Handles user clicks on the previous button. */\n  _previousClicked(): void {\n    this._activeDate =\n      this.currentView === 'month'\n        ? this._adapter.addCalendarMonths(this._activeDate, -1)\n        : this._adapter.addCalendarYears(\n            this._activeDate,\n            this.currentView === 'year' ? -1 : -yearsPerPage\n          );\n  }\n\n  /** Handles user clicks on the next button. */\n  _nextClicked(): void {\n    this._activeDate =\n      this.currentView === 'month'\n        ? this._adapter.addCalendarMonths(this._activeDate, 1)\n        : this._adapter.addCalendarYears(\n            this._activeDate,\n            this.currentView === 'year' ? 1 : yearsPerPage\n          );\n  }\n\n  /** Whether the previous period button is enabled. */\n  _previousEnabled(): boolean {\n    if (!this.minDate) {\n      return true;\n    }\n    return !this.minDate || !this._isSameView(this._activeDate, this.minDate);\n  }\n\n  /** Whether the next period button is enabled. */\n  _nextEnabled(): boolean {\n    return !this.maxDate || !this._isSameView(this._activeDate, this.maxDate);\n  }\n\n  /** Handles keydown events on the calendar body. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n    // disabled ones from being selected. This may not be ideal, we should look into whether\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n    if (this.currentView === 'month') {\n      this._handleCalendarBodyKeydownInMonthView(event);\n    } else if (this.currentView === 'year') {\n      this._handleCalendarBodyKeydownInYearView(event);\n    } else if (this.currentView === 'multi-year') {\n      this._handleCalendarBodyKeydownInMultiYearView(event);\n    } else {\n      this._handleCalendarBodyKeydownInClockView(event);\n    }\n  }\n\n  _focusActiveCell() {\n    afterNextRender(\n      () => {\n        this._elementRef.nativeElement.focus();\n      },\n      { injector: this._injector }\n    );\n  }\n\n  _calendarStateDone() {\n    this._calendarState = '';\n  }\n\n  /** Whether the two dates represent the same view in the current view mode (month or year). */\n  private _isSameView(date1: D, date2: D): boolean {\n    if (this.currentView === 'month') {\n      return (\n        this._adapter.getYear(date1) === this._adapter.getYear(date2) &&\n        this._adapter.getMonth(date1) === this._adapter.getMonth(date2)\n      );\n    }\n    if (this.currentView === 'year') {\n      return this._adapter.getYear(date1) === this._adapter.getYear(date2);\n    }\n    // Otherwise we are in 'multi-year' view.\n    return isSameMultiYearView(this._adapter, date1, date2, this.minDate, this.maxDate);\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in month view. */\n  private _handleCalendarBodyKeydownInMonthView(event: KeyboardEvent): void {\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this._activeDate = this._adapter.addCalendarDays(this._activeDate, -1);\n        break;\n      case RIGHT_ARROW:\n        this._activeDate = this._adapter.addCalendarDays(this._activeDate, 1);\n        break;\n      case UP_ARROW:\n        this._activeDate = this._adapter.addCalendarDays(this._activeDate, -7);\n        break;\n      case DOWN_ARROW:\n        this._activeDate = this._adapter.addCalendarDays(this._activeDate, 7);\n        break;\n      case HOME:\n        this._activeDate = this._adapter.addCalendarDays(\n          this._activeDate,\n          1 - this._adapter.getDate(this._activeDate)\n        );\n        break;\n      case END:\n        this._activeDate = this._adapter.addCalendarDays(\n          this._activeDate,\n          this._adapter.getNumDaysInMonth(this._activeDate) -\n            this._adapter.getDate(this._activeDate)\n        );\n        break;\n      case PAGE_UP:\n        this._activeDate = event.altKey\n          ? this._adapter.addCalendarYears(this._activeDate, -1)\n          : this._adapter.addCalendarMonths(this._activeDate, -1);\n        break;\n      case PAGE_DOWN:\n        this._activeDate = event.altKey\n          ? this._adapter.addCalendarYears(this._activeDate, 1)\n          : this._adapter.addCalendarMonths(this._activeDate, 1);\n        break;\n      case ENTER:\n        if (this._dateFilterForViews(this._activeDate)) {\n          this._dateSelected(this._activeDate);\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    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in year view. */\n  private _handleCalendarBodyKeydownInYearView(event: KeyboardEvent): void {\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this._activeDate = this._adapter.addCalendarMonths(this._activeDate, -1);\n        break;\n      case RIGHT_ARROW:\n        this._activeDate = this._adapter.addCalendarMonths(this._activeDate, 1);\n        break;\n      case UP_ARROW:\n        this._activeDate = this._prevMonthInSameCol(this._activeDate);\n        break;\n      case DOWN_ARROW:\n        this._activeDate = this._nextMonthInSameCol(this._activeDate);\n        break;\n      case HOME:\n        this._activeDate = this._adapter.addCalendarMonths(\n          this._activeDate,\n          -this._adapter.getMonth(this._activeDate)\n        );\n        break;\n      case END:\n        this._activeDate = this._adapter.addCalendarMonths(\n          this._activeDate,\n          11 - this._adapter.getMonth(this._activeDate)\n        );\n        break;\n      case PAGE_UP:\n        this._activeDate = this._adapter.addCalendarYears(\n          this._activeDate,\n          event.altKey ? -10 : -1\n        );\n        break;\n      case PAGE_DOWN:\n        this._activeDate = this._adapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n        break;\n      case ENTER:\n        this._monthSelected(this._activeDate);\n        break;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n  private _handleCalendarBodyKeydownInMultiYearView(event: KeyboardEvent): void {\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this._activeDate = this._adapter.addCalendarYears(this._activeDate, -1);\n        break;\n      case RIGHT_ARROW:\n        this._activeDate = this._adapter.addCalendarYears(this._activeDate, 1);\n        break;\n      case UP_ARROW:\n        this._activeDate = this._adapter.addCalendarYears(this._activeDate, -yearsPerRow);\n        break;\n      case DOWN_ARROW:\n        this._activeDate = this._adapter.addCalendarYears(this._activeDate, yearsPerRow);\n        break;\n      case HOME:\n        this._activeDate = this._adapter.addCalendarYears(\n          this._activeDate,\n          -getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate)\n        );\n        break;\n      case END:\n        this._activeDate = this._adapter.addCalendarYears(\n          this._activeDate,\n          yearsPerPage -\n            getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate) -\n            1\n        );\n        break;\n      case PAGE_UP:\n        this._activeDate = this._adapter.addCalendarYears(\n          this._activeDate,\n          event.altKey ? -yearsPerPage * 10 : -yearsPerPage\n        );\n        break;\n      case PAGE_DOWN:\n        this._activeDate = this._adapter.addCalendarYears(\n          this._activeDate,\n          event.altKey ? yearsPerPage * 10 : yearsPerPage\n        );\n        break;\n      case ENTER:\n        this._yearSelected(this._activeDate);\n        break;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in month view. */\n  private _handleCalendarBodyKeydownInClockView(event: KeyboardEvent): void {\n    switch (event.keyCode) {\n      case UP_ARROW:\n        this._activeDate =\n          this._clockView === 'hour'\n            ? this._adapter.addCalendarHours(this._activeDate, 1)\n            : this._adapter.addCalendarMinutes(this._activeDate, this.timeInterval);\n        break;\n      case DOWN_ARROW:\n        this._activeDate =\n          this._clockView === 'hour'\n            ? this._adapter.addCalendarHours(this._activeDate, -1)\n            : this._adapter.addCalendarMinutes(this._activeDate, -this.timeInterval);\n        break;\n      case ENTER:\n        if (!this.timeInput) {\n          this._dialTimeSelected(this._activeDate);\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    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /**\n   * Determine the date for the month that comes before the given month in the same column in the\n   * calendar table.\n   */\n  private _prevMonthInSameCol(date: D): D {\n    // Determine how many months to jump forward given that there are 2 empty slots at the beginning\n    // of each year.\n    const increment =\n      this._adapter.getMonth(date) <= 4 ? -5 : this._adapter.getMonth(date) >= 7 ? -7 : -12;\n    return this._adapter.addCalendarMonths(date, increment);\n  }\n\n  /**\n   * Determine the date for the month that comes after the given month in the same column in the\n   * calendar table.\n   */\n  private _nextMonthInSameCol(date: D): D {\n    // Determine how many months to jump forward given that there are 2 empty slots at the beginning\n    // of each year.\n    const increment =\n      this._adapter.getMonth(date) <= 4 ? 7 : this._adapter.getMonth(date) >= 7 ? 5 : 12;\n    return this._adapter.addCalendarMonths(date, increment);\n  }\n\n  private calendarState(direction: string): void {\n    this._calendarState = direction;\n  }\n\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n}\n","<div class=\"mtx-calendar-header\">\n  @if (_calendarHeaderPortal) {\n    <ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n  } @else {\n    @if (type !== 'time') {\n      <button\n        mat-button type=\"button\" class=\"mtx-calendar-header-year\"\n        [class.active]=\"currentView === 'year' || currentView === 'multi-year'\"\n        [attr.aria-label]=\"_yearButtonLabel\"\n        (click)=\"_yearClicked()\">\n        <span>{{ _yearButtonText }}</span>\n        @if (multiYearSelector || type === 'year') {\n          <svg\n            class=\"mtx-calendar-header-year-dropdown\" matButtonIcon iconPositionEnd\n            width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M7,10L12,15L17,10H7Z\" />\n          </svg>\n        }\n      </button>\n    }\n    @if (type !== 'year') {\n      <div class=\"mtx-calendar-header-date-time\">\n        @if (type !== 'time') {\n          <button\n            mat-button type=\"button\" class=\"mtx-calendar-header-date\"\n            [class.active]=\"currentView === 'month'\"\n            [class.not-clickable]=\"type === 'month'\"\n            [attr.aria-label]=\"_dateButtonLabel\"\n            (click)=\"_dateClicked()\">{{ _dateButtonText }}</button>\n        }\n        @if (type.endsWith('time')) {\n          <span class=\"mtx-calendar-header-time\" [class.active]=\"currentView === 'clock'\">\n            <span class=\"mtx-calendar-header-hour-minute-container\">\n              <button mat-button type=\"button\" class=\"mtx-calendar-header-hours\"\n                [class.active]=\"_clockView === 'hour'\"\n                [attr.aria-label]=\"_hourButtonLabel\"\n                (click)=\"_hoursClicked()\">{{ _hoursButtonText }}</button>\n              <span class=\"mtx-calendar-header-hour-minute-separator\">:</span>\n              <button mat-button type=\"button\" class=\"mtx-calendar-header-minutes\"\n                [class.active]=\"_clockView === 'minute'\"\n                [attr.aria-label]=\"_minuteButtonLabel\"\n                (click)=\"_minutesClicked()\">{{ _minutesButtonText }}</button>\n            </span>\n            @if (twelvehour) {\n              <span class=\"mtx-calendar-header-ampm-container\">\n                <button mat-button type=\"button\" class=\"mtx-calendar-header-ampm\"\n                  [class.active]=\"_AMPM === 'AM'\" aria-label=\"AM\"\n                  (click)=\"_ampmClicked('AM')\">AM</button>\n                <button mat-button type=\"button\" class=\"mtx-calendar-header-ampm\"\n                  [class.active]=\"_AMPM === 'PM'\" aria-label=\"PM\"\n                  (click)=\"_ampmClicked('PM')\">PM</button>\n              </span>\n            }\n          </span>\n        }\n      </div>\n    }\n  }\n</div>\n\n<div class=\"mtx-calendar-content\">\n  @if (currentView === 'month' || currentView === 'year' || currentView === 'multi-year') {\n    <div class=\"mtx-month-content\">\n      <div class=\"mtx-calendar-controls\">\n        <button mat-icon-button type=\"button\"\n          class=\"mtx-calendar-previous-button\"\n          [class.disabled]=\"!_previousEnabled()\"\n          [attr.aria-disabled]=\"!_previousEnabled()\"\n          [attr.aria-label]=\"_prevButtonLabel\"\n          (click)=\"_previousClicked()\">\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n            <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n          </svg>\n        </button>\n        <div class=\"mtx-calendar-period-button\"\n          [@slideCalendar]=\"_calendarState\"\n          (@slideCalendar.done)=\"_calendarStateDone()\">\n          <strong>{{ _yearPeriodText }}</strong>\n        </div>\n        <button mat-icon-button type=\"button\"\n          class=\"mtx-calendar-next-button\"\n          [class.disabled]=\"!_nextEnabled()\"\n          [attr.aria-disabled]=\"!_nextEnabled()\"\n          [attr.aria-label]=\"_nextButtonLabel\"\n          (click)=\"_nextClicked()\">\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n            <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n          </svg>\n        </button>\n      </div>\n    </div>\n  }\n\n  @switch (currentView) {\n    @case ('month') {\n      <mtx-month-view\n        (_userSelection)=\"_userSelected()\"\n        (selectedChange)=\"_dateSelected($event)\"\n        [activeDate]=\"_activeDate\"\n        [dateFilter]=\"_dateFilterForViews\"\n        [selected]=\"selected!\"\n        [type]=\"type\">\n      </mtx-month-view>\n    }\n    @case ('year') {\n      <mtx-year-view\n        (_userSelection)=\"_userSelected()\"\n        (selectedChange)=\"_monthSelected($event)\"\n        [activeDate]=\"_activeDate\"\n        [dateFilter]=\"_dateFilterForViews\"\n        [selected]=\"selected!\"\n        [type]=\"type\">\n      </mtx-year-view>\n    }\n    @case ('multi-year') {\n      <mtx-multi-year-view\n        (_userSelection)=\"_userSelected()\"\n        (selectedChange)=\"_yearSelected($event)\"\n        [activeDate]=\"_activeDate\"\n        [dateFilter]=\"_dateFilterForViews\"\n        [maxDate]=\"maxDate\"\n        [minDate]=\"minDate\"\n        [selected]=\"selected!\"\n        [type]=\"type\">\n      </mtx-multi-year-view>\n    }\n    @default {\n      @if (timeInput) {\n        <mtx-time\n          (_userSelection)=\"_userSelected()\"\n          (activeDateChange)=\"_onActiveDateChange($event)\"\n          (selectedChange)=\"_timeSelected($event)\"\n          [AMPM]=\"_AMPM\"\n          (ampmChange)=\"_ampmClicked($event)\"\n          [clockView]=\"_clockView\"\n          (clockViewChange)=\"_clockView = $event\"\n          [twelvehour]=\"twelvehour\"\n          [dateFilter]=\"dateFilter\"\n          [interval]=\"timeInterval\"\n          [maxDate]=\"maxDate\"\n          [minDate]=\"minDate\"\n          [selected]=\"_activeDate\"\n          [actionsPortal]=\"actionsPortal\">\n        </mtx-time>\n      } @else {\n        <mtx-clock (_userSelection)=\"_userSelected()\"\n          (activeDateChange)=\"_onActiveDateChange($event)\"\n          (selectedChange)=\"_dialTimeSelected($event)\"\n          [AMPM]=\"_AMPM\"\n          [dateFilter]=\"dateFilter\"\n          [interval]=\"timeInterval\"\n          [maxDate]=\"maxDate\"\n          [minDate]=\"minDate\"\n          [selected]=\"_activeDate\"\n          [startView]=\"_clockView\"\n          [twelvehour]=\"twelvehour\">\n        </mtx-clock>\n      }\n    }\n  }\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceStringArray } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n  FlexibleConnectedPositionStrategy,\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport {\n  CdkPortalOutlet,\n  ComponentPortal,\n  ComponentType,\n  TemplatePortal,\n} from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  AfterContentInit,\n  afterNextRender,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  EventEmitter,\n  inject,\n  Inject,\n  InjectionToken,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\n\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxCalendar } from './calendar';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerInput } from './datetimepicker-input';\nimport { MtxCalendarView, MtxDatetimepickerType } from './datetimepicker-types';\n\n/** Used to generate a unique ID for each datetimepicker instance. */\nlet datetimepickerUid = 0;\n\n/** Possible modes for datetimepicker dropdown display. */\nexport type MtxDatetimepickerMode = 'auto' | 'portrait' | 'landscape';\n\n/** Possible positions for the datetimepicker dropdown along the X axis. */\nexport type DatetimepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the datetimepicker dropdown along the Y axis. */\nexport type DatetimepickerDropdownPositionY = 'above' | 'below';\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MTX_DATETIMEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'mtx-datetimepicker-scroll-strategy',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const overlay = inject(Overlay);\n      return () => overlay.scrollStrategies.reposition();\n    },\n  }\n);\n\nexport function MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\nexport const MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MTX_DATETIMEPICKER_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n/**\n * Component used as the content for the datetimepicker dialog and popup. We use this instead of\n * using MtxCalendar directly as the content so we can control the initial focus. This also gives us\n * a 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: 'mtx-datetimepicker-content',\n  templateUrl: 'datetimepicker-content.html',\n  styleUrl: 'datetimepicker-content.scss',\n  host: {\n    'class': 'mtx-datetimepicker-content',\n    '[class]': 'color ? \"mat-\" + color : \"\"',\n    '[class.mtx-datetimepicker-content-touch]': 'datetimepicker?.touchUi',\n    '[attr.mode]': 'datetimepicker.mode',\n    '[@transformPanel]': '_animationState',\n    '(@transformPanel.done)': '_animationDone.next()',\n  },\n  animations: [\n    mtxDatetimepickerAnimations.transformPanel,\n    mtxDatetimepickerAnimations.fadeInCalendar,\n  ],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MtxCalendar, CdkPortalOutlet],\n})\nexport class MtxDatetimepickerContent<D> implements OnInit, AfterContentInit, OnDestroy {\n  @ViewChild(MtxCalendar, { static: true }) _calendar!: MtxCalendar<D>;\n\n  @Input() color: ThemePalette;\n\n  datetimepicker!: MtxDatetimepicker<D>;\n\n  /** Whether the datetimepicker is above or below the input. */\n  _isAbove!: boolean;\n\n  /** Current state of the animation. */\n  _animationState!: 'enter-dropdown' | 'enter-dialog' | 'void';\n\n  /** Emits when an animation has finished. */\n  readonly _animationDone = new Subject<void>();\n\n  /** Id of the label for the `role=\"dialog\"` element. */\n  _dialogLabelId: string | null = null;\n\n  /** Portal with projected action buttons. */\n  _actionsPortal: TemplatePortal | null = null;\n\n  /** The display type of datetimepicker. */\n  type: MtxDatetimepickerType = 'datetime';\n\n  /** The view of the calendar. */\n  view: MtxCalendarView = 'month';\n\n  constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n  _viewChanged(view: MtxCalendarView): void {\n    this.view = view;\n  }\n\n  ngOnInit() {\n    this._animationState = this.datetimepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n  }\n\n  ngAfterContentInit() {\n    this._calendar._focusActiveCell();\n  }\n\n  ngOnDestroy() {\n    this._animationDone.complete();\n  }\n\n  _startExitAnimation() {\n    this._animationState = 'void';\n    this._changeDetectorRef.markForCheck();\n  }\n\n  _handleUserSelection() {\n    // Delegate closing the overlay to the actions.\n    if (!this._actionsPortal) {\n      this.datetimepicker.close();\n    }\n  }\n\n  /**\n   * Assigns a new portal containing the datetimepicker actions.\n   * @param portal Portal with the actions to be assigned.\n   * @param forceRerender Whether a re-render of the portal should be triggered.\n   */\n  _assignActions(portal: TemplatePortal<any> | null, forceRerender: boolean) {\n    this._actionsPortal = portal;\n\n    if (forceRerender) {\n      this._changeDetectorRef.detectChanges();\n    }\n  }\n}\n\n@Component({\n  selector: 'mtx-datetimepicker',\n  exportAs: 'mtxDatetimepicker',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  preserveWhitespaces: false,\n  standalone: true,\n})\nexport class MtxDatetimepicker<D> implements OnDestroy {\n  private _document = inject(DOCUMENT);\n\n  private _injector = inject(Injector);\n\n  /** Whether to show multi-year view. */\n  @Input({ transform: booleanAttribute }) multiYearSelector = false;\n\n  /** Whether the clock uses 12 hour format. */\n  @Input({ transform: booleanAttribute }) twelvehour = false;\n\n  /** The view that the calendar should start in. */\n  @Input() startView: MtxCalendarView = 'month';\n\n  /** The display mode of datetimepicker. */\n  @Input() mode: MtxDatetimepickerMode = 'auto';\n\n  /** Step over minutes. */\n  @Input() timeInterval: number = 1;\n\n  /** Prevent user to select same date time */\n  @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n  /** Input for a custom header component */\n  @Input() calendarHeaderComponent!: ComponentType<any>;\n\n  /**\n   * Emits new selected date when selected date changes.\n   * @deprecated Switch to the `dateChange` and `dateInput` binding on the input element.\n   */\n  @Output() selectedChanged = new EventEmitter<D>();\n\n  /** Emits when the datetimepicker has been opened. */\n  @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Emits when the datetimepicker has been closed. */\n  @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Emits when the view has been changed. */\n  @Output() viewChanged: EventEmitter<MtxCalendarView> = new EventEmitter<MtxCalendarView>();\n\n  /** Classes to be passed to the date picker panel. */\n  @Input()\n  get panelClass(): string | string[] {\n    return this._panelClass;\n  }\n  set panelClass(value: string | string[]) {\n    this._panelClass = coerceStringArray(value);\n  }\n  private _panelClass!: string[];\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    value ? this.open() : this.close();\n  }\n  private _opened = false;\n\n  /** The id for the datetimepicker calendar. */\n  id = `mtx-datetimepicker-${datetimepickerUid++}`;\n\n  /** Color palette to use on the datetimepicker's calendar. */\n  @Input()\n  get color(): ThemePalette {\n    return (\n      this._color ||\n      (this.datetimepickerInput ? this.datetimepickerInput.getThemePalette() : undefined)\n    );\n  }\n  set color(value: ThemePalette) {\n    this._color = value;\n  }\n  private _color: ThemePalette;\n\n  /** The input element this datetimepicker is associated with. */\n  datetimepickerInput!: MtxDatetimepickerInput<D>;\n\n  /** Emits when the datetimepicker is disabled. */\n  _disabledChange = new Subject<boolean>();\n\n  private _validSelected: D | null = null;\n\n  /** A reference to the overlay into which we've rendered the calendar. */\n  private _overlayRef!: OverlayRef | null;\n\n  /** Reference to the component instance rendered in the overlay. */\n  private _componentRef!: ComponentRef<MtxDatetimepickerContent<D>> | null;\n\n  /** The element that was focused before the datetimepicker was opened. */\n  private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n  /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n  private _backdropHarnessClass = `${this.id}-backdrop`;\n\n  private _inputStateChanges = Subscription.EMPTY;\n\n  /** Portal with projected action buttons. */\n  _actionsPortal: TemplatePortal | null = null;\n\n  /** Previous selected value. */\n  oldValue: D | null = null;\n\n  constructor(\n    private _overlay: Overlay,\n    private _viewContainerRef: ViewContainerRef,\n    @Inject(MTX_DATETIMEPICKER_SCROLL_STRATEGY) private _scrollStrategy: any,\n    @Optional() private _dateAdapter: DatetimeAdapter<D>,\n    @Optional() private _dir: Directionality\n  ) {\n    if (!this._dateAdapter) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n  }\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.datetimepickerInput ? this.datetimepickerInput.value : null);\n  }\n  set startAt(date: D | null) {\n    this._startAt = this._dateAdapter.getValidDateOrNull(date);\n  }\n  private _startAt!: D | null;\n\n  /** The display type of datetimepicker. */\n  @Input()\n  get type() {\n    return this._type;\n  }\n  set type(value: MtxDatetimepickerType) {\n    this._type = value || 'datetime';\n  }\n  private _type: MtxDatetimepickerType = 'datetime';\n\n  /**\n   * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n   * than a popup and elements have more padding to allow for bigger touch targets.\n   */\n  @Input({ transform: booleanAttribute }) touchUi = false;\n\n  /**\n   * Whether the calendar is in time mode. In time mode the calendar clock gets time input\n   * elements rather then just clock. When `touchUi` is enabled this will be disabled.\n   */\n  @Input({ transform: booleanAttribute }) timeInput = false;\n\n  /** Whether the datetimepicker pop-up should be disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled === undefined && this.datetimepickerInput\n      ? this.datetimepickerInput.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  /** Preferred position of the datetimepicker in the X axis. */\n  @Input()\n  xPosition: DatetimepickerDropdownPositionX = 'start';\n\n  /** Preferred position of the datetimepicker in the Y axis. */\n  @Input()\n  yPosition: DatetimepickerDropdownPositionY = 'below';\n\n  /**\n   * Whether to restore focus to the previously-focused element when the panel is closed.\n   * Note that automatic focus restoration is an accessibility feature and it is recommended that\n   * you provide your own equivalent, if you decide to turn it off.\n   */\n  @Input({ transform: booleanAttribute }) restoreFocus = true;\n\n  /** The currently selected date. */\n  get _selected(): D | null {\n    return this._validSelected;\n  }\n\n  set _selected(value: D | null) {\n    this._validSelected = value;\n  }\n\n  /** The minimum selectable date. */\n  get _minDate(): D | null {\n    return this.datetimepickerInput && this.datetimepickerInput.min;\n  }\n\n  /** The maximum selectable date. */\n  get _maxDate(): D | null {\n    return this.datetimepickerInput && this.datetimepickerInput.max;\n  }\n\n  get _dateFilter(): (date: D | null, type: MtxDatetimepickerFilterType) => boolean {\n    return this.datetimepickerInput && this.datetimepickerInput._dateFilter;\n  }\n\n  _viewChanged(view: MtxCalendarView): void {\n    this.viewChanged.emit(view);\n  }\n\n  ngOnDestroy() {\n    this._destroyOverlay();\n    this.close();\n    this._inputStateChanges.unsubscribe();\n    this._disabledChange.complete();\n  }\n\n  /** Selects the given date */\n  _select(date: D): void {\n    this.oldValue = this._selected;\n    this._selected = date;\n    if (!this._actionsPortal) {\n      if (!this._dateAdapter.sameDatetime(this.oldValue, this._selected)) {\n        this.selectedChanged.emit(date);\n      }\n    }\n  }\n\n  _selectManually(): void {\n    if (!this._selected) {\n      this._selected = this._dateAdapter.today();\n      this.selectedChanged.emit(this._selected);\n    } else if (!this._dateAdapter.sameDatetime(this.oldValue, this._selected)) {\n      this.selectedChanged.emit((this._selected as D) || (this.oldValue as D));\n    }\n    this.close();\n  }\n\n  _clearSelected(): void {\n    this.oldValue = null;\n    this._selected = null;\n    this.selectedChanged.emit();\n    this.close();\n  }\n\n  /**\n   * Register an input with this datetimepicker.\n   * @param input The datetimepicker input to register with this datetimepicker.\n   */\n  _registerInput(input: MtxDatetimepickerInput<D>): void {\n    if (this.datetimepickerInput) {\n      throw Error('A MtxDatetimepicker can only be associated with a single input.');\n    }\n    this.datetimepickerInput = input;\n    this._inputStateChanges = this.datetimepickerInput._valueChange.subscribe(\n      (value: D | null) => (this._selected = value)\n    );\n  }\n\n  /** Open the calendar. */\n  open(): void {\n    if (this._opened || this.disabled) {\n      return;\n    }\n    if (!this.datetimepickerInput) {\n      throw Error('Attempted to open an MtxDatetimepicker with no associated input.');\n    }\n\n    this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n    this._openOverlay();\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\n    const canRestoreFocus =\n      this.restoreFocus &&\n      this._focusedElementBeforeOpen &&\n      typeof this._focusedElementBeforeOpen.focus === 'function';\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      }\n    };\n\n    if (this._componentRef) {\n      const { instance, location } = this._componentRef;\n      instance._startExitAnimation();\n      instance._animationDone.pipe(take(1)).subscribe(() => {\n        const activeElement = this._document.activeElement;\n\n        // Since we restore focus after the exit animation, we have to check that\n        // the user didn't move focus themselves inside the `close` handler.\n        if (\n          canRestoreFocus &&\n          (!activeElement ||\n            activeElement === this._document.activeElement ||\n            location.nativeElement.contains(activeElement))\n        ) {\n          this._focusedElementBeforeOpen!.focus();\n        }\n\n        this._focusedElementBeforeOpen = null;\n        this._destroyOverlay();\n      });\n    }\n\n    if (canRestoreFocus) {\n      // Because IE moves focus asynchronously, we can't count on it being restored before we've\n      // marked the datetimepicker as closed. If the event fires out of sequence and the element that\n      // we're refocusing opens the datetimepicker 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 datetimepicker as closed, async as well.\n      setTimeout(completeClose);\n    } else {\n      completeClose();\n    }\n  }\n\n  /**\n   * Forwards relevant values from the datetimepicker to the\n   * datetimepicker content inside the overlay.\n   */\n  protected _forwardContentValues(instance: MtxDatetimepickerContent<D>) {\n    instance.datetimepicker = this;\n    instance.color = this.color;\n    instance._dialogLabelId = this.datetimepickerInput.getOverlayLabelId();\n    instance.type = this.type;\n    instance.view = this.startView;\n    instance._assignActions(this._actionsPortal, false);\n  }\n\n  /** Opens the overlay with the calendar. */\n  private _openOverlay(): void {\n    this._destroyOverlay();\n\n    const isDialog = this.touchUi;\n    const labelId = this.datetimepickerInput.getOverlayLabelId();\n\n    const portal = new ComponentPortal<MtxDatetimepickerContent<D>>(\n      MtxDatetimepickerContent,\n      this._viewContainerRef\n    );\n    const overlayRef = (this._overlayRef = this._overlay.create(\n      new OverlayConfig({\n        positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n        hasBackdrop: true,\n        backdropClass: [\n          isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop',\n          this._backdropHarnessClass,\n        ],\n        direction: this._dir,\n        scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n        panelClass: `mtx-datetimepicker-${isDialog ? 'dialog' : 'popup'}`,\n      })\n    ));\n\n    const overlayElement = overlayRef.overlayElement;\n    overlayElement.setAttribute('role', 'dialog');\n\n    if (labelId) {\n      overlayElement.setAttribute('aria-labelledby', labelId);\n    }\n\n    if (isDialog) {\n      overlayElement.setAttribute('aria-modal', 'true');\n    }\n\n    this._getCloseStream(overlayRef).subscribe(event => {\n      if (event) {\n        event.preventDefault();\n      }\n      this.close();\n    });\n\n    this._componentRef = overlayRef.attach(portal);\n    this._forwardContentValues(this._componentRef.instance);\n\n    // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n    if (!isDialog) {\n      afterNextRender(\n        () => {\n          overlayRef.updatePosition();\n        },\n        { injector: this._injector }\n      );\n    }\n  }\n\n  /** Destroys the current overlay. */\n  private _destroyOverlay() {\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._overlayRef = this._componentRef = null;\n    }\n  }\n\n  /** Gets a position strategy that will open the calendar as a dropdown. */\n  private _getDialogStrategy() {\n    return this._overlay.position().global().centerHorizontally().centerVertically();\n  }\n\n  /** Gets a position strategy that will open the calendar as a dropdown. */\n  private _getDropdownStrategy() {\n    const strategy = this._overlay\n      .position()\n      .flexibleConnectedTo(this.datetimepickerInput.getConnectedOverlayOrigin())\n      .withTransformOriginOn('.mtx-datetimepicker-content')\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withLockedPosition();\n\n    return this._setConnectedPositions(strategy);\n  }\n\n  /**\n   * Sets the positions of the datetimepicker in dropdown mode based on the current configuration.\n   */\n  private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n    const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n    const secondaryX = primaryX === 'start' ? 'end' : 'start';\n    const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n    const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n    return strategy.withPositions([\n      {\n        originX: primaryX,\n        originY: secondaryY,\n        overlayX: primaryX,\n        overlayY: primaryY,\n      },\n      {\n        originX: primaryX,\n        originY: primaryY,\n        overlayX: primaryX,\n        overlayY: secondaryY,\n      },\n      {\n        originX: secondaryX,\n        originY: secondaryY,\n        overlayX: secondaryX,\n        overlayY: primaryY,\n      },\n      {\n        originX: secondaryX,\n        originY: primaryY,\n        overlayX: secondaryX,\n        overlayY: secondaryY,\n      },\n    ]);\n  }\n\n  /** Gets an observable that will emit when the overlay is supposed to be closed. */\n  private _getCloseStream(overlayRef: OverlayRef) {\n    return merge(\n      overlayRef.backdropClick(),\n      overlayRef.detachments(),\n      overlayRef.keydownEvents().pipe(\n        filter(event => {\n          // Closing on alt + up is only valid when there's an input associated with the\n          // datetimepicker.\n          return (\n            (event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n            (this.datetimepickerInput &&\n              hasModifierKey(event, 'altKey') &&\n              event.keyCode === UP_ARROW)\n          );\n        })\n      )\n    );\n  }\n  /**\n   * Registers a portal containing action buttons with the datetimepicker.\n   * @param portal Portal to be registered.\n   */\n  registerActions(portal: TemplatePortal): void {\n    if (this._actionsPortal) {\n      throw Error('A MtxDatetimepicker can only be associated with a single actions row.');\n    }\n    this._actionsPortal = portal;\n    this._componentRef?.instance._assignActions(portal, true);\n  }\n\n  /**\n   * Removes a portal containing action buttons from the datetimepicker.\n   * @param portal Portal to be removed.\n   */\n  removeActions(portal: TemplatePortal): void {\n    if (portal === this._actionsPortal) {\n      this._actionsPortal = null;\n      this._componentRef?.instance._assignActions(null, true);\n    }\n  }\n}\n","<div cdkTrapFocus\n     role=\"dialog\"\n     [attr.aria-modal]=\"true\"\n     [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n     [attr.mode]=\"datetimepicker.mode\"\n     class=\"mtx-datetimepicker-content-container\"\n     [class.mtx-datetimepicker-content-container-with-custom-header]=\"datetimepicker.calendarHeaderComponent\"\n     [class.mtx-datetimepicker-content-container-with-actions]=\"_actionsPortal\"\n     [class.mtx-datetimepicker-content-container-with-time-input]=\"datetimepicker.timeInput\">\n  <mtx-calendar [id]=\"datetimepicker.id\"\n                [class]=\"datetimepicker.panelClass\"\n                [attr.mode]=\"datetimepicker.mode\"\n                [type]=\"datetimepicker.type\"\n                [startAt]=\"datetimepicker.startAt\"\n                [startView]=\"datetimepicker.startView\"\n                [maxDate]=\"datetimepicker._maxDate\"\n                [minDate]=\"datetimepicker._minDate\"\n                [dateFilter]=\"datetimepicker._dateFilter\"\n                [multiYearSelector]=\"datetimepicker.multiYearSelector\"\n                [preventSameDateTimeSelection]=\"datetimepicker.preventSameDateTimeSelection\"\n                [headerComponent]=\"datetimepicker.calendarHeaderComponent\"\n                [timeInterval]=\"datetimepicker.timeInterval\"\n                [twelvehour]=\"datetimepicker.twelvehour\"\n                [selected]=\"datetimepicker._selected\"\n                [timeInput]=\"datetimepicker.timeInput\"\n                [actionsPortal]=\"_actionsPortal\"\n                (selectedChange)=\"datetimepicker._select($event)\"\n                (viewChanged)=\"datetimepicker._viewChanged($event)\"\n                (viewChanged)=\"_viewChanged($event)\"\n                (_userSelection)=\"_handleUserSelection()\"\n                [@fadeInCalendar]=\"'enter'\">\n  </mtx-calendar>\n\n  <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n</div>\n","import { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\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 { ThemePalette } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { Subscription } from 'rxjs';\n\nimport {\n  DatetimeAdapter,\n  MTX_DATETIME_FORMATS,\n  MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxDatetimepicker } from './datetimepicker';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\n\nexport const MAT_DATETIMEPICKER_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MtxDatetimepickerInput),\n  multi: true,\n};\n\nexport const MAT_DATETIMEPICKER_VALIDATORS: any = {\n  provide: NG_VALIDATORS,\n  useExisting: forwardRef(() => MtxDatetimepickerInput),\n  multi: true,\n};\n\n/**\n * An event used for datetimepicker 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 MtxDatetimepickerInputEvent instead.\n */\nexport class MtxDatetimepickerInputEvent<D> {\n  /** The new value for the target datetimepicker input. */\n  value: D | null;\n\n  constructor(\n    public target: MtxDatetimepickerInput<D>,\n    public targetElement: HTMLElement\n  ) {\n    this.value = this.target.value;\n  }\n}\n\n/** Directive used to connect an input to a MtxDatetimepicker. */\n@Directive({\n  selector: 'input[mtxDatetimepicker]',\n  providers: [\n    MAT_DATETIMEPICKER_VALUE_ACCESSOR,\n    MAT_DATETIMEPICKER_VALIDATORS,\n    { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MtxDatetimepickerInput },\n  ],\n  host: {\n    '[attr.aria-haspopup]': 'true',\n    '[attr.aria-owns]': '(_datetimepicker?.opened && _datetimepicker.id) || null',\n    '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n    '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(blur)': '_onBlur()',\n    '(keydown)': '_onKeydown($event)',\n  },\n  exportAs: 'mtxDatetimepickerInput',\n  standalone: true,\n})\nexport class MtxDatetimepickerInput<D>\n  implements AfterContentInit, ControlValueAccessor, OnDestroy, Validator\n{\n  _datetimepicker!: MtxDatetimepicker<D>;\n\n  _dateFilter!: (date: D | null, type: MtxDatetimepickerFilterType) => boolean;\n\n  /** Emits when a `change` event is fired on this `<input>`. */\n  @Output() dateChange = new EventEmitter<MtxDatetimepickerInputEvent<D>>();\n\n  /** Emits when an `input` event is fired on this `<input>`. */\n  @Output() dateInput = new EventEmitter<MtxDatetimepickerInputEvent<D>>();\n\n  /** Emits when the value changes (either due to user input or programmatic change). */\n  _valueChange = new EventEmitter<D | null>();\n\n  /** Emits when the disabled state has changed */\n  _disabledChange = new EventEmitter<boolean>();\n\n  private _datetimepickerSubscription = Subscription.EMPTY;\n\n  private _localeSubscription = Subscription.EMPTY;\n\n  /** Whether the last value set on the input was valid. */\n  private _lastValueValid = false;\n\n  constructor(\n    private _elementRef: ElementRef,\n    @Optional() public _dateAdapter: DatetimeAdapter<D>,\n    @Optional() @Inject(MTX_DATETIME_FORMATS) private _dateFormats: MtxDatetimeFormats,\n    @Optional() private _formField: MatFormField\n  ) {\n    if (!this._dateAdapter) {\n      throw createMissingDateImplError('DatetimeAdapter');\n    }\n    if (!this._dateFormats) {\n      throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n    }\n\n    // Update the displayed date when the locale changes.\n    this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n      this.value = this._dateAdapter.deserialize(this.value);\n    });\n  }\n\n  /** The datetimepicker that this input is associated with. */\n  @Input()\n  set mtxDatetimepicker(value: MtxDatetimepicker<D>) {\n    this.registerDatetimepicker(value);\n  }\n\n  @Input()\n  set mtxDatetimepickerFilter(\n    filter: (date: D | null, type: MtxDatetimepickerFilterType) => boolean\n  ) {\n    this._dateFilter = filter;\n    this._validatorOnChange();\n  }\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._dateAdapter.getValidDateOrNull(value);\n    const oldDate = this.value;\n    this._value = value;\n    this._formatValue(value);\n\n    // use timeout to ensure the datetimepicker is instantiated and we get the correct format\n    setTimeout(() => {\n      if (!this._dateAdapter.sameDatetime(oldDate, value)) {\n        this._valueChange.emit(value);\n      }\n    });\n  }\n  private _value!: D | null;\n\n  /** The minimum valid date. */\n  @Input()\n  get min(): D | null {\n    return this._min;\n  }\n  set min(value: D | null) {\n    this._min = this._dateAdapter.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._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    this._validatorOnChange();\n  }\n  private _max!: D | null;\n\n  /** Whether the datetimepicker-input is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    if (this._disabled !== value) {\n      this._disabled = value;\n      this._disabledChange.emit(value);\n    }\n  }\n  private _disabled!: boolean;\n\n  _onTouched = () => {};\n\n  ngAfterContentInit() {\n    if (this._datetimepicker) {\n      this._datetimepickerSubscription = this._datetimepicker.selectedChanged.subscribe(\n        (selected: D) => {\n          this.value = selected;\n          this._cvaOnChange(selected);\n          this._onTouched();\n          this.dateInput.emit(\n            new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement)\n          );\n          this.dateChange.emit(\n            new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement)\n          );\n        }\n      );\n    }\n  }\n\n  ngOnDestroy() {\n    this._datetimepickerSubscription.unsubscribe();\n    this._localeSubscription.unsubscribe();\n    this._valueChange.complete();\n    this._disabledChange.complete();\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this._validator ? this._validator(c) : null;\n  }\n\n  /**\n   * Gets the element that the datetimepicker popup should be connected to.\n   * @return The element to connect the popup to.\n   */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\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  // 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(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  _onKeydown(event: KeyboardEvent) {\n    if (event.altKey && event.keyCode === DOWN_ARROW) {\n      this._datetimepicker.open();\n      event.preventDefault();\n    }\n  }\n\n  _onInput(value: string) {\n    let date = this._dateAdapter.parse(value, this.getParseFormat());\n    this._lastValueValid = !date || this._dateAdapter.isValid(date);\n    date = this._dateAdapter.getValidDateOrNull(date);\n    this._value = date;\n    this._cvaOnChange(date);\n    this._valueChange.emit(date);\n    this.dateInput.emit(new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement));\n  }\n\n  _onChange() {\n    this.dateChange.emit(new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement));\n  }\n\n  /** Handles blur events on the input. */\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  }\n\n  private registerDatetimepicker(value: MtxDatetimepicker<D>) {\n    if (value) {\n      this._datetimepicker = value;\n      this._datetimepicker._registerInput(this);\n    }\n  }\n\n  private getDisplayFormat() {\n    switch (this._datetimepicker.type) {\n      case 'date':\n        return this._dateFormats.display.dateInput;\n      case 'datetime':\n        return this._dateFormats.display.datetimeInput;\n      case 'time':\n        return this._dateFormats.display.timeInput;\n      case 'month':\n        return this._dateFormats.display.monthInput;\n      case 'year':\n        return this._dateFormats.display.yearInput;\n    }\n  }\n\n  private getParseFormat() {\n    let parseFormat;\n\n    switch (this._datetimepicker.type) {\n      case 'date':\n        parseFormat = this._dateFormats.parse.dateInput;\n        break;\n      case 'datetime':\n        parseFormat = this._dateFormats.parse.datetimeInput;\n        break;\n      case 'time':\n        parseFormat = this._dateFormats.parse.timeInput;\n        break;\n      case 'month':\n        parseFormat = this._dateFormats.parse.monthInput;\n        break;\n      case 'year':\n        parseFormat = this._dateFormats.parse.yearInput;\n        break;\n    }\n    if (!parseFormat) {\n      parseFormat = this._dateFormats.parse.dateInput;\n    }\n\n    return parseFormat;\n  }\n\n  private _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      : { mtxDatetimepickerParse: { 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._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value)\n    );\n    return !this.min ||\n      !controlValue ||\n      (this._dateAdapter.compareDatetime(this.min, controlValue) as number) <= 0\n      ? null\n      : { mtxDatetimepickerMin: { 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._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value)\n    );\n    return !this.max ||\n      !controlValue ||\n      (this._dateAdapter.compareDatetime(this.max, controlValue) as number) >= 0\n      ? null\n      : { mtxDatetimepickerMax: { 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._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value)\n    );\n    return !this._dateFilter ||\n      !controlValue ||\n      this._dateFilter(controlValue, MtxDatetimepickerFilterType.DATE)\n      ? null\n      : { mtxDatetimepickerFilter: true };\n  };\n\n  /** The combined form control validator for this input. */\n  private _validator: ValidatorFn | null = Validators.compose([\n    this._parseValidator,\n    this._minValidator,\n    this._maxValidator,\n    this._filterValidator,\n  ]);\n\n  /** Formats a value and sets it on the input element. */\n  private _formatValue(value: D | null) {\n    this._elementRef.nativeElement.value = value\n      ? this._dateAdapter.format(value, this.getDisplayFormat())\n      : '';\n  }\n\n  /** Returns the palette used by the input's form field, if any. */\n  getThemePalette(): ThemePalette {\n    return this._formField ? this._formField.color : undefined;\n  }\n}\n","import {\n  AfterContentInit,\n  Attribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  Directive,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n  booleanAttribute,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { Observable, Subscription, merge, of as observableOf } from 'rxjs';\n\nimport { MtxDatetimepicker } from './datetimepicker';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\n\n/** Can be used to override the icon of a `mtxDatetimepickerToggle`. */\n@Directive({\n  selector: '[mtxDatetimepickerToggleIcon]',\n  standalone: true,\n})\nexport class MtxDatetimepickerToggleIcon {}\n\n@Component({\n  selector: 'mtx-datetimepicker-toggle',\n  templateUrl: 'datetimepicker-toggle.html',\n  styleUrl: './datetimepicker-toggle.scss',\n  host: {\n    'class': 'mtx-datetimepicker-toggle',\n    '[attr.tabindex]': 'null',\n    '[class.mtx-datetimepicker-toggle-active]': 'datetimepicker && datetimepicker.opened',\n    '[class.mat-accent]': 'datetimepicker && datetimepicker.color === \"accent\"',\n    '[class.mat-warn]': 'datetimepicker && datetimepicker.color === \"warn\"',\n    // Used by the test harness to tie this toggle to its datetimepicker.\n    '[attr.data-mtx-calendar]': 'datetimepicker ? datetimepicker.id : null',\n    // Bind the `click` on the host, rather than the inner `button`, so that we can call\n    // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n    // it so that the input doesn't get focused automatically by the form field (See #21836).\n    '(click)': '_open($event)',\n  },\n  exportAs: 'mtxDatetimepickerToggle',\n  encapsulation: ViewEncapsulation.None,\n  preserveWhitespaces: false,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MatIconButton],\n})\nexport class MtxDatetimepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n  private _stateChanges = Subscription.EMPTY;\n\n  /** Datetimepicker instance that the button will toggle. */\n  @Input('for') datetimepicker!: MtxDatetimepicker<D>;\n\n  /** Tabindex for the toggle. */\n  @Input() tabIndex: number | null;\n\n  /** Screen-reader label for the button. */\n  @Input('aria-label') ariaLabel?: string;\n\n  /** Whether the toggle button is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled === undefined ? this.datetimepicker.disabled : !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n  }\n  private _disabled!: boolean;\n\n  /** Whether ripples on the toggle should be disabled. */\n  @Input({ transform: booleanAttribute }) disableRipple!: boolean;\n\n  /** Custom icon set by the consumer. */\n  @ContentChild(MtxDatetimepickerToggleIcon) _customIcon!: MtxDatetimepickerToggleIcon;\n\n  /** Underlying button element. */\n  @ViewChild('button') _button!: MatButton;\n\n  constructor(\n    public _intl: MtxDatetimepickerIntl,\n    private _changeDetectorRef: ChangeDetectorRef,\n    @Attribute('tabindex') defaultTabIndex: string\n  ) {\n    const parsedTabIndex = Number(defaultTabIndex);\n    this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.datetimepicker) {\n      this._watchStateChanges();\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.unsubscribe();\n  }\n\n  ngAfterContentInit() {\n    this._watchStateChanges();\n  }\n\n  _open(event: Event): void {\n    if (this.datetimepicker && !this.disabled) {\n      this.datetimepicker.open();\n      event.stopPropagation();\n    }\n  }\n\n  private _watchStateChanges() {\n    const datetimepickerDisabled = this.datetimepicker\n      ? this.datetimepicker._disabledChange\n      : observableOf();\n    const inputDisabled =\n      this.datetimepicker && this.datetimepicker.datetimepickerInput\n        ? this.datetimepicker.datetimepickerInput._disabledChange\n        : observableOf();\n    const datetimepickerToggled = this.datetimepicker\n      ? merge(this.datetimepicker.openedStream, this.datetimepicker.closedStream)\n      : observableOf();\n\n    this._stateChanges.unsubscribe();\n    this._stateChanges = merge(\n      this._intl.changes,\n      datetimepickerDisabled as Observable<void>,\n      inputDisabled as Observable<void>,\n      datetimepickerToggled\n    ).subscribe(() => this._changeDetectorRef.markForCheck());\n  }\n}\n","<button #button\n  mat-icon-button\n  type=\"button\"\n  [attr.aria-haspopup]=\"datetimepicker ? 'dialog' : null\"\n  [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n  [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n  [disabled]=\"disabled\"\n  [disableRipple]=\"disableRipple\">\n\n  @if (!_customIcon) {\n    @switch (datetimepicker.type) {\n      @case ('time') {\n        <svg\n          class=\"mtx-datetimepicker-toggle-default-icon\"\n          viewBox=\"0 0 24 24\"\n          width=\"24px\"\n          height=\"24px\"\n          fill=\"currentColor\"\n          focusable=\"false\">\n          <path d=\"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z\" />\n        </svg>\n      }\n      @case ('datetime') {\n        <svg\n          class=\"mtx-datetimepicker-toggle-default-icon\"\n          viewBox=\"0 0 24 24\"\n          width=\"24px\"\n          height=\"24px\"\n          fill=\"currentColor\"\n          focusable=\"false\">\n          <path d=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" />\n        </svg>\n      }\n      @default {\n        <svg\n          class=\"mtx-datetimepicker-toggle-default-icon\"\n          viewBox=\"0 0 24 24\"\n          width=\"24px\"\n          height=\"24px\"\n          fill=\"currentColor\"\n          focusable=\"false\">\n          <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n          <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\" />\n        </svg>\n      }\n    }\n  }\n\n  <ng-content select=\"[mtxDatetimepickerToggleIcon]\"></ng-content>\n</button>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Directive,\n  OnDestroy,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { MtxDatetimepicker } from './datetimepicker';\n\n@Directive({\n  selector: '[mtxDatetimepickerApply]',\n  host: { '(click)': '_datetimepicker._selectManually()' },\n  standalone: true,\n})\nexport class MtxDatetimepickerApply<D> {\n  constructor(public _datetimepicker: MtxDatetimepicker<D>) {}\n}\n\n@Directive({\n  selector: '[mtxDatetimepickerCancel]',\n  host: { '(click)': '_datetimepicker.close()' },\n  standalone: true,\n})\nexport class MtxDatetimepickerCancel<D> {\n  constructor(public _datetimepicker: MtxDatetimepicker<D>) {}\n}\n\n@Directive({\n  selector: '[mtxDatetimepickerClear]',\n  host: { '(click)': '_datetimepicker._clearSelected()' },\n  standalone: true,\n})\nexport class MtxDatetimepickerClear<D> {\n  constructor(public _datetimepicker: MtxDatetimepicker<D>) {}\n}\n\n@Component({\n  selector: 'mtx-datetimepicker-actions',\n  styleUrl: './datetimepicker-actions.scss',\n  template: `\n    <ng-template>\n      <div class=\"mtx-datetimepicker-actions\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n})\nexport class MtxDatetimepickerActions<D> implements AfterViewInit, OnDestroy {\n  @ViewChild(TemplateRef) _template!: TemplateRef<unknown>;\n  private _portal!: TemplatePortal;\n  constructor(\n    private _datetimepicker: MtxDatetimepicker<D>,\n    private _viewContainerRef: ViewContainerRef\n  ) {}\n\n  ngAfterViewInit() {\n    this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n    this._datetimepicker.registerActions(this._portal);\n  }\n\n  ngOnDestroy() {\n    this._datetimepicker.removeActions(this._portal);\n    // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n    if (this._portal && this._portal.isAttached) {\n      this._portal?.detach();\n    }\n  }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { MtxCalendar } from './calendar';\nimport { MtxCalendarBody } from './calendar-body';\nimport { MtxClock } from './clock';\nimport {\n  MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n  MtxDatetimepicker,\n  MtxDatetimepickerContent,\n} from './datetimepicker';\nimport { MtxDatetimepickerInput } from './datetimepicker-input';\nimport { MtxDatetimepickerToggle, MtxDatetimepickerToggleIcon } from './datetimepicker-toggle';\nimport { MtxMonthView } from './month-view';\nimport { MtxMultiYearView } from './multi-year-view';\nimport { MtxTime, MtxTimeInput } from './time';\nimport { MtxYearView } from './year-view';\nimport {\n  MtxDatetimepickerActions,\n  MtxDatetimepickerApply,\n  MtxDatetimepickerCancel,\n  MtxDatetimepickerClear,\n} from './datetimepicker-actions';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    OverlayModule,\n    A11yModule,\n    PortalModule,\n    MatButtonModule,\n    MtxCalendar,\n    MtxCalendarBody,\n    MtxClock,\n    MtxTime,\n    MtxTimeInput,\n    MtxDatetimepicker,\n    MtxDatetimepickerToggle,\n    MtxDatetimepickerToggleIcon,\n    MtxDatetimepickerInput,\n    MtxDatetimepickerContent,\n    MtxMonthView,\n    MtxYearView,\n    MtxMultiYearView,\n    MtxDatetimepickerApply,\n    MtxDatetimepickerCancel,\n    MtxDatetimepickerClear,\n    MtxDatetimepickerActions,\n  ],\n  exports: [\n    MtxCalendar,\n    MtxCalendarBody,\n    MtxClock,\n    MtxTime,\n    MtxDatetimepicker,\n    MtxDatetimepickerToggle,\n    MtxDatetimepickerToggleIcon,\n    MtxDatetimepickerInput,\n    MtxDatetimepickerContent,\n    MtxMonthView,\n    MtxYearView,\n    MtxMultiYearView,\n    MtxDatetimepickerApply,\n    MtxDatetimepickerCancel,\n    MtxDatetimepickerClear,\n    MtxDatetimepickerActions,\n  ],\n  providers: [MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER],\n})\nexport class MtxDatetimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.MtxDatetimepickerIntl","i2","observableOf","i1.MtxDatetimepicker"],"mappings":"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"}