import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { PropType } from 'vue';
import { PublicProps } from 'vue';
import { Ref } from 'vue';

declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;

declare type __VLS_Prettify<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_WithDefaults<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithTemplateSlots<T, S> = T & {
    new (): {
        $slots: S;
    };
};

declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<StepperProps>, {
step: number;
substep: number;
linear: boolean;
orientation: string;
theme: string;
useResponsiveNav: boolean;
}>>, {
back: () => void;
next: () => void;
goTo: (stepIndex: number, substepIndex?: number) => void;
isStepCompleted: (stepIndex: number, substepIndex?: number) => boolean;
isStepActive: (stepIndex: number, substepIndex?: number) => boolean;
}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:step": (step: number) => void;
"update:substep": (substep: number) => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<StepperProps>, {
step: number;
substep: number;
linear: boolean;
orientation: string;
theme: string;
useResponsiveNav: boolean;
}>>> & Readonly<{
"onUpdate:step"?: ((step: number) => any) | undefined;
"onUpdate:substep"?: ((substep: number) => any) | undefined;
}>, {
step: number;
theme: StepperTheme;
orientation: "horizontal" | "vertical";
substep: number;
linear: boolean;
useResponsiveNav: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
    default?(_: {}): any;
}>;
export default _default;

export declare type StepperOrientation = `${StepperOrientationEnum}`;

export declare enum StepperOrientationEnum {
    VERTICAL = "vertical",
    HORIZONTAL = "horizontal"
}

export declare interface StepperProps {
    /**
     * The current step index
     */
    step?: number;
    /**
     * The current substep index
     */
    substep?: number;
    /**
     * A linear stepper prevents navigation to steps that are ahead of the completed ones
     */
    linear?: boolean;
    /**
     * Determines whether the stepper is horizontal or vertical
     */
    orientation?: StepperOrientation;
    /**
     * Force responsive view on horizontal orientation
     */
    useResponsiveNav?: boolean;
    /**
     * Determines the theme of the stepper
     */
    theme?: StepperTheme;
}

/**
 * Helper type for the template ref (the "ref" attribute) on a Stepper instance
 * @see: https://vuejs.org/guide/typescript/composition-api.html#typing-component-template-refs
 */
export declare type StepperRef = Ref<InstanceType<typeof _default> | null>;

export declare type StepperTheme = 'dark' | 'light';

export { }
