import { ComputedGetter } from '@vue/reactivity';
import { ComputedRef } from '@vue/reactivity';
import { DebuggerEvent } from '@vue/reactivity';
import { effect } from '@vue/reactivity';
import { isReactive } from '@vue/reactivity';
import { isReadonly } from '@vue/reactivity';
import { isRef } from '@vue/reactivity';
import { markNonReactive } from '@vue/reactivity';
import { markReadonly } from '@vue/reactivity';
import { reactive } from '@vue/reactivity';
import { ReactiveEffect } from '@vue/reactivity';
import { ReactiveEffectOptions } from '@vue/reactivity';
import { readonly } from '@vue/reactivity';
import { Ref } from '@vue/reactivity';
import { ref } from '@vue/reactivity';
import { toRaw } from '@vue/reactivity';
import { toRefs } from '@vue/reactivity';
import { TrackOpTypes } from '@vue/reactivity';
import { TriggerOpTypes } from '@vue/reactivity';
import { UnwrapRef } from '@vue/reactivity';
import { WritableComputedOptions } from '@vue/reactivity';
import { WritableComputedRef } from '@vue/reactivity';

export declare interface App<HostElement = any> {
    config: AppConfig;
    use(plugin: Plugin, ...options: any[]): this;
    mixin(mixin: ComponentOptions): this;
    component(name: string): Component | undefined;
    component(name: string, component: Component): this;
    directive(name: string): Directive | undefined;
    directive(name: string, directive: Directive): this;
    mount(rootComponent: Component | {
        new (): ComponentPublicInstance<any, any, any, any, any>;
    }, rootContainer: HostElement | string, rootProps?: Data): ComponentPublicInstance;
    provide<T>(key: InjectionKey<T> | string, value: T): this;
}

export declare interface AppConfig {
    devtools: boolean;
    performance: boolean;
    readonly isNativeTag?: (tag: string) => boolean;
    isCustomElement?: (tag: string) => boolean;
    errorHandler?: (err: Error, instance: ComponentPublicInstance | null, info: string) => void;
    warnHandler?: (msg: string, instance: ComponentPublicInstance | null, trace: string) => void;
}

export declare interface AppContext {
    config: AppConfig;
    mixins: ComponentOptions[];
    components: Record<string, Component>;
    directives: Record<string, Directive>;
    provides: Record<string | symbol, any>;
    reload?: () => void;
}

export declare const BaseTransition: new () => {
    $props: BaseTransitionProps;
};

export declare interface BaseTransitionProps {
    mode?: 'in-out' | 'out-in' | 'default';
    appear?: boolean;
    persisted?: boolean;
    onBeforeEnter?: (el: any) => void;
    onEnter?: (el: any, done: () => void) => void;
    onAfterEnter?: (el: any) => void;
    onEnterCancelled?: (el: any) => void;
    onBeforeLeave?: (el: any) => void;
    onLeave?: (el: any, done: () => void) => void;
    onAfterLeave?: (el: any) => void;
    onLeaveCancelled?: (el: any) => void;
}

export declare function callWithAsyncErrorHandling(fn: Function | Function[], instance: ComponentInternalInstance | null, type: ErrorTypes, args?: unknown[]): any;

export declare function callWithErrorHandling(fn: Function, instance: ComponentInternalInstance | null, type: ErrorTypes, args?: unknown[]): any;

export declare const camelize: (s: string) => string;

export declare const capitalize: (s: string) => string;

export declare type CleanupRegistrator = (invalidate: () => void) => void;

export declare function cloneVNode<T, U>(vnode: VNode<T, U>, extraProps?: Data & VNodeProps): VNode<T, U>;

export declare const Comment: unique symbol;

declare interface CompiledSlotDescriptor {
    name: string;
    fn: Slot;
}

export declare type Component = ComponentOptions | FunctionalComponent;

declare type ComponentInjectOptions = string[] | Record<string | symbol, string | symbol | {
    from: string | symbol;
    default?: unknown;
}>;

export declare interface ComponentInternalInstance {
    type: FunctionalComponent | ComponentOptions;
    parent: ComponentInternalInstance | null;
    appContext: AppContext;
    root: ComponentInternalInstance;
    vnode: VNode;
    next: VNode | null;
    subTree: VNode;
    update: ReactiveEffect;
    render: RenderFunction | null;
    effects: ReactiveEffect[] | null;
    provides: Data;
    accessCache: Data | null;
    renderCache: (Function | VNode)[] | null;
    components: Record<string, Component>;
    directives: Record<string, Directive>;
    renderContext: Data;
    data: Data;
    props: Data;
    attrs: Data;
    slots: Slots;
    proxy: ComponentPublicInstance | null;
    withProxy: ComponentPublicInstance | null;
    propsProxy: Data | null;
    setupContext: SetupContext | null;
    refs: Data;
    emit: Emit;
    asyncDep: Promise<any> | null;
    asyncResult: unknown;
    asyncResolved: boolean;
    sink: {
        [key: string]: any;
    };
    isMounted: boolean;
    isUnmounted: boolean;
    isDeactivated: boolean;
    [LifecycleHooks.BEFORE_CREATE]: LifecycleHook;
    [LifecycleHooks.CREATED]: LifecycleHook;
    [LifecycleHooks.BEFORE_MOUNT]: LifecycleHook;
    [LifecycleHooks.MOUNTED]: LifecycleHook;
    [LifecycleHooks.BEFORE_UPDATE]: LifecycleHook;
    [LifecycleHooks.UPDATED]: LifecycleHook;
    [LifecycleHooks.BEFORE_UNMOUNT]: LifecycleHook;
    [LifecycleHooks.UNMOUNTED]: LifecycleHook;
    [LifecycleHooks.RENDER_TRACKED]: LifecycleHook;
    [LifecycleHooks.RENDER_TRIGGERED]: LifecycleHook;
    [LifecycleHooks.ACTIVATED]: LifecycleHook;
    [LifecycleHooks.DEACTIVATED]: LifecycleHook;
    [LifecycleHooks.ERROR_CAPTURED]: LifecycleHook;
    renderUpdated?: boolean;
}

export declare type ComponentObjectPropsOptions<P = Data> = {
    [K in keyof P]: Prop<P[K]> | null;
};

export declare type ComponentOptions = ComponentOptionsWithoutProps | ComponentOptionsWithProps | ComponentOptionsWithArrayProps;

declare interface ComponentOptionsBase<Props, RawBindings, D, C extends ComputedOptions, M extends MethodOptions> extends LegacyOptions<Props, RawBindings, D, C, M>, SFCInternalOptions {
    setup?: (this: null, props: Props, ctx: SetupContext) => RawBindings | RenderFunction | void;
    name?: string;
    template?: string | object;
    render?: Function;
    components?: Record<string, Component>;
    directives?: Record<string, Directive>;
    inheritAttrs?: boolean;
    call?: never;
    __isFragment?: never;
    __isPortal?: never;
    __isSuspense?: never;
}

export declare type ComponentOptionsWithArrayProps<PropNames extends string = string, RawBindings = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}, Props = Readonly<{
    [key in PropNames]?: any;
}>> = ComponentOptionsBase<Props, RawBindings, D, C, M> & {
    props: PropNames[];
} & ThisType<ComponentPublicInstance<Props, RawBindings, D, C, M>>;

export declare type ComponentOptionsWithoutProps<Props = {}, RawBindings = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}> = ComponentOptionsBase<Props, RawBindings, D, C, M> & {
    props?: undefined;
} & ThisType<ComponentPublicInstance<{}, RawBindings, D, C, M, Readonly<Props>>>;

export declare type ComponentOptionsWithProps<PropsOptions = ComponentObjectPropsOptions, RawBindings = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}, Props = Readonly<ExtractPropTypes<PropsOptions>>> = ComponentOptionsBase<Props, RawBindings, D, C, M> & {
    props: PropsOptions;
} & ThisType<ComponentPublicInstance<Props, RawBindings, D, C, M>>;

export declare type ComponentPropsOptions<P = Data> = ComponentObjectPropsOptions<P> | string[];

export declare type ComponentPublicInstance<P = {}, B = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}, PublicProps = P> = {
    $data: D;
    $props: PublicProps;
    $attrs: Data;
    $refs: Data;
    $slots: Slots;
    $root: ComponentInternalInstance | null;
    $parent: ComponentInternalInstance | null;
    $emit: Emit;
    $el: any;
    $options: ComponentOptionsBase<P, B, D, C, M>;
    $forceUpdate: ReactiveEffect;
    $nextTick: typeof nextTick;
    $watch: typeof instanceWatch;
} & P & UnwrapRef<B> & D & ExtractComputedReturns<C> & M;

declare type ComponentWatchOptionItem = WatchOptionItem | WatchOptionItem[];

declare type ComponentWatchOptions = Record<string, ComponentWatchOptionItem>;

export declare function computed<T>(getter: ComputedGetter<T>): ComputedRef<T>;

export declare function computed<T>(options: WritableComputedOptions<T>): WritableComputedRef<T>;

declare type ComputedOptions = Record<string, ComputedGetter<any> | WritableComputedOptions<any>>;
export { ComputedRef }

declare interface Constructor<P = any> {
    __isFragment?: never;
    __isPortal?: never;
    __isSuspense?: never;
    new (): {
        $props: P;
    };
}

export declare function createBlock(type: VNodeTypes, props?: {
    [key: string]: any;
} | null, children?: any, patchFlag?: number, dynamicProps?: string[]): VNode;

export declare function createCommentVNode(text?: string, asBlock?: boolean): VNode;

export declare const createHook: <T extends Function = () => any>(lifecycle: LifecycleHooks) => (hook: T, target?: ComponentInternalInstance | null) => void;

declare function createRecord(id: string, comp: ComponentOptions): boolean;

/**
 * The createRenderer function accepts two generic arguments:
 * HostNode and HostElement, corresponding to Node and Element types in the
 * host environment. For example, for runtime-dom, HostNode would be the DOM
 * `Node` interface and HostElement would be the DOM `Element` interface.
 *
 * Custom renderers can pass in the platform specific types like this:
 *
 * ``` js
 * const { render, createApp } = createRenderer<Node, Element>({
 *   patchProp,
 *   ...nodeOps
 * })
 * ```
 */
export declare function createRenderer<HostNode extends object = any, HostElement extends HostNode = any>(options: RendererOptions<HostNode, HostElement>): {
    render: RootRenderFunction<HostNode, HostElement>;
    createApp: () => App<HostElement>;
};

export declare function createSlots(slots: Record<string, Slot>, dynamicSlots: (CompiledSlotDescriptor | CompiledSlotDescriptor[])[]): Record<string, Slot>;

export declare function createTextVNode(text?: string, flag?: number): VNode;

export declare function createVNode(type: VNodeTypes, props?: (Data & VNodeProps) | null, children?: unknown, patchFlag?: number, dynamicProps?: string[] | null): VNode;

declare type Data = {
    [key: string]: unknown;
};
export { DebuggerEvent }

export declare type DebuggerHook = (e: DebuggerEvent) => void;

declare type DefaultFactory<T> = () => T | null | undefined;

export declare function defineComponent<Props, RawBindings = object>(setup: (props: Readonly<Props>, ctx: SetupContext) => RawBindings | RenderFunction): {
    new (): ComponentPublicInstance<Props, RawBindings, {}, {}, {}, VNodeProps & Props>;
};

export declare function defineComponent<Props, RawBindings, D, C extends ComputedOptions = {}, M extends MethodOptions = {}>(options: ComponentOptionsWithoutProps<Props, RawBindings, D, C, M>): {
    new (): ComponentPublicInstance<Props, RawBindings, D, C, M, VNodeProps & Props>;
};

export declare function defineComponent<PropNames extends string, RawBindings, D, C extends ComputedOptions = {}, M extends MethodOptions = {}>(options: ComponentOptionsWithArrayProps<PropNames, RawBindings, D, C, M>): {
    new (): ComponentPublicInstance<VNodeProps, RawBindings, D, C, M>;
};

export declare function defineComponent<PropsOptions extends Readonly<ComponentPropsOptions>, RawBindings, D, C extends ComputedOptions = {}, M extends MethodOptions = {}>(options: ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M>): {
    new (): ComponentPublicInstance<ExtractPropTypes<PropsOptions>, RawBindings, D, C, M, VNodeProps & ExtractPropTypes<PropsOptions, false>>;
};

export declare type Directive<T = any> = ObjectDirective<T> | FunctionDirective<T>;

export declare type DirectiveArguments = Array<[Directive] | [Directive, any] | [Directive, any, string] | [Directive, any, string, DirectiveModifiers]>;

export declare interface DirectiveBinding {
    instance: ComponentPublicInstance | null;
    value: any;
    oldValue: any;
    arg?: string;
    modifiers: DirectiveModifiers;
    dir: ObjectDirective;
}

export declare type DirectiveHook<T = any> = (el: T, binding: DirectiveBinding, vnode: VNode<any, T>, prevVNode: VNode<any, T> | null) => void;

declare type DirectiveModifiers = Record<string, boolean>;
export { effect }

declare type Emit = (event: string, ...args: unknown[]) => void;

export declare type ErrorCapturedHook = (err: Error, instance: ComponentPublicInstance | null, info: string) => boolean | void;

declare const enum ErrorCodes {
    SETUP_FUNCTION = 0,
    RENDER_FUNCTION = 1,
    WATCH_GETTER = 2,
    WATCH_CALLBACK = 3,
    WATCH_CLEANUP = 4,
    NATIVE_EVENT_HANDLER = 5,
    COMPONENT_EVENT_HANDLER = 6,
    DIRECTIVE_HOOK = 7,
    TRANSITION_HOOK = 8,
    APP_ERROR_HANDLER = 9,
    APP_WARN_HANDLER = 10,
    FUNCTION_REF = 11,
    SCHEDULER = 12
}

declare type ErrorTypes = LifecycleHooks | ErrorCodes;

declare type ExtractComputedReturns<T extends any> = {
    [key in keyof T]: T[key] extends {
        get: Function;
    } ? ReturnType<T[key]['get']> : ReturnType<T[key]>;
};

declare type ExtractPropTypes<O, MakeDefaultRequired extends boolean = true> = O extends object ? {
    [K in RequiredKeys<O, MakeDefaultRequired>]: InferPropType<O[K]>;
} & {
    [K in OptionalKeys<O, MakeDefaultRequired>]?: InferPropType<O[K]>;
} : {
    [K in string]: any;
};

export declare const Fragment: {
    new (): {
        $props: VNodeProps;
    };
    __isFragment: true;
};

export declare interface FunctionalComponent<P = {}> extends SFCInternalOptions {
    (props: P, ctx: SetupContext): VNodeChild;
    props?: ComponentPropsOptions<P>;
    inheritAttrs?: boolean;
    displayName?: string;
}

export declare type FunctionDirective<T = any> = DirectiveHook<T>;

export declare const getCurrentInstance: () => ComponentInternalInstance | null;

export declare function h(type: string, children?: RawChildren): VNode;

export declare function h(type: string, props?: RawProps | null, children?: RawChildren): VNode;

export declare function h(type: typeof Fragment, children?: VNodeChildren): VNode;

export declare function h(type: typeof Fragment, props?: RawProps | null, children?: VNodeChildren): VNode;

export declare function h(type: typeof Portal, props: RawProps & {
    target: any;
}, children: RawChildren): VNode;

export declare function h(type: typeof Suspense, children?: RawChildren): VNode;

export declare function h(type: typeof Suspense, props?: (RawProps & SuspenseProps) | null, children?: RawChildren | RawSlots): VNode;

export declare function h(type: FunctionalComponent, children?: RawChildren): VNode;

export declare function h<P>(type: FunctionalComponent<P>, props?: (RawProps & P) | ({} extends P ? null : never), children?: RawChildren | RawSlots): VNode;

export declare function h(type: ComponentOptions, children?: RawChildren): VNode;

export declare function h(type: ComponentOptionsWithoutProps | ComponentOptionsWithArrayProps, props?: RawProps | null, children?: RawChildren | RawSlots): VNode;

export declare function h<O>(type: ComponentOptionsWithProps<O>, props?: (RawProps & ExtractPropTypes<O>) | ({} extends ExtractPropTypes<O> ? null : never), children?: RawChildren | RawSlots): VNode;

export declare function h(type: Constructor, children?: RawChildren): VNode;

export declare function h<P>(type: Constructor<P>, props?: (RawProps & P) | ({} extends P ? null : never), children?: RawChildren | RawSlots): VNode;

export declare function handleError(err: Error, instance: ComponentInternalInstance | null, type: ErrorTypes): void;

export declare interface HMRRuntime {
    createRecord: typeof createRecord;
    rerender: typeof rerender;
    reload: typeof reload;
}

declare type InferPropType<T> = T extends null ? any : T extends {
    type: null | true;
} ? any : T extends ObjectConstructor | {
    type: ObjectConstructor;
} ? {
    [key: string]: any;
} : T extends Prop<infer V> ? V : T;

export declare function inject<T>(key: InjectionKey<T> | string): T | undefined;

export declare function inject<T>(key: InjectionKey<T> | string, defaultValue: T): T;

export declare function injectHook(type: LifecycleHooks, hook: Function & {
    __weh?: Function;
}, target?: ComponentInternalInstance | null, prepend?: boolean): void;

export declare interface InjectionKey<T> extends Symbol {
}

export declare function instanceWatch(this: ComponentInternalInstance, source: string | Function, cb: Function, options?: WatchOptions): StopHandle;

declare type InternalSlots = {
    [name: string]: Slot;
};
export { isReactive }
export { isReadonly }
export { isRef }

export declare const KeepAlive: new () => {
    $props: KeepAliveProps;
};

export declare interface KeepAliveProps {
    include?: MatchPattern;
    exclude?: MatchPattern;
    max?: number | string;
}

declare type LegacyComponent = ComponentOptions;

declare interface LegacyOptions<Props, RawBindings, D, C extends ComputedOptions, M extends MethodOptions> {
    el?: any;
    data?: D | ((this: ComponentPublicInstance<Props>) => D);
    computed?: C;
    methods?: M;
    watch?: ComponentWatchOptions;
    provide?: Data | Function;
    inject?: ComponentInjectOptions;
    mixins?: LegacyComponent[];
    extends?: LegacyComponent;
    beforeCreate?(): void;
    created?(): void;
    beforeMount?(): void;
    mounted?(): void;
    beforeUpdate?(): void;
    updated?(): void;
    activated?(): void;
    deactivated?(): void;
    beforeUnmount?(): void;
    unmounted?(): void;
    renderTracked?: DebuggerHook;
    renderTriggered?: DebuggerHook;
    errorCaptured?: ErrorCapturedHook;
}

declare type LifecycleHook = Function[] | null;

declare const enum LifecycleHooks {
    BEFORE_CREATE = "bc",
    CREATED = "c",
    BEFORE_MOUNT = "bm",
    MOUNTED = "m",
    BEFORE_UPDATE = "bu",
    UPDATED = "u",
    BEFORE_UNMOUNT = "bum",
    UNMOUNTED = "um",
    DEACTIVATED = "da",
    ACTIVATED = "a",
    RENDER_TRIGGERED = "rtg",
    RENDER_TRACKED = "rtc",
    ERROR_CAPTURED = "ec"
}

declare type MapSources<T> = {
    [K in keyof T]: T[K] extends WatchSource<infer V> ? V : never;
};
export { markNonReactive }
export { markReadonly }

declare type MatchPattern = string | RegExp | string[] | RegExp[];

export declare function mergeProps(...args: (Data & VNodeProps)[]): Data;

declare interface MethodOptions {
    [key: string]: Function;
}

declare const enum MoveType {
    ENTER = 0,
    LEAVE = 1,
    REORDER = 2
}

export declare function nextTick(fn?: () => void): Promise<void>;

declare type NormalizedChildren<HostNode = any, HostElement = any> = string | VNodeChildren<HostNode, HostElement> | RawSlots | null;

export declare interface ObjectDirective<T = any> {
    beforeMount?: DirectiveHook<T>;
    mounted?: DirectiveHook<T>;
    beforeUpdate?: DirectiveHook<T>;
    updated?: DirectiveHook<T>;
    beforeUnmount?: DirectiveHook<T>;
    unmounted?: DirectiveHook<T>;
}

export declare function onActivated(hook: Function, target?: ComponentInternalInstance | null): void;

export declare const onBeforeMount: (hook: () => any, target?: ComponentInternalInstance | null) => void;

export declare const onBeforeUnmount: (hook: () => any, target?: ComponentInternalInstance | null) => void;

export declare const onBeforeUpdate: (hook: () => any, target?: ComponentInternalInstance | null) => void;

export declare function onDeactivated(hook: Function, target?: ComponentInternalInstance | null): void;

export declare const onErrorCaptured: (hook: ErrorCapturedHook, target?: ComponentInternalInstance | null) => void;

export declare const onMounted: (hook: () => any, target?: ComponentInternalInstance | null) => void;

export declare const onRenderTracked: (hook: DebuggerHook, target?: ComponentInternalInstance | null) => void;

export declare const onRenderTriggered: (hook: DebuggerHook, target?: ComponentInternalInstance | null) => void;

export declare const onUnmounted: (hook: () => any, target?: ComponentInternalInstance | null) => void;

export declare const onUpdated: (hook: () => any, target?: ComponentInternalInstance | null) => void;

export declare function openBlock(disableTracking?: boolean): void;

declare type OptionalKeys<T, MakeDefaultRequired> = Exclude<keyof T, RequiredKeys<T, MakeDefaultRequired>>;

export declare const PatchFlags: {
    TEXT: number;
    CLASS: number;
    STYLE: number;
    PROPS: number;
    NEED_PATCH: number;
    FULL_PROPS: number;
    STABLE_FRAGMENT: number;
    KEYED_FRAGMENT: number;
    UNKEYED_FRAGMENT: number;
    DYNAMIC_SLOTS: number;
    BAIL: number;
};

export declare type Plugin = PluginInstallFunction | {
    install: PluginInstallFunction;
};

declare type PluginInstallFunction = (app: App, ...options: any[]) => any;

export declare function popScopeId(): void;

export declare const Portal: {
    new (): {
        $props: VNodeProps & {
            target: string | object;
        };
    };
    __isPortal: true;
};

export declare type Prop<T> = PropOptions<T> | PropType<T>;

declare type PropConstructor<T = any> = {
    new (...args: any[]): T & object;
} | {
    (): T;
};

declare interface PropOptions<T = any> {
    type?: PropType<T> | true | null;
    required?: boolean;
    default?: T | DefaultFactory<T> | null | undefined;
    validator?(value: unknown): boolean;
}

export declare type PropType<T> = PropConstructor<T> | PropConstructor<T>[];

export declare function provide<T>(key: InjectionKey<T> | string, value: T): void;

export declare function pushScopeId(id: string): void;

declare type RawChildren = string | number | boolean | VNode | VNodeChildren | (() => any);

declare type RawProps = VNodeProps & {
    _isVNode?: never;
    [Symbol.iterator]?: never;
};

declare type RawSlots = {
    [name: string]: unknown;
    $stable?: boolean;
    _compiled?: boolean;
};
export { reactive }
export { ReactiveEffect }
export { ReactiveEffectOptions }
export { readonly }

export declare function recordEffect(effect: ReactiveEffect): void;
export { Ref }
export { ref }

export declare function registerRuntimeCompiler(_compile: any): void;

declare function reload(id: string, newComp: ComponentOptions): void;

declare interface RendererInternals<HostNode = any, HostElement = any> {
    patch: (n1: VNode<HostNode, HostElement> | null, // null means this is a mount
    n2: VNode<HostNode, HostElement>, container: HostElement, anchor?: HostNode | null, parentComponent?: ComponentInternalInstance | null, parentSuspense?: SuspenseBoundary<HostNode, HostElement> | null, isSVG?: boolean, optimized?: boolean) => void;
    unmount: (vnode: VNode<HostNode, HostElement>, parentComponent: ComponentInternalInstance | null, parentSuspense: SuspenseBoundary<HostNode, HostElement> | null, doRemove?: boolean) => void;
    move: (vnode: VNode<HostNode, HostElement>, container: HostElement, anchor: HostNode | null, type: MoveType, parentSuspense?: SuspenseBoundary<HostNode, HostElement> | null) => void;
    next: (vnode: VNode<HostNode, HostElement>) => HostNode | null;
    options: RendererOptions<HostNode, HostElement>;
}

export declare interface RendererOptions<HostNode = any, HostElement = any> {
    patchProp(el: HostElement, key: string, value: any, oldValue: any, isSVG?: boolean, prevChildren?: VNode<HostNode, HostElement>[], parentComponent?: ComponentInternalInstance | null, parentSuspense?: SuspenseBoundary<HostNode, HostElement> | null, unmountChildren?: (children: VNode<HostNode, HostElement>[], parentComponent: ComponentInternalInstance | null, parentSuspense: SuspenseBoundary<HostNode, HostElement> | null) => void): void;
    insert(el: HostNode, parent: HostElement, anchor?: HostNode | null): void;
    remove(el: HostNode): void;
    createElement(type: string, isSVG?: boolean): HostElement;
    createText(text: string): HostNode;
    createComment(text: string): HostNode;
    setText(node: HostNode, text: string): void;
    setElementText(node: HostElement, text: string): void;
    parentNode(node: HostNode): HostElement | null;
    nextSibling(node: HostNode): HostNode | null;
    querySelector(selector: string): HostElement | null;
    setScopeId(el: HostNode, id: string): void;
}

export declare type RenderFunction = {
    (): VNodeChild;
    isRuntimeCompiled?: boolean;
};

export declare function renderList(source: unknown, renderItem: (value: unknown, key: string | number, index?: number) => VNodeChild): VNodeChild[];

export declare function renderSlot(slots: Record<string, Slot>, name: string, props?: Data, fallback?: VNodeChildren): VNode;

declare type RequiredKeys<T, MakeDefaultRequired> = {
    [K in keyof T]: T[K] extends {
        required: true;
    } | (MakeDefaultRequired extends true ? {
        default: any;
    } : never) ? K : never;
}[keyof T];

declare function rerender(id: string, newRender?: RenderFunction): void;

export declare function resolveComponent(name: string): Component | undefined;

export declare function resolveDirective(name: string): Directive | undefined;

export declare function resolveDynamicComponent(component: unknown, instance: ComponentInternalInstance): Component | undefined;

export declare function resolveTransitionHooks(vnode: VNode, { appear, persisted, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled }: BaseTransitionProps, state: TransitionState, instance: ComponentInternalInstance): TransitionHooks;

export declare type RootRenderFunction<HostNode, HostElement> = (vnode: VNode<HostNode, HostElement> | null, dom: HostElement) => void;

export declare function setBlockTracking(value: number): void;

export declare function setTransitionHooks(vnode: VNode, hooks: TransitionHooks): void;

export declare interface SetupContext {
    attrs: Data;
    slots: Slots;
    emit: Emit;
}

declare interface SFCInternalOptions {
    __scopeId?: string;
    __cssModules?: Data;
    __hmrId?: string;
    __hmrUpdated?: boolean;
}

export declare const ShapeFlags: {
    ELEMENT: ShapeFlags_2;
    FUNCTIONAL_COMPONENT: ShapeFlags_2;
    STATEFUL_COMPONENT: ShapeFlags_2;
    TEXT_CHILDREN: ShapeFlags_2;
    ARRAY_CHILDREN: ShapeFlags_2;
    SLOTS_CHILDREN: ShapeFlags_2;
    SUSPENSE: ShapeFlags_2;
    COMPONENT_SHOULD_KEEP_ALIVE: ShapeFlags_2;
    COMPONENT_KEPT_ALIVE: ShapeFlags_2;
    COMPONENT: ShapeFlags_2;
};

declare const enum ShapeFlags_2 {
    ELEMENT = 1,
    FUNCTIONAL_COMPONENT = 2,
    STATEFUL_COMPONENT = 4,
    TEXT_CHILDREN = 8,
    ARRAY_CHILDREN = 16,
    SLOTS_CHILDREN = 32,
    SUSPENSE = 64,
    COMPONENT_SHOULD_KEEP_ALIVE = 128,
    COMPONENT_KEPT_ALIVE = 256,
    COMPONENT = 6
}

export declare type Slot = (...args: any[]) => VNode[];

export declare type Slots = Readonly<InternalSlots>;

export declare type StopHandle = () => void;

export declare const Suspense: {
    new (): {
        $props: SuspenseProps;
    };
    __isSuspense: true;
};

export declare interface SuspenseBoundary<HostNode = any, HostElement = any, HostVNode = VNode<HostNode, HostElement>> {
    vnode: HostVNode;
    parent: SuspenseBoundary<HostNode, HostElement> | null;
    parentComponent: ComponentInternalInstance | null;
    isSVG: boolean;
    optimized: boolean;
    container: HostElement;
    hiddenContainer: HostElement;
    anchor: HostNode | null;
    subTree: HostVNode;
    fallbackTree: HostVNode;
    deps: number;
    isResolved: boolean;
    isUnmounted: boolean;
    effects: Function[];
    resolve(): void;
    recede(): void;
    move(container: HostElement, anchor: HostNode | null, type: MoveType): void;
    next(): HostNode | null;
    registerDep(instance: ComponentInternalInstance, setupRenderEffect: (instance: ComponentInternalInstance, parentSuspense: SuspenseBoundary<HostNode, HostElement> | null, initialVNode: VNode<HostNode, HostElement>, container: HostElement, anchor: HostNode | null, isSVG: boolean) => void): void;
    unmount(parentSuspense: SuspenseBoundary<HostNode, HostElement> | null, doRemove?: boolean): void;
}

declare const SuspenseImpl: {
    __isSuspense: boolean;
    process(n1: VNode<any, any> | null, n2: VNode<any, any>, container: object, anchor: object | null, parentComponent: ComponentInternalInstance | null, parentSuspense: SuspenseBoundary<any, any, VNode<any, any>> | null, isSVG: boolean, optimized: boolean, rendererInternals: RendererInternals<any, any>): void;
};

export declare interface SuspenseProps {
    onResolve?: () => void;
    onRecede?: () => void;
}

export declare const Text: unique symbol;

export declare function toHandlers(obj: Record<string, any>): Record<string, any>;
export { toRaw }
export { toRefs }

export declare function toString(val: unknown): string;
export { TrackOpTypes }

export declare interface TransitionHooks {
    persisted: boolean;
    beforeEnter(el: object): void;
    enter(el: object): void;
    leave(el: object, remove: () => void): void;
    afterLeave?(): void;
    delayLeave?(el: object, earlyRemove: () => void, delayedLeave: () => void): void;
    delayedLeave?(): void;
}

export declare interface TransitionState {
    isMounted: boolean;
    isLeaving: boolean;
    isUnmounting: boolean;
    leavingVNodes: Map<any, Record<string, VNode>>;
}
export { TriggerOpTypes }
export { UnwrapRef }

export declare function useCSSModule(name?: string): Record<string, string>;

export declare function useTransitionState(): TransitionState;

export declare const version: string;

export declare interface VNode<HostNode = any, HostElement = any> {
    _isVNode: true;
    type: VNodeTypes;
    props: VNodeProps | null;
    key: string | number | null;
    ref: string | Ref | ((ref: object | null) => void) | null;
    scopeId: string | null;
    children: NormalizedChildren<HostNode, HostElement>;
    component: ComponentInternalInstance | null;
    suspense: SuspenseBoundary<HostNode, HostElement> | null;
    dirs: DirectiveBinding[] | null;
    transition: TransitionHooks | null;
    el: HostNode | null;
    anchor: HostNode | null;
    target: HostElement | null;
    shapeFlag: number;
    patchFlag: number;
    dynamicProps: string[] | null;
    dynamicChildren: VNode[] | null;
    appContext: AppContext | null;
}

declare type VNodeChild<HostNode = any, HostElement = any> = VNodeChildAtom<HostNode, HostElement> | VNodeChildren<HostNode, HostElement>;

declare type VNodeChildAtom<HostNode, HostElement> = VNode<HostNode, HostElement> | string | number | boolean | null | void;

declare interface VNodeChildren<HostNode = any, HostElement = any> extends Array<VNodeChildren<HostNode, HostElement> | VNodeChildAtom<HostNode, HostElement>> {
}

export declare interface VNodeProps {
    [key: string]: any;
    key?: string | number;
    ref?: string | Ref | ((ref: object | null) => void);
    onVnodeBeforeMount?: (vnode: VNode) => void;
    onVnodeMounted?: (vnode: VNode) => void;
    onVnodeBeforeUpdate?: (vnode: VNode, oldVNode: VNode) => void;
    onVnodeUpdated?: (vnode: VNode, oldVNode: VNode) => void;
    onVnodeBeforeUnmount?: (vnode: VNode) => void;
    onVnodeUnmounted?: (vnode: VNode) => void;
}

export declare type VNodeTypes = string | Component | typeof Fragment | typeof Portal | typeof Text | typeof Comment | typeof SuspenseImpl;

export declare function warn(msg: string, ...args: any[]): void;

export declare function watch(effect: WatchEffect, options?: WatchOptions): StopHandle;

export declare function watch<T>(source: WatchSource<T>, cb: WatchCallback<T>, options?: WatchOptions): StopHandle;

export declare function watch<T extends Readonly<WatchSource<unknown>[]>>(sources: T, cb: WatchCallback<MapSources<T>>, options?: WatchOptions): StopHandle;

export declare type WatchCallback<T = any> = (value: T, oldValue: T, onCleanup: CleanupRegistrator) => any;

export declare type WatchEffect = (onCleanup: CleanupRegistrator) => void;

declare type WatchOptionItem = string | WatchCallback | {
    handler: WatchCallback;
} & WatchOptions;

export declare interface WatchOptions {
    lazy?: boolean;
    flush?: 'pre' | 'post' | 'sync';
    deep?: boolean;
    onTrack?: ReactiveEffectOptions['onTrack'];
    onTrigger?: ReactiveEffectOptions['onTrigger'];
}

export declare type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T);

export declare function withDirectives<T extends VNode>(vnode: T, directives: DirectiveArguments): T;

export declare function withScopeId(id: string): <T extends Function>(fn: T) => T;
export { WritableComputedOptions }

export { }
