Refactor Toolbox button code into separate, focused classes following Single Responsibility Principle.
New Button Classes:
- ExitXRButton (src/objects/buttons/ExitXRButton.ts)
* Encapsulates exit XR functionality
* Takes XR experience, scene, parent, and optional position
* Handles click events to exit XR session
* Provides dispose() and transform getter
- ConfigButton (src/objects/buttons/ConfigButton.ts)
* Encapsulates config panel toggle functionality
* Uses dependency injection for toggle callback
* Configurable position relative to parent
* Provides dispose() and transform getter
- RenderModeButton (src/objects/buttons/RenderModeButton.ts)
* Encapsulates render mode cycling functionality
* Internally manages render mode state
* Automatically recreates button with new label on mode change
* Cycles through all available rendering modes
* Provides dispose() and transform getter
Toolbox Changes:
- Removed createRenderModeButton() and updateRenderModeButton() methods
- Simplified setupXRButton() to instantiate button classes
- Reduced button-related code by ~120 lines
- Added button instance properties for cleanup
- Clean, declarative button creation with clear positioning
Benefits:
- Single Responsibility Principle - each button class has one purpose
- Reusability - buttons can be used anywhere in the app
- Testability - each button can be tested independently
- Cleaner code - Toolbox class focuses on core tool management
- Better dependencies - clear interfaces and dependency injection
- Easier maintenance - button logic isolated and self-contained
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>