インポート
import { CopyButton } from '@k8ordo/ui';使い方
押すとアイコンが2秒間チェックに変わり(失敗したらエラーのアイコン)、隣のライブリージョンが「コピーしました」を読み上げます。ボタンの名前は変わりません。
<CopyButton value="pnpm add @k8ordo/ui" label="Copy command" size="sm" />アイコンだけ
iconOnlyを付けると透明なIconButtonになり、labelはツールチップとアクセシブルネームになります。
<CopyButton value={code} label="Copy code" iconOnly size="sm" />
<CopyButton value={code} label="Copy code" iconOnly />
<CopyButton value={code} label="Copy code" iconOnly size="lg" />押したときに中身を作る
valueには関数も渡せ、Promiseを返してもかまいません。関数は押したときに呼ばれ、PromiseはそのままClipboardItemに渡るので、中身が後から届いても書き込みはクリックの中で始まります(Safariはawaitの後に始めた書き込みを拒みます)。
'use client';
<CopyButton label="Copy link" value={() => window.location.href} />
// A promise is fine too: the write still starts inside the click
<CopyButton
label="Copy as Markdown"
value={async () => (await fetch(`/blog/${slug}.md`)).text()}
/>Props
value- Type:
string|(() => string | Promise<string>) - Default: -
disabled?- Type:
boolean - Default:
false iconOnly?- Type:
boolean - Default:
false label?- Type:
string - Default: -
size?- Type:
'sm'|'md'|'lg' - Default:
'md'
| Prop | Type | Default |
|---|---|---|
value | string|(() => string | Promise<string>) | - |
disabled? | boolean | false |
iconOnly? | boolean | false |
label? | string | - |
size? | 'sm'|'md'|'lg' | 'md' |