v0.4.0 — 2D/3D Decoupling, UX Parity, Crash Fixes
Architecture
useLiveTransformsstore — New lightweight Zustand store in@pascal-app/corethat holds ephemeral node positions during drag operations. Decouples the 2D floorplan panel from the 3D scene graph. The floorplan no longer imports from Three.js.- Enables future standalone 2D mode and bidirectional split-view editing.
Features
- 2D stair rendering with tread lines and direction arrows in the floorplan
- Item footprint rendering in floorplan with rotated bounding boxes and diagonal cross marks
- Selection highlight system — indigo/purple tint on selected meshes in 3D
- Delete tool UX —
Dkey shortcut, red material hover, floating trash cursor badge - Furnish mode (
Fkey) and Zone mode (Zkey) in the action bar - Upload + delete for guides/scans in view toggles
- Stair/stair-segment support in the floating action menu (select, duplicate, delete, move)
- Box-select now includes stair nodes (bounding box intersection)
- Slider precision adapts to modifier key step size (shift/alt)
- Editor layout redesign v2 with 3D box select
- Infinity dragging slider via PointerLock API
- Stair system, scene graph utilities, read-only mode
Bug Fixes
- Fix three-mesh-bvh crash from materialIndex overflow (Sentry EDITOR-M/B, 7,600 events)
- Camera controls null guards — prevents crash on setLookAt/getTarget/moveTo (Sentry EDITOR-G)
- Pointer lock feature detection for Facebook/Instagram in-app browsers (Sentry EDITOR-6)
- Suppress THREE.Clock deprecation warning from R3F 9.x
- Fix stair elevations syncing with floor slabs
- Release scene singletons on Editor unmount
- Wall-side item bounding box offset fix
Packages
@pascal-app/core@0.4.0@pascal-app/viewer@0.4.0@pascal-app/editor@0.4.0
Full Changelog: v0.3.3...v0.4.0