Skip to main content

gpui-component

gpui-component library patterns for building reusable UI components. Use when creating buttons, inputs, dialogs, forms, or following Longbridge component library conventions in GPUI applications.

Source facts

Repository
AprilNEA/gpui-skills
Last source activity
January 21, 2026 at 12:14
Detected SKILL.md language
English
Stars
8
Forks
1

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
15 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
gpui-component
description
gpui-component library patterns for building reusable UI components. Use when creating buttons, inputs, dialogs, forms, or following Longbridge component library conventions in GPUI applications.
license
MIT
metadata
{"author":"AprilNEA","version":"1.0.0"}
# gpui-component Best Practices Comprehensive guide for building UI components with [gpui-component](https://github.com/longbridge/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<dyn Fn> 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 ```rust #[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
View on GitHub