import { ReactNode } from 'react'; type MAXIMUM_DEPTH = 20; type GetResults = T extends Step ? Step : never; type Length = T extends { length: infer L; } ? L : never; type BuildTuple = T extends { length: L; } ? T : BuildTuple; export interface Step { label: string; Component: (args: T) => ReactNode; } export type Steps< T extends any[], Result extends any[] = [], Depth extends ReadonlyArray = [], > = Depth['length'] extends MAXIMUM_DEPTH ? Step[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetResults] : T extends [infer Head, ...infer Tail] ? Steps<[...Tail], [...Result, GetResults], [...Depth, 1]> : unknown[] extends T ? T : never; export type Add = Length< [...BuildTuple, ...BuildTuple] >; export type Subtract< A extends number, B extends number, > = BuildTuple extends [...infer U, ...BuildTuple] ? Length : -1; export type ExctractProps = T extends Step ? Props : never; declare global { export declare type UseStepper = < T extends any[], StepIndex extends number, NextIndex = Add, PrevIndex = Subtract, >( index: StepIndex, steps: readonly [...Steps], ) => (NextIndex extends number ? { next: (props: ExctractProps) => void; } : Record) & (PrevIndex extends -1 ? Record : PrevIndex extends number ? { prev: (props: ExctractProps) => void; } : Record); export declare type Stepper = ({ steps, }: { steps: readonly [...Steps]; }) => JSX.Element; export {}; } //# sourceMappingURL=Stepper.component.d.ts.map