コピーボタンCopyButtonExperimental
クリップボードへのコピー操作を、ツールチップとコピー済み状態のフィードバック付きで表示します。
プレビュー
状態とバリエーション
アイコンだけのコピー
スウォッチやツールバーなど狭い場所では、コピー後にチェックアイコンへ切り替え、コピー完了の吹き出しを一時表示します。
ラベル付きフィードバック
コードブロックのように余白がある場所では、押す前から操作名を表示し、コピー後に完了ラベルへ切り替えます。
ボタンの面
buttonVariant で面だけを変えます。既定の ghost はツールバーやコードブロックの隅に、outline や secondary は単体で置くときに使います。
ghost
outline
secondary
プロパティ
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| value | string | - | クリップボードへコピーする文字列です。 |
| copyLabel | string | "Copy" | コピー前の aria-label とツールチップです。 |
| copiedLabel | string | "Copied" | コピー後に表示する aria-label とツールチップです。 |
| copyFailedLabel | string | "Copy failed" | コピー失敗時に表示する aria-label とツールチップです。 |
| copiedDuration | number | 5000 | コピー済みの吹き出し表示を維持する時間です。単位はミリ秒です。 |
| variant | "default" | "label" | "default" | 狭い場所ではアイコンのみ、広い場所ではコピー済みラベルも表示します。 |
| buttonVariant | TooltipButtonProps["variant"] | "ghost" | ボタン表面の見た目を指定します。 |
使い方
import { CopyButton } from "@gunjo/ui";
export function InstallCommandCopyButton() {
const command = "npm install @gunjo/ui";
return (
<CopyButton
value={command}
copyLabel="コマンドをコピー"
copiedLabel="コピーしました"
copyFailedLabel="コピーに失敗しました"
variant="label"
/>
);
}設計の判断
- ラベルを動詞で書き、結果で入れ替える。資料は「ボタンのラベルは動詞で書く」を挙げています。この部品は
copyLabel・copiedLabel・copyFailedLabelの3つを持ち、押した結果でラベルとアイコンを入れ替えます。既定では5秒(copiedDuration)でもとに戻ります。 - 失敗しても黙らない。クリップボードの API が拒否された場合は、画面外の
textareaを使う古いやり方に切り替えます。それでも駄目なら「コピーできません」を出します。押したのに何も起きない、という状態を作らないためです。 - 結果はツールチップではなく
role="status"で知らせる。押した後の吹き出しは読み上げ対象の要素で、そのあいだツールチップは出しません。ツールチップはポインタを乗せている人にしか届かないので、押した結果の知らせには使えないからです。
一般のボタンの設計は UIXHERO の「ボタン」にあります。
使用コンポーネント
関連コンポーネント
いつ・なぜ使うか(UIXHERO)
「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。