Design System

Confirm + progress

The app-wide pattern for a big change to the DB or the public experience: an isolated card over a scrim that dims everything else, with three phases — confirm (state the blast radius) → progress (non-dismissable) → complete (success or partial failure with a per-item list). Use it for bulk mutations, publishing, destructive deletes — anything consequential enough to warrant a beat of deliberate confirmation and visible progress.

Driven by a spec whose run(onProgress) does the work and reports { done, total }; the modal renders the phases. Set danger for destructive / irreversible actions. ESC and scrim-click cancel only before the run starts.

import from @halwel/ui/components/feedback/ConfirmProgressModal

Variants

Success (determinate progress)
Danger + partial failure