import { type ReactElement, type ReactNode } from "react";
import { type location as loc } from "@synnaxlabs/x";
import { Align } from '../align';
/** Props for the {@link use} hook. */
export interface UseProps {
    initialVisible?: boolean;
    onVisibleChange?: (vis: boolean) => void;
}
/** Return type for the {@link use} hook. */
export interface UseReturn {
    visible: boolean;
    close: () => void;
    open: () => void;
    toggle: (vis?: boolean | unknown) => void;
}
/**
 * Implements basic dropdown behavior, and should be preferred when using
 * the {@link Dialog} component. Opens the dropdown whenever the 'open' function is
 * called, and closes it whenever the 'close' function is called OR the user clicks
 * outside of the dropdown parent wrapped,which includes the dropdown trigger (often
 * a button or input).
 *
 * @param initialVisible - Whether the dropdown should be visible on mount.
 * @returns visible - Whether the dropdown is visible.
 * @returns close - A function to close the dropdown.
 * @returns open - A function to open the dropdown.
 * @returns toggle - A function to toggle the dropdown.
 */
export declare const use: (props?: UseProps) => UseReturn;
/** Props for the {@link Dialog} component. */
export interface DialogProps extends Pick<UseReturn, "visible" | "close">, Partial<Omit<UseReturn, "visible" | "ref" | "close">>, Omit<Align.PackProps, "ref" | "reverse" | "size" | "empty"> {
    location?: loc.Y | loc.XY;
    children: [ReactNode, ReactNode];
    keepMounted?: boolean;
    variant?: "connected" | "floating";
}
/**
 * A controlled dropdown dialog component that wraps its children. For the simplest case, use
 * the {@link use} hook (more behavioral details explained there).
 *
 * @param props - The props for the dropdown component. Unlisted props are passed to the
 * parent elment.
 * @param props.visible - Whether the dropdown is visible or not. This is a controlled
 * @param props.children - Two children are expected: the dropdown trigger (often a button
 * or input) and the dropdown content.
 */
export declare const Dialog: {
    ({ visible, children, location, keepMounted, className, variant, close, open: _o, toggle: _t, ...props }: DialogProps): ReactElement;
    displayName: string;
};
