Components

Stepper

Guides users through a multi-step flow — horizontal or vertical, with completed-step checks.

php artisan blatui:add stepper
{{-- Numbered steps with Previous / Next controls. Completed steps show a check. --}}
<x-ui.stepper :value="1" class="w-full max-w-xl">
    <x-ui.stepper-nav>
        <x-ui.stepper-item :step="1">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
            </x-ui.stepper-trigger>
            <x-ui.stepper-separator />
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="2">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
            </x-ui.stepper-trigger>
            <x-ui.stepper-separator />
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="3">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
            </x-ui.stepper-trigger>
        </x-ui.stepper-item>
    </x-ui.stepper-nav>

    <div class="text-muted-foreground flex h-32 items-center justify-center rounded-md border text-sm">
        <span x-text="`Step ${step} of 3`"></span>
    </div>

    <div class="flex justify-between">
        <x-ui.button variant="outline" x-bind:disabled="step === 1" x-on:click="step = Math.max(1, step - 1)">Previous</x-ui.button>
        <x-ui.button x-bind:disabled="step === 3" x-on:click="step = Math.min(3, step + 1)">Next</x-ui.button>
    </div>
</x-ui.stepper>

Vertical

{{-- Vertical orientation: indicators stacked with a growing rail between them. --}}
<x-ui.stepper :value="2" orientation="vertical" class="w-full max-w-md">
    <x-ui.stepper-nav>
        <x-ui.stepper-item :step="1">
            <x-ui.stepper-trigger class="items-start">
                <span class="flex flex-col items-center self-stretch">
                    <x-ui.stepper-indicator />
                    <x-ui.stepper-separator />
                </span>
                <span class="flex flex-col gap-0.5 pt-1.5 pb-6">
                    <x-ui.stepper-title>Account</x-ui.stepper-title>
                    <x-ui.stepper-description>Create your account</x-ui.stepper-description>
                </span>
            </x-ui.stepper-trigger>
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="2">
            <x-ui.stepper-trigger class="items-start">
                <span class="flex flex-col items-center self-stretch">
                    <x-ui.stepper-indicator />
                    <x-ui.stepper-separator />
                </span>
                <span class="flex flex-col gap-0.5 pt-1.5 pb-6">
                    <x-ui.stepper-title>Profile</x-ui.stepper-title>
                    <x-ui.stepper-description>Set up your profile</x-ui.stepper-description>
                </span>
            </x-ui.stepper-trigger>
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="3">
            <x-ui.stepper-trigger class="items-start">
                <span class="flex flex-col items-center self-stretch">
                    <x-ui.stepper-indicator />
                </span>
                <span class="flex flex-col gap-0.5 pt-1.5">
                    <x-ui.stepper-title>Complete</x-ui.stepper-title>
                    <x-ui.stepper-description>Finish the setup</x-ui.stepper-description>
                </span>
            </x-ui.stepper-trigger>
        </x-ui.stepper-item>
    </x-ui.stepper-nav>
</x-ui.stepper>

With Description

{{-- Title plus a secondary description per step. --}}
<x-ui.stepper :value="2" class="w-full max-w-3xl">
    <x-ui.stepper-nav>
        <x-ui.stepper-item :step="1">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
                <span class="flex flex-col gap-0.5">
                    <x-ui.stepper-title>Account</x-ui.stepper-title>
                    <x-ui.stepper-description>Create an account</x-ui.stepper-description>
                </span>
            </x-ui.stepper-trigger>
            <x-ui.stepper-separator />
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="2">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
                <span class="flex flex-col gap-0.5">
                    <x-ui.stepper-title>Profile</x-ui.stepper-title>
                    <x-ui.stepper-description>Set up your profile</x-ui.stepper-description>
                </span>
            </x-ui.stepper-trigger>
            <x-ui.stepper-separator />
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="3">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
                <span class="flex flex-col gap-0.5">
                    <x-ui.stepper-title>Complete</x-ui.stepper-title>
                    <x-ui.stepper-description>Finish the setup</x-ui.stepper-description>
                </span>
            </x-ui.stepper-trigger>
        </x-ui.stepper-item>
    </x-ui.stepper-nav>
</x-ui.stepper>

With Labels

{{-- Each indicator paired with a short label. --}}
<x-ui.stepper :value="2" class="w-full max-w-2xl">
    <x-ui.stepper-nav>
        <x-ui.stepper-item :step="1">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
                <x-ui.stepper-title>Details</x-ui.stepper-title>
            </x-ui.stepper-trigger>
            <x-ui.stepper-separator />
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="2">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
                <x-ui.stepper-title>Confirm</x-ui.stepper-title>
            </x-ui.stepper-trigger>
            <x-ui.stepper-separator />
        </x-ui.stepper-item>
        <x-ui.stepper-item :step="3">
            <x-ui.stepper-trigger>
                <x-ui.stepper-indicator />
                <x-ui.stepper-title>Done</x-ui.stepper-title>
            </x-ui.stepper-trigger>
        </x-ui.stepper-item>
    </x-ui.stepper-nav>
</x-ui.stepper>

API Reference

Props, slots and exposed methods for <x-ui.stepper>.

Props

Prop Type Default Description
value int 1 The active step (1-based). Exposed on the Alpine scope as `step`, so slot markup can read and update it (e.g. Previous / Next buttons) to drive navigation.
orientation string 'horizontal' Whether steps lay out in a row or a column. Read by child items to switch their layout and the separator direction.
horizontal vertical

Slots

Slot Description
default The stepper body. Compose with <x-ui.stepper-nav> wrapping <x-ui.stepper-item> entries (each holding <x-ui.stepper-trigger>, <x-ui.stepper-indicator>, optional <x-ui.stepper-title>/<x-ui.stepper-description>/<x-ui.stepper-separator>) plus any step content and controls. Everything shares the stepper scope, so controls can read/write `step` directly.