import React, { DependencyList } from 'react'; type AsyncState = { loading: boolean; error?: undefined; value?: undefined; } | { loading: true; error?: Error | undefined; value?: T; } | { loading: false; error: Error; value?: undefined; } | { loading: false; error?: undefined; value: T; }; export interface ProgressStep extends ProgessAsSingle { title: string; } export interface ProgessAsSteps { steps: Array; } export interface ProgessAsSingle { progress?: T; progressBuffer?: T; } export type ProgessState = ProgessAsSingle | (T extends number ? ProgessAsSteps : { steps?: undefined; }); export type ProgressAsLoading = ProgessState & { loading: true; error?: undefined; value?: undefined; }; export type ProgressAsError = ProgessState & { loading?: false | undefined; error: Error; value?: undefined; }; export type ProgressAsValue = ProgessState & { loading?: false | undefined; error?: undefined; value: T; }; /** * An AsyncState but with the addition of progress (decimal 0-1) to allow * rendering a progress bar while waiting. */ export type ProgressType = ProgressAsLoading | ProgressAsError | ProgressAsValue; /** * Casts an AsyncState or Progress into its non-succeeded sub types */ type Unsuccessful | AsyncState> = S extends ProgressType ? ProgressAsLoading | ProgressAsError : Omit, 'value'>; /** * Similar to useAsync except it "waits" for a dependent (upstream) async state * to finish first, otherwise it forwards the dependent pending state. * * When/if the dependent state has settled successfully, the callback will be * invoked for a new layer of async state with the dependent (upstream) success * result as argument. */ export declare function useAsyncChain | AsyncState, R>(parentState: S, fn: (value: NonNullable) => Promise, deps: DependencyList): Unsuccessful | AsyncState; export declare function renderFallbacks(state: ProgressType | AsyncState, success: (value: T) => JSX.Element): JSX.Element; export declare function ViewProgress({ state, }: { state: ProgressAsLoading | { loading: boolean; }; }): React.JSX.Element; export {};