mcpField
G
gpui-component

gpui-component

github.com/longbridge開発18.7k298 回インストール今日更新
リポジトリ

gpui-component について

gpui-componentは、Rust GPUIコンポーネントライブラリでUIを構築するためのスキルとリファレンスです。設計・コーディングガイドへの準拠を促し、用法とコンポーネント一覧を示します。

主な機能

  1. 01設計・コーディングガイドの要件
  2. 02Rust GPUIコンポーネント一覧
  3. 03入力・フォームコンポーネント
  4. 04ナビゲーション・レイアウトコンポーネント
  5. 05テーブル、リスト、チャート
  6. 06コンポーネントAPIドキュメントへのリンク

活用シーン

  1. 01GPUI UIで使うコンポーネントの選定
  2. 02フォームやダイアログの実装
  3. 03デスクトップのナビゲーションとレイアウト構築
  4. 04表形式データやチャートの表示

インストール

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

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

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

同梱ファイル

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

references/
coding-guides.md
design-guides.md
style-guide.md
usage.md

詳細

まずお読みください

UI、操作、インターフェースの言語、レイアウト、スタイル、コンポーネント、アプリケーションアーキテクチャを変更する前に、該当するガイドをお読みください:

ガイド事前に読む内容
デザインガイドコンポーネント、レイアウト、余白、階層、色、情報密度、操作状態、オーバーレイ、インターフェースの文言の選択
コーディングガイドクレートのレイヤー構成、RenderOnce と Entity<T> の使い分け、状態の所有権、ElementId、フォーカス、非同期処理、パブリック API、テスト

これらのガイドは必須要件であり、任意の参考資料ではありません。この一覧にない内容についても、ガイドをお読みください。一般的なウェブの慣習をそのまま持ち込んだり、既存の画面ひとつからデザインシステムを推測したり、基盤となる機能があるというだけでコントロールを追加したりしないでください。作業完了とする前に、両方のガイドに照らして成果物を確認してください。

ガイドファイルそのものをお読みください。このページの要約、コードベース内の既存画面、トレーニングデータをもとに判断しないでください。これらは、ガイドがいつの間にか無視される主な原因です。

絶対に守ること

以下は最低限の基準であり、ガイドを読む代わりにはなりません。この一覧を超える内容については、ガイドをお読みください。

  • API を作り出さないでください。 現在のソースを検索して、実際のシグネチャを確認してください。React、CSS、古い GPUI の例を類推で置き換えないでください。もっともらしく見えても実在しないメソッド名を使うことが、ここで最もよくある失敗です。
  • ウェブの慣習よりデスクトップを優先してください。 キーボード操作、ウィンドウ枠、メニュー、高密度のデータ表示、サイズ変更可能な領域、永続的なナビゲーションを考慮してください。
  • Button と Link を使い分けてください。 アプリ内のコマンドにはすべて Button を使います。控えめに表示する場合は ghost または outline を使ってください。Link は外部 URL とメールアドレスに限ります。
  • 値よりトークンを優先してください。 アプリケーション UI で生の hex 値や rgb(...) を使わず、cx.theme() のセマンティックトークンを使ってください。ウィンドウのズームに対応できるよう、rem ベースのヘルパー(p_2()、gap_3()、text_sm())を使ってください。記載されている余白の数値は現在の既定スケールであり、そのまま使う値ではありません。
  • 状態が見えるようにしてください。 ホバー、フォーカス、選択、無効、読み込み中、入力検証、破壊的操作の各状態には、それぞれ明確で一貫した表示が必要です。
  • 安定した識別子を使ってください。 繰り返し表示される要素には、リストのインデックスではなく、ドメインに基づく ElementId が必要です。
  • オーバーレイについて。 Escape キーで最前面のサーフェスを閉じ、トリガーにフォーカスを戻してください。
  • 文言について。 オブジェクト名と動詞を明示してください。たとえば「「ロードマップ」を削除しますか?」に Delete ボタンを付け、「よろしいですか?」に OK ボタンを付ける形にはしないでください。

ドキュメント

  • リファレンス全文:https://gpui-kit.com/llms-full.txt を取得してください
  • コンポーネントごとの API:https://gpui-kit.com/docs/components/{name}.md を取得してください
    • 例:button.md、input.md、select.md、dialog.md、data-table.md
  • .md を URL の末尾に追加すると、サイト上の任意のページを Markdown として取得できます

クイックリファレンス

セットアップ — 常に必要です:

gpui_component::init(cx);               // in app.run(), must be first
Root::new(view, window, cx)             // first-level view in every window

ステートレス — レンダリング時に直接使用します:

Button::new("id").primary().label("OK").on_click(|_, _, _| {})

ステートフル — Entity<State> を構造体に保持し、レンダリング時に参照を渡します:

// in new():  let input = cx.new(|cx| InputState::new(window, cx));
// in render: Input::new(&self.input)

サイズ:.xsmall() .small() .medium()(デフォルト).large()

テーマ:cx.theme().primary · .background · .foreground · .border · .muted

コンポーネントカタログ

コンポーネントが必要な場合は、こちらから探してください。API の全容については、その .md ドキュメントを取得してください。

入力とフォーム
コンポーネントインポート備考
Inputinput::{Input, InputState}状態あり。テキスト、パスワード、マスク、バリデーション
NumberInputinput::{NumberInput, NumberInputEvent}状態あり。ステップ指定可能な数値入力
OtpInputinput::OtpInput状態あり。ワンタイムパスワード
Selectselect::{Select, SelectState}状態あり。ドロップダウン式の選択
Comboboxcombobox::{Combobox, ComboboxState}状態あり。検索可能な選択
Checkboxcheckbox::Checkbox状態なし。`on_click(
Switchswitch::Switch状態なし。切り替え
Radioradio::{Radio, RadioGroup}状態なし。
Sliderslider::{Slider, SliderState}状態あり。
Togglebutton::Toggle状態なし。
Ratingrating::Rating状態なし。
Stepperstepper::Stepper状態なし。増加/減少
ColorPickercolor_picker::{ColorPicker, ColorPickerState}状態あり。
DatePickerdate_picker::{DatePicker, DatePickerState}状態あり。
Formform::{v_form, h_form, field}フォームフィールド用のレイアウトコンテナー
表示とフィードバック
コンポーネントインポート備考
Buttonbutton::{Button, ButtonGroup}状態なし。主要な UI アクション
Icon{Icon, IconName}状態なし。Lucide アイコン
Badgebadge::Badge状態なし。
Tagtag::Tag状態なし。閉じることができるタグ
Avataravatar::Avatar状態なし。
Labellabel::Label状態なし。フォームラベル
Kbdkbd::Kbd状態なし。キーボードキーの表示
Alertalert::Alert状態なし。情報/成功/警告/エラー
Spinnerspinner::Spinner状態なし。読み込みインジケーター
Skeletonskeleton::Skeleton状態なし。読み込みプレースホルダー
Progressprogress::{Progress, ProgressCircle}状態なし。
Tooltiptooltip::Tooltip要素に .tooltip() を指定
HoverCardhover_card::{HoverCard, HoverCardState}状態あり。
Clipboardclipboard::Clipboard状態なし。コピーボタン
オーバーレイとポップアップ
コンポーネントインポート備考
Dialogdialog::Dialog + WindowExtwindow.open_dialog(...) で表示
AlertDialogWindowExtwindow.open_alert_dialog(...) で表示
Sheetsheet::Sheet + WindowExtサイドパネル。window.open_sheet(...) で表示
Notificationnotification::Notification + WindowExtwindow.push_notification(...) で表示
Popoverpopover::Popoverフローティングオーバーレイ
Menumenu::{PopupMenu, DropdownMenu}コンテキストメニュー
DropdownButtonbutton::DropdownButtonドロップダウンメニュー付きボタン
ナビゲーションとレイアウト
コンポーネントインポート備考
Tabs / TabBartab::{Tab, TabBar}タブインターフェース
Sidebarsidebar::{Sidebar, SidebarMenu, ...}アプリのナビゲーションパネル
TitleBarTitleBarウィンドウのタイトルバー
Breadcrumbbreadcrumb::Breadcrumbナビゲーション用パンくずリスト
Paginationpagination::Paginationページナビゲーション
Accordionaccordion::Accordion折りたたみ可能なセクション
Collapsiblecollapsible::Collapsible単一の折りたたみ可能な要素
GroupBoxgroup_box::GroupBoxラベル付きコンテナー
Resizableresizable::{h_resizable, v_resizable, resizable_panel, ResizableState}ドラッグ可能な分割ペイン
Scrollablescroll::Scrollbarカスタムスクロールバー
FocusTrapgpui_base::focus_trap::FocusTrapElementモーダル内のキーボードフォーカストラップ
データ表示
コンポーネントインポート備考
DataTabletable::{DataTable, TableState, TableDelegate}状態を保持します。高機能なテーブルです
Tabletable::{Table, ...}よりシンプルなテーブルです
VirtualList{v_virtual_list, h_virtual_list}大規模なリストを高速に表示します
Listlist::{List, ListState, ListDelegate}状態を保持します。検索可能なリストです
Treetree::{Tree, TreeState, TreeItem, TreeEntry}状態を保持します。階層構造を表示します
DescriptionListdescription_list::DescriptionListキーと値のペアを表示します
Settingssetting::Settings設定パネルです
グラフ
コンポーネントインポート備考
Chartchart::{AreaChart, BarChart, LineChart, PieChart, RadarChart}棒、折れ線、面、円グラフです
Plotplot::Plotデータには #[derive(IntoPlot)] を使用します

リファレンスファイル

  • usage.md — セットアップパターン、コンポーネントの種類、一般的な使用例
  • style-guide.md — コントリビューター向けのコードスタイル

コメント