react-elegant-ui
Version:
Elegant UI components, made by BEM best practices for react
83 lines (82 loc) • 2.61 kB
TypeScript
import React, { ReactNode, FC, ComponentType } from 'react';
export type RegistryContext = Record<string, Registry>;
export declare const registryContext: React.Context<RegistryContext>;
export declare function withRegistry(...registries: Registry[]): <P>(Component: ComponentType<P>) => FC<P>;
export interface IRegistryConsumerProps {
id: string;
children: (registry: any) => ReactNode;
}
export declare const RegistryConsumer: FC<IRegistryConsumerProps>;
/**
* @deprecated consider using 'RegistryConsumer' instead
*/
export declare const ComponentRegistryConsumer: React.FC<IRegistryConsumerProps>;
export declare const useRegistries: () => RegistryContext;
export declare const useRegistry: <T extends {}>(id: string) => T;
/**
* @deprecated consider using 'useRegistry' instead
*/
export declare const useComponentRegistry: <T extends {}>(id: string) => T;
export interface IRegistryOptions {
id: string;
overridable?: boolean;
}
declare const registryOverloadMark = "RegistryOverloadHMark";
type SimpleOverload<T> = (Base: T) => T;
interface IRegistryEntityOverload<T> {
$symbol: typeof registryOverloadMark;
overload: SimpleOverload<T>;
}
type IRegistryEntity<T = any> = T | IRegistryEntityOverload<T>;
export type IRegistryEntities = Record<string, IRegistryEntity>;
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<T>(id: string, entity: T): this;
/**
* Set extender for registry entry by id.
*
* @param id entry id
* @param overload valid registry entity extender
*/
extends<T>(id: string, overload: SimpleOverload<T>): 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<T>(id: string): IRegistryEntity<T>;
/**
* Returns raw entities from registry.
*/
snapshot<RT>(): RT;
/**
* 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 {};