@dhutaryan/ngx-mat-timepicker
Version:
Angular timepicker to add time which is based on material design and Angular material.
1 lines • 214 kB
Source Map (JSON)
{"version":3,"file":"dhutaryan-ngx-mat-timepicker.mjs","sources":["../../../projects/mat-timepicker/src/lib/timepicker-scroll-strategy.ts","../../../projects/mat-timepicker/src/lib/timepicker-intl.ts","../../../projects/mat-timepicker/src/lib/timepicker-toggle.ts","../../../projects/mat-timepicker/src/lib/timepicker-toggle.html","../../../projects/mat-timepicker/src/lib/clock-size.ts","../../../projects/mat-timepicker/src/lib/minutes-clock-dial.ts","../../../projects/mat-timepicker/src/lib/minutes-clock-dial.html","../../../projects/mat-timepicker/src/lib/hours-clock-dial.ts","../../../projects/mat-timepicker/src/lib/hours-clock-dial.html","../../../projects/mat-timepicker/src/lib/adapter/time-adapter.ts","../../../projects/mat-timepicker/src/lib/adapter/native-date-time-adapter.ts","../../../projects/mat-timepicker/src/lib/adapter/index.ts","../../../projects/mat-timepicker/src/lib/time-face-base.ts","../../../projects/mat-timepicker/src/lib/time-input-base.ts","../../../projects/mat-timepicker/src/lib/timepicker-content-layout.ts","../../../projects/mat-timepicker/src/lib/timepicker-content-layout.html","../../../projects/mat-timepicker/src/lib/time-period.ts","../../../projects/mat-timepicker/src/lib/time-period.html","../../../projects/mat-timepicker/src/lib/clock-dials.ts","../../../projects/mat-timepicker/src/lib/clock-dials.html","../../../projects/mat-timepicker/src/lib/time-inputs.ts","../../../projects/mat-timepicker/src/lib/time-inputs.html","../../../projects/mat-timepicker/src/lib/time-selection-model.ts","../../../projects/mat-timepicker/src/lib/timepicker-content.ts","../../../projects/mat-timepicker/src/lib/timepicker-content.html","../../../projects/mat-timepicker/src/lib/timepicker-actions-default.ts","../../../projects/mat-timepicker/src/lib/timepicker-base.ts","../../../projects/mat-timepicker/src/lib/timepicker.ts","../../../projects/mat-timepicker/src/lib/timepicker-input-base.ts","../../../projects/mat-timepicker/src/lib/timepicker-input.ts","../../../projects/mat-timepicker/src/lib/timepicker-actions.ts","../../../projects/mat-timepicker/src/lib/timepicker.module.ts","../../../projects/mat-timepicker/src/public-api.ts","../../../projects/mat-timepicker/src/dhutaryan-ngx-mat-timepicker.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\n\n/** Injection token that determines the scroll handling while the timepicker is open. */\nexport const MAT_TIMEPICKER_SCROLL_STRATEGY = new InjectionToken<\n () => ScrollStrategy\n>('mat-timepicker-scroll-strategy');\n\n/** Timepicker scroll strategy factory. */\nexport function MAT_TIMEPICKER_SCROLL_STRATEGY_FACTORY(\n overlay: Overlay\n): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** Timepicker scroll strategy provider. */\nexport const MAT_TIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_TIMEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_TIMEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MatTimepickerIntl {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n\n /** A label for inputs title. */\n inputsTitle = 'Enter time';\n\n /** A label for dials title. */\n dialsTitle = 'Select time';\n\n /** A label for hour input hint. */\n hourInputHint = 'Hour';\n\n /** A label for minute input hint. */\n minuteInputHint = 'Minute';\n\n /** Label for the button used to open the timepicker popup (used by screen readers). */\n openTimepickerLabel = 'Open timepicker';\n\n /** Label for the button used to close the timepicker popup (used by screen readers). */\n closeTimepickerLabel = 'Close timepicker';\n\n /** A label for OK button to apply time. */\n okButton = 'OK';\n\n /** A label for cancel button to close timepicker. */\n cancelButton = 'Cancel';\n\n /** A label for am text. */\n am = 'AM';\n\n /** A label for am text. */\n pm = 'PM';\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Directive,\n ViewEncapsulation,\n Input,\n ContentChild,\n Attribute,\n SimpleChanges,\n OnChanges,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\n\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Observable, Subscription, merge, of } from 'rxjs';\n\nimport { MatTimepicker } from './timepicker';\nimport { MatTimepickerIntl } from './timepicker-intl';\n\n@Directive({ selector: '[matTimepickerToggleIcon]', standalone: true })\nexport class MatTimepickerToggleIcon {}\n\n@Component({\n selector: 'mat-timepicker-toggle',\n standalone: true,\n imports: [MatButtonModule],\n templateUrl: './timepicker-toggle.html',\n styleUrls: ['./timepicker-toggle.scss'],\n exportAs: 'matTimepickerToggle',\n host: {\n class: 'mat-timepicker-toggle',\n '[attr.tabindex]': 'null',\n '[class.mat-timepicker-toggle-active]': 'timepicker && timepicker.opened',\n '[class.mat-accent]': 'timepicker && timepicker.color === \"accent\"',\n '[class.mat-warn]': 'timepicker && timepicker.color === \"warn\"',\n '(click)': 'open($event)',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatTimepickerToggle<T> implements OnChanges, OnDestroy {\n /** Timepicker instance. */\n @Input('for') timepicker: MatTimepicker<T>;\n\n /** Whether the toggle button is disabled. */\n @Input()\n get disabled(): boolean {\n if (this._disabled === undefined && this.timepicker) {\n return this.timepicker.disabled;\n }\n\n return !!this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled: boolean;\n\n /** Whether ripples on the toggle should be disabled. */\n @Input() disableRipple: boolean;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Custom icon set by the consumer. */\n @ContentChild(MatTimepickerToggleIcon) customIcon: MatTimepickerToggleIcon;\n\n /** Screen-reader label for the button. */\n @Input('aria-label') ariaLabel: string;\n\n private _stateChanges = Subscription.EMPTY;\n\n constructor(\n @Attribute('tabindex') defaultTabIndex: string,\n public _intl: MatTimepickerIntl,\n private _cdr: ChangeDetectorRef,\n ) {\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex =\n parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['timepicker']) {\n this._watchStateChanges();\n }\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n\n /** Opens timepicker. */\n open(event: Event): void {\n if (this.timepicker && !this.disabled) {\n this.timepicker.open();\n event.stopPropagation();\n }\n }\n\n private _watchStateChanges() {\n const timepickerStateChanged = this.timepicker\n ? this.timepicker.stateChanges\n : of();\n const inputStateChanged =\n this.timepicker && this.timepicker.timepickerInput\n ? this.timepicker.timepickerInput.stateChanges\n : of();\n const timepickerToggled = this.timepicker\n ? merge(this.timepicker.openedStream, this.timepicker.closedStream)\n : of();\n\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(\n this._intl.changes,\n timepickerStateChanged as Observable<void>,\n inputStateChanged,\n timepickerToggled,\n ).subscribe(() => this._cdr.markForCheck());\n }\n}\n","<button\n type=\"button\"\n #button\n mat-icon-button\n [attr.aria-haspopup]=\"timepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openTimepickerLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\"\n>\n @if (!customIcon) {\n <svg\n class=\"mat-timepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path\n d=\"M12,2C6.5,2,2,6.5,2,12s4.5,10,10,10s10-4.5,10-10S17.5,2,12,2z M12,20c-4.41,0-8-3.59-8-8s3.59-8,8-8s8,3.59,8,8 S16.41,20,12,20z M12.5,7H11v6l5.2,3.2l0.8-1.3l-4.5-2.7V7z\"\n />\n </svg>\n }\n\n <ng-content select=\"[matTimepickerToggleIcon]\"></ng-content>\n</button>\n","const TOUCH_UI_MULTIPLIER = 1.25;\nconst TOUCH_UI_TICK_MULTIPLIER = 1.5;\nconst CLOCK_RADIUS = 128;\nconst CLOCK_TICK_RADIUS = 16;\nconst CLOCK_OUTER_RADIUS = 100;\n\nexport function getClockRadius(touchUi?: boolean): number {\n return touchUi ? CLOCK_RADIUS * TOUCH_UI_MULTIPLIER : CLOCK_RADIUS;\n}\n\nexport function getClockTickRadius(touchUi?: boolean): number {\n return touchUi\n ? CLOCK_TICK_RADIUS * TOUCH_UI_TICK_MULTIPLIER\n : CLOCK_TICK_RADIUS;\n}\n\nexport function getClockCorrectedRadius(touchUi?: boolean): number {\n return getClockRadius(touchUi) - getClockTickRadius(touchUi);\n}\n\nexport function getClockOuterRadius(touchUi?: boolean): number {\n return touchUi\n ? CLOCK_OUTER_RADIUS * TOUCH_UI_MULTIPLIER\n : CLOCK_OUTER_RADIUS;\n}\n\nexport function getClockInnerRadius(touchUi?: boolean): number {\n return getClockOuterRadius(touchUi) - getClockTickRadius(touchUi) * 2;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n DOCUMENT,\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { debounceTime, fromEvent, merge, take } from 'rxjs';\n\nimport { ClockDialViewCell } from './hours-clock-dial';\nimport {\n getClockCorrectedRadius,\n getClockOuterRadius,\n getClockRadius,\n} from './clock-size';\n\nexport const ALL_MINUTES = Array(60)\n .fill(null)\n .map((_, i) => i);\n\n@Component({\n selector: 'mat-minutes-clock-dial',\n standalone: true,\n imports: [CommonModule, MatButtonModule],\n templateUrl: 'minutes-clock-dial.html',\n styleUrls: ['clock-dial.scss'],\n exportAs: 'matMinutesClockDial',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-clock-dial mat-clock-dial-minutes',\n '(mousedown)': '_onUserAction($event)',\n '(touchstart)': '_onUserAction($event)',\n },\n})\nexport class MatMinutesClockDial implements OnInit {\n /** Selected minute. */\n @Input()\n get selectedMinute(): number {\n return this._selectedMinute;\n }\n set selectedMinute(value: number) {\n this._selectedMinute = value;\n }\n private _selectedMinute = 0;\n\n /** Step over minutes. */\n @Input()\n get interval(): number {\n return this._interval;\n }\n set interval(value: number) {\n this._interval = coerceNumberProperty(value) || 1;\n }\n private _interval: number = 1;\n\n @Input()\n get availableMinutes(): number[] {\n return this._availableMinutes;\n }\n set availableMinutes(value: number[]) {\n this._availableMinutes = value;\n this._initMinutes();\n }\n private _availableMinutes: number[] = [];\n\n /** Color palette. */\n @Input() color: ThemePalette;\n\n /** Whether the timepicker UI is in touch mode. */\n @Input()\n get touchUi(): boolean {\n return this._touchUi;\n }\n set touchUi(value: boolean) {\n this._touchUi = value;\n }\n private _touchUi: boolean;\n\n /** Emits selected minute. */\n @Output() selectedChange = new EventEmitter<number>();\n\n minutes: ClockDialViewCell[] = [];\n\n get disabled(): boolean {\n return !this.availableMinutes.includes(this.selectedMinute);\n }\n\n get isMinutePoint(): boolean {\n return !!this.minutes.find((hour) => hour.value === this.selectedMinute);\n }\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n private _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: Document,\n ) {}\n\n ngOnInit(): void {\n this._initMinutes();\n }\n\n /** Hand styles based on selected minute. */\n _handStyles(): any {\n const deg = Math.round(this._selectedMinute * (360 / 60));\n const height = getClockOuterRadius(this.touchUi);\n const marginTop =\n getClockRadius(this.touchUi) - getClockOuterRadius(this.touchUi);\n\n return {\n transform: `rotate(${deg}deg)`,\n height: `${height}px`,\n 'margin-top': `${marginTop}px`,\n };\n }\n\n /** Handles mouse and touch events on dial and document. */\n _onUserAction(event: MouseEvent | TouchEvent): void {\n if (event.cancelable) {\n event.preventDefault();\n }\n\n this._setMinute(event);\n\n const eventsSubscription = merge(\n fromEvent<MouseEvent>(this._document, 'mousemove'),\n fromEvent<TouchEvent>(this._document, 'touchmove'),\n )\n .pipe(debounceTime(0))\n .subscribe({\n next: (event) => {\n event.preventDefault();\n this._setMinute(event);\n },\n });\n\n merge(\n fromEvent<MouseEvent>(this._document, 'mouseup'),\n fromEvent<TouchEvent>(this._document, 'touchend'),\n )\n .pipe(take(1))\n .subscribe({\n next: () => {\n eventsSubscription.unsubscribe();\n },\n });\n }\n\n _isActiveCell(minute: number): boolean {\n return this.selectedMinute === minute;\n }\n\n private _setMinute(event: MouseEvent | TouchEvent): void {\n const element = this._element.nativeElement;\n const window = this._getWindow();\n const elementRect = element.getBoundingClientRect();\n const width = element.offsetWidth;\n const height = element.offsetHeight;\n const pageX =\n event instanceof MouseEvent ? event.pageX : event.touches[0].pageX;\n const pageY =\n event instanceof MouseEvent ? event.pageY : event.touches[0].pageY;\n const x = width / 2 - (pageX - elementRect.left - window.scrollX);\n const y = height / 2 - (pageY - elementRect.top - window.scrollY);\n const unit = Math.PI / (30 / this.interval);\n const atan2 = Math.atan2(-x, y);\n const radian = atan2 < 0 ? Math.PI * 2 + atan2 : atan2;\n const initialValue = Math.round(radian / unit) * this.interval;\n const value = initialValue === 60 ? 0 : initialValue;\n\n if (\n this.availableMinutes.includes(value) &&\n this.availableMinutes.includes(value)\n ) {\n this.selectedMinute = value;\n this.selectedChange.emit(this.selectedMinute);\n }\n\n this._cdr.detectChanges();\n }\n\n /** Creates list of minutes. */\n private _initMinutes(): void {\n this.minutes = ALL_MINUTES.filter((minute) => minute % 5 === 0).map(\n (minute) => {\n const radian = (minute / 30) * Math.PI;\n const displayValue = minute === 0 ? '00' : String(minute);\n\n return {\n value: minute,\n displayValue,\n left:\n getClockCorrectedRadius(this.touchUi) +\n Math.sin(radian) * getClockOuterRadius(this.touchUi),\n top:\n getClockCorrectedRadius(this.touchUi) -\n Math.cos(radian) * getClockOuterRadius(this.touchUi),\n disabled: !this.availableMinutes.includes(minute),\n };\n },\n );\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n}\n","<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isMinutePoint\"\n [class.mat-clock-dial-hand-disabled]=\"disabled\"\n [ngStyle]=\"_handStyles()\"\n>\n <div class=\"mat-clock-dial-hand-point\" tabindex=\"0\"></div>\n</div>\n@for (minute of minutes; track minute.value) {\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(minute.value) ? 0 : -1\"\n [style.left.px]=\"minute.left\"\n [style.top.px]=\"minute.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(minute.value)\"\n [class.mat-clock-dial-cell-disabled]=\"minute.disabled\"\n [color]=\"_isActiveCell(minute.value) ? color : undefined\"\n [attr.aria-disabled]=\"minute.disabled || null\"\n >\n {{ minute.displayValue }}\n </button>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n DOCUMENT,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { debounceTime, fromEvent, merge, take } from 'rxjs';\n\nimport {\n getClockCorrectedRadius,\n getClockInnerRadius,\n getClockOuterRadius,\n getClockRadius,\n getClockTickRadius,\n} from './clock-size';\n\nexport interface ClockDialViewCell {\n value: number;\n displayValue: string;\n left: number;\n top: number;\n disabled: boolean;\n}\n\nexport const ALL_HOURS = Array(24)\n .fill(null)\n .map((_, i) => i);\n\n@Component({\n selector: 'mat-hours-clock-dial',\n standalone: true,\n imports: [CommonModule, MatButtonModule],\n templateUrl: 'hours-clock-dial.html',\n styleUrls: ['clock-dial.scss'],\n exportAs: 'matHoursClockDial',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-clock-dial mat-clock-dial-hours',\n '(mousedown)': '_onUserAction($event)',\n '(touchstart)': '_onUserAction($event)',\n },\n})\nexport class MatHoursClockDial implements OnInit {\n /** Selected hour. */\n @Input()\n get selectedHour(): number {\n return this._selectedHour;\n }\n set selectedHour(value: number) {\n this._selectedHour = value;\n }\n private _selectedHour: number;\n\n /** Whether the clock uses 12 hour format. */\n @Input()\n get isMeridiem(): boolean {\n return this._isMeridiem;\n }\n set isMeridiem(value: boolean) {\n this._isMeridiem = value;\n }\n private _isMeridiem: boolean;\n\n @Input()\n get availableHours(): number[] {\n return this._availableHours;\n }\n set availableHours(value: number[]) {\n this._availableHours = value;\n this._initHours();\n }\n private _availableHours: number[] = [];\n\n /** Color palette. */\n @Input() color: ThemePalette;\n\n /** Whether the timepicker UI is in touch mode. */\n @Input()\n get touchUi(): boolean {\n return this._touchUi;\n }\n set touchUi(value: boolean) {\n this._touchUi = value;\n this._initHours();\n }\n private _touchUi: boolean;\n\n /** Emits selected hour. */\n @Output() selectedChange = new EventEmitter<{\n hour: number;\n changeView?: boolean;\n }>();\n\n hours: ClockDialViewCell[] = [];\n\n get disabledHand(): boolean {\n return !this.availableHours.includes(this.selectedHour);\n }\n\n get isHour(): boolean {\n return !!this.hours.find((hour) => hour.value === this.selectedHour);\n }\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n private _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: Document,\n ) {}\n\n ngOnInit(): void {\n this._initHours();\n }\n\n /** Hand styles based on selected hour. */\n _handStyles(): any {\n const deg = Math.round(this.selectedHour * (360 / (24 / 2)));\n const radius = this._getRadius(this.selectedHour);\n const height = radius;\n const marginTop = getClockRadius(this.touchUi) - radius;\n\n return {\n transform: `rotate(${deg}deg)`,\n height: `${height}px`,\n 'margin-top': `${marginTop}px`,\n };\n }\n\n /** Handles mouse and touch events on dial and document. */\n _onUserAction(event: MouseEvent | TouchEvent): void {\n if (event.cancelable) {\n event.preventDefault();\n }\n\n this._setHour(event);\n\n const eventsSubscription = merge(\n fromEvent<MouseEvent>(this._document, 'mousemove'),\n fromEvent<TouchEvent>(this._document, 'touchmove'),\n )\n .pipe(debounceTime(0))\n .subscribe({\n next: (event) => {\n event.preventDefault();\n this._setHour(event);\n },\n });\n\n merge(\n fromEvent<MouseEvent>(this._document, 'mouseup'),\n fromEvent<TouchEvent>(this._document, 'touchend'),\n )\n .pipe(take(1))\n .subscribe({\n next: () => {\n eventsSubscription.unsubscribe();\n this.selectedChange.emit({\n hour: this.selectedHour,\n changeView: true,\n });\n },\n });\n }\n\n _isActiveCell(hour: number): boolean {\n return this.selectedHour === hour;\n }\n\n /** Changes selected hour based on coordinates. */\n private _setHour(event: MouseEvent | TouchEvent): void {\n const element = this._element.nativeElement;\n const window = this._getWindow();\n const elementRect = element.getBoundingClientRect();\n const width = element.offsetWidth;\n const height = element.offsetHeight;\n const pageX =\n event instanceof MouseEvent ? event.pageX : event.touches[0].pageX;\n const pageY =\n event instanceof MouseEvent ? event.pageY : event.touches[0].pageY;\n const x = width / 2 - (pageX - elementRect.left - window.scrollX);\n const y = height / 2 - (pageY - elementRect.top - window.scrollY);\n const unit = Math.PI / 6;\n const atan2 = Math.atan2(-x, y);\n const radian = atan2 < 0 ? Math.PI * 2 + atan2 : atan2;\n const initialValue = Math.round(radian / unit);\n const z = Math.sqrt(x * x + y * y);\n const outer =\n z > getClockOuterRadius(this.touchUi) - getClockTickRadius(this.touchUi);\n const value = this._getHourValue(initialValue, outer);\n\n if (this.availableHours.includes(value)) {\n this.selectedHour = value;\n this.selectedChange.emit({\n hour: this.selectedHour,\n });\n }\n\n this._cdr.detectChanges();\n }\n\n /** Return value of hour. */\n private _getHourValue(value: number, outer: boolean): number {\n const edgeValue = value === 0 || value === 12;\n\n if (this.isMeridiem) {\n return edgeValue ? 12 : value;\n }\n\n if (outer) {\n return edgeValue ? 0 : value;\n }\n\n return edgeValue ? 12 : value + 12;\n }\n\n /** Creates list of hours. */\n private _initHours(): void {\n const initialHours = this.isMeridiem ? ALL_HOURS.slice(1, 13) : ALL_HOURS;\n\n this.hours = initialHours.map((hour) => {\n const radian = (hour / 6) * Math.PI;\n const radius = this._getRadius(hour);\n\n return {\n value: hour,\n displayValue: hour === 0 ? '00' : String(hour),\n left: getClockCorrectedRadius(this.touchUi) + Math.sin(radian) * radius,\n top: getClockCorrectedRadius(this.touchUi) - Math.cos(radian) * radius,\n disabled: !this.availableHours.includes(hour),\n };\n });\n }\n\n /** Returns radius based on hour */\n private _getRadius(hour: number): number {\n if (this.isMeridiem) {\n return getClockOuterRadius(this.touchUi);\n }\n\n const outer = hour >= 0 && hour < 12;\n const radius = outer\n ? getClockOuterRadius(this.touchUi)\n : getClockInnerRadius(this.touchUi);\n\n return radius;\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n}\n","<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n@for (hour of hours; track hour.value) {\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n}\n","import { InjectionToken, LOCALE_ID, inject } from '@angular/core';\nimport { MatTimePeriodType } from '../time-period';\n\n/** InjectionToken for timepicker that can be used to override default locale code. */\nexport const MAT_TIME_LOCALE = new InjectionToken<string>('MAT_TIME_LOCALE', {\n providedIn: 'root',\n factory: MAT_DATE_TIME_LOCALE_FACTORY,\n});\n\nexport function MAT_DATE_TIME_LOCALE_FACTORY(): string {\n return inject(LOCALE_ID);\n}\n\n/**\n * No longer needed since MAT_TIME_LOCALE has been changed to a scoped injectable.\n * If you are importing and providing this in your code you can simply remove it.\n * @deprecated\n * @breaking-change 18.0.0\n */\nexport const MAT_TIME_LOCALE_PROVIDER = {\n provide: MAT_TIME_LOCALE,\n useExisting: LOCALE_ID,\n};\n\nexport abstract class TimeAdapter<T, L = any> {\n /** The locale to use for time. */\n protected locale: L;\n\n /**\n * Gets now's time.\n * @returns Now's time.\n */\n abstract now(): T;\n\n /**\n * Parses a time from a user-provided value.\n * @param value The value to parse.\n * @param parseFormat The expected format of the value being parsed\n * (type is implementation-dependent).\n * @returns The parsed time.\n */\n abstract parse(value: any, parseFormat: any): T | null;\n\n /**\n * Gets the hour component of the given time.\n * @param time The time to extract the hour from.\n * @returns The hour component.\n */\n abstract getHour(time: T): number;\n\n /**\n * Gets the minute component of the given time.\n * @param time The time to extract the minute from.\n * @returns The minute component.\n */\n abstract getMinute(time: T): number;\n\n /**\n * Update the hour component of the given time.\n * @param time The time to update the hour.\n * @param hour The new hour to update given time.\n * @returns The new time with updated hour component.\n */\n abstract updateHour(time: T, hour: number): T;\n\n /**\n * Update the minute component of the given time.\n * @param time The time to update the minute.\n * @param minute The new minute to update given time.\n * @returns The new time with updated minute component.\n */\n abstract updateMinute(time: T, minute: number): T;\n\n /**\n * Gets the period component of the given time.\n * @param time The time to extract the period from.\n * @returns The period component.\n */\n abstract getPeriod(time: T): MatTimePeriodType;\n\n /**\n * Formats a time as a string according to the given format.\n * @param time The value to format.\n * @param displayFormat The format to use to display the time as a string.\n * @returns The formatted time string.\n */\n abstract format(time: T, displayFormat: any): string;\n\n /**\n * Checks whether the given object is considered a time instance by this timeAdapter.\n * @param obj The object to check\n * @returns Whether the object is a time instance.\n */\n abstract isTimeInstance(obj: any): boolean;\n\n /**\n * Checks whether the given time is valid.\n * @param time The time to check.\n * @returns Whether the time is valid.\n */\n abstract isValid(time: T): boolean;\n\n /**\n * Gets time instance that is not valid.\n * @returns An invalid time.\n */\n abstract invalid(): T;\n\n /**\n * Given a potential time object, returns that same time object if it is\n * a valid time, or `null` if it's not a valid time.\n * @param obj The object to check.\n * @returns A time or `null`.\n */\n getValidTimeOrNull(obj: unknown): T | null {\n return this.isTimeInstance(obj) && this.isValid(obj as T)\n ? (obj as T)\n : null;\n }\n\n /**\n * Attempts to deserialize a value to a valid time object. The `<mat-timepicker>` will call this\n * method on all of its `@Input()` properties that accept time. It is therefore possible to\n * support passing values from your backend directly to these properties by overriding this method\n * to also deserialize the format used by your backend.\n * @param value The value to be deserialized into a time object.\n * @returns The deserialized time object, either a valid time, null if the value can be\n * deserialized into a null time (e.g. the empty string), or an invalid date.\n */\n deserialize(value: any): T | null {\n if (value == null || (this.isTimeInstance(value) && this.isValid(value))) {\n return value;\n }\n return this.invalid();\n }\n\n /**\n * Sets the locale used for all time.\n * @param locale The new locale.\n */\n setLocale(locale: L) {\n this.locale = locale;\n }\n\n /**\n * Compares two time.\n * @param first The first time to compare.\n * @param second The second time to compare.\n * @returns 0 if the time are equal, a number less than 0 if the first time is earlier,\n * a number greater than 0 if the first time is later.\n */\n abstract compareTime(first: T, second: T): number;\n\n /**\n * Checks if two time are equal.\n * @param first The first time to check.\n * @param second The second time to check.\n * @returns Whether the two time are equal.\n * Null time are considered equal to other null time.\n */\n sameTime(first: T | null, second: T | null): boolean {\n if (first && second) {\n let firstValid = this.isValid(first);\n let secondValid = this.isValid(second);\n if (firstValid && secondValid) {\n return !this.compareTime(first, second);\n }\n return firstValid == secondValid;\n }\n return first == second;\n }\n\n /**\n * Clamp the given time between min and max time.\n * @param time The time to clamp.\n * @param min The minimum value to allow. If null or omitted no min is enforced.\n * @param max The maximum value to allow. If null or omitted no max is enforced.\n * @returns `min` if `time` is less than `min`, `max` if time is greater than `max`,\n * otherwise `time`.\n */\n clampTime(time: T, min?: T | null, max?: T | null): T {\n if (min && this.compareTime(time, min) < 0) {\n return min;\n }\n if (max && this.compareTime(time, max) > 0) {\n return max;\n }\n return time;\n }\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { MAT_TIME_LOCALE, TimeAdapter } from './time-adapter';\nimport { MatTimePeriodType } from '../time-period';\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n/** Adapts the native JS Date for components that work with time. */\n@Injectable()\nexport class NativeDateTimeAdapter extends TimeAdapter<Date> {\n private readonly _matTimeLocale = inject(MAT_TIME_LOCALE, { optional: true });\n\n constructor(@Optional() @Inject(MAT_TIME_LOCALE) matTimeLocale: string) {\n super();\n if (matTimeLocale !== undefined) {\n this._matTimeLocale = matTimeLocale;\n }\n super.setLocale(this._matTimeLocale);\n }\n\n now(): Date {\n return new Date();\n }\n\n parse(value: any, parseFormat?: any): Date | null {\n // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n // parameters.\n if (typeof value == 'number') {\n return new Date(value);\n }\n\n const { hour, minute, meridiem } = this.parseTime(value);\n // hour should be in 24h format\n // so, if meridiem is 'pm' and hour is less than 12, add 12 to hour\n const correctedHour = meridiem === 'pm' && hour < 12 ? hour + 12 : hour;\n const date = new Date();\n date.setHours(correctedHour);\n date.setMinutes(minute);\n\n return value ? new Date(date) : null;\n }\n\n parseTime(value: string): {\n hour: number;\n minute: number;\n meridiem?: 'am' | 'pm';\n } {\n const time = value.replace(/(\\sam|\\spm|\\sAM|\\sPM|am|pm|AM|PM)/g, '');\n const meridiem = value.replace(time, '').trim().toLowerCase() as\n | 'am'\n | 'pm';\n const [hour, minute] = time.split(':');\n\n return { hour: Number(hour), minute: Number(minute), meridiem };\n }\n\n getHour(date: Date): number {\n return date.getHours();\n }\n\n getMinute(date: Date): number {\n return date.getMinutes();\n }\n\n updateHour(date: Date, hour: number): Date {\n const copy = new Date(date.getTime());\n copy.setHours(hour);\n\n return copy;\n }\n\n updateMinute(date: Date, minute: number): Date {\n const copy = new Date(date.getTime());\n copy.setMinutes(minute);\n\n return copy;\n }\n\n getPeriod(date: Date): MatTimePeriodType {\n return date.getHours() < 12 ? 'am' : 'pm';\n }\n\n format(date: Date, displayFormat: Object): string {\n if (!this.isValid(date)) {\n throw Error('NativeDateTimeAdapter: Cannot format invalid date.');\n }\n\n const dtf = new Intl.DateTimeFormat(this.locale, {\n ...displayFormat,\n timeZone: 'utc',\n });\n\n return this._format(dtf, date);\n }\n\n /**\n * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n * invalid date for all other values.\n */\n override deserialize(value: any): Date | null {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n // string is the right format first.\n if (ISO_8601_REGEX.test(value)) {\n const date = new Date(value);\n if (this.isValid(date)) {\n return date;\n }\n }\n }\n return super.deserialize(value);\n }\n\n isTimeInstance(obj: any): boolean {\n return obj instanceof Date;\n }\n\n isValid(date: Date): boolean {\n return !isNaN(date.getTime());\n }\n\n invalid(): Date {\n return new Date(NaN);\n }\n\n compareTime(first: Date, second: Date): number {\n return (\n first.getHours() - second.getHours() ||\n first.getMinutes() - second.getMinutes()\n );\n }\n\n /**\n * When converting Date object to string, javascript built-in functions may return wrong\n * results because it applies its internal DST rules. The DST rules around the world change\n * very frequently, and the current valid rule is not always valid in previous years though.\n * We work around this problem building a new Date object which has its internal UTC\n * representation with the local date and time.\n * @param dtf Intl.DateTimeFormat object, containing the desired string format. It must have\n * timeZone set to 'utc' to work fine.\n * @param date Date from which we want to get the string representation according to dtf\n * @returns A Date object with its UTC representation based on the passed in date info\n */\n private _format(dtf: Intl.DateTimeFormat, date: Date) {\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n const d = new Date();\n d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n d.setUTCHours(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n return dtf.format(d);\n }\n}\n","import { PlatformModule } from '@angular/cdk/platform';\nimport { ModuleWithProviders, NgModule, Provider } from '@angular/core';\n\nimport { MAT_TIME_LOCALE_PROVIDER, TimeAdapter } from './time-adapter';\nimport { NativeDateTimeAdapter } from './native-date-time-adapter';\n\nexport * from './time-adapter';\nexport * from './native-date-time-adapter';\n\n@NgModule({\n imports: [PlatformModule],\n providers: [{ provide: TimeAdapter, useClass: NativeDateTimeAdapter }],\n})\nexport class NativeDateTimeModule {}\n\n@NgModule({\n providers: [provideNativeDateTimeAdapter()],\n})\nexport class MatNativeDateTimeModule {}\n\nexport function provideNativeDateTimeAdapter(): Provider {\n return { provide: TimeAdapter, useClass: NativeDateTimeAdapter };\n}\n","import {\n AfterContentInit,\n AfterViewChecked,\n Directive,\n EventEmitter,\n Input,\n Optional,\n Output,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\n\nimport { TimeAdapter } from './adapter';\nimport { MatTimePeriodType } from './time-period';\nimport { ALL_MINUTES } from './minutes-clock-dial';\nimport { ALL_HOURS } from './hours-clock-dial';\n\n@Directive()\nexport abstract class MatTimeFaceBase<T>\n implements AfterContentInit, AfterViewChecked\n{\n /** The currently selected time. */\n @Input()\n get selected(): T | null {\n return this._selected;\n }\n set selected(value: T | null) {\n this._selected = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(value),\n );\n\n if (!this._selected) {\n return;\n }\n\n const hour = this._timeAdapter.getHour(this._selected);\n this.selectedHour = hour > 12 && this.isMeridiem ? hour - 12 : hour;\n if (hour === 0 && this.isMeridiem) {\n this.selectedHour = 12;\n }\n this.selectedMinute = this._timeAdapter.getMinute(this._selected);\n this.availableHours = ALL_HOURS;\n\n if (this.isMeridiem) {\n this.period = this._timeAdapter.getPeriod(this._selected);\n }\n\n this.availableMinutes = ALL_MINUTES;\n this._setMinHour();\n this._setMaxHour();\n this._setMinMinute();\n this._setMaxMinute();\n }\n private _selected: T | null;\n\n /** The minimum selectable time. */\n @Input()\n get minTime(): T | null {\n return this._minTime;\n }\n set minTime(value: T | null) {\n this._minTime = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(value),\n );\n\n if (value) {\n this._setMinHour();\n this._setMinMinute();\n this._setDisabledPeriod();\n }\n }\n private _minTime: T | null;\n\n /** The maximum selectable time. */\n @Input()\n get maxTime(): T | null {\n return this._maxTime;\n }\n set maxTime(value: T | null) {\n this._maxTime = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(value),\n );\n\n if (value) {\n this._setMaxHour();\n this._setMaxMinute();\n this._setDisabledPeriod();\n }\n }\n private _maxTime: T | null;\n\n /** Step over minutes. */\n @Input()\n get minuteInterval(): number {\n return this._minuteInterval;\n }\n set minuteInterval(value: number) {\n this._minuteInterval = coerceNumberProperty(value) || 1;\n }\n private _minuteInterval: number = 1;\n\n /** Whether the clock uses 12 hour format. */\n @Input() isMeridiem: boolean;\n\n /** Color palette. */\n @Input() color: ThemePalette = 'primary';\n\n /** Emits when any hour, minute or period is selected. */\n @Output() _userSelection = new EventEmitter<T>();\n\n @Output() selectedChange = new EventEmitter<T>();\n\n selectedHour: number = 0;\n selectedMinute: number = 0;\n period: MatTimePeriodType;\n disabledPeriod: MatTimePeriodType | null = null;\n availableMinutes = ALL_MINUTES;\n availableHours = ALL_HOURS;\n\n /**\n * Used to focus the active cell after change detection has run.\n */\n private _focusActiveCellAfterViewChecked = false;\n\n constructor(@Optional() protected _timeAdapter: TimeAdapter<T>) {}\n\n ngAfterContentInit() {\n if (!this.selected) {\n this.selected = this._timeAdapter.clampTime(\n this._timeAdapter.now(),\n this.minTime,\n this.maxTime,\n );\n this._userSelection.emit(this.selected);\n }\n }\n\n ngAfterViewChecked() {\n if (this._focusActiveCellAfterViewChecked) {\n this.focusActiveCell();\n this._focusActiveCellAfterViewChecked = false;\n }\n }\n\n /**\n * Focuses the active cell after or input the microtask queue is empty.\n *\n * Adding a 0ms setTimeout seems to fix Voiceover losing focus when pressing PageUp/PageDown.\n *\n * Determined a 0ms by gradually increasing duration from 0 and testing two use cases with screen\n * reader enabled:\n *\n * 1. Pressing PageUp/PageDown repeatedly with pausing between each key press.\n * 2. Pressing and holding the PageDown key with repeated keys enabled.\n *\n * Test 1 worked roughly 95-99% of the time with 0ms and got a little bit better as the duration\n * increased. Test 2 got slightly better until the duration was long enough to interfere with\n * repeated keys. If the repeated key speed was faster than the timeout duration, then pressing\n * and holding pagedown caused the entire page to scroll.\n *\n * Since repeated key speed can verify across machines, determined that any duration could\n * potentially interfere with repeated keys. 0ms would be best because it almost entirely\n * eliminates the focus being lost in Voiceover without causing unintended side effects.\n * Adding delay also complicates writing tests.\n */\n abstract focusActiveCell(): void;\n\n /** Handles hour selection. */\n _onHourSelected(hour: number): void {\n this.selectedHour = hour;\n const selected = this._timeAdapter.updateHour(\n this.selected!,\n this._getHourBasedOnPeriod(hour),\n );\n this._timeSelected(selected);\n }\n\n /** Handles minute selection. */\n _onMinuteSelected(minute: number): void {\n this.selectedMinute = minute;\n const selected = this._timeAdapter.updateMinute(this.selected!, minute);\n this._timeSelected(selected);\n }\n\n /** Handles period changing. */\n _onPeriodChanged(period: MatTimePeriodType): void {\n this.period = period;\n const selected = this._timeAdapter.updateHour(\n this.selected!,\n this._getHourBasedOnPeriod(this.selectedHour),\n );\n this._timeSelected(selected);\n }\n\n _getAvailableHours(): number[] {\n if (this.isMeridiem) {\n return this.availableHours\n .filter((h) => {\n if (this.period === 'am') {\n return h < 12;\n }\n\n if (this.period === 'pm') {\n return h >= 12;\n }\n\n return h;\n })\n .map((h) => {\n if (h > 12) {\n return h - 12;\n }\n\n if (h === 0) {\n return 12;\n }\n\n return h;\n });\n }\n\n return this.availableHours;\n }\n\n _onKeydown(event: KeyboardEvent, view: 'hour' | 'minute'): void {\n switch (view) {\n case 'hour':\n this._handleHourKeydown(event);\n break;\n case 'minute':\n this._handleMinuteKeydown(event);\n break;\n }\n }\n\n private _handleHourKeydown(event: KeyboardEvent): void {\n const hours = this._getAvailableHours();\n const selectedHourIndex = hours.findIndex(\n (hour) => hour === this.selectedHour,\n );\n\n if (!hours.length) {\n return;\n }\n\n switch (event.keyCode) {\n case UP_ARROW:\n if (selectedHourIndex + 1 >= hours.length || selectedHourIndex < 0) {\n this._onHourSelected(hours[0]);\n } else {\n this._onHourSelected(hours[selectedHourIndex + 1]);\n }\n break;\n case DOWN_ARROW:\n if (selectedHourIndex - 1 < 0 || selectedHourIndex < 0) {\n this._onHourSelected(hours[hours.length - 1]);\n } else {\n this._onHourSelected(hours[selectedHourIndex - 1]);\n }\n break;\n default:\n break;\n }\n\n this._scheduleFocusActiveCellAfterViewChecked();\n }\n\n private _handleMinuteKeydown(event: KeyboardEvent): void {\n const minutes = this.availableMinutes;\n const selectedMinuteIndex = minutes.findIndex(\n (minute) => minute === this.selectedMinute,\n );\n\n if (!minutes.length) {\n return;\n }\n\n switch (event.keyCode) {\n case UP_ARROW:\n if (\n selectedMinuteIndex + this.minuteInterval >= minutes.length ||\n selectedMinuteIndex < 0\n ) {\n const difference =\n 60 - this.selectedMinute + Math.min(...this.availableMinutes);\n const count = Math.ceil(difference / this.minuteInterval);\n const differenceForValid = count * this.minuteInterval;\n const nextValidValue = this.selectedMinute + differenceForValid;\n const correctIndex = minutes.findIndex(\n (minute) => minute === nextValidValue - 60, // amount of mins\n );\n this._onMinuteSelected(minutes[correctIndex]);\n } else {\n this._onMinuteSelected(\n minutes[selectedMinuteIndex + this.minuteInterval],\n );\n }\n break;\n case DOWN_ARROW:\n if (\n selectedMinuteIndex - this.minuteInterval < 0 ||\n selectedMinuteIndex < 0\n ) {\n const difference =\n 60 + this.selectedMinute - Math.max(...this.availableMinutes);\n const count = Math.ceil(difference / this.minuteInterval);\n const differenceForValid = count * this.minuteInterval;\n const nextValidValue = this.selectedMinute - differenceForValid;\n const correctIndex = minutes.findIndex(\n (minute) => minute === nextValidValue + 60, // amount of mins\n );\n this._onMinuteSelected(minutes[correctIndex]);\n } else {\n this._onMinuteSelected(\n minutes[selectedMinuteIndex - this.minuteInterval],\n );\n }\n break;\n default:\n break;\n }\n }\n\n /** Gets a correct hours based on meridiem and period. */\n private _getHourBasedOnPeriod(hour: number): number {\n const afterNoon = this.isMeridiem && this.period === 'pm';\n const beforeNoon = this.isMeridiem && this.period === 'am';\n\n if (afterNoon) {\n return hour === 12 ? hour : hour + 12;\n }\n\n if (beforeNoon) {\n return hour === 12 ? 0 : hour;\n }\n\n return hour;\n }\n\n private _timeSelected(value: T): void {\n if (value && !this._timeAdapter.sameTime(value, this.selected)) {\n this.selectedChange.emit(value);\n }\n\n this._userSelection.emit(value);\n }\n\n /** Sets min hour. */\n private _setMinHour(): void {\n if (!this.minTime) {\n return;\n }\n\n const minHour = this._timeAdapter.getHour(this.minTime);\n this.availableHours = this.availableHours.filter((h) => h >= minHour);\n }\n\n /** Sets max hour. */\n private _setMaxHour(): void {\n if (!this.maxTime) {\n return;\n }\n\n const maxHour = this._timeAdapter.getHour(this.maxTime);\n this.availableHours = this.availableHours.filter((h) => h <= maxHour);\n }\n\n /** Sets min minute. */\n private _setMinMinute(): void {\n if (!this.selected || !this.minTime) {\n return;\n }\n\n const selectedHour = this._timeAdapter.getHour(this.selected);\n const minHour = this._timeAdapter.getHour(this.minTime);\n\n const minMinute =\n selectedHour > minHour ? 0 : this._timeAdapter.getMinute(this.minTime);\n\n this.availableMinutes = this.availableMinutes.filter(\n (minute) => minute >= minMinute,\n );\n\n if (selectedHour < minHour) {\n this.availableMinutes = [];\n }\n }\n\n /** Sets max minute. */\n private _setMaxMinute(): void {\n if (!this.selected || !this.maxTime) {\n return;\n }\n\n const selectedHour = this._timeAdapter.getHour(this.selected);\n const maxHour = this._timeAdapter.getHour(this.maxTime);\n\n const maxMinute =\n selectedHour < maxHour ? 59 : this._timeAdapter.getMinute(this.maxTime);\n\n this.availableMinutes = this.availableMinutes.filter(\n (minute) => minute <= maxMinute,\n );\n\n if (selectedHour > maxHour) {\n this.availableMinutes = [];\n }\n }\n\n /** Sets disabled period. */\n private _setDisabledPeriod(): void {\n if (this.minTime) {\n const minHour = this._timeAdapter.getHour(this.minTime);\n\n if (minHour >= 12) {\n this.disabledPeriod = 'am';\n }\n }\n\n if (this.maxTime) {\n const maxHour = this._timeAdapter.getHour(this.maxTime);\n const maxMinute = this._timeAdapter.getHour(this.maxTime);\n\n if (maxHour < 12 || (maxHour === 12 && maxMinute === 0)) {\n this.disabledPeriod = 'pm';\n }\n }\n }\n\n /** Schedules focus to be moved to the active cell on the next tick. */\n private _scheduleFocusActiveCellAfterViewChecked() {\n this._focusActiveCellAfterViewChecked = true;\n }\n}\n","import {\n Input,\n Output,\n EventEmitter,\n Directive,\n ElementRef,\n ChangeDetectorRef,\n Inject,\n Self,\n HostListener,\n InjectionToken,\n inject,\n DOCUMENT,\n} from '@angular/core';\n\nexport function withZeroPrefix(value: number): string {\n return value < 10 ? `0${value}` : `${value}`;\n}\n\nexport function withZeroPrefixMeridiem(\n value: number,\n isMeridiem: boolean,\n): string {\n const newValue = isMeridiem && value === 0 ? 12 : value;\n\n return withZeroPrefix(newValue);\n}\n\nconst SPECIAL_KEYS = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab'];\n\nexport const MAT_TIMEPICKER_INPUTS_KEYDOWN_HANDLER = new InjectionToken<\n (event: KeyboardEvent) => void\n>('MatTimepickerInputKeydownHandler', {\n factory: () => (event: KeyboardEvent) => {\n const isDigit = /^[0-9]$/.test(event.key);\n const isSpecial = SPECIAL_KEYS.includes(event.code);\n\n if (!isDigit && !isSpecial) {\n event.preventDefault();\n }\n },\n});\n\nexport function provideMatTimepickerInputsKeydownHandler(\n handler: (event: KeyboardEvent) => void,\n) {\n return {\n provide: MAT_TIMEPICKER_INPUTS_KEYDOWN_HANDLER,\n useValue: handler,\n };\n}\n\n@Directive()\nexport abstract class MatTimeInputBase {\n @Input()\n get value(): number {\n return this._value;\n }\n set value(value: number) {\n this._value = value;\n if (!this.hasFocus) {\n this.setInputValue(this._value);\n }\n // we need timeout here to set placeholder first time\n setTimeout(() => {\n this.setInputPlaceholder(this._value);\n }, 0);\n }\n private _value: number;\n\n @Output() timeChanged = new EventEmitter<number>();\n\n @HostListener('keydown', ['$event']) _keydown(event: KeyboardEvent) {\n this._keydownHandler(event);\n }\n\n private readonly _keydownHandler = inject(\n MAT_TIMEPICKER_INPUTS_KEYDOWN_HANDLER,\n );\n\n get inputElement() {\n return this.element.nativeElement as HTMLInputElement;\n }\n\n get hasFocus() {\n return this.element?.nativeElement === this._document.activeElement;\n }\n\n constructor(\n private element: ElementRef<HTMLInputElement>,\n private _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: Document,\n ) {}\n\n focus() {\n this.setInputValue(null);\n }\n\n blur() {\n const isNumber = !isNaN(Number(this.inputElement.value));\n const value = this._formatValue(\n isNumber ? Number(this.inputElement.value || this._value) : this.value,\n );\n this.setInputValue(value);\n this.setInputPlaceholder(value);\n this.timeChanged.emit(value);\n }\n\n setInputValue(value: number | null) {\n if (value !== null) {\n this.inputElement.value = this._withZeroPrefix(value);\n } else {\n this.inputElement.value = '';\n }\n\n this._cdr.markForCheck();\n }\n\n setInputPlaceholder(value: number) {\n this.inputElement.placeholder = this._withZeroPrefix(value);\n this._cdr.markForCheck();\n }\n\n abstract _withZeroPrefix(value: number): string;\n\n abstract _formatValue(value: number): number;\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\nimport { TimepickerOrientation } from './orientation';\n\n@Component({\n selector: 'mat-timepicker-content-layout',\n standalone: true,\n templateUrl: './timepicker-content-layout.html',\n styleUrls: ['./timepicker-content-layout.scss'],\n exportAs: 'matTimepickerContent',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-timepicker-content-layout',\n '[class.mat-timepicker-content-layout-horizontal]': 'orientation === \"horizontal\"',\n '[class.mat-timepicker-content-layout-vertical]': 'orientation === \"vertical\"',\n },\n})\nexport class MatTimepickerContentLayout {\n /** Content title. */\n @Input() title: string;\n\n /** Layout orientation. */\n @Input() orientation: TimepickerOrientation = 'vertical';\n}\n","<h6 class=\"mat-timepicker-content-layout-title\">{{ title }}</h6>\n\n<div class=\"mat-timepicker-content-layout-container\">\n <div class=\"mat-timepicker-content-layout-values\">\n <div class=\"mat-timepicker-content-layout-hours\">\n <ng-content select=\"[hours]\"></ng-content>\n </div>\n <span class=\"mat-timepicker-content-layout-separator\">:</span>\n <div class=\"mat-timepicker-content-layout-minutes\">\n <ng-content select=\"[minutes]\"></ng-content>\n </div>\n\n <ng-content select=\"[mat-time-period]\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Input,\n Output,\n EventEmitter,\n input,\n booleanAttribute,\n output,\n linkedSignal,\n} from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatRippleModule } from '@angular/material/core';\n\nimport { MatTimepickerIntl } from './timepicker-intl';\n\nexport type MatTimePeriodType = 'am' | 'pm';\n\n@Component({\n selector: 'mat-time-period',\n standalone: true,\n imports: [MatDividerModule, MatRippleModule],\n templateUrl: './time-period.html',\n styleUrls: ['./time-period.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-time-period',\n '[class.mat-time-period-vertical]': 'vertical()',\n '[class.mat-time-period-horizontal]': '!vertical()',\n '[attr.aria-orientation]': 'vertical() ? \"vertical\" : \"horizontal\"',\n },\n})\nexport class MatTimePeriod {\n readonly vertical = input(true, { transform: booleanAttribute });\n readonly period = input<MatTimePeriodType>('am');\n readonly disabledPeriod = input<MatTimePeriodType | null>(null);\n readonly periodChanged = output<MatTimePeriodType>();\n\n readonly _currentPeriod = linkedSignal(() => this.period());\n\n constructor(public _intl: MatTimepickerIntl) {}\n\n setPeriod(event: Event, period: MatTimePeriodType): void {\n event.preventDefault();\n this._currentPeriod.set(period);\n this.periodChanged.emit(period);\n }\n\n _isPeriodDisabled(period: MatTimePeriodType): boolean {\n if (!this.disabledPeriod()) {\n return false;\n }\n\n return this.disabledPeriod() === period;\n }\n}\n","<div\n tabindex=\"0\"\n class=\"mat-time-period-item\"\n matRipple\n [class.mat-time-period-item-active]=\"_currentPeriod() === 'am'\"\n [class.mat-time-period-item-disabled]=\"_isPeriodDisabled('am')\"\n (click)=\"setPeriod($event, 'am')\"\n (keydown.space)=\"setPeriod($event, 'am')\"\n>\n {{ _intl.am }}\n</div>\n<mat-divider [vertical]=\"!vertical()\"></mat-divider>\n<div\n tabindex=\"0\"\n class=\"mat-time-period-item\"\n matRipple\n [class.mat-time-period-item-active]=\"_currentPeriod() === 'pm'\"\n [class.mat-time-period-item-disabled]=\"_isPeriodDisabled('pm')\"\n (click)=\"setPeriod($event, 'pm')\"\n (keydown.space)=\"setPeriod($event, 'pm')\"\n>\n {{ _intl.pm }}\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Optional,\n ElementRef,\n ChangeDetectorRef,\n input,\n effect,\n output,\n computed,\n linkedSignal,\n} from '@angular/core';\n\nimport { take } from 'rxjs';\n\nimport { TimeAdapter } from './adapter';\nimport { MatTimeFaceBase } from './time-face-base';\nimport { withZeroPrefixMeridiem } from './time-input-base';\nimport { MatTimepickerIntl } from './timepicker-intl';\nimport { TimepickerOrientation } from './orientation';\nimport { MatTimepickerContentLayout } from './timepicker-content-layout';\nimport { MatHoursClockDial } from './hours-clock-dial';\nimport { MatMinutesClockDial } from './minutes-clock-dial';\nimport { MatTimePeriod } from './time-period';\n\nexport type MatDialView = 'hours' | 'minutes';\n\n@Component({\n selector: 'mat-clock-dials',\n standalone: true,\n imports: [\n MatTimepickerContentLayout,\n MatHoursClockDial,\n MatMinutesClockDial,\n MatTimePeriod,\n ],\n templateUrl: './clock-dials.html',\n styleUrls: ['./clock-dials.scss'],\n exportAs: 'matClockDials',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'dial',\n class: 'mat-clock-dials',\n },\n})\nexport class MatClockDials<T> extends MatTimeFaceBase<T> {\n /** Layout orientation. */\n readonly orientation = input<TimepickerOrientation>('vertical');\n\n /** Whether the timepicker UI is in touch mode. */\n readonly touchUi = input<boolean>(false);\n\n /** Whether the current view for the timepicker. */\n readonly currentView = input<MatDialView>('hours');\n\n /** Emits when the view is changed. */\n readonly viewChanged = output<MatDialView>();\n\n readonly isHoursView = computed(() => this._view() === 'hours');\n\n /** Specifies the view of clock dial. */\n private readonly _view = linkedSignal<MatDialView>(() => this.currentView());\n\n constructor(\n public _intl: MatTimepickerIntl,\n @Optional() _timeAdapter: TimeAdapter<T>,\n private _elementRef: ElementRef,\n private _cdr: ChangeDetectorRef,\n ) {\n super(_timeAdapter);\n effect(() => this.viewChanged.emit(this._view()));\n }\n\n /** Changes clock dial view. */\n onViewChange(event: Event, view: MatDialView): void {\n event.preventDefault();\n this._view.set(view);\n }\n\n focusActiveCell(): void {\n const activeCell: HTMLElement | null =\n this._elementRef.nativeElement.querySelector(\n '.mat-timepicker-content .mat-clock-dial-cell-active', // to avoid focus for inline mode\n );\n\n if (activeCell) {\n activeCell.focus();\n return;\n }\n\n const activePoint: HTMLElement | null =\n this._elementRef.nativeElement.querySelector(\n '.mat-timepicker-content .mat-clock-dial-hand-point', // to avoid focus for inline mode\n );\n\n if (activePoint) {\n // if no active cell we need to focus a small dot\n activePoint.focus();\n }\n }\n\n _withZeroPrefix(value: number): string {\n if (value === 0) {\n return '00';\n }\n\n return withZeroPrefixMeridiem(value, this.isMeridiem);\n }\n\n override _onMinuteSelected(minute: number): void {\n super._onMinuteSelected(minute);\n this._cdr.detectChanges();\n }\n\n /** Handles hour selection. */\n _onHourChanged({\n hour,\n changeView = false,\n }: {\n hour: number;\n changeView?: boolean;\n }): void {\n if (changeView) {\n this._view.set('minutes');\n }\n this._onHourSelected(hour);\n this._cdr.detectChanges();\n }\n}\n","<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation()\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView()\"\n (click)=\"onViewChange($event, 'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView()\"\n (click)=\"onViewChange($event, 'minutes')\"\n (keydown.space)=\"onViewChange($event, 'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n @if (isMeridiem) {\n <ng-container mat-time-period>\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation() === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-container>\n }\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation() === 'horizontal'\"\n >\n @if (isHoursView()) {\n <mat-hours-clock-dial\n animate.enter=\"mat-clock-dial-enter\"\n animate.leave=\"mat-clock-dial-leave\"\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n [touchUi]=\"touchUi()\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n }\n\n @if (!isHoursView()) {\n <mat-minutes-clock-dial\n animate.enter=\"mat-clock-dial-enter\"\n animate.leave=\"mat-clock-dial-leave\"\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n [touchUi]=\"touchUi()\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n }\n </div>\n</mat-timepicker-content-layout>\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Optional,\n Directive,\n Input,\n ElementRef,\n ChangeDetectorRef,\n Inject,\n DOCUMENT,\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { TimeAdapter } from './adapter';\nimport { MatTimeFaceBase } from './time-face-base';\nimport { MatTimepickerIntl } from './timepicker-intl';\nimport {\n MatTimeInputBase,\n withZeroPrefix,\n withZeroPrefixMeridiem,\n} from './time-input-base';\nimport { MatTimePeriod } from './time-period';\nimport { MatTimepickerContentLayout } from './timepicker-content-layout';\n\n@Directive({\n selector: 'input[matHourInput]',\n standalone: true,\n exportAs: 'matTimeInput',\n host: {\n class: 'mat-time-input',\n '(focus)': 'focus()',\n '(blur)': 'blur()',\n },\n})\nexport class MatHourInput extends MatTimeInputBase {\n @Input()\n get availableHours(): number[] {\n return this._availableHours;\n }\n set availableHours(value: number[]) {\n this._availableHours = value;\n }\n private _availableHours: number[] = [];\n\n @Input() isMeridiem: boolean;\n\n constructor(\n element: ElementRef<HTMLInputElement>,\n _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) _document: Document,\n ) {\n super(element, _cdr, _document);\n }\n\n _withZeroPrefix(value: number): string {\n return withZeroPrefixMeridiem(value, this.isMeridiem);\n }\n\n _formatValue(hour: number): number {\n const getValue = () => {\n if (this.isMeridiem) {\n if (hour === 0 || hour === 24) {\n return 12;\n }\n }\n\n if (hour === 24) {\n return 0;\n }\n\n return this.isMeridiem && hour > 12 ? hour - 12 : hour;\n };\n\n const value = getValue();\n\n if (this.isMeridiem) {\n if (!this.availableHours.length) {\n return this.value;\n }\n\n if (value === 12 && this.availableHours.includes(12)) {\n return 12;\n }\n\n if (value === 12 && !this.availableHours.includes(12)) {\n return Math.min(...this.availableHours);\n }\n\n if (value >= 1 && value < 12) {\n // the last item is max becuase 12 at the beginning is kinda \"min\"\n const maxHour = this.availableHours[this.availableHours.length - 1];\n\n return Math.min(\n Math.max(value, Math.min(...this.availableHours)),\n maxHour,\n );\n }\n }\n\n return Math.min(\n Math.max(value, Math.min(...this.availableHours)),\n Math.max(...this.availableHours),\n );\n }\n}\n\n@Directive({\n selector: 'input[matMinuteInput]',\n standalone: true,\n exportAs: 'matTimeInput',\n host: {\n class: 'mat-time-input',\n '(focus)': 'focus()',\n '(blur)': 'blur()',\n },\n})\nexport class MatMinuteInput extends MatTimeInputBase {\n /** Step over minutes. */\n @Input()\n get interval(): number {\n return this._interval;\n }\n set interval(value: number) {\n this._interval = coerceNumberProperty(value) || 1;\n }\n private _interval: number = 1;\n\n @Input()\n get availableMinutes(): number[] {\n return this._availableMinutes;\n }\n set availableMinutes(value: number[]) {\n this._availableMinutes = value;\n }\n private _availableMinutes: number[] = [];\n\n constructor(\n element: ElementRef<HTMLInputElement>,\n _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) _document: Document,\n ) {\n super(element, _cdr, _document);\n }\n\n _withZeroPrefix(value: number): string {\n return withZeroPrefix(value);\n }\n\n _formatValue(value: number): number {\n if (!this.availableMinutes.length) {\n return this.value;\n }\n\n const roundedValue = Math.round(value / this.interval) * this.interval;\n\n return Math.min(\n Math.max(roundedValue, Math.min(...this.availableMinutes)),\n Math.max(...this.availableMinutes),\n );\n }\n}\n\n@Component({\n selector: 'mat-time-inputs',\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatTimepickerContentLayout,\n MatHourInput,\n MatMinuteInput,\n MatTimePeriod,\n ],\n templateUrl: './time-inputs.html',\n styleUrls: ['./time-inputs.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-time-inputs',\n },\n})\nexport class MatTimeInputs<T> extends MatTimeFaceBase<T> {\n constructor(\n public _intl: MatTimepickerIntl,\n @Optional() _timeAdapter: TimeAdapter<T>,\n private _elementRef: ElementRef,\n ) {\n super(_timeAdapter);\n }\n\n /**\n * Using for skipping that focus shouldn't be moved to the active cell on the next tick.\n * We need to use it to avoid focusing input for input mode.\n */\n private _skipNextTickFocus = false;\n\n focusActiveCell(): void {\n const activeCell: HTMLElement | null =\n this._elementRef.nativeElement.querySelector(\n '.mat-timepicker-content input', // to avoid focus for inline mode\n );\n if (activeCell && !this._skipNextTickFocus) {\n activeCell.focus();\n this._skipNextTickFocus = true;\n }\n }\n}\n","<mat-timepicker-content-layout [title]=\"_intl.inputsTitle\">\n <mat-form-field\n class=\"mat-time-inputs-field\"\n appearance=\"outline\"\n hours\n [color]=\"color\"\n >\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n matInput\n matHourInput\n [isMeridiem]=\"isMeridiem\"\n [value]=\"selectedHour\"\n [availableHours]=\"_getAvailableHours()\"\n (timeChanged)=\"_onHourSelected($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n />\n <mat-hint>{{ _intl.hourInputHint }}</mat-hint>\n </mat-form-field>\n <mat-form-field\n class=\"mat-time-inputs-field\"\n appearance=\"outline\"\n minutes\n [color]=\"color\"\n >\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n matInput\n matMinuteInput\n [value]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n (timeChanged)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n />\n <mat-hint>{{ _intl.minuteInputHint }}</mat-hint>\n </mat-form-field>\n\n @if (isMeridiem) {\n <ng-container mat-time-period>\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-container>\n }\n</mat-timepicker-content-layout>\n","import {\n FactoryProvider,\n Injectable,\n OnDestroy,\n Optional,\n SkipSelf,\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { TimeAdapter } from './adapter';\n\nexport type ExtractTimeTypeFromSelection<T> = NonNullable<T>;\n\n/**\n * Event emitted by the time selection model when its selection changes.\n * @docs-private\n */\nexport interface TimeSelectionModelChange<S> {\n /** New value for the selection. */\n selection: S;\n\n /** Object that triggered the change. */\n source: unknown;\n\n /** Previous value */\n oldValue?: S;\n}\n\n/**\n * A selection model containing a time selection.\n */\n@Injectable()\nexport abstract class MatTimeSelectionModel<\n S,\n T = ExtractTimeTypeFromSelection<S>\n> implements OnDestroy\n{\n /** The current selection. */\n readonly selection: S;\n\n private readonly _selectionChanged = new Subject<\n TimeSelectionModelChange<S>\n >();\n\n /** Emits when the selection has changed. */\n selectionChanged: Observable<TimeSelectionModelChange<S>> =\n this._selectionChanged;\n\n /**\n * Updates the current selection in the model.\n * @param value New selection that should be assigned.\n * @param source Object that triggered the selection change.\n */\n updateSelection(value: S, source: unknown) {\n const oldValue = (this as { selection: S }).selection;\n (this as { selection: S }).selection = value;\n this._selectionChanged.next({ selection: value, source, oldValue });\n }\n\n protected constructor(protected _adapter: TimeAdapter<T>) {\n // this.selection = selection;\n }\n\n ngOnDestroy(): void {\n this._selectionChanged.complete();\n }\n\n /** Adds a time to the current selection. */\n abstract add(time: T | null): void;\n\n /** Clones the selection model. */\n abstract clone(): MatTimeSelectionModel<S, T>;\n}\n\n/**\n * A selection model that contains a single time.\n */\n@Injectable()\nexport class MatSingleTimeSelectionModel<T> extends MatTimeSelectionModel<\n T | null,\n T\n> {\n constructor(adapter: TimeAdapter<T>) {\n super(adapter);\n }\n\n /**\n * Adds a time to the current selection. In the case of a single time selection, the added time\n * simply overwrites the previous selection\n */\n add(time: T | null) {\n super.updateSelection(time, this);\n }\n\n /** Clones the selection model. */\n clone() {\n const clone = new MatSingleTimeSelectionModel<T>(this._adapter);\n clone.updateSelection(this.selection, this);\n return clone;\n }\n}\n\nexport function MAT_SINGLE_TIME_SELECTION_MODEL_FACTORY(\n parent: MatSingleTimeSelectionModel<unknown>,\n adapter: TimeAdapter<unknown>\n) {\n return parent || new MatSingleTimeSelectionModel(adapter);\n}\n\n/**\n * Used to provide a single selection model to a component.\n */\nexport const MAT_SINGLE_TIME_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n provide: MatTimeSelectionModel,\n deps: [\n [new Optional(), new SkipSelf(), MatSingleTimeSelectionModel],\n TimeAdapter,\n ],\n useFactory: MAT_SINGLE_TIME_SELECTION_MODEL_FACTORY,\n};\n","import {\n ComponentPortal,\n PortalModule,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ViewEncapsulation,\n ElementRef,\n AfterViewInit,\n ViewChild,\n inject,\n NgZone,\n Renderer2,\n} from '@angular/core';\n\nimport { MATERIAL_ANIMATIONS, ThemePalette } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Subject, Subscription, take } from 'rxjs';\n\nimport {\n ExtractTimeTypeFromSelection,\n MatTimeSelectionModel,\n} from './time-selection-model';\nimport { MatTimepickerBase, TimepickerMode } from './timepicker-base';\nimport { MatTimepickerIntl } from './timepicker-intl';\nimport { MatClockDials } from './clock-dials';\nimport { MatTimeInputs } from './time-inputs';\nimport { TimepickerOrientation } from './orientation';\n\n@Component({\n selector: 'mat-timepicker-content',\n standalone: true,\n imports: [\n PortalModule,\n A11yModule,\n MatTimeInputs,\n MatClockDials,\n MatButtonModule,\n ],\n templateUrl: './timepicker-content.html',\n styleUrls: ['./timepicker-content.scss'],\n exportAs: 'matTimepickerContent',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-timepicker-content',\n '[class]': 'color ? \"mat-\" + color : \"\"',\n '[class.mat-timepicker-content-touch]': 'timepicker.touchUi',\n '[class.mat-timepicker-content-animations-enabled]': '!_animationsDisabled',\n },\n})\nexport class MatTimepickerContent<S, T = ExtractTimeTypeFromSelection<S>>\n implements AfterViewInit\n{\n /** Reference to the internal clock dials component. */\n @ViewChild(MatClockDials) _dials: MatClockDials<T> | undefined;\n\n /** Reference to the internal time inputs component. */\n @ViewChild(MatTimeInputs) _inputs: MatTimeInputs<T> | undefined;\n\n /** Reference to the timepicker that created the overlay. */\n timepicker: MatTimepickerBase<any, S, T>;\n\n /** Display mode. */\n mode: TimepickerMode;\n\n /** Whether the animation is disabled. */\n protected _animationsDisabled = inject(MATERIAL_ANIMATIONS, {\n optional: true,\n })?.animationsDisabled;\n\n /** Whether the clock uses 12 hour format. */\n isMeridiem: boolean;\n\n /** Whether should toggle face button be shown. */\n showToggleModeButton: boolean;\n\n /** Step for minutes. */\n minuteInterval: number;\n\n /** Orientation for dial mode. */\n orientation: TimepickerOrientation;\n\n /** Portal with projected action buttons. */\n _actionsPortal: TemplatePortal | ComponentPortal<any> | null = null;\n\n /** Id of the label for the `role=\"dialog\"` element. */\n _dialogLabelId: string | null;\n\n /** Text for the close button. */\n _closeButtonText: string;\n\n /** Whether the close button currently has focus. */\n _closeButtonFocused: boolean;\n\n /** Whether there is an in-progress animation. */\n _isAnimating = false;\n\n /**\n * Theme color of the internal timepicker. This API is supported in M2 themes\n * only, it has no effect in M3 themes.\n */\n color: ThemePalette;\n\n /** Emits when an animation has finished. */\n readonly _animationDone = new Subject<void>();\n\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private _ngZone = inject(NgZone);\n private _model: MatTimeSelectionModel<S, T>;\n private _stateChanges: Subscription | undefined;\n private _eventCleanups: (() => void)[] | undefined;\n private _animationFallback: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private _globalModel: MatTimeSelectionModel<S, T>,\n private _changeDetectorRef: ChangeDetectorRef,\n ) {\n this._closeButtonText = inject(MatTimepickerIntl).closeTimepickerLabel;\n\n if (!this._animationsDisabled) {\n const element = this._elementRef.nativeElement;\n const renderer = inject(Renderer2);\n\n this._eventCleanups = this._ngZone.runOutsideAngular(() => [\n renderer.listen(element, 'animationstart', this._handleAnimationEvent),\n renderer.listen(element, 'animationend', this._handleAnimationEvent),\n renderer.listen(element, 'animationcancel', this._handleAnimationEvent),\n ]);\n }\n }\n\n ngAfterViewInit() {\n this._stateChanges = this.timepicker.stateChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n\n if (this._animationsDisabled) {\n (this._dials || this._inputs)?.focusActiveCell();\n return;\n }\n\n this._animationDone.pipe(take(1)).subscribe(() => {\n (this._dials || this._inputs)?.focusActiveCell();\n });\n }\n\n ngOnDestroy() {\n clearTimeout(this._animationFallback);\n this._eventCleanups?.forEach((cleanup) => cleanup());\n this._stateChanges?.unsubscribe();\n this._animationDone.complete();\n }\n\n /** Changes animation state while closing timepicker content. */\n _startExitAnimation() {\n this._elementRef.nativeElement.classList.add('mat-timepicker-content-exit');\n\n if (this._animationsDisabled) {\n this._animationDone.next();\n } else {\n // Some internal apps disable animations in tests using `* {animation: none !important}`.\n // If that happens, the animation events won't fire and we'll never clean up the overlay.\n // Add a fallback that will fire if the animation doesn't run in a certain amount of time.\n clearTimeout(this._animationFallback);\n this._animationFallback = setTimeout(() => {\n if (!this._isAnimating) {\n this._animationDone.next();\n }\n }, 200);\n }\n }\n\n private _handleAnimationEvent = (event: AnimationEvent) => {\n const element = this._elementRef.nativeElement;\n\n if (\n event.target !== element ||\n !event.animationName.startsWith('_mat-timepicker-content')\n ) {\n return;\n }\n\n clearTimeout(this._animationFallback);\n this._isAnimating = event.type === 'animationstart';\n element.classList.toggle(\n 'mat-timepicker-content-animating',\n this._isAnimating,\n );\n\n if (!this._isAnimating) {\n this._animationDone.next();\n }\n };\n\n onToggleMode(mode: TimepickerMode): void {\n this.mode = mode;\n }\n\n _getSelected() {\n return this._model?.selection as unknown as T | null;\n }\n\n /** Applies the current pending selection to the global model. */\n _applyPendingSelection() {\n if (this._model !== this._globalModel) {\n this._globalModel.updateSelection(this._model.selection, this);\n }\n }\n\n /**\n * Assigns a new portal containing the timepicker actions.\n * @param portal Portal with the actions to be assigned.\n * @param forceRerender Whether a re-render of the portal should be triggered. This isn't\n * necessary if the portal is assigned during initialization, but it may be required if it's\n * added at a later point.\n */\n _assignActions(\n portal: TemplatePortal<any> | ComponentPortal<any> | null,\n forceRerender: boolean,\n ) {\n // As we have actions, clone the model so that we have the ability to cancel the selection.\n // Note that we want to assign this as soon as possible,\n // but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.\n this._model = this._globalModel.clone();\n\n this._actionsPortal = portal;\n\n if (forceRerender) {\n this._changeDetectorRef.detectChanges();\n }\n }\n\n _handleUserSelection(event: T) {\n const value = event;\n this._model.add(value);\n }\n}\n","<div\n cdkTrapFocus\n role=\"dialog\"\n class=\"mat-timepicker-content-container\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n>\n @switch (mode) {\n @case ('input') {\n <mat-time-inputs\n [id]=\"timepicker.id\"\n [color]=\"color\"\n [isMeridiem]=\"isMeridiem\"\n [selected]=\"_getSelected()\"\n [minTime]=\"timepicker._getMinTime()\"\n [maxTime]=\"timepicker._getMaxTime()\"\n [minuteInterval]=\"minuteInterval\"\n (_userSelection)=\"_handleUserSelection($event)\"\n ></mat-time-inputs>\n\n <div class=\"mat-timepicker-content-actions\">\n @if (showToggleModeButton) {\n <button\n class=\"mat-time-toggle-mode-button\"\n mat-icon-button\n (click)=\"onToggleMode('dial')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n width=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"m15.175 16.625 1.475-1.45-3.6-3.6V7.1h-2.075v5.3ZM12 21.95q-2.075 0-3.887-.787-1.813-.788-3.15-2.125-1.338-1.338-2.125-3.151Q2.05 14.075 2.05 12t.788-3.887q.787-1.813 2.125-3.15Q6.3 3.625 8.113 2.837 9.925 2.05 12 2.05t3.887.787q1.813.788 3.151 2.126 1.337 1.337 2.125 3.15.787 1.812.787 3.887t-.787 3.887q-.788 1.813-2.125 3.151-1.338 1.337-3.151 2.125-1.812.787-3.887.787ZM12 12Zm0 7.8q3.225 0 5.513-2.275Q19.8 15.25 19.8 12q0-3.25-2.287-5.525Q15.225 4.2 12 4.2T6.488 6.475Q4.2 8.75 4.2 12q0 3.25 2.288 5.525Q8.775 19.8 12 19.8Z\"\n />\n </svg>\n </button>\n }\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n </div>\n }\n\n @case ('dial') {\n <mat-clock-dials\n [id]=\"timepicker.id\"\n [color]=\"color\"\n [isMeridiem]=\"isMeridiem\"\n [selected]=\"_getSelected()\"\n [minTime]=\"timepicker._getMinTime()\"\n [maxTime]=\"timepicker._getMaxTime()\"\n [minuteInterval]=\"minuteInterval\"\n [orientation]=\"orientation\"\n [touchUi]=\"timepicker.touchUi\"\n (_userSelection)=\"_handleUserSelection($event)\"\n ></mat-clock-dials>\n\n <div class=\"mat-timepicker-content-actions\">\n @if (showToggleModeButton) {\n <button\n class=\"mat-time-toggle-mode-button\"\n mat-icon-button\n (click)=\"onToggleMode('input')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n width=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4 19q-.825 0-1.412-.587Q2 17.825 2 17V7q0-.825.588-1.412Q3.175 5 4 5h16q.825 0 1.413.588Q22 6.175 22 7v10q0 .825-.587 1.413Q20.825 19 20 19Zm0-2h16V7H4v10Zm4-1h8v-2H8Zm-3-3h2v-2H5Zm3 0h2v-2H8Zm3 0h2v-2h-2Zm3 0h2v-2h-2Zm3 0h2v-2h-2ZM5 10h2V8H5Zm3 0h2V8H8Zm3 0h2V8h-2Zm3 0h2V8h-2Zm3 0h2V8h-2ZM4 17V7v10Z\"\n />\n </svg>\n </button>\n }\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n </div>\n }\n }\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n class=\"mat-timepicker-close-button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"timepicker.close()\"\n >\n {{ _closeButtonText }}\n </button>\n</div>\n","import { ComponentType } from '@angular/cdk/portal';\nimport { InjectionToken } from '@angular/core';\n\nexport const MAT_DEFAULT_ACITONS = new InjectionToken<ComponentType<any>>(\n 'MAT_DEFAULT_ACITONS'\n);\n","import {\n Input,\n ComponentRef,\n ViewContainerRef,\n Directive,\n Inject,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ElementRef,\n InjectionToken,\n Optional,\n booleanAttribute,\n inject,\n DOCUMENT,\n afterNextRender,\n Injector,\n} from '@angular/core';\n\nimport { ThemePalette } from '@angular/material/core';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport {\n BooleanInput,\n coerceBooleanProperty,\n coerceNumberProperty,\n} from '@angular/cdk/coercion';\nimport {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {\n ComponentPortal,\n ComponentType,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n DOWN_ARROW,\n ESCAPE,\n hasModifierKey,\n PAGE_DOWN,\n PAGE_UP,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport { filter, first, merge, Observable, Subject, take } from 'rxjs';\n\nimport { MatTimepickerContent } from './timepicker-content';\nimport { MAT_TIMEPICKER_SCROLL_STRATEGY } from './timepicker-scroll-strategy';\nimport {\n ExtractTimeTypeFromSelection,\n MatTimeSelectionModel,\n} from './time-selection-model';\nimport { MAT_DEFAULT_ACITONS } from './timepicker-actions-default';\nimport { TimepickerOrientation } from './orientation';\n\n/** Possible options for the timepicker to open. */\nexport type TimepickerOpenAs = 'dialog' | 'popup';\n\n/** Possible positions for the timepicker dropdown along the X axis. */\nexport type TimepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the timepicker dropdown along the Y axis. */\nexport type TimepickerDropdownPositionY = 'above' | 'below';\n\n/** Possible options for the timepicker to display. */\nexport type TimepickerMode = 'input' | 'dial';\n\n/** Possible options for the timepicker period format. */\nexport type TimepickerFormat = '12h' | '24h';\n\n/** Form control that can be associated with a timepicker. */\nexport interface MatTimepickerControl<T> {\n disabled: boolean;\n min: T | null;\n max: T | null;\n stateChanges: Observable<void>;\n getThemePalette(): ThemePalette;\n getConnectedOverlayOrigin(): ElementRef;\n getOverlayLabelId(): string | null;\n}\n\n/** A timepicker that can be attached to a {@link MatTimepickerControl}. */\nexport interface MatTimepickerPanel<\n C extends MatTimepickerControl<T>,\n S,\n T = ExtractTimeTypeFromSelection<S>,\n> {\n /** The id for the timepicker's. */\n id: string;\n /** Whether the timepicker is open. */\n opened: boolean;\n /** Stream that emits whenever the timepicker is opened. */\n openedStream: EventEmitter<void>;\n /** Stream that emits whenever the timepicker is closed. */\n closedStream: EventEmitter<void>;\n /** Emits when the timepicker's state changes. */\n stateChanges: Subject<void>;\n /** Register an input with the timeepicker. */\n registerInput(input: C): MatTimeSelectionModel<S, T>;\n}\n\n/**\n * Represents the default options for the form field that can be configured\n * using the `MAT_TIMEPICKER_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatTimepickerDefaultOptions {\n /** Default color of the timepicker. */\n color?: ThemePalette;\n /** Default timepicker mode. */\n mode: TimepickerMode;\n /** Defines how timepicker will be appeared. */\n openAs: TimepickerOpenAs;\n /** Default timepicker format. */\n format: TimepickerFormat;\n /** Should toggle face button be visible. */\n showToggleModeButton: boolean;\n /** Step for minutes. */\n minuteInterval: number;\n /** Orientation for dial mode. */\n orientation: TimepickerOrientation;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all timepickers within an app.\n */\nexport const MAT_TIMEPICKER_DEFAULT_OPTIONS =\n new InjectionToken<MatTimepickerDefaultOptions>(\n 'MAT_TIMEPICKER_DEFAULT_OPTIONS',\n );\n\n/** Default open as used by the timepicker. */\nconst DEFAULT_OPEN_AS: TimepickerOpenAs = 'popup';\n\n/** Default mode used by the timepicker. */\nconst DEFAULT_MODE: TimepickerMode = 'dial';\n\n/** Default format used by the timepicker. */\nconst DEFAULT_FORMAT: TimepickerFormat = '12h';\n\n/** Used to generate a unique ID for each timepicker instance. */\nlet timepickerUid = 0;\n\n@Directive()\nexport abstract class MatTimepickerBase<\n C extends MatTimepickerControl<T>,\n S,\n T = ExtractTimeTypeFromSelection<S>,\n> implements OnChanges\n{\n /** Whether the timepicker pop-up should be disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled === undefined && this.timepickerInput\n ? this.timepickerInput.disabled\n : !!this._disabled;\n }\n set disabled(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this.stateChanges.next(undefined);\n }\n }\n private _disabled: boolean;\n\n /** Whether the timepicker is open. */\n @Input()\n get opened(): boolean {\n return this._opened;\n }\n set opened(value: BooleanInput) {\n coerceBooleanProperty(value) ? this.open() : this.close();\n }\n private _opened = false;\n\n /** Whether the timepicker mode which determines what the timepicker will be opened as. */\n @Input()\n get openAs(): TimepickerOpenAs {\n return this._openAs || this._defaults?.openAs || DEFAULT_OPEN_AS;\n }\n set openAs(value: TimepickerOpenAs) {\n this._openAs = value;\n }\n private _openAs: TimepickerOpenAs;\n\n /** Color palette to use on the timepicker's content. */\n @Input()\n get color(): ThemePalette {\n return (\n this._color ||\n this._defaults?.color ||\n (this.timepickerInput\n ? this.timepickerInput.getThemePalette()\n : undefined)\n );\n }\n set color(value: ThemePalette) {\n this._color = value;\n }\n private _color: ThemePalette;\n\n /** Timepicker display mode. */\n @Input()\n get mode(): TimepickerMode {\n return this._mode || this._defaults?.mode || DEFAULT_MODE;\n }\n set mode(value: TimepickerMode) {\n this._mode = value;\n }\n private _mode: TimepickerMode;\n\n /** Timepicker period format. */\n @Input()\n get format(): TimepickerFormat {\n return this._format || this._defaults?.format || DEFAULT_FORMAT;\n }\n set format(value: TimepickerFormat) {\n this._format = value;\n }\n private _format: TimepickerFormat;\n\n /** Show or hide toggle button between dial and input. */\n @Input()\n get showToggleModeButton(): boolean {\n return this._showToggleModeButton;\n }\n set showToggleModeButton(value: boolean) {\n this._showToggleModeButton = value;\n }\n private _showToggleModeButton: boolean = true;\n\n /** Step for minutes. */\n @Input()\n get minuteInterval(): number {\n return this._minuteInterval || this._defaults?.minuteInterval || 1;\n }\n set minuteInterval(value: number) {\n this._minuteInterval = coerceNumberProperty(value);\n }\n private _minuteInterval: number;\n\n /** Orientation for dial mode. */\n @Input()\n get orientation(): TimepickerOrientation {\n return this._orientation || this._defaults?.orientation || 'vertical';\n }\n set orientation(value: TimepickerOrientation) {\n this._orientation = value;\n }\n private _orientation: TimepickerOrientation;\n\n /**\n * Whether the timepicker UI is in touch mode. In touch mode elements are larger for bigger touch targets.\n */\n @Input({ transform: booleanAttribute })\n get touchUi(): boolean {\n return this._touchUi;\n }\n set touchUi(value: boolean) {\n this._touchUi = coerceBooleanProperty(value);\n\n if (value) {\n this.openAs = 'dialog';\n }\n }\n private _touchUi: boolean = false;\n\n /** Preferred position of the timepicker in the X axis. */\n @Input()\n xPosition: TimepickerDropdownPositionX = 'start';\n\n /** Preferred position of the timepicker in the Y axis. */\n @Input()\n yPosition: TimepickerDropdownPositionY = 'below';\n\n /**\n * Whether to restore focus to the previously-focused element when the timepicker 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 })\n restoreFocus: boolean = true;\n\n /** Emits when the timepicker has been opened. */\n @Output('opened') readonly openedStream = new EventEmitter<void>();\n\n /** Emits when the timepicker has been closed. */\n @Output('closed') readonly closedStream = new EventEmitter<void>();\n\n /** The id for the timepicker. */\n id: string = `mat-timepicker-${timepickerUid++}`;\n\n /** The input element this timepicker is associated with. */\n timepickerInput!: C;\n\n /** Portal with projected action buttons. */\n _actionsPortal: TemplatePortal | null = null;\n\n /** Emits when the timepicker's state changes. */\n readonly stateChanges = new Subject<void>();\n\n /** A reference to the overlay into which we've rendered the timepicker. */\n private _overlayRef: OverlayRef | null;\n\n /** Reference to the component instance rendered in the overlay. */\n private _componentRef!: ComponentRef<MatTimepickerContent<S, T>> | 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 /** The element that was focused before the timepicker was opened. */\n private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n private _document = inject(DOCUMENT);\n\n /** Scroll strategy. */\n private _scrollStrategy: () => ScrollStrategy;\n\n /** The minimum selectable time. */\n _getMinTime(): T | null {\n return this.timepickerInput && this.timepickerInput.min;\n }\n\n /** The maximum selectable time. */\n _getMaxTime(): T | null {\n return this.timepickerInput && this.timepickerInput.max;\n }\n\n constructor(\n private _viewContainerRef: ViewContainerRef,\n private _overlay: Overlay,\n private readonly _injector: Injector,\n @Inject(MAT_TIMEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\n @Inject(MAT_DEFAULT_ACITONS)\n private _defaultActionsComponent: ComponentType<any>,\n private _model: MatTimeSelectionModel<S, T>,\n @Optional()\n @Inject(MAT_TIMEPICKER_DEFAULT_OPTIONS)\n private _defaults?: MatTimepickerDefaultOptions,\n ) {\n this._scrollStrategy = scrollStrategy;\n\n if (_defaults) {\n this.showToggleModeButton =\n _defaults.showToggleModeButton !== undefined\n ? _defaults.showToggleModeButton\n : true;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const positionChange = changes['xPosition'] || changes['yPosition'];\n\n if (positionChange && !positionChange.firstChange && this._overlayRef) {\n const positionStrategy = this._overlayRef.getConfig().positionStrategy;\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this._setConnectedPositions(positionStrategy);\n\n if (this.opened) {\n this._overlayRef.updatePosition();\n }\n }\n }\n\n this.stateChanges.next(undefined);\n }\n\n ngOnDestroy() {\n this._destroyOverlay();\n this.close();\n this.stateChanges.complete();\n }\n\n /** Opens the timepicker. */\n open(): void {\n if (\n this._opened ||\n this.disabled ||\n this._componentRef?.instance._isAnimating\n ) {\n return;\n }\n\n if (!this.timepickerInput) {\n throw Error(\n 'Attempted to open an MatTimepicker with no associated input.',\n );\n }\n\n this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n this._openOverlay();\n this._opened = true;\n this.openedStream.emit();\n }\n\n /** Closes the timepicker. */\n close(): void {\n if (!this._opened || this._componentRef?.instance._isAnimating) {\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._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 instance._startExitAnimation();\n }\n\n if (canRestoreFocus) {\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n /**\n * Register an input with this timepicker.\n * @param input The timepicker input to register with this timepicker.\n * @returns Selection model that the input should hook itself up to.\n */\n registerInput(input: C): MatTimeSelectionModel<S, T> {\n if (this.timepickerInput) {\n throw Error(\n 'A MatTimepicker can only be associated with a single input.',\n );\n }\n\n this.timepickerInput = input;\n return this._model;\n }\n\n /**\n * Registers a portal containing action buttons with the timepicker.\n * @param portal Portal to be registered.\n */\n registerActions(portal: TemplatePortal): void {\n if (this._actionsPortal) {\n throw Error(\n 'A MatTimepicker can only be associated with a single actions row.',\n );\n }\n this._actionsPortal = portal;\n this._componentRef?.instance._assignActions(portal, true);\n }\n\n /**\n * Removes a portal containing action buttons from the timepicker.\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 /** Applies the current pending selection on the overlay to the model. */\n _applyPendingSelection() {\n this._componentRef?.instance?._applyPendingSelection();\n }\n\n /** Forwards relevant values from the timepicker to the timepicker content inside the overlay. */\n protected _forwardContentValues(instance: MatTimepickerContent<S, T>): void {\n const defaultPortal = new ComponentPortal(this._defaultActionsComponent);\n\n instance.timepicker = this;\n instance.color = this.color;\n instance.mode = this.mode;\n instance.isMeridiem = this.format === '12h';\n instance.showToggleModeButton = this.showToggleModeButton;\n instance.minuteInterval = this.minuteInterval;\n instance.orientation = this.orientation;\n instance._dialogLabelId = this.timepickerInput.getOverlayLabelId();\n instance._assignActions(this._actionsPortal || defaultPortal, false);\n }\n\n /** Opens the overlay with the timepicker. */\n private _openOverlay(): void {\n this._destroyOverlay();\n\n const isDialog = this.openAs === 'dialog';\n const portal = new ComponentPortal<MatTimepickerContent<S, T>>(\n MatTimepickerContent,\n this._viewContainerRef,\n );\n\n const overlayRef = (this._overlayRef = this._overlay.create(\n new OverlayConfig({\n positionStrategy: isDialog\n ? this._getDialogStrategy()\n : this._getDropdownStrategy(),\n hasBackdrop: true,\n backdropClass: [\n isDialog\n ? 'cdk-overlay-dark-backdrop'\n : 'mat-overlay-transparent-backdrop',\n this._backdropHarnessClass,\n ],\n direction: 'ltr',\n scrollStrategy: isDialog\n ? this._overlay.scrollStrategies.block()\n : this._scrollStrategy(),\n panelClass: `mat-timepicker-${this.openAs}`,\n }),\n ));\n\n this._getCloseStream(overlayRef).subscribe((event) => {\n if (event) {\n event.preventDefault();\n }\n this.close();\n });\n\n // The `preventDefault` call happens inside the timepicker as well, however focus moves into\n // it inside a timeout which can give browsers a chance to fire off a keyboard event in-between\n // that can scroll the page. Always block default actions of arrow keys for the\n // entire overlay so the page doesn't get scrolled by accident.\n overlayRef.keydownEvents().subscribe((event) => {\n const keyCode = event.keyCode;\n\n if (\n keyCode === UP_ARROW ||\n keyCode === DOWN_ARROW ||\n keyCode === PAGE_UP ||\n keyCode === PAGE_DOWN\n ) {\n event.preventDefault();\n }\n });\n\n this._componentRef = overlayRef.attach(portal);\n this._forwardContentValues(this._componentRef.instance);\n\n // Update the position once the timepicker 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(): void {\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 timepicker as a dropdown. */\n private _getDialogStrategy() {\n return this._overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n }\n\n /** Gets a position strategy that will open the timepicker as a dropdown. */\n private _getDropdownStrategy() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.timepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mat-timepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n\n return this._setConnectedPositions(strategy);\n }\n\n /** Sets the positions of the timepicker in dropdown mode based on the current configuration. */\n private _setConnectedPositions(\n strategy: FlexibleConnectedPositionStrategy,\n ): 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(\n overlayRef: OverlayRef,\n ): Observable<void | KeyboardEvent | MouseEvent> {\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 timepicker.\n return (\n (event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (this.timepickerInput &&\n hasModifierKey(event, 'altKey') &&\n event.keyCode === UP_ARROW)\n );\n }),\n ),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { MatTimepickerBase, MatTimepickerControl } from './timepicker-base';\nimport { MAT_SINGLE_TIME_SELECTION_MODEL_PROVIDER } from './time-selection-model';\n\n@Component({\n selector: 'mat-timepicker',\n standalone: true,\n template: '',\n exportAs: 'matTimepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-timepicker',\n '[class.mat-primary]': 'color !== \"accent\" && color !== \"warn\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n },\n providers: [\n MAT_SINGLE_TIME_SELECTION_MODEL_PROVIDER,\n { provide: MatTimepickerBase, useExisting: MatTimepicker },\n ],\n})\nexport class MatTimepicker<T> extends MatTimepickerBase<MatTimepickerControl<T>, T | null, T> {}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n ValidatorFn,\n} from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\n\nimport { TimeAdapter } from './adapter';\nimport {\n ExtractTimeTypeFromSelection,\n MatTimeSelectionModel,\n TimeSelectionModelChange,\n} from './time-selection-model';\n\n/**\n * An event used for timepicker 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 * clock popup. For consistency, we always use MatTimepickerInputEvent instead.\n */\nexport class MatTimepickerInputEvent<D, S = unknown> {\n /** The new value for the target timepicker input. */\n value: D | null;\n\n constructor(\n /** Reference to the timepicker input component that emitted the event. */\n public target: MatTimepickerInputBase<S, D>,\n /** Reference to the native input element associated with the timepicker input. */\n public targetElement: HTMLElement,\n ) {\n this.value = this.target.value;\n }\n}\n\nconst TIME_FORMATS = { hour: '2-digit', minute: '2-digit' };\n\n@Directive()\nexport abstract class MatTimepickerInputBase<\n S,\n T = ExtractTimeTypeFromSelection<S>,\n >\n implements OnChanges, OnDestroy, ControlValueAccessor, Validator\n{\n /** The value of the input. */\n @Input()\n get value(): T | null {\n return this._model\n ? this._getValueFromModel(this._model.selection)\n : this._pendingValue;\n }\n set value(value: any) {\n this._assignValueProgrammatically(value);\n }\n protected _model: MatTimeSelectionModel<S, T> | undefined;\n\n /** Whether the timepicker-input is disabled. */\n @Input()\n get disabled(): boolean {\n return !!this._disabled;\n }\n set disabled(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n const element = this._elementRef.nativeElement;\n\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.stateChanges.next(undefined);\n }\n\n // We need to null check the `blur` method, because it's undefined during SSR.\n // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n // element has been inserted.\n if (newValue && this._isInitialized && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n private _disabled: boolean;\n\n /** Emits when a change event is fired on this <input>. */\n @Output() readonly timeChange: EventEmitter<MatTimepickerInputEvent<T, S>> =\n new EventEmitter<MatTimepickerInputEvent<T, S>>();\n\n /** Emits when an input event is fired on this <input>. */\n @Output() readonly timeInput: EventEmitter<MatTimepickerInputEvent<T, S>> =\n new EventEmitter<MatTimepickerInputEvent<T, S>>();\n\n /** Gets the minimum time for the input. Used for validation. */\n abstract _getMinTime(): T | null;\n\n /** Gets the maximum time for the input. Used for validation. */\n abstract _getMaxTime(): T | null;\n\n /** Combined form control validator for this input. */\n protected abstract _validator: ValidatorFn | null;\n\n /** Whether the component has been initialized. */\n private _isInitialized: boolean;\n\n /**\n * Since the value is kept on the model which is assigned in an Input,\n * we might get a value before we have a model. This property keeps track\n * of the value until we have somewhere to assign it.\n */\n private _pendingValue: T | null;\n\n /** Emits when the internal state has changed */\n readonly stateChanges = new Subject<void>();\n\n _onTouched = () => {};\n _validatorOnChange = () => {};\n\n private _cvaOnChange: (value: any) => void = () => {};\n private _valueChangesSubscription = Subscription.EMPTY;\n\n constructor(\n protected _elementRef: ElementRef<HTMLInputElement>,\n @Optional() public _timeAdapter: TimeAdapter<T>,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (timeInputsHaveChanged(changes, this._timeAdapter)) {\n this.stateChanges.next(undefined);\n }\n }\n\n ngOnDestroy(): void {\n this._valueChangesSubscription.unsubscribe();\n this.stateChanges.complete();\n }\n\n /** Registers a time selection model with the input. */\n _registerModel(model: MatTimeSelectionModel<S, T>): void {\n this._model = model;\n this._valueChangesSubscription.unsubscribe();\n\n if (this._pendingValue) {\n this._assignValue(this._pendingValue);\n }\n\n this._valueChangesSubscription = this._model.selectionChanged.subscribe(\n (event) => {\n if (this._shouldHandleChangeEvent(event)) {\n const value = this._getValueFromModel(event.selection);\n this._lastValueValid = this._isValidValue(value);\n this._cvaOnChange(value);\n this._onTouched();\n this._formatValue(value);\n this.timeInput.emit(\n new MatTimepickerInputEvent(this, this._elementRef.nativeElement),\n );\n this.timeChange.emit(\n new MatTimepickerInputEvent(this, this._elementRef.nativeElement),\n );\n }\n },\n );\n }\n\n _onInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n const lastValueWasValid = this._lastValueValid;\n let time = this._timeAdapter.parse(value, TIME_FORMATS);\n this._lastValueValid = this._isValidValue(time);\n time = this._timeAdapter.getValidTimeOrNull(time);\n const hasChanged = !this._timeAdapter.sameTime(time, this.value);\n\n // We need to fire the CVA change event for all\n // nulls, otherwise the validators won't run.\n if (!time || hasChanged) {\n this._cvaOnChange(time);\n } else {\n // Call the CVA change handler for invalid values\n // since this is what marks the control as dirty.\n if (value && !this.value) {\n this._cvaOnChange(time);\n }\n\n if (lastValueWasValid !== this._lastValueValid) {\n this._validatorOnChange();\n }\n }\n\n if (hasChanged) {\n this._assignValue(time);\n this.timeInput.emit(\n new MatTimepickerInputEvent(this, this._elementRef.nativeElement),\n );\n }\n }\n\n /** Handles change event on the input. */\n _onChange() {\n this.timeChange.emit(\n new MatTimepickerInputEvent(this, this._elementRef.nativeElement),\n );\n }\n\n /** Handles blur event 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 /** Implemented as part of ControlValueAccessor. */\n writeValue(value: T | null): void {\n this.value = value;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: any): void {\n this._cvaOnChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n 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 /** Whether the last value set on the input was valid. */\n protected _lastValueValid = false;\n\n /** Assigns a value to the input's model. */\n protected abstract _assignValueToModel(model: T | null): void;\n\n /** Converts a value from the model into a native value for the input. */\n protected abstract _getValueFromModel(modelValue: S): T | null;\n\n /** Predicate that determines whether the input should handle a particular change event. */\n protected abstract _shouldHandleChangeEvent(\n event: TimeSelectionModelChange<S>,\n ): boolean;\n\n /** Programmatically assigns a value to the input. */\n protected _assignValueProgrammatically(value: T | null) {\n value = this._timeAdapter.deserialize(value);\n this._lastValueValid = this._isValidValue(value);\n value = this._timeAdapter.getValidTimeOrNull(value);\n this._assignValue(value);\n this._formatValue(value);\n }\n\n /** Formats a value and sets it on the input element. */\n protected _formatValue(value: T | null) {\n this._elementRef.nativeElement.value =\n value != null ? this._timeAdapter.format(value, TIME_FORMATS) : '';\n }\n\n /** Gets the base validator functions. */\n protected _getValidators(): ValidatorFn[] {\n return [this._parseValidator, this._minValidator, this._maxValidator];\n }\n\n /** Whether a value is considered valid. */\n private _isValidValue(value: T | null): boolean {\n return !value || this._timeAdapter.isValid(value);\n }\n\n /** Assigns a value to the model. */\n private _assignValue(value: T | null) {\n // We may get some incoming values before the model was\n // assigned. Save the value so that we can assign it later.\n if (this._model) {\n this._assignValueToModel(value);\n this._pendingValue = null;\n } else {\n this._pendingValue = value;\n }\n }\n\n /** The form control validator for whether the input parses. */\n private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this._lastValueValid\n ? null\n : { matTimepickerParse: { text: this._elementRef.nativeElement.value } };\n };\n\n /** The form control validator for the min time. */\n private _minValidator: ValidatorFn = (\n control: AbstractControl,\n ): ValidationErrors | null => {\n const controlValue = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(control.value),\n );\n const min = this._getMinTime();\n return !min ||\n !controlValue ||\n this._timeAdapter.compareTime(min, controlValue) <= 0\n ? null\n : { matTimepickerMin: { min, actual: controlValue } };\n };\n\n /** The form control validator for the max time. */\n private _maxValidator: ValidatorFn = (\n control: AbstractControl,\n ): ValidationErrors | null => {\n const controlValue = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(control.value),\n );\n const max = this._getMaxTime();\n return !max ||\n !controlValue ||\n this._timeAdapter.compareTime(max, controlValue) >= 0\n ? null\n : { matTimepickerMax: { max, actual: controlValue } };\n };\n}\n\n/**\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\n * callback has any changes, accounting for time objects.\n */\nexport function timeInputsHaveChanged(\n changes: SimpleChanges,\n adapter: TimeAdapter<unknown>,\n): boolean {\n const keys = Object.keys(changes);\n\n for (const key of keys) {\n const { previousValue, currentValue } = changes[key];\n\n if (\n adapter.isTimeInstance(previousValue) &&\n adapter.isTimeInstance(currentValue)\n ) {\n if (!adapter.sameTime(previousValue, currentValue)) {\n return true;\n }\n } else {\n return true;\n }\n }\n\n return false;\n}\n","import {\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n Optional,\n} from '@angular/core';\nimport {\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatFormField, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\n\nimport { MatTimepicker } from './timepicker';\nimport { TimeAdapter } from './adapter/time-adapter';\nimport { MatTimepickerInputBase } from './timepicker-input-base';\nimport { TimeSelectionModelChange } from './time-selection-model';\nimport { MatTimepickerControl, MatTimepickerPanel } from './timepicker-base';\n\nexport const MAT_TIMEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatTimepickerInput),\n multi: true,\n};\n\nexport const MAT_TIMEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatTimepickerInput),\n multi: true,\n};\n\n/** Directive used to connect an input to a MatTimepicker. */\n@Directive({\n selector: 'input[matTimepicker]',\n standalone: true,\n exportAs: 'matTimepickerInput',\n providers: [\n MAT_TIMEPICKER_VALUE_ACCESSOR,\n MAT_TIMEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatTimepickerInput },\n ],\n host: {\n class: 'mat-timepicker-input',\n '[attr.aria-haspopup]': '_timepicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_timepicker?.opened && _timepicker.id) || null',\n '[attr.min]': 'min || null',\n '[attr.max]': 'max || null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n },\n})\nexport class MatTimepickerInput<T>\n extends MatTimepickerInputBase<T | null, T>\n implements MatTimepickerControl<T | null>\n{\n /** The timepicker that this input is associated with. */\n @Input()\n set matTimepicker(\n timepicker: MatTimepickerPanel<MatTimepickerControl<T>, T | null, T>,\n ) {\n if (timepicker) {\n this._timepicker = timepicker;\n this._registerModel(timepicker.registerInput(this));\n }\n }\n _timepicker: MatTimepickerPanel<MatTimepickerControl<T>, T | null, T>;\n\n /** The combined form control validator for this input. */\n protected _validator: ValidatorFn | null;\n\n /** The minimum valid date. */\n @Input()\n get min(): T | null {\n return this._min;\n }\n set min(value: T | null) {\n const validValue = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(value),\n );\n\n if (!this._timeAdapter.sameTime(validValue, this._min)) {\n this._min = validValue;\n this._validatorOnChange();\n }\n }\n private _min: T | null;\n\n /** The maximum valid date. */\n @Input()\n get max(): T | null {\n return this._max;\n }\n set max(value: T | null) {\n const validValue = this._timeAdapter.getValidTimeOrNull(\n this._timeAdapter.deserialize(value),\n );\n\n if (!this._timeAdapter.sameTime(validValue, this._max)) {\n this._max = validValue;\n this._validatorOnChange();\n }\n }\n private _max: T | null;\n\n constructor(\n elementRef: ElementRef<HTMLInputElement>,\n @Optional() timeAdapter: TimeAdapter<T>,\n @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField,\n ) {\n super(elementRef, timeAdapter);\n this._validator = Validators.compose(super._getValidators());\n }\n\n /**\n * Gets the element that the timepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._formField\n ? this._formField.getConnectedOverlayOrigin()\n : this._elementRef;\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 /** Gets the ID of an element that should be used a description for the timepicker 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 /** Gets the input's minimum time. */\n _getMinTime() {\n return this._min;\n }\n\n /** Gets the input's maximum time. */\n _getMaxTime() {\n return this._max;\n }\n\n protected _assignValueToModel(value: T | null): void {\n if (this._model) {\n this._model.updateSelection(value, this);\n }\n }\n\n protected _getValueFromModel(modelValue: T | null): T | null {\n return modelValue;\n }\n\n protected _shouldHandleChangeEvent(event: TimeSelectionModelChange<T>) {\n return event.source !== this;\n }\n}\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n OnDestroy,\n OnInit,\n signal,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { MatTimepickerBase, MatTimepickerControl } from './timepicker-base';\nimport { MatTimepickerIntl } from './timepicker-intl';\n\n/** Button that will close the timepicker and assign the current selection to the data model. */\n@Directive({\n selector: '[matTimepickerApply]',\n standalone: true,\n host: {\n '(click)': '_applySelection()',\n },\n})\nexport class MatTimepickerApply {\n constructor(\n private _timepicker: MatTimepickerBase<MatTimepickerControl<any>, unknown>,\n ) {}\n\n _applySelection() {\n this._timepicker._applyPendingSelection();\n this._timepicker.close();\n }\n}\n\n/** Button that will close the timepicker and discard the current selection. */\n@Directive({\n selector: '[matTimepickerCancel]',\n standalone: true,\n host: {\n '(click)': 'close()',\n },\n})\nexport class MatTimepickerCancel {\n constructor(\n private _timepicker: MatTimepickerBase<MatTimepickerControl<any>, unknown>,\n ) {}\n\n close() {\n this._timepicker.close();\n }\n}\n\n/**\n * Container that can be used to project a row of action buttons\n * to the bottom of a timepicker.\n */\n@Component({\n selector: 'mat-timepicker-actions',\n standalone: true,\n styleUrls: ['timepicker-actions.scss'],\n template: `\n <ng-template>\n <div class=\"mat-timepicker-actions\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-timepicker-actions-container',\n },\n})\nexport class MatTimepickerActions implements AfterViewInit, OnDestroy {\n @ViewChild(TemplateRef) _template: TemplateRef<unknown>;\n\n private _portal: TemplatePortal;\n\n constructor(\n private _timepicker: MatTimepickerBase<MatTimepickerControl<any>, unknown>,\n private _viewContainerRef: ViewContainerRef,\n ) {}\n\n ngAfterViewInit() {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n this._timepicker.registerActions(this._portal);\n }\n\n ngOnDestroy() {\n this._timepicker.removeActions(this._portal);\n\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\n/**\n * Default action buttons to the bottom of a timepicker.\n */\n@Component({\n selector: 'mat-timepicker-default-actions',\n standalone: true,\n imports: [MatButtonModule, MatTimepickerApply, MatTimepickerCancel],\n styleUrls: ['timepicker-actions.scss'],\n template: `\n <div class=\"mat-timepicker-actions\">\n <ng-content></ng-content>\n <button [color]=\"color()\" mat-button matTimepickerCancel>\n {{ _intl.cancelButton }}\n </button>\n <button [color]=\"color()\" mat-button matTimepickerApply>\n {{ _intl.okButton }}\n </button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mat-timepicker-actions-container',\n },\n})\nexport class MatTimepickerDefaultActions implements OnInit {\n color = signal<ThemePalette>(undefined);\n\n constructor(\n private _timepicker: MatTimepickerBase<MatTimepickerControl<any>, unknown>,\n public _intl: MatTimepickerIntl,\n ) {}\n\n ngOnInit() {\n this.color.set(this._timepicker.color);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { MAT_FAB_DEFAULT_OPTIONS } from '@angular/material/button';\n\nimport { MAT_TIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER } from './timepicker-scroll-strategy';\nimport { MatTimepickerToggle, MatTimepickerToggleIcon } from './timepicker-toggle';\nimport { MatTimepicker } from './timepicker';\nimport { MatTimepickerContent } from './timepicker-content';\nimport { MatTimepickerContentLayout } from './timepicker-content-layout';\nimport { MatTimepickerInput } from './timepicker-input';\nimport { MatHourInput, MatMinuteInput, MatTimeInputs } from './time-inputs';\nimport { MatClockDials } from './clock-dials';\nimport { MatHoursClockDial } from './hours-clock-dial';\nimport { MatMinutesClockDial } from './minutes-clock-dial';\nimport { MatTimePeriod } from './time-period';\nimport {\n MatTimepickerActions,\n MatTimepickerApply,\n MatTimepickerCancel,\n MatTimepickerDefaultActions,\n} from './timepicker-actions';\nimport { MAT_DEFAULT_ACITONS } from './timepicker-actions-default';\nimport { MatTimepickerIntl } from './timepicker-intl';\n\n@NgModule({\n declarations: [],\n imports: [\n OverlayModule,\n PortalModule,\n A11yModule,\n MatTimepicker,\n MatTimepickerToggle,\n MatTimepickerToggleIcon,\n MatTimepickerContent,\n MatTimepickerContentLayout,\n MatTimepickerInput,\n MatTimeInputs,\n MatHourInput,\n MatMinuteInput,\n MatClockDials,\n MatHoursClockDial,\n MatMinutesClockDial,\n MatTimePeriod,\n MatTimepickerActions,\n MatTimepickerDefaultActions,\n MatTimepickerApply,\n MatTimepickerCancel,\n ],\n exports: [\n CdkScrollableModule,\n MatTimepicker,\n MatTimepickerToggle,\n MatTimepickerToggleIcon,\n MatTimepickerContent,\n MatTimepickerContentLayout,\n MatTimepickerInput,\n MatTimeInputs,\n MatHourInput,\n MatMinuteInput,\n MatClockDials,\n MatHoursClockDial,\n MatMinutesClockDial,\n MatTimePeriod,\n MatTimepickerActions,\n MatTimepickerDefaultActions,\n MatTimepickerApply,\n MatTimepickerCancel,\n ],\n providers: [\n MatTimepickerIntl,\n MAT_TIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n { provide: MAT_DEFAULT_ACITONS, useValue: MatTimepickerDefaultActions },\n {\n provide: MAT_FAB_DEFAULT_OPTIONS,\n useValue: { color: 'unthemed' },\n },\n ],\n})\nexport class MatTimepickerModule {}\n","/*\n * Public API Surface of mat-timepicker\n */\n\nexport * from './lib/timepicker.module';\nexport * from './lib/timepicker';\nexport * from './lib/timepicker-base';\nexport * from './lib/timepicker-toggle';\nexport * from './lib/timepicker-content';\nexport * from './lib/timepicker-content-layout';\nexport * from './lib/timepicker-input';\nexport * from './lib/timepicker-input-base';\nexport * from './lib/hours-clock-dial';\nexport * from './lib/minutes-clock-dial';\nexport * from './lib/time-inputs';\nexport {\n MAT_TIMEPICKER_INPUTS_KEYDOWN_HANDLER,\n provideMatTimepickerInputsKeydownHandler,\n} from './lib/time-input-base';\nexport * from './lib/clock-dials';\nexport * from './lib/time-period';\nexport * from './lib/timepicker-actions';\nexport * from './lib/timepicker-actions-default';\nexport * from './lib/adapter';\nexport * from './lib/timepicker-scroll-strategy';\nexport * from './lib/timepicker-intl';\nexport * from './lib/orientation';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MatTimepickerIntl","i1.TimeAdapter","i2.TimeAdapter","i3","i1.MatTimeSelectionModel","i2","i4","i1","i1.MatTimepickerBase","i2.MatTimepickerIntl"],"mappings":"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"}