1
1
<script lang="ts" setup>
2
2
import { useVModel } from ' @vueuse/core'
3
- import { onUnmounted , provide , useSlots } from ' vue'
4
- import type { D3ZoomEvent } from ' d3-zoom'
3
+ import { onUnmounted , provide } from ' vue'
5
4
import Viewport from ' ../Viewport/Viewport.vue'
6
5
import A11yDescriptions from ' ../../components/A11y/A11yDescriptions.vue'
7
- import type { FlowElements , FlowProps } from ' ../../types/flow'
8
- import type {
9
- Connection ,
10
- EdgeChange ,
11
- EdgeMouseEvent ,
12
- EdgeUpdateEvent ,
13
- GraphEdge ,
14
- GraphNode ,
15
- NodeChange ,
16
- NodeDragEvent ,
17
- NodeMouseEvent ,
18
- OnConnectStartParams ,
19
- ViewportTransform ,
20
- VueFlowStore ,
21
- } from ' ../../types'
22
- import type { VueFlowError } from ' ../../utils/errors'
6
+ import type { FlowEmits , FlowProps , FlowSlots , VueFlowStore } from ' ../../types'
23
7
import { useVueFlow , useWatchProps } from ' ../../composables'
24
8
import { useHooks } from ' ../../store'
25
9
import { Slots } from ' ../../context'
@@ -59,75 +43,9 @@ const props = withDefaults(defineProps<FlowProps>(), {
59
43
zoomActivationKeyCode: undefined ,
60
44
})
61
45
62
- const emit = defineEmits <{
63
- (event : ' nodesChange' , changes : NodeChange []): void
64
- (event : ' edgesChange' , changes : EdgeChange []): void
65
- (event : ' nodeDoubleClick' , nodeMouseEvent : NodeMouseEvent ): void
66
- (event : ' nodeClick' , nodeMouseEvent : NodeMouseEvent ): void
67
- (event : ' nodeMouseEnter' , nodeMouseEvent : NodeMouseEvent ): void
68
- (event : ' nodeMouseMove' , nodeMouseEvent : NodeMouseEvent ): void
69
- (event : ' nodeMouseLeave' , nodeMouseEvent : NodeMouseEvent ): void
70
- (event : ' nodeContextMenu' , nodeMouseEvent : NodeMouseEvent ): void
71
- (event : ' nodeDragStart' , nodeDragEvent : NodeDragEvent ): void
72
- (event : ' nodeDrag' , nodeDragEvent : NodeDragEvent ): void
73
- (event : ' nodeDragStop' , nodeDragEvent : NodeDragEvent ): void
74
- (event : ' nodesInitialized' ): void
75
- (event : ' miniMapNodeClick' , nodeMouseEvent : NodeMouseEvent ): void
76
- (event : ' miniMapNodeDoubleClick' , nodeMouseEvent : NodeMouseEvent ): void
77
- (event : ' miniMapNodeMouseEnter' , nodeMouseEvent : NodeMouseEvent ): void
78
- (event : ' miniMapNodeMouseMove' , nodeMouseEvent : NodeMouseEvent ): void
79
- (event : ' miniMapNodeMouseLeave' , nodeMouseEvent : NodeMouseEvent ): void
80
- (event : ' connect' , connectionEvent : Connection ): void
81
- (
82
- event : ' connectStart' ,
83
- connectionEvent : {
84
- event? : MouseEvent
85
- } & OnConnectStartParams ,
86
- ): void
87
- (event : ' connectEnd' , connectionEvent ? : MouseEvent ): void
88
- (
89
- event : ' clickConnectStart' ,
90
- connectionEvent : {
91
- event? : MouseEvent
92
- } & OnConnectStartParams ,
93
- ): void
94
- (event : ' clickConnectEnd' , connectionEvent ? : MouseEvent ): void
95
- (event : ' moveStart' , moveEvent : { event: D3ZoomEvent <HTMLDivElement , any >; flowTransform: ViewportTransform }): void
96
- (event : ' move' , moveEvent : { event: D3ZoomEvent <HTMLDivElement , any >; flowTransform: ViewportTransform }): void
97
- (event : ' moveEnd' , moveEvent : { event: D3ZoomEvent <HTMLDivElement , any >; flowTransform: ViewportTransform }): void
98
- (event : ' selectionDragStart' , selectionEvent : NodeDragEvent ): void
99
- (event : ' selectionDrag' , selectionEvent : NodeDragEvent ): void
100
- (event : ' selectionDragStop' , selectionEvent : NodeDragEvent ): void
101
- (event : ' selectionContextMenu' , selectionEvent : { event: MouseEvent ; nodes: GraphNode [] }): void
102
- (event : ' selectionStart' , selectionEvent : MouseEvent ): void
103
- (event : ' selectionEnd' , selectionEvent : MouseEvent ): void
104
- (event : ' viewportChangeStart' , viewport : ViewportTransform ): void
105
- (event : ' viewportChange' , viewport : ViewportTransform ): void
106
- (event : ' viewportChangeEnd' , viewport : ViewportTransform ): void
107
- (event : ' paneReady' , paneEvent : VueFlowStore ): void
108
- (event : ' paneScroll' , paneEvent : WheelEvent | undefined ): void
109
- (event : ' paneClick' , paneEvent : MouseEvent ): void
110
- (event : ' paneContextMenu' , paneEvent : MouseEvent ): void
111
- (event : ' paneMouseEnter' , paneEvent : MouseEvent ): void
112
- (event : ' paneMouseMove' , paneEvent : MouseEvent ): void
113
- (event : ' paneMouseLeave' , paneEvent : MouseEvent ): void
114
- (event : ' edgeContextMenu' , edgeMouseEvent : EdgeMouseEvent ): void
115
- (event : ' edgeMouseEnter' , edgeMouseEvent : EdgeMouseEvent ): void
116
- (event : ' edgeMouseMove' , edgeMouseEvent : EdgeMouseEvent ): void
117
- (event : ' edgeMouseLeave' , edgeMouseEvent : EdgeMouseEvent ): void
118
- (event : ' edgeDoubleClick' , edgeMouseEvent : EdgeMouseEvent ): void
119
- (event : ' edgeClick' , edgeMouseEvent : EdgeMouseEvent ): void
120
- (event : ' edgeUpdateStart' , edgeMouseEvent : EdgeMouseEvent ): void
121
- (event : ' edgeUpdate' , edgeUpdateEvent : EdgeUpdateEvent ): void
122
- (event : ' edgeUpdateEnd' , edgeMouseEvent : EdgeMouseEvent ): void
123
- (event : ' updateNodeInternals' ): void
124
- (event : ' error' , error : VueFlowError ): void
46
+ const emit = defineEmits <FlowEmits >()
125
47
126
- /** v-model event definitions */
127
- (event : ' update:modelValue' , value : FlowElements ): void
128
- (event : ' update:nodes' , value : GraphNode []): void
129
- (event : ' update:edges' , value : GraphEdge []): void
130
- }>()
48
+ const slots = defineSlots <FlowSlots >()
131
49
132
50
const modelValue = useVModel (props , ' modelValue' , emit )
133
51
const modelNodes = useVModel (props , ' nodes' , emit )
@@ -145,7 +63,7 @@ const dispose = useWatchProps({ modelValue, nodes: modelNodes, edges: modelEdges
145
63
146
64
useHooks (emit , hooks )
147
65
148
- provide (Slots , useSlots () )
66
+ provide (Slots , slots )
149
67
150
68
onUnmounted (() => {
151
69
dispose ()
@@ -170,32 +88,13 @@ export default {
170
88
<template >
171
89
<div ref =" vueFlowRef" class =" vue-flow" >
172
90
<Viewport >
173
- <!-- Pseudo-slots for nodes and edges so we can collect the templates using `useSlots` -->
174
- <template #nodes >
175
- <template v-for =" nodeName of Object .keys (getNodeTypes )" >
176
- <slot :name =" `node-${nodeName}`" />
177
- </template >
178
- </template >
179
-
180
- <template #edges >
181
- <template v-for =" edgeName of Object .keys (getEdgeTypes )" >
182
- <slot :name =" `edge-${edgeName}`" />
183
- </template >
184
- </template >
185
-
186
- <template #connection-line >
187
- <slot name =" connection-line" />
188
- </template >
189
-
190
91
<!-- This slot will be passed down to the transformation-pane and rendered inside there, meaning it's affected by zooming/panning -->
191
- <template #zoom-pane >
192
- <slot name =" zoom-pane" />
193
- </template >
194
-
195
- <!-- This slot will render outside the transformation-pane, meaning it's *not* affected by zooming and panning -->
196
- <slot />
92
+ <slot name =" zoom-pane" />
197
93
</Viewport >
198
94
95
+ <!-- This slot will render outside the transformation-pane, meaning it's *not* affected by zooming and panning -->
96
+ <slot />
97
+
199
98
<A11yDescriptions />
200
99
</div >
201
100
</template >
0 commit comments