import { staticPositionStrategy } from './static';
import { connectedPositionStrategy } from './connected';
import { pointerPositionStrategy } from './pointer';
import type { ExtractPropTypes, PropType, Ref } from 'vue';
import type { Anchor } from '@veno-ui/utils';
export declare const POSITION_STRATEGIES: {
    static: typeof staticPositionStrategy;
    connected: typeof connectedPositionStrategy;
    pointer: typeof pointerPositionStrategy;
};
export interface PositionStrategyData {
    contentEl: Ref<HTMLElement | undefined>;
    activatorEl: Ref<HTMLElement | undefined>;
    isActive: Ref<boolean>;
    activatedPosition?: Ref<{
        left: number;
        top: number;
    } | undefined>;
}
export type PositionStrategy = keyof typeof POSITION_STRATEGIES | ((data: PositionStrategyData, props: PositionStrategyProps, contentStyles: Ref<Record<string, string>>, anchorClasses: Ref<string[]>) => undefined | {
    updatePosition: (e: Event) => void;
});
export type Origin = Anchor | 'auto' | 'overlap';
export type PositionStrategyProps = ExtractPropTypes<ReturnType<typeof makePositionStrategyProps>> & {
    maxHeight?: number | string;
    maxWidth?: number | string;
    minHeight?: number | string;
    minWidth?: number | string;
};
export declare const makePositionStrategyProps: <Defaults extends {
    positionStrategy?: unknown;
    anchor?: unknown;
    origin?: unknown;
    offset?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    positionStrategy: unknown extends Defaults["positionStrategy"] ? {
        type: PropType<PositionStrategy>;
        default: string;
        validator: (val: any) => boolean;
    } : Omit<{
        type: PropType<PositionStrategy>;
        default: string;
        validator: (val: any) => boolean;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["positionStrategy"] ? PositionStrategy : NonNullable<PositionStrategy> | Defaults["positionStrategy"]>;
        default: unknown extends Defaults["positionStrategy"] ? PositionStrategy : NonNullable<PositionStrategy> | Defaults["positionStrategy"];
    };
    anchor: unknown extends Defaults["anchor"] ? {
        type: PropType<Anchor>;
        default: string;
    } : Omit<{
        type: PropType<Anchor>;
        default: string;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["anchor"] ? Anchor : NonNullable<Anchor> | Defaults["anchor"]>;
        default: unknown extends Defaults["anchor"] ? Anchor : NonNullable<Anchor> | Defaults["anchor"];
    };
    origin: unknown extends Defaults["origin"] ? {
        type: PropType<Origin>;
        default: string;
    } : Omit<{
        type: PropType<Origin>;
        default: string;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["origin"] ? Origin : NonNullable<Origin> | Defaults["origin"]>;
        default: unknown extends Defaults["origin"] ? Origin : NonNullable<Origin> | Defaults["origin"];
    };
    offset: unknown extends Defaults["offset"] ? (StringConstructor | NumberConstructor)[] : {
        type: PropType<unknown extends Defaults["offset"] ? string | number : NonNullable<string | number> | Defaults["offset"]>;
        default: unknown extends Defaults["offset"] ? string | number : NonNullable<string | number> | Defaults["offset"];
    };
};
export declare function usePositionStrategy(props: PositionStrategyProps, data: PositionStrategyData): {
    contentStyles: Ref<{}>;
    anchorClasses: Ref<never[]>;
    updatePosition: Ref<((e: Event) => void) | undefined>;
};
