* Fix: Restore floor drag/delete functionality for imported legacy JSON files
Summary
Fixed an issue where floors became impossible to drag or delete after importing JSON configuration files created in versions prior to 0.9.1.
Root Cause
The migration process was executing elevator parent migration before all level nodes had their children fully normalized. As a result, imported scenes could end up with inconsistent parent-child relationships, causing floor management operations such as dragging and deletion to fail.
Changes Made
Refactored migrateNodes() into a two-pass migration process.
Added normalization for level nodes:
Ensures level values are valid finite numbers.
Removes references to missing child nodes.
Preserves only valid children during migration.
Moved elevator migration logic to a dedicated second pass:
Elevator parent migration now runs only after all level.children relationships have been stabilized.
Prevents invalid hierarchy reconstruction when importing legacy JSON files.
Result
Imported layouts from versions prior to 0.9.1 now correctly preserve floor hierarchy, allowing floors to be dragged, reordered, and deleted as expected.
* Update use-scene.ts
Key Additions & Changes:
Interactive Length Control: Replaced the static "Length" text with an editable SliderControl component.
Vector Math Implementation: Added handleUpdateLength, a function that recalculates the wall's end position ($P_{end}$) based on the user's input while preserving the wall's original direction.
Real-time Geometry Updates: Integrated the change with useScene and dirtyNodes to ensure the 3D mesh updates instantly in the viewer as the slider moves.
UX Consistency: Used the existing SliderControl and PanelSection patterns to match the Pascal Editor's design system.
Fixes#191