import type { ReactElement } from 'react'; import type { Node as BaseNode, Root as RootNode, PlainObject, EmptyObject, MergeObjects } from './types.ts'; export type { BaseNode as Node, RootNode as Root }; export interface BaseNodeCreationOptions { props: T; instance: any; type: BaseNode['type']; children: () => (BaseNode | string)[]; } export type NodeCreationOptions = EmptyObject extends Extensions ? BaseNodeCreationOptions : BaseNodeCreationOptions & Extensions; export interface EnvironmentNodeCreator { (options: NodeCreationOptions): BaseNode; } export interface EnvironmentOptions { act(action: () => T): T extends Promise ? Promise : void; mount(element: ReactElement): Context; unmount(context: Context): void; update(instance: any, create: EnvironmentNodeCreator, context: Context): BaseNode | null; } export type AfterRenderOption = Async extends true ? { afterRender(wrapper: RootNode, options: RenderOptions): PromiseLike; } : { afterRender?(wrapper: RootNode, options: RenderOptions): void; }; export type ContextOption = AdditionalContext extends EmptyObject ? { context?: never; } : { context(options: RenderOptions, existingContext: ExistingContext): AdditionalContext; }; export type ActionsOption = AdditionalActions extends EmptyObject ? { actions?: never; } : { actions(root: Omit, 'actions'>, options: RenderOptions, existingActions: ExistingActions): AdditionalActions; }; export interface RenderOption { render?(element: ReactElement, context: Context, options: RenderOptions): ReactElement; } export type RenderOptionsOverrideOption = AdditionalRenderOptions extends EmptyObject ? { options?: never; } : { options?(current: MergeObjects): Partial; }; export type CustomRenderOptions = RenderOption> & ContextOption & ActionsOption, ExistingActions, AdditionalActions, Extensions> & AfterRenderOption, MergeObjects, Extensions, Async>; export type CustomRenderExtendOptions = CustomRenderOptions, ExistingContext, AdditionalContext, ExistingActions, AdditionalActions, Extensions, Async> & RenderOptionsOverrideOption; export interface CustomRender { (element: ReactElement, options?: RenderOptions): CustomRenderResult; extend(options: CustomRenderExtendOptions): CustomRender, MergeObjects, MergeObjects, Extensions, AdditionalAsync extends true ? AdditionalAsync : Async>; hook(useHook: () => T, options?: RenderOptions): Async extends true ? Promise> : HookRunner; } export interface HookRunner { readonly current: HookReturn; readonly value: HookReturn; readonly context: Context; readonly actions: Actions; mount(): void; unmount(): void; act(action: (value: HookReturn) => T): T; } export type CustomRenderResult = Async extends true ? Promise> : RootNode; export interface Environment { readonly rendered: Set>; readonly render: CustomRender; createRender(options: CustomRenderOptions): CustomRender; destroyAll(): void; } export declare function createEnvironment(env: EnvironmentOptions): Environment; export declare function isNode(maybeNode: unknown): maybeNode is BaseNode; //# sourceMappingURL=environment.d.ts.map