Ballmac UI home

Escalation Card

New

The moment an AI agent hands a conversation to a person: who is waiting and for how long, why, how the customer seems to feel in words, what the agent understood, the last messages, an editable suggested reply, and Take over and Snooze.

v1.0.0Updated Oct 24, 2026Ships with a test
What changed

Maria Lopez

Chat · Help centre

Seems Frustrated Waiting 4 min

Why a person is needed: The refund is over the amount an agent may approve alone, and the customer asked to speak to a person.

What the agent understood

  • Order A-9914, paid by card on 12 October
  • Item arrived damaged; photos were sent
  • Refund of $340 requested, policy allows it
  • Maria Lopez · 2:09 pmThis is the second time it has arrived broken. I want my money back, not another replacement.
  • Agent · 2:10 pmI am sorry about that. I can see the photos. Let me check what I can do for you.
  • Maria Lopez · 2:11 pmPlease just get someone who can actually approve it.

Installation

$ pnpm dlx shadcn@latest add @ballmac/escalation-card

Usage

import { EscalationCard } from "@/components/ballmac/escalation-card"

The full example is in the Code tab above.

Examples

No suggested reply

Jonas Weber

Email

Seems Calm Waiting 22 min

Why a person is needed: The question is about a contract, which the agent is not allowed to answer.

What the agent understood

  • Asks whether the annual plan can be switched to a team plan mid-term

API reference

PropTypeDefault
customer*string—
channel*

Where the conversation is happening, such as "Chat" or "Email".

string—
reason*

Why the agent is handing it to a person, in a sentence.

string—
sentimentSentiment"unknown"
waiting

How long they have been waiting, already formatted, such as "4 min".

string—
summary

What the agent understood so far, as short points.

string[][]
messages

The last few messages.

EscalationMessage[][]
suggestedReply

A reply the agent suggests, which the person can edit before sending.

string""
onTakeOver

Called when the person takes the conversation over.

() => void | Promise<void>—
onSnooze

Called to snooze it for a while.

() => void | Promise<void>—
onSendReply

Called with the (possibly edited) reply when the person sends it.

(reply: string) => void | Promise<void>—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Screen readersAn article named by the customer; how they seem to feel is read as a word ('Seems frustrated'); results are a polite live region and failures an alert
TabThe suggested reply, then Snooze, Send reply and Take over
SentimentAlways a word in a pill; red only reinforces 'Angry'

Use with AI

customer, channel, reason (required); sentiment calm | frustrated | angry | unknown, waiting, summary string[], messages [{ from: 'customer' | 'agent', text, time? }], suggestedReply (editable). onTakeOver, onSnooze and onSendReply(reply) may return promises; each reports success in words and shows a failure as an alert. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Escalation Card (@ballmac/escalation-card) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Showing a person a conversation an agent could not finish, with context and a head start
  • An inbox row that needs a human decision

Not for

  • Approving a tool call; use approval-card
  • The packet passed between two agents; use handoff-card

Registry JSON: https://ui.ballmac.com/r/escalation-card.json

Credits

Free to use in personal and commercial projects.

Ballmac UI Pro

Need the whole screen, not one piece?

150 premium blocks (dashboards, settings, calendars, mail, shops, onboarding), a private shadcn registry and Figma tokens. Blocks that show data come with loading, empty and error states built in.

Not ready? Try three Pro blocks free

Leave your email and the blocks appear right here, ready to copy. Yours to use in any project.