import type { PropsWithChildren } from 'react'; import type { AbstractManager } from './manager'; export interface AbstractManagerClass> { new (...args: any[]): M; } export type BaseListener = (key: string, data?: DataType) => void; export type GlobalListener = (key: typeof GlobalKey, data?: DataType) => void; export type AbstractEventListener = BaseListener | GlobalListener; export type EventsDef = { [eventName: string]: AbstractEventListener; }; export type AbstractManagerListener, EventName extends keyof E> = (key: Parameters[0], data: Parameters[1] | undefined, manager: M) => void; export type AbstractManagerEventMap> = { [eventName in keyof E]: AbstractManagerListener; }; export type ManagerConstructorHookProps = Record; export type ManagerConstructorHook, Props extends ManagerConstructorHookProps> = (rest: Props) => Manager; export type AbstractManagerProvider = Record> = (props: PropsWithChildren) => JSX.Element; export type UseManagerHook> = () => Manager; export type UseOptionalManagerHook> = () => Manager | undefined; export type InferManagerEvents = Manager extends AbstractManager ? E : never; export type ManagerEventTypeName = keyof E; export type ManagerEventTypeKey> = Parameters[0]; export type ManagerEventTypeData> = Parameters[1]; export type GetKeyFunc, E extends EventsDef, EventName extends ManagerEventTypeName, ArgsType> = (manager: Manager | undefined, ...args: ArgsType[]) => ManagerEventTypeKey; export type GetKeyType, E extends EventsDef, EventName extends ManagerEventTypeName, ArgsType> = GetKeyFunc | ManagerEventTypeKey; export type ListenerData, E extends EventsDef, EventName extends ManagerEventTypeName> = { data: ManagerEventTypeData | undefined; key: ManagerEventTypeKey; manager?: Manager; eventName: EventName; }; export type GetValueFunc, E extends EventsDef, EventName extends ManagerEventTypeName, ValueType> = (data: ListenerData) => ValueType; export type EventHandler> = (data: ManagerEventTypeData) => void; export type EffectListener, E extends EventsDef, EventName extends ManagerEventTypeName> = (data: ListenerData) => void; export declare const GlobalKey: unique symbol;