import { IDatetimeProps } from '../../../composable';
import { IRawDate, TDateLocale } from '../../../utils';
import { PropType, Ref } from 'vue';
export interface ITimeProps {
    modelValue: IDatetimeProps['modelValue'];
    format12h: boolean;
    nowBtn: boolean;
    withSeconds: boolean;
    defaultDate?: string;
    allowedTime?: (hr: number | null, min: number | null, sec: number | null) => boolean;
    allowedHours?: number[];
    allowedMinutes?: number[];
    allowedSeconds?: number[];
}
export declare const makeTimeProps: <Defaults extends {
    withSeconds?: unknown;
    format12h?: unknown;
    nowBtn?: unknown;
    defaultDate?: unknown;
    allowedTime?: unknown;
    allowedHours?: unknown;
    allowedMinutes?: unknown;
    allowedSeconds?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../../../utils').AppendDefault<{
    /**
     * Добавляет секунды в выбор времени
     */
    withSeconds: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Отображает время в 12-часовом формате AM/PM
     */
    format12h: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Отображает кнопку "Сейчас"
     */
    nowBtn: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Используемая дата по умолчанию, когда модель не заполнена (в формате YYYY/MM/DD)
     */
    defaultDate: {
        type: PropType<string>;
        validator: (value: string) => boolean;
    };
    /**
     * Позволяет настроить какое время доступно для выбора
     */
    allowedTime: {
        type: PropType<(hr: number | null, min: number | null, sec: number | null) => boolean>;
        default: undefined;
    };
    /**
     * Позволяет настроить какие часы доступны для выбора
     */
    allowedHours: {
        type: PropType<number[]>;
        default: undefined;
    };
    /**
     * Позволяет настроить какие минуты доступны для выбора
     */
    allowedMinutes: {
        type: PropType<number[]>;
        default: undefined;
    };
    /**
     * Позволяет настроить какие секунды доступны для выбора
     */
    allowedSeconds: {
        type: PropType<number[]>;
        default: undefined;
    };
}, Defaults>;
export declare function useTime(props: ITimeProps, internalLocale: Ref<TDateLocale>, internalMask: Ref<string>, getCurrentDate: (dateOnly?: boolean) => IRawDate): {
    model: Ref<IRawDate, IRawDate> & {
        readonly externalValue: string | import('../../../composable').TDatetimeValueRange | (string | import('../../../composable').TDatetimeValueRange)[];
    };
    isAM: Ref<boolean, boolean>;
    stringModel: import('vue').ComputedRef<{
        hour: string | undefined;
        minute: string;
        second: string;
    }>;
    hourInSelection: import('vue').ComputedRef<((value: number) => boolean | undefined) | null>;
    minuteInSelection: import('vue').ComputedRef<((value: number) => boolean | undefined) | null>;
    secondInSelection: import('vue').ComputedRef<((value: number) => boolean | undefined) | null>;
    validHours: import('vue').ComputedRef<{
        am: {
            min: number;
            max: number;
            values: number[];
            threshold: number;
        };
        pm: {
            min: number;
            max: number;
            values: number[];
            threshold: number;
        };
        values: number[];
    } | null>;
    validMinutes: import('vue').ComputedRef<{
        min: number;
        max: number;
        values: number[];
        threshold: number;
    } | null>;
    validSeconds: import('vue').ComputedRef<{
        min: number;
        max: number;
        values: number[];
        threshold: number;
    } | null>;
    getCurrentTime: () => {
        hour: number;
        minute: number;
        second: number;
        millisecond: number;
    };
};
/**
 * Если передать массив чисел и число, которое меньше наименьшего числа в массиве, то вернется наибольшее число из массива и наоборот
 * @param numbers
 * @param target
 */
export declare function findClosestExtremeNumber(numbers: number[], target: number): number;
