1- import type { NodeBase , NodeProps as NodePropsBase } from '@xyflow/system'
2- import type { ElementData , Styles } from './flow'
1+ import type { NodeBase } from '@xyflow/system'
2+ import type { ElementData , Styles , XYPosition } from './flow'
33import type { HandleConnectable , HandleElement } from './handle'
44
55/** Defined as [[x-from, y-from], [x-to, y-to]] */
@@ -21,6 +21,11 @@ export interface NodeHandleBounds {
2121 target ?: HandleElement [ ]
2222}
2323
24+ export type NodeBounds = XYPosition & {
25+ width : number | null
26+ height : number | null
27+ }
28+
2429/**
2530 * The node data structure that gets used for the nodes prop.
2631 * @public
@@ -37,8 +42,44 @@ export interface Node<NodeData extends ElementData = ElementData, NodeType exten
3742 style ?: Styles
3843}
3944
40- /** these props are passed to node components */
41- export interface NodeProps < NodeType extends NodeBase = NodeBase > extends Omit < NodePropsBase < NodeType > , 'isConnectable' > {
42- /** can node handles be connected, you need to forward this to your handles for this prop to have any effect */
43- isConnectable : HandleConnectable
45+ export type GraphNode < NodeType extends Node = Node > = NodeType & {
46+ measured : {
47+ width ?: number
48+ height ?: number
49+ }
50+ internals : {
51+ positionAbsolute : XYPosition
52+ z : number
53+ /**
54+ * Holds a reference to the original node object provided by the user.
55+ * Used as an optimization to avoid certain operations.
56+ */
57+ userNode : NodeType
58+ handleBounds ?: NodeHandleBounds
59+ bounds ?: NodeBounds
60+ }
4461}
62+
63+ export type NodeProps < NodeType extends Node = Node > = Pick <
64+ NodeType ,
65+ | 'id'
66+ | 'data'
67+ | 'width'
68+ | 'height'
69+ | 'sourcePosition'
70+ | 'targetPosition'
71+ | 'selected'
72+ | 'dragHandle'
73+ | 'selectable'
74+ | 'deletable'
75+ | 'draggable'
76+ | 'parentId'
77+ > &
78+ Required < Pick < NodeType , 'type' | 'dragging' | 'zIndex' > > & {
79+ /** whether a node is connectable or not */
80+ isConnectable : HandleConnectable
81+ /** position absolute x value */
82+ positionAbsoluteX : number
83+ /** position absolute x value */
84+ positionAbsoluteY : number
85+ }
0 commit comments