/**
 * тип обозначающий какой угодно рест аргументов
 */
type Arguments = unknown[];
/**
 * хэндлер принимающий на вход неизвестное количество аргументов, неизвестного вида
 */
type Handler<TArgs extends Arguments> = (...a: TArgs) => void;
/**
 * хэндлер на открытие с неизвестным количеством аргументов, неизвестного вида
 */
type OpenHandler<TArgs extends Arguments> = Handler<TArgs>;
/**
 * хэндлер на закрытие с неизвестным количеством аргументов, неизвестного вида
 */
type CloseHandler<TArgs extends Arguments> = Handler<TArgs>;
type UseToggleResultTuple<TCloseArgs extends Arguments, TOpenArgs extends Arguments> = [
    /**
     * флаг активности состояния
     */
    boolean,
    OpenHandler<TOpenArgs>,
    CloseHandler<TCloseArgs>
];
type UseToggleOptions<TCloseArgs extends Arguments, TOpenArgs extends Arguments> = {
    /**
     * изначальное состояние активности
     */
    initialState?: boolean;
    /**
     * коллбэк на открытие
     */
    onActive?: OpenHandler<TOpenArgs>;
    /**
     * коллбэк на закрытие
     */
    onInactive?: CloseHandler<TCloseArgs>;
};
/**
 * хук хранящий стейт активности, и предоставляющий методы переключения с проксируемыми аргументами, позволяет уменьшить бойлерплейт код
 */
export declare const useToggle: <TCloseArgs extends Arguments, TOpenArgs extends Arguments>(params?: UseToggleOptions<TCloseArgs, TOpenArgs> | undefined) => UseToggleResultTuple<TCloseArgs, TOpenArgs>;
export {};
