diff --git a/package.json b/package.json index 7a5cee96..be5c86ad 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "scripts": { "preinstall": "npx only-allow pnpm", "dev": "turbo run dev --parallel", + "dev:svelte": "turbo run dev --filter=svelte --filter=system", + "dev:react": "turbo run dev --filter=react", "build": "turbo run build", "test": "turbo run test", "lint": "turbo run lint", diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 5b782fc2..eee69f3d 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -33,7 +33,7 @@ "access": "public" }, "dependencies": { - "@svelte-put/shortcut": "^2.0.0", + "@svelte-put/shortcut": "^3.0.0", "@xyflow/system": "workspace:*", "classcat": "^5.0.4" }, diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index 9467c391..089aea87 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -6,6 +6,7 @@ 'customnode', 'drag-n-drop', 'edges', + 'figma', 'interaction', 'overview', 'stress', diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 02519cf7..b271bbf8 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,5 +1,5 @@ + diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index 9b2747db..d31d0781 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -9,8 +9,9 @@ export let selectionKey: $$Props['selectionKey'] = 'Shift'; export let deleteKey: $$Props['deleteKey'] = 'Backspace'; + export let panActivationKey: $$Props['panActivationKey'] = ' '; - const { selectionKeyPressed, deleteKeyPressed } = useStore(); + const { selectionKeyPressed, deleteKeyPressed, panActivationKeyPressed } = useStore(); function isKeyObject(key?: KeyDefinition): key is KeyDefinitionObject { return typeof key === 'object'; @@ -21,6 +22,10 @@ $: deleteKeyString = typeof deleteKey === 'string' ? deleteKey : deleteKey!.key; $: deleteKeyModifier = isKeyObject(deleteKey) ? deleteKey?.modifier : []; + + $: panActivationKeyString = + typeof panActivationKey === 'string' ? panActivationKey : panActivationKey!.key; + $: panActivationKeyModifier = isKeyObject(panActivationKey) ? panActivationKey?.modifier : []; deleteKeyPressed.set(true) + callback: () => { + console.log('delete'); + deleteKeyPressed.set(true); + } } ], type: 'keydown' @@ -64,4 +72,24 @@ ], type: 'keyup' }} + use:shortcut={{ + trigger: [ + { + key: panActivationKeyString, + modifier: panActivationKeyModifier, + callback: () => panActivationKeyPressed.set(true) + } + ], + type: 'keydown' + }} + use:shortcut={{ + trigger: [ + { + key: panActivationKeyString, + modifier: panActivationKeyModifier, + callback: () => panActivationKeyPressed.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 14e76167..70cc95a5 100644 --- a/packages/svelte/src/lib/components/KeyHandler/types.ts +++ b/packages/svelte/src/lib/components/KeyHandler/types.ts @@ -3,4 +3,5 @@ import type { KeyDefinition } from '$lib/types'; export type KeyHandlerProps = { selectionKey?: KeyDefinition; deleteKey?: KeyDefinition; + panActivationKey?: KeyDefinition; }; diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index bb956356..3a8d028c 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -1,5 +1,11 @@ +
{ - if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) { + if (Array.isArray(_panOnDrag) && _panOnDrag?.includes(2)) { event.preventDefault(); return; } @@ -168,6 +170,8 @@ }; + +
- + & { nodeTypes?: NodeTypes; edgeTypes?: EdgeTypes; selectionKey?: KeyDefinition; + panActivationKey?: KeyDefinition; deleteKey?: KeyDefinition; fitView?: boolean; nodeOrigin?: NodeOrigin; diff --git a/packages/svelte/src/lib/container/Zoom/Zoom.svelte b/packages/svelte/src/lib/container/Zoom/Zoom.svelte index 01da8419..1a4a7008 100644 --- a/packages/svelte/src/lib/container/Zoom/Zoom.svelte +++ b/packages/svelte/src/lib/container/Zoom/Zoom.svelte @@ -27,10 +27,12 @@ maxZoom, dragging, translateExtent, - lib + lib, + panActivationKeyPressed } = useStore(); $: viewPort = initialViewport || { x: 0, y: 0, zoom: 1 }; + $: _panOnDrag = $panActivationKeyPressed || panOnDrag;
({ selectionKeyPressed: writable(false), multiselectionKeyPressed: writable(false), deleteKeyPressed: writable(false), + panActivationKeyPressed: writable(false), selectionRectMode: writable(null), selectionMode: writable(SelectionMode.Partial), nodeTypes: writable(initialNodeTypes), diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 6ef9f083..3f68b509 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { SvelteComponentTyped } from 'svelte'; +import type { SvelteComponent, ComponentType } from 'svelte'; import type { EdgeBase, BezierPathOptions, @@ -45,7 +45,7 @@ export type EdgeProps = Omit & targetHandleId?: string | null; }; -export type EdgeTypes = Record>; +export type EdgeTypes = Record>>; export type DefaultEdgeOptions = DefaultEdgeOptionsBase; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index d36e2a96..292ae4fa 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { SvelteComponentTyped } from 'svelte'; +import type { ComponentType, SvelteComponent } from 'svelte'; import type { NodeBase, NodeProps } from '@xyflow/system'; // @todo: currently the helper function only like Node from '@reactflow/core' @@ -14,6 +14,6 @@ export type Node< style?: string; }; -export type NodeTypes = Record>; +export type NodeTypes = Record>>; export type DefaultNodeOptions = Partial>; diff --git a/packages/svelte/src/routes/figma/+page.svelte b/packages/svelte/src/routes/figma/+page.svelte new file mode 100644 index 00000000..b8039f46 --- /dev/null +++ b/packages/svelte/src/routes/figma/+page.svelte @@ -0,0 +1,54 @@ + + + + + + diff --git a/packages/system/src/xypanzoom/filter.ts b/packages/system/src/xypanzoom/filter.ts index 3404ca67..232c66af 100644 --- a/packages/system/src/xypanzoom/filter.ts +++ b/packages/system/src/xypanzoom/filter.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { isWrappedWithClass } from './utils'; export type FilterParams = { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 008b4d78..c3320495 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,8 +200,8 @@ importers: packages/svelte: dependencies: '@svelte-put/shortcut': - specifier: ^2.0.0 - version: registry.npmjs.org/@svelte-put/shortcut@2.0.0 + specifier: ^3.0.0 + version: registry.npmjs.org/@svelte-put/shortcut@3.0.0 '@xyflow/system': specifier: workspace:* version: link:../system @@ -1797,10 +1797,10 @@ packages: version: 2.0.0 dev: true - registry.npmjs.org/@svelte-put/shortcut@2.0.0: - resolution: {integrity: sha512-dDyxIFlRz+W6wxwQtl2jUen0rX8ofV2VBWaJdz0QehLb0IMDzP3aWM9W4k8cAZQIGmTT0adr1+Gt7HPPUugcpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-2.0.0.tgz} + registry.npmjs.org/@svelte-put/shortcut@3.0.0: + resolution: {integrity: sha512-nZg3pwpTi9wUsvQPlqOzEsxZcF2jmY5j+VBq/20IUjjd2OpM92XqZAga0PCCjE6OuEobOt58UMnC2QZgOvk0tQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-3.0.0.tgz} name: '@svelte-put/shortcut' - version: 2.0.0 + version: 3.0.0 dev: false registry.npmjs.org/@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.22.6):