@krainovsd/graph 0.14.0-beta.2 → 0.14.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.cjs +180 -9
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/module/GraphCanvas/GraphCanvas.js +14 -8
- package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-draw.js +13 -0
- package/lib/esm/module/GraphCanvas/slices/init-draw.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-selection.js +161 -0
- package/lib/esm/module/GraphCanvas/slices/init-selection.js.map +1 -0
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js +3 -0
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js.map +1 -1
- package/lib/index.d.ts +16 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-zoom.js","sources":["../../../../../src/module/GraphCanvas/slices/init-zoom.ts"],"sourcesContent":["import { isArray } from \"@krainovsd/js-helpers\";\nimport { select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom } from \"d3-zoom\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { computeGraphBounds } from \"../lib\";\nimport type { ZoomEventInterface } from \"../types\";\nimport { updateLinkCache } from \"./update-link-cache\";\nimport { updateNodeCache } from \"./update-node-cache\";\n\nconst DEFAULT_ZOOM_EXTENT: [number, number] = [0.3, 10];\nconst DEFAULT_TRANSLATE_EXTENT_COEFFICIENT = 8;\nconst DEFAULT_MARGIN = 0.25;\n\nexport function initZoom<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, currentZoom?: ZoomTransform) {\n if (!this.area) throw new Error(\"bad init data\");\n\n const bounds = computeGraphBounds(this.nodes);\n const zoomExtent = resolveZoomExtent(\n this.graphSettings.zoomExtent,\n this.width,\n this.height,\n this.graphSettings.zoomExtentMargin ?? DEFAULT_MARGIN,\n bounds,\n );\n const translateExtent = resolveTranslateExtent(\n this.graphSettings.translateExtent,\n this.graphSettings.translateExtentCoefficient,\n this.graphSettings.translateExtentOverlap,\n this.width,\n this.height,\n zoomExtent,\n bounds,\n );\n this._translateExtent = translateExtent;\n\n const zoomInstance = zoom<HTMLCanvasElement, unknown>()\n .scaleExtent(zoomExtent)\n .on(\"zoom\", (event: ZoomEventInterface) => {\n if (this._zoomAnimating) return;\n this.listeners.onZoom?.call?.(this, event);\n const oldTransform = this.areaTransform;\n this.areaTransform = event.transform;\n if (this.areaTransform.k !== oldTransform.k) {\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this);\n }\n this.tick();\n });\n\n zoomInstance.translateExtent(translateExtent);\n d3Select(this.area).call(zoomInstance).on(\"dblclick.zoom\", null);\n\n const zoomInitial = currentZoom ?? this.graphSettings.zoomInitial;\n this.areaTransform = new ZoomTransform(\n Math.max(zoomInitial?.k ?? 1, zoomExtent[0]),\n zoomInitial?.x ?? this.width / 2,\n zoomInitial?.y ?? this.height / 2,\n );\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(this.area), this.areaTransform);\n}\n\nfunction resolveZoomExtent(\n userExtent: [number, number] | null,\n viewWidth: number,\n viewHeight: number,\n margin: number,\n bounds: ReturnType<typeof computeGraphBounds>,\n): [number, number] {\n if (\n userExtent &&\n userExtent.length === 2 &&\n userExtent[0] != undefined &&\n userExtent[1] != undefined\n ) {\n return userExtent;\n }\n if (!bounds) return DEFAULT_ZOOM_EXTENT;\n const graphWidth = bounds.maxX - bounds.minX;\n const graphHeight = bounds.maxY - bounds.minY;\n if (graphWidth === 0 || graphHeight === 0) return DEFAULT_ZOOM_EXTENT;\n const scaleToFit = (1 - margin) / Math.max(graphWidth / viewWidth, graphHeight / viewHeight);\n return [scaleToFit, DEFAULT_ZOOM_EXTENT[1]];\n}\n\nfunction resolveTranslateExtent(\n userExtent: [[number?, number?], [number?, number?]] | null,\n userCoefficient: number | [number, number] | null,\n overlap: number,\n viewWidth: number,\n viewHeight: number,\n zoomExtent: [number, number],\n bounds: ReturnType<typeof computeGraphBounds>,\n): [[number, number], [number, number]] {\n if (userExtent && userExtent.length >= 2 && isArray(userExtent[0]) && isArray(userExtent[1])) {\n return [\n [\n userExtent[0][0] ?? -viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n userExtent[0][1] ?? -viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n [\n userExtent[1][0] ?? viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n userExtent[1][1] ?? viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n ];\n }\n if (userCoefficient) {\n const [cx, cy] = isArray(userCoefficient)\n ? userCoefficient\n : [userCoefficient, userCoefficient];\n return [\n [-viewWidth * cx, -viewHeight * cy],\n [viewWidth * cx, viewHeight * cy],\n ];\n }\n if (!bounds) {\n return [\n [\n -viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n -viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n [\n viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n ];\n }\n\n const minZoom = zoomExtent[0];\n const zoomViewWidth = viewWidth / minZoom;\n const zoomViewHeight = viewHeight / minZoom;\n const graphWidth = bounds.maxX - bounds.minX;\n const graphHeight = bounds.maxY - bounds.minY;\n\n const minX = bounds.minX + overlap * graphWidth - zoomViewWidth;\n const maxX = bounds.maxX - overlap * graphWidth + zoomViewWidth;\n const minY = bounds.minY + overlap * graphHeight - zoomViewHeight;\n const maxY = bounds.maxY - overlap * graphHeight + zoomViewHeight;\n\n return [\n [minX, minY],\n [maxX, maxY],\n ];\n}\n"],"names":["d3Select"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init-zoom.js","sources":["../../../../../src/module/GraphCanvas/slices/init-zoom.ts"],"sourcesContent":["import { isArray } from \"@krainovsd/js-helpers\";\nimport { select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom } from \"d3-zoom\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { computeGraphBounds } from \"../lib\";\nimport type { ZoomEventInterface } from \"../types\";\nimport { updateLinkCache } from \"./update-link-cache\";\nimport { updateNodeCache } from \"./update-node-cache\";\n\nconst DEFAULT_ZOOM_EXTENT: [number, number] = [0.3, 10];\nconst DEFAULT_TRANSLATE_EXTENT_COEFFICIENT = 8;\nconst DEFAULT_MARGIN = 0.25;\n\nexport function initZoom<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, currentZoom?: ZoomTransform) {\n if (!this.area) throw new Error(\"bad init data\");\n\n const bounds = computeGraphBounds(this.nodes);\n const zoomExtent = resolveZoomExtent(\n this.graphSettings.zoomExtent,\n this.width,\n this.height,\n this.graphSettings.zoomExtentMargin ?? DEFAULT_MARGIN,\n bounds,\n );\n const translateExtent = resolveTranslateExtent(\n this.graphSettings.translateExtent,\n this.graphSettings.translateExtentCoefficient,\n this.graphSettings.translateExtentOverlap,\n this.width,\n this.height,\n zoomExtent,\n bounds,\n );\n this._translateExtent = translateExtent;\n\n const zoomInstance = zoom<HTMLCanvasElement, unknown>()\n .scaleExtent(zoomExtent)\n .filter((event) => {\n return !(event instanceof MouseEvent && event.shiftKey);\n })\n .on(\"zoom\", (event: ZoomEventInterface) => {\n if (this._zoomAnimating) return;\n this.listeners.onZoom?.call?.(this, event);\n const oldTransform = this.areaTransform;\n this.areaTransform = event.transform;\n if (this.areaTransform.k !== oldTransform.k) {\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this);\n }\n this.tick();\n });\n\n zoomInstance.translateExtent(translateExtent);\n d3Select(this.area).call(zoomInstance).on(\"dblclick.zoom\", null);\n\n const zoomInitial = currentZoom ?? this.graphSettings.zoomInitial;\n this.areaTransform = new ZoomTransform(\n Math.max(zoomInitial?.k ?? 1, zoomExtent[0]),\n zoomInitial?.x ?? this.width / 2,\n zoomInitial?.y ?? this.height / 2,\n );\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(this.area), this.areaTransform);\n}\n\nfunction resolveZoomExtent(\n userExtent: [number, number] | null,\n viewWidth: number,\n viewHeight: number,\n margin: number,\n bounds: ReturnType<typeof computeGraphBounds>,\n): [number, number] {\n if (\n userExtent &&\n userExtent.length === 2 &&\n userExtent[0] != undefined &&\n userExtent[1] != undefined\n ) {\n return userExtent;\n }\n if (!bounds) return DEFAULT_ZOOM_EXTENT;\n const graphWidth = bounds.maxX - bounds.minX;\n const graphHeight = bounds.maxY - bounds.minY;\n if (graphWidth === 0 || graphHeight === 0) return DEFAULT_ZOOM_EXTENT;\n const scaleToFit = (1 - margin) / Math.max(graphWidth / viewWidth, graphHeight / viewHeight);\n return [scaleToFit, DEFAULT_ZOOM_EXTENT[1]];\n}\n\nfunction resolveTranslateExtent(\n userExtent: [[number?, number?], [number?, number?]] | null,\n userCoefficient: number | [number, number] | null,\n overlap: number,\n viewWidth: number,\n viewHeight: number,\n zoomExtent: [number, number],\n bounds: ReturnType<typeof computeGraphBounds>,\n): [[number, number], [number, number]] {\n if (userExtent && userExtent.length >= 2 && isArray(userExtent[0]) && isArray(userExtent[1])) {\n return [\n [\n userExtent[0][0] ?? -viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n userExtent[0][1] ?? -viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n [\n userExtent[1][0] ?? viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n userExtent[1][1] ?? viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n ];\n }\n if (userCoefficient) {\n const [cx, cy] = isArray(userCoefficient)\n ? userCoefficient\n : [userCoefficient, userCoefficient];\n return [\n [-viewWidth * cx, -viewHeight * cy],\n [viewWidth * cx, viewHeight * cy],\n ];\n }\n if (!bounds) {\n return [\n [\n -viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n -viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n [\n viewWidth * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n viewHeight * DEFAULT_TRANSLATE_EXTENT_COEFFICIENT,\n ],\n ];\n }\n\n const minZoom = zoomExtent[0];\n const zoomViewWidth = viewWidth / minZoom;\n const zoomViewHeight = viewHeight / minZoom;\n const graphWidth = bounds.maxX - bounds.minX;\n const graphHeight = bounds.maxY - bounds.minY;\n\n const minX = bounds.minX + overlap * graphWidth - zoomViewWidth;\n const maxX = bounds.maxX - overlap * graphWidth + zoomViewWidth;\n const minY = bounds.minY + overlap * graphHeight - zoomViewHeight;\n const maxY = bounds.maxY - overlap * graphHeight + zoomViewHeight;\n\n return [\n [minX, minY],\n [maxX, maxY],\n ];\n}\n"],"names":["d3Select"],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ interface NodeInterface<NodeData extends Record<string, unknown>> extends Simula
|
|
|
26
26
|
highlight?: boolean;
|
|
27
27
|
visible?: boolean;
|
|
28
28
|
image?: HTMLImageElement;
|
|
29
|
+
_selected?: boolean;
|
|
29
30
|
data?: NodeData;
|
|
30
31
|
}
|
|
31
32
|
type NodeShape = "circle" | "square" | "text";
|
|
@@ -36,6 +37,7 @@ interface LinkInterface<NodeData extends Record<string, unknown>, LinkData exten
|
|
|
36
37
|
data?: LinkData;
|
|
37
38
|
highlight?: boolean;
|
|
38
39
|
visible?: boolean;
|
|
40
|
+
_selected?: boolean;
|
|
39
41
|
_groupIndex?: number;
|
|
40
42
|
_groupSize?: number;
|
|
41
43
|
_self?: boolean;
|
|
@@ -349,6 +351,9 @@ type ListenersInterface<NodeData extends Record<string, unknown>, LinkData exten
|
|
|
349
351
|
onEndDragFinished?: (this: GraphCanvas<NodeData, LinkData>, event: DragEventInterface<NodeData>) => void;
|
|
350
352
|
onDrawFinished?: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
351
353
|
onSimulationEnd?: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
354
|
+
onSelectionIn?: (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData> | undefined, link: LinkInterface<NodeData, LinkData> | undefined) => void;
|
|
355
|
+
onSelectionOut?: (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData> | undefined, link: LinkInterface<NodeData, LinkData> | undefined) => void;
|
|
356
|
+
onSelectionEnd?: (this: GraphCanvas<NodeData, LinkData>, nodes: NodeInterface<NodeData>[], links: LinkInterface<NodeData, LinkData>[]) => void;
|
|
352
357
|
};
|
|
353
358
|
|
|
354
359
|
type GraphCanvasInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
@@ -405,14 +410,21 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
405
410
|
protected _lastNodeZoomK: number | undefined;
|
|
406
411
|
protected _lastLinkZoomK: number | undefined;
|
|
407
412
|
protected _zoomAnimating: boolean;
|
|
413
|
+
protected isSelecting: boolean;
|
|
414
|
+
protected selectionRect: {
|
|
415
|
+
x1: number;
|
|
416
|
+
y1: number;
|
|
417
|
+
x2: number;
|
|
418
|
+
y2: number;
|
|
419
|
+
} | null;
|
|
408
420
|
protected get simulationWorking(): boolean;
|
|
409
421
|
constructor({ links, nodes, root, forceSettings, linkSettings, listeners, nodeSettings, graphSettings, highlightSettings, }: GraphCanvasInterface<NodeData, LinkData>);
|
|
410
422
|
get dpi(): number;
|
|
411
423
|
getData: () => Pick<GraphCanvasInterface<NodeData, LinkData>, "nodes" | "links">;
|
|
412
424
|
fitToView: (margin?: number, duration?: number) => void;
|
|
413
425
|
focusOnNode: (nodeId: string | number, scale?: number, duration?: number) => void;
|
|
414
|
-
changeData: (options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">, alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[]) => void;
|
|
415
|
-
changeSettings: (options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners">, clearCache?: boolean | GraphCanvasCacheKeys[]) => undefined;
|
|
426
|
+
changeData: (options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">, alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => void;
|
|
427
|
+
changeSettings: (options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners">, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => undefined;
|
|
416
428
|
updateRect: () => void;
|
|
417
429
|
updateSize: () => void;
|
|
418
430
|
clearCache: (keys: boolean | GraphCanvasCacheKeys[]) => void;
|
|
@@ -423,10 +435,10 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
423
435
|
create: () => void;
|
|
424
436
|
destroy: () => void;
|
|
425
437
|
protected clearHTMLElements: () => void;
|
|
426
|
-
protected updateSimulation: () => void;
|
|
438
|
+
protected updateSimulation: (precompute?: boolean) => void;
|
|
427
439
|
protected clearState: () => void;
|
|
428
440
|
protected init: () => void;
|
|
429
|
-
protected updateData: (alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[]) => void;
|
|
441
|
+
protected updateData: (alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => void;
|
|
430
442
|
protected animateHighlight: (node: NodeInterface<NodeData> | undefined, link: LinkInterface<NodeData, LinkData> | undefined, baseDuration?: number) => void;
|
|
431
443
|
protected animateZoom: (area: HTMLCanvasElement, target: ZoomTransform, start: ZoomTransform, duration: number) => void;
|
|
432
444
|
}
|