UNPKG

@atomic-design/di

Version:

Lightweight, type-safe dependency inversion utilities for Atomic Design architectures in React

18 lines (17 loc) 1.32 kB
import { DepsWithoutDeps } from './types'; import { ReactNode, ComponentType } from 'react'; export declare function createVariantsContext<Ctx extends DepsWithoutDeps<Record<string, unknown>>, V extends Partial<Record<keyof Ctx, Record<string, () => WrappedPromise<Ctx[keyof Ctx], Ctx>>>>>(context: { [SpaceName in keyof Ctx]: () => WrappedPromise<Ctx[SpaceName], Ctx>; }, variantsBySpace: V): [() => Ctx, ({ children, variants, space, variant }: AtomicProviderProps<{ [SpaceName in keyof Ctx]?: keyof V[SpaceName] | undefined; }>) => import("react/jsx-runtime").JSX.Element, <Space extends keyof Ctx, Name extends { [Name_1 in keyof Ctx[Space]]: Ctx[Space][Name_1] extends ComponentType<any> ? Name_1 : never; }[keyof Ctx[Space]]>(space: Space, name: Name) => ComponentType<Ctx[Space][Name] extends ComponentType<infer P> ? P : never>]; interface AtomicProviderProps<Variants extends Record<string, unknown>> { children: ReactNode; variants?: Partial<Variants>; space?: keyof Variants; variant?: Variants[keyof Variants]; } type Wrapped<OutputContext, InputContext> = { output: OutputContext; setDepsHook: (c: () => InputContext) => void; }; type WrappedPromise<OutputContext, InputContext> = Wrapped<OutputContext, InputContext> | Promise<Wrapped<OutputContext, InputContext>>; export {};