A floating pill that reports background work. It stacks what is waiting and opens into a tray of every task.
FreeWeb and MobileMotion
Preview
npx shadcn add @fetaui/status-islandPlayground
Uploading, 12 photos
running
Uploading, 12 photos
indeterminate
Archiving thread
done
Report ready, Q3.csv
undo
Thread archived
error
Sync failed, Calendar offline
Stacked
Uploading, 12 photos
Expanded
4 TASKS
- Calendar syncedJust now
- Exporting reportQ3 revenue78%
- Uploading12 photos42%
- Thread archivedDesign review
Calendar synced, Just now
State
Icons animation
Motion
Installation
Terminal· bash
npx shadcn add @fetaui/status-island
Accessibility
- Progress is announced politely, and errors assertively.
- The ring is a progressbar with a value.
- Actions are real buttons.
Motion
- The pill morphs between states on one spring, and content cross fades with a 2 px blur.
- The ring only moves forward. Indeterminate turns every 900 ms and pauses offscreen.
- Done pops its badge, and Error shakes once.
- The tray opens in 260 ms with rows 30 ms apart.
- With reduced motion, width changes at once, the arc pulses in opacity, and Error only shows its ring.
Responsive behavior
- 40 high on Web and 44 on Mobile. The tray is 320 and 358 wide.
- Tap opens the tray on touch.
Performance
- The indeterminate ring is a CSS loop, paused off screen by the shared observer.
- The tray mounts only while expanded. The expire timer runs only for done and undo, and waits while the tray is open.
- A hidden live region reports the first task, so the tray is not read out on every update.
Note for AI
Give your coding assistant the Markdown reference instead of screenshots.
- Import StatusIsland from @/components/fetaui/status-island after installing it. tasks is required, and the first is the one shown.
- You own the list: update progress and state, and remove tasks from onExpire and onClearDone.
- actionLabel and onAction add Open, Undo or Retry.
- It does not position itself. The tasks in the demo are static. Composes Button.
Related
ToastComponentA short message that melts from a pill into a card. Eight kinds, with stacking and swipe.ProgressComponentShows how far a task has come, with states for done, paused, failed and unknown length, plus nine recipes.SpinnerComponentSays something is happening when the wait is short or unknown. Four kinds at five sizes.Agent TasksProComponentBackground coding tasks: a composer with repo, branch and model, filters, and rows with status, diff, checks and one action.AlertComponentA callout that asks for attention without taking over the page. Card, Inline and Banner in six tones.