feat(panzoom): add paneClickDistance prop

This commit is contained in:
moklick
2024-07-09 10:50:50 +02:00
parent afa1ebe316
commit 69bd68f4b8
20 changed files with 166 additions and 10 deletions
@@ -79,6 +79,7 @@
export let onbeforedelete: $$Props['onbeforedelete'] = undefined;
export let oninit: $$Props['oninit'] = undefined;
export let nodeOrigin: $$Props['nodeOrigin'] = undefined;
export let paneClickDistance: $$Props['paneClickDistance'] = 0;
export let defaultMarkerColor = '#b1b1b7';
@@ -125,7 +126,8 @@
edgeTypes,
minZoom,
maxZoom,
translateExtent
translateExtent,
paneClickDistance
});
return () => {
@@ -188,7 +190,8 @@
edgeTypes,
minZoom,
maxZoom,
translateExtent
translateExtent,
paneClickDistance
});
$: colorModeClass = useColorModeClass(colorMode);
@@ -225,6 +228,7 @@
zoomOnPinch={zoomOnPinch === undefined ? true : zoomOnPinch}
panOnScroll={panOnScroll === undefined ? false : panOnScroll}
panOnDrag={panOnDrag === undefined ? true : panOnDrag}
paneClickDistance={paneClickDistance === undefined ? 0 : paneClickDistance}
>
<Pane
on:paneclick
@@ -134,6 +134,10 @@ export type SvelteFlowProps = DOMAttributes<HTMLDivElement> & {
* @default 1
*/
nodeDragThreshold?: number;
/** Distance that the mouse can move between mousedown/up that will trigger a click
* @default 0
*/
paneClickDistance?: number;
/** Minimum zoom level
* @default 0.5
*/
@@ -1,7 +1,8 @@
import type { Writable } from 'svelte/store';
import type { CoordinateExtent } from '@xyflow/system';
import type { SvelteFlowStore } from '$lib/store/types';
import type { EdgeTypes, NodeTypes } from '$lib/types';
import type { CoordinateExtent } from '@xyflow/system';
import type { Writable } from 'svelte/store';
// this is helper function for updating the store
// for props where we need to call a specific store action
@@ -12,13 +13,15 @@ export function updateStore(
edgeTypes,
minZoom,
maxZoom,
translateExtent
translateExtent,
paneClickDistance
}: {
nodeTypes?: NodeTypes;
edgeTypes?: EdgeTypes;
minZoom?: number;
maxZoom?: number;
translateExtent?: CoordinateExtent;
paneClickDistance?: number;
}
) {
if (nodeTypes !== undefined) {
@@ -40,6 +43,10 @@ export function updateStore(
if (translateExtent !== undefined) {
store.setTranslateExtent(translateExtent);
}
if (paneClickDistance !== undefined) {
store.setPaneClickDistance(paneClickDistance);
}
}
const getKeys = <T extends object>(obj: T) => Object.keys(obj) as Array<keyof T>;
@@ -19,6 +19,7 @@
export let zoomOnPinch: $$Props['zoomOnPinch'];
export let panOnDrag: $$Props['panOnDrag'];
export let panOnScroll: $$Props['panOnScroll'];
export let paneClickDistance: $$Props['paneClickDistance'];
const {
viewport,
@@ -68,7 +69,8 @@
noWheelClassName: 'nowheel',
userSelectionActive: !!$selectionRect,
translateExtent: $translateExtent,
lib: $lib
lib: $lib,
paneClickDistance
}}
>
<slot />
@@ -12,4 +12,5 @@ export type ZoomProps = {
zoomOnPinch: boolean;
panOnScroll: boolean;
panOnDrag: boolean | number[];
paneClickDistance: number;
};