import type TReact from 'react'; import type TReactDOM from 'react-dom'; import { GenericEntity, Context, EntityConstructor, EntityProps } from '../imperative/Entities'; import { overrideKeyReactify } from '../imperative/wrappers'; type RefInstance> = React.MutableRefObject; interface ReactParent { entityRef: RefInstance>; requestReposition(): void; positionChild(entity: RefInstance>): number; } export declare let ReactParent: React.Context<[ ReactParent ] | undefined>; export type Reactify = { module: ReactifyModule; entity: ReactifyEntity; useDefault: (value: T, dependencies?: unknown[]) => T; }; export type CustomReactify, TResult> = (ctor: EntityConstructor, params: { reactify: { module: ReactifyModule; entity> = EntityConstructor>(...args: Parameters>): ReturnType>; context: >(context?: TContext) => TReact.Context; }; ReactParent: typeof ReactParent; React: typeof TReact; ReactDOM: typeof TReactDOM; }) => TResult; export type Overrided>, TReactResult> = { [overrideKeyReactify]: CustomReactify, TReactResult>; }; type InternalReactify> = (ctor: EntityConstructor, displayName?: string) => TReact.ForwardRefExoticComponent>> & React.RefAttributes>; type InternalReactifyEntity>> = (ctor: TCtor, displayName?: string) => TCtor extends Overrided ? TResult : ReturnType>>; export type ReactifyEntity = >>(...args: Parameters>) => ReturnType>; export type ReactifiedEntity>> = ReturnType>; export interface ReactifyModule { (module: TModule): ReactifiedModule; } export type GetReactContext> = (context?: TContext | undefined) => React.Context; export type ReactifiedModule = { [Property in keyof TModule]: TModule[Property] extends EntityConstructor> ? ReturnType> : TModule[Property] extends Context ? ReturnType> : TModule[Property]; }; export type BaseModule = Record & { __implReactifyOverride?: (reactify: Reactify) => object; }; export type Prettify = { [K in keyof T]: T[K]; } & {}; export type OverrideProps = Pick> & U; export default function createReactify(React: typeof TReact, ReactDOM: typeof TReactDOM): Reactify; export {};