ConfirmButton

A button with a built-in confirm step for destructive or consequential actions. No modal, no round trip — the confirmation is part of the component.

rendered, live
the wire — click a line to scrub
the contract — ConfirmButton in catalog.json
{
  "type": "object",
  "description": "A button with a built-in confirm step for destructive or consequential actions. No modal, no round trip — the confirmation is part of the component.",
  "properties": {
    "component": {
      "const": "ConfirmButton"
    },
    "label": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
      "description": "The button text, naming the action, e.g. 'Abort rollout'."
    },
    "confirmLabel": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
      "description": "Text of the built-in second step, e.g. 'Really abort?'. Default is a localized 'Confirm?'."
    },
    "action": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/Action",
      "description": "Fired only after the confirm step. Context carries the action payload — what you need to act, nothing more."
    },
    "intent": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "good",
            "bad",
            "warning",
            "info",
            "neutral"
          ]
        },
        {
          "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DataBinding"
        },
        {
          "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/FunctionCall"
        }
      ],
      "description": "Judgment of the action on the shared scale — use 'bad' for destructive operations. Default: 'neutral'.",
      "default": "neutral"
    }
  },
  "required": [
    "component",
    "label",
    "action"
  ]
}
the prompt-pack — paste into your agent
### ConfirmButton — destructive action, built-in confirm step

The confirmation is part of the component — no modal, no round trip. The action fires only after
the second press. Use `intent: "bad"` for destructive operations.

| prop           | type         | required | notes                                          |
| -------------- | ------------ | -------- | ---------------------------------------------- |
| `label`        | string       | yes      | names the action, e.g. `"Abort rollout"`       |
| `action`       | action       | yes      | fired after confirm; hand-picked context       |
| `confirmLabel` | string       | no       | second-step text; default localized "Confirm?" |
| `intent`       | intent scale | no       | `"bad"` for destructive; default `"neutral"`   |

```
{"id":"abort","component":"ConfirmButton","label":"Abort rollout","confirmLabel":"Really abort?","intent":"bad","action":{"event":{"name":"rollout_aborted","context":{"buildId":4191}}}}
```