mcpField
G
gpui-component

gpui-component

github.com/aprilnea開発947 回インストール40 週間前に更新
リポジトリ

gpui-component について

gpui-component を使って GPUI アプリ向けの再利用可能な UI コンポーネントを構築するためのガイドです。構造、トレイト、テーマ、オーバーレイ、フォーム、アニメーションの指針をまとめています。

主な機能

  1. 01コンポーネント設計パターン
  2. 02トレイト実装の指針
  3. 03テーマ対応のスタイル
  4. 04ダイアログとポップオーバー
  5. 05フォーム状態と検証
  6. 06アニメーションの指針

活用シーン

  1. 01再利用可能な GPUI コンポーネントの設計
  2. 02一貫したテーマとサイズの適用
  3. 03ダイアログ、ポップオーバー、シートの構築
  4. 04フォームやアニメーションの実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aprilnea/gpui-skills --skill gpui-component

インストール後、Claude Code で/gpui-componentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

rules/
_sections.md
anim-with-animation.md
comp-renderonce.md
comp-stateful.md
comp-structure.md
dialog-comparison.md
dialog-root.md
dialog-window-ext.md
form-input-state.md
theme-colors.md
theme-variants.md
trait-disableable.md
trait-sizable.md
trait-styled.md

詳細

gpui-component のベストプラクティス

GPUI アプリケーション向けコンポーネントライブラリである gpui-component を使って UI コンポーネントを構築するための包括的なガイドです。

適用する場面

以下の場合は、これらのガイドラインを参照してください。

  • 再利用可能な UI コンポーネントを作成するとき
  • テーマに対応したスタイルを実装するとき
  • ダイアログ、ポップオーバー、シートを構築するとき
  • フォームコンポーネント(Input、Checkbox など)を作成するとき
  • コンポーネントのアニメーションを実装するとき
  • Longbridge のコンポーネントパターンに従うとき

優先度別のルールカテゴリ

優先度カテゴリ影響度接頭辞
1コンポーネントアーキテクチャCRITICALcomp-
2トレイトシステムCRITICALtrait-
3テーマシステムHIGHtheme-
4ダイアログとポップオーバーHIGHdialog-
5フォームコンポーネントMEDIUMform-
6アニメーションMEDIUManim-

クイックリファレンス

1. コンポーネントアーキテクチャ(CRITICAL)
  • comp-renderonce - #[derive(IntoElement)] を使って RenderOnce を使用する
  • comp-structure - 標準的なコンポーネント構造のテンプレート
  • comp-builder - コンポーネントに流れるようなビルダーパターンを使用する
  • comp-stateful - 状態を持つコンポーネントには Entity と RenderOnce を使用する
  • comp-callbacks - イベントコールバックには Rc を使用する
2. トレイトシステム(CRITICAL)
  • trait-styled - スタイルをカスタマイズできるよう Styled を実装する
  • trait-disableable - 無効状態に対応するため Disableable を実装する
  • trait-selectable - 選択状態に対応するため Selectable を実装する
  • trait-sizable - Size enum とともに Sizable を実装する
  • trait-parent-element - 子要素に対応するため ParentElement を実装する
  • trait-interactive - イベントに対応するため InteractiveElement を実装する
3. テーマシステム(HIGH)
  • theme-colors - 一貫した色使いのために ThemeColor を使用する
  • theme-active - テーマにアクセスするには ActiveTheme トレイトを使用する
  • theme-variants - バリアント enum(ButtonVariant など)を実装する
  • theme-size-system - サイズに基づくスタイル設定には StyleSized を使用する
4. ダイアログとポップオーバー(HIGH)
  • dialog-root - ウィンドウのルートとして Root コンポーネントを使用する
  • dialog-window-ext - ダイアログの管理には WindowExt を使用する
  • dialog-confirm - 確認/アラートダイアログを実装する
  • dialog-form - 入力状態を持つフォームダイアログを構築する
  • popover-pattern - Popover、PopupMenu、Sheet の使い分け
5. フォームコンポーネント(MEDIUM)
  • form-input-state - Entity ベースの入力状態管理
  • form-focus - キー付き状態によるフォーカス管理
  • form-validation - 入力検証のパターン
6. アニメーション(MEDIUM)
  • anim-with-animation - トランジションには with_animation を使用する
  • anim-keyed-state - use_keyed_state でアニメーション状態を保持する
  • anim-easing - 滑らかなアニメーションには cubic_bezier を使用する

コンポーネント構造のテンプレート

#[derive(IntoElement)]
pub struct MyComponent {
    // 1. Identifier
    id: ElementId,

    // 2. Base element (for event delegation)
    base: Div,

    // 3. Style override
    style: StyleRefinement,

    // 4. Content
    label: Option<SharedString>,
    children: Vec<AnyElement>,

    // 5. State configuration
    disabled: bool,
    selected: bool,
    size: Size,

    // 6. Callbacks
    on_click: Option<Rc<dyn Fn(&ClickEvent, &mut Window, &mut App)>>,
}

アーキテクチャの概要

┌─────────────────────────────────────────────────────────────┐
│  Window                                                      │
│  ├── Root (Entity, manages overlay state)                   │
│  │   ├── view: AnyView (user's main view)                   │
│  │   ├── active_dialogs: Vec<ActiveDialog>                  │
│  │   ├── active_sheet: Option<ActiveSheet>                  │
│  │   └── notification: Entity<NotificationList>             │
│  │                                                          │
│  └── Render Layers                                          │
│      ├── Layer 0: Root.view (main content)                  │
│      ├── Layer 1: Sheet (side drawer)                       │
│      ├── Layer 2: Dialogs (stackable)                       │
│      └── Layer 3: Notifications                             │
└─────────────────────────────────────────────────────────────┘

ポップアップコンポーネントの比較

機能DialogPopoverPopupMenuSheet
位置中央アンカー基準アンカー基準側面
オーバーレイありなしなしあり
状態Rootkeyed_stateEntityRoot
重ね合わせ複数1 つサブメニュー1 つ
閉じ方ESC/クリック/ボタンESC/外側をクリックESC/選択ESC/オーバーレイ

使用方法

詳しい説明とコード例については、各ルールファイルを参照してください。

rules/comp-renderonce.md
rules/trait-styled.md
rules/dialog-root.md

各ルールファイルには以下が含まれています。

  • 重要である理由の簡単な説明
  • 正しいパターンを示すコード例
  • 避けるべきよくある間違い

コメント