Bundles three fixes to the shared PolygonEditor (slab/ceiling boundary &
hole editing):
- Console error: defer the cross-store onPolygonPreview(null) write into a
useEffect so committing a drag no longer updates another component
(NodeArrowHandles) during PolygonEditor's render.
- Vertex grab: make the edge bar visual-only (raycast disabled) so it can
no longer steal clicks from the vertex/midpoint handles overlapping it;
edge dragging runs through the chevron arrow outside the polygon edge.
- Outlines: render each handle as a single SCENE_LAYER mesh with a node
material (MeshBasicNodeMaterial / useArrowMaterial) and pointer handlers
attached directly, matching the registry arrow gizmos. This puts the
handles in the ink-edge post-pass so vertex/midpoint cylinders, the
chevron arrows, and the move sphere read as outlined 3D plates while
staying grabbable. No paired hit mesh needed — the R3F event raycaster
picks SCENE_LAYER too.
Known follow-up (tracked, out of scope): SCENE_LAYER handles can appear in
user-driven capture-mode snapshots, same as the existing arrow gizmos; to
be hidden uniformly later via the thumbnail:before-capture toggle.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>