import * as React from "react"; /** * Provider component type. */ type ProviderComponent = React.ComponentType; /** * Provider component props without the `children` prop. */ type ProviderProps = Omit, "children">; /** * A provider entry: either a component, [Component], or [Component, Props]. * Validates props against the component and omits the `children` prop. */ type ProviderEntry = T extends ProviderComponent ? T : T extends [infer C extends ProviderComponent] ? [C] : T extends [infer C extends ProviderComponent, infer P] ? P extends ProviderProps ? T : [C, ProviderProps & { [K in keyof P]: K extends keyof ProviderProps ? ProviderProps[K] : never }] : never; /** * A provider entries tuple with validated props. */ type ProviderEntries = { [K in keyof T]: ProviderEntry }; /** * Props for the composed providers component. */ type ComposedProvidersProps = { children?: React.ReactNode; }; /** * The composed providers component. */ type ComposedProviders = (props: ComposedProvidersProps) => React.ReactNode; /** * Create a `Providers` component with the given providers. * * ### Example * * ```ts * import type * as React from "react"; * import type { ComposedProviders } from "react-compose-context-providers"; * * import { composeProviders } from "react-compose-context-providers"; * * import { ThemeProvider } from "./contexts/theme"; * import { LocaleProvider } from "./contexts/locale"; * * const Providers: ComposedProviders = composeProviders([ * [ * ThemeProvider, * { * defaultTheme: "dark", * }, * ], * LocaleProvider, * ]); * * type ComponentProps = { * children: React.ReactNode; * }; * * const Component = (props: ComponentProps): React.JSX.Element => { * return {props.children}; * }; * ``` */ declare const composeProviders: ])[]>(providers: [...ProviderEntries]) => ComposedProviders; export { type ComposedProviders, type ComposedProvidersProps, type ProviderComponent, type ProviderEntries, type ProviderEntry, type ProviderProps, composeProviders }; //# sourceMappingURL=index.d.ts.map