ToolApprovalCard
Ask before a call starts, in one card: the sentence names the tool and the server it comes from, the arguments sit under it, and the three answers carry their keyboard shortcuts — Esc declines, Mod+Enter allows once, Shift+Mod+Enter allows from now on (shortcuts={false} leaves the keyboard alone). params takes the raw input of the call: nested objects unfold into Params limit-style lines, schema gives them the order and the titles of the tool, and a string is quoted only when it would read as a number or a flag. Pass ready lines instead when the host formats them itself. The card folds to the sentence and the buttons with defaultExpanded={false}, children adds anything under the arguments (the rule that caused the prompt, a warning), and decision marks the answer when the host owns it. Every word is in labels, including the sentence itself. Use ToolApprovalFooter where the call already has a card of its own and only the answer is missing.
$pnpm add @sinups/ai-kit @mantine/core @mantine/hooks @tabler/icons-react