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
@@ -143,7 +143,7 @@ export function getInitialStore<NodeType extends Node = Node, EdgeType extends E
connectionLookup: ConnectionLookup = new Map();
edgeLookup: EdgeLookup<EdgeType> = new Map();
_prevVisibleEdges = new Map<string, EdgeLayouted>();
_prevVisibleEdges = new Map<string, EdgeLayouted<EdgeType>>();
visible = $derived.by(() => {
const {
// We need to access this._nodes to trigger on changes
@@ -158,8 +158,8 @@ export function getInitialStore<NodeType extends Node = Node, EdgeType extends E
defaultEdgeOptions
} = this;
let visibleNodes: Map<string, InternalNode>;
let visibleEdges: Map<string, EdgeLayouted>;
let visibleNodes: Map<string, InternalNode<NodeType>>;
let visibleEdges: Map<string, EdgeLayouted<EdgeType>>;
const options = {
edges,
+1 -1
View File
@@ -116,6 +116,6 @@ export type StoreContext<NodeType extends Node = Node, EdgeType extends Edge = E
export type ProviderContext<
NodeType extends Node = Node,
EdgeType extends Edge = Edge
> = StoreContext & {
> = StoreContext<NodeType, EdgeType> & {
setStore: (store: SvelteFlowStore<NodeType, EdgeType>) => void;
};
@@ -10,13 +10,13 @@ import {
type Transform
} from '@xyflow/system';
export function getVisibleNodes(
nodeLookup: NodeLookup,
export function getVisibleNodes<NodeType extends Node = Node>(
nodeLookup: NodeLookup<InternalNode<NodeType>>,
transform: Transform,
width: number,
height: number
) {
const visibleNodes = new Map<string, InternalNode>();
const visibleNodes = new Map<string, InternalNode<NodeType>>();
getNodesInside(nodeLookup, { x: 0, y: 0, width: width, height: height }, transform, true).forEach(
(node) => {
visibleNodes.set(node.id, node);
@@ -29,7 +29,7 @@ export interface EdgeLayoutBaseOptions<NodeType extends Node = Node, EdgeType ex
edges: EdgeType[];
defaultEdgeOptions: DefaultEdgeOptions;
elevateEdgesOnSelect: boolean;
previousEdges: Map<string, EdgeLayouted>;
previousEdges: Map<string, EdgeLayouted<EdgeType>>;
nodeLookup: NodeLookup<InternalNode<NodeType>>;
connectionMode: ConnectionMode;
onerror: OnError;
@@ -44,7 +44,10 @@ export interface EdgeLayoutAllOptions<NodeType extends Node = Node, EdgeType ext
height: never;
}
export interface EdgeLayoutOnlyVisibleOptions extends EdgeLayoutBaseOptions {
export interface EdgeLayoutOnlyVisibleOptions<
NodeType extends Node = Node,
EdgeType extends Edge = Edge
> extends EdgeLayoutBaseOptions<NodeType, EdgeType> {
visibleNodes: Map<string, InternalNode>;
transform: Transform;
width: number;
@@ -54,9 +57,11 @@ export interface EdgeLayoutOnlyVisibleOptions extends EdgeLayoutBaseOptions {
export type EdgeLayoutOptions<NodeType extends Node = Node, EdgeType extends Edge = Edge> =
| EdgeLayoutAllOptions<NodeType, EdgeType>
| EdgeLayoutOnlyVisibleOptions;
| EdgeLayoutOnlyVisibleOptions<NodeType, EdgeType>;
export function getLayoutedEdges(options: EdgeLayoutOptions): Map<string, EdgeLayouted> {
export function getLayoutedEdges<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
options: EdgeLayoutOptions<NodeType, EdgeType>
): Map<string, EdgeLayouted<EdgeType>> {
const {
edges,
defaultEdgeOptions,
@@ -67,7 +72,7 @@ export function getLayoutedEdges(options: EdgeLayoutOptions): Map<string, EdgeLa
onlyRenderVisible,
elevateEdgesOnSelect
} = options;
const layoutedEdges = new Map<string, EdgeLayouted>();
const layoutedEdges = new Map<string, EdgeLayouted<EdgeType>>();
for (const edge of edges) {
const sourceNode = nodeLookup.get(edge.source);
const targetNode = nodeLookup.get(edge.target);