use pointer events instead of mouse events

This commit is contained in:
peterkogo
2025-01-21 12:44:57 +01:00
parent 938647736e
commit 04b9c828bb
9 changed files with 53 additions and 53 deletions
@@ -172,11 +172,11 @@
snapGrid={[25, 25]} snapGrid={[25, 25]}
oninit={() => console.log('on init')} oninit={() => console.log('on init')}
onnodeclick={(event) => console.log('on node click', event)} onnodeclick={(event) => console.log('on node click', event)}
onnodemouseenter={(event) => console.log('on node enter', event)} onnodepointerenter={(event) => console.log('on node enter', event)}
onnodemouseleave={(event) => console.log('on node leave', event)} onnodepointerleave={(event) => console.log('on node leave', event)}
onedgeclick={(event) => console.log('edge click', event)} onedgeclick={(event) => console.log('edge click', event)}
onedgemouseenter={(event) => console.log('edge enter', event)} onedgepointerenter={(event) => console.log('edge enter', event)}
onedgemouseleave={(event) => console.log('edge leave', event)} onedgepointerleave={(event) => console.log('edge leave', event)}
onconnectstart={(event) => console.log('on connect start', event)} onconnectstart={(event) => console.log('on connect start', event)}
onconnect={(event) => console.log('on connect', event)} onconnect={(event) => console.log('on connect', event)}
onconnectend={(event) => console.log('on connect end', event)} onconnectend={(event) => console.log('on connect end', event)}
@@ -14,8 +14,8 @@
store, store,
onedgeclick, onedgeclick,
onedgecontextmenu, onedgecontextmenu,
onedgemouseenter, onedgepointerenter,
onedgemouseleave onedgepointerleave
}: { store: SvelteFlowStore; edge: EdgeLayouted } & EdgeEvents = $props(); }: { store: SvelteFlowStore; edge: EdgeLayouted } & EdgeEvents = $props();
let { let {
@@ -60,7 +60,7 @@
markerEnd ? `url('#${getMarkerId(markerEnd, store.flowId)}')` : undefined markerEnd ? `url('#${getMarkerId(markerEnd, store.flowId)}')` : undefined
); );
function onclick(event: MouseEvent | TouchEvent) { function onclick(event: MouseEvent) {
const edge = store.edgeLookup.get(id); const edge = store.edgeLookup.get(id);
if (edge) { if (edge) {
@@ -69,9 +69,9 @@
} }
} }
function onMouseEvent( function onMouseEvent<T = MouseEvent>(
event: MouseEvent, event: T,
callback: ({ edge, event }: { edge: Edge; event: MouseEvent }) => void callback: ({ edge, event }: { edge: Edge; event: T }) => void
) { ) {
const edge = store.edgeLookup.get(id); const edge = store.edgeLookup.get(id);
@@ -97,14 +97,14 @@
onMouseEvent(e, onedgecontextmenu); onMouseEvent(e, onedgecontextmenu);
} }
: undefined} : undefined}
onmouseenter={onedgemouseenter onpointerenter={onedgepointerenter
? (e) => { ? (e) => {
onMouseEvent(e, onedgemouseenter); onMouseEvent(e, onedgepointerenter);
} }
: undefined} : undefined}
onmouseleave={onedgemouseleave onpointerleave={onedgepointerleave
? (e) => { ? (e) => {
onMouseEvent(e, onedgemouseleave); onMouseEvent(e, onedgepointerleave);
} }
: undefined} : undefined}
aria-label={ariaLabel === null aria-label={ariaLabel === null
@@ -24,12 +24,12 @@
return null; return null;
}); });
function oncontextmenu(event: MouseEvent | TouchEvent) { function oncontextmenu(event: MouseEvent) {
const selectedNodes = store.nodes.filter((n) => n.selected); const selectedNodes = store.nodes.filter((n) => n.selected);
onselectioncontextmenu?.({ nodes: selectedNodes, event }); onselectioncontextmenu?.({ nodes: selectedNodes, event });
} }
function onclick(event: MouseEvent | TouchEvent) { function onclick(event: MouseEvent) {
const selectedNodes = store.nodes.filter((n) => n.selected); const selectedNodes = store.nodes.filter((n) => n.selected);
onselectionclick?.({ nodes: selectedNodes, event }); onselectionclick?.({ nodes: selectedNodes, event });
} }
@@ -19,9 +19,9 @@
onnodedrag, onnodedrag,
onnodedragstart, onnodedragstart,
onnodedragstop, onnodedragstop,
onnodemouseenter, onnodepointerenter,
onnodemouseleave, onnodepointerleave,
onnodemousemove, onnodepointermove,
onnodecontextmenu onnodecontextmenu
}: NodeWrapperProps & NodeEvents = $props(); }: NodeWrapperProps & NodeEvents = $props();
@@ -200,9 +200,9 @@
style:visibility={initialized ? 'visible' : 'hidden'} style:visibility={initialized ? 'visible' : 'hidden'}
style="{style ?? ''};{inlineStyleDimensions.width}{inlineStyleDimensions.height}" style="{style ?? ''};{inlineStyleDimensions.width}{inlineStyleDimensions.height}"
onclick={onSelectNodeHandler} onclick={onSelectNodeHandler}
onpointerenter={onnodemouseenter ? (event) => onnodemouseenter({ node, event }) : undefined} onpointerenter={onnodepointerenter ? (event) => onnodepointerenter({ node, event }) : undefined}
onpointerleave={onnodemouseleave ? (event) => onnodemouseleave({ node, event }) : undefined} onpointerleave={onnodepointerleave ? (event) => onnodepointerleave({ node, event }) : undefined}
onpointermove={onnodemousemove ? (event) => onnodemousemove({ node, event }) : undefined} onpointermove={onnodepointermove ? (event) => onnodepointermove({ node, event }) : undefined}
oncontextmenu={onnodecontextmenu ? (event) => onnodecontextmenu({ node, event }) : undefined} oncontextmenu={onnodecontextmenu ? (event) => onnodecontextmenu({ node, event }) : undefined}
> >
<NodeComponent <NodeComponent
@@ -9,8 +9,8 @@
store, store,
onedgeclick, onedgeclick,
onedgecontextmenu, onedgecontextmenu,
onedgemouseenter, onedgepointerenter,
onedgemouseleave onedgepointerleave
}: { store: SvelteFlowStore } & EdgeEvents = $props(); }: { store: SvelteFlowStore } & EdgeEvents = $props();
</script> </script>
@@ -25,8 +25,8 @@
{edge} {edge}
{onedgeclick} {onedgeclick}
{onedgecontextmenu} {onedgecontextmenu}
{onedgemouseenter} {onedgepointerenter}
{onedgemouseleave} {onedgepointerleave}
/> />
{/each} {/each}
@@ -11,9 +11,9 @@
nodeClickDistance, nodeClickDistance,
onnodeclick, onnodeclick,
onnodecontextmenu, onnodecontextmenu,
onnodemouseenter, onnodepointerenter,
onnodemousemove, onnodepointermove,
onnodemouseleave, onnodepointerleave,
onnodedrag, onnodedrag,
onnodedragstart, onnodedragstart,
onnodedragstop onnodedragstop
@@ -51,9 +51,9 @@
{resizeObserver} {resizeObserver}
{nodeClickDistance} {nodeClickDistance}
{onnodeclick} {onnodeclick}
{onnodemouseenter} {onnodepointerenter}
{onnodemousemove} {onnodepointermove}
{onnodemouseleave} {onnodepointerleave}
{onnodedrag} {onnodedrag}
{onnodedragstart} {onnodedragstart}
{onnodedragstop} {onnodedragstop}
@@ -73,7 +73,7 @@
// Used to prevent click events when the user lets go of the selectionKey during a selection // Used to prevent click events when the user lets go of the selectionKey during a selection
let selectionInProgress = false; let selectionInProgress = false;
function onClick(event: MouseEvent | TouchEvent) { function onClick(event: MouseEvent) {
// We prevent click events when the user let go of the selectionKey during a selection // We prevent click events when the user let go of the selectionKey during a selection
if (selectionInProgress) { if (selectionInProgress) {
selectionInProgress = false; selectionInProgress = false;
@@ -38,15 +38,15 @@
onnodedrag, onnodedrag,
onnodedragstart, onnodedragstart,
onnodedragstop, onnodedragstop,
onnodemouseenter, onnodepointerenter,
onnodemousemove, onnodepointermove,
onnodemouseleave, onnodepointerleave,
onselectionclick, onselectionclick,
onselectioncontextmenu, onselectioncontextmenu,
onedgeclick, onedgeclick,
onedgecontextmenu, onedgecontextmenu,
onedgemouseenter, onedgepointerenter,
onedgemouseleave, onedgepointerleave,
onpaneclick, onpaneclick,
onpanecontextmenu, onpanecontextmenu,
panOnScrollMode = PanOnScrollMode.Free, panOnScrollMode = PanOnScrollMode.Free,
@@ -163,8 +163,8 @@
{store} {store}
{onedgeclick} {onedgeclick}
{onedgecontextmenu} {onedgecontextmenu}
{onedgemouseenter} {onedgepointerenter}
{onedgemouseleave} {onedgepointerleave}
/> />
<ConnectionLine <ConnectionLine
{store} {store}
@@ -180,9 +180,9 @@
{nodeClickDistance} {nodeClickDistance}
{onnodeclick} {onnodeclick}
{onnodecontextmenu} {onnodecontextmenu}
{onnodemouseenter} {onnodepointerenter}
{onnodemousemove} {onnodepointermove}
{onnodemouseleave} {onnodepointerleave}
{onnodedrag} {onnodedrag}
{onnodedragstart} {onnodedragstart}
{onnodedragstop} {onnodedragstop}
+10 -10
View File
@@ -33,24 +33,24 @@ export type NodeEvents = {
onnodedrag?: NodeTargetEventWithPointer<MouseEvent | TouchEvent>; onnodedrag?: NodeTargetEventWithPointer<MouseEvent | TouchEvent>;
onnodedragstart?: NodeTargetEventWithPointer<MouseEvent | TouchEvent>; onnodedragstart?: NodeTargetEventWithPointer<MouseEvent | TouchEvent>;
onnodedragstop?: NodeTargetEventWithPointer<MouseEvent | TouchEvent>; onnodedragstop?: NodeTargetEventWithPointer<MouseEvent | TouchEvent>;
onnodemouseenter?: NodeEventWithPointer; onnodepointerenter?: NodeEventWithPointer;
onnodemouseleave?: NodeEventWithPointer; onnodepointerleave?: NodeEventWithPointer;
onnodemousemove?: NodeEventWithPointer; onnodepointermove?: NodeEventWithPointer;
}; };
export type NodeSelectionEvents = { export type NodeSelectionEvents = {
onselectioncontextmenu?: NodesEventWithPointer; onselectioncontextmenu?: NodesEventWithPointer<MouseEvent>;
onselectionclick?: NodesEventWithPointer; onselectionclick?: NodesEventWithPointer<MouseEvent>;
}; };
export type PaneEvents = { export type PaneEvents = {
onpaneclick?: ({ event }: { event: PointerEvent }) => void; onpaneclick?: ({ event }: { event: MouseEvent }) => void;
onpanecontextmenu?: ({ event }: { event: MouseEvent }) => void; onpanecontextmenu?: ({ event }: { event: MouseEvent }) => void;
}; };
export type EdgeEvents = { export type EdgeEvents = {
onedgeclick?: ({ edge, event }: { edge: Edge; event: PointerEvent }) => void; onedgeclick?: ({ edge, event }: { edge: Edge; event: MouseEvent }) => void;
onedgecontextmenu?: ({ edge, event }: { edge: Edge; event: PointerEvent }) => void; onedgecontextmenu?: ({ edge, event }: { edge: Edge; event: MouseEvent }) => void;
onedgemouseenter?: ({ edge, event }: { edge: Edge; event: PointerEvent }) => void; onedgepointerenter?: ({ edge, event }: { edge: Edge; event: PointerEvent }) => void;
onedgemouseleave?: ({ edge, event }: { edge: Edge; event: PointerEvent }) => void; onedgepointerleave?: ({ edge, event }: { edge: Edge; event: PointerEvent }) => void;
}; };