{"version":3,"file":"timepicker.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/util.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/timepicker.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/timepicker.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/timepicker-input.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/timepicker-toggle.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/timepicker-toggle.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/timepicker/timepicker-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {DateAdapter, MatDateFormats} from '../core';\n\n/** Pattern that interval strings have to match. */\nconst INTERVAL_PATTERN = /^(\\d*\\.?\\d+)\\s*(h|hour|hours|m|min|minute|minutes|s|second|seconds)?$/i;\n\n/**\n * Object that can be used to configure the default options for the timepicker component.\n */\nexport interface MatTimepickerConfig {\n  /** Default interval for all time pickers. */\n  interval?: string | number;\n\n  /** Whether ripples inside the timepicker should be disabled by default. */\n  disableRipple?: boolean;\n}\n\n/**\n * Injection token that can be used to configure the default options for the timepicker component.\n */\nexport const MAT_TIMEPICKER_CONFIG = new InjectionToken<MatTimepickerConfig>(\n  'MAT_TIMEPICKER_CONFIG',\n);\n\n/**\n * Time selection option that can be displayed within a `mat-timepicker`.\n */\nexport interface MatTimepickerOption<D = unknown> {\n  /** Date value of the option. */\n  value: D;\n\n  /** Label to show to the user. */\n  label: string;\n}\n\n/** Parses an interval value into seconds. */\nexport function parseInterval(value: number | string | null): number | null {\n  let result: number;\n\n  if (value === null) {\n    return null;\n  } else if (typeof value === 'number') {\n    result = value;\n  } else {\n    if (value.trim().length === 0) {\n      return null;\n    }\n\n    const parsed = value.match(INTERVAL_PATTERN);\n    const amount = parsed ? parseFloat(parsed[1]) : null;\n    const unit = parsed?.[2]?.toLowerCase() || null;\n\n    if (!parsed || amount === null || isNaN(amount)) {\n      return null;\n    }\n\n    if (unit === 'h' || unit === 'hour' || unit === 'hours') {\n      result = amount * 3600;\n    } else if (unit === 'm' || unit === 'min' || unit === 'minute' || unit === 'minutes') {\n      result = amount * 60;\n    } else {\n      result = amount;\n    }\n  }\n\n  return result;\n}\n\n/**\n * Generates the options to show in a timepicker.\n * @param adapter Date adapter to be used to generate the options.\n * @param formats Formatting config to use when displaying the options.\n * @param min Time from which to start generating the options.\n * @param max Time at which to stop generating the options.\n * @param interval Amount of seconds between each option.\n */\nexport function generateOptions<D>(\n  adapter: DateAdapter<D>,\n  formats: MatDateFormats,\n  min: D,\n  max: D,\n  interval: number,\n): MatTimepickerOption<D>[] {\n  // Avoid generating intervals less than a second, because it can freeze up the browser.\n  interval = Math.max(interval, 1);\n  const options: MatTimepickerOption<D>[] = [];\n  let current = adapter.compareTime(min, max) < 1 ? min : max;\n\n  while (\n    adapter.sameDate(current, min) &&\n    adapter.compareTime(current, max) < 1 &&\n    adapter.isValid(current)\n  ) {\n    options.push({value: current, label: adapter.format(current, formats.display.timeOptionLabel)});\n    current = adapter.addSeconds(current, interval);\n  }\n\n  return options;\n}\n\n/** Checks whether a date adapter is set up correctly for use with the timepicker. */\nexport function validateAdapter(\n  adapter: DateAdapter<unknown> | null,\n  formats: MatDateFormats | null,\n) {\n  function missingAdapterError(provider: string) {\n    return Error(\n      `MatTimepicker: No provider found for ${provider}. You must add one of the following ` +\n        `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` +\n        `provideLuxonDateAdapter, provideMomentDateAdapter, or provide a custom implementation.`,\n    );\n  }\n\n  if (!adapter) {\n    throw missingAdapterError('DateAdapter');\n  }\n\n  if (!formats) {\n    throw missingAdapterError('MAT_DATE_FORMATS');\n  }\n\n  if (\n    formats.display.timeInput === undefined ||\n    formats.display.timeOptionLabel === undefined ||\n    formats.parse.timeInput === undefined\n  ) {\n    throw new Error(\n      'MatTimepicker: Incomplete `MAT_DATE_FORMATS` has been provided. ' +\n        '`MAT_DATE_FORMATS` must provide `display.timeInput`, `display.timeOptionLabel` ' +\n        'and `parse.timeInput` formats in order to be compatible with MatTimepicker.',\n    );\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  afterNextRender,\n  AfterRenderRef,\n  booleanAttribute,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  InjectionToken,\n  Injector,\n  input,\n  InputSignal,\n  InputSignalWithTransform,\n  OnDestroy,\n  output,\n  OutputEmitterRef,\n  Signal,\n  signal,\n  TemplateRef,\n  untracked,\n  viewChild,\n  viewChildren,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  _animationsDisabled,\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MAT_OPTION_PARENT_COMPONENT,\n  MatOption,\n  MatOptionParentComponent,\n} from '../core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  createFlexibleConnectedPositionStrategy,\n  createOverlayRef,\n  createRepositionScrollStrategy,\n  OverlayRef,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {ENTER, ESCAPE, hasModifierKey, TAB} from '@angular/cdk/keycodes';\nimport {_IdGenerator, ActiveDescendantKeyManager} from '@angular/cdk/a11y';\nimport {\n  generateOptions,\n  MAT_TIMEPICKER_CONFIG,\n  MatTimepickerOption,\n  parseInterval,\n  validateAdapter,\n} from './util';\nimport {Subscription} from 'rxjs';\n\n/** Event emitted when a value is selected in the timepicker. */\nexport interface MatTimepickerSelected<D> {\n  value: D;\n  source: MatTimepicker<D>;\n}\n\n/** Injection token used to configure the behavior of the timepicker dropdown while scrolling. */\nexport const MAT_TIMEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'MAT_TIMEPICKER_SCROLL_STRATEGY',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const injector = inject(Injector);\n      return () => createRepositionScrollStrategy(injector);\n    },\n  },\n);\n\n/** Represents an input that is connected to a `mat-timepicker`. */\nexport interface MatTimepickerConnectedInput<D> {\n  /** Current value of the input. */\n  value: Signal<D | null>;\n\n  /** Minimum allowed time. */\n  min: Signal<D | null>;\n\n  /** Maximum allowed time. */\n  max: Signal<D | null>;\n\n  /** Whether the input is disabled. */\n  disabled: Signal<boolean>;\n\n  /** Focuses the input. */\n  focus(): void;\n\n  /** Gets the element to which to connect the timepicker overlay. */\n  getOverlayOrigin(): ElementRef<HTMLElement>;\n\n  /** Gets the ID of the input's label. */\n  getLabelId(): string | null;\n\n  /** Callback invoked when the timepicker assigns a value. */\n  timepickerValueAssigned(value: D | null): void;\n}\n\n/**\n * Renders out a listbox that can be used to select a time of day.\n * Intended to be used together with `MatTimepickerInput`.\n */\n@Component({\n  selector: 'mat-timepicker',\n  exportAs: 'matTimepicker',\n  templateUrl: 'timepicker.html',\n  styleUrl: 'timepicker.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MatOption],\n  providers: [\n    {\n      provide: MAT_OPTION_PARENT_COMPONENT,\n      useExisting: MatTimepicker,\n    },\n  ],\n})\nexport class MatTimepicker<D> implements OnDestroy, MatOptionParentComponent {\n  private _dir = inject(Directionality, {optional: true});\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _injector = inject(Injector);\n  private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n  private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;\n  private _scrollStrategyFactory = inject(MAT_TIMEPICKER_SCROLL_STRATEGY);\n  protected _animationsDisabled = _animationsDisabled();\n\n  private _isOpen = signal(false);\n  private _activeDescendant = signal<string | null>(null);\n\n  private _input = signal<MatTimepickerConnectedInput<D> | null>(null);\n  private _overlayRef: OverlayRef | null = null;\n  private _portal: TemplatePortal<unknown> | null = null;\n  private _optionsCacheKey: string | null = null;\n  private _localeChanges: Subscription | undefined;\n  private _onOpenRender: AfterRenderRef | null = null;\n\n  protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\n  protected _timeOptions: readonly MatTimepickerOption<D>[] = [];\n  protected _options = viewChildren(MatOption);\n\n  private _keyManager = new ActiveDescendantKeyManager(this._options, this._injector)\n    .withHomeAndEnd(true)\n    .withPageUpDown(true)\n    .withVerticalOrientation(true);\n\n  /**\n   * Interval between each option in the timepicker. The value can either be an amount of\n   * seconds (e.g. 90) or a number with a unit (e.g. 45m). Supported units are `s` for seconds,\n   * `m` for minutes or `h` for hours.\n   */\n  readonly interval: InputSignalWithTransform<number | null, number | string | null> = input(\n    parseInterval(this._defaultConfig?.interval || null),\n    {transform: parseInterval},\n  );\n\n  /**\n   * Array of pre-defined options that the user can select from, as an alternative to using the\n   * `interval` input. An error will be thrown if both `options` and `interval` are specified.\n   */\n  readonly options: InputSignal<readonly MatTimepickerOption<D>[] | null> = input<\n    readonly MatTimepickerOption<D>[] | null\n  >(null);\n\n  /** Whether the timepicker is open. */\n  readonly isOpen: Signal<boolean> = this._isOpen.asReadonly();\n\n  /** Emits when the user selects a time. */\n  readonly selected: OutputEmitterRef<MatTimepickerSelected<D>> = output();\n\n  /** Emits when the timepicker is opened. */\n  readonly opened: OutputEmitterRef<void> = output();\n\n  /** Emits when the timepicker is closed. */\n  readonly closed: OutputEmitterRef<void> = output();\n\n  /** ID of the active descendant option. */\n  readonly activeDescendant: Signal<string | null> = this._activeDescendant.asReadonly();\n\n  /** Unique ID of the timepicker's panel */\n  readonly panelId: string = inject(_IdGenerator).getId('mat-timepicker-panel-');\n\n  /** Whether ripples within the timepicker should be disabled. */\n  readonly disableRipple: InputSignalWithTransform<boolean, unknown> = input(\n    this._defaultConfig?.disableRipple ?? false,\n    {\n      transform: booleanAttribute,\n    },\n  );\n\n  /** ARIA label for the timepicker panel. */\n  readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, {\n    alias: 'aria-label',\n  });\n\n  /** ID of the label element for the timepicker panel. */\n  readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, {\n    alias: 'aria-labelledby',\n  });\n\n  /** Whether the timepicker is currently disabled. */\n  readonly disabled: Signal<boolean> = computed(() => !!this._input()?.disabled());\n\n  /** Classes to be passed to the timepicker panel. */\n  readonly panelClass = input<string | string[]>();\n\n  constructor() {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      validateAdapter(this._dateAdapter, this._dateFormats);\n\n      effect(() => {\n        const options = this.options();\n        const interval = this.interval();\n\n        if (options !== null && interval !== null) {\n          throw new Error(\n            'Cannot specify both the `options` and `interval` inputs at the same time',\n          );\n        } else if (options?.length === 0) {\n          throw new Error('Value of `options` input cannot be an empty array');\n        }\n      });\n    }\n\n    // Since the panel ID is static, we can set it once without having to maintain a host binding.\n    const element = inject<ElementRef<HTMLElement>>(ElementRef);\n    element.nativeElement.setAttribute('mat-timepicker-panel-id', this.panelId);\n    this._handleLocaleChanges();\n    this._handleInputStateChanges();\n    this._keyManager.change.subscribe(() =>\n      this._activeDescendant.set(this._keyManager.activeItem?.id || null),\n    );\n  }\n\n  /** Opens the timepicker. */\n  open(): void {\n    const input = this._input();\n\n    if (!input) {\n      return;\n    }\n\n    // Focus should already be on the input, but this call is in case the timepicker is opened\n    // programmatically. We need to call this even if the timepicker is already open, because\n    // the user might be clicking the toggle.\n    input.focus();\n\n    if (this._isOpen()) {\n      return;\n    }\n\n    this._isOpen.set(true);\n    this._generateOptions();\n    const overlayRef = this._getOverlayRef();\n    overlayRef.updateSize({width: input.getOverlayOrigin().nativeElement.offsetWidth});\n    this._portal ??= new TemplatePortal(this._panelTemplate(), this._viewContainerRef);\n\n    // We need to check this in case `isOpen` was flipped, but change detection hasn't\n    // had a chance to run yet. See https://github.com/angular/components/issues/30637\n    if (!overlayRef.hasAttached()) {\n      overlayRef.attach(this._portal);\n    }\n\n    this._onOpenRender?.destroy();\n    this._onOpenRender = afterNextRender(\n      () => {\n        const options = this._options();\n        this._syncSelectedState(input.value(), options, options[0]);\n        this._onOpenRender = null;\n      },\n      {injector: this._injector},\n    );\n\n    this.opened.emit();\n  }\n\n  /** Closes the timepicker. */\n  close(): void {\n    if (this._isOpen()) {\n      this._isOpen.set(false);\n      this.closed.emit();\n\n      if (this._animationsDisabled) {\n        this._overlayRef?.detach();\n      }\n    }\n  }\n\n  /** Registers an input with the timepicker. */\n  registerInput(input: MatTimepickerConnectedInput<D>): void {\n    const currentInput = this._input();\n\n    if (currentInput && input !== currentInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw new Error('MatTimepicker can only be registered with one input at a time');\n    }\n\n    this._input.set(input);\n  }\n\n  ngOnDestroy(): void {\n    this._keyManager.destroy();\n    this._localeChanges?.unsubscribe();\n    this._onOpenRender?.destroy();\n    this._overlayRef?.dispose();\n  }\n\n  _getOverlayHost() {\n    return this._overlayRef?.hostElement;\n  }\n\n  /** Selects a specific time value. */\n  protected _selectValue(option: MatOption<D>) {\n    this.close();\n    this._keyManager.setActiveItem(option);\n    this._options().forEach(current => {\n      // This is primarily here so we don't show two selected options while animating away.\n      if (current !== option) {\n        current.deselect(false);\n      }\n    });\n    // Notify the input first so it can sync up the form control before emitting to `selected`.\n    this._input()?.timepickerValueAssigned(option.value);\n    this.selected.emit({value: option.value, source: this});\n    this._input()?.focus();\n  }\n\n  /** Gets the value of the `aria-labelledby` attribute. */\n  protected _getAriaLabelledby(): string | null {\n    if (this.ariaLabel()) {\n      return null;\n    }\n    return this.ariaLabelledby() || this._input()?.getLabelId() || null;\n  }\n\n  /** Handles animation events coming from the panel. */\n  protected _handleAnimationEnd(event: AnimationEvent) {\n    if (event.animationName === '_mat-timepicker-exit') {\n      this._overlayRef?.detach();\n    }\n  }\n\n  /** Creates an overlay reference for the timepicker panel. */\n  private _getOverlayRef(): OverlayRef {\n    if (this._overlayRef) {\n      return this._overlayRef;\n    }\n\n    const positionStrategy = createFlexibleConnectedPositionStrategy(\n      this._injector,\n      this._input()!.getOverlayOrigin(),\n    )\n      .withFlexibleDimensions(false)\n      .withPush(false)\n      .withTransformOriginOn('.mat-timepicker-panel')\n      .withPopoverLocation('inline')\n      .withPositions([\n        {\n          originX: 'start',\n          originY: 'bottom',\n          overlayX: 'start',\n          overlayY: 'top',\n        },\n        {\n          originX: 'start',\n          originY: 'top',\n          overlayX: 'start',\n          overlayY: 'bottom',\n          panelClass: 'mat-timepicker-above',\n        },\n      ]);\n\n    this._overlayRef = createOverlayRef(this._injector, {\n      positionStrategy,\n      scrollStrategy: this._scrollStrategyFactory(),\n      direction: this._dir || 'ltr',\n      hasBackdrop: false,\n      disableAnimations: this._animationsDisabled,\n      panelClass: this.panelClass(),\n    });\n\n    this._overlayRef.detachments().subscribe(() => this.close());\n    this._overlayRef.keydownEvents().subscribe(event => this._handleKeydown(event));\n    this._overlayRef.outsidePointerEvents().subscribe(event => {\n      const target = _getEventTarget(event) as HTMLElement;\n      const origin = this._input()?.getOverlayOrigin().nativeElement;\n\n      if (target && origin && target !== origin && !origin.contains(target)) {\n        this.close();\n      }\n    });\n\n    return this._overlayRef;\n  }\n\n  /** Generates the list of options from which the user can select.. */\n  private _generateOptions(): void {\n    // Default the interval to 30 minutes.\n    const interval = this.interval() ?? 30 * 60;\n    const options = this.options();\n\n    if (options !== null) {\n      this._timeOptions = options;\n    } else {\n      const input = this._input();\n      const adapter = this._dateAdapter;\n      const timeFormat = this._dateFormats.display.timeInput;\n      const min = input?.min() || adapter.setTime(adapter.today(), 0, 0, 0);\n      const max = input?.max() || adapter.setTime(adapter.today(), 23, 59, 0);\n      const cacheKey =\n        interval + '/' + adapter.format(min, timeFormat) + '/' + adapter.format(max, timeFormat);\n\n      // Don't re-generate the options if the inputs haven't changed.\n      if (cacheKey !== this._optionsCacheKey) {\n        this._optionsCacheKey = cacheKey;\n        this._timeOptions = generateOptions(adapter, this._dateFormats, min, max, interval);\n      }\n    }\n  }\n\n  /**\n   * Synchronizes the internal state of the component based on a specific selected date.\n   * @param value Currently selected date.\n   * @param options Options rendered out in the timepicker.\n   * @param fallback Option to set as active if no option is selected.\n   */\n  private _syncSelectedState(\n    value: D | null,\n    options: readonly MatOption[],\n    fallback: MatOption | null,\n  ): void {\n    let hasSelected = false;\n\n    for (const option of options) {\n      if (value && this._dateAdapter.sameTime(option.value, value)) {\n        option.select(false);\n        scrollOptionIntoView(option, 'center');\n        untracked(() => this._keyManager.setActiveItem(option));\n        hasSelected = true;\n      } else {\n        option.deselect(false);\n      }\n    }\n\n    // If no option was selected, we need to reset the key manager since\n    // it might be holding onto an option that no longer exists.\n    if (!hasSelected) {\n      if (fallback) {\n        untracked(() => this._keyManager.setActiveItem(fallback));\n        scrollOptionIntoView(fallback, 'center');\n      } else {\n        untracked(() => this._keyManager.setActiveItem(-1));\n      }\n    }\n  }\n\n  /** Handles keyboard events while the overlay is open. */\n  private _handleKeydown(event: KeyboardEvent): void {\n    const keyCode = event.keyCode;\n\n    if (keyCode === TAB) {\n      this.close();\n    } else if (keyCode === ESCAPE && !hasModifierKey(event)) {\n      event.preventDefault();\n      this.close();\n    } else if (keyCode === ENTER) {\n      event.preventDefault();\n\n      if (this._keyManager.activeItem) {\n        this._selectValue(this._keyManager.activeItem);\n      } else {\n        this.close();\n      }\n    } else {\n      const previousActive = this._keyManager.activeItem;\n      this._keyManager.onKeydown(event);\n      const currentActive = this._keyManager.activeItem;\n\n      if (currentActive && currentActive !== previousActive) {\n        scrollOptionIntoView(currentActive, 'nearest');\n      }\n    }\n  }\n\n  /** Sets up the logic that updates the timepicker when the locale changes. */\n  private _handleLocaleChanges(): void {\n    // Re-generate the options list if the locale changes.\n    this._localeChanges = this._dateAdapter.localeChanges.subscribe(() => {\n      this._optionsCacheKey = null;\n\n      if (this.isOpen()) {\n        this._generateOptions();\n      }\n    });\n  }\n\n  /**\n   * Sets up the logic that updates the timepicker when the state of the connected input changes.\n   */\n  private _handleInputStateChanges(): void {\n    effect(() => {\n      const input = this._input();\n      const options = this._options();\n\n      if (this._isOpen() && input) {\n        this._syncSelectedState(input.value(), options, null);\n      }\n    });\n  }\n}\n\n/**\n * Scrolls an option into view.\n * @param option Option to be scrolled into view.\n * @param position Position to which to align the option relative to the scrollable container.\n */\nfunction scrollOptionIntoView(option: MatOption, position: ScrollLogicalPosition) {\n  option._getHostElement().scrollIntoView({block: position, inline: position});\n}\n","<ng-template #panelTemplate>\n  <div\n    role=\"listbox\"\n    class=\"mat-timepicker-panel\"\n    [class.mat-timepicker-panel-animations-enabled]=\"!_animationsDisabled\"\n    [class.mat-timepicker-panel-exit]=\"!isOpen()\"\n    [attr.aria-label]=\"ariaLabel() || null\"\n    [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n    [id]=\"panelId\"\n    (animationend)=\"_handleAnimationEnd($event)\">\n    @for (option of _timeOptions; track option.value) {\n      <mat-option\n        [value]=\"option.value\"\n        (onSelectionChange)=\"_selectValue($event.source)\">{{option.label}}</mat-option>\n    }\n  </div>\n</ng-template>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  booleanAttribute,\n  computed,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  InputSignal,\n  InputSignalWithTransform,\n  model,\n  ModelSignal,\n  OnDestroy,\n  OutputRefSubscription,\n  Renderer2,\n  Signal,\n  signal,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS} from '../core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport {MAT_FORM_FIELD} from '../form-field';\nimport {MatTimepicker, MatTimepickerConnectedInput} from './timepicker';\nimport {MAT_INPUT_VALUE_ACCESSOR} from '../input';\nimport {Subscription} from 'rxjs';\nimport {DOWN_ARROW, ESCAPE, hasModifierKey, UP_ARROW} from '@angular/cdk/keycodes';\nimport {validateAdapter} from './util';\nimport {_getEventTarget, _getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\n\n/**\n * Input that can be used to enter time and connect to a `mat-timepicker`.\n */\n@Directive({\n  selector: 'input[matTimepicker]',\n  exportAs: 'matTimepickerInput',\n  host: {\n    'class': 'mat-timepicker-input',\n    'role': 'combobox',\n    'type': 'text',\n    'aria-haspopup': 'listbox',\n    '[attr.aria-activedescendant]': '_ariaActiveDescendant()',\n    '[attr.aria-expanded]': '_ariaExpanded()',\n    '[attr.aria-controls]': '_ariaControls()',\n    '[attr.mat-timepicker-id]': 'timepicker()?.panelId',\n    '[disabled]': 'disabled()',\n    '(blur)': '_handleBlur()',\n    '(input)': '_handleInput($event)',\n    '(keydown)': '_handleKeydown($event)',\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: MatTimepickerInput,\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: MatTimepickerInput,\n      multi: true,\n    },\n    {\n      provide: MAT_INPUT_VALUE_ACCESSOR,\n      useExisting: MatTimepickerInput,\n    },\n  ],\n})\nexport class MatTimepickerInput<D>\n  implements MatTimepickerConnectedInput<D>, ControlValueAccessor, Validator, OnDestroy\n{\n  private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n  private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;\n  private _formField = inject(MAT_FORM_FIELD, {optional: true});\n\n  private _onChange: ((value: unknown) => void) | undefined;\n  private _onTouched: (() => void) | undefined;\n  private _validatorOnChange: (() => void) | undefined;\n  private _cleanupClick: () => void;\n  private _accessorDisabled = signal(false);\n  private _localeSubscription: Subscription;\n  private _timepickerSubscription: OutputRefSubscription | undefined;\n  private _validator: ValidatorFn;\n  private _lastValueValid = true;\n  private _minValid = true;\n  private _maxValid = true;\n  private _lastValidDate: D | null = null;\n\n  /** Value of the `aria-activedescendant` attribute. */\n  protected readonly _ariaActiveDescendant = computed(() => {\n    const timepicker = this.timepicker();\n    const isOpen = timepicker.isOpen();\n    const activeDescendant = timepicker.activeDescendant();\n    return isOpen && activeDescendant ? activeDescendant : null;\n  });\n\n  /** Value of the `aria-expanded` attribute. */\n  protected readonly _ariaExpanded = computed(() => this.timepicker().isOpen() + '');\n\n  /** Value of the `aria-controls` attribute. */\n  protected readonly _ariaControls = computed(() => {\n    const timepicker = this.timepicker();\n    return timepicker.isOpen() ? timepicker.panelId : null;\n  });\n\n  /** Current value of the input. */\n  readonly value: ModelSignal<D | null> = model<D | null>(null);\n\n  /** Timepicker that the input is associated with. */\n  readonly timepicker: InputSignal<MatTimepicker<D>> = input.required<MatTimepicker<D>>({\n    alias: 'matTimepicker',\n  });\n\n  /**\n   * Minimum time that can be selected or typed in. Can be either\n   * a date object (only time will be used) or a valid time string.\n   */\n  readonly min: InputSignalWithTransform<D | null, unknown> = input(null, {\n    alias: 'matTimepickerMin',\n    transform: (value: unknown) => this._transformDateInput<D>(value),\n  });\n\n  /**\n   * Maximum time that can be selected or typed in. Can be either\n   * a date object (only time will be used) or a valid time string.\n   */\n  readonly max: InputSignalWithTransform<D | null, unknown> = input(null, {\n    alias: 'matTimepickerMax',\n    transform: (value: unknown) => this._transformDateInput<D>(value),\n  });\n\n  /**\n   * Whether to open the timepicker overlay when clicking on the input. Enabled by default.\n   * Note that when disabling this option, you'll have to provide your own logic for opening\n   * the overlay.\n   */\n  readonly openOnClick: InputSignalWithTransform<boolean, unknown> = input(true, {\n    alias: 'matTimepickerOpenOnClick',\n    transform: booleanAttribute,\n  });\n\n  /** Whether the input is disabled. */\n  readonly disabled: Signal<boolean> = computed(\n    () => this.disabledInput() || this._accessorDisabled(),\n  );\n\n  /**\n   * Whether the input should be disabled through the template.\n   * @docs-private\n   */\n  readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n    alias: 'disabled',\n  });\n\n  constructor() {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      validateAdapter(this._dateAdapter, this._dateFormats);\n    }\n\n    const renderer = inject(Renderer2);\n    this._validator = this._getValidator();\n    this._updateFormsState();\n    this._registerTimepicker();\n    this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {\n      if (!this._hasFocus()) {\n        this._formatValue(this.value());\n      }\n    });\n\n    // Bind the click listener manually to the overlay origin, because we want the entire\n    // form field to be clickable, if the timepicker is used in `mat-form-field`.\n    this._cleanupClick = renderer.listen(\n      this.getOverlayOrigin().nativeElement,\n      'click',\n      this._handleClick,\n    );\n  }\n\n  /**\n   * Implemented as a part of `ControlValueAccessor`.\n   * @docs-private\n   */\n  writeValue(value: unknown): void {\n    // Note that we need to deserialize here, rather than depend on the value change effect,\n    // because `getValidDateOrNull` will clobber the value if it's parseable, but not created by\n    // the current adapter (see #30140).\n    const deserialized = this._dateAdapter.deserialize(value);\n    this.value.set(this._dateAdapter.getValidDateOrNull(deserialized));\n  }\n\n  /**\n   * Implemented as a part of `ControlValueAccessor`.\n   * @docs-private\n   */\n  registerOnChange(fn: (value: unknown) => void): void {\n    this._onChange = fn;\n  }\n\n  /**\n   * Implemented as a part of `ControlValueAccessor`.\n   * @docs-private\n   */\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  /**\n   * Implemented as a part of `ControlValueAccessor`.\n   * @docs-private\n   */\n  setDisabledState(isDisabled: boolean): void {\n    this._accessorDisabled.set(isDisabled);\n  }\n\n  /**\n   * Implemented as a part of `Validator`.\n   * @docs-private\n   */\n  validate(control: AbstractControl): ValidationErrors | null {\n    return this._validator(control);\n  }\n\n  /**\n   * Implemented as a part of `Validator`.\n   * @docs-private\n   */\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  /** Gets the element to which the timepicker popup should be attached. */\n  getOverlayOrigin(): ElementRef<HTMLElement> {\n    return this._formField?.getConnectedOverlayOrigin() || this._elementRef;\n  }\n\n  /** Focuses the input. */\n  focus(): void {\n    this._elementRef.nativeElement.focus();\n  }\n\n  ngOnDestroy(): void {\n    this._cleanupClick();\n    this._timepickerSubscription?.unsubscribe();\n    this._localeSubscription.unsubscribe();\n  }\n\n  /** Gets the ID of the input's label. */\n  getLabelId(): string | null {\n    return this._formField?.getLabelId() || null;\n  }\n\n  /** Handles clicks on the input or the containing form field. */\n  private _handleClick = (event: MouseEvent): void => {\n    if (this.disabled() || !this.openOnClick()) {\n      return;\n    }\n\n    const target = _getEventTarget(event) as Node | null;\n    const overlayHost = this.timepicker()._getOverlayHost();\n\n    if (!target || !overlayHost || !overlayHost.contains(target)) {\n      this.timepicker().open();\n    }\n  };\n\n  /** Handles the `input` event. */\n  protected _handleInput(event: Event) {\n    const value = (event.target as HTMLInputElement).value;\n    const currentValue = this.value();\n    const date = this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput);\n    const hasChanged = !this._dateAdapter.sameTime(date, currentValue);\n\n    if (!date || hasChanged || !!(value && !currentValue)) {\n      // We need to fire the CVA change event for all nulls, otherwise the validators won't run.\n      this._assignUserSelection(date, true);\n    } else {\n      // Call the validator even if the value hasn't changed since\n      // some fields change depending on what the user has entered.\n      this._validatorOnChange?.();\n    }\n  }\n\n  /** Handles the `blur` event. */\n  protected _handleBlur() {\n    const value = this.value();\n\n    // Only reformat on blur so the value doesn't change while the user is interacting.\n    if (value && this._isValid(value)) {\n      this._formatValue(value);\n    }\n\n    if (!this.timepicker().isOpen()) {\n      this._onTouched?.();\n    }\n  }\n\n  /** Handles the `keydown` event. */\n  protected _handleKeydown(event: KeyboardEvent) {\n    // All keyboard events while open are handled through the timepicker.\n    if (this.timepicker().isOpen() || this.disabled()) {\n      return;\n    }\n\n    if (event.keyCode === ESCAPE && !hasModifierKey(event) && this.value() !== null) {\n      event.preventDefault();\n      this.value.set(null);\n      this._formatValue(null);\n    } else if (event.keyCode === DOWN_ARROW || event.keyCode === UP_ARROW) {\n      event.preventDefault();\n      this.timepicker().open();\n    }\n  }\n\n  /** Called by the timepicker to sync up the user-selected value. */\n  timepickerValueAssigned(value: D | null) {\n    if (!this._dateAdapter.sameTime(value, this.value())) {\n      this._assignUserSelection(value, true);\n      this._formatValue(value);\n    }\n  }\n\n  /** Sets up the code that keeps the input state in sync with the forms module. */\n  private _updateFormsState(): void {\n    effect(() => {\n      const {\n        _dateAdapter: adapter,\n        _lastValueValid: prevValueValid,\n        _minValid: prevMinValid,\n        _maxValid: prevMaxValid,\n      } = this;\n      const value = adapter.deserialize(this.value());\n      const min = this.min();\n      const max = this.max();\n      const valueValid = (this._lastValueValid = this._isValid(value));\n      this._minValid = !min || !value || !valueValid || adapter.compareTime(min, value) <= 0;\n      this._maxValid = !max || !value || !valueValid || adapter.compareTime(max, value) >= 0;\n      const stateChanged =\n        prevValueValid !== valueValid ||\n        prevMinValid !== this._minValid ||\n        prevMaxValid !== this._maxValid;\n\n      // Reformat the value if it changes while the user isn't interacting.\n      if (!this._hasFocus()) {\n        this._formatValue(value);\n      }\n\n      if (value && valueValid) {\n        this._lastValidDate = value;\n      }\n\n      // Trigger the validator if the state changed.\n      if (stateChanged) {\n        this._validatorOnChange?.();\n      }\n    });\n  }\n\n  /** Sets up the logic that registers the input with the timepicker. */\n  private _registerTimepicker(): void {\n    effect(() => {\n      const timepicker = this.timepicker();\n      timepicker.registerInput(this);\n      timepicker.closed.subscribe(() => this._onTouched?.());\n    });\n  }\n\n  /**\n   * Assigns a value set by the user to the input's model.\n   * @param selection Time selected by the user that should be assigned.\n   * @param propagateToAccessor Whether the value should be propagated to the ControlValueAccessor.\n   */\n  private _assignUserSelection(selection: D | null, propagateToAccessor: boolean) {\n    let toAssign: D | null;\n\n    if (selection == null || !this._isValid(selection)) {\n      toAssign = selection;\n    } else {\n      // If a datepicker and timepicker are writing to the same object and the user enters an\n      // invalid time into the timepicker, we may end up clearing their selection from the\n      // datepicker. If the user enters a valid time afterwards, the datepicker's selection will\n      // have been lost. This logic restores the previously-valid date and sets its time to\n      // the newly-selected time.\n      const adapter = this._dateAdapter;\n      const target = adapter.getValidDateOrNull(this._lastValidDate || this.value());\n      const hours = adapter.getHours(selection);\n      const minutes = adapter.getMinutes(selection);\n      const seconds = adapter.getSeconds(selection);\n      toAssign = target ? adapter.setTime(target, hours, minutes, seconds) : selection;\n    }\n\n    // Propagate to the form control before emitting to `valueChange`.\n    if (propagateToAccessor) {\n      this._onChange?.(toAssign);\n    }\n\n    this.value.set(toAssign);\n  }\n\n  /** Formats the current value and assigns it to the input. */\n  private _formatValue(value: D | null): void {\n    value = this._dateAdapter.getValidDateOrNull(value);\n    this._elementRef.nativeElement.value =\n      value == null ? '' : this._dateAdapter.format(value, this._dateFormats.display.timeInput);\n  }\n\n  /** Checks whether a value is valid. */\n  private _isValid(value: D | null): boolean {\n    return !value || this._dateAdapter.isValid(value);\n  }\n\n  /** Transforms an arbitrary value into a value that can be assigned to a date-based input. */\n  private _transformDateInput<D>(value: unknown): D | null {\n    const date =\n      typeof value === 'string'\n        ? this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput)\n        : this._dateAdapter.deserialize(value);\n    return date && this._dateAdapter.isValid(date) ? (date as D) : null;\n  }\n\n  /** Whether the input is currently focused. */\n  private _hasFocus(): boolean {\n    return _getFocusedElementPierceShadowDom() === this._elementRef.nativeElement;\n  }\n\n  /** Gets a function that can be used to validate the input. */\n  private _getValidator(): ValidatorFn {\n    return Validators.compose([\n      () =>\n        this._lastValueValid\n          ? null\n          : {'matTimepickerParse': {'text': this._elementRef.nativeElement.value}},\n      control =>\n        this._minValid\n          ? null\n          : {\n              'matTimepickerMin': {\n                'min': this.min(),\n                'actual': this._dateAdapter.getValidDateOrNull(\n                  this._dateAdapter.deserialize(control.value),\n                ),\n              },\n            },\n      control =>\n        this._maxValid\n          ? null\n          : {\n              'matTimepickerMax': {\n                'max': this.max(),\n                'actual': this._dateAdapter.getValidDateOrNull(\n                  this._dateAdapter.deserialize(control.value),\n                ),\n              },\n            },\n    ])!;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  booleanAttribute,\n  Component,\n  computed,\n  HostAttributeToken,\n  inject,\n  input,\n  InputSignal,\n  InputSignalWithTransform,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {MatIconButton} from '../button';\nimport {MAT_TIMEPICKER_CONFIG} from './util';\nimport type {MatTimepicker} from './timepicker';\n\n/** Button that can be used to open a `mat-timepicker`. */\n@Component({\n  selector: 'mat-timepicker-toggle',\n  templateUrl: 'timepicker-toggle.html',\n  host: {\n    'class': 'mat-timepicker-toggle',\n    '[attr.tabindex]': 'null',\n    // Bind the `click` on the host, rather than the inner `button`, so that we can call\n    // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n    // it so that the input doesn't get focused automatically by the form field (See #21836).\n    '(click)': '_open($event)',\n  },\n  exportAs: 'matTimepickerToggle',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MatIconButton],\n})\nexport class MatTimepickerToggle<D> {\n  private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});\n  private _defaultTabIndex = (() => {\n    const value = inject(new HostAttributeToken('tabindex'), {optional: true});\n    const parsed = Number(value);\n    return isNaN(parsed) ? null : parsed;\n  })();\n\n  protected _isDisabled = computed(() => {\n    const timepicker = this.timepicker();\n    return this.disabled() || timepicker.disabled();\n  });\n\n  /** Timepicker instance that the button will toggle. */\n  readonly timepicker: InputSignal<MatTimepicker<D>> = input.required<MatTimepicker<D>>({\n    alias: 'for',\n  });\n\n  /** Screen-reader label for the button. */\n  readonly ariaLabel = input<string | undefined>(undefined, {\n    alias: 'aria-label',\n  });\n\n  /** Screen-reader labelled by id for the button. */\n  readonly ariaLabelledby = input<string | undefined>(undefined, {\n    alias: 'aria-labelledby',\n  });\n\n  /** Default aria-label for the toggle if none is provided. */\n  private readonly _defaultAriaLabel = 'Open timepicker options';\n\n  /** Whether the toggle button is disabled. */\n  readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n    alias: 'disabled',\n  });\n\n  /** Tabindex for the toggle. */\n  readonly tabIndex: InputSignal<number | null> = input(this._defaultTabIndex);\n\n  /** Whether ripples on the toggle should be disabled. */\n  readonly disableRipple: InputSignalWithTransform<boolean, unknown> = input(\n    this._defaultConfig?.disableRipple ?? false,\n    {transform: booleanAttribute},\n  );\n\n  /** Opens the connected timepicker. */\n  protected _open(event: Event): void {\n    if (this.timepicker() && !this._isDisabled()) {\n      this.timepicker().open();\n      event.stopPropagation();\n    }\n  }\n\n  /**\n   * Checks for ariaLabelledby and if empty uses custom\n   * aria-label or defaultAriaLabel if neither is provided.\n   */\n  getAriaLabel(): string | null {\n    return this.ariaLabelledby() ? null : this.ariaLabel() || this._defaultAriaLabel;\n  }\n}\n","<button\n  matIconButton\n  type=\"button\"\n  aria-haspopup=\"listbox\"\n  [attr.aria-label]=\"getAriaLabel()\"\n  [attr.aria-labelledby]=\"ariaLabelledby()\"\n  [attr.aria-expanded]=\"timepicker().isOpen()\"\n  [tabIndex]=\"_isDisabled() ? -1 : tabIndex()\"\n  [disabled]=\"_isDisabled()\"\n  [disableRipple]=\"disableRipple()\">\n\n  <ng-content select=\"[matTimepickerToggleIcon]\">\n    <svg\n      class=\"mat-timepicker-toggle-default-icon\"\n      height=\"24px\"\n      width=\"24px\"\n      viewBox=\"0 -960 960 960\"\n      fill=\"currentColor\"\n      focusable=\"false\"\n      aria-hidden=\"true\">\n      <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n    </svg>\n  </ng-content>\n</button>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatTimepicker} from './timepicker';\nimport {MatTimepickerInput} from './timepicker-input';\nimport {MatTimepickerToggle} from './timepicker-toggle';\n\n@NgModule({\n  imports: [MatTimepicker, MatTimepickerInput, MatTimepickerToggle],\n  exports: [CdkScrollableModule, MatTimepicker, MatTimepickerInput, MatTimepickerToggle],\n})\nexport class MatTimepickerModule {}\n"],"names":[],"mappings":"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"}