Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
74c4ea5
feat(story): Initial Gtk Storybook implementation
JumpLink Mar 19, 2025
c837505
feat(story): Enhance Storybook guidelines and improve story registration
JumpLink Mar 19, 2025
e942102
feat(story): Expand Storybook guidelines and enhance widget management
JumpLink Mar 19, 2025
2389a90
feat(cursur): Added new GObject rules + renamed storybook -> storyboo…
JumpLink Mar 19, 2025
3c35d45
refactor(cursor): Update guidelines files
JumpLink Mar 19, 2025
f405177
Upgrade npm dependencies to latest including ts-for-gir gir types to …
JumpLink Mar 22, 2025
3d16036
Upgrade esbuildf git submodule
JumpLink Mar 22, 2025
7dc7d91
chore: Fix lint error warnings
JumpLink Aug 16, 2025
a529591
Update yarn to 4.9.2
JumpLink Aug 16, 2025
0b05116
Upgrade gir typescript type definitions
JumpLink Aug 16, 2025
f87e05c
Update yarn.lock and submodule references for excalibur and excalibur…
JumpLink Aug 16, 2025
22a0d64
Upgrade dependencies
JumpLink Aug 17, 2025
a104ffb
refactor(engine): Consolidate engine story widgets and update build s…
JumpLink Aug 17, 2025
03545ce
feat(cursor): Add git commit best practices rules
JumpLink Aug 17, 2025
6ded73f
refactor(build): Replace manual blueprint compilation with vite plugin
JumpLink Aug 17, 2025
73b972a
chore(excalibur): Update submodule with package.json formatting fix
JumpLink Aug 17, 2025
4f80d14
feat(data-gjs): Add sprite resources for reusable sprite handling
JumpLink Aug 18, 2025
4900b89
feat(ui-gjs): Create new reusable UI components package
JumpLink Aug 18, 2025
27dd035
feat(ui-gjs): Add sprite display widgets
JumpLink Aug 18, 2025
78eefb5
refactor(maker-gjs): Update imports to use migrated packages
JumpLink Aug 18, 2025
1e3d47d
refactor(maker-gjs): Remove migrated sprite files
JumpLink Aug 18, 2025
1fdfe0f
docs(ui-gjs): Add comprehensive package documentation
JumpLink Aug 18, 2025
3b65edf
chore(deps): Update package dependencies after migration
JumpLink Aug 18, 2025
082a3e6
fix(data-gjs): Clean up GObject property definitions
JumpLink Aug 18, 2025
fe4ab9f
docs(cursor): Update storybook guidelines for blueprint imports
JumpLink Aug 18, 2025
29cd9e6
feat(data-gjs): Modernize to pure Gdk.Texture architecture
JumpLink Aug 18, 2025
d7a4204
feat(ui-gjs): Add Picture-based scaling to SpriteWidget
JumpLink Aug 18, 2025
3a2486b
feat(ui-gjs): Add comprehensive sprite mock data system
JumpLink Aug 18, 2025
8d60964
feat(ui-gjs): Add interactive sprite widget story
JumpLink Aug 18, 2025
0003fa4
feat(ui-gjs): Export stories and update package structure
JumpLink Aug 18, 2025
b612a34
feat(storybook-gjs): Integrate UI component stories
JumpLink Aug 18, 2025
9edd88d
docs: Update package documentation for texture architecture
JumpLink Aug 18, 2025
58d3fa5
chore: Update yarn lockfile after dependency changes
JumpLink Aug 18, 2025
fe13e15
feat(data-gjs): Implement GdkPaintable-based sprite sub-texture rende…
JumpLink Aug 19, 2025
24507b1
feat(data-gjs): Modernize SpriteResource with GdkPaintable support
JumpLink Aug 19, 2025
ba7d909
fix(data-gjs): Correct sprite position calculation in createSprites
JumpLink Aug 19, 2025
129c51b
chore(data-gjs): Update exports and dependencies for sprite system
JumpLink Aug 19, 2025
f07d9c3
feat(data-gjs): Implement GdkPaintable.Interface with new ts-for-gir …
JumpLink Aug 21, 2025
052f611
refactor(storybook-gjs): Improve tooltip implementation following GNO…
JumpLink Aug 21, 2025
b105241
feat(storybook-gjs): Add initial SpriteSheet Stroy
JumpLink Aug 21, 2025
40cfe0f
refactor(data-gjs): Clean up SpritePaintable with GTK4 best practices
JumpLink Aug 21, 2025
41eb187
refactor(data-gjs): Clean up SpriteResource implementation
JumpLink Aug 21, 2025
4219acb
feat(ui-gjs): Enhance Blueprint templates for declarative UI
JumpLink Aug 21, 2025
8308b4d
refactor(ui-gjs): Streamline widget implementations
JumpLink Aug 21, 2025
e70638e
refactor(ui-gjs): Clean up SpriteSheetWidget story implementation
JumpLink Aug 21, 2025
5c5364a
fix(ui-gjs): Fix sprite widget initialization timing and property han…
JumpLink Aug 21, 2025
f780870
refactor(ui-gjs): Simplify sprite widget story and inline mock data
JumpLink Aug 21, 2025
0becc30
docs(data-gjs): Update sprite resource documentation and examples
JumpLink Aug 21, 2025
6db4a54
feat(ui-gjs): Implement Paintable-level sprite scaling with proper si…
JumpLink Aug 22, 2025
72c10ac
feat(data-gjs): Implement pixel-perfect sprite scaling with GSK neare…
JumpLink Aug 22, 2025
64e5e93
refactor(data-gjs,ui-gjs): Add clean scale API and optimize widget in…
JumpLink Aug 22, 2025
07a9b60
refactor: clean sprite scaling API and optimize widget initialization
JumpLink Aug 22, 2025
ee6872c
refactor(data-gjs): Remove scale property from SpritePaintable and Sp…
JumpLink Aug 22, 2025
27d5cc3
refactor(data-gjs): Convert SpriteSheet from GObject to plain TypeScr…
JumpLink Aug 22, 2025
d0f17e8
fix(ui-gjs): Implement widget-level scaling for SpriteWidget
JumpLink Aug 22, 2025
6e26c0e
refactor(ui-gjs): Update SpriteSheetWidget for simplified SpriteSheet…
JumpLink Aug 22, 2025
ae6f72c
refactor(data-gjs,ui-gjs): Consolidate sprite classes into unified Sp…
JumpLink Aug 22, 2025
9753996
fix(data-gjs,ui-gjs): resolve GC disposal issues in Sprite classes
JumpLink Aug 22, 2025
5b21315
fix(ui-gjs): add proper disposal chain to SpriteSheetWidget
JumpLink Aug 22, 2025
4265007
perf(ui-gjs): optimize story updates to prevent unnecessary widget re…
JumpLink Aug 22, 2025
2c6e0ae
refactor(ui-gjs,maker-gjs): implement GTK 4 lifecycle patterns for GC…
JumpLink Aug 23, 2025
56c5604
refactor(ui-gjs): simplify SpriteWidgetStory lifecycle management
JumpLink Aug 23, 2025
19500ca
docs(data-gjs): improve Sprite class documentation and vfunc comments
JumpLink Aug 23, 2025
34b9664
docs: enhance gobject-patterns with GTK 4 lifecycle best practices
JumpLink Aug 23, 2025
c5abb55
docs: expand gobject-patterns with GTK 4 modern development guidelines
JumpLink Aug 23, 2025
a95a8fb
fix(data-gjs): implement GC-safe disposal for Sprite paintable objects
JumpLink Aug 23, 2025
8bb6b52
refactor(data-gjs): separate Sprite data from GObject paintable to av…
JumpLink Aug 23, 2025
767f6de
refactor(data-gjs): split Sprite and SpritePaintable into separate files
JumpLink Aug 23, 2025
15a2fad
docs(gobject-patterns): update guidelines for GTK 4 development and T…
JumpLink Aug 23, 2025
607e874
docs: update README files to reflect new Sprite/SpritePaintable archi…
JumpLink Aug 23, 2025
0260ece
fix(gjs): resolve GC callback errors in sprite system
JumpLink Aug 23, 2025
6a4395b
style(engine-gjs): improve code formatting and consistency
JumpLink Aug 23, 2025
daa9563
feat(data-gjs): enhance GObject patterns and property management
JumpLink Aug 23, 2025
6c9c1f8
feat(widgets): implement comprehensive GC-safe lifecycle management
JumpLink Aug 23, 2025
78854e2
docs(cursor-rules): enhance cross-referencing between gobject-pattern…
JumpLink Aug 23, 2025
6865bb2
docs(storybook-guidelines): add cross-references to blueprint-templat…
JumpLink Aug 23, 2025
ffd747c
docs(storybook-guidelines): align guidelines with actual codebase imp…
JumpLink Aug 23, 2025
b379331
feat(ui-gjs): implement sprite sheet selection highlighting with GTK-…
JumpLink Aug 23, 2025
3d92d95
refactor(ui-gjs): update sprite widget story to use real Lokiri Fores…
JumpLink Aug 23, 2025
5309c68
feat(storybook): improve range control integer handling
JumpLink Aug 23, 2025
a67e48e
feat(storybook): enhance StoryMeta API with description and controls …
JumpLink Aug 23, 2025
dfc1a3c
feat(ui-gjs): create reusable MapEditorPanel widget with ViewSwitcherBar
JumpLink Aug 23, 2025
3599aa2
refactor(apps): clean up widget exports and remove unused layer compo…
JumpLink Aug 23, 2025
db581f1
chore: update package configurations and reorganize project structure
JumpLink Aug 23, 2025
90b0572
refactor(packages): regenerate barrel exports and improve module stru…
JumpLink Aug 23, 2025
be6ef70
fix(ui-gjs): update widget exports to include map-editor components
JumpLink Aug 23, 2025
a8a948b
refactor(application-window): clean up imports by removing unused com…
JumpLink Aug 23, 2025
ee4785f
refactor(storybook-guidelines): update documentation to remove deprec…
JumpLink Aug 23, 2025
d317f11
feat(ui-gjs): enhance TilesetSelector to support multiple sprite sheets
JumpLink Aug 25, 2025
bbe0ef4
feat(storybook): add TilesetSelector story with interactive controls
JumpLink Aug 25, 2025
210fef4
feat(ui-gjs): update MapEditorPanel to use enhanced TilesetSelector API
JumpLink Aug 25, 2025
ec2961d
feat(storybook): enhance MapEditorPanel story with multiple tilesets
JumpLink Aug 25, 2025
329a8cc
chore(ui-gjs): update story exports and fix build configuration
JumpLink Aug 25, 2025
7347bb8
style(ui-gjs): fix Blueprint template formatting consistency
JumpLink Aug 25, 2025
f19babc
chore(ui-gjs): regenerate barrel exports for new components
JumpLink Aug 25, 2025
54eb561
refactor(ui-gjs): remove deprecated setSpriteSheet methods
JumpLink Aug 25, 2025
dbf5dff
refactor(storybook): simplify TilesetSelector story controls
JumpLink Aug 25, 2025
66fe01a
refactor(storybook): remove all unnecessary controls from MapEditorPa…
JumpLink Aug 25, 2025
9e10af2
refactor(ui-gjs): clean up MapEditorPanel story and imports
JumpLink Aug 26, 2025
c8bc283
refactor(engine-gjs): replace message-received with typed event signals
JumpLink Aug 26, 2025
14d7189
docs(engine-gjs): modernize documentation and remove outdated migrati…
JumpLink Aug 26, 2025
69ac0b0
refactor(data): create unified GameProjectResource abstract base class
JumpLink Aug 26, 2025
c38553f
chore(data-core): add resource directory to barrel exports
JumpLink Aug 26, 2025
9ddc769
feat(data-core): create unified SpriteSetResource interface and simpl…
JumpLink Aug 26, 2025
97aa15c
refactor(data-gjs): implement unified SpriteSetResource interface
JumpLink Aug 26, 2025
81517c1
refactor(data-excalibur): implement unified SpriteSetResource interface
JumpLink Aug 26, 2025
3501b6b
feat(maker-gjs): integrate GameProjectResource with project and map l…
JumpLink Aug 26, 2025
f0c489d
refactor(ui-gjs): update MapEditorPanel API for unified data interface
JumpLink Aug 26, 2025
93c20fc
style(data-core): apply consistent quote formatting in barrel exports
JumpLink Aug 26, 2025
93d10fb
feat(maker-gjs): implement parallel project loading to fix path resol…
JumpLink Aug 26, 2025
ec8165b
fix(ui-gjs): resolve layer display issue in MapEditorPanel
JumpLink Aug 26, 2025
8d26452
fix(ui-gjs): resolve sprite sheet selection styling after widget refa…
JumpLink Aug 27, 2025
dc145ae
refactor(ui-gjs): restructure sprite-sheet widget CSS for improved hi…
JumpLink Aug 27, 2025
5484339
refactor(ui-gjs): simplify layout and styling in layer and tileset se…
JumpLink Aug 29, 2025
542e1db
feat(engine-core): add EngineCommandEventDataMap interface for type s…
JumpLink Aug 29, 2025
256746a
refactor(engine-core): unify message system and remove obsolete types
JumpLink Aug 29, 2025
27ced53
refactor(engine-core): remove deprecated types and clean legacy refer…
JumpLink Aug 29, 2025
1ebece7
feat(rpc): implement unified type-safe RPC communication system
JumpLink Aug 29, 2025
79acbcb
Revert "feat(rpc): implement unified type-safe RPC communication system"
JumpLink Aug 30, 2025
9604731
refactor(ui-gjs): update TilesetSelector story to use consistent scal…
JumpLink Aug 30, 2025
ff3d823
refactor(engine-core): remove deprecated types and clean up legacy re…
JumpLink Aug 30, 2025
49cbc4d
docs(cursor-rules): streamline and enhance documentation for Blueprin…
JumpLink Aug 30, 2025
6fde76e
docs: add comprehensive documentation for story-gjs and storybook-gjs…
JumpLink Aug 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cursor/rules/app-architecture.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: Architecture standards for end-user applications
globs: apps/**/*.ts, apps/**/*.tsx
globs: apps/**/*.ts
alwaysApply: false
---
# Application Architecture
Expand Down
118 changes: 118 additions & 0 deletions .cursor/rules/blueprint-templates.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
---
description: Guidelines for Blueprint UI templates
globs: **/*.blp
alwaysApply: false
---

> See also: [@gobject-patterns](mdc:.cursor/rules/gobject-patterns.mdc)

# Blueprint Templates (TL;DR)

**Goal:** Declarative UI in `.blp`; logic in TypeScript. Bind data, don’t hardcode.

## Basics
- Use Blueprint for all GTK UI; follow GNOME HIG.
- Keep structure declarative; avoid programmatic widget construction.
- Namespaces: `using Gtk 4.0; using Adw 1;` etc.
- Prefix template names with `$` and extend proper base classes (`Adw.Window`, `Adw.Bin`, …).

## Binding (default choice)
- `bind template.prop` for one-way display.
- `bind template.prop bidirectional` for editable fields.
- Prefer expressions over ad-hoc callbacks for simple transforms.
- Avoid magic constants; bind instead.

```blp
template $MyWidget : Gtk.Box {
Label title { label: bind template.title; visible: bind template.title as <bool>; }
Entry edit { text: bind template.title bidirectional; }
}
```

## Signals (wire in .blp, implement in TS)

* Connect in `.blp`: `clicked => $_on_action();`
* Implement in class; annotate with `@Gtk.Template.Callback()` when needed.
* Use consistent `_onXxx()` naming.

```blp
Button save { action-name: "app.save"; clicked => $_on_save(); }
```

```ts
_on_save() { this.emit('save-requested'); }
```

## TypeScript Registration (minimal pattern)

```ts
import GObject from '@girs/gobject-2.0';
import Gtk from '@girs/gtk-4.0';
import Template from './my-widget.blp';

export class MyWidget extends Gtk.Box {
static {
GObject.registerClass({
GTypeName: 'MyWidget',
Template,
InternalChildren: ['title', 'save'],
Properties: {
title: GObject.ParamSpec.string('title','Title','', GObject.ParamFlags.READWRITE,''),
},
}, this);
}
declare _title: Gtk.Label;
declare _save: Gtk.Button;
}
```

## Actions, Menus & State

* Prefer `GAction`/`action-name` over manual `clicked` where possible.
* Bind action targets to template state.
* Use menu models via `MenuButton.menu-model`.

```blp
Button { action-name: "app.export"; action-target: bind template.doc_id; }
MenuButton { icon-name: "open-menu-symbolic"; menu-model: template.menu; }
```

## Conditional UI

* Toggle with boolean binds; compute labels inline.

```blp
Label err { label: bind template.error; visible: bind template.has_error; styles: ["error"]; }
Button submit { sensitive: bind template.form_valid; label: bind template.loading ? "Loading…" : "Submit"; }
```

## Layout (pragmatic defaults)

* Prefer shallow hierarchies; use spacing/margins instead of nested boxes.
* Use `hexpand/halign/valign` intentionally for responsiveness.

```blp
Box root {
orientation: vertical; spacing: 12; margin-top: 24; margin-bottom: 24; margin-start: 24; margin-end: 24;
Box header {
orientation: horizontal; spacing: 6;
Label title { label: bind template.title; hexpand: true; xalign: 0; styles: ["title-1"]; }
Button close { icon-name: "window-close-symbolic"; clicked => $_on_close(); }
}
}
```

## Accessibility (must-haves)

* Meaningful labels/`accessible-name` for interactives.
* Keyboard navigation preserved; avoid focus traps.
* Tooltips only for non-obvious controls.

## Best Practices (checklist)

* ✅ Bind > hardcode; actions > ad-hoc handlers.
* ✅ Split complex UIs into multiple templates; keep names meaningful.
* ✅ Use `InternalChildren` only for elements you must touch in code.
* ✅ Keep margins/spacing consistent; prefer Adwaita styles.
* ❌ No deep container nesting; no business logic in `.blp`.
* ❌ Don’t connect signals in code when `.blp` can do it.
98 changes: 98 additions & 0 deletions .cursor/rules/comprehensive-documentation-creation.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
description: Comprehensive documentation creation expert for clear, accurate, and user-focused documentation across all project types and technologies.
alwaysApply: false
---
# Comprehensive Documentation Creation Expert

You are an expert technical writer creating clear, accurate, and user-focused documentation across all project types.

## Core Principles

- **Clarity**: Write for your audience's technical level using clear, concise language
- **Accuracy**: Test all code examples and verify technical details before publishing
- **Consistency**: Maintain uniform tone, terminology, and formatting throughout
- **User-Centered**: Focus on what users need to accomplish, not system capabilities

## Documentation Types

### User Documentation
- Step-by-step instructions with action-oriented titles ("How To Deploy Application")
- Prerequisites, expected results, and troubleshooting for each guide
- Convert technical information to user-friendly language
- Reference UI elements as users see them

### Technical Documentation
- Code documentation focusing on why, not what
- API documentation with usage examples and parameter descriptions
- Project documentation with architecture diagrams and decision logs
- Installation, configuration, and deployment instructions

### Code Standards by Language
- **Python**: Google-style docstrings for functions, methods, classes
- **TypeScript/JavaScript**: JSDoc comments for functions, classes, complex types
- **Solidity**: NatSpec comments for smart contracts
- Keep inline comments concise and meaningful

## Document Structure

**Standard Format:**
1. Clear, descriptive title
2. Brief introduction (1-3 sentences)
3. Prerequisites
4. Main content with logical headings
5. Working examples
6. Troubleshooting
7. Related information

**Organization:**
- Logical hierarchy with appropriate headings
- Numbered lists for sequential steps
- Bullet points for non-sequential information
- Cross-references to related sections

## Writing Standards

- Use active voice and grammatically correct English
- Define technical jargon when necessary
- Include code blocks with syntax highlighting
- Add diagrams/screenshots for complex concepts
- Ensure proper markdown formatting

## Specialized Guidelines

### API Documentation
- Document all endpoints with request/response examples
- Include parameters, headers, error responses
- Cover authentication and rate limiting

### Project Documentation
- Up-to-date README with setup and usage examples
- Document project structure and architectural decisions
- Include contribution guidelines and dependencies

## Quality Assurance

- Test all procedures and code examples
- Verify links and references work correctly
- Get user feedback and incorporate improvements
- Update documentation with feature changes
- Use version control and collaborative review processes

## Content Conversion

When converting technical specs to user documentation:
1. Identify user-facing functionality
2. Determine target audience technical level
3. Extract main user actions
4. Translate technical terms appropriately
5. Organize in logical sequence
6. Add expected outcomes
7. Include troubleshooting

## Output Formats

- **Markdown**: Standard syntax with proper front matter
- **Static Sites**: Optimized navigation, search, mobile accessibility
- **Interactive**: Runnable examples, tutorials, user feedback mechanisms

Remember: Great documentation helps people accomplish their goals efficiently and confidently.
2 changes: 1 addition & 1 deletion .cursor/rules/excalibur-packages.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: Guidelines for Excalibur packages (engine-excalibur, data-excalibur)
globs: packages/*-excalibur/**/*.ts, packages/excalibur*/**/*.ts
globs: packages/*-excalibur/**/*.ts,packages/excalibur-*/**/*.ts
alwaysApply: false
---
# Excalibur Packages
Expand Down
6 changes: 3 additions & 3 deletions .cursor/rules/general-guidelines.mdc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
description: General guidelines for the project
globs: **/*
alwaysApply: false
description:
globs:
alwaysApply: true
---
# General Guidelines

Expand Down
50 changes: 50 additions & 0 deletions .cursor/rules/git-commit-best-practices.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
description: Enforces consistent, frequent, and meaningful git commits following conventional commit standards. Automatically analyzes recent commit history to maintain project-specific patterns and ensures atomic, review-friendly commits during development work.
globs:
alwaysApply: false
---
You are a meticulous developer who commits code frequently with clear, atomic commits following conventional commit standards.

## Core Philosophy for AI Development
- **Regular Commits for Large Tasks**: Break down complex changes into meaningful, logical commits
- **Working Code Only**: Never commit broken or non-functional code - always validate before committing
- **Continuous Validation**: Use yarn commands regularly to ensure code quality and functionality

## Validation Strategy
Before every commit, validate your code using the available yarn commands:

**For regular commits (recommended):**
- `yarn build` - Build all packages to catch compilation errors
- `yarn check` - Run type checking across all packages
- `yarn format` - Ensure code formatting consistency with Prettier

**For major changes only:**
- `yarn check` - ⚠️ **WARNING**: This runs type checking across ALL packages and can be slow. Only use after larger changes.

**Individual package validation:**
- `yarn workspace @pixelrpg/[package-name] run check` - Type check specific package
- `yarn workspace @pixelrpg/[package-name] run build` - Build specific package

Always fix all errors and warnings before proceeding with the commit

## Commit Practices for AI Agents
- **Atomic Changes**: Each commit represents one logical change or feature addition
- **Conventional Format**: Use `<type>[scope]: <description>` format (feat, fix, docs, refactor, test, chore, etc.)
- **Regular Progress Commits**: For larger tasks, commit at logical milestones, not just at completion
- **Self-Contained**: Each commit should leave the codebase in a working state

## Consistency Strategy
Before committing:
- **Analyze Recent History**: Check `git log --oneline -10 | cat` to match existing commit patterns
- **Follow Project Style**: Use the same commit types and scoping patterns already established
- **Preserve Team Patterns**: Adapt to any project-specific conventions visible in git history

## Quality Standards
- Use imperative mood in subject lines ("Add feature" not "Added feature")
- Keep subject lines under 50 characters
- Include scope when applicable (component, module, file area)
- Ensure commits are review-friendly and tell a coherent development story
- Match the established commit style of the project

## Key Principle for AI Agents
**Always ensure the codebase remains functional after each commit.** Use the [yarn workspace commands](mdc:.cursor/rules/package-management.mdc) to validate your changes before committing. This maintains a clean development history and makes debugging easier.
11 changes: 10 additions & 1 deletion .cursor/rules/gjs-packages.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: Guidelines for GJS packages (engine-gjs, data-gjs, message-channel-gjs)
globs: packages/*-gjs/**/*.ts, apps/maker-gjs/**/*.ts
globs: packages/*-gjs/**/*.ts,apps/*-gjs/**/*.ts
alwaysApply: false
---
# GJS Packages
Expand All @@ -20,13 +20,22 @@ GJS packages (`*-gjs`) implement core interfaces for the GNOME JavaScript (GJS)
- Handle GJS-specific memory management concerns
- Use GTK modern patterns (like composite templates)
- Properly integrate with GObject-introspection
- Prefer GObject-oriented and UI-first approach for cleaner, more declarative code

## GObject Properties and Signals
- Use GObject properties instead of regular class properties for better UI integration
- Implement property bindings in UI templates to reduce manual widget updates
- Leverage GObject signals for class-to-class communication
- Design components to emit signals rather than accept callbacks
- Use template callbacks to handle signals from child components

## UI Components
- Create reusable GTK widgets and components
- Follow GNOME Human Interface Guidelines
- Implement responsive layouts
- Handle proper resource management
- Support accessibility features
- Use Blueprint templates for declarative UI definitions when possible

## Integration with Core Packages
- Implement core interfaces faithfully
Expand Down
Loading