diff --git a/frontend/src/components/PacketVisualizer3D.tsx b/frontend/src/components/PacketVisualizer3D.tsx index e543673..3ab2c56 100644 --- a/frontend/src/components/PacketVisualizer3D.tsx +++ b/frontend/src/components/PacketVisualizer3D.tsx @@ -1030,6 +1030,7 @@ export function PacketVisualizer3D({ // Persist visualizer controls to localStorage on change useEffect(() => { saveVisualizerSettings({ + ...getVisualizerSettings(), showAmbiguousPaths, showAmbiguousNodes, useAdvertPathHints, diff --git a/frontend/src/components/VisualizerView.tsx b/frontend/src/components/VisualizerView.tsx index 0f83ff0..faee2b0 100644 --- a/frontend/src/components/VisualizerView.tsx +++ b/frontend/src/components/VisualizerView.tsx @@ -5,6 +5,7 @@ import { PacketVisualizer3D } from './PacketVisualizer3D'; import { RawPacketList } from './RawPacketList'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; import { cn } from '@/lib/utils'; +import { getVisualizerSettings, saveVisualizerSettings } from '../utils/visualizerSettings'; interface VisualizerViewProps { packets: RawPacket[]; @@ -13,10 +14,18 @@ interface VisualizerViewProps { } export function VisualizerView({ packets, contacts, config }: VisualizerViewProps) { - const [fullScreen, setFullScreen] = useState(false); + const [fullScreen, setFullScreen] = useState(() => getVisualizerSettings().hidePacketFeed); const [paneFullScreen, setPaneFullScreen] = useState(false); const containerRef = useRef(null); + // Persist packet feed visibility to localStorage + useEffect(() => { + const current = getVisualizerSettings(); + if (current.hidePacketFeed !== fullScreen) { + saveVisualizerSettings({ ...current, hidePacketFeed: fullScreen }); + } + }, [fullScreen]); + // Sync state when browser exits fullscreen (Escape, F11, etc.) useEffect(() => { const handler = () => { diff --git a/frontend/src/utils/visualizerSettings.ts b/frontend/src/utils/visualizerSettings.ts index 82b17ab..3118abe 100644 --- a/frontend/src/utils/visualizerSettings.ts +++ b/frontend/src/utils/visualizerSettings.ts @@ -12,6 +12,7 @@ export interface VisualizerSettings { pruneStaleNodes: boolean; autoOrbit: boolean; showControls: boolean; + hidePacketFeed: boolean; } export const VISUALIZER_DEFAULTS: VisualizerSettings = { @@ -26,6 +27,7 @@ export const VISUALIZER_DEFAULTS: VisualizerSettings = { pruneStaleNodes: false, autoOrbit: false, showControls: true, + hidePacketFeed: false, }; export function getVisualizerSettings(): VisualizerSettings { @@ -74,6 +76,10 @@ export function getVisualizerSettings(): VisualizerSettings { typeof parsed.showControls === 'boolean' ? parsed.showControls : VISUALIZER_DEFAULTS.showControls, + hidePacketFeed: + typeof parsed.hidePacketFeed === 'boolean' + ? parsed.hidePacketFeed + : VISUALIZER_DEFAULTS.hidePacketFeed, }; } catch { return { ...VISUALIZER_DEFAULTS };