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.

Zur Installation springen

Quellinformationen

Repository
AprilNEA/gpui-skills
Letzte Quellaktivität
21. Januar 2026 um 12:14
Erkannte Sprache von SKILL.md
Englisch
Sterne
7
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
15 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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
Auf GitHub ansehen