import { TNode, Value, type Signal } from '@tempots/dom';
export type ToggleStatus = 'closed' | 'start-opening' | 'opening' | 'opened' | 'closing' | 'start-closing';
export type AnimatedToggleOptions = {
    initialStatus?: ToggleStatus;
    openedAfter: (cb: () => void) => () => void;
    closedAfter: (cb: () => void) => () => void;
};
export declare function useAnimatedToggle({ initialStatus, openedAfter, closedAfter, }: AnimatedToggleOptions): {
    status: Signal<ToggleStatus>;
    open: () => void;
    close: () => void;
    toggle: () => void;
    setOpen: (v: boolean) => void;
    display: import("@tempots/dom").Computed<boolean>;
    isClosed: import("@tempots/dom").Computed<boolean>;
    isStartOpening: import("@tempots/dom").Computed<boolean>;
    isOpening: import("@tempots/dom").Computed<boolean>;
    isOpened: import("@tempots/dom").Computed<boolean>;
    isClosing: import("@tempots/dom").Computed<boolean>;
    isStartClosing: import("@tempots/dom").Computed<boolean>;
    dispose: () => void;
    listenOnClosed: (fn: () => void) => void;
};
export type TimedToggleOptions = {
    initialStatus?: ToggleStatus;
    openDuration?: number;
    closeDuration?: number;
    duration?: number;
};
export declare function useTimedToggle({ initialStatus, duration, openDuration, closeDuration, }?: TimedToggleOptions): {
    status: Signal<ToggleStatus>;
    open: () => void;
    close: () => void;
    toggle: () => void;
    setOpen: (v: boolean) => void;
    display: import("@tempots/dom").Computed<boolean>;
    isClosed: import("@tempots/dom").Computed<boolean>;
    isStartOpening: import("@tempots/dom").Computed<boolean>;
    isOpening: import("@tempots/dom").Computed<boolean>;
    isOpened: import("@tempots/dom").Computed<boolean>;
    isClosing: import("@tempots/dom").Computed<boolean>;
    isStartClosing: import("@tempots/dom").Computed<boolean>;
    dispose: () => void;
    listenOnClosed: (fn: () => void) => void;
};
export type AnimatedElementToggleOptions = {
    initialStatus?: ToggleStatus;
    element?: HTMLElement;
};
export declare function useAnimatedElementToggle({ initialStatus, element, }?: AnimatedElementToggleOptions): {
    status: Signal<ToggleStatus>;
    open: () => void;
    close: () => void;
    toggle: () => void;
    setOpen: (v: boolean) => void;
    display: import("@tempots/dom").Computed<boolean>;
    isClosed: import("@tempots/dom").Computed<boolean>;
    isStartOpening: import("@tempots/dom").Computed<boolean>;
    isOpening: import("@tempots/dom").Computed<boolean>;
    isOpened: import("@tempots/dom").Computed<boolean>;
    isClosing: import("@tempots/dom").Computed<boolean>;
    isStartClosing: import("@tempots/dom").Computed<boolean>;
    dispose: () => void;
    listenOnClosed: (fn: () => void) => void;
    setElement: (value: HTMLElement) => void;
};
export type ToggleAnimation = 'none' | 'slide-right' | 'slide-left' | 'slide-up' | 'slide-down' | 'fade' | 'fade-slide-right' | 'fade-slide-left' | 'fade-slide-up' | 'fade-slide-down' | 'scale' | 'scale-fade' | 'flyout-top' | 'flyout-bottom' | 'flyout-left' | 'flyout-right';
export declare function AnimatedToggleClass({ animation, status, }: {
    animation?: Value<ToggleAnimation>;
    status: Signal<ToggleStatus>;
}): import("@tempots/dom").Renderable;
export declare function AnimatedToggle({ initialStatus, animation, }: {
    initialStatus?: ToggleStatus;
    animation?: Value<ToggleAnimation>;
}, render: (options: {
    status: Signal<ToggleStatus>;
    open: () => void;
    close: () => void;
    toggle: () => void;
    setOpen: (v: boolean) => void;
    display: Signal<boolean>;
    isClosed: Signal<boolean>;
    isStartOpening: Signal<boolean>;
    isOpening: Signal<boolean>;
    isOpened: Signal<boolean>;
    isClosing: Signal<boolean>;
    isStartClosing: Signal<boolean>;
    listenOnClosed: (fn: () => void) => void;
}) => TNode): import("@tempots/dom").Renderable;
