diff --git a/examples/react/src/examples/Overview/index.tsx b/examples/react/src/examples/Overview/index.tsx
index 3f5c72d0..8dddbb0d 100644
--- a/examples/react/src/examples/Overview/index.tsx
+++ b/examples/react/src/examples/Overview/index.tsx
@@ -237,7 +237,7 @@ const OverviewFlow = () => {
onPaneMouseMove={onPaneMouseMove}
>
-
+
);
diff --git a/examples/svelte/src/routes/examples/overview/+page.svelte b/examples/svelte/src/routes/examples/overview/+page.svelte
index 2f21107d..301730f6 100644
--- a/examples/svelte/src/routes/examples/overview/+page.svelte
+++ b/examples/svelte/src/routes/examples/overview/+page.svelte
@@ -189,8 +189,9 @@
autoPanOnNodeDrag
connectionMode={ConnectionMode.Strict}
attributionPosition={'top-center'}
+ deleteKey={['Backspace', 'd']}
>
-
+ xy console.log('control button')}
>log;
diff --git a/packages/react/src/hooks/useKeyPress.ts b/packages/react/src/hooks/useKeyPress.ts
index 9f738d06..beca4000 100644
--- a/packages/react/src/hooks/useKeyPress.ts
+++ b/packages/react/src/hooks/useKeyPress.ts
@@ -109,11 +109,13 @@ export function useKeyPress(
target?.addEventListener('keydown', downHandler as EventListenerOrEventListenerObject);
target?.addEventListener('keyup', upHandler as EventListenerOrEventListenerObject);
window.addEventListener('blur', resetHandler);
+ window.addEventListener('contextmenu', resetHandler);
return () => {
target?.removeEventListener('keydown', downHandler as EventListenerOrEventListenerObject);
target?.removeEventListener('keyup', upHandler as EventListenerOrEventListenerObject);
window.removeEventListener('blur', resetHandler);
+ window.removeEventListener('contextmenu', resetHandler);
};
}
}, [keyCode, setKeyPressed]);
diff --git a/packages/svelte/.eslintignore b/packages/svelte/.eslintignore
index 38972655..c4563de9 100644
--- a/packages/svelte/.eslintignore
+++ b/packages/svelte/.eslintignore
@@ -2,6 +2,7 @@
node_modules
/build
/.svelte-kit
+dist
/package
.env
.env.*
diff --git a/packages/svelte/.prettierrc b/packages/svelte/.prettierrc
index 862e74f2..20bc78a9 100644
--- a/packages/svelte/.prettierrc
+++ b/packages/svelte/.prettierrc
@@ -3,6 +3,5 @@
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
- "pluginSearchDirs": ["."],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}
diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md
index 5ea7f58e..109271be 100644
--- a/packages/svelte/CHANGELOG.md
+++ b/packages/svelte/CHANGELOG.md
@@ -1,5 +1,13 @@
# @xyflow/svelte
+## 0.0.40
+
+- add `orientation` ('horizontal' or 'vertical'), `style` and `class` prop for `Controls` component
+- allow multiple keys for `deleteKey`, `selectionKey`, `multiSelectionKey`, `panActivationKey` and `zoomActivationKey`
+- fix node observe / unobserve
+- fix edge and node types
+- active context menu releases pressed keys to reset selection
+
## 0.0.39
## ⚠️ Breaking changes
@@ -16,7 +24,7 @@
## ⚠️ Breaking changes
-- `NodeProps` generic is a node and not only node data. `type $$Props = NodeProps`
+- `NodeProps` generic is a node and not only node data. `type $$Props = NodeProps`
## Patch changes
@@ -45,7 +53,7 @@
- fix `on:panecontextmenu`
- add `role="button"` to `` to prevent a11y warnings
- don't delete node when input is focused and user presses Backspace + Ctrl (or any other mod key)
-- `useHandleConnections`: use context node id when no node id is passed
+- `useHandleConnections`: use context node id when no node id is passed
- don't trigger drag start / end when node is not draggable
## 0.0.35
@@ -87,7 +95,7 @@
### ⚠️ Breaking
-- `deleteElements` function now takes one object as an argument `{ nodes: [], edges: [] }` instead of two `(nodes, edges)`
+- `deleteElements` function now takes one object as an argument `{ nodes: [], edges: [] }` instead of two `(nodes, edges)`
## 0.0.32
@@ -106,7 +114,7 @@
### Features
- add `onbeforedelete` handler to prevent/ manage deletions
-- TSDocs for hooks and some types
+- TSDocs for hooks and some types
### Patch changes
@@ -302,4 +310,4 @@ This very first release comes with lots of features already:
- draggable, selectable and deletable nodes
- support for custom `nodeTypes` and `edgeTypes`
- basic viewport settings like `fitView`, `minZoom` and `maxZoom`
-- additional components: ``, `` & ``
+- additional components: ``, `` & ``
diff --git a/packages/svelte/README.md b/packages/svelte/README.md
index 33e84761..d16da36c 100644
--- a/packages/svelte/README.md
+++ b/packages/svelte/README.md
@@ -10,7 +10,7 @@ Svelte Flow is a highly customizable component for building interactive graphs a
☣️ **Svelte Flow is still alpha and currently under heavy development. The API is relatively stable but some things might change.** ☣️
-[🚀 Getting Started](https://svelteflow.dev/learn) | [📖 Documentation](https://svelteflow.dev/api-reference/svelte-flow) | [📺 Examples](https://svelteflow.dev/examples/overview) | [☎️ Discord](https://discord.gg/RVmnytFmGW)
+[🚀 Getting Started](https://svelteflow.dev/learn) | [📖 Documentation](https://svelteflow.dev/api-reference/svelte-flow) | [📺 Examples](https://svelteflow.dev/examples/overview) | [☎️ Discord](https://discord.gg/RVmnytFmGW)
@@ -18,7 +18,7 @@ Svelte Flow is a highly customizable component for building interactive graphs a
- **Easy to use:** Seamless zooming and panning, single- and multi selection of graph elements and keyboard shortcuts are supported out of the box
- **Customizable:** Different [node](https://svelteflow.dev/examples) and [edge types](https://svelteflow.dev/examples/edges/edge-types) and support for custom nodes with multiple handles and custom edges
-- **Fast rendering:** Only nodes that have changed are re-rendered
+- **Fast rendering:** Only nodes that have changed are re-rendered
- **Hooks and Utils:** [Hooks](https://svelteflow.dev/api-reference/hooks) for handling nodes, edges and the viewport and graph [helper functions](https://svelteflow.dev/api-reference/utils)
- **Plugin Components:** [Background](https://svelteflow.dev/api-reference/components/background), [MiniMap](https://svelteflow.dev/api-reference/components/minimap) and [Controls](https://svelteflow.dev/api-reference/components/controls)
- **Reliable**: Written in [Typescript](https://www.typescriptlang.org) and tested with [Playwright](https://www.playwright.dev)
@@ -38,18 +38,12 @@ You only need a few lines to get a fully interactive (e.g. select and drag nodes
```svelte
- console.log('on node click', event)}
->
+ console.log('on node click', event)}>
@@ -102,7 +91,6 @@ You only need a few lines to get a fully interactive (e.g. select and drag nodes
And of course, we love Github stars ⭐
-
## Development
If you want to check out the current version you need to run the following command from the root directory:
@@ -113,7 +101,6 @@ If you want to check out the current version you need to run the following comma
You can now access the examples under http://127.0.0.1:5173
-
## Maintainers
Svelte Flow is maintained by the team behind [xyflow](https://xyflow.com). If you need help or want to talk to us about a collaboration, reach out through our [contact form](https://xyflow.com/contact) or by joining our [Discord Server](https://discord.gg/Bqt6xrs).
diff --git a/packages/svelte/src/lib/components/Attribution/Attribution.svelte b/packages/svelte/src/lib/components/Attribution/Attribution.svelte
index 8edf0074..bb7041d7 100644
--- a/packages/svelte/src/lib/components/Attribution/Attribution.svelte
+++ b/packages/svelte/src/lib/components/Attribution/Attribution.svelte
@@ -4,8 +4,8 @@
type $$Props = AttributionProps;
- export let proOptions: AttributionProps['proOptions'] = undefined;
- export let position: AttributionProps['position'] = 'bottom-right';
+ export let proOptions: $$Props['proOptions'] = undefined;
+ export let position: $$Props['position'] = 'bottom-right';
{#if !proOptions?.hideAttribution}
diff --git a/packages/svelte/src/lib/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte b/packages/svelte/src/lib/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte
index f3cfeca9..76bc8061 100644
--- a/packages/svelte/src/lib/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte
+++ b/packages/svelte/src/lib/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte
@@ -2,8 +2,6 @@
import portal from '$lib/actions/portal';
import { useStore } from '$lib/store';
- type $$Props = {};
-
const { domNode } = useStore();
diff --git a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts
index 18592b1b..02f40786 100644
--- a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts
+++ b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts
@@ -1 +1 @@
-export { default as EdgeLabelRenderer } from './EdgeLabelRenderer.svelte';
\ No newline at end of file
+export { default as EdgeLabelRenderer } from './EdgeLabelRenderer.svelte';
diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte
index 0a229099..f2166cee 100644
--- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte
+++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte
@@ -51,7 +51,7 @@
edgecontextmenu: { edge: Edge; event: MouseEvent };
}>();
- const edgeType = type || 'default';
+ $: edgeType = type || 'default';
$: edgeComponent = $edgeTypes[edgeType] || BezierEdgeInternal;
$: markerStartUrl = markerStart ? `url(#${getMarkerId(markerStart, $flowId)})` : undefined;
$: markerEndUrl = markerEnd ? `url(#${getMarkerId(markerEnd, $flowId)})` : undefined;
@@ -80,7 +80,7 @@
{#if !hidden}
-