diff --git a/packages/background/src/types.ts b/packages/background/src/types.ts index f3b24898..6f9a7155 100644 --- a/packages/background/src/types.ts +++ b/packages/background/src/types.ts @@ -6,7 +6,7 @@ export enum BackgroundVariant { Cross = 'cross', } -export interface BackgroundProps { +export type BackgroundProps = { color?: string; className?: string; gap?: number | [number, number]; @@ -14,4 +14,4 @@ export interface BackgroundProps { lineWidth?: number; variant?: BackgroundVariant; style?: CSSProperties; -} +}; diff --git a/packages/controls/src/ControlButton.tsx b/packages/controls/src/ControlButton.tsx index 3d4f6f91..9952fde0 100644 --- a/packages/controls/src/ControlButton.tsx +++ b/packages/controls/src/ControlButton.tsx @@ -1,18 +1,10 @@ -import { FC, PropsWithChildren } from 'react'; +import type { FC, PropsWithChildren } from 'react'; import cc from 'classcat'; -import { ControlButtonProps } from './types'; +import type { ControlButtonProps } from './types'; -const ControlButton: FC> = ({ - children, - className, - ...rest -}) => ( - ); diff --git a/packages/controls/src/Controls.tsx b/packages/controls/src/Controls.tsx index 11c50df4..e2c96162 100644 --- a/packages/controls/src/Controls.tsx +++ b/packages/controls/src/Controls.tsx @@ -1,6 +1,8 @@ -import { memo, FC, useEffect, useState, PropsWithChildren } from 'react'; +import { memo, useEffect, useState } from 'react'; +import type { FC, PropsWithChildren } from 'react'; import cc from 'classcat'; -import { useStore, useStoreApi, useReactFlow, ReactFlowState, Panel } from '@reactflow/core'; +import { useStore, useStoreApi, useReactFlow, Panel } from '@reactflow/core'; +import type { ReactFlowState } from '@reactflow/core'; import PlusIcon from './Icons/Plus'; import MinusIcon from './Icons/Minus'; @@ -9,7 +11,7 @@ import LockIcon from './Icons/Lock'; import UnlockIcon from './Icons/Unlock'; import ControlButton from './ControlButton'; -import { ControlProps } from './types'; +import type { ControlProps } from './types'; const isInteractiveSelector = (s: ReactFlowState) => s.nodesDraggable && s.nodesConnectable && s.elementsSelectable; diff --git a/packages/controls/src/types.ts b/packages/controls/src/types.ts index 20cfa433..3cfcad29 100644 --- a/packages/controls/src/types.ts +++ b/packages/controls/src/types.ts @@ -1,7 +1,7 @@ -import { ButtonHTMLAttributes, HTMLAttributes } from 'react'; -import { FitViewOptions, PanelPosition } from '@reactflow/core'; +import type { ButtonHTMLAttributes, HTMLAttributes } from 'react'; +import type { FitViewOptions, PanelPosition } from '@reactflow/core'; -export interface ControlProps extends HTMLAttributes { +export type ControlProps = HTMLAttributes & { showZoom?: boolean; showFitView?: boolean; showInteractive?: boolean; @@ -11,6 +11,6 @@ export interface ControlProps extends HTMLAttributes { onFitView?: () => void; onInteractiveChange?: (interactiveStatus: boolean) => void; position?: PanelPosition; -} +}; export type ControlButtonProps = ButtonHTMLAttributes; diff --git a/packages/core/src/components/A11yDescriptions/index.tsx b/packages/core/src/components/A11yDescriptions/index.tsx index a7e4a9cc..ae9c3a0b 100644 --- a/packages/core/src/components/A11yDescriptions/index.tsx +++ b/packages/core/src/components/A11yDescriptions/index.tsx @@ -1,6 +1,6 @@ import { CSSProperties } from 'react'; import { useStore } from '../../hooks/useStore'; -import { ReactFlowState } from '../../types'; +import type { ReactFlowState } from '../../types'; const style: CSSProperties = { display: 'none' }; const ariaLiveStyle: CSSProperties = { diff --git a/packages/core/src/components/Attribution/index.tsx b/packages/core/src/components/Attribution/index.tsx index 61b2c408..ad4ed22b 100644 --- a/packages/core/src/components/Attribution/index.tsx +++ b/packages/core/src/components/Attribution/index.tsx @@ -1,5 +1,5 @@ import Panel from '../Panel'; -import { PanelPosition, ProOptions } from '../../types'; +import type { PanelPosition, ProOptions } from '../../types'; type AttributionProps = { proOptions?: ProOptions; diff --git a/packages/core/src/components/ConnectionLine/index.tsx b/packages/core/src/components/ConnectionLine/index.tsx index a8a38b21..767d16f3 100644 --- a/packages/core/src/components/ConnectionLine/index.tsx +++ b/packages/core/src/components/ConnectionLine/index.tsx @@ -4,9 +4,10 @@ import shallow from 'zustand/shallow'; import { useStore } from '../../hooks/useStore'; import { getBezierPath } from '../Edges/BezierEdge'; import { getSmoothStepPath } from '../Edges/SmoothStepEdge'; -import { ConnectionLineType, ConnectionLineComponent, HandleType, Position, ReactFlowStore } from '../../types'; import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge'; import { internalsSymbol } from '../../utils'; +import type { ConnectionLineComponent, HandleType, ReactFlowStore } from '../../types'; +import { Position, ConnectionLineType } from '../../types'; type ConnectionLineProps = { connectionNodeId: string; diff --git a/packages/core/src/components/Edges/BaseEdge.tsx b/packages/core/src/components/Edges/BaseEdge.tsx index 67c74c33..65a9cf37 100644 --- a/packages/core/src/components/Edges/BaseEdge.tsx +++ b/packages/core/src/components/Edges/BaseEdge.tsx @@ -1,5 +1,5 @@ import EdgeText from './EdgeText'; -import { BaseEdgeProps } from '../../types'; +import type { BaseEdgeProps } from '../../types'; const BaseEdge = ({ path, diff --git a/packages/core/src/components/Edges/BezierEdge.tsx b/packages/core/src/components/Edges/BezierEdge.tsx index 11ad64b1..d7a02534 100644 --- a/packages/core/src/components/Edges/BezierEdge.tsx +++ b/packages/core/src/components/Edges/BezierEdge.tsx @@ -2,7 +2,8 @@ import { memo } from 'react'; import BaseEdge from './BaseEdge'; import { getBezierEdgeCenter } from './utils'; -import { BezierEdgeProps, Position } from '../../types'; +import { Position } from '../../types'; +import type { BezierEdgeProps } from '../../types'; export interface GetBezierPathParams { sourceX: number; diff --git a/packages/core/src/components/Edges/EdgeAnchor.tsx b/packages/core/src/components/Edges/EdgeAnchor.tsx index a88ed364..baf83cdd 100644 --- a/packages/core/src/components/Edges/EdgeAnchor.tsx +++ b/packages/core/src/components/Edges/EdgeAnchor.tsx @@ -1,4 +1,4 @@ -import { FC, MouseEvent as ReactMouseEvent, SVGAttributes } from 'react'; +import type { FC, MouseEvent as ReactMouseEvent, SVGAttributes } from 'react'; import cc from 'classcat'; import { Position } from '../../types'; diff --git a/packages/core/src/components/Edges/EdgeText.tsx b/packages/core/src/components/Edges/EdgeText.tsx index 78974281..10a17be5 100644 --- a/packages/core/src/components/Edges/EdgeText.tsx +++ b/packages/core/src/components/Edges/EdgeText.tsx @@ -1,4 +1,5 @@ -import { memo, useRef, useState, useEffect, FC, PropsWithChildren } from 'react'; +import { memo, useRef, useState, useEffect } from 'react'; +import type { FC, PropsWithChildren } from 'react'; import cc from 'classcat'; import { EdgeTextProps, Rect } from '../../types'; diff --git a/packages/core/src/components/Edges/SimpleBezierEdge.tsx b/packages/core/src/components/Edges/SimpleBezierEdge.tsx index 3082d9ce..e549be58 100644 --- a/packages/core/src/components/Edges/SimpleBezierEdge.tsx +++ b/packages/core/src/components/Edges/SimpleBezierEdge.tsx @@ -1,7 +1,9 @@ import { memo } from 'react'; -import { EdgeProps, Position } from '../../types'; + import BaseEdge from './BaseEdge'; import { getBezierEdgeCenter } from './utils'; +import { Position } from '../../types'; +import type { EdgeProps } from '../../types'; export interface GetSimpleBezierPathParams { sourceX: number; diff --git a/packages/core/src/components/Edges/SmoothStepEdge.tsx b/packages/core/src/components/Edges/SmoothStepEdge.tsx index 476cc0b0..e61f8e46 100644 --- a/packages/core/src/components/Edges/SmoothStepEdge.tsx +++ b/packages/core/src/components/Edges/SmoothStepEdge.tsx @@ -1,8 +1,9 @@ import { memo } from 'react'; -import { SmoothStepEdgeProps, Position, XYPosition } from '../../types'; import BaseEdge from './BaseEdge'; import { getEdgeCenter } from './utils'; +import { Position } from '../../types'; +import type { SmoothStepEdgeProps, XYPosition } from '../../types'; export interface GetSmoothStepPathParams { sourceX: number; diff --git a/packages/core/src/components/Edges/StepEdge.tsx b/packages/core/src/components/Edges/StepEdge.tsx index fb2527c0..df2646a7 100644 --- a/packages/core/src/components/Edges/StepEdge.tsx +++ b/packages/core/src/components/Edges/StepEdge.tsx @@ -1,7 +1,7 @@ import { memo, useMemo } from 'react'; -import { SmoothStepEdgeProps } from '../../types'; import SmoothStepEdge from './SmoothStepEdge'; +import type { SmoothStepEdgeProps } from '../../types'; const StepEdge = memo((props: SmoothStepEdgeProps) => ( { if (typeof markerEndId !== 'undefined' && markerEndId) { diff --git a/packages/core/src/components/Edges/wrapEdge.tsx b/packages/core/src/components/Edges/wrapEdge.tsx index 35d7b133..4ac3b139 100644 --- a/packages/core/src/components/Edges/wrapEdge.tsx +++ b/packages/core/src/components/Edges/wrapEdge.tsx @@ -1,4 +1,5 @@ -import { memo, ComponentType, useState, useMemo, KeyboardEvent, useRef } from 'react'; +import { memo, useState, useMemo, useRef } from 'react'; +import type { ComponentType, KeyboardEvent } from 'react'; import cc from 'classcat'; import { useStoreApi } from '../../hooks/useStore'; @@ -7,8 +8,8 @@ import { handleMouseDown } from '../Handle/handler'; import { EdgeAnchor } from './EdgeAnchor'; import { getMarkerId } from '../../utils/graph'; import { getMouseHandler } from './utils'; -import { EdgeProps, WrapEdgeProps, Connection } from '../../types'; import { elementSelectionKeys } from '../../utils'; +import type { EdgeProps, WrapEdgeProps, Connection } from '../../types'; export default (EdgeComponent: ComponentType) => { const EdgeWrapper = ({ diff --git a/packages/core/src/components/Handle/handler.ts b/packages/core/src/components/Handle/handler.ts index e8d58fc9..ff726d30 100644 --- a/packages/core/src/components/Handle/handler.ts +++ b/packages/core/src/components/Handle/handler.ts @@ -1,8 +1,9 @@ -import { MouseEvent as ReactMouseEvent } from 'react'; +import type { MouseEvent as ReactMouseEvent } from 'react'; import { StoreApi } from 'zustand'; import { getHostForElement } from '../../utils'; -import { OnConnect, ConnectionMode, Connection, HandleType, ReactFlowState } from '../../types'; +import { ConnectionMode } from '../../types'; +import type { OnConnect, Connection, HandleType, ReactFlowState } from '../../types'; type ValidConnectionFunc = (connection: Connection) => boolean; diff --git a/packages/core/src/components/Handle/index.tsx b/packages/core/src/components/Handle/index.tsx index f4627d8a..c47035a9 100644 --- a/packages/core/src/components/Handle/index.tsx +++ b/packages/core/src/components/Handle/index.tsx @@ -4,10 +4,11 @@ import shallow from 'zustand/shallow'; import { useStore, useStoreApi } from '../../hooks/useStore'; import NodeIdContext from '../../contexts/NodeIdContext'; -import { HandleProps, Connection, ReactFlowState, Position } from '../../types'; import { checkElementBelowIsValid, handleMouseDown } from './handler'; import { getHostForElement } from '../../utils'; import { addEdge } from '../../utils/graph'; +import { Position } from '../../types'; +import type { HandleProps, Connection, ReactFlowState } from '../../types'; const alwaysValid = () => true; diff --git a/packages/core/src/components/Nodes/DefaultNode.tsx b/packages/core/src/components/Nodes/DefaultNode.tsx index 50210c2e..99835a3c 100644 --- a/packages/core/src/components/Nodes/DefaultNode.tsx +++ b/packages/core/src/components/Nodes/DefaultNode.tsx @@ -1,7 +1,8 @@ import { memo } from 'react'; import Handle from '../../components/Handle'; -import { NodeProps, Position } from '../../types'; +import { Position } from '../../types'; +import type { NodeProps } from '../../types'; const DefaultNode = ({ data, diff --git a/packages/core/src/components/Nodes/InputNode.tsx b/packages/core/src/components/Nodes/InputNode.tsx index 0038f9fe..e6983317 100644 --- a/packages/core/src/components/Nodes/InputNode.tsx +++ b/packages/core/src/components/Nodes/InputNode.tsx @@ -1,7 +1,8 @@ import { memo } from 'react'; import Handle from '../../components/Handle'; -import { NodeProps, Position } from '../../types'; +import { Position } from '../../types'; +import type { NodeProps } from '../../types'; const InputNode = ({ data, isConnectable, sourcePosition = Position.Bottom }: NodeProps) => ( <> diff --git a/packages/core/src/components/Nodes/OutputNode.tsx b/packages/core/src/components/Nodes/OutputNode.tsx index 0298e6eb..fdcb5add 100644 --- a/packages/core/src/components/Nodes/OutputNode.tsx +++ b/packages/core/src/components/Nodes/OutputNode.tsx @@ -1,7 +1,8 @@ import { memo } from 'react'; import Handle from '../../components/Handle'; -import { NodeProps, Position } from '../../types'; +import { Position } from '../../types'; +import type { NodeProps } from '../../types'; const OutputNode = ({ data, isConnectable, targetPosition = Position.Top }: NodeProps) => ( <> diff --git a/packages/core/src/components/Nodes/utils.ts b/packages/core/src/components/Nodes/utils.ts index b3116139..dca9f297 100644 --- a/packages/core/src/components/Nodes/utils.ts +++ b/packages/core/src/components/Nodes/utils.ts @@ -1,8 +1,9 @@ import { MouseEvent } from 'react'; import { StoreApi } from 'zustand'; -import { HandleElement, Node, NodeOrigin, Position, ReactFlowState } from '../../types'; import { getDimensions } from '../../utils'; +import { Position } from '../../types'; +import type { HandleElement, Node, NodeOrigin, ReactFlowState } from '../../types'; export const getHandleBounds = ( selector: string, diff --git a/packages/core/src/components/Nodes/wrapNode.tsx b/packages/core/src/components/Nodes/wrapNode.tsx index 76d53d19..afb1f761 100644 --- a/packages/core/src/components/Nodes/wrapNode.tsx +++ b/packages/core/src/components/Nodes/wrapNode.tsx @@ -1,4 +1,5 @@ -import { useEffect, useRef, memo, ComponentType, MouseEvent, KeyboardEvent } from 'react'; +import { useEffect, useRef, memo } from 'react'; +import type { ComponentType, MouseEvent, KeyboardEvent } from 'react'; import cc from 'classcat'; import { useStoreApi } from '../../hooks/useStore'; @@ -7,8 +8,8 @@ import { ARIA_NODE_DESC_KEY } from '../A11yDescriptions'; import useDrag from '../../hooks/useDrag'; import useUpdateNodePositions from '../../hooks/useUpdateNodePositions'; import { getMouseHandler, handleNodeClick } from './utils'; -import { NodeProps, WrapNodeProps, XYPosition } from '../../types'; import { elementSelectionKeys } from '../../utils'; +import type { NodeProps, WrapNodeProps, XYPosition } from '../../types'; export const arrowKeyDiffs: Record = { ArrowUp: { x: 0, y: -1 }, diff --git a/packages/core/src/components/NodesSelection/index.tsx b/packages/core/src/components/NodesSelection/index.tsx index 17b24805..5e75d5ed 100644 --- a/packages/core/src/components/NodesSelection/index.tsx +++ b/packages/core/src/components/NodesSelection/index.tsx @@ -3,16 +3,17 @@ * made a selection with on or several nodes */ -import { memo, useRef, MouseEvent, KeyboardEvent, useEffect } from 'react'; +import { memo, useRef, useEffect } from 'react'; +import type { MouseEvent, KeyboardEvent } from 'react'; import cc from 'classcat'; import shallow from 'zustand/shallow'; import { useStore, useStoreApi } from '../../hooks/useStore'; -import { Node, ReactFlowState } from '../../types'; import { getRectOfNodes } from '../../utils/graph'; import useDrag from '../../hooks/useDrag'; import { arrowKeyDiffs } from '../Nodes/wrapNode'; import useUpdateNodePositions from '../../hooks/useUpdateNodePositions'; +import type { Node, ReactFlowState } from '../../types'; export interface NodesSelectionProps { onSelectionContextMenu?: (event: MouseEvent, nodes: Node[]) => void; diff --git a/packages/core/src/components/Panel/index.tsx b/packages/core/src/components/Panel/index.tsx index 756caca6..7228f1a7 100644 --- a/packages/core/src/components/Panel/index.tsx +++ b/packages/core/src/components/Panel/index.tsx @@ -1,8 +1,8 @@ -import { HTMLAttributes, ReactNode } from 'react'; +import type { HTMLAttributes, ReactNode } from 'react'; import cc from 'classcat'; -import { PanelPosition, ReactFlowState } from '../../types'; import { useStore } from '../../hooks/useStore'; +import type { PanelPosition, ReactFlowState } from '../../types'; export type PanelProps = HTMLAttributes & { position: PanelPosition; diff --git a/packages/core/src/components/ReactFlowProvider/index.tsx b/packages/core/src/components/ReactFlowProvider/index.tsx index 703c9c06..971041c1 100644 --- a/packages/core/src/components/ReactFlowProvider/index.tsx +++ b/packages/core/src/components/ReactFlowProvider/index.tsx @@ -1,9 +1,10 @@ -import { FC, PropsWithChildren, useRef } from 'react'; +import { useRef } from 'react'; +import type { FC, PropsWithChildren } from 'react'; import { StoreApi } from 'zustand'; import { Provider } from '../../contexts/RFStoreContext'; import { createRFStore } from '../../store'; -import { ReactFlowState } from '../../types'; +import type { ReactFlowState } from '../../types'; const ReactFlowProvider: FC = ({ children }) => { const storeRef = useRef | null>(null); diff --git a/packages/core/src/components/SelectionListener/index.tsx b/packages/core/src/components/SelectionListener/index.tsx index 5655fc6f..6177f53d 100644 --- a/packages/core/src/components/SelectionListener/index.tsx +++ b/packages/core/src/components/SelectionListener/index.tsx @@ -1,8 +1,8 @@ import { memo, useEffect } from 'react'; import shallow from 'zustand/shallow'; -import { ReactFlowState, OnSelectionChangeFunc, Node, Edge } from '../../types'; import { useStore, useStoreApi } from '../../hooks/useStore'; +import type { ReactFlowState, OnSelectionChangeFunc, Node, Edge } from '../../types'; type SelectionListenerProps = { onSelectionChange?: OnSelectionChangeFunc; diff --git a/packages/core/src/components/StoreUpdater/index.tsx b/packages/core/src/components/StoreUpdater/index.tsx index 2b39cb8a..2f98a453 100644 --- a/packages/core/src/components/StoreUpdater/index.tsx +++ b/packages/core/src/components/StoreUpdater/index.tsx @@ -3,7 +3,7 @@ import { StoreApi } from 'zustand'; import shallow from 'zustand/shallow'; import { useStore, useStoreApi } from '../../hooks/useStore'; -import { Node, Edge, ReactFlowState, CoordinateExtent, ReactFlowProps, ReactFlowStore } from '../../types'; +import type { Node, Edge, ReactFlowState, CoordinateExtent, ReactFlowProps, ReactFlowStore } from '../../types'; type StoreUpdaterProps = Pick< ReactFlowProps, diff --git a/packages/core/src/components/UserSelection/index.tsx b/packages/core/src/components/UserSelection/index.tsx index 3809d579..142be18f 100644 --- a/packages/core/src/components/UserSelection/index.tsx +++ b/packages/core/src/components/UserSelection/index.tsx @@ -7,8 +7,8 @@ import shallow from 'zustand/shallow'; import { useStore, useStoreApi } from '../../hooks/useStore'; import { getSelectionChanges } from '../../utils/changes'; -import { XYPosition, ReactFlowState, NodeChange, EdgeChange, Rect } from '../../types'; import { getConnectedEdges, getNodesInside } from '../../utils/graph'; +import type { XYPosition, ReactFlowState, NodeChange, EdgeChange, Rect } from '../../types'; type SelectionRect = Rect & { startX: number; diff --git a/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx b/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx index cfcba262..d718c65f 100644 --- a/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx +++ b/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx @@ -1,16 +1,18 @@ import { memo, useCallback } from 'react'; import { useStore } from '../../hooks/useStore'; -import { EdgeMarker, ReactFlowState } from '../../types'; import { getMarkerId } from '../../utils/graph'; import { useMarkerSymbol } from './MarkerSymbols'; -interface MarkerProps extends EdgeMarker { +import type { EdgeMarker, ReactFlowState } from '../../types'; + +type MarkerProps = EdgeMarker & { id: string; -} -interface MarkerDefinitionsProps { +}; + +type MarkerDefinitionsProps = { defaultColor: string; rfId?: string; -} +}; const Marker = ({ id, diff --git a/packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx b/packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx index b0a5757e..fbdd4972 100644 --- a/packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx +++ b/packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx @@ -1,6 +1,8 @@ import { useMemo } from 'react'; -import { MarkerType, EdgeMarker } from '../../types'; + import { devWarn } from '../../utils'; +import { MarkerType } from '../../types'; +import type { EdgeMarker } from '../../types'; type SymbolProps = Omit; diff --git a/packages/core/src/container/EdgeRenderer/index.tsx b/packages/core/src/container/EdgeRenderer/index.tsx index 93b7adaa..e07948ad 100644 --- a/packages/core/src/container/EdgeRenderer/index.tsx +++ b/packages/core/src/container/EdgeRenderer/index.tsx @@ -8,39 +8,39 @@ import ConnectionLine from '../../components/ConnectionLine/index'; import MarkerDefinitions from './MarkerDefinitions'; import { getEdgePositions, getHandle, getNodeData } from './utils'; -import { Position, Edge, ConnectionMode, ReactFlowState } from '../../types'; import { GraphViewProps } from '../GraphView'; import { devWarn } from '../../utils'; +import { ConnectionMode, Position } from '../../types'; +import type { Edge, ReactFlowState } from '../../types'; -interface EdgeRendererProps - extends Pick< - GraphViewProps, - | 'edgeTypes' - | 'connectionLineType' - | 'connectionLineType' - | 'connectionLineStyle' - | 'connectionLineComponent' - | 'connectionLineContainerStyle' - | 'connectionLineContainerStyle' - | 'onEdgeClick' - | 'onEdgeDoubleClick' - | 'defaultMarkerColor' - | 'onlyRenderVisibleElements' - | 'onEdgeUpdate' - | 'onEdgeContextMenu' - | 'onEdgeMouseEnter' - | 'onEdgeMouseMove' - | 'onEdgeMouseLeave' - | 'onEdgeUpdateStart' - | 'onEdgeUpdateEnd' - | 'edgeUpdaterRadius' - | 'noPanClassName' - | 'elevateEdgesOnSelect' - | 'rfId' - | 'disableKeyboardA11y' - > { +type EdgeRendererProps = Pick< + GraphViewProps, + | 'edgeTypes' + | 'connectionLineType' + | 'connectionLineType' + | 'connectionLineStyle' + | 'connectionLineComponent' + | 'connectionLineContainerStyle' + | 'connectionLineContainerStyle' + | 'onEdgeClick' + | 'onEdgeDoubleClick' + | 'defaultMarkerColor' + | 'onlyRenderVisibleElements' + | 'onEdgeUpdate' + | 'onEdgeContextMenu' + | 'onEdgeMouseEnter' + | 'onEdgeMouseMove' + | 'onEdgeMouseLeave' + | 'onEdgeUpdateStart' + | 'onEdgeUpdateEnd' + | 'edgeUpdaterRadius' + | 'noPanClassName' + | 'elevateEdgesOnSelect' + | 'rfId' + | 'disableKeyboardA11y' +> & { elevateEdgesOnSelect: boolean; -} +}; const selector = (s: ReactFlowState) => ({ connectionNodeId: s.connectionNodeId, diff --git a/packages/core/src/container/EdgeRenderer/utils.ts b/packages/core/src/container/EdgeRenderer/utils.ts index b458a2c3..eee01706 100644 --- a/packages/core/src/container/EdgeRenderer/utils.ts +++ b/packages/core/src/container/EdgeRenderer/utils.ts @@ -1,19 +1,20 @@ -import { ComponentType } from 'react'; +import type { ComponentType } from 'react'; + import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; import wrapEdge from '../../components/Edges/wrapEdge'; -import { +import { internalsSymbol, rectToBox } from '../../utils'; +import { Position } from '../../types'; +import type { EdgeProps, EdgeTypes, EdgeTypesWrapped, HandleElement, NodeHandleBounds, Node, - Position, Rect, Transform, XYPosition, } from '../../types'; -import { internalsSymbol, rectToBox } from '../../utils'; export type CreateEdgeTypes = (edgeTypes: EdgeTypes) => EdgeTypesWrapped; diff --git a/packages/core/src/container/FlowRenderer/Pane.tsx b/packages/core/src/container/FlowRenderer/Pane.tsx index 113945bf..60502182 100644 --- a/packages/core/src/container/FlowRenderer/Pane.tsx +++ b/packages/core/src/container/FlowRenderer/Pane.tsx @@ -1,4 +1,4 @@ -import { MouseEvent } from 'react'; +import type { MouseEvent } from 'react'; import cc from 'classcat'; import { useStore } from '../../hooks/useStore'; diff --git a/packages/core/src/container/FlowRenderer/index.tsx b/packages/core/src/container/FlowRenderer/index.tsx index 76accfbb..e3faed9c 100644 --- a/packages/core/src/container/FlowRenderer/index.tsx +++ b/packages/core/src/container/FlowRenderer/index.tsx @@ -1,4 +1,5 @@ -import { memo, ReactNode, WheelEvent, MouseEvent } from 'react'; +import { memo } from 'react'; +import type { ReactNode, WheelEvent, MouseEvent } from 'react'; import { useStore, useStoreApi } from '../../hooks/useStore'; import useGlobalKeyHandler from '../../hooks/useGlobalKeyHandler'; @@ -8,8 +9,7 @@ import ZoomPane from '../ZoomPane'; import UserSelection from '../../components/UserSelection'; import NodesSelection from '../../components/NodesSelection'; import Pane from './Pane'; - -import { ReactFlowState } from '../../types'; +import type { ReactFlowState } from '../../types'; export type FlowRendererProps = Omit< GraphViewProps, diff --git a/packages/core/src/container/GraphView/index.tsx b/packages/core/src/container/GraphView/index.tsx index e94698e7..690b66f6 100644 --- a/packages/core/src/container/GraphView/index.tsx +++ b/packages/core/src/container/GraphView/index.tsx @@ -5,39 +5,35 @@ import NodeRenderer from '../NodeRenderer'; import EdgeRenderer from '../EdgeRenderer'; import ViewportWrapper from '../Viewport'; import useOnInitHandler from '../../hooks/useOnInitHandler'; -import { - NodeTypesWrapped, - EdgeTypesWrapped, - ConnectionLineType, - KeyCode, - ReactFlowProps, - Viewport, - CoordinateExtent, - NodeOrigin, -} from '../../types'; +import type { EdgeTypesWrapped, NodeTypesWrapped, ReactFlowProps } from '../../types'; -export interface GraphViewProps - extends Omit { - nodeTypes: NodeTypesWrapped; - edgeTypes: EdgeTypesWrapped; - selectionKeyCode: KeyCode | null; - deleteKeyCode: KeyCode | null; - multiSelectionKeyCode: KeyCode | null; - connectionLineType: ConnectionLineType; - onlyRenderVisibleElements: boolean; - translateExtent: CoordinateExtent; - minZoom: number; - maxZoom: number; - defaultMarkerColor: string; - selectNodesOnDrag: boolean; - noDragClassName: string; - noWheelClassName: string; - noPanClassName: string; - defaultViewport: Viewport; - rfId: string; - disableKeyboardA11y: boolean; - nodeOrigin: NodeOrigin; -} +export type GraphViewProps = Omit & + Required< + Pick< + ReactFlowProps, + | 'selectionKeyCode' + | 'deleteKeyCode' + | 'multiSelectionKeyCode' + | 'connectionLineType' + | 'onlyRenderVisibleElements' + | 'translateExtent' + | 'minZoom' + | 'maxZoom' + | 'defaultMarkerColor' + | 'selectNodesOnDrag' + | 'noDragClassName' + | 'noDragClassName' + | 'noWheelClassName' + | 'noPanClassName' + | 'defaultViewport' + | 'disableKeyboardA11y' + | 'nodeOrigin' + > + > & { + nodeTypes: NodeTypesWrapped; + edgeTypes: EdgeTypesWrapped; + rfId: string; + }; const GraphView = ({ nodeTypes, diff --git a/packages/core/src/container/NodeRenderer/index.tsx b/packages/core/src/container/NodeRenderer/index.tsx index b576ff69..70a62dfe 100644 --- a/packages/core/src/container/NodeRenderer/index.tsx +++ b/packages/core/src/container/NodeRenderer/index.tsx @@ -1,4 +1,5 @@ -import { memo, useMemo, ComponentType, useEffect, useRef } from 'react'; +import { memo, useMemo, useEffect, useRef } from 'react'; +import type { ComponentType } from 'react'; import shallow from 'zustand/shallow'; import useVisibleNodes from '../../hooks/useVisibleNodes'; @@ -6,8 +7,9 @@ import { useStore } from '../../hooks/useStore'; import { clampPosition, devWarn, internalsSymbol } from '../../utils'; import { containerStyle } from '../../styles'; import { GraphViewProps } from '../GraphView'; -import { Position, ReactFlowState, WrapNodeProps } from '../../types'; import { getPositionWithOrigin } from './utils'; +import { Position } from '../../types'; +import type { ReactFlowState, WrapNodeProps } from '../../types'; type NodeRendererProps = Pick< GraphViewProps, diff --git a/packages/core/src/container/NodeRenderer/utils.ts b/packages/core/src/container/NodeRenderer/utils.ts index 6893aeb9..ebac7413 100644 --- a/packages/core/src/container/NodeRenderer/utils.ts +++ b/packages/core/src/container/NodeRenderer/utils.ts @@ -1,12 +1,12 @@ -import { ComponentType } from 'react'; +import type { ComponentType } from 'react'; import DefaultNode from '../../components/Nodes/DefaultNode'; import InputNode from '../../components/Nodes/InputNode'; import OutputNode from '../../components/Nodes/OutputNode'; import GroupNode from '../../components/Nodes/GroupNode'; import wrapNode from '../../components/Nodes/wrapNode'; -import { NodeTypes, NodeProps, NodeTypesWrapped, NodeOrigin, XYPosition } from '../../types'; import { devWarn } from '../../utils'; +import type { NodeTypes, NodeProps, NodeTypesWrapped, NodeOrigin, XYPosition } from '../../types'; export type CreateNodeTypes = (nodeTypes: NodeTypes) => NodeTypesWrapped; diff --git a/packages/core/src/container/ReactFlow/Wrapper.tsx b/packages/core/src/container/ReactFlow/Wrapper.tsx index 77924393..297e3b49 100644 --- a/packages/core/src/container/ReactFlow/Wrapper.tsx +++ b/packages/core/src/container/ReactFlow/Wrapper.tsx @@ -1,4 +1,4 @@ -import { FC, PropsWithChildren } from 'react'; +import type { FC, PropsWithChildren } from 'react'; import { useStoreApi } from '../../hooks/useStore'; import ReactFlowProvider from '../../components/ReactFlowProvider'; diff --git a/packages/core/src/container/ReactFlow/index.tsx b/packages/core/src/container/ReactFlow/index.tsx index 0d5af4ba..6cb99d33 100644 --- a/packages/core/src/container/ReactFlow/index.tsx +++ b/packages/core/src/container/ReactFlow/index.tsx @@ -1,4 +1,5 @@ -import { CSSProperties, forwardRef } from 'react'; +import { forwardRef } from 'react'; +import type { CSSProperties } from 'react'; import cc from 'classcat'; import Attribution from '../../components/Attribution'; @@ -9,27 +10,24 @@ import OutputNode from '../../components/Nodes/OutputNode'; import GroupNode from '../../components/Nodes/GroupNode'; import SelectionListener from '../../components/SelectionListener'; import StoreUpdater from '../../components/StoreUpdater'; - -import { - ConnectionLineType, - ConnectionMode, +import A11yDescriptions from '../../components/A11yDescriptions'; +import { createEdgeTypes } from '../EdgeRenderer/utils'; +import { createNodeTypes } from '../NodeRenderer/utils'; +import GraphView from '../GraphView'; +import Wrapper from './Wrapper'; +import { infiniteExtent } from '../../store/initialState'; +import { useNodeOrEdgeTypes } from './utils'; +import { ConnectionLineType, ConnectionMode, PanOnScrollMode } from '../../types'; +import type { EdgeTypes, EdgeTypesWrapped, NodeOrigin, NodeTypes, NodeTypesWrapped, - PanOnScrollMode, ReactFlowProps, ReactFlowRefType, Viewport, } from '../../types'; -import { createEdgeTypes } from '../EdgeRenderer/utils'; -import GraphView from '../GraphView'; -import { createNodeTypes } from '../NodeRenderer/utils'; -import { useNodeOrEdgeTypes } from './utils'; -import Wrapper from './Wrapper'; -import A11yDescriptions from '../../components/A11yDescriptions'; -import { infiniteExtent } from '../../store/initialState'; const defaultNodeTypes: NodeTypes = { input: InputNode, diff --git a/packages/core/src/container/ReactFlow/utils.ts b/packages/core/src/container/ReactFlow/utils.ts index b85e75d6..4fc799a7 100644 --- a/packages/core/src/container/ReactFlow/utils.ts +++ b/packages/core/src/container/ReactFlow/utils.ts @@ -1,10 +1,10 @@ import { useMemo, useRef } from 'react'; import shallow from 'zustand/shallow'; -import { EdgeTypes, EdgeTypesWrapped, NodeTypes, NodeTypesWrapped } from '../../types'; import { devWarn } from '../../utils'; import { CreateEdgeTypes } from '../EdgeRenderer/utils'; import { CreateNodeTypes } from '../NodeRenderer/utils'; +import type { EdgeTypes, EdgeTypesWrapped, NodeTypes, NodeTypesWrapped } from '../../types'; export function useNodeOrEdgeTypes(nodeOrEdgeTypes: NodeTypes, createTypes: CreateNodeTypes): NodeTypesWrapped; export function useNodeOrEdgeTypes(nodeOrEdgeTypes: EdgeTypes, createTypes: CreateEdgeTypes): EdgeTypesWrapped; diff --git a/packages/core/src/container/Viewport/index.tsx b/packages/core/src/container/Viewport/index.tsx index 3b474f82..64ed99d5 100644 --- a/packages/core/src/container/Viewport/index.tsx +++ b/packages/core/src/container/Viewport/index.tsx @@ -1,7 +1,7 @@ -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { useStore } from '../../hooks/useStore'; -import { ReactFlowState } from '../../types'; +import type { ReactFlowState } from '../../types'; const selector = (s: ReactFlowState) => `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`; diff --git a/packages/core/src/container/ZoomPane/index.tsx b/packages/core/src/container/ZoomPane/index.tsx index 67e4b8fd..cde4ec47 100644 --- a/packages/core/src/container/ZoomPane/index.tsx +++ b/packages/core/src/container/ZoomPane/index.tsx @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { useEffect, useRef } from 'react'; -import { D3ZoomEvent, zoom, zoomIdentity } from 'd3-zoom'; +import { zoom, zoomIdentity } from 'd3-zoom'; +import type { D3ZoomEvent } from 'd3-zoom'; import { select, pointer } from 'd3-selection'; import shallow from 'zustand/shallow'; @@ -8,9 +9,10 @@ import { clamp } from '../../utils'; import useKeyPress from '../../hooks/useKeyPress'; import useResizeHandler from '../../hooks/useResizeHandler'; import { useStore, useStoreApi } from '../../hooks/useStore'; -import { FlowRendererProps } from '../FlowRenderer'; import { containerStyle } from '../../styles'; -import { Viewport, PanOnScrollMode, ReactFlowState } from '../../types'; +import type { FlowRendererProps } from '../FlowRenderer'; +import { PanOnScrollMode } from '../../types'; +import type { Viewport, ReactFlowState } from '../../types'; type ZoomPaneProps = Omit< FlowRendererProps, diff --git a/packages/core/src/hooks/useDrag/index.ts b/packages/core/src/hooks/useDrag/index.ts index 08bdf6c3..319c1993 100644 --- a/packages/core/src/hooks/useDrag/index.ts +++ b/packages/core/src/hooks/useDrag/index.ts @@ -1,12 +1,13 @@ -import { RefObject, useEffect, useRef, MouseEvent, useState, useCallback } from 'react'; +import { useEffect, useRef, useState, useCallback } from 'react'; +import type { RefObject, MouseEvent } from 'react'; import { drag } from 'd3-drag'; import { select } from 'd3-selection'; import type { D3DragEvent, SubjectPosition } from 'd3'; import { useStoreApi } from '../../hooks/useStore'; -import { NodeDragItem, Node, SelectionDragHandler } from '../../types'; import { getDragItems, getEventHandlerParams, hasSelector, calcNextPosition } from './utils'; import { handleNodeClick } from '../../components/Nodes/utils'; +import type { NodeDragItem, Node, SelectionDragHandler } from '../../types'; export type UseDragEvent = D3DragEvent; export type UseDragData = { dx: number; dy: number }; diff --git a/packages/core/src/hooks/useDrag/utils.ts b/packages/core/src/hooks/useDrag/utils.ts index bf9cd294..be25f3c1 100644 --- a/packages/core/src/hooks/useDrag/utils.ts +++ b/packages/core/src/hooks/useDrag/utils.ts @@ -1,7 +1,7 @@ -import { RefObject } from 'react'; +import type { RefObject } from 'react'; -import { CoordinateExtent, Node, NodeDragItem, NodeInternals, XYPosition } from '../../types'; import { clampPosition, devWarn } from '../../utils'; +import type { CoordinateExtent, Node, NodeDragItem, NodeInternals, XYPosition } from '../../types'; export function isParentSelected(node: Node, nodeInternals: NodeInternals): boolean { if (!node.parentNode) { diff --git a/packages/core/src/hooks/useEdges.ts b/packages/core/src/hooks/useEdges.ts index eee73eb0..78c0e36a 100644 --- a/packages/core/src/hooks/useEdges.ts +++ b/packages/core/src/hooks/useEdges.ts @@ -1,5 +1,5 @@ import { useStore } from '../hooks/useStore'; -import { Edge, ReactFlowState } from '../types'; +import type { Edge, ReactFlowState } from '../types'; const edgesSelector = (state: ReactFlowState) => state.edges; diff --git a/packages/core/src/hooks/useGlobalKeyHandler.ts b/packages/core/src/hooks/useGlobalKeyHandler.ts index 151c9786..23cb2a7d 100644 --- a/packages/core/src/hooks/useGlobalKeyHandler.ts +++ b/packages/core/src/hooks/useGlobalKeyHandler.ts @@ -3,7 +3,7 @@ import { useEffect } from 'react'; import { useStoreApi } from '../hooks/useStore'; import useKeyPress from './useKeyPress'; import { getConnectedEdges } from '../utils/graph'; -import { KeyCode, NodeChange, Node } from '../types'; +import type { KeyCode, NodeChange, Node } from '../types'; interface HookParams { deleteKeyCode: KeyCode | null; diff --git a/packages/core/src/hooks/useKeyPress.ts b/packages/core/src/hooks/useKeyPress.ts index d2e77e8f..4273feaa 100644 --- a/packages/core/src/hooks/useKeyPress.ts +++ b/packages/core/src/hooks/useKeyPress.ts @@ -1,6 +1,6 @@ import { useState, useEffect, useRef, useMemo } from 'react'; -import { KeyCode } from '../types'; +import type { KeyCode } from '../types'; type Keys = Array; type PressedKeys = Set; diff --git a/packages/core/src/hooks/useNodes.ts b/packages/core/src/hooks/useNodes.ts index 684becea..6a04942e 100644 --- a/packages/core/src/hooks/useNodes.ts +++ b/packages/core/src/hooks/useNodes.ts @@ -1,5 +1,5 @@ import { useStore } from '../hooks/useStore'; -import { Node, ReactFlowState } from '../types'; +import type { Node, ReactFlowState } from '../types'; const nodesSelector = (state: ReactFlowState) => Array.from(state.nodeInternals.values()); diff --git a/packages/core/src/hooks/useNodesEdgesState.ts b/packages/core/src/hooks/useNodesEdgesState.ts index 0ecbf611..31c16354 100644 --- a/packages/core/src/hooks/useNodesEdgesState.ts +++ b/packages/core/src/hooks/useNodesEdgesState.ts @@ -1,8 +1,9 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { useState, useCallback, SetStateAction, Dispatch } from 'react'; +import { useState, useCallback } from 'react'; +import type { SetStateAction, Dispatch } from 'react'; import { applyNodeChanges, applyEdgeChanges } from '../utils/changes'; -import { Node, NodeChange, Edge, EdgeChange } from '../types'; +import type { Node, NodeChange, Edge, EdgeChange } from '../types'; type ApplyChanges = (changes: ChangesType[], items: ItemType[]) => ItemType[]; type OnChange = (changes: ChangesType[]) => void; diff --git a/packages/core/src/hooks/useNodesInitialized.ts b/packages/core/src/hooks/useNodesInitialized.ts index 1f2b1f56..f0ac25d2 100644 --- a/packages/core/src/hooks/useNodesInitialized.ts +++ b/packages/core/src/hooks/useNodesInitialized.ts @@ -1,6 +1,6 @@ -import { ReactFlowState } from '../types'; import { internalsSymbol } from '../utils'; import { useStore } from './useStore'; +import type { ReactFlowState } from '../types'; const selector = (s: ReactFlowState) => { if (s.nodeInternals.size === 0) { diff --git a/packages/core/src/hooks/useOnInitHandler.ts b/packages/core/src/hooks/useOnInitHandler.ts index 8a3a119c..27de912b 100644 --- a/packages/core/src/hooks/useOnInitHandler.ts +++ b/packages/core/src/hooks/useOnInitHandler.ts @@ -1,7 +1,7 @@ import { useEffect, useRef } from 'react'; import useReactFlow from './useReactFlow'; -import { OnInit } from '../types'; +import type { OnInit } from '../types'; function useOnInitHandler(onInit: OnInit | undefined) { const rfInstance = useReactFlow(); diff --git a/packages/core/src/hooks/useReactFlow.ts b/packages/core/src/hooks/useReactFlow.ts index ba826ddf..2cba0fae 100644 --- a/packages/core/src/hooks/useReactFlow.ts +++ b/packages/core/src/hooks/useReactFlow.ts @@ -2,7 +2,7 @@ import { useCallback, useMemo } from 'react'; import useViewportHelper from './useViewportHelper'; import { useStoreApi } from '../hooks/useStore'; -import { +import type { ReactFlowInstance, Instance, NodeAddChange, diff --git a/packages/core/src/hooks/useResizeHandler.ts b/packages/core/src/hooks/useResizeHandler.ts index 8635db38..d2ca3e63 100644 --- a/packages/core/src/hooks/useResizeHandler.ts +++ b/packages/core/src/hooks/useResizeHandler.ts @@ -1,4 +1,5 @@ -import { useEffect, MutableRefObject } from 'react'; +import { useEffect } from 'react'; +import type { MutableRefObject } from 'react'; import { useStoreApi } from '../hooks/useStore'; import { devWarn, getDimensions } from '../utils'; diff --git a/packages/core/src/hooks/useStore.ts b/packages/core/src/hooks/useStore.ts index 3cdccb8a..bc0e605e 100644 --- a/packages/core/src/hooks/useStore.ts +++ b/packages/core/src/hooks/useStore.ts @@ -1,8 +1,9 @@ import { useContext, useMemo } from 'react'; -import { StoreApi, useStore as useZustandStore } from 'zustand'; +import { useStore as useZustandStore } from 'zustand'; +import type { StoreApi } from 'zustand'; import StoreContext from '../contexts/RFStoreContext'; -import { ReactFlowState } from '../types'; +import type { ReactFlowState } from '../types'; const errorMessage = '[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#100'; diff --git a/packages/core/src/hooks/useUpdateNodeInternals.ts b/packages/core/src/hooks/useUpdateNodeInternals.ts index dbd1a84d..849d76b6 100644 --- a/packages/core/src/hooks/useUpdateNodeInternals.ts +++ b/packages/core/src/hooks/useUpdateNodeInternals.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useStoreApi } from '../hooks/useStore'; -import { UpdateNodeInternals } from '../types'; +import type { UpdateNodeInternals } from '../types'; function useUpdateNodeInternals(): UpdateNodeInternals { const store = useStoreApi(); diff --git a/packages/core/src/hooks/useUpdateNodePositions.ts b/packages/core/src/hooks/useUpdateNodePositions.ts index 8a303e06..eb5880e3 100644 --- a/packages/core/src/hooks/useUpdateNodePositions.ts +++ b/packages/core/src/hooks/useUpdateNodePositions.ts @@ -2,8 +2,7 @@ import { useCallback } from 'react'; import { useStoreApi } from '../hooks/useStore'; import { calcNextPosition } from './useDrag/utils'; - -import { XYPosition } from '../types'; +import type { XYPosition } from '../types'; function useUpdateNodePositions() { const store = useStoreApi(); diff --git a/packages/core/src/hooks/useViewport.ts b/packages/core/src/hooks/useViewport.ts index 025040bd..c20e78b6 100644 --- a/packages/core/src/hooks/useViewport.ts +++ b/packages/core/src/hooks/useViewport.ts @@ -1,7 +1,7 @@ import shallow from 'zustand/shallow'; import { useStore } from '../hooks/useStore'; -import { Viewport, ReactFlowState } from '../types'; +import type { Viewport, ReactFlowState } from '../types'; const viewportSelector = (state: ReactFlowState) => ({ x: state.transform[0], diff --git a/packages/core/src/hooks/useViewportHelper.ts b/packages/core/src/hooks/useViewportHelper.ts index ea79f044..226d1a69 100644 --- a/packages/core/src/hooks/useViewportHelper.ts +++ b/packages/core/src/hooks/useViewportHelper.ts @@ -4,8 +4,8 @@ import shallow from 'zustand/shallow'; import { useStoreApi, useStore } from '../hooks/useStore'; import { pointToRendererPoint, getTransformForBounds, getD3Transition } from '../utils/graph'; -import { ViewportHelperFunctions, ReactFlowState, XYPosition } from '../types'; import { fitView as fitViewStore } from '../store/utils'; +import type { ViewportHelperFunctions, ReactFlowState, XYPosition } from '../types'; // eslint-disable-next-line @typescript-eslint/no-empty-function const noop = () => {}; diff --git a/packages/core/src/hooks/useVisibleEdges.ts b/packages/core/src/hooks/useVisibleEdges.ts index be3e7590..cbd673e5 100644 --- a/packages/core/src/hooks/useVisibleEdges.ts +++ b/packages/core/src/hooks/useVisibleEdges.ts @@ -2,8 +2,8 @@ import { useCallback } from 'react'; import { useStore } from '../hooks/useStore'; import { isEdgeVisible } from '../container/EdgeRenderer/utils'; -import { ReactFlowState, NodeInternals, Edge } from '../types'; import { internalsSymbol, isNumeric } from '../utils'; +import type { ReactFlowState, NodeInternals, Edge } from '../types'; const defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }]; diff --git a/packages/core/src/hooks/useVisibleNodes.ts b/packages/core/src/hooks/useVisibleNodes.ts index ad81e3be..f74be159 100644 --- a/packages/core/src/hooks/useVisibleNodes.ts +++ b/packages/core/src/hooks/useVisibleNodes.ts @@ -2,8 +2,7 @@ import { useCallback } from 'react'; import { useStore } from '../hooks/useStore'; import { getNodesInside } from '../utils/graph'; - -import { ReactFlowState } from '../types'; +import type { ReactFlowState } from '../types'; function useVisibleNodes(onlyRenderVisible: boolean) { const nodes = useStore( diff --git a/packages/core/src/store/index.ts b/packages/core/src/store/index.ts index 5310992a..e09abbd7 100644 --- a/packages/core/src/store/index.ts +++ b/packages/core/src/store/index.ts @@ -1,8 +1,11 @@ import { createStore } from 'zustand'; import { clampPosition, getDimensions, internalsSymbol } from '../utils'; -import { applyNodeChanges } from '../utils/changes'; -import { +import { applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes'; +import { getHandleBounds } from '../components/Nodes/utils'; +import { createNodeInternals, fitView, updateNodesAndEdgesSelections } from './utils'; +import initialState from './initialState'; +import type { ReactFlowState, Node, Edge, @@ -15,10 +18,6 @@ import { NodeDragItem, UnselectNodesAndEdgesParams, } from '../types'; -import { getHandleBounds } from '../components/Nodes/utils'; -import { createSelectionChange, getSelectionChanges } from '../utils/changes'; -import { createNodeInternals, fitView, updateNodesAndEdgesSelections } from './utils'; -import initialState from './initialState'; const createRFStore = () => createStore((set, get) => ({ diff --git a/packages/core/src/store/initialState.ts b/packages/core/src/store/initialState.ts index ce08a40d..ab918e65 100644 --- a/packages/core/src/store/initialState.ts +++ b/packages/core/src/store/initialState.ts @@ -1,4 +1,5 @@ -import { CoordinateExtent, ReactFlowStore, ConnectionMode } from '../types'; +import { ConnectionMode } from '../types'; +import type { CoordinateExtent, ReactFlowStore } from '../types'; export const infiniteExtent: CoordinateExtent = [ [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY], diff --git a/packages/core/src/store/utils.ts b/packages/core/src/store/utils.ts index 66078d19..f9a79ea1 100644 --- a/packages/core/src/store/utils.ts +++ b/packages/core/src/store/utils.ts @@ -1,9 +1,9 @@ import { zoomIdentity } from 'd3-zoom'; -import { StoreApi } from 'zustand'; +import type { StoreApi } from 'zustand'; import { internalsSymbol, isNumeric } from '../utils'; import { getD3Transition, getRectOfNodes, getTransformForBounds } from '../utils/graph'; -import { +import type { Edge, EdgeSelectionChange, Node, diff --git a/packages/core/src/styles/index.ts b/packages/core/src/styles/index.ts index e9f01264..91afb98c 100644 --- a/packages/core/src/styles/index.ts +++ b/packages/core/src/styles/index.ts @@ -1,4 +1,4 @@ -import { CSSProperties } from 'react'; +import type { CSSProperties } from 'react'; export const containerStyle: CSSProperties = { position: 'absolute', diff --git a/packages/core/src/types/changes.ts b/packages/core/src/types/changes.ts index 2e3a22bc..b4395803 100644 --- a/packages/core/src/types/changes.ts +++ b/packages/core/src/types/changes.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { XYPosition, Dimensions } from './utils'; -import { Node } from './nodes'; -import { Edge } from './edges'; +import type { XYPosition, Dimensions } from './utils'; +import type { Node } from './nodes'; +import type { Edge } from './edges'; export type NodeDimensionChange = { id: string; diff --git a/packages/core/src/types/component-props.ts b/packages/core/src/types/component-props.ts index 7a10340b..9b273641 100644 --- a/packages/core/src/types/component-props.ts +++ b/packages/core/src/types/component-props.ts @@ -1,6 +1,6 @@ -import React, { CSSProperties, HTMLAttributes, MouseEvent as ReactMouseEvent, WheelEvent } from 'react'; +import type { CSSProperties, HTMLAttributes, MouseEvent as ReactMouseEvent, WheelEvent } from 'react'; -import { +import type { OnSelectionChangeFunc, NodeTypes, EdgeTypes, @@ -33,19 +33,17 @@ import { SelectionDragHandler, Viewport, NodeOrigin, + EdgeMouseHandler, + HandleType, } from '.'; -import { HandleType } from './handles'; -export interface ReactFlowProps extends HTMLAttributes { +export type ReactFlowProps = HTMLAttributes & { nodes?: Node[]; edges?: Edge[]; defaultNodes?: Node[]; defaultEdges?: Edge[]; defaultEdgeOptions?: DefaultEdgeOptions; - onNodesChange?: OnNodesChange; - onEdgesChange?: OnEdgesChange; onNodeClick?: NodeMouseHandler; - onEdgeClick?: (event: React.MouseEvent, node: Edge) => void; onNodeDoubleClick?: NodeMouseHandler; onNodeMouseEnter?: NodeMouseHandler; onNodeMouseMove?: NodeMouseHandler; @@ -54,8 +52,23 @@ export interface ReactFlowProps extends HTMLAttributes { onNodeDragStart?: NodeDragHandler; onNodeDrag?: NodeDragHandler; onNodeDragStop?: NodeDragHandler; + onEdgeClick?: (event: ReactMouseEvent, node: Edge) => void; + onEdgeUpdate?: OnEdgeUpdateFunc; + onEdgeContextMenu?: EdgeMouseHandler; + onEdgeMouseEnter?: EdgeMouseHandler; + onEdgeMouseMove?: EdgeMouseHandler; + onEdgeMouseLeave?: EdgeMouseHandler; + onEdgeDoubleClick?: EdgeMouseHandler; + onEdgeUpdateStart?: (event: ReactMouseEvent, edge: Edge, handleType: HandleType) => void; + onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge, handleType: HandleType) => void; + onNodesChange?: OnNodesChange; + onEdgesChange?: OnEdgesChange; onNodesDelete?: OnNodesDelete; onEdgesDelete?: OnEdgesDelete; + onSelectionDragStart?: SelectionDragHandler; + onSelectionDrag?: SelectionDragHandler; + onSelectionDragStop?: SelectionDragHandler; + onSelectionContextMenu?: (event: ReactMouseEvent, nodes: Node[]) => void; onConnect?: OnConnect; onConnectStart?: OnConnectStart; onConnectEnd?: OnConnectEnd; @@ -66,10 +79,6 @@ export interface ReactFlowProps extends HTMLAttributes { onMoveStart?: OnMoveStart; onMoveEnd?: OnMoveEnd; onSelectionChange?: OnSelectionChangeFunc; - onSelectionDragStart?: SelectionDragHandler; - onSelectionDrag?: SelectionDragHandler; - onSelectionDragStop?: SelectionDragHandler; - onSelectionContextMenu?: (event: ReactMouseEvent, nodes: Node[]) => void; onPaneScroll?: (event?: WheelEvent) => void; onPaneClick?: (event: ReactMouseEvent) => void; onPaneContextMenu?: (event: ReactMouseEvent) => void; @@ -78,11 +87,11 @@ export interface ReactFlowProps extends HTMLAttributes { onPaneMouseLeave?: (event: ReactMouseEvent) => void; nodeTypes?: NodeTypes; edgeTypes?: EdgeTypes; - connectionMode?: ConnectionMode; connectionLineType?: ConnectionLineType; connectionLineStyle?: CSSProperties; connectionLineComponent?: ConnectionLineComponent; connectionLineContainerStyle?: CSSProperties; + connectionMode?: ConnectionMode; deleteKeyCode?: KeyCode | null; selectionKeyCode?: KeyCode | null; multiSelectionKeyCode?: KeyCode | null; @@ -112,14 +121,6 @@ export interface ReactFlowProps extends HTMLAttributes { panOnScrollSpeed?: number; panOnScrollMode?: PanOnScrollMode; zoomOnDoubleClick?: boolean; - onEdgeUpdate?: OnEdgeUpdateFunc; - onEdgeContextMenu?: (event: ReactMouseEvent, edge: Edge) => void; - onEdgeMouseEnter?: (event: ReactMouseEvent, edge: Edge) => void; - onEdgeMouseMove?: (event: ReactMouseEvent, edge: Edge) => void; - onEdgeMouseLeave?: (event: ReactMouseEvent, edge: Edge) => void; - onEdgeDoubleClick?: (event: ReactMouseEvent, edge: Edge) => void; - onEdgeUpdateStart?: (event: ReactMouseEvent, edge: Edge, handleType: HandleType) => void; - onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge, handleType: HandleType) => void; edgeUpdaterRadius?: number; noDragClassName?: string; noWheelClassName?: string; @@ -131,6 +132,6 @@ export interface ReactFlowProps extends HTMLAttributes { proOptions?: ProOptions; elevateEdgesOnSelect?: boolean; disableKeyboardA11y?: boolean; -} +}; export type ReactFlowRefType = HTMLDivElement; diff --git a/packages/core/src/types/edges.ts b/packages/core/src/types/edges.ts index 71863196..7eb12816 100644 --- a/packages/core/src/types/edges.ts +++ b/packages/core/src/types/edges.ts @@ -1,9 +1,17 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import React, { CSSProperties, ComponentType, HTMLAttributes, ReactNode } from 'react'; -import { Connection } from './general'; -import { HandleElement, HandleType } from './handles'; -import { Node } from './nodes'; -import { Position } from './utils'; +import type { CSSProperties, ComponentType, HTMLAttributes, ReactNode, MouseEvent as ReactMouseEvent } from 'react'; + +import { Position } from '.'; +import type { Connection, HandleElement, HandleType, Node } from '.'; + +type EdgeLabelOptions = { + label?: string | ReactNode; + labelStyle?: CSSProperties; + labelShowBg?: boolean; + labelBgStyle?: CSSProperties; + labelBgPadding?: [number, number]; + labelBgBorderRadius?: number; +}; // interface for the user edge items type DefaultEdge = { @@ -13,12 +21,6 @@ type DefaultEdge = { target: string; sourceHandle?: string | null; targetHandle?: string | null; - label?: string | ReactNode; - labelStyle?: CSSProperties; - labelShowBg?: boolean; - labelBgStyle?: CSSProperties; - labelBgPadding?: [number, number]; - labelBgBorderRadius?: number; style?: CSSProperties; animated?: boolean; hidden?: boolean; @@ -34,7 +36,7 @@ type DefaultEdge = { ariaLabel?: string; interactionWidth?: number; focusable?: boolean; -}; +} & EdgeLabelOptions; export type SmoothStepPathOptions = { offset?: number; @@ -62,55 +64,7 @@ export type DefaultEdgeOptions = Omit< 'id' | 'source' | 'target' | 'sourceHandle' | 'targetHandle' | 'sourceNode' | 'targetNode' >; -// props that get passed to a custom edge -export type EdgeProps = { - id: string; - source: string; - target: string; - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; - selected?: boolean; - animated?: boolean; - sourcePosition: Position; - targetPosition: Position; - label?: string | ReactNode; - labelStyle?: CSSProperties; - labelShowBg?: boolean; - labelBgStyle?: CSSProperties; - labelBgPadding?: [number, number]; - labelBgBorderRadius?: number; - style?: CSSProperties; - data?: T; - sourceHandleId?: string | null; - targetHandleId?: string | null; - markerStart?: string; - markerEnd?: string; - // @TODO: how can we get better types for pathOptions? - pathOptions?: any; - interactionWidth?: number; -}; - -export type BaseEdgeProps = Pick< - EdgeProps, - | 'label' - | 'labelStyle' - | 'labelShowBg' - | 'labelBgStyle' - | 'labelBgPadding' - | 'labelBgBorderRadius' - | 'style' - | 'markerStart' - | 'markerEnd' - | 'interactionWidth' -> & { - labelX: number; - labelY: number; - path: string; -}; - -export type EdgeMouseHandler = (event: React.MouseEvent, edge: Edge) => void; +export type EdgeMouseHandler = (event: ReactMouseEvent, edge: Edge) => void; export type WrapEdgeProps = Omit, 'sourceHandle' | 'targetHandle'> & { onClick?: EdgeMouseHandler; @@ -130,30 +84,57 @@ export type WrapEdgeProps = Omit, 'sourceHandle' | 'targetHandl onMouseMove?: EdgeMouseHandler; onMouseLeave?: EdgeMouseHandler; edgeUpdaterRadius?: number; - onEdgeUpdateStart?: (event: React.MouseEvent, edge: Edge, handleType: HandleType) => void; + onEdgeUpdateStart?: (event: ReactMouseEvent, edge: Edge, handleType: HandleType) => void; onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge, handleType: HandleType) => void; rfId?: string; isFocusable: boolean; pathOptions?: BezierPathOptions | SmoothStepPathOptions; }; -export interface SmoothStepEdgeProps extends EdgeProps { - pathOptions?: SmoothStepPathOptions; -} +// props that get passed to a custom edge +export type EdgeProps = Pick< + Edge, + 'id' | 'animated' | 'data' | 'style' | 'selected' | 'source' | 'target' +> & + Pick< + WrapEdgeProps, + | 'sourceX' + | 'sourceY' + | 'targetX' + | 'targetY' + | 'sourcePosition' + | 'targetPosition' + | 'sourceHandleId' + | 'targetHandleId' + | 'interactionWidth' + > & + EdgeLabelOptions & { + markerStart?: string; + markerEnd?: string; + // @TODO: how can we get better types for pathOptions? + pathOptions?: any; + }; -export interface BezierEdgeProps extends EdgeProps { +export type BaseEdgeProps = Pick & + EdgeLabelOptions & { + labelX: number; + labelY: number; + path: string; + }; + +export type SmoothStepEdgeProps = EdgeProps & { + pathOptions?: SmoothStepPathOptions; +}; + +export type BezierEdgeProps = EdgeProps & { pathOptions?: BezierPathOptions; -} -export interface EdgeTextProps extends HTMLAttributes { - x: number; - y: number; - label?: string | ReactNode; - labelStyle?: CSSProperties; - labelShowBg?: boolean; - labelBgStyle?: CSSProperties; - labelBgPadding?: [number, number]; - labelBgBorderRadius?: number; -} +}; + +export type EdgeTextProps = HTMLAttributes & + EdgeLabelOptions & { + x: number; + y: number; + }; export enum ConnectionLineType { Bezier = 'default', @@ -180,7 +161,7 @@ export type ConnectionLineComponent = ComponentType = (oldEdge: Edge, newConnection: Connection) => void; -export interface EdgeMarker { +export type EdgeMarker = { type: MarkerType; color?: string; width?: number; @@ -188,7 +169,7 @@ export interface EdgeMarker { markerUnits?: string; orient?: string; strokeWidth?: number; -} +}; export type EdgeMarkerType = string | EdgeMarker; diff --git a/packages/core/src/types/general.ts b/packages/core/src/types/general.ts index 5587fec7..b18f4d32 100644 --- a/packages/core/src/types/general.ts +++ b/packages/core/src/types/general.ts @@ -1,10 +1,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { MouseEvent as ReactMouseEvent, ComponentType, MemoExoticComponent } from 'react'; +import type { MouseEvent as ReactMouseEvent, ComponentType, MemoExoticComponent } from 'react'; import type { Selection as D3Selection, ZoomBehavior } from 'd3'; -import { XYPosition, Rect, Transform, CoordinateExtent } from './utils'; -import { NodeChange, EdgeChange } from './changes'; -import { +import type { XYPosition, Rect, Transform, CoordinateExtent } from './utils'; +import type { NodeChange, EdgeChange } from './changes'; +import type { Node, NodeInternals, NodeDimensionUpdate, @@ -15,10 +15,10 @@ import { SelectionDragHandler, NodeOrigin, } from './nodes'; -import { Edge, EdgeProps, WrapEdgeProps } from './edges'; -import { HandleType, StartHandle } from './handles'; -import { DefaultEdgeOptions } from '.'; -import { ReactFlowInstance } from './instance'; +import type { Edge, EdgeProps, WrapEdgeProps } from './edges'; +import type { HandleType, StartHandle } from './handles'; +import type { DefaultEdgeOptions } from '.'; +import type { ReactFlowInstance } from './instance'; export type NodeTypes = { [key: string]: ComponentType }; export type NodeTypesWrapped = { [key: string]: MemoExoticComponent> }; @@ -115,7 +115,7 @@ export type UnselectNodesAndEdgesParams = { export type OnViewportChange = (viewport: Viewport) => void; -export interface ViewportHelperFunctions { +export type ViewportHelperFunctions = { zoomIn: ZoomInOut; zoomOut: ZoomInOut; zoomTo: ZoomTo; @@ -127,7 +127,7 @@ export interface ViewportHelperFunctions { fitBounds: FitBounds; project: Project; viewportInitialized: boolean; -} +}; export type ReactFlowStore = { rfId: string; diff --git a/packages/core/src/types/handles.ts b/packages/core/src/types/handles.ts index 37d1ea41..0850526c 100644 --- a/packages/core/src/types/handles.ts +++ b/packages/core/src/types/handles.ts @@ -1,5 +1,4 @@ -import { XYPosition, Position, Dimensions } from './utils'; -import { OnConnect, Connection } from './general'; +import type { XYPosition, Position, Dimensions, OnConnect, Connection } from '.'; export type HandleType = 'source' | 'target'; diff --git a/packages/core/src/types/instance.ts b/packages/core/src/types/instance.ts index f5fe2848..dab4299e 100644 --- a/packages/core/src/types/instance.ts +++ b/packages/core/src/types/instance.ts @@ -1,8 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-namespace */ -import { ViewportHelperFunctions, Viewport } from './general'; -import { Node } from './nodes'; -import { Edge } from './edges'; +import { ViewportHelperFunctions, Viewport, Node, Edge } from '.'; export type ReactFlowJsonObject = { nodes: Node[]; diff --git a/packages/core/src/types/nodes.ts b/packages/core/src/types/nodes.ts index a1473f71..39d8755c 100644 --- a/packages/core/src/types/nodes.ts +++ b/packages/core/src/types/nodes.ts @@ -1,20 +1,19 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { CSSProperties, MouseEvent as ReactMouseEvent } from 'react'; +import type { CSSProperties, MouseEvent as ReactMouseEvent } from 'react'; -import { XYPosition, Position, CoordinateExtent } from './utils'; -import { HandleElement } from './handles'; import { internalsSymbol } from '../utils'; +import type { XYPosition, Position, CoordinateExtent, HandleElement } from '.'; // interface for the user node items -export interface Node { +export type Node = { id: string; position: XYPosition; data: T; type?: string; style?: CSSProperties; className?: string; - targetPosition?: Position; sourcePosition?: Position; + targetPosition?: Position; hidden?: boolean; selected?: boolean; dragging?: boolean; @@ -39,64 +38,50 @@ export interface Node { handleBounds?: NodeHandleBounds; isParent?: boolean; }; -} - -// props that get passed to a custom node -export interface NodeProps { - id: string; - type: string; - data: T; - selected: boolean; - isConnectable: boolean; - xPos: number; - yPos: number; - dragging: boolean; - zIndex: number; - targetPosition?: Position; - sourcePosition?: Position; - dragHandle?: string; -} +}; export type NodeMouseHandler = (event: ReactMouseEvent, node: Node) => void; export type NodeDragHandler = (event: ReactMouseEvent, node: Node, nodes: Node[]) => void; export type SelectionDragHandler = (event: ReactMouseEvent, nodes: Node[]) => void; -export interface WrapNodeProps { - id: string; - type: string; - data: T; - selected: boolean; - isConnectable: boolean; - xPos: number; - yPos: number; - xPosOrigin: number; - yPosOrigin: number; - initialized: boolean; - isSelectable: boolean; - isDraggable: boolean; - isFocusable: boolean; - selectNodesOnDrag: boolean; - onClick?: NodeMouseHandler; - onDoubleClick?: NodeMouseHandler; - onMouseEnter?: NodeMouseHandler; - onMouseMove?: NodeMouseHandler; - onMouseLeave?: NodeMouseHandler; - onContextMenu?: NodeMouseHandler; - style?: CSSProperties; - className?: string; - sourcePosition: Position; - targetPosition: Position; - hidden?: boolean; - resizeObserver: ResizeObserver | null; - dragHandle?: string; - zIndex: number; - isParent: boolean; - noDragClassName: string; - noPanClassName: string; - rfId: string; - disableKeyboardA11y: boolean; - ariaLabel?: string; -} +export type WrapNodeProps = Pick< + Node, + 'id' | 'data' | 'style' | 'className' | 'dragHandle' | 'sourcePosition' | 'targetPosition' | 'hidden' | 'ariaLabel' +> & + Required, 'selected' | 'type' | 'zIndex'>> & { + isConnectable: boolean; + xPos: number; + yPos: number; + xPosOrigin: number; + yPosOrigin: number; + initialized: boolean; + isSelectable: boolean; + isDraggable: boolean; + isFocusable: boolean; + selectNodesOnDrag: boolean; + onClick?: NodeMouseHandler; + onDoubleClick?: NodeMouseHandler; + onMouseEnter?: NodeMouseHandler; + onMouseMove?: NodeMouseHandler; + onMouseLeave?: NodeMouseHandler; + onContextMenu?: NodeMouseHandler; + resizeObserver: ResizeObserver | null; + isParent: boolean; + noDragClassName: string; + noPanClassName: string; + rfId: string; + disableKeyboardA11y: boolean; + }; + +// props that get passed to a custom node +export type NodeProps = Pick< + WrapNodeProps, + 'id' | 'data' | 'dragHandle' | 'type' | 'selected' | 'isConnectable' | 'xPos' | 'yPos' | 'zIndex' +> & { + dragging: boolean; + targetPosition?: Position; + sourcePosition?: Position; +}; export type NodeHandleBounds = { source: HandleElement[] | null; diff --git a/packages/core/src/utils/changes.ts b/packages/core/src/utils/changes.ts index a41a8f6c..897c1ffb 100644 --- a/packages/core/src/utils/changes.ts +++ b/packages/core/src/utils/changes.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { Node, Edge, EdgeChange, NodeChange } from '../types'; +import type { Node, Edge, EdgeChange, NodeChange } from '../types'; function handleParentExpand(res: any[], updateItem: any) { const parent = res.find((e) => e.id === updateItem.parentNode); diff --git a/packages/core/src/utils/graph.ts b/packages/core/src/utils/graph.ts index b6fece4e..b07db923 100644 --- a/packages/core/src/utils/graph.ts +++ b/packages/core/src/utils/graph.ts @@ -2,7 +2,7 @@ import type { Selection as D3Selection } from 'd3'; import { boxToRect, clamp, devWarn, getBoundsOfBoxes, rectToBox } from '../utils'; -import { Node, Edge, Connection, EdgeMarkerType, Transform, XYPosition, Rect, NodeInternals } from '../types'; +import type { Node, Edge, Connection, EdgeMarkerType, Transform, XYPosition, Rect, NodeInternals } from '../types'; export const isEdge = (element: Node | Connection | Edge): element is Edge => 'id' in element && 'source' in element && 'target' in element; diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index a27bbca0..c3afe773 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -1,4 +1,4 @@ -import { Dimensions, XYPosition, CoordinateExtent, Box, Rect } from '../types'; +import type { Dimensions, XYPosition, CoordinateExtent, Box, Rect } from '../types'; export const getDimensions = (node: HTMLDivElement): Dimensions => ({ width: node.offsetWidth, diff --git a/packages/minimap/src/MiniMap.tsx b/packages/minimap/src/MiniMap.tsx index a0ccd154..05cd8771 100644 --- a/packages/minimap/src/MiniMap.tsx +++ b/packages/minimap/src/MiniMap.tsx @@ -2,10 +2,11 @@ import { memo } from 'react'; import cc from 'classcat'; import shallow from 'zustand/shallow'; -import { useStore, getRectOfNodes, ReactFlowState, Rect, Panel, getBoundsOfRects } from '@reactflow/core'; +import { useStore, getRectOfNodes, getBoundsOfRects, Panel } from '@reactflow/core'; +import type { ReactFlowState, Rect } from '@reactflow/core'; import MiniMapNode from './MiniMapNode'; -import { MiniMapProps, GetMiniMapNodeAttribute } from './types'; +import type { MiniMapProps, GetMiniMapNodeAttribute } from './types'; declare const window: any; diff --git a/packages/minimap/src/MiniMapNode.tsx b/packages/minimap/src/MiniMapNode.tsx index 3ea3bd33..111c7ee0 100644 --- a/packages/minimap/src/MiniMapNode.tsx +++ b/packages/minimap/src/MiniMapNode.tsx @@ -1,4 +1,5 @@ -import { memo, CSSProperties } from 'react'; +import { memo } from 'react'; +import type { CSSProperties } from 'react'; import cc from 'classcat'; interface MiniMapNodeProps { diff --git a/packages/minimap/src/types.ts b/packages/minimap/src/types.ts index 5f82824d..4fed29ba 100644 --- a/packages/minimap/src/types.ts +++ b/packages/minimap/src/types.ts @@ -1,10 +1,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { HTMLAttributes } from 'react'; -import { Node, PanelPosition } from '@reactflow/core'; +import type { HTMLAttributes } from 'react'; +import type { Node, PanelPosition } from '@reactflow/core'; export type GetMiniMapNodeAttribute = (node: Node) => string; -export interface MiniMapProps extends HTMLAttributes { +export type MiniMapProps = HTMLAttributes & { nodeColor?: string | GetMiniMapNodeAttribute; nodeStrokeColor?: string | GetMiniMapNodeAttribute; nodeClassName?: string | GetMiniMapNodeAttribute; @@ -12,4 +12,4 @@ export interface MiniMapProps extends HTMLAttributes