ActionMenu
A compact menu of real actions, with disabled and destructive states.
Live — this one is real
No action selected.
Usage
import { useState } from "react";
import { ActionMenu } from "mizu-ui";
export function Example() {
const [status, setStatus] = useState("No action selected.");
return (
<div>
<ActionMenu
items={[
{
id: "copy",
label: "Duplicate record",
onSelect: () => setStatus("Record duplicated."),
},
{
id: "archive",
label: "Archive record",
onSelect: () => setStatus("Record archived."),
},
{
id: "delete",
label: "Delete record",
danger: true,
onSelect: () => setStatus("Record deleted."),
},
]}
/>
<p role="status" className="mizu-field-hint">
{status}
</p>
</div>
);
}
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 navigation/ActionMenu.tsx
Source is included in the npm package under src/navigation/ActionMenu.tsx.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| items | MenuAction[] | — | Stable id, label, callback and optional disabled/danger flags. |
| label | string | "Actions" | Trigger and menu name. |
Accessibility
Native disclosure, named actions, arrow/Home/End navigation and Escape focus restoration. Pointer outside dismisses.
Motion
CSS transitions explain state changes. Reduced motion removes travel.