v0.3.1
pascalorg/editorv0.3.1Mar 26, 2026by open-pascal
AI Summary
This release focuses on UI polish and bug fixes, introducing a new slider control, ESC key behavior changes, STL/OBJ export formats, and resolving state management issues.
Key Highlights
- Slider control rewrite with intuitive drag interactions and keyboard shortcuts
- ESC key fix to distinguish between canceling actions and switching modes
- New STL and OBJ export formats for 3D printing and rendering
- State management fixes including memory leak and recursive delete corrections
- Ghost wall fix to prevent crashes on reload
New Features
- Slider control rewrite
- STL export
- OBJ export
- Window panel improvements
Full Release Notes
## What's new in v0.3.1 ### Slider control rewrite Complete overhaul of the slider UI component: - Drag interaction moved from track bar to label (more intuitive, Blender-style) - Defaults to unbounded range — no more artificial min/max clamping - Arrow keys (Up/Down/Left/Right) for fine adjustments, Shift for 10× steps, Cmd/Ctrl for 0.1× precision - Scroll wheel support on the label area - Cleaner, more compact design ### ESC key fix Fixed a long-standing annoyance where pressing Escape during a mid-action (drawing a wall, placing a slab, etc.) would both cancel the current action **and** switch back to select mode. Now: - First ESC cancels the in-progress action (e.g., clears the wall draft) - Second ESC switches back to select mode Affected tools: Wall, Slab, Ceiling, Roof. ### STL and OBJ export New export formats alongside the existing GLB export. Uses Three.js built-in exporters, no new dependencies. - **STL** — standard for 3D printing (physical scale models) - **OBJ** — widely used in rendering pipelines Three format-specific buttons in the settings panel replace the single export button. ### State management fixes - Fixed recursive `deleteNodesAction` that could cause state inconsistencies — now collects all descendants first, deletes in a single batch - Fixed memory leak in temporal tracking (`prevNodesSnapshot` persisted across store re-creations) - Fixed `requestAnimationFrame` in `updateNodesAction` without cleanup — could queue duplicate callbacks - Removed unused debug variable in wall system ### Other improvements - **Ghost wall fix** — `WALL_MIN_LENGTH` increased to match grid snap step (0.5m), preventing zero-length wall artifacts that crashed on reload - **Antialias** — re-enabled default antialias on WebGPU renderer - **Post-processing** — cleaned up pipeline code, improved error handling - **Window panel** — removed artificial slider bounds on position, dimension, and frame controls - **Resize handling** — added 100ms debounce for smoother viewport resizing - **Community setup** — added issue/PR templates, CONTRIBUTING.md, simplified SETUP.md ### Packages - `@pascal-app/core@0.3.1` — [npm](https://www.npmjs.com/package/@pascal-app/core/v/0.3.1) - `@pascal-app/viewer@0.3.1` — [npm](https://www.npmjs.com/package/@pascal-app/viewer/v/0.3.1) ### Install ```bash npm install @pascal-app/core@0.3.1 @pascal-app/viewer@0.3.1 ``` ### Numbers 29 files changed. +689 / −695 lines. No breaking changes. --- **Full Changelog**: https://github.com/pascalorg/editor/compare/v0.3.0...v0.3.1