use generics across the library

This commit is contained in:
peterkogo
2025-04-17 15:36:39 +02:00
parent cf1e0bee81
commit 353c661dd8
27 changed files with 198 additions and 152 deletions
+12 -8
View File
@@ -1,9 +1,10 @@
import { XYDrag, type OnDrag } from '@xyflow/system';
import { XYDrag, type NodeBase, type OnDrag, type XYDragParams } from '@xyflow/system';
import type { SvelteFlowStore } from '$lib/store/types';
import type { Node, Edge, NodeTargetEventWithPointer } from '$lib/types';
export type UseDragParams = {
store: SvelteFlowStore;
export type UseDragParams<NodeType extends Node = Node, EdgeType extends Edge = Edge> = {
store: SvelteFlowStore<NodeType, EdgeType>;
disabled?: boolean;
noDragClass?: string;
handleSelector?: string;
@@ -16,7 +17,10 @@ export type UseDragParams = {
onNodeMouseDown?: (id: string) => void;
};
export default function drag(domNode: Element, params: UseDragParams) {
export default function drag<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
domNode: Element,
params: UseDragParams<NodeType, EdgeType>
) {
const { store, onDrag, onDragStart, onDragStop, onNodeMouseDown } = params;
const dragInstance = XYDrag({
onDrag,
@@ -27,7 +31,7 @@ export default function drag(domNode: Element, params: UseDragParams) {
const { snapGrid, viewport } = store;
return {
nodes: store.nodes,
nodes: store.nodes satisfies NodeBase[],
nodeLookup: store.nodeLookup,
edges: store.edges,
nodeExtent: store.nodeExtent,
@@ -46,9 +50,9 @@ export default function drag(domNode: Element, params: UseDragParams) {
panBy: store.panBy
};
}
});
} as XYDragParams<NodeTargetEventWithPointer<MouseEvent | TouchEvent, NodeType>>);
function updateDrag(domNode: Element, params: UseDragParams) {
function updateDrag(domNode: Element, params: UseDragParams<NodeType, EdgeType>) {
if (params.disabled) {
dragInstance.destroy();
return;
@@ -67,7 +71,7 @@ export default function drag(domNode: Element, params: UseDragParams) {
updateDrag(domNode, params);
return {
update(params: UseDragParams) {
update(params: UseDragParams<NodeType, EdgeType>) {
updateDrag(domNode, params);
},
destroy() {