UNPKG

solid-js

Version:

A declarative JavaScript library for building user interfaces.

231 lines (230 loc) 7.2 kB
import { Accessor, Setter, Signal } from "./reactive.js"; import type { JSX } from "../jsx.js"; export type Component<P = {}> = (props: P) => JSX.Element; export type VoidProps<P = {}> = P & { children?: never; }; export type VoidComponent<P = {}> = Component<VoidProps<P>>; export type ParentProps<P = {}> = P & { children?: JSX.Element; }; export type ParentComponent<P = {}> = Component<ParentProps<P>>; export type FlowProps<P = {}, C = JSX.Element> = P & { children: C; }; export type FlowComponent<P = {}, C = JSX.Element> = Component<FlowProps<P, C>>; export type Ref<T> = T | ((val: T) => void); export type ValidComponent = keyof JSX.IntrinsicElements | Component<any> | (string & {}); export type ComponentProps<T extends ValidComponent> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : Record<string, unknown>; type SharedConfig = { context?: HydrationContext; getContextId(): string; getNextContextId(): string; }; export declare const sharedConfig: SharedConfig; export declare function createUniqueId(): string; export declare function createComponent<T>(Comp: (props: T) => JSX.Element, props: T): JSX.Element; export declare function mergeProps<T, U>(source: T, source1: U): T & U; export declare function mergeProps<T, U, V>(source: T, source1: U, source2: V): T & U & V; export declare function mergeProps<T, U, V, W>( source: T, source1: U, source2: V, source3: W ): T & U & V & W; export declare function splitProps<T extends object, K1 extends keyof T>( props: T, ...keys: [K1[]] ): [Pick<T, K1>, Omit<T, K1>]; export declare function splitProps<T extends object, K1 extends keyof T, K2 extends keyof T>( props: T, ...keys: [K1[], K2[]] ): [Pick<T, K1>, Pick<T, K2>, Omit<T, K1 | K2>]; export declare function splitProps< T extends object, K1 extends keyof T, K2 extends keyof T, K3 extends keyof T >( props: T, ...keys: [K1[], K2[], K3[]] ): [Pick<T, K1>, Pick<T, K2>, Pick<T, K3>, Omit<T, K1 | K2 | K3>]; export declare function splitProps< T extends object, K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, K4 extends keyof T >( props: T, ...keys: [K1[], K2[], K3[], K4[]] ): [Pick<T, K1>, Pick<T, K2>, Pick<T, K3>, Pick<T, K4>, Omit<T, K1 | K2 | K3 | K4>]; export declare function splitProps< T extends object, K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, K4 extends keyof T, K5 extends keyof T >( props: T, ...keys: [K1[], K2[], K3[], K4[], K5[]] ): [ Pick<T, K1>, Pick<T, K2>, Pick<T, K3>, Pick<T, K4>, Pick<T, K5>, Omit<T, K1 | K2 | K3 | K4 | K5> ]; export declare function For<T>(props: { each: T[]; fallback?: string; children: (item: T, index: () => number) => string; }): string | any[] | undefined; export declare function Index<T>(props: { each: T[]; fallback?: string; children: (item: () => T, index: number) => string; }): string | any[] | undefined; /** * Conditionally render its children or an optional fallback component * @description https://docs.solidjs.com/reference/components/show */ export declare function Show<T>(props: { when: T | undefined | null | false; keyed?: boolean; fallback?: string; children: string | ((item: NonNullable<T> | Accessor<NonNullable<T>>) => string); }): string; export declare function Switch(props: { fallback?: string; children: MatchProps<unknown> | MatchProps<unknown>[]; }): string; type MatchProps<T> = { when: T | false; keyed?: boolean; children: string | ((item: NonNullable<T> | Accessor<NonNullable<T>>) => string); }; export declare function Match<T>(props: MatchProps<T>): MatchProps<T>; export declare function resetErrorBoundaries(): void; export declare function ErrorBoundary(props: { fallback: string | ((err: any, reset: () => void) => string); children: string; }): | string | ((err: any, reset: () => void) => string) | { t: string; }; export interface Resource<T> { (): T | undefined; state: "unresolved" | "pending" | "ready" | "refreshing" | "errored"; loading: boolean; error: any; latest: T | undefined; } type SuspenseContextType = { resources: Map< string, { loading: boolean; error: any; } >; completed: () => void; }; export type ResourceActions<T> = { mutate: Setter<T>; refetch: (info?: unknown) => void; }; export type ResourceReturn<T> = [Resource<T>, ResourceActions<T>]; export type ResourceSource<S> = S | false | null | undefined | (() => S | false | null | undefined); export type ResourceFetcher<S, T> = (k: S, info: ResourceFetcherInfo<T>) => T | Promise<T>; export type ResourceFetcherInfo<T> = { value: T | undefined; refetching?: unknown; }; export type ResourceOptions<T> = undefined extends T ? { initialValue?: T; name?: string; deferStream?: boolean; ssrLoadFrom?: "initial" | "server"; storage?: () => Signal<T | undefined>; onHydrated?: <S, T>(k: S, info: ResourceFetcherInfo<T>) => void; } : { initialValue: T; name?: string; deferStream?: boolean; ssrLoadFrom?: "initial" | "server"; storage?: (v?: T) => Signal<T | undefined>; onHydrated?: <S, T>(k: S, info: ResourceFetcherInfo<T>) => void; }; export declare function createResource<T, S = true>( fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined> ): ResourceReturn<T | undefined>; export declare function createResource<T, S = true>( fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T> ): ResourceReturn<T>; export declare function createResource<T, S>( source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined> ): ResourceReturn<T | undefined>; export declare function createResource<T, S>( source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T> ): ResourceReturn<T>; export declare function lazy<T extends Component<any>>( fn: () => Promise<{ default: T; }> ): T & { preload: () => Promise<{ default: T; }>; }; export declare function enableScheduling(): void; export declare function enableHydration(): void; export declare function startTransition(fn: () => any): void; export declare function useTransition(): [() => boolean, (fn: () => any) => void]; type HydrationContext = { id: string; count: number; serialize: (id: string, v: Promise<any> | any, deferStream?: boolean) => void; nextRoot: (v: any) => string; replace: (id: string, replacement: () => any) => void; block: (p: Promise<any>) => void; resources: Record<string, any>; suspense: Record<string, SuspenseContextType>; registerFragment: (v: string) => (v?: string, err?: any) => boolean; lazy: Record<string, Promise<any>>; async?: boolean; noHydrate: boolean; }; export declare function SuspenseList(props: { children: string; revealOrder: "forwards" | "backwards" | "together"; tail?: "collapsed" | "hidden"; }): string; export declare function Suspense(props: { fallback?: string; children: string }): | string | number | boolean | Node | JSX.ArrayElement | { t: string; } | null | undefined; export {};