Communitygithub.com

Professor-Chen/cursor-byok

フローティングデスクトップUI(ドロップダウン、ポップオーバー、ツールチップ、メニュー、コンボボックス、ネストされたオーバーレイなど)を実装またはレビューします。

cursor-byok とは?

このスキルは、`@floating-ui/dom` を使用してフローティングUIコンポーネント(ドロップダウン、ポップオーバー、メニュー、コンボボックス、ツールチップなど)を実装するための厳格なガイドラインを提供します。手動の座標計算やCSSによる絶対オフセットは禁止され、`createPortal` を介してオーバーレイを `document.body` にレンダリングすることでクリッピングを防ぎます。`computePosition` と `autoUpdate` を使用した動的な位置決め、適切な `placement`、`offset`、`flip`、`shift`、`size` ミドルウェアの設定、および React 状態を介したスタイルの適用が求められます。また、アクセシビリティ(`aria-*` 属性)、フォーカス管理、外側クリックやEscapeキーによる閉じ操作、および親子間のネストされたオーバーレイでのイベント伝播の制御など、対話に関する不変条件もカバーしています。仮想スクロールや固定フッターとの互換性も考慮されています。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Professor-Chen/cursor-byok/tree/HEAD/.agents/skills/floating-ui

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

フローティング UI

トリガーに対して相対的に配置されるすべてのインタラクティブ要素には、@floating-ui/dom を使用してください。ドロップダウン、ポップオーバー、メニュー、コンボボックスリスト、ツールチップにおいて、座標を手動で計算したり、CSSの絶対オフセットに依存したりしないでください。

必須構造

  • オーバーレイは createPortal(..., document.body) を介してレンダリングし、レイアウトや重ね合わせコンテキストによってクリップされないようにします。
  • autoUpdate 内で computePosition を使用して配置します。オーバーレイが閉じるかアンマウントされるときに、autoUpdate が返す関数をクリーンアップします。
  • apps/desktop/src/components/ui にある最も近い既存のコントロールから始めてください。インタラクションに意図的な差異が必要でない限り、その placement、offset、flip、shift、size ミドルウェアに一致させます。
  • 計算された left、top、幅、および利用可能な高さを React 状態に格納します。その状態をポータルのルート要素に適用します。要素のスタイルを直接変更しないでください。
  • 参照要素の幅やビューポートの高さによってオーバーレイが制約される場合は、size を使用します。拡大する可能性のあるリストは components/virtual/VirtualList.tsx を使用する必要があります。固定のヘッダーとフッターは仮想ビューポートの外側に維持します。

インタラクションの不変条件

  • フォーカスがポータル化されたオーバーレイ内にある間は、トリガーの開いている/フォーカスを示す境界線を表示したままにします。
  • 外部のポインター操作または Escape キーで閉じ、その後フォーカスをトリガーに戻します。
  • 外部クリックのチェックには、トリガーとオーバーレイの両方を含める必要があります。ネストされたポータル化されたオーバーレイは、そのポインターイベントが親の外部クリックリスナーに到達するのを防ぐ必要があります。これにより、子メニューと対話しても親メニューが閉じることはありません。
  • トリガーの状態を aria-expanded、aria-controls、および適切な aria-haspopup で公開します。オーバーレイには、一致する menu、listbox、dialog、または tooltip セマンティクスを付与します。
  • すべてのビューポート端付近の配置、ネストされたオーバーレイのクリック、キーボードによる解除、仮想スクロール、および固定フッターの動作を検証します。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル