Tooltip
ホバーまたはキーボードフォーカスで、少し待ってから開く短いヒントです。隣り合う要素の間では即座に切り替わり、ショートカットも表示できます。
pnpm dlx shadcn@latest add https://hextaui.com/r/tooltip.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/tooltip.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
tooltip は、トリガー上で少し静止した後、またはトリガーにキーボードフォーカスが当たるとすぐに開きます。1つが表示されている間は隣の tooltip が即座に、アニメーションなしで開くため、ツールバーを走査するときも、1つずつ待つのではなくラベルを読むように感じられます。
この即時の切り替えは、TooltipProvider を共有する tooltip の間で機能します。遅延を共有するには、アプリ(またはツールバー)を1つで囲んでください。プロバイダーのない tooltip も、同じデフォルトで単独で機能します。
サイド
TooltipContent に side を設定します。論理的な側は文字の読み方向に従い、空間が足りないときは tooltip が反転します。
矢印付き
arrow は、tooltip が画面に収まるようにずれても、トリガーを指し続けるポインターを追加します。
キーボードショートカット
ラベルの後に Kbd または KbdGroup を置きます。tooltip の色を引き継いで末尾に置かれ、Apple デバイスでは ⌘、それ以外では Ctrl が表示されます。
ツールバー
1つのボタンで静止してから、グループに沿ってスライドします。1つの TooltipProvider の下にある tooltip は、移動する間も即座に切り替わります。
無効
無効なボタンでも、focusableWhenDisabled を使えば理由を説明できます。ホバー可能でタブ順に残ります。Tooltip の disabled は tooltip をオフにします。
長いコンテンツ
テキストは読みやすい幅で折り返され、長い URL でも画面の端を超えることはありません。
制御
tooltip を自分で制御するには、open と onOpenChange を渡します。reason が、何が開閉したかを伝えます。
1つの tooltip、複数のトリガー
createTooltipHandle でハンドルを作成し、各トリガーから payload を渡すと、1つの tooltip を共有できます。
右から左
dir="rtl" の内側では、inline-end は左に開き、ショートカットは反対の端に移ります。
| キー | アクション |
|---|---|
| Tab | キーボードでトリガーにフォーカスすると、すぐに tooltip が開きます。 |
| Esc | tooltip を閉じ、フォーカスをトリガーに残します。 |
| EnterSpace | トリガーを実行して tooltip を閉じるため、次に起きることを覆い隠しません。 |
- tooltip は視覚的なヒントであり、ラベルではありません。アイコンのみのトリガーには、tooltip のテキストと一致する
aria-labelを付けてください。 - タッチでは何も開かず、タップはトリガー本来の動作だけを行います。必要な情報を tooltip に入れないでください。それには popover を使います。
- ポインターを使うユーザーは、tooltip の上に移動しても閉じることなく、読んだり選択したりできます。
- 視差効果の軽減が有効な場合、tooltip は拡大せずにフェードします。
Base UI の tooltip 上に構築されています。すべてのパーツは、ラップしているプリミティブの props を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
delay開くまでにトリガー上で静止するミリ秒。 | number | 300 |
closeDelay離れてから閉じるまでのミリ秒。 | number | 0 |
timeout1つが閉じてから、次のものが即座に開く猶予時間。 | number | 400 |
| プロパティ | 型 | デフォルト |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open, details) => void | – |
onOpenChangeComplete開閉アニメーションの後に呼ばれます。 | (open) => void | – |
disabledtooltip をオフにします。 | boolean | false |
disableHoverablePopupポインターがトリガーを離れた瞬間に閉じます。 | boolean | false |
trackCursorAxis | "none" | "x" | "y" | "both" | "none" |
handlecreateTooltipHandle から。 | TooltipHandle<Payload> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| プロパティ | 型 | デフォルト |
|---|---|---|
delayこのトリガーについて、プロバイダーの遅延を上書きします。 | number | – |
closeDelay | number | – |
closeOnClick | boolean | true |
disabledこのトリガーが tooltip を開かないようにします。要素自体は有効のままです。 | boolean | false |
handle | TooltipHandle<Payload> | – |
payload | Payload | – |
render | ReactElement | (props, state) => ReactElement | <button> |
| 属性 | 説明 |
|---|---|
data-slot="tooltip-trigger" | トリガー。 |
data-popup-open | その tooltip が開いている間付きます。 |
data-trigger-disabled | トリガーが tooltip を開けないときに付きます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
side | "top" | "bottom" | "left" | "right" | "inline-start" | "inline-end" | "top" |
align | "start" | "center" | "end" | "center" |
sideOffset | number | (data) => number | 6, or 8 with arrow |
alignOffset | number | 0 |
arrow | boolean | false |
collisionPadding | number | 8 |
arrowPadding | number | 8 |
portalPropscontainer や keepMounted など。 | TooltipPortal props | – |
| 属性 | 説明 |
|---|---|
data-slot="tooltip-content" | ポップアップ。 |
data-slot="tooltip-positioner" | ポップアップを囲む配置用のラッパー。 |
data-side | 反転した後に開いた側。 |
data-align | 配置。 |
data-instant | アニメーションなしで開閉するときは "delay"、"focus"、"dismiss"。 |
data-starting-style | 表示アニメーションの間存在します。 |
data-ending-style | 非表示アニメーションの間存在します。 |
--available-width | トリガーと画面の端との間隔。 |
--transform-origin | tooltip が拡大する基点。 |
arrow によって自動で描画されます。独自のコンテンツパーツを組み立てる場合にだけ直接使ってください。
| 属性 | 説明 |
|---|---|
data-slot="tooltip-arrow" | 矢印。 |
data-uncentered | トリガーの中心を指せないときに付きます。 |
- Alert dialog破壊的または重要な操作のための確認ダイアログです。非同期処理を待ち、スマートフォンではボトムシートになります。
- Commandインラインまたは⌘Kパレットとして使える、検索可能な操作リストです。ページ、ショートカット、一致箇所のハイライトに対応します。
- Context menu右クリックまたは長押しで開く操作メニューです。サブメニュー、チェックボックス項目、ラジオ項目に対応し、タッチでは長押しのフィードバックを返します。
- Dialogフォームや集中して行う作業のための、ページ上のウィンドウです。固定のヘッダーとフッター、入れ子に対応し、スマートフォンではスワイプできるボトムシートになります。
- Drawer任意の端からスライドインし、指に追従するパネルです。スナップポイント、実際に使えるハンドル、重なっていく入れ子のドロワーに対応します。
- Dropdown menuボタンの背後に、操作とオプションをまとめたメニューです。グループ、サブメニュー、チェックボックス項目、ラジオ項目、ショートカットに対応します。
使用しているブロック
Tooltip の上に構築されるブロック。
- Prompt Input最初は静かな1行で、入力に合わせてカードへ広がり、会話が始まると下へ移動するチャット入力欄です。Enterで送信でき、日本語や中国語の入力でも安全です。ファイルは貼り付け、ドロップ、選択でき、プレビュー、進捗、再試行に対応します。@でファイルを追加し、/でコマンドをカーソル位置のメニューから実行できます。数字キーで選べるモデルピッカー、Maxで動き出す推論量スライダー、コンテキストリング、リアルタイム波形つきの音声入力、ツールチップ、返信のストリーミング中に入力したメッセージのキュー、再読み込みしても残る下書きを備えています。
- Agent Todosエージェントの作業中のプランを表示します。すべてのステップはバックログからToDo、進行中、完了へと移り、リアルタイムの所要時間、失敗、その裏にあるツール呼び出しも確認できます。コンポーザーの上に置くステータスピル、目に見えるプランの変更、実行前にプランを編集できるレビューステップを備えています。
- API keysOpenAIやAnthropicのコンソールのような、AIプロダクトのAPIキーのページです。スコープ付きの権限と有効期限を持つキーを作成し、シークレットは一度だけ表示され、コピーで確認でき、取り消しは元に戻せ、その場で名前を変更でき、猶予期間つきでローテーションでき、キーごとの使用量を確認できます。
- Artifactモデルが作成したものを表示する、AIチャットの横のパネルです。Webページ、SVG、ドキュメント、コードがリアルタイムでストリーミングされ、その後サンドボックス化されたプレビューに切り替わります。比較して復元できるバージョン、サイズを変更できる分割、スマートフォンでのボトムシートを備えています。