import type { LayoutDirection, MindMapData } from "../types"; import type { MindMapPlugin } from "../plugins/types"; interface RemarkTooltip { nodeId: string; text: string; x: number; y: number; } export interface UseMindMapViewParams { svgRef: React.RefObject; mapData: MindMapData[]; direction: LayoutDirection; colorMap: Record; setColorMap: React.Dispatch>>; foldOverrides: Record; /** Editor-only branch split state; viewer omits it (defaults to {}). */ splitIndices?: Record; plugins?: MindMapPlugin[]; readonly?: boolean; searchQuery: string; activeTags: string[]; /** Notified when the user changes zoom (skips the initial render). */ onZoomChange?: (zoom: number) => void; } /** * Shared view layer for {@link MindMap} and {@link MindMapViewer}: turns the * tree data into laid-out nodes/edges and owns the purely visual concerns * (pan/zoom, branch-color persistence, search highlighting, expand animation, * and the remark tooltip). Data ownership, drag/canvas-pan, and the entrance * auto-fit effect stay in the consuming component because they differ. */ export declare function useMindMapView({ svgRef, mapData, direction, colorMap, setColorMap, foldOverrides, splitIndices, plugins, readonly, searchQuery, activeTags, onZoomChange, }: UseMindMapViewParams): { newNodeIds: Set; remarkTooltip: RemarkTooltip | null; handleRemarkHover: (nodeId: string | null) => void; handleAutoFit: () => void; triggerExpandAnimation: (nodeId: string) => void; pan: { x: number; y: number; }; setPan: import("react").Dispatch>; zoom: number; setZoom: import("react").Dispatch>; animateTo: (targetZoom: number, targetPanX: number, targetPanY: number) => void; autoFit: () => { zoom: number; panX: number; panY: number; } | undefined; zoomIn: () => void; zoomOut: () => void; contentCenter: { x: number; y: number; }; panToNode: (nodeId: string) => void; nodes: import("..").LayoutNode[]; edges: import("..").Edge[]; nodeMap: Record; searchState: import("../utils/search").MindMapSearchState; expandDelays: Record; }; export {};