/**
 * Vue Flow
 * @module vue-flow
 */

export { default as VueFlow } from './container/VueFlow/VueFlow.vue'

export { default as Handle } from './components/Handle/Handle.vue'

export { default as Panel } from './components/Panel/Panel.vue'

export { default as StraightEdge } from './components/Edges/StraightEdge'
export { default as StepEdge } from './components/Edges/StepEdge'
export { default as BezierEdge } from './components/Edges/BezierEdge'
export { default as SimpleBezierEdge } from './components/Edges/SimpleBezierEdge'
export { default as SmoothStepEdge } from './components/Edges/SmoothStepEdge'
export { default as BaseEdge } from './components/Edges/BaseEdge.vue'
export { default as EdgeText } from './components/Edges/EdgeText.vue'
export { default as EdgeLabelRenderer } from './components/Edges/EdgeLabelRenderer.vue'

export {
  getBezierPath,
  getSimpleBezierPath,
  getSmoothStepPath,
  getStraightPath,
  getSimpleEdgeCenter,
  getBezierEdgeCenter,
} from './components/Edges/utils'

export {
  isNode,
  isEdge,
  isGraphNode,
  isGraphEdge,
  addEdge,
  updateEdge,
  getOutgoers,
  getIncomers,
  getConnectedEdges,
  getTransformForBounds,
  getRectOfNodes,
  pointToRendererPoint,
  rendererPointToPoint,
  /** @deprecated - will be removed in the next major version, use `rendererPointToPoint` instead */
  rendererPointToPoint as graphPosToZoomedPos,
  getNodesInside,
  getMarkerId,
  getBoundsofRects,
  connectionExists,
  clamp,
} from './utils/graph'

/**
 * @deprecated - Use store instance and call `applyChanges` with template-ref or the one received by `onPaneReady` instead
 * Intended for options API
 * In composition API you can access apply utilities from `useVueFlow`
 */
export { applyChanges, applyEdgeChanges, applyNodeChanges } from './utils/changes'

export { defaultEdgeTypes, defaultNodeTypes } from './utils/defaultNodesEdges'

export { VueFlow as VueFlowInjection, NodeId as NodeIdInjection } from './context'

export { useZoomPanHelper } from './composables/useZoomPanHelper'
export { useVueFlow } from './composables/useVueFlow'
export { useHandle } from './composables/useHandle'
export { useNode } from './composables/useNode'
export { useEdge } from './composables/useEdge'
export { useGetPointerPosition } from './composables/useGetPointerPosition'
export { useNodeId } from './composables/useNodeId'
export { useConnection } from './composables/useConnection'
export { useHandleConnections } from './composables/useHandleConnections'
export { useNodesData } from './composables/useNodesData'
export { useNodesInitialized } from './composables/useNodesInitialized'

export { VueFlowError, ErrorCode, isErrorOfType } from './utils/errors'

export * from './types'
