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 SlideDirection = 'up' | 'down' | 'left' | 'right';
export type TransformOrigin = 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
export type ComposableAnimation = {
    fade?: boolean;
    slide?: SlideDirection;
    scale?: boolean | number;
    transformOrigin?: TransformOrigin;
    duration?: number;
    easing?: string;
};
export type AnimationConfig = {
    enter?: ComposableAnimation;
    exit?: ComposableAnimation;
} | ComposableAnimation;
export declare function AnimatedToggleClass({ animation, status, }: {
    animation?: Value<AnimationConfig>;
    status: Signal<ToggleStatus>;
}): import("@tempots/dom").Renderable<import("@tempots/dom").DOMContext>;
export declare function AnimatedToggle({ initialStatus, animation, }: {
    initialStatus?: ToggleStatus;
    animation?: Value<AnimationConfig>;
}, 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;
