diff --git a/packages/svelte/src/lib/components/EdgeLabel/EdgeLabel.svelte b/packages/svelte/src/lib/components/EdgeLabel/EdgeLabel.svelte index a1cce7f6..109fd8ee 100644 --- a/packages/svelte/src/lib/components/EdgeLabel/EdgeLabel.svelte +++ b/packages/svelte/src/lib/components/EdgeLabel/EdgeLabel.svelte @@ -20,10 +20,13 @@ const store = useStore(); - const id = getContext('svelteflow__edge_id'); + const edgeId = getContext('svelteflow__edge_id'); + if (!edgeId) { + throw new Error('EdgeLabel must be used within an edge'); + } let z = $derived.by(() => { - return store.visible.edges.get(id)?.zIndex; + return store.visible.edges.get(edgeId)?.zIndex; }); @@ -39,7 +42,7 @@ style:z-index={z} tabindex="-1" onclick={() => { - if (selectEdgeOnClick && id) store.handleEdgeSelection(id); + if (selectEdgeOnClick) store.handleEdgeSelection(edgeId); }} {...rest} > diff --git a/packages/svelte/src/lib/plugins/EdgeToolbar/EdgeToolbar.svelte b/packages/svelte/src/lib/plugins/EdgeToolbar/EdgeToolbar.svelte index 290878a4..39668df9 100644 --- a/packages/svelte/src/lib/plugins/EdgeToolbar/EdgeToolbar.svelte +++ b/packages/svelte/src/lib/plugins/EdgeToolbar/EdgeToolbar.svelte @@ -4,35 +4,41 @@ import { useStore } from '$lib/store'; import { EdgeLabel } from '$lib/components/EdgeLabel'; import type { EdgeToolbarProps } from './types'; + import { getContext } from 'svelte'; let { - edgeId, x, y, alignX = 'center', alignY = 'center', isVisible, + selectEdgeOnClick, + class: className, children, ...rest }: EdgeToolbarProps = $props(); const store = useStore(); + + const edgeId = getContext('svelteflow__edge_id'); + if (!edgeId) { + throw new Error('EdgeToolbar must be used within an edge'); + } + const edge = $derived(store.edgeLookup.get(edgeId)); const isActive = $derived(typeof isVisible === 'boolean' ? isVisible : edge?.selected); const transform = $derived(getEdgeToolbarTransform(x, y, store.viewport.zoom, alignX, alignY)); - const zIndex = $derived((edge?.zIndex ?? 0) + 1); -{#if store.domNode && isActive} - +{#if isActive} +
{@render children?.()}
diff --git a/packages/svelte/src/lib/plugins/EdgeToolbar/types.ts b/packages/svelte/src/lib/plugins/EdgeToolbar/types.ts index b1a63938..12655490 100644 --- a/packages/svelte/src/lib/plugins/EdgeToolbar/types.ts +++ b/packages/svelte/src/lib/plugins/EdgeToolbar/types.ts @@ -2,6 +2,7 @@ import type { EdgeToolbarBaseProps } from '@xyflow/system'; import type { Snippet } from 'svelte'; import type { HTMLAttributes } from 'svelte/elements'; -export type EdgeToolbarProps = EdgeToolbarBaseProps & { +export type EdgeToolbarProps = Omit & { + selectEdgeOnClick?: boolean; children?: Snippet; } & HTMLAttributes;