- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Native Select
- Navigation Menu
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
import { GitBranchIcon, SearchIcon } from "lucide-react"
import {Marker コンポーネントは、ステータス更新、システムメモ、境界線付きの行、ラベル付き区切りなどのインライン会話マーカーを表示します。会話スレッド内で Message と組み合わせて使用します。
インストール#
pnpm dlx shadcn@latest add marker
使い方#
import { Marker, MarkerContent, MarkerIcon } from "@/components/ui/marker"<Marker>
<MarkerIcon>
<CheckIcon />
</MarkerIcon>
<MarkerContent>Explored 4 files</MarkerContent>
</Marker>構成#
マーカーを作成するには、次の構成を使用します。
Marker
├── MarkerIcon
└── MarkerContent機能#
- インラインマーカー、境界線付きの行、ラベル付き区切りのバリエーション
- 支援技術からは隠される装飾用のアイコンスロット
- リンクやボタンのマーカー用に、
asChildによるポリモーフィックなルート要素 - ストリーミング中のステータステキストに使える
shimmerユーティリティとの組み合わせ - すべてのパーツに用意された
classNameプロップによるカスタマイズ可能なスタイリング
バリエーション#
Use variant to switch between an inline marker, bordered row, and labeled separator.
import { Marker, MarkerContent } from "@/components/ui/radix/marker"
export function MarkerVariantsDemo() {| Variant | Description |
|---|---|
default | An inline marker for status, notes, and actions. |
border | A default marker with a bottom border under the row. |
separator | A centered label with divider lines on each side. |
ステータス#
ストリーミング中または進行中のマーカーには role="status" を設定し、Spinner を含めることで更新が読み上げられるようにします。
import {
Marker,
MarkerContent,シマー#
アニメーションするストリーミングテキスト効果を得るには、shimmer ユーティリティクラスを MarkerContent に追加します。このユーティリティは shadcn パッケージに含まれています。インストール方法については shimmer のドキュメントを参照してください。
import { Marker, MarkerContent } from "@/components/ui/radix/marker"
export function MarkerShimmerDemo() {区切り#
日付やセクションの区切りなど、ラベル付きの区切りには会話内で separator バリアントを使用します。
import { Marker, MarkerContent } from "@/components/ui/radix/marker"
export function MarkerSeparatorDemo() {境界線#
デフォルトマーカーの配置を保ちながら次の行と区切りたいステータス行には、border バリアントを使用します。
import { FileTextIcon, GitBranchIcon, SearchIcon } from "lucide-react"
import {アイコン付き#
コンテンツと一緒にアイコンを表示するには MarkerIcon を使用します。アイコンをコンテンツの上に積み重ねるには flex-col を使用します。
import { BookOpenCheck, GitBranchIcon, SearchIcon } from "lucide-react"
import {リンクとボタン#
Marker の asChild プロップを使うと、マーカーをリンクやボタンにできます。
"use client"
import { GitBranchIcon, RotateCcwIcon } from "lucide-react"import { Marker, MarkerContent } from "@/components/ui/marker"
export function MarkerLinkDemo() {
return (
<Marker asChild>
<a href="#">
<MarkerContent>View the pull request</MarkerContent>
</a>
</Marker>
)
}アクセシビリティ#
Marker は既定では装飾的な要素です。適切なセマンティクスは使い方によって異なるため、単一の既定値に頼らず、用途に応じて role を選択してください。
ステータスと進捗#
「Thinking...」や実行中のツールのようなストリーミング中・進行中のマーカーには role="status" を設定し、更新が表示された際に支援技術が読み上げるようにします。Marker は role を内部の要素にそのまま渡します。
<Marker role="status">
<MarkerIcon>
<Spinner />
</MarkerIcon>
<MarkerContent>Compacting conversation</MarkerContent>
</Marker>ラベル付き区切り#
日付やセクションラベルなど、テキストを伴う区切りには role は不要です。区切り線は装飾用の CSS 疑似要素であり、テキストは通常のコンテンツとして読み上げられます。
<Marker variant="separator">
<MarkerContent>Today</MarkerContent>
</Marker>注意: ラベル付きの区切りに role="separator" を追加しないでください。
separator はテキストではなく aria-label からアクセシブルネームを取得し、
その内容は装飾として扱われるため、表示されているラベルは読み上げられません。
role="separator" は、意味のあるテキストを持たない区切りのために取っておいてください。
境界線付きマーカー#
境界線付きマーカーは、デフォルトマーカーと同じセマンティクスを保ちます。下部の境界線は装飾のためのものなので、マーカーの用途に応じて role="status"、asChild、または role なしのいずれかを選択してください。
<Marker variant="border">
<MarkerIcon>
<FileTextIcon />
</MarkerIcon>
<MarkerContent>Opened implementation notes</MarkerContent>
</Marker>装飾アイコン#
MarkerIcon は装飾用であり、aria-hidden によって支援技術から隠されるため、意味は隣接する MarkerContent が担います。アイコンのみのマーカーには、空として読み上げられないように aria-label か目に見えるテキストを指定してください。
<Marker aria-label="Synced">
<MarkerIcon>
<CheckIcon />
</MarkerIcon>
</Marker>インタラクティブなマーカー#
マーカーがリンクやアクションのトリガーになる場合は、asChild プロップを使って実際の <button> や <a> としてレンダリングし、フォーカス可能にして正しい role を公開してください。アクセシブルネームはマーカーのテキストから取得されます。
<Marker asChild>
<a href="/files">
<MarkerIcon>
<FileTextIcon />
</MarkerIcon>
<MarkerContent>Explored 4 files</MarkerContent>
</a>
</Marker>API リファレンス#
Marker#
The root marker element. The file also exports markerVariants for composing the marker styles into custom components.
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "border" | "separator" | "default" | The marker layout. |
asChild | boolean | false | Render as the child element, such as a link. |
className | string | - | Additional classes to apply to the root element. |
MarkerIcon#
A decorative icon slot. Hidden from assistive tech with aria-hidden.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional classes to apply to the icon slot. |
MarkerContent#
The marker text content.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional classes to apply to the content slot. |