import { Box, TAnchor } from '../../../utils';
import { PropType, Ref, CSSProperties } from 'vue';
export interface ILocationStrategyData {
    contentEl: Ref<HTMLElement | undefined>;
    target: Ref<HTMLElement | [x: number, y: number] | undefined>;
    activatorEl: Ref<HTMLElement | undefined>;
    isActive: Ref<boolean>;
}
type TLocationStrategyFn = (data: ILocationStrategyData, props: ILocationStrategyProps, contentStyles: Ref<Record<string, string>>) => undefined | {
    updateLocation: (event: Event | HTMLElement[]) => void;
};
declare const locationStrategies: {
    static: typeof staticLocationStrategy;
    connected: typeof connectedLocationStrategy;
};
export interface ILocationStrategyProps {
    locationStrategy: keyof typeof locationStrategies | TLocationStrategyFn;
    location: TAnchor;
    origin: TAnchor | 'auto' | 'overlap';
    offset?: number | string | number[];
    maxHeight: number | string;
    maxWidth: number | string;
    minHeight: number | string;
    minWidth: number | string;
}
export interface ILocationProps {
    location: TAnchor;
}
export interface IUseLocationStrategies {
    contentStyles: Ref<Record<string, string>>;
    updateLocation: Ref<((event: Event | HTMLElement[]) => void) | undefined>;
}
export declare const makeLocationStrategyProps: <Defaults extends {
    locationStrategy?: unknown;
    location?: unknown;
    origin?: unknown;
    offset?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../../../utils').AppendDefault<{
    /**
     * Стратегия позиционирования компонента
     */
    locationStrategy: {
        type: PropType<keyof typeof locationStrategies | TLocationStrategyFn>;
        default: string;
        validator: (value: any) => boolean;
    };
    /**
     * Выравнивание компонент по краям top, bottom, left, right. Можно комбинировать, например, top left
     */
    location: {
        type: PropType<TAnchor>;
        default: string;
    };
    /**
     * Откуда будет рассчитываться появление компонента
     */
    origin: {
        type: PropType<TAnchor | "auto" | "overlap">;
        default: string;
    };
    /**
     * Отступы компонента от активатора
     */
    offset: {
        type: PropType<number | string | number[]>;
        default: null;
    };
}, Defaults>;
export declare const makeLocationProps: <Defaults extends {
    location?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../../../utils').AppendDefault<{
    /**
     * Выравнивание компонент по краям top, bottom, left, right. Можно комбинировать, например, top left
     */
    location: {
        type: PropType<TAnchor>;
        default: string;
    };
}, Defaults>;
export declare function useLocationStrategies(props: ILocationStrategyProps, data: ILocationStrategyData): IUseLocationStrategies;
export declare function useLocation(props: ILocationProps, opposite?: boolean, offset?: (side: string) => number, observedElement?: string): {
    locationStyles: import('vue').ComputedRef<CSSProperties>;
};
declare function staticLocationStrategy(): {
    updateLocation: (elements: HTMLElement[] | Event) => void;
};
declare function connectedLocationStrategy(data: ILocationStrategyData, props: ILocationStrategyProps, contentStyles: Ref<Record<string, string>>): {
    updateLocation: () => {
        available: {
            x: number;
            y: number;
        };
        contentBox: Box;
    } | undefined;
};
export {};
