@@ -2,22 +2,22 @@ import type { EventHookOn, EventHookTrigger } from '@vueuse/core'
22import type { Viewport } from '@xyflow/system'
33import type { EventHookExtended , VueFlowError } from '../utils'
44import type { GraphEdge } from './edge'
5- import type { GraphNode } from './node'
5+ import type { GraphNode , Node } from './node'
66import type { Connection , OnConnectStartParams } from './connection'
77import type { EdgeChange , NodeChange } from './changes'
88import type { VueFlowStore } from './store'
99
1010export type MouseTouchEvent = MouseEvent | TouchEvent
1111
12- export interface NodeMouseEvent {
12+ export interface NodeMouseEvent < NodeType extends Node = Node > {
1313 event : MouseTouchEvent
14- node : GraphNode
14+ node : GraphNode < NodeType >
1515}
1616
17- export interface NodeDragEvent {
17+ export interface NodeDragEvent < NodeType extends Node = Node > {
1818 event : MouseTouchEvent
19- node : GraphNode
20- nodes : GraphNode [ ]
19+ node : GraphNode < NodeType >
20+ nodes : GraphNode < NodeType > [ ]
2121}
2222
2323export interface EdgeMouseEvent {
@@ -104,37 +104,31 @@ export type FlowHooksEmit = Readonly<{
104104 [ key in keyof FlowEvents ] : EventHookTrigger < FlowEvents [ key ] >
105105} >
106106
107- /**
108- * To type `Args` (the event callback arguments) pass an array as argument list as first generic type
109- * To type `Return` (the event callback return value) pass a value to the second generic type
110- */
111- export type CustomEvent < Args extends any [ ] = any [ ] , Return = any > = ( ...args : Args ) => Return
112-
113- type CustomEventHandlers < CustomEvents = object > = {
114- [ key in keyof CustomEvents ] : CustomEvents [ key ]
107+ export interface NodeEventsHandler < NodeType extends Node = Node > {
108+ doubleClick : ( event : NodeMouseEvent < NodeType > ) => void | { off : ( ) => void }
109+ click : ( event : NodeMouseEvent < NodeType > ) => void | { off : ( ) => void }
110+ mouseEnter : ( event : NodeMouseEvent < NodeType > ) => void | { off : ( ) => void }
111+ mouseMove : ( event : NodeMouseEvent < NodeType > ) => void | { off : ( ) => void }
112+ mouseLeave : ( event : NodeMouseEvent < NodeType > ) => void | { off : ( ) => void }
113+ contextMenu : ( event : NodeMouseEvent < NodeType > ) => void | { off : ( ) => void }
114+ dragStart : ( event : NodeDragEvent < NodeType > ) => void | { off : ( ) => void }
115+ drag : ( event : NodeDragEvent < NodeType > ) => void | { off : ( ) => void }
116+ dragStop : ( event : NodeDragEvent < NodeType > ) => void | { off : ( ) => void }
115117}
116118
117- export type NodeEventsHandler < CustomEvents = object > = {
118- doubleClick : ( event : NodeMouseEvent ) => void | { off : ( ) => void }
119- click : ( event : NodeMouseEvent ) => void | { off : ( ) => void }
120- mouseEnter : ( event : NodeMouseEvent ) => void | { off : ( ) => void }
121- mouseMove : ( event : NodeMouseEvent ) => void | { off : ( ) => void }
122- mouseLeave : ( event : NodeMouseEvent ) => void | { off : ( ) => void }
123- contextMenu : ( event : NodeMouseEvent ) => void | { off : ( ) => void }
124- dragStart : ( event : NodeDragEvent ) => void | { off : ( ) => void }
125- drag : ( event : NodeDragEvent ) => void | { off : ( ) => void }
126- dragStop : ( event : NodeDragEvent ) => void | { off : ( ) => void }
127- } & CustomEventHandlers < CustomEvents >
128-
129- export type NodeEventsOn < CustomEvents = object > = {
130- [ key in keyof NodeEventsHandler ] : EventHookOn < NodeEventsHandler [ key ] extends ( event : infer Event ) => any ? Event : never >
131- } & CustomEventHandlers < CustomEvents >
119+ export type NodeEventsOn < NodeType extends Node = Node > = {
120+ [ key in keyof NodeEventsHandler < NodeType > ] : EventHookOn <
121+ NodeEventsHandler < NodeType > [ key ] extends ( event : infer Event ) => any ? Event : never
122+ >
123+ }
132124
133- export type NodeEventsEmit < CustomEvents = object > = {
134- [ key in keyof NodeEventsHandler ] : EventHookTrigger < NodeEventsHandler [ key ] extends ( event : infer Event ) => any ? Event : never >
135- } & CustomEventHandlers < CustomEvents >
125+ export type NodeEventsEmit < NodeType extends Node = Node > = {
126+ [ key in keyof NodeEventsHandler < NodeType > ] : EventHookTrigger <
127+ NodeEventsHandler < NodeType > [ key ] extends ( event : infer Event ) => any ? Event : never
128+ >
129+ }
136130
137- export type EdgeEventsHandler < CustomEvents = object > = {
131+ export interface EdgeEventsHandler {
138132 doubleClick : ( event : EdgeMouseEvent ) => void | { off : ( ) => void }
139133 click : ( event : EdgeMouseEvent ) => void | { off : ( ) => void }
140134 mouseEnter : ( event : EdgeMouseEvent ) => void | { off : ( ) => void }
@@ -144,12 +138,12 @@ export type EdgeEventsHandler<CustomEvents = object> = {
144138 updateStart : ( event : EdgeMouseEvent ) => void | { off : ( ) => void }
145139 update : ( event : EdgeUpdateEvent ) => void | { off : ( ) => void }
146140 updateEnd : ( event : EdgeMouseEvent ) => void | { off : ( ) => void }
147- } & CustomEventHandlers < CustomEvents >
141+ }
148142
149- export type EdgeEventsOn < CustomEvents = object > = {
143+ export type EdgeEventsOn = {
150144 [ key in keyof EdgeEventsHandler ] : EventHookOn < EdgeEventsHandler [ key ] extends ( event : infer Event ) => any ? Event : never >
151- } & CustomEventHandlers < CustomEvents >
145+ }
152146
153- export type EdgeEventsEmit < CustomEvents = object > = {
147+ export type EdgeEventsEmit = {
154148 [ key in keyof EdgeEventsHandler ] : EventHookTrigger < EdgeEventsHandler [ key ] extends ( event : infer Event ) => any ? Event : never >
155- } & CustomEventHandlers < CustomEvents >
149+ }
0 commit comments