import { InjectionKey, MaybeRef } from 'vue';
import { MaybeElement, MaybeInstance, Placement } from '@vexip-ui/hooks';
import { BubbleType } from '../bubble';
export type TourType = BubbleType;
export type TourSignType = 'dot' | 'bar' | 'count';
export interface TourVirtual {
    getBoundingClientRect(): {
        top: number;
        left: number;
        width: number;
        height: number;
    };
}
export type TourTarget = MaybeRef<string | MaybeInstance | TourVirtual> | (() => string | MaybeElement | TourVirtual);
export interface TourPayload {
    start(): void;
    prev(): void;
    next(autoClose?: boolean): void;
    close(): void;
}
export type TourStepRenderFn = (payload: TourPayload) => any;
export interface TourStepOptions {
    target?: TourTarget;
    placement?: Placement;
    title?: string;
    content?: string;
    order?: number;
    type?: TourType;
    renderer?: TourStepRenderFn;
}
export type TourSlotParams = TourPayload & {
    step: TourStepOptions;
    index: number;
};
export type TourCommonSLot = (params: TourSlotParams) => any;
export interface TourState {
    increaseStep(step: TourStepOptions): void;
    decreaseStep(step: TourStepOptions): void;
}
export interface TourSlots {
    /**
     * @internal
     */
    default?: () => any;
    header?: TourCommonSLot;
    title?: TourCommonSLot;
    close?: TourCommonSLot;
    body?: TourCommonSLot;
    footer?: TourCommonSLot;
    sign?: TourCommonSLot;
    actions?: TourCommonSLot;
}
export declare const TOUR_STATE: InjectionKey<TourState>;
