Timeline
Timeline component.
Timeline, Customization Blocks
Example:
// AppServiceProvider, "boot" method. TallStackUi::customize() ->timeline() ->block('block', 'classes');
Timeline Items, Customization Blocks
Example:
// AppServiceProvider, "boot" method. TallStackUi::customize() ->timeline('items') ->block('block', 'classes');
v1.0 shipped
Initial release.
v1.1 patch
Bugfixes and refinements.
v2.0 released
Major rewrite of the suite.
<x-timeline> <x-timeline.items title="v1.0 shipped" description="Initial release." date="Jan 2026" /> <x-timeline.items title="v1.1 patch" description="Bugfixes and refinements." date="Feb 2026" /> <x-timeline.items title="v2.0 released" description="Major rewrite of the suite." date="Mar 2026" /></x-timeline>
Timeline supports two render modes: passing items via the :items
prop
(array or Collection) or declaring children as <x-timeline.items>
in a slot. Combining both raises InvalidArgumentException
at render time.
Array mode auto-propagates container props (horizontal
, compact
,
style
, alternate
) to each item. Slot mode requires those props
to be passed explicitly per item — Laravel's @aware
directive does not propagate from
class-based parents to slot children.
v3.0-alpha
First alpha release.
v3.0-beta
Community testing phase.
v3.0 stable
Production-ready.
<!--Each entry accepts the following keys: title, description, date, icon, color.Raw HTML values (default slot, custom marker) are NOT accepted in array mode —use slot mode for rich content instead.--> @php $releases = collect([ ['title' => 'v3.0-alpha', 'description' => 'First alpha release.', 'date' => 'Feb 2026', 'icon' => 'beaker'], ['title' => 'v3.0-beta', 'description' => 'Community testing phase.', 'date' => 'Mar 2026', 'icon' => 'light-bulb'], ['title' => 'v3.0 stable', 'description' => 'Production-ready.', 'date' => 'Apr 2026', 'icon' => 'rocket-launch', 'color' => 'green'], ]);@endphp <x-timeline :items="$releases" />
Slot mode unlocks <x-slot:marker>
and rich content inside the default slot:
Building
Implementation.
Released
Tagged and published.
<x-timeline> <x-timeline.items title="Planning" description="Research and spec." date="Q1"> <p class="mt-2 text-sm text-gray-600"> See the <a href="/changelog" class="underline">full changelog</a>. </p> </x-timeline.items> <x-timeline.items title="Building" description="Implementation." date="Q2" /> <x-timeline.items title="Released" description="Tagged and published." date="Q3" /></x-timeline>
Step A
Initial setup
Step B
Configuration
Step C
Deployment
Step D
Production
<x-timeline horizontal> <x-timeline.items title="Step A" description="Initial setup" horizontal /> <x-timeline.items title="Step B" description="Configuration" horizontal /> <x-timeline.items title="Step C" description="Deployment" horizontal /> <x-timeline.items title="Step D" description="Production" horizontal /></x-timeline> <!-- or --> @php $releases = collect([ ['title' => 'v3.0-alpha', 'description' => 'First alpha release.', 'date' => 'Feb 2026', 'icon' => 'beaker'], ['title' => 'v3.0-beta', 'description' => 'Community testing phase.', 'date' => 'Mar 2026', 'icon' => 'light-bulb'], ['title' => 'v3.0 stable', 'description' => 'Production-ready.', 'date' => 'Apr 2026', 'icon' => 'rocket-launch', 'color' => 'green'], ]);@endphp <x-timeline :items="$releases" horizontal />
Slot-mode items need the horizontal
prop passed explicitly because
Laravel's @aware
does not propagate from class-based parents to slot children.
Array mode (:items
) auto-propagates.
v3.0-alpha
First alpha release.
v3.0-beta
Community testing phase.
v3.0 stable
Production-ready.
<!--Alternate uses a 3-column grid (`[1fr_auto_1fr]`) that distributes the timeline'shorizontal space. Markers land at 50% of the timeline width. Constrain via a wrappingcontainer or `class="max-w-*"` on `<x-timeline>` when you do not want it to fill the parent.--> @php $items = collect([ ['title' => 'v3.0-alpha', 'description' => 'First alpha release.', 'date' => 'Feb 2026'], ['title' => 'v3.0-beta', 'description' => 'Community testing phase.', 'date' => 'Mar 2026'], ['title' => 'v3.0 stable', 'description' => 'Production-ready.', 'date' => 'Apr 2026'], ]);@endphp <div class="max-w-md"> <x-timeline :items="$items" alternate /> </div>
Alternate uses a 3-column grid that distributes the timeline's horizontal space. Wrap it in a
max-w-*
container or apply class="max-w-*"
to the timeline
so the line lands at a comfortable midpoint instead of stretching across the full parent width.
Step A
First.
Step B
Second.
Step C
Third.
<!-- Default: 24px gap between items, line with segments --><x-timeline> <x-timeline.items title="Step A" description="First." date="Jan" /> <x-timeline.items title="Step B" description="Second." date="Feb" /> <x-timeline.items title="Step C" description="Third." date="Mar" /></x-timeline> <!-- Compact: continuous line, no gap between items --><x-timeline compact> <x-timeline.items title="Step A" description="First." date="Jan" compact /> <x-timeline.items title="Step B" description="Second." date="Feb" compact /> <x-timeline.items title="Step C" description="Third." date="Mar" compact /></x-timeline>
Planning
Research and spec.
Building
Implementation.
Testing
Feature + browser tests.
Release
Tagged and published.
<x-timeline> <x-timeline.items title="Planning" description="Research and spec." icon="pencil-square" /> <x-timeline.items title="Building" description="Implementation." icon="wrench-screwdriver" /> <x-timeline.items title="Testing" description="Feature + browser tests." icon="beaker" /> <x-timeline.items title="Release" description="Tagged and published." icon="rocket-launch" /></x-timeline>
Numbered step 1
First step.
Numbered step 2
Second step.
Numbered step 3
Third step.
<x-timeline color="rose"> <x-timeline.items title="Numbered step 1" description="First step."> <x-slot:marker> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-rose-600 text-xs font-bold text-white">1</span> </x-slot:marker> </x-timeline.items> <x-timeline.items title="Numbered step 2" description="Second step."> <x-slot:marker> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-rose-600 text-xs font-bold text-white">2</span> </x-slot:marker> </x-timeline.items> <x-timeline.items title="Numbered step 3" description="Third step."> <x-slot:marker> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-rose-600 text-xs font-bold text-white">3</span> </x-slot:marker> </x-timeline.items></x-timeline>
Primary
Brand color
Primary
Brand color
Emerald
Calm green
Emerald
Calm green
Rose
Soft red
Rose
Soft red
Indigo
Deep blue
Indigo
Deep blue
<!-- Support all TailwindCSS colors. --> <x-timeline color="primary">...</x-timeline><x-timeline color="emerald">...</x-timeline><x-timeline color="rose">...</x-timeline><x-timeline color="indigo">...</x-timeline>
Solid
Filled marker
Solid
Filled marker
Light
Tinted marker
Light
Tinted marker
Outline
Bordered marker
Outline
Bordered marker
<!-- solid: filled marker with color fill + white ring (default) --><x-timeline color="indigo" style="solid">...</x-timeline> <!-- light: tinted marker with lighter color background --><x-timeline color="indigo" style="light">...</x-timeline> <!-- outline: transparent marker with colored border --><x-timeline color="indigo" style="outline">...</x-timeline>
Default
Green override
Red override
@php $items = [ ['title' => 'Default', 'date' => 'Q1'], ['title' => 'Green override', 'date' => 'Q2', 'color' => 'green'], ['title' => 'Red override', 'date' => 'Q3', 'color' => 'red'], ];@endphp <x-timeline color="primary" :items="$items" />
An option to visually distinguish the current/active item in the timeline.
Although there isn't a property to define a state as active, you can use the properties expected by each item to create a visual effect that indicates the current state in progress. Let's say you are creating a timeline of an online purchase. You can assemble the component as follows:
Preparing package
The sender is preparing the package for shipment.
Shipping
The package is in transit to the destination.
Received
The package has been delivered to the recipient.
@php $items = collect([ ['title' => 'Preparing package', 'description' => 'The sender is preparing the package for shipment.', 'date' => '04/01/2026', 'icon' => 'check', 'color' => 'green'], ['title' => 'Shipping', 'description' => 'The package is in transit to the destination.', 'date' => '04/02/2026', 'icon' => 'clock', 'color' => 'yellow'], ['title' => 'Received', 'description' => 'The package has been delivered to the recipient.', 'date' => '04/04/2026', 'icon' => 'clock', 'color' => 'yellow'], ]);@endphp <x-timeline :items="$state" horizontal />