import type { Component } from 'vue';
import { type MountedComponent } from './vueWrapper';
type MaybeFactory<TTag, TValue> = TValue | ((tag: TTag) => TValue);
type RiotLifecycleEvent = 'mount' | 'update' | 'before-unmount';
export interface RiotLifecycleTag {
    refs?: Record<string, unknown>;
    $?: (selector: string) => Element | null;
    on: (event: RiotLifecycleEvent, handler: () => void) => void;
}
export interface UseVueInRiotOptions<TTag extends RiotLifecycleTag> {
    component: Component;
    ref?: string;
    element?: HTMLElement | null | ((tag: TTag) => HTMLElement | null);
    getProps?: MaybeFactory<TTag, Record<string, unknown>>;
    events?: MaybeFactory<TTag, Record<string, (...args: unknown[]) => void>>;
    slots?: MaybeFactory<TTag, Record<string, () => unknown>>;
    autoMount?: boolean;
    autoUpdate?: boolean;
    autoUnmount?: boolean;
}
export interface RiotVueBinding {
    mount: () => void;
    update: () => void;
    unmount: () => void;
    isMounted: () => boolean;
    getMounted: () => MountedComponent | null;
}
export declare function useVueInRiot<TTag extends RiotLifecycleTag>(tag: TTag, options: UseVueInRiotOptions<TTag>): RiotVueBinding;
export {};
