/**
 * Time Picker Component
 * A customizable time picker that supports 12/24 hour formats, seconds, and multiple locales.
 *
 * Features:
 * - 12/24 hour format
 * - Optional seconds
 * - Localization support
 * - String or Date value types
 * - Min/Max time validation
 * - Custom styling
 */
import { ElementRef, OnInit, EventEmitter, OnDestroy, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';
import { ControlValueAccessor, FormBuilder, FormGroup } from '@angular/forms';
import { CdkOverlayOrigin, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';
import { Lang_Locale } from '../utils/models';
import { AsaDatePickerService } from '../asa-date-picker.service';
import { AsaDateAdapter, GregorianDateAdapter, JalaliDateAdapter } from '../asa-date-adapter';
import { TimeConfig, TimeFormat, TimeValueType } from '../utils/types';
import * as i0 from "@angular/core";
export declare class TimePickerComponent implements ControlValueAccessor, OnInit, OnDestroy, OnChanges {
    fb: FormBuilder;
    elementRef: ElementRef;
    cdref: ChangeDetectorRef;
    datePickerService: AsaDatePickerService;
    jalaliAdapter: JalaliDateAdapter;
    gregorianAdapter: GregorianDateAdapter;
    placeholder?: string;
    rtl: boolean;
    placement: 'left' | 'right';
    minTime?: string;
    maxTime?: string;
    lang: Lang_Locale;
    valueType: TimeValueType;
    cssClass: string;
    showIcon: boolean;
    dateAdapter: AsaDateAdapter<Date>;
    inline: boolean;
    disableInputMask: boolean;
    disabled: boolean;
    disabledTimesFilter: (date: Date) => boolean;
    allowEmpty: boolean;
    readOnly: boolean;
    readOnlyInput: boolean;
    isTimerVertical: boolean;
    set displayFormat(value: string);
    get displayFormat(): string;
    set selectedDate(date: Date);
    get selectedDate(): Date;
    timeChange: EventEmitter<string | Date>;
    openChange: EventEmitter<boolean>;
    timePickerInput: ElementRef<HTMLInputElement>;
    popupWrapper: ElementRef<HTMLDivElement>;
    timeFormat: TimeFormat;
    private _displayFormat;
    private _value;
    private _selectedDate;
    private onChange;
    private onTouched;
    private timeoutId;
    showSeconds: boolean;
    hours: number[];
    minutes: number[];
    seconds: number[];
    periods: string[];
    selectedTime: TimeConfig;
    isOpen: boolean;
    form: FormGroup;
    origin: CdkOverlayOrigin;
    overlayPositions: import("@angular/cdk/overlay").ConnectionPositionPair[];
    currentFocusedColumn: 'hour' | 'minute' | 'second' | 'period' | null;
    private isScrolling;
    private scrollTimeout;
    constructor(fb: FormBuilder, elementRef: ElementRef, cdref: ChangeDetectorRef, datePickerService: AsaDatePickerService, jalaliAdapter: JalaliDateAdapter, gregorianAdapter: GregorianDateAdapter);
    ngOnInit(): Promise<void>;
    ngOnDestroy(): void;
    ngOnChanges(changes: SimpleChanges): void;
    initializeForm(): void;
    initializeLocale(): void;
    updateLocale(): void;
    setupInputSubscription(): void;
    updateHourRange(): void;
    formatTime(date?: Date): string;
    parseTimeString(value: string | Date): void;
    get value(): Date | string | null;
    set value(val: Date | string | null);
    updateFromValue(value: Date | string | null): void;
    updateFromDate(date: Date | null): void;
    resetSelection(): void;
    writeValue(value: Date | string | null): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    handleKeydown(event: KeyboardEvent): void;
    handleArrowNavigation(direction: number): void;
    getNextValidIndex(items: any[], currentIndex: number, direction: number, isDisabledFn: (item: any) => boolean): number;
    focusTimeButton(type: 'hour' | 'minute' | 'second' | 'period', value: any): void;
    onTimeButtonFocus(column: 'hour' | 'minute' | 'second' | 'period'): void;
    handleTimeInput(): void;
    handleDocumentClick: (event: MouseEvent) => void;
    onFocusInput(): void;
    toggleTimePicker(event: Event): void;
    open(): void;
    close(): void;
    selectHour(hour: number): void;
    selectMinute(minute: number): void;
    selectSecond(second: number): void;
    selectPeriod(period: string): void;
    selectNow(): void;
    save(close?: boolean): void;
    validateAndUpdateTime(value: string): void;
    isHourDisabled(hour: number): boolean;
    isMinuteDisabled(minute: number): boolean;
    isSecondDisabled(second: number): boolean;
    isTimeDisabled(testDate: Date): boolean;
    validateAndNormalizeTime(date: Date): {
        isValid: boolean;
        normalizedDate: Date | null;
    };
    private isFullHourDisabled;
    private isFullMinuteDisabled;
    createDateWithTime(config: TimeConfig): Date;
    updateDateFromSelection(): Date;
    updateTimeDisplay(): void;
    getTimeFormatFromDisplayFormat(format: string): '12' | '24';
    scrollToTime(): Promise<void>;
    scrollToSelectedItem(id: string, behavior?: ScrollBehavior): Promise<boolean>;
    cleanupTimeouts(): void;
    onPositionChange(position: ConnectedOverlayPositionChange): void;
    onTimeScroll(event: WheelEvent, type: 'hour' | 'minute' | 'second' | 'period'): void;
    changeHour(direction: number): void;
    changeMinute(direction: number): void;
    changeSecond(direction: number): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TimePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TimePickerComponent, "asa-time-picker", never, { "placeholder": "placeholder"; "rtl": "rtl"; "placement": "placement"; "minTime": "minTime"; "maxTime": "maxTime"; "lang": "lang"; "valueType": "valueType"; "cssClass": "cssClass"; "showIcon": "showIcon"; "dateAdapter": "dateAdapter"; "inline": "inline"; "disableInputMask": "disableInputMask"; "disabled": "disabled"; "disabledTimesFilter": "disabledTimesFilter"; "allowEmpty": "allowEmpty"; "readOnly": "readOnly"; "readOnlyInput": "readOnlyInput"; "isTimerVertical": "isTimerVertical"; "displayFormat": "displayFormat"; "selectedDate": "selectedDate"; }, { "timeChange": "timeChange"; "openChange": "openChange"; }, never, never, true>;
}
