diff --git a/packages/core/src/types/node.ts b/packages/core/src/types/node.ts index d6c5dc84..7673f7f8 100644 --- a/packages/core/src/types/node.ts +++ b/packages/core/src/types/node.ts @@ -1,6 +1,6 @@ import type { Component, VNode } from 'vue' import type { ClassFunc, Dimensions, ElementData, Position, StyleFunc, Styles, XYPosition, XYZPosition } from './flow' -import type { DefaultNodeTypes, NodeComponent } from './components' +import type { NodeComponent } from './components' import type { HandleConnectable, HandleElement, ValidConnectionFunc } from './handle' import type { CustomEvent, NodeEventsHandler, NodeEventsOn } from './hooks' @@ -29,7 +29,7 @@ export type WidthFunc = (node: GraphNode) => number | string | void /** @deprecated will be removed in next major release */ export type HeightFunc = (node: GraphNode) => number | string | void -export interface Node = any> { +export interface Node = any, Type extends string = string> { /** Unique node id */ id: string /** A node label */ @@ -37,7 +37,7 @@ export interface Node = any, Type extends string = string, -> extends Node { +> extends Node { /** absolute position in relation to parent elements + z-index */ computedPosition: XYZPosition handleBounds: NodeHandleBounds @@ -114,11 +116,11 @@ export interface GraphNode< } /** these props are passed to node components */ -export interface NodeProps { +export interface NodeProps { /** unique node id */ id: string /** node type */ - type?: Type + type: Type /** is node selected */ selected: boolean /** can node handles be connected */ @@ -133,14 +135,24 @@ export interface NodeProps } + +/** + * Transform a Node type to a GraphNode type + */ +export type ToGraphNode = GraphNode< + T extends Node ? Data : never, + T extends Node ? Events : never, + T extends Node ? Type : never +>