Skip to content

shutteringv1.0.0

Feedback

How the system talks back — a persistent callout, an ephemeral toast, a zero-data rest state, and a progress stepper.

@shuttering/uiimport { Callout, toast, EmptyState, Stepper, Progress } from '@shuttering/ui'

Callout

An inline, persistent message. Four tones, each pairing color with an icon and a title so meaning never rests on color alone.

Note:

Heads up

The neutral ground is shared; only the accent palette swaps.
Success:

Deployed

All checks passed and the build is live.
Warning:

Approaching limit

You’ve used 80% of your quota.
Danger:

Action needed

Two nodes are unreachable.
PropTypeDefaultDescription
tone'info' | 'success' | 'warning' | 'danger''info'The semantic tone.
titleReactNodeThe bold lead line.
iconReactNodeAn optional leading glyph.

Toast

A transient, imperative notification. Call toast() from anywhere; render one Toaster at the app root. Fire a few: they stack as a deck, expand on hover (which also pauses the auto-dismiss), and each swipes away — flick one sideways to dismiss it.

PropTypeDefaultDescription
toast(message, opts?)(ReactNode, { tone? }) => voidtone is 'success' | 'error' | undefined (neutral).
<Toaster />ToasterPropsMount once at the app root; it renders the deck, expands it on hover, and handles swipe-to-dismiss.

EmptyState

The zero-data rest state — an icon, a title, a line, and an optional action.

Nothing here yet

An icon, a title, a line, and an optional action — the zero-data rest state.

PropTypeDefaultDescription
iconReactNodeA muted leading glyph.
title (required)ReactNodeThe headline.
descriptionReactNodeA supporting line.
actionReactNodeAn optional call to action.

Stepper

A labeled progress indicator for a linear flow.

  1. Start
  2. Details
  3. Review
  4. Done
PropTypeDefaultDescription
steps (required){ id: string; label: ReactNode }[]The ordered steps.
current (required)numberThe zero-based index of the active step.

Progress

A determinate bar (value 0–100) on an accessible progressbar. The fill carries data-slot="progress-indicator", so a consumer can retint it in place — e.g. a destructive bar once it crosses a threshold.

PropTypeDefaultDescription
valuenumber0Fill percentage, clamped to 0–100.
…propsReact.ComponentProps<'div'>Native div attributes — aria-label, className, and the rest.

Designed & built by stxkxs — React 19, Tailwind v4, and its own @shuttering/* packages.

Agent surfaces are always-on. Proprietary.

© stxkxs