gpui-component

📁 aprilnea/gpui-skills 📅 Jan 21, 2026
14
总安装量
4
周安装量
#23479
全站排名
安装命令
npx skills add https://github.com/aprilnea/gpui-skills --skill gpui-component

Agent 安装分布

opencode 2
cursor 2
codex 2
claude-code 2
replit 1
amp 1

Skill 文档

gpui-component Best Practices

Comprehensive guide for building UI components with gpui-component, a component library for GPUI applications.

When to Apply

Reference these guidelines when:

  • Creating reusable UI components
  • Implementing theme-aware styling
  • Building dialogs, popovers, or sheets
  • Creating form components (Input, Checkbox, etc.)
  • Implementing component animations
  • Following Longbridge component patterns

Rule Categories by Priority

Priority Category Impact Prefix
1 Component Architecture CRITICAL comp-
2 Trait System CRITICAL trait-
3 Theme System HIGH theme-
4 Dialog & Popover HIGH dialog-
5 Form Components MEDIUM form-
6 Animation MEDIUM anim-

Quick Reference

1. Component Architecture (CRITICAL)

  • comp-renderonce – Use RenderOnce with #[derive(IntoElement)]
  • comp-structure – Standard component structure template
  • comp-builder – Fluent builder pattern for components
  • comp-stateful – Entity + RenderOnce for stateful components
  • comp-callbacks – Use Rc for event callbacks

2. Trait System (CRITICAL)

  • trait-styled – Implement Styled for style customization
  • trait-disableable – Implement Disableable for disabled state
  • trait-selectable – Implement Selectable for selection state
  • trait-sizable – Implement Sizable with Size enum
  • trait-parent-element – Implement ParentElement for children
  • trait-interactive – Implement InteractiveElement for events

3. Theme System (HIGH)

  • theme-colors – Use ThemeColor for consistent colors
  • theme-active – Use ActiveTheme trait for theme access
  • theme-variants – Implement variant enums (ButtonVariant, etc.)
  • theme-size-system – Use StyleSized for size-based styling

4. Dialog & Popover (HIGH)

  • dialog-root – Use Root component as window root
  • dialog-window-ext – Use WindowExt for dialog management
  • dialog-confirm – Implement confirm/alert dialogs
  • dialog-form – Build form dialogs with input state
  • popover-pattern – Popover vs PopupMenu vs Sheet selection

5. Form Components (MEDIUM)

  • form-input-state – Entity-based input state management
  • form-focus – Focus management with keyed state
  • form-validation – Input validation patterns

6. Animation (MEDIUM)

  • anim-with-animation – Use with_animation for transitions
  • anim-keyed-state – Persist animation state with use_keyed_state
  • anim-easing – Use cubic_bezier for smooth animations

Component Structure Template

#[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)>>,
}

Architecture Overview

┌─────────────────────────────────────────────────────────────┐
│  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                             │
└─────────────────────────────────────────────────────────────┘

Popup Component Comparison

Feature Dialog Popover PopupMenu Sheet
Position Centered Anchored Anchored Side
Overlay Yes No No Yes
State Root keyed_state Entity Root
Stacking Multiple Single Submenus Single
Close ESC/Click/Button ESC/Outside ESC/Select ESC/Overlay

How to Use

Read individual rule files for detailed explanations and code examples:

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

Each rule file contains:

  • Brief explanation of why it matters
  • Code examples with correct patterns
  • Common mistakes to avoid