ConfirmAction
Review a consequential action, execute the actual promise and recover from failure.
Live — this one is real
Usage
import { useState } from "react";
import { ConfirmAction } from "mizu-ui";
export function Example() {
const [archived, setArchived] = useState(false);
return archived ? (
<p role="status">Draft archived on this device.</p>
) : (
<ConfirmAction
label="Archive draft"
title="Archive this draft?"
confirmLabel="Archive"
action={async () => {
localStorage.setItem("mizu-demo-archived", "true");
}}
onSuccess={() => setArchived(true)}
>
The draft leaves your active list. This demonstration stores the result
locally.
</ConfirmAction>
);
}
Source & setup
Import mizu-ui/styles.css once. Fonts are optional via mizu-ui/fonts.css. Override --mizu-* tokens or use className for local styling. Uses native React and CSS; install the package peers for root imports.
Inspect interaction/ConfirmAction.tsx
Source is included in the npm package under src/interaction/ConfirmAction.tsx.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| label / title / confirmLabel | string | — | Trigger, modal name and final action. |
| action | (signal: AbortSignal) => Promise<unknown> | — | Actual transaction; honor the signal for cancellation. |
| onSuccess / children | function / ReactNode | — | Completion callback and review content. |
Accessibility
Native modal focus containment and restoration. Pending execution blocks duplicates; failure stays open for retry. Cancel/Escape unmount the action and abort its signal.
Motion
Modal entrance respects reduced motion.