diff --git a/package.json b/package.json
index 274670c2..d87e4403 100644
--- a/package.json
+++ b/package.json
@@ -8,8 +8,8 @@
"scripts": {
"preinstall": "npx only-allow pnpm",
"dev": "turbo run dev --parallel --concurrency 12",
- "dev:svelte": "turbo run dev --filter=svelte --filter=system",
- "dev:react": "turbo run dev --filter=react-examples ",
+ "dev:svelte": "turbo run dev --filter=svelte-examples...",
+ "dev:react": "turbo run dev --filter=react-examples...",
"test:svelte": "pnpm --filter=playwright run test:svelte",
"test:svelte:ui": "pnpm --filter=playwright run test:svelte:ui",
"test:react": "pnpm --filter=playwright run test:react",
diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte
index 77195ea2..f059ff8e 100644
--- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte
+++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte
@@ -1,5 +1,5 @@
selectionKeyPressed.set(true)
+ ...selectionKeyDefinition,
+ callback: () => selectionKeyDefinition.key && selectionKeyPressed.set(true)
}
],
type: 'keydown'
@@ -53,9 +79,8 @@
use:shortcut={{
trigger: [
{
- key: selectionKeyString,
- modifier: selectionKeyModifier,
- callback: () => selectionKeyPressed.set(false)
+ ...selectionKeyDefinition,
+ callback: () => selectionKeyDefinition.key && selectionKeyPressed.set(false)
}
],
type: 'keyup'
@@ -63,9 +88,8 @@
use:shortcut={{
trigger: [
{
- key: multiSelectionKeyString,
- modifier: multiSelectionKeyModifier,
- callback: () => multiselectionKeyPressed.set(true)
+ ...multiSelectionKeyDefinition,
+ callback: () => multiSelectionKeyDefinition.key && multiselectionKeyPressed.set(true)
}
],
type: 'keydown'
@@ -73,9 +97,8 @@
use:shortcut={{
trigger: [
{
- key: multiSelectionKeyString,
- modifier: multiSelectionKeyModifier,
- callback: () => multiselectionKeyPressed.set(false)
+ ...multiSelectionKeyDefinition,
+ callback: () => multiSelectionKeyDefinition.key && multiselectionKeyPressed.set(false)
}
],
type: 'keyup'
@@ -83,11 +106,8 @@
use:shortcut={{
trigger: [
{
- key: deleteKeyString,
- modifier: deleteKeyModifier,
- callback: () => {
- deleteKeyPressed.set(true);
- }
+ ...deleteKeyDefinition,
+ callback: () => deleteKeyDefinition.key && deleteKeyPressed.set(true)
}
],
type: 'keydown'
@@ -95,9 +115,8 @@
use:shortcut={{
trigger: [
{
- key: deleteKeyString,
- modifier: deleteKeyModifier,
- callback: () => deleteKeyPressed.set(false)
+ ...deleteKeyDefinition,
+ callback: () => deleteKeyDefinition.key && deleteKeyPressed.set(false)
}
],
type: 'keyup'
@@ -105,9 +124,8 @@
use:shortcut={{
trigger: [
{
- key: panActivationKeyString,
- modifier: panActivationKeyModifier,
- callback: () => panActivationKeyPressed.set(true)
+ ...panActivationKeyDefinition,
+ callback: () => panActivationKeyDefinition.key && panActivationKeyPressed.set(true)
}
],
type: 'keydown'
@@ -115,9 +133,26 @@
use:shortcut={{
trigger: [
{
- key: panActivationKeyString,
- modifier: panActivationKeyModifier,
- callback: () => panActivationKeyPressed.set(false)
+ ...panActivationKeyDefinition,
+ callback: () => panActivationKeyDefinition.key && panActivationKeyPressed.set(false)
+ }
+ ],
+ type: 'keyup'
+ }}
+ use:shortcut={{
+ trigger: [
+ {
+ ...zoomActivationKeyDefinition,
+ callback: () => zoomActivationKeyDefinition.key && zoomActivationKeyPressed.set(true)
+ }
+ ],
+ type: 'keydown'
+ }}
+ use:shortcut={{
+ trigger: [
+ {
+ ...zoomActivationKeyDefinition,
+ callback: () => zoomActivationKeyDefinition.key && zoomActivationKeyPressed.set(false)
}
],
type: 'keyup'
diff --git a/packages/svelte/src/lib/components/KeyHandler/types.ts b/packages/svelte/src/lib/components/KeyHandler/types.ts
index de81d1c3..9a6ebe86 100644
--- a/packages/svelte/src/lib/components/KeyHandler/types.ts
+++ b/packages/svelte/src/lib/components/KeyHandler/types.ts
@@ -1,8 +1,9 @@
import type { KeyDefinition } from '$lib/types';
export type KeyHandlerProps = {
- selectionKey?: KeyDefinition;
- multiSelectionKey?: KeyDefinition;
- deleteKey?: KeyDefinition;
- panActivationKey?: KeyDefinition;
+ selectionKey?: KeyDefinition | null;
+ multiSelectionKey?: KeyDefinition | null;
+ deleteKey?: KeyDefinition | null;
+ panActivationKey?: KeyDefinition | null;
+ zoomActivationKey?: KeyDefinition | null;
};
diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte
index 0c74b4e0..c648d07b 100644
--- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte
+++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte
@@ -34,6 +34,8 @@
export let selectionKey: $$Props['selectionKey'] = undefined;
export let selectionMode: $$Props['selectionMode'] = undefined;
export let panActivationKey: $$Props['panActivationKey'] = undefined;
+ export let multiSelectionKey: $$Props['multiSelectionKey'] = undefined;
+ export let zoomActivationKey: $$Props['zoomActivationKey'] = undefined;
export let nodesDraggable: $$Props['nodesDraggable'] = undefined;
export let nodesConnectable: $$Props['nodesConnectable'] = undefined;
export let nodeDragThreshold: $$Props['nodeDragThreshold'] = undefined;
@@ -166,7 +168,13 @@
{...$$restProps}
role="application"
>
-
+
& {
edges: Writable;
nodeTypes?: NodeTypes;
edgeTypes?: EdgeTypes;
- selectionKey?: KeyDefinition;
- panActivationKey?: KeyDefinition;
- deleteKey?: KeyDefinition;
+ selectionKey?: KeyDefinition | null;
+ panActivationKey?: KeyDefinition | null;
+ deleteKey?: KeyDefinition | null;
+ multiSelectionKey?: KeyDefinition | null;
+ zoomActivationKey?: KeyDefinition | null;
fitView?: boolean;
fitViewOptions?: FitViewOptions;
nodeOrigin?: NodeOrigin;
diff --git a/packages/svelte/src/lib/container/Zoom/Zoom.svelte b/packages/svelte/src/lib/container/Zoom/Zoom.svelte
index 116586ad..a00199a1 100644
--- a/packages/svelte/src/lib/container/Zoom/Zoom.svelte
+++ b/packages/svelte/src/lib/container/Zoom/Zoom.svelte
@@ -28,7 +28,8 @@
dragging,
translateExtent,
lib,
- panActivationKeyPressed
+ panActivationKeyPressed,
+ zoomActivationKeyPressed
} = useStore();
$: viewPort = initialViewport || { x: 0, y: 0, zoom: 1 };
@@ -55,7 +56,7 @@
panOnDrag: _panOnDrag,
panOnScrollSpeed: 0.5,
panOnScrollMode: panOnScrollMode || PanOnScrollMode.Free,
- zoomActivationKeyPressed: false,
+ zoomActivationKeyPressed: $zoomActivationKeyPressed,
preventScrolling: typeof preventScrolling === 'boolean' ? preventScrolling : true,
noPanClassName: 'nopan',
noWheelClassName: 'nowheel',
diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts
index 4bb3d7af..2e40a719 100644
--- a/packages/svelte/src/lib/store/initial-store.ts
+++ b/packages/svelte/src/lib/store/initial-store.ts
@@ -105,6 +105,7 @@ export const getInitialStore = ({
multiselectionKeyPressed: writable(false),
deleteKeyPressed: writable(false),
panActivationKeyPressed: writable(false),
+ zoomActivationKeyPressed: writable(false),
selectionRectMode: writable(null),
selectionMode: writable(SelectionMode.Partial),
nodeTypes: writable(initialNodeTypes),
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b646fa44..05a5637d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3523,7 +3523,6 @@ packages:
version: 8.11.2
engines: {node: '>=0.4.0'}
hasBin: true
- dev: true
registry.npmjs.org/aggregate-error@3.1.0:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz}
@@ -4395,7 +4394,7 @@ packages:
dependencies:
'@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15
'@types/estree': registry.npmjs.org/@types/estree@1.0.3
- acorn: registry.npmjs.org/acorn@8.10.0
+ acorn: registry.npmjs.org/acorn@8.11.2
estree-walker: registry.npmjs.org/estree-walker@3.0.3
periscopic: registry.npmjs.org/periscopic@3.1.0
@@ -6029,6 +6028,7 @@ packages:
glob-parent: registry.npmjs.org/glob-parent@5.1.2
merge2: registry.npmjs.org/merge2@1.4.1
micromatch: registry.npmjs.org/micromatch@4.0.5
+ dev: false
registry.npmjs.org/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz}
@@ -10957,7 +10957,7 @@ packages:
dependencies:
'@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.20
chokidar: registry.npmjs.org/chokidar@3.5.3
- fast-glob: registry.npmjs.org/fast-glob@3.3.1
+ fast-glob: registry.npmjs.org/fast-glob@3.3.2
import-fresh: registry.npmjs.org/import-fresh@3.3.0
picocolors: registry.npmjs.org/picocolors@1.0.0
sade: registry.npmjs.org/sade@1.8.1
@@ -11230,7 +11230,7 @@ packages:
'@ampproject/remapping': registry.npmjs.org/@ampproject/remapping@2.2.1
'@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15
'@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.20
- acorn: registry.npmjs.org/acorn@8.10.0
+ acorn: registry.npmjs.org/acorn@8.11.2
aria-query: registry.npmjs.org/aria-query@5.3.0
axobject-query: registry.npmjs.org/axobject-query@3.2.1
code-red: registry.npmjs.org/code-red@1.0.4