import { LocatorSelectors, Locator } from '@vitest/browser/context';
import { ComponentMountingOptions } from '@vue/test-utils';
export { config } from '@vue/test-utils';
import { DefineComponent } from 'vue';
import { PrettyDOMOptions } from '@vitest/browser/utils';

type ComponentProps<T> = T extends new (...angs: any) => {
    $props: infer P;
} ? NonNullable<P> : T extends (props: infer P, ...args: any) => any ? P : {};
interface RenderResult<Props> extends LocatorSelectors {
    container: HTMLElement;
    baseElement: HTMLElement;
    debug(el?: HTMLElement | HTMLElement[] | Locator | Locator[], maxLength?: number, options?: PrettyDOMOptions): void;
    unmount(): void;
    emitted<T = unknown>(): Record<string, T[]>;
    emitted<T = unknown[]>(eventName: string): undefined | T[];
    rerender(props: Partial<Props>): void;
}
interface ComponentRenderOptions<C, P extends ComponentProps<C>> extends ComponentMountingOptions<C, P> {
    container?: HTMLElement;
    baseElement?: HTMLElement;
}
declare function render<T, C = T extends ((...args: any) => any) | (new (...args: any) => any) ? T : T extends {
    props?: infer Props;
} ? DefineComponent<Props extends Readonly<(infer PropNames)[]> | (infer PropNames)[] ? {
    [key in PropNames extends string ? PropNames : string]?: any;
} : Props> : DefineComponent, P extends ComponentProps<C> = ComponentProps<C>>(Component: T, { container: customContainer, baseElement: customBaseElement, ...mountOptions }?: ComponentRenderOptions<C, P>): RenderResult<P>;
declare function cleanup(): void;

export { type ComponentRenderOptions, type RenderResult, cleanup, render };
