atomico
Version:
Atomico is a small library for the creation of interfaces based on web-components, only using functions and hooks.
44 lines (31 loc) • 1.05 kB
TypeScript
import { Atomico } from "./dom.js";
import { Ref } from "./hooks.js";
export type DispatchConnectContext = (detail: DetailConnectContext) => any;
export type DetailConnectContext = {
id: Context<any>;
connect(value: Ref): void;
};
export type Context<Value> = Atomico<
{
value: Value;
},
{
value: Value;
},
HTMLElement
>;
export type GetValueFromContext<CustomContext extends Context<any>> =
InstanceType<CustomContext>["value"];
export type CreateContext = <Value>(value: Value) => Context<Value>;
export type UseContext = <AtomicoContext extends Context<any>>(
context: AtomicoContext
) => GetValueFromContext<AtomicoContext>;
export type UseProvider = <CustomContext extends Context<any>>(
id: CustomContext,
value: GetValueFromContext<CustomContext>
) => void;
export type ReturnUseConsumer<Value> = Value;
export type UseConsumer = (id: Context<any>) => any;
export const useContext: UseContext;
export const useProvider: UseProvider;
export const createContext: CreateContext;