Merge branch xyflow into svelte-flow-fit-view-options

This commit is contained in:
Peter
2023-09-26 11:08:29 +02:00
7 changed files with 35 additions and 7 deletions
@@ -14,6 +14,7 @@ import {
Controls, Controls,
Background, Background,
MiniMap, MiniMap,
ConnectionMode,
} from '@xyflow/react'; } from '@xyflow/react';
const onNodeDragStart = (_: ReactMouseEvent, node: Node, nodes: Node[]) => console.log('drag start', node, nodes); const onNodeDragStart = (_: ReactMouseEvent, node: Node, nodes: Node[]) => console.log('drag start', node, nodes);
@@ -193,6 +194,7 @@ const OverviewFlow = () => {
<ReactFlow <ReactFlow
nodes={nodes} nodes={nodes}
edges={edges} edges={edges}
connectionMode={ConnectionMode.Strict}
onNodesChange={onNodesChange} onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange} onEdgesChange={onEdgesChange}
onNodeClick={onNodeClick} onNodeClick={onNodeClick}
@@ -11,7 +11,8 @@
type NodeTypes, type NodeTypes,
type EdgeTypes, type EdgeTypes,
type Node, type Node,
type Edge type Edge,
ConnectionMode
} from '@xyflow/svelte'; } from '@xyflow/svelte';
import CustomNode from './CustomNode.svelte'; import CustomNode from './CustomNode.svelte';
@@ -167,8 +168,14 @@
event.detail.event.preventDefault(); event.detail.event.preventDefault();
console.log('on node contextmenu', event); console.log('on node contextmenu', event);
}} }}
on:edgecontextmenu={({ detail: { event, edge } }) => {
event.preventDefault();
console.log('on edge contextmenu', edge);
}}
autoPanOnConnect autoPanOnConnect
autoPanOnNodeDrag autoPanOnNodeDrag
connectionMode={ConnectionMode.Strict}
attributionPosition={'top-center'}
> >
<Controls /> <Controls />
<Background variant={BackgroundVariant.Dots} /> <Background variant={BackgroundVariant.Dots} />
@@ -51,6 +51,11 @@
const edge = $edges.find((e) => e.id === id); const edge = $edges.find((e) => e.id === id);
dispatch('edgeclick', { event, edge }); dispatch('edgeclick', { event, edge });
} }
function onContextMenu(event: MouseEvent) {
const edge = $edges.find((e) => e.id === id);
dispatch('edgecontextmenu', { event, edge });
}
</script> </script>
<!-- svelte-ignore a11y-click-events-have-key-events --> <!-- svelte-ignore a11y-click-events-have-key-events -->
@@ -62,6 +67,7 @@
class:selected class:selected
data-id={id} data-id={id}
on:click={onClick} on:click={onClick}
on:contextmenu={onContextMenu}
aria-label={ariaLabel === null aria-label={ariaLabel === null
? undefined ? undefined
: ariaLabel : ariaLabel
@@ -30,7 +30,8 @@
edge.selectable || edge.selectable ||
($elementsSelectable && typeof edge.selectable === 'undefined') ($elementsSelectable && typeof edge.selectable === 'undefined')
)} )}
<EdgeWrapper {...edge} type={edgeType} {selectable} on:edgeclick />
<EdgeWrapper {...edge} type={edgeType} {selectable} on:edgeclick on:edgecontextmenu />
{/each} {/each}
</g> </g>
</svg> </svg>
@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { onMount, hasContext } from 'svelte'; import { onMount, hasContext } from 'svelte';
import cc from 'classcat'; import cc from 'classcat';
import { PanOnScrollMode, type Viewport } from '@xyflow/system'; import { ConnectionMode, PanOnScrollMode, type Viewport } from '@xyflow/system';
import { Zoom } from '$lib/container/Zoom'; import { Zoom } from '$lib/container/Zoom';
import { Pane } from '$lib/container/Pane'; import { Pane } from '$lib/container/Pane';
@@ -39,6 +39,7 @@
export let deleteKey: $$Props['deleteKey'] = undefined; export let deleteKey: $$Props['deleteKey'] = undefined;
export let connectionRadius: $$Props['connectionRadius'] = undefined; export let connectionRadius: $$Props['connectionRadius'] = undefined;
export let connectionLineType: $$Props['connectionLineType'] = undefined; export let connectionLineType: $$Props['connectionLineType'] = undefined;
export let connectionMode: $$Props['connectionMode'] = ConnectionMode.Strict;
export let onMoveStart: $$Props['onMoveStart'] = undefined; export let onMoveStart: $$Props['onMoveStart'] = undefined;
export let onMove: $$Props['onMove'] = undefined; export let onMove: $$Props['onMove'] = undefined;
export let onMoveEnd: $$Props['onMoveEnd'] = undefined; export let onMoveEnd: $$Props['onMoveEnd'] = undefined;
@@ -55,6 +56,8 @@
export let autoPanOnConnect: $$Props['autoPanOnConnect'] = true; export let autoPanOnConnect: $$Props['autoPanOnConnect'] = true;
export let autoPanOnNodeDrag: $$Props['autoPanOnNodeDrag'] = true; export let autoPanOnNodeDrag: $$Props['autoPanOnNodeDrag'] = true;
export let onError: $$Props['onError'] = undefined; export let onError: $$Props['onError'] = undefined;
export let attributionPosition: $$Props['attributionPosition'] = undefined;
export let proOptions: $$Props['proOptions'] = undefined;
export let defaultEdgeOptions: $$Props['defaultEdgeOptions'] = undefined; export let defaultEdgeOptions: $$Props['defaultEdgeOptions'] = undefined;
export let defaultMarkerColor = '#b1b1b7'; export let defaultMarkerColor = '#b1b1b7';
@@ -114,7 +117,8 @@
isValidConnection, isValidConnection,
autoPanOnConnect, autoPanOnConnect,
autoPanOnNodeDrag, autoPanOnNodeDrag,
onError onError,
connectionMode
}; };
updateStoreByKeys(store, updatableProps); updateStoreByKeys(store, updatableProps);
@@ -155,7 +159,7 @@
> >
<Pane on:paneclick panOnDrag={panOnDrag === undefined ? true : panOnDrag}> <Pane on:paneclick panOnDrag={panOnDrag === undefined ? true : panOnDrag}>
<ViewportComponent> <ViewportComponent>
<EdgeRenderer on:edgeclick {defaultEdgeOptions} /> <EdgeRenderer on:edgeclick on:edgecontextmenu {defaultEdgeOptions} />
<ConnectionLine /> <ConnectionLine />
<div class="svelte-flow__edgelabel-renderer" /> <div class="svelte-flow__edgelabel-renderer" />
<NodeRenderer <NodeRenderer
@@ -176,7 +180,7 @@
<UserSelection /> <UserSelection />
</Pane> </Pane>
</Zoom> </Zoom>
<Attribution /> <Attribution {proOptions} position={attributionPosition} />
<slot /> <slot />
</div> </div>
@@ -14,7 +14,10 @@ import type {
IsValidConnection, IsValidConnection,
HandleType, HandleType,
NodeBase, NodeBase,
OnError OnError,
ConnectionMode,
PanelPosition,
ProOptions
} from '@xyflow/system'; } from '@xyflow/system';
import type { import type {
@@ -44,6 +47,7 @@ export type SvelteFlowProps = DOMAttributes<HTMLDivElement> & {
maxZoom?: number; maxZoom?: number;
initialViewport?: Viewport; initialViewport?: Viewport;
connectionRadius?: number; connectionRadius?: number;
connectionMode?: ConnectionMode;
selectionMode?: SelectionMode; selectionMode?: SelectionMode;
snapGrid?: SnapGrid; snapGrid?: SnapGrid;
defaultMarkerColor?: string; defaultMarkerColor?: string;
@@ -61,6 +65,8 @@ export type SvelteFlowProps = DOMAttributes<HTMLDivElement> & {
onlyRenderVisibleElements?: boolean; onlyRenderVisibleElements?: boolean;
autoPanOnConnect?: boolean; autoPanOnConnect?: boolean;
autoPanOnNodeDrag?: boolean; autoPanOnNodeDrag?: boolean;
attributionPosition?: PanelPosition;
proOptions?: ProOptions;
defaultEdgeOptions?: DefaultEdgeOptions; defaultEdgeOptions?: DefaultEdgeOptions;
class?: string; class?: string;
@@ -79,6 +85,7 @@ export type SvelteFlowProps = DOMAttributes<HTMLDivElement> & {
'on:nodemousemove'?: CustomEvent<{ event: MouseEvent; node: Node }>; 'on:nodemousemove'?: CustomEvent<{ event: MouseEvent; node: Node }>;
'on:nodemouseleave'?: CustomEvent<{ event: MouseEvent; node: Node }>; 'on:nodemouseleave'?: CustomEvent<{ event: MouseEvent; node: Node }>;
'on:edgeclick'?: CustomEvent<{ event: MouseEvent; edge: Edge }>; 'on:edgeclick'?: CustomEvent<{ event: MouseEvent; edge: Edge }>;
'on:edgecontextmenu'?: CustomEvent<{ event: MouseEvent; edge: Edge }>;
'on:connectstart'?: CustomEvent<{ 'on:connectstart'?: CustomEvent<{
event: MouseEvent | TouchEvent; event: MouseEvent | TouchEvent;
nodeId?: string; nodeId?: string;
@@ -61,6 +61,7 @@ export type UpdatableStoreProps = {
isValidConnection?: UnwrapWritable<SvelteFlowStore['isValidConnection']>; isValidConnection?: UnwrapWritable<SvelteFlowStore['isValidConnection']>;
autoPanOnConnect?: UnwrapWritable<SvelteFlowStore['autoPanOnConnect']>; autoPanOnConnect?: UnwrapWritable<SvelteFlowStore['autoPanOnConnect']>;
autoPanOnNodeDrag?: UnwrapWritable<SvelteFlowStore['autoPanOnNodeDrag']>; autoPanOnNodeDrag?: UnwrapWritable<SvelteFlowStore['autoPanOnNodeDrag']>;
connectionMode?: UnwrapWritable<SvelteFlowStore['connectionMode']>;
onError?: UnwrapWritable<SvelteFlowStore['onError']>; onError?: UnwrapWritable<SvelteFlowStore['onError']>;
}; };