use super::super::fixtures::{
    GraphFixtureUpdateExt, fixture_insert_group, fixture_insert_node, make_graph,
};
use super::support::{assert_conformance_trace, insert_input_port};

use crate::io::{NodeGraphPanInertiaTuning, NodeGraphPanOnDragButtons, NodeGraphPanOnScrollMode};
use crate::rules::EdgeEndpoint;
use crate::runtime::auto_pan::{AutoPanActivation, AutoPanRequest, SelectionAutoPanRequest};
use crate::runtime::conformance::{
    ConformanceAction, ConformanceCallbackEvent, ConformanceConnectEdgeSessionContract,
    ConformanceDeleteSelectionContract, ConformanceDeleteSelectionDuringNodeDragContract,
    ConformanceLayoutEdgeRouteFacts, ConformanceLayoutFactsExpectation,
    ConformanceNodeDragSessionContract, ConformanceRenderingQueryContract, ConformanceScenario,
    ConformanceTraceEvent, ConformanceViewChange,
};
use crate::runtime::connection::{
    ConnectEdgeRequest, ConnectionEndIntent, ConnectionHandleConnection, ConnectionHandleRef,
    ConnectionHandleValidity, ConnectionTargetCandidate, ConnectionTargetFromHandlesInput,
    ConnectionTargetHandle, ConnectionTargetInput, RECONNECT_EDGE_TRANSACTION_LABEL,
    ReconnectEdgeRequest, ResolvedConnectionTarget, resolve_connection_lifecycle,
};
use crate::runtime::drag::NODE_DRAG_TRANSACTION_LABEL;
use crate::runtime::events::{
    ConnectDragKind, ConnectEnd, ConnectEndOutcome, ConnectStart, NodeDragEnd, NodeDragEndOutcome,
    NodeDragStart, NodeGraphGestureEvent,
};
use crate::runtime::geometry::{HandleBounds, HandlePosition};
use crate::runtime::measurement::{MeasuredHandle, NodeMeasurement};
use crate::runtime::resize::{
    NODE_RESIZE_TRANSACTION_LABEL, NodePointerResizeRequest, NodeResizeDirection, NodeResizeRequest,
};
use crate::runtime::viewport::{
    ViewportAnimationFrame, ViewportAnimationOptions, ViewportAnimationPlan,
    ViewportAnimationRequest, ViewportDoubleClickZoomInput, ViewportDragPanInput,
    ViewportGestureContext, ViewportGestureRejection, ViewportPanInertiaRequest,
    ViewportPanRequest, ViewportPointerButton, ViewportScrollInput, ViewportTransform,
    ViewportZoomRequest, plan_viewport_pan_inertia,
};
use crate::runtime::xyflow::callbacks::{ConnectionChange, EdgeConnection};
use crate::schema::{
    ActionAvailability, ActionIntent, ActionTarget, MenuDescriptor, MenuSurface,
    NodeActionDescriptor,
};
use jellyflow_core::core::{
    CanvasPoint, CanvasRect, CanvasSize, Edge, EdgeId, EdgeKind, EdgeRouteKind, EdgeViewDescriptor,
    Graph, GraphBuilder, GraphId, Group, GroupId, Node, NodeExtent, NodeId, NodeKindKey, Port,
    PortCapacity, PortDirection, PortId, PortKey, PortKind,
};
use jellyflow_core::interaction::NodeGraphConnectionMode;
use jellyflow_core::ops::{EdgeEndpoints, GraphOp, GraphTransaction};

mod connection;
mod edge_route;
mod node_drag;
mod node_resize;
mod viewport;
