/* eslint-disable @typescript-eslint/no-explicit-any */ import React, { useState, useEffect } from "react"; import { Minus, Plus, Maximize, Map, MapPin, Minimize, Eye, EyeOff } from "lucide-react"; type NavigatorProps = { mindmap: any; fullscreen: boolean; toggleFullscreen?: () => void; // Optional for now onToggleMiniMap?: () => void; miniMapOpen?: boolean; }; export const MindmapNavigator = ({ mindmap, fullscreen, toggleFullscreen, onToggleMiniMap, miniMapOpen, }: NavigatorProps) => { const [scale, setScale] = useState(100); const [isReadonly, setIsReadonly] = useState(false); useEffect(() => { if (!mindmap) return; const handleScale = (s: number) => { setScale(Math.round(s * 100)); }; mindmap.on("scale", handleScale); // eslint-disable-next-line react-hooks/set-state-in-effect setScale(Math.round(mindmap.view.scale * 100)); // Handle readonly state sync if needed // mindmap.on("mode_change", (mode) => setIsReadonly(mode === 'readonly')); return () => { mindmap.off("scale", handleScale); }; }, [mindmap]); const handleZoomIn = () => mindmap?.view.enlarge(); const handleZoomOut = () => mindmap?.view.narrow(); const handleCenter = () => mindmap?.renderer.setRootNodeCenter(); const handleReadonly = () => { const newMode = !isReadonly; setIsReadonly(newMode); mindmap?.setMode(newMode ? 'readonly' : 'edit'); }; const handleScaleInput = (e: React.ChangeEvent) => { const val = parseInt(e.target.value); if (!isNaN(val) && val > 0) { setScale(val); const cx = mindmap.width / 2; const cy = mindmap.height / 2; mindmap.view.setScale(val / 100, cx, cy); } }; return (
{toggleFullscreen && ( )}
%
); };