---
name: clipboard
category: feedback
summary: "Copy-to-clipboard button with copied feedback"
subpath: "@42/core/clipboard"
---

Copy-to-clipboard button with temporary `data-state="copied"` feedback. Text comes
from the `text` option or a `[data-c42-clipboard-source]` element.

```html
<div data-c42-clipboard>
  <input data-c42-clipboard-source value="npm i @42/core" readonly />
  <button data-c42-clipboard-trigger>
    <span data-c42-clipboard-copy>Copy</span>
    <span data-c42-clipboard-copied hidden>Copied!</span>
  </button>
</div>
```

```ts
import { Clipboard } from '@42/core/clipboard';
const cb = new Clipboard(root, { timeout: 2000 });
await cb.copy();
```

Options: `text` (overrides source), `timeout` (ms, default 2000)
Methods: `setText(string | null)`, `copy(): Promise<boolean>`
Events: `clipboard:copy` → `{ text }`, `clipboard:error` → `{ error }`
