import * as d3 from 'd3'; interface SimulationNode extends d3.SimulationNodeDatum { id: string; [key: string]: any; } interface SimulationLink extends d3.SimulationLinkDatum { source: string | SimulationNode; target: string | SimulationNode; [key: string]: any; } interface ForceSimulationOptions { chargeStrength?: number; linkDistance?: number; linkStrength?: number; collisionStrength?: number; collisionRadius?: number; centerStrength?: number; width: number; height: number; alphaDecay?: number; alphaTarget?: number; warmAlpha?: number; alphaMin?: number; stabilizeOnStop?: boolean; tickThrottleMs?: number; maxSimulationTimeMs?: number; velocityDecay?: number; onTick?: (nodes: SimulationNode[], links: SimulationLink[], sim: d3.Simulation) => void; } interface UseForceSimulationReturn { nodes: SimulationNode[]; links: SimulationLink[]; restart: () => void; stop: () => void; isRunning: boolean; alpha: number; } interface UseForceSimulationReturnExt extends UseForceSimulationReturn { setForcesEnabled: (enabled: boolean) => void; } declare function useForceSimulation(initialNodes: SimulationNode[], initialLinks: SimulationLink[], options: ForceSimulationOptions): UseForceSimulationReturnExt; declare function useDrag(simulation: d3.Simulation | null | undefined): { onDragStart: (event: any, node: SimulationNode) => void; onDrag: (event: any, node: SimulationNode) => void; onDragEnd: (event: any, node: SimulationNode) => void; }; export { type ForceSimulationOptions as F, type SimulationLink as S, type UseForceSimulationReturn as U, type SimulationNode as a, useForceSimulation as b, type UseForceSimulationReturnExt as c, useDrag as u };