import { location as xlocation } from '@synnaxlabs/x';
import { CSSProperties, ReactElement, RefCallback } from 'react';
import { Component } from '../component';
import { LocationPreference } from './position';
import { Flex } from '../flex';
import { state } from '../state';
export type Variant = "connected" | "floating" | "modal";
export type ModalPosition = "slammed" | "shifted" | "base";
/** Props for the {@link Frame} component. */
export interface FrameProps extends Omit<Flex.BoxProps, "ref" | "reverse" | "size" | "empty"> {
    initialVisible?: boolean;
    visible?: boolean;
    onVisibleChange?: state.Setter<boolean>;
    location?: LocationPreference;
    variant?: Variant;
    maxHeight?: Component.Size | number;
    zIndex?: number;
    modalPosition?: ModalPosition;
}
interface State {
    targetCorner: xlocation.XY;
    dialogCorner: xlocation.XY;
    modalPosition: ModalPosition;
    style: CSSProperties;
}
export interface ContextValue {
    close: () => void;
    open: () => void;
    toggle: () => void;
    visible: boolean;
    variant: Variant;
    location: xlocation.XY;
}
interface InternalContextValue extends Pick<State, "targetCorner" | "dialogCorner" | "style" | "modalPosition"> {
    ref: RefCallback<HTMLDivElement>;
}
export declare const useInternalContext: () => InternalContextValue;
export declare const useContext: () => ContextValue;
/**
 * 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 element.
 * @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 Frame: {
    ({ children, location: propsLocation, onPointerEnter, className, variant, maxHeight, zIndex, initialVisible, visible: propsVisible, onVisibleChange: propsOnVisibleChange, modalPosition: propsModalPosition, ...rest }: FrameProps): ReactElement;
    displayName: string;
};
export {};
//# sourceMappingURL=Frame.d.ts.map