Ballmac UI home

Copy Button

A copy-to-clipboard button with a morphing check icon, an optional label, a fallback for blocked clipboards, an error state and a polite announcement.

Installation

$ pnpm dlx shadcn@latest add @ballmac/copy-button

Usage

import { CopyButton, copyText } from "@/components/ballmac/copy-button"

The full example is in the Code tab above.

Examples

Inline with a value

  • Project IDprj_8f3a1c92e7
  • Regioneu-west-1
  • Webhook URLhttps://api.example.com/hooks/in/8f3a

API reference

PropTypeDefault
value

Text to copy.

string—
getValue

Reads the text at click time instead, for content that changes (a selection, a form). May be async.

() => string | Promise<string>—
label

Visible label next to the icon, such as "Copy". Leave out for an icon-only button.

string—
copiedLabel

Label shown after a successful copy.

string—
ariaLabel

Accessible name of an icon-only button.

string—
resetAfter

How long the confirmation stays, in milliseconds.

number1800
onCopied

Called with the copied text.

(text: string) => void—
onError

Called when both clipboard routes fail.

() => void—
variant"ghost" | "outline" | "solid""ghost"
size"sm" | "default" | "lg""default"

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Enter / SpaceCopies and confirms
Screen readersName changes to 'Copied' and a polite status announces it; failures say 'Copy failed'
Reduced motionThe icon swaps with a fade only

Use with AI

Pass value (or getValue for content read at click time). label adds visible text, variant is ghost | outline | solid, size sm | default | lg. Falls back to execCommand when navigator.clipboard is blocked and shows 'Copy failed' if both fail. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Copy Button (@ballmac/copy-button) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Any value a developer will paste: keys, URLs, commands, IDs
  • Toolbars on code, logs and config

Not for

  • Copying a whole code block with a header (code-block has its own button)

Registry JSON: https://ui.ballmac.com/r/copy-button.json

Credits

Free to use in personal and commercial projects.