Badge
色付きのドットを持つステータスラベル、スライドして閉じる削除可能なタグ、新しい値へ回転するカウントです。
pnpm dlx shadcn@latest add https://hextaui.com/r/badge.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/badge.tsx components/ui/number-flow.tsx lib/motion.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
Variant と appearance
デフォルトの outline は中立的な面を保ち、ステータスの色をドットやアイコンに付けます。バッジを目立たせたいときは appearance="solid"、控えめな塗りのチップにしたいときは appearance="muted" を使います。shape="pill" で完全な丸型になります。
サイズ
sm、default、lg。アイコン、ドット、閉じるボタン、件数はバッジに合わせて拡大縮小します。
削除可能
<BadgeClose /> を追加すると、バッジを削除可能にできます。バッジは縮んで閉じ、隣のバッジがその隙間に滑り込み、フォーカスは次の閉じるボタンに移ります。終了アニメーションを先に完了させるため、項目をデータから削除する処理は onOpenChangeComplete で行ってください。
制御
表示状態を自分で管理するには、open と onOpenChange を渡します。open を true に戻すと、バッジが入場アニメーション付きで復活します。
件数
<BadgeCount /> は変化した桁だけを回転させ、max(デフォルトは 99)で頭打ちにしてプラス記号を付けます。スクリーンリーダーは常に実際の数値を読み上げます。
インタラクティブ
render を使うと、バッジをリンクやボタンにできます。ホバー時の色付け、押下時の縮小、フォーカスリングが加わります。aria-invalid でエラー状態を表示します。
長いコンテンツ
バッジがコンテナより広くなることはありません。長いラベルは三点リーダーで省略され、アイコンと閉じるボタンは表示されたままです。
右から左
アイコン、閉じるボタン、折りたたみのアニメーションは、読む方向に従います。件数は常に左から右に読みます。
これらのキーは <BadgeClose /> に適用されます。
| キー | アクション |
|---|---|
| EnterSpace | バッジを削除します。 |
| BackspaceDelete | バッジを削除します。 |
| Tab | 次の閉じるボタンに移動します。削除後は、フォーカスは次の閉じるボタンに移り、最後だった場合は前のボタンに移ります。 |
- 閉じるボタンにはバッジの名前が付くため、スクリーンリーダーは単なる「Remove」ではなく「Remove design」と読み上げます。上書きするには
aria-labelを渡します。 <BadgeDot />は装飾であり、支援技術からは隠されます。ステータスはテキストのラベルに含めてください。<BadgeCount />は、表示テキストが 99+ のように上限で丸められていても、正確な値を公開します。- モーションの低減が有効な場合、削除と件数のアニメーションはスキップされます。
<Badge /> は <span> をレンダリングし、その属性をすべて受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
variantoutline ではドットとアイコンに、solid では面に色を付けます。 | "default" | "success" | "info" | "warning" | "destructive" | "default" |
appearance | "outline" | "solid" | "muted" | "outline" |
shape | "default" | "pill" | "default" |
size | "sm" | "default" | "lg" | "default" |
open表示状態を制御します。 | boolean | – |
defaultOpen | boolean | true |
onOpenChangeBadgeClose が実行されたときに呼ばれます。 | (open: boolean) => void | – |
onOpenChangeComplete終了アニメーションの完了後に呼ばれます。項目をデータから削除する処理はここで行います。 | (open: boolean) => void | – |
render | ReactElement | (props, state) => ReactElement | <span> |
| 属性 | 説明 |
|---|---|
data-slot="badge" | CSS でバッジを指定します。 |
data-variant | 現在のバリアント。 |
data-appearance | 現在の外観。 |
data-shape | 現在の形。 |
data-size | 現在のサイズ。 |
data-ending-style | バッジが退場アニメーションをしている間、付与されます。 |
--badge-accent | ドットとアイコンに使われるステータスカラー。独自のアクセントにするには上書きします。 |
--badge-height | バッジの高さ。 |
--badge-radius | 角丸の半径。閉じるボタンの角丸は、これをもとに算出されます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
pulseライブ状態向けにピングのアニメーションを追加します。モーションの低減が有効な場合は無効になります。 | boolean | false |
| 属性 | 説明 |
|---|---|
data-slot="badge-dot" | CSS でドットを指定します。 |
data-pulse | pulse が有効なときに付与されます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
children | ReactNode | <IconX /> |
aria-label自動で付く「Remove {label}」という名前を上書きします。 | string | – |
onClickevent.preventDefault() を呼ぶと、バッジを開いたままにします。 | (event) => void | – |
| 属性 | 説明 |
|---|---|
data-slot="badge-close" | CSS で閉じるボタンを指定します。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
value負の値と有限でない値は 0 と表示されます。 | number | – |
maxこれを超える値は max+ と表示されます。上限をなくすには Infinity を渡します。 | number | 99 |
duration | number | 600 |
animated | boolean | true |
trend数字が回転する向き。 | "auto" | "up" | "down" | "shortest" | "auto" |
locales | Intl.LocalesArgument | – |
format | Intl.NumberFormatOptions | – |
| 属性 | 説明 |
|---|---|
data-slot="badge-count" | CSS で件数を指定します。 |
- Motionすべてのコンポーネントがアニメーションに使うイージングカーブ、継続時間、モーション軽減のチェックと、サイズのモーフィングやスライドするハイライト用のフックです。
- Number flow変化した桁だけが回転するアニメーション付きの数値です。任意のIntlフォーマットとロケールに対応します。
- Avatarイニシャルのフォールバック、ステータスバッジ、件数にまとめられる積み重ねグループを備えたユーザー写真です。
- Cardコンテンツをまとめるサーフェスです。3つのバリアント、端まで広がるメディア、同心円状の角丸、カード全体のリンクに対応します。
- Chartテーマ対応の色を持つRechartsのチャートです。1つの設定からラベルを読み取るツールチップと凡例、見えるフォーカスリングつきのキーボード操作に対応します。
- Data table実データのためのテーブルです。並べ替え、検索、行の選択、固定列、スティッキーヘッダー、ページネーションを備えています。
使用しているブロック
Badge の上に構築されるブロック。
- API keysOpenAIやAnthropicのコンソールのような、AIプロダクトのAPIキーのページです。スコープ付きの権限と有効期限を持つキーを作成し、シークレットは一度だけ表示され、コピーで確認でき、取り消しは元に戻せ、その場で名前を変更でき、猶予期間つきでローテーションでき、キーごとの使用量を確認できます。
- BillingCursor、Claude、Vercelのスタイルによる、AIプロダクト向けのプランと使用量です。モデルごとに分かれ、サイクル終了時を予測してクレジット切れの前に警告する使用量メーター、ドラッグで確認できる日別チャート、メーター上でプレビューできるアラートつきの支出上限、正確な日割り計算によるプラン変更、実際のバリデーションを備えたカードフォーム、PDFでダウンロードできる請求書を備えています。
- Code BlockAIの回答向けに作られたコードブロックです。ストリーミングに追従するシンタックスハイライト、コピー、ダウンロード、折り返し、行番号とハイライト行、承認と却下のある差分、コマンド用のターミナルを備えています。
- ModelsAIプロダクトの設定にあるモデルページです。コンテキスト、速度、コストが一目でわかるデフォルトモデル、各モデルが対応する内容を把握しているデフォルトの推論量、フィルター、ピン留め、一括切り替えを備えプロバイダーごとにグループ化された検索可能なモデルリスト、実際の接続テストができるOpenAI互換サーバー、新着を知らせる更新を備えています。