From 6f9ebbf609d3ec7e75a123b476cb45857e9eb404 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 9 Oct 2023 15:22:58 +0200 Subject: [PATCH 01/13] fix(react/svelte): select nodes on click when nodeDragThreshold > 0 --- packages/react/src/components/Nodes/wrapNode.tsx | 5 +++-- .../src/lib/components/NodeWrapper/NodeWrapper.svelte | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/react/src/components/Nodes/wrapNode.tsx b/packages/react/src/components/Nodes/wrapNode.tsx index c9c08135..f4e71c8d 100644 --- a/packages/react/src/components/Nodes/wrapNode.tsx +++ b/packages/react/src/components/Nodes/wrapNode.tsx @@ -67,8 +67,9 @@ export default (NodeComponent: ComponentType) => { const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu); const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick); const onSelectNodeHandler = (event: MouseEvent) => { - const { selectNodesOnDrag } = store.getState(); - if (isSelectable && (!selectNodesOnDrag || !isDraggable)) { + const { selectNodesOnDrag, nodeDragThreshold } = store.getState(); + + if (isSelectable && (!selectNodesOnDrag || !isDraggable || nodeDragThreshold > 0)) { // this handler gets called within the drag start event when selectNodesOnDrag=true handleNodeClick({ id, diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 058da8b2..10906aea 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -9,13 +9,13 @@ type ComponentType } from 'svelte'; import cc from 'classcat'; + import { get, writable } from 'svelte/store'; import { errorMessages, type NodeProps } from '@xyflow/system'; import drag from '$lib/actions/drag'; import { useStore } from '$lib/store'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; import type { NodeWrapperProps } from './types'; - import { writable } from 'svelte/store'; interface $$Props extends NodeWrapperProps {} @@ -42,7 +42,7 @@ export { className as class }; const store = useStore(); - const { nodeTypes, addSelectedNodes } = store; + const { nodeTypes, nodeDragThreshold, addSelectedNodes } = store; let nodeRef: HTMLDivElement; const nodeTypeValid = !!$nodeTypes[type!]; @@ -73,7 +73,7 @@ }); function onSelectNodeHandler(event: MouseEvent | TouchEvent) { - if (selectable && (!selectNodesOnDrag || !draggable)) { + if (selectable && (!selectNodesOnDrag || !draggable || get(nodeDragThreshold) > 0)) { // this handler gets called within the drag start event when selectNodesOnDrag=true addSelectedNodes([id]); } From a46104cf407fcc5b53323d72148530f38688abae Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 9 Oct 2023 15:51:53 +0200 Subject: [PATCH 02/13] refactor(svelte): cleanup nodes selection --- packages/svelte/CHANGELOG.md | 15 +++++++++++++++ packages/svelte/package.json | 2 +- .../components/NodeSelection/NodeSelection.svelte | 11 +++-------- .../src/lib/components/Selection/Selection.svelte | 8 +++++--- packages/svelte/src/styles/style.css | 8 ++++++++ packages/system/package.json | 2 +- 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index bfd9be66..d1ec076b 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,3 +1,18 @@ +## 0.0.23 + +- updates `useSvelteFlow` hook: + - add `screenToFlowCoordinate` and `flowToScreenCoordinate` + - add `getConnectedEdges`, `getIncomers` and `getOutgoers` + - add `deleteElements` + - add `fitBounds` + - add `getIntersectingNodes` and `isNodeIntersecting` +- add `useConnection` hook +- add `useNodes` hook +- add `useEdges` hook +- add `viewport` prop (writable viewport) +- fix selection style +- fix Background component with lines variant + ## 0.0.22 - add `connectionLine` slot for rendering a custom connection line diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 1de47e73..00bfbaf8 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.22", + "version": "0.0.23", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte index ea9ec202..1a409938 100644 --- a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte @@ -17,14 +17,9 @@ class="selection-wrapper nopan" style="width: {rect.width}px; height: {rect.height}px; transform: translate({rect.x}px, {rect.y}px)" use:drag={{ disabled: false, store }} - /> - + > + + {/if}