Merge branch xyflow into svelte-flow-fit-view-options
This commit is contained in:
@@ -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']>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user