Skip to content

useStepper

A composable for multi-step flow state. Use with BvStepper for wizards and form flows.

Basic Usage

vue
<template>
  <div>
    <BvStepper v-model:current-step="currentStep" :steps="steps" />
    <div>
      <BvButton v-if="!isFirst" @click="prev">Previous</BvButton>
      <BvButton v-if="!isLast" @click="next">Next</BvButton>
    </div>
  </div>
</template>

<script setup>
import { BvButton, BvStepper } from "@baklavue/ui";
import { useStepper } from "@baklavue/composables";

const {
  currentStep,
  steps,
  next,
  prev,
  isFirst,
  isLast,
} = useStepper({
  steps: [
    { label: "Details" },
    { label: "Review" },
    { label: "Confirm" },
  ],
});
</script>

With Step Validation

vue
<script setup>
import { useStepper } from "@baklavue/composables";

const {
  currentStep,
  steps,
  next,
  setStepError,
} = useStepper({
  steps: [
    { label: "Details" },
    { label: "Review" },
  ],
});

const validateAndNext = () => {
  const valid = validateCurrentStep();
  if (!valid) {
    setStepError(currentStep.value, true);
  } else {
    setStepError(currentStep.value, false);
    next();
  }
};
</script>

API

Return Value

PropertyTypeDescription
currentStepRef<number>Current step index (0-based)
stepsRef<StepperStep[]>Step configurations
next() => voidGo to next step
prev() => voidGo to previous step
goTo(index: number) => voidGo to specific step
setStepError(index: number, hasError: boolean) => voidSet error state for step
isFirstComputedRef<boolean>True on first step
isLastComputedRef<boolean>True on last step
canGoNextComputedRef<boolean>True if can advance
canGoPrevComputedRef<boolean>True if can go back
stepVariant(index: number) => StepVariantGet variant for step (default, active, success, error)
totalStepsComputedRef<number>Total number of steps

Options

typescript
interface UseStepperOptions {
  steps: StepperStep[];
  initialStep?: number; // default: 0
}

interface StepperStep {
  label: string;
  description?: string;
  completed?: boolean;
  error?: boolean;
  disabled?: boolean;
}

TypeScript Support

typescript
import {
  useStepper,
  type UseStepperOptions,
  type StepperStep,
} from "@baklavue/composables";

const { currentStep, next } = useStepper({
  steps: [{ label: "Step 1" }, { label: "Step 2" }],
});