Caroa UI

Badge

ステータスやカテゴリを表示するバッジコンポーネント。

インポート

import { Badge } from '@caroainc/ui-components'

個別サブパス(バンドルサイズを抑えたい場合):

import { Badge } from '@caroainc/ui-components/badge'

基本的な使い方

Loading...
<Badge>Badge</Badge>

バリアント

Loading...
<Badge>Base (Default)</Badge>
<Badge variant="primary">Primary</Badge>
<Badge variant="secondary">Secondary</Badge>
<Badge variant="destructive">Destructive</Badge>
<Badge variant="success">Success</Badge>
<Badge variant="warning">Warning</Badge>
<Badge variant="outline">Outline</Badge>

形状

Loading...
<Badge shape="circle">Circle (Default)</Badge>
<Badge shape="square">Square</Badge>

インタラクティブ

interactiveプロパティを使用すると、クリック可能なバッジとしてホバー効果とカーソルが適用されます。

interactiveは単独では使えません。onClickまたはonKeyDownとの併用が前提です。 asChildを使っていない場合(生のspanを描画する場合)でも、ハンドラ(onClick/onKeyDownのいずれか)を渡していないとtabIndex/role="button"/Enter・Spaceキーでのクリック発火は自動付与されません。これはServer Componentとして描画される際に関数propsを直列化できずエラーになることを防ぎつつ、何も起きない要素をフォーカス可能にしてしまうa11y上の問題を避けるためです。ハンドラを渡した場合のみ、キーボード操作可能な状態が自動で付与されます(asChildの場合は子要素a等が自前でキーボード操作を持つため付与されません)。

Loading...
{/* 通常のバッジ(ホバー効果なし) */}
<Badge>通常</Badge>
 
{/* クリック可能なバッジ(ホバー効果あり)。onClickを渡すことでtabIndex/role/キーボード操作も自動付与される */}
<Badge interactive onClick={() => setCount((c) => c + 1)}>クリック可能</Badge>
<Badge variant="primary" interactive onClick={() => setCount((c) => c + 1)}>クリック可能</Badge>
<Badge variant="outline" interactive onClick={() => setCount((c) => c + 1)}>クリック可能</Badge>

onClick/onKeyDownを渡す場合、利用側がClient Componentである必要があります(RSCからは関数を渡せないため)。 表示のみの用途(interactiveを使わない場合)は/serverからそのまま利用できます。

アイコン付きバッジ

Loading...
<Badge variant="primary">
  <Icon name="Star" size="xs" />
  New
</Badge>
<Badge variant="success">
  <Icon name="Check" size="xs" />
  完了
</Badge>

実際の使用例

ステータス表示

Loading...
<Badge variant="success">公開中</Badge>
<Badge variant="warning">下書き</Badge>
<Badge variant="destructive">非公開</Badge>

カテゴリタグ

Loading...
<Badge variant="outline">React</Badge>
<Badge variant="outline">TypeScript</Badge>

通知カウント

Loading...
<div className="relative">
  <Icon name="Bell" size="lg" />
  <Badge variant="destructive" className="absolute -top-2 -right-2 h-5 w-5 flex items-center justify-center p-0 text-xs">
    3
  </Badge>
</div>

Props

PropTypeDefaultDescription
variant'base' | 'primary' | 'secondary' | 'destructive' | 'success' | 'warning' | 'outline''base'バッジのスタイルバリアント
shape'circle' | 'square''circle'バッジの形状
interactivebooleanfalseホバー効果とカーソルを適用(クリック可能なバッジに使用)。onClickまたはonKeyDownとの併用が前提。ハンドラを渡し、かつasChildがfalseのときのみtabIndex/role="button"/Enter・Spaceキー操作が自動付与される(ハンドラが無い場合は付与されない)

On this page