Timeline
Lists events in the order they happened, like the steps of a delivery or the history of a ticket. Each event has a title, details and a time.
Order placed
Order #48920, 3 items, $214.90.
Payment approved
Visa ending in 4242.
Installation
Set up Camaleo once (Installation), then import what you need. It renders on the server.
import { Timeline, TimelineItem, TimelineTitle, TimelineDescription, TimelineTime } from "@camaleo/react";Anatomy
An ordered list. Each item is a row with the indicator, the text and the time; the line between indicators is drawn by CSS. Every part has a data-slot you can target from CSS.
Examples
Every example is a real file you can copy. They all wear the skin, mode and brand from the bar above.
Order placed
Order #48920, 3 items, $214.90.
Payment approved
Visa ending in 4242.
Delivered
Signed for by the front desk.
Deploy started
Release 2.8.0 by Ana Ribeiro.
Tests passed
1,284 tests in 6 min 12 s.
Slow migration
The orders table took 4 min, the limit is 2.
Health check failed
3 of 8 pods returned 503.
Rolled back to 2.7.4
Traffic is back on the previous release.
Tones
Use tone to make problems stand out in a long history. The color is visual only, so the title still has to say what happened.
Shipped
Handed to FedEx, tracking 7712 9034 5521.
Out for delivery
The courier left the Newark hub.
Delivered
Signed for by the front desk.
Icons
An icon per kind of event helps people scan a long list. Pass it in icon, with aria-hidden: the title already says the same thing.
Order placed
Order #48920, 3 items, $214.90.
Delivered
Signed for by the front desk.
Machine-readable time
Pass dateTime next to time when software needs the exact date, like for sorting or adding it to a calendar. People still read the short form.
Order placed
Shipped
Out for delivery
The courier left the Newark hub.
Current stepDelivery
Current step
For a process still running, add aria-current="step" to the current item and leave future steps neutral. The badge shows it to everyone, not only by color.
Marina Costa commented
The client asked to split the payment in two.
Links and avatars
Children go under the description, so an event can link to what it changed. Name the list with aria-label when the page has more than one.
Showing 5 of 5 events
Deploy started
Tests passed
Slow migration
Health check failed
Rolled back to 2.7.4
Filtering events
Pick Alerts. The list keeps its order, and a status line tells screen readers how many events are left, since the change happens away from the focus.
In context
A timeline usually sits in a card or a side panel, under the record it belongs to. These are whole pieces of UI you can copy, in the skin you picked.
Order #48920
DeliveredOrder placed
Order #48920, 3 items, $214.90.
Payment approved
Visa ending in 4242.
Shipped
Handed to FedEx, tracking 7712 9034 5521.
Out for delivery
The courier left the Newark hub.
Delivered
Signed for by the front desk.
Ticket #3312: double charge
ResolvedTicket opened
The customer was charged twice for the October plan.
Assigned to Sofia Vance
Billing team, level 2.
Refund issued
$49.00 back to the card. The customer was notified.
What's new
Version 1.4.0
Sub-accounts and automatic tax reports.
LatestVersion 1.3.2
Fixes token refresh after a password change.
Version 1.3.0
Export reports to CSV and PDF.
Guidelines
Order placed
Delivered
People need to know when something happened, and dateTime gives software the same answer.
Order placed
Delivered
Vague times can't be compared, so no one can tell how long a step took.
Order placed
Shipped
Delivered
Oldest first tells a process step by step; newest first suits activity feeds. Pick one per list.
Shipped
Delivered
Order placed
The list is an <ol>, so screen readers announce each position, and a wrong order tells the wrong story.
Props
aria-hidden), so the title must say what happened.TimelineTitle.TimelineDescription.<time>.time, such as 2026-10-27T09:14.Timeline takes the attributes of <ol>, and TimelineItem those of <li>, like aria-current. TimelineTitle and TimelineDescription take those of <p>, and TimelineTime those of <time>, like dateTime.
Styling hooks
Restyle it without forking: target the attributes, or set the tokens on a parent, a skin or the timeline itself.
Attributes
Tokens it reads
Color
Shape & size
This component only
Accessibility
- Timeline is an <ol> with role="list", so screen readers announce the number of events and the position of each one, also in Safari.
- The indicator has aria-hidden: its tone and icon are never read. Say the outcome in the title, like "Health check failed".
- The time prop renders a <time>; add dateTime when the exact date matters.
- Mark the current step of a running process with aria-current="step" on its TimelineItem.