{len.toFixed(2)} ft
{editing ? 'stretching' : 'drag ends to stretch'}
);
}
function PipeEndHandle({ conn }: { conn: WorldConnector }) {
const draggingId = useBuilder((s) => s.draggingId);
const [hovered, setHovered] = useState(false);
useCursor(hovered, 'grab');
const quat = useMemo(() => dirQuat(conn.dir), [conn.dir[0], conn.dir[1], conn.dir[2]]);
const active = hovered || (draggingId !== null && dragCtx.connectorKey === conn.key);
const onPointerDown = (e: ThreeEvent