import { ComputedRef } from 'vue';
import { Ref } from 'vue';

declare interface StepDefinition {
    completed: boolean;
    substeps: Array<Omit<StepDefinition, 'substeps'>>;
}

declare interface StepperOptions {
    /**
     * If true, the stepper will prevent skipping steps
     */
    linear?: boolean;
    /**
     * The index of the active step
     */
    activeStep?: number;
    /**
     * The index of the active substep
     */
    activeSubstep?: number;
    /**
     * The stepper representation as an array of steps and substeps
     */
    steps?: Array<StepDefinition>;
    /**
     * A ref to the stepper element
     */
    ref?: Ref<HTMLUListElement | null>;
}

declare function useStepper(options?: StepperOptions): {
    steps: Readonly<Ref<readonly {
        readonly completed: boolean;
        readonly substeps: readonly {
            readonly completed: boolean;
        }[];
    }[], readonly {
        readonly completed: boolean;
        readonly substeps: readonly {
            readonly completed: boolean;
        }[];
    }[]>>;
    stepCount: ComputedRef<number>;
    activeStepElement: ComputedRef<HTMLLIElement>;
    activeStepIndex: Ref<number, number>;
    activeSubstepIndex: Ref<number, number>;
    registerStep: (nested?: boolean) => void;
    next: () => void;
    back: () => void;
    goTo: (stepIndex: number, substepIndex?: number) => void;
    isStepActive: (stepIndex: number, substepIndex?: number) => boolean;
    isStepCompleted: (stepIndex: number, substepIndex?: number) => boolean;
};
export default useStepper;

export { }
