From 17646123de0d03b221a06fab2e38c07624b0da04 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Tue, 13 May 2025 15:54:25 +0200 Subject: [PATCH] add onselectiondrag events --- packages/svelte/src/lib/actions/drag/index.ts | 3 +++ .../src/lib/container/SvelteFlow/Wrapper.svelte | 3 +++ .../svelte/src/lib/container/SvelteFlow/types.ts | 14 +++++++++++++- .../svelte/src/lib/store/initial-store.svelte.ts | 7 ++++++- packages/svelte/src/lib/types/events.ts | 5 +++++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 84539018..18aa2e3c 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -47,6 +47,9 @@ export default function drag void; /** This event handler gets called when the selected nodes & edges change */ onselectionchange?: OnSelectionChange; + /** This event handler gets called when a user starts to drag a selection box. */ + onselectiondragstart?: OnSelectionDrag; + /** This event handler gets called when a user drags a selection box. */ + onselectiondrag?: OnSelectionDrag; + /** This event handler gets called when a user stops dragging a selection box. */ + onselectiondragstop?: OnSelectionDrag; }; diff --git a/packages/svelte/src/lib/store/initial-store.svelte.ts b/packages/svelte/src/lib/store/initial-store.svelte.ts index 3f8ab896..9d67e65a 100644 --- a/packages/svelte/src/lib/store/initial-store.svelte.ts +++ b/packages/svelte/src/lib/store/initial-store.svelte.ts @@ -60,7 +60,8 @@ import type { EdgeLayouted, InternalNode, OnBeforeReconnect, - OnSelectionChange + OnSelectionChange, + OnSelectionDrag } from '$lib/types'; import type { StoreSignals } from './types'; @@ -359,6 +360,10 @@ export function getInitialStore | null = $state(null); + onselectiondrag?: OnSelectionDrag = $derived(signals.props.onselectiondrag); + onselectiondragstart?: OnSelectionDrag = $derived(signals.props.onselectiondragstart); + onselectiondragstop?: OnSelectionDrag = $derived(signals.props.onselectiondragstop); + resolveFitView = async () => { if (!this.panZoom) { return; diff --git a/packages/svelte/src/lib/types/events.ts b/packages/svelte/src/lib/types/events.ts index 1c7b147c..24db8e1e 100644 --- a/packages/svelte/src/lib/types/events.ts +++ b/packages/svelte/src/lib/types/events.ts @@ -70,3 +70,8 @@ export type EdgeEvents = { /** This event handler is called when the pointer of a user enters an edge. */ onedgepointerleave?: ({ edge, event }: { edge: EdgeType; event: PointerEvent }) => void; }; + +export type OnSelectionDrag = ( + event: MouseEvent, + nodes: NodeType[] +) => void;