UNPKG

@arnosaine/is

Version:

Feature Flags, Roles and Permissions-based rendering, A/B Testing, Experimental Features, and more in React.

43 lines (42 loc) 3.12 kB
import type * as RemixNode from "@remix-run/node"; import type * as RemixReact from "@remix-run/react"; import { ReactNode } from "react"; import type * as ReactRouter from "react-router"; import { Boolean, Flatten, HasUnknownKeys, Merge, Never, NonBoolean, Unflatten, Writeable } from "./utils.js"; export * from "./utils.js"; type HandleUnknownKeys<Conditions> = HasUnknownKeys<Conditions> extends true ? any : Conditions; export interface ElementProps { children?: ReactNode; fallback?: ReactNode; } export type Condition<Value> = Flatten<Boolean<Value> | NonBoolean<Writeable<Value>>> | NonBoolean<Flatten<Value>>[] | Unflatten<NonBoolean<Writeable<Value>>>; export type Conditions<Values> = Partial<{ [P in keyof Values]: Readonly<Condition<Values[P]>>; }> & Never<ElementProps>; export type Values<Value = unknown> = { [key: string]: Value; } & Never<ElementProps>; export type Loader<Values> = (args: ExtendedDataFunctionArgs) => Values | Promise<Values>; export type DataFunctionArgs = ReactRouter.ActionFunctionArgs | ReactRouter.LoaderFunctionArgs | ReactRouter.ClientActionFunctionArgs | ReactRouter.ClientLoaderFunctionArgs | RemixNode.ActionFunctionArgs | RemixNode.LoaderFunctionArgs | RemixReact.ClientActionFunctionArgs | RemixReact.ClientLoaderFunctionArgs; export type ExtendedDataFunctionArgs = DataFunctionArgs & { serverAction: any; serverLoader: any; context: any; }; export interface Options { method?: "every" | "some"; } export interface LoaderOptions extends Options { routeId?: string; prop?: string; } export declare function __create<V extends Values, C extends Conditions<V>>(useValues: () => V, defaultConditions?: C, options?: Options): { Is: ({ children, fallback, ...conditions }: Partial<Merge<ElementProps, HandleUnknownKeys<C>>>) => string | number | boolean | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null; useIs: (conditions?: C) => boolean; is: import("lodash").CurriedFunction2<V, C | undefined, boolean>; }; export declare function create<V extends Values>(useValues: () => V, defaultConditions?: Conditions<V>, options?: Options): readonly [({ children, fallback, ...conditions }: Partial<Merge<ElementProps, HandleUnknownKeys<Conditions<V>>>>) => string | number | boolean | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null, (conditions?: Conditions<V> | undefined) => boolean]; export declare function createFromLoader<V extends Values>(loadValues: Loader<V>, defaultConditions?: Conditions<V>, options?: LoaderOptions): readonly [({ children, fallback, ...conditions }: Partial<Merge<ElementProps, HandleUnknownKeys<Conditions<V>>>>) => string | number | boolean | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null, (conditions?: Conditions<V> | undefined) => boolean, (args: DataFunctionArgs) => Promise<import("lodash").CurriedFunction1<Conditions<V> | undefined, boolean> & { [x: string]: V; __values: V; }>];