Feedback

11 components

A failure is a sentence on the screen, never a toast. A toast that disappears takes the only evidence with it. And a tooltip is a glance — past about 160 characters the reader has to stop and read, and a thing that must be read belongs on the page.

Alerts
Empty states · three different empties

Nothing yet

Says what would put something here, rather than that there is nothing.

Nothing matches

Names the filter in force, and offers to clear it.

Admins only

A refusal is a sentence: who you are, what the screen decides, and a way out.

Loading · shaped like what is coming

Never a centred spinner on an empty page: it says something is happening and nothing about what. Two tokens, so a skeleton is never a grey block on a warm page.

Progress · determinate, and it says the number
62% · 1,174 of 1,894 rows

A bar with no figure beside it is a guess dressed as a measurement. This is for a job with a known end — an upload, a quota. `Metric`'s `progress` is a 5px track against a TARGET, which is a different question.

InlineEmpty · the compact empty

No counties match

Clear a filter to see rows here.

For a slot inside something — a chart with no data, a table body, a panel. The full `EmptyState` is a Card, and a Card inside a Card is the thing the layout rules forbid.

Transient feedback · and what it is NOT for

A failure never goes in a toast. A toast disappears, and it takes the only record of what went wrong with it. Failures are an Alert on the screen, beside the thing that failed.

`Toaster` (sonner) is in the kit for the other case: confirming something that SUCCEEDED and needs no action — "Copied", "Link sent". If the reader has to do anything about it, it is not a toast.

On hover
Tooltip · for an interactive element. Keyboard-reachable, or it does not exist
InfoHint · the (?) for a column head or a stat label
Recent share
Reporting · the reader telling the system

Turn it on and Shift+Click any specimen above. The form asks two things; the element, the screen, the numbers around it, the console and the route you took to get here are already captured. Reports go to an in-memory store and are gone on reload.

Off. Nothing is intercepted.

Queue

Loading reports…