import React, { ReactNode, FC, ComponentType } from 'react'; export type RegistryContext = Record; export declare const registryContext: React.Context; export declare function withRegistry(...registries: Registry[]):

(Component: ComponentType

) => FC

; export interface IRegistryConsumerProps { id: string; children: (registry: any) => ReactNode; } export declare const RegistryConsumer: FC; /** * @deprecated consider using 'RegistryConsumer' instead */ export declare const ComponentRegistryConsumer: React.FC; export declare const useRegistries: () => RegistryContext; export declare function useRegistry(id: string): IRegistryEntities; /** * @deprecated consider using 'useRegistry' instead */ export declare const useComponentRegistry: typeof useRegistry; export interface IRegistryOptions { id: string; overridable?: boolean; } declare const registryOverloadMark = "RegistryOverloadMark"; type SimpleOverload = (Base: T) => T; interface IRegistryEntityOverload { $symbol: typeof registryOverloadMark; overload: SimpleOverload; } type IRegistryEntity = T | IRegistryEntityOverload; export type IRegistryEntities = Record; export declare class Registry { id: string; overridable: boolean; private entities; constructor({ id, overridable }: IRegistryOptions); /** * Set registry entry by id. * * @param id entry id * @param entity valid registry entity */ set(id: string, entity: T): this; /** * Set extender for registry entry by id. * * @param id entry id * @param overload valid registry entity extender */ extends(id: string, overload: SimpleOverload): this; /** * Set react entities in registry via object literal. * * @param entitiesSet set of valid registry entities */ fill(entitiesSet: IRegistryEntities): this; /** * Get entry from registry by id. * * @param id entry id */ get(id: string): IRegistryEntity; /** * Returns raw entities from registry. */ snapshot(): IRegistryEntities; /** * Override entities by external registry. * @internal * * @param otherRegistry external registry */ merge(otherRegistry?: Registry): Registry; /** * Returns extended or replaced entity * * @param base base implementation * @param overrides overridden implementation */ private mergeEntities; } export {};