UNPKG

@expressive/react

Version:
47 lines (44 loc) 2.04 kB
export { Pragma } from './adapter'; import Model__default, { Context } from '@expressive/mvc'; export { Context, Model, Observable, Model as default, get, has, ref, set, use } from '@expressive/mvc'; import * as React from 'react'; import { ReactNode } from 'react'; export { Fragment, createElement } from 'react'; declare module '@expressive/mvc' { namespace Context { function use(create?: true): Context; function use(create: boolean): Context | null | undefined; } } declare namespace Consumer { type Props<T extends Model__default> = { /** Type of controller to fetch from context. */ for: Model__default.Type<T>; /** * Render function, will receive instance of desired controller. * * Called every render of parent component. * Similar to `Model.get()`, updates to properties accessed in * this function will cause a refresh when they change. */ children: (value: T) => ReactNode | void; }; } declare function Consumer<T extends Model__default>(props: Consumer.Props<T>): string | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<ReactNode> | React.ReactPortal | null; declare namespace Provider { interface Props<T extends Model__default> { /** Model or group of Models to provide to descendant Consumers. */ for: Context.Accept<T>; forEach?: Context.Expect<T>; children?: ReactNode; /** A fallback react tree to show when suspended. */ fallback?: ReactNode; /** * A name for this Suspense boundary for instrumentation purposes. * The name will help identify this boundary in React DevTools. */ name?: string | undefined; } } declare function Provider<T extends Model__default>(props: Provider.Props<T>): React.FunctionComponentElement<React.ProviderProps<Context>> | React.FunctionComponentElement<React.SuspenseProps>; export { Consumer, Provider };