/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
/**
* Tool-specific overlays for measure and section tools
*/
import { useViewerStore } from '@/store';
import { MeasureOverlay } from './tools/MeasurePanel';
import { SectionOverlay } from './tools/SectionPanel';
import { AddElementOverlay } from './tools/AddElementOverlay';
import { GizmoOverlay } from './tools/GizmoOverlay';
import { WallEndpointOverlay } from './tools/WallEndpointOverlay';
import { SplitOverlay } from './tools/SplitOverlay';
import { SplitNumericInput } from './tools/SplitNumericInput';
import { SpaceSketchOverlay } from './tools/SpaceSketchOverlay';
export function ToolOverlays() {
const activeTool = useViewerStore((s) => s.activeTool);
if (activeTool === 'spaceSketch') {
return ;
}
if (activeTool === 'measure') {
return ;
}
if (activeTool === 'section') {
return ;
}
if (activeTool === 'addElement') {
return ;
}
if (activeTool === 'split') {
// SplitOverlay renders the SVG preview (perpendicular guide /
// slab outline / ghost cut line). SplitNumericInput renders
// the floating numeric panel next to the cursor for precise
// single-click element splits (wall / beam / column / member).
// The two are siblings rather than nested so the SVG layer
// stays pointer-events-none while the numeric input is
// interactive.
return (
<>
>
);
}
// Select tool: surface the move gizmo + wall-endpoint handles when
// edit mode is on. Both overlays self-gate (return null when their
// conditions aren't met) so always-rendering them here is safe.
// Wall handles render on top of the gizmo so a wall selection
// gets both axis arrows for translate AND endpoint drag handles
// for resize — they don't overlap visually (gizmo at bbox center,
// handles at start/end).
if (activeTool === 'select') {
return (
<>
>
);
}
return null;
}