make edgeId optional, fix usage of edgeLabel

This commit is contained in:
peterkogo
2025-10-20 16:27:42 +02:00
parent 8e7c539531
commit 8068a3ab71
3 changed files with 21 additions and 11 deletions
@@ -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<string>('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);
</script>
{#if store.domNode && isActive}
<EdgeLabel>
{#if isActive}
<EdgeLabel {selectEdgeOnClick} transparent>
<div
style:position="absolute"
style:transform
style:z-index={zIndex}
style:transform-origin="0 0"
class={['svelte-flow__edge-toolbar', className]}
data-id={edgeId}
{...rest}
class="svelte-flow__edge-toolbar"
data-id={edgeId ?? ''}
>
{@render children?.()}
</div>
@@ -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<EdgeToolbarBaseProps, 'edgeId'> & {
selectEdgeOnClick?: boolean;
children?: Snippet;
} & HTMLAttributes<HTMLDivElement>;