@neo4j-nvl/base 0.3.1 → 0.3.2

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.
Files changed (61) hide show
  1. package/README.md +6 -4
  2. package/dist/base.mjs +1 -1
  3. package/dist/types/index.d.ts +21 -15
  4. package/dist/types/layouts/animatedlayout/AnimatedLayout.test.d.ts +1 -0
  5. package/dist/types/layouts/animatedlayout/animationUtils.test.d.ts +1 -0
  6. package/dist/types/layouts/d3forcelayout/constants.d.ts +2 -1
  7. package/dist/types/layouts/d3forcelayout/d3ForceLayout.d.ts +4 -0
  8. package/dist/types/layouts/forcedirectedlayout/ForceCytoLayout.d.ts +12 -14
  9. package/dist/types/layouts/forcedirectedlayout/cosebilkentlayout/CoseBilkentLayout.d.ts +1 -1
  10. package/dist/types/layouts/forcedirectedlayout/physlayout/PhysLayout.d.ts +103 -113
  11. package/dist/types/layouts/forcedirectedlayout/physlayout/PhysLayout.test.d.ts +1 -0
  12. package/dist/types/layouts/forcedirectedlayout/physlayout/glwrapper.d.ts +2 -2
  13. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/multilevel-fragment-verlet.d.ts +2 -0
  14. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/multilevel-repulsive-fragment-verlet.d.ts +2 -0
  15. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/SolarMerger.test.d.ts +1 -0
  16. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/solar-placer.d.ts +2 -4
  17. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/solar-placer.test.d.ts +1 -0
  18. package/dist/types/layouts/hierarchicallayout/HierarchicalLayout.d.ts +2 -2
  19. package/dist/types/modules/CallbackHelper.d.ts +6 -6
  20. package/dist/types/modules/ExternalCallbackHandler.d.ts +2 -0
  21. package/dist/types/modules/NvlController.d.ts +89 -93
  22. package/dist/types/modules/Shader.d.ts +14 -14
  23. package/dist/types/modules/ZoomTransitionHandler.d.ts +1 -1
  24. package/dist/types/modules/ZoomTransitionHandler.test.d.ts +1 -0
  25. package/dist/types/modules/dataset.test.d.ts +1 -0
  26. package/dist/types/modules/logging.d.ts +7 -4
  27. package/dist/types/modules/state.d.ts +38 -11
  28. package/dist/types/modules/state.test.d.ts +1 -0
  29. package/dist/types/renderers/canvasrenderer/Animation.test.d.ts +1 -0
  30. package/dist/types/renderers/canvasrenderer/CanvasRenderer.test.d.ts +1 -0
  31. package/dist/types/renderers/canvasrenderer/ImageCache.d.ts +6 -6
  32. package/dist/types/renderers/canvasrenderer/ImageCache.test.d.ts +1 -0
  33. package/dist/types/renderers/canvasrenderer/arrows/ArrowBundle.test.d.ts +1 -0
  34. package/dist/types/renderers/canvasrenderer/arrows/ArrowBundler.test.d.ts +1 -0
  35. package/dist/types/renderers/canvasrenderer/arrows/arrows.d.ts +5 -3
  36. package/dist/types/renderers/canvasrenderer/arrows/arrows.test.d.ts +1 -0
  37. package/dist/types/renderers/canvasrenderer/arrows/constants.d.ts +0 -13
  38. package/dist/types/renderers/canvasrenderer/nodes/nodes.d.ts +4 -4
  39. package/dist/types/renderers/canvasrenderer/nodes/nodes.test.d.ts +1 -0
  40. package/dist/types/renderers/canvasrenderer/util.test.d.ts +1 -0
  41. package/dist/types/renderers/canvasrenderer/wordwrap.test.d.ts +1 -0
  42. package/dist/types/renderers/webglrenderer/Controller.d.ts +2 -2
  43. package/dist/types/renderers/webglrenderer/Controller.test.d.ts +1 -0
  44. package/dist/types/renderers/webglrenderer/Renderer.d.ts +3 -7
  45. package/dist/types/types/graph-element.d.ts +35 -3
  46. package/dist/types/types/nvl-window-functions.d.ts +16 -0
  47. package/dist/types/types/utils.d.ts +1 -0
  48. package/dist/types/utils/canvasManagement.d.ts +1 -1
  49. package/dist/types/utils/canvasManagement.test.d.ts +1 -0
  50. package/dist/types/utils/constants.d.ts +2 -0
  51. package/dist/types/utils/errors.test.d.ts +1 -0
  52. package/dist/types/utils/geometry.d.ts +3 -3
  53. package/dist/types/utils/geometry.test.d.ts +1 -0
  54. package/dist/types/utils/graphObjectUtils.d.ts +21 -7
  55. package/dist/types/utils/graphObjectUtils.test.d.ts +1 -0
  56. package/dist/types/utils/hittest.test.d.ts +1 -0
  57. package/dist/types/utils/mouseUtils.test.d.ts +1 -0
  58. package/dist/types/utils/segmentAnalytics.d.ts +51 -0
  59. package/dist/types/utils/zoomFunctions.d.ts +3 -3
  60. package/dist/types/utils/zoomFunctions.test.d.ts +1 -0
  61. package/package.json +23 -5
@@ -1,53 +1,64 @@
1
- export const EVENT_ERROR: "onError";
2
- export const EVENT_LAYOUT_DONE: "onLayoutDone";
3
- export const EVENT_LAYOUT_STEP: "onLayoutStep";
4
- export const EVENT_LAYOUT_COMPUTING: "onLayoutComputing";
5
- export const EVENT_WEBGL_CONTEXT_LOST: "onWebGLContextLost";
1
+ import type { Node, Relationship } from '../types/graph-element';
2
+ import '../types/nvl-window-functions';
3
+ import type { Point } from '../utils/geometry';
4
+ import type { ExternalCallbacks } from './ExternalCallbackHandler';
5
+ import type { Layout, LayoutOptions, NvlOptions, NvlState, ZoomOptions } from './state';
6
+ type SaveToFileOptions = {
7
+ filename?: string;
8
+ backgroundColor?: string;
9
+ };
10
+ export declare const EVENT_ERROR = "onError";
11
+ export declare const EVENT_LAYOUT_DONE = "onLayoutDone";
12
+ export declare const EVENT_LAYOUT_STEP = "onLayoutStep";
13
+ export declare const EVENT_LAYOUT_COMPUTING = "onLayoutComputing";
14
+ export declare const EVENT_WEBGL_CONTEXT_LOST = "onWebGLContextLost";
6
15
  export default class NvlController {
7
- constructor(state: any, options?: {});
8
- destroyed: boolean;
9
- _state: any;
10
- _callbacks: CallbackHelper;
11
- instanceId: any;
12
- _glController: GLController | DummyGLController;
13
- _webGLContext: RenderingContext;
14
- _webGLMinimapContext: RenderingContext;
15
- _htmlOverlay: HTMLDivElement;
16
- _hasResized: boolean;
17
- _hierLayout: HierarchicalLayout;
18
- _gridLayout: GridLayout;
19
- _freeLayout: FreeLayout;
20
- _d3ForceLayout: d3ForceLayout;
21
- _forceLayout: d3ForceLayout | ForceCytoLayout;
22
- _canvasRenderer: CanvasRenderer;
23
- _c2dContext: CanvasRenderingContext2D;
24
- _glCanvas: HTMLCanvasElement;
25
- _canvasRect: DOMRect;
26
- _glMinimapCanvas: HTMLCanvasElement;
27
- _c2dCanvas: HTMLCanvasElement;
28
- _isInRenderSwitchAnimation: boolean;
29
- _justSwitchedRenderer: boolean;
30
- _justSwitchedLayout: boolean;
31
- _layoutUpdating: boolean;
32
- _layoutComputing: boolean;
33
- isRenderingDisabled: boolean;
34
- setRenderSwitchAnimation: () => void;
35
- stateDisposers: any[];
36
- _zoomTransitionHandler: ZoomTransitionHandler;
37
- layoutTimeLimit: any;
38
- forceWebGLThreshold: any;
39
- pixelRatio: number;
40
- removeResizeListener: any;
41
- removeMinimapResizeListener: any;
42
- pendingZoomOperation: (() => any) | (() => any) | (() => any) | (() => any);
43
- _onWebGLContextLost(webGLContextEvent: any): void;
44
- _updateMinimapZoom(): void;
45
- _startMainloop(): void;
46
- _layoutRunner: NodeJS.Timeout;
47
- animationRequestId: number;
16
+ private destroyed;
17
+ private readonly state;
18
+ private readonly callbacks;
19
+ private readonly instanceId;
20
+ private readonly glController;
21
+ private readonly webGLContext;
22
+ private readonly webGLMinimapContext;
23
+ private readonly htmlOverlay;
24
+ private hasResized;
25
+ private readonly hierarchicalLayout;
26
+ private readonly gridLayout;
27
+ private readonly freeLayout;
28
+ private readonly d3ForceLayout;
29
+ private readonly forceLayout;
30
+ private readonly canvasRenderer;
31
+ private readonly glCanvas;
32
+ private canvasRect;
33
+ private readonly glMinimapCanvas;
34
+ private readonly c2dCanvas;
35
+ private isInRenderSwitchAnimation;
36
+ private justSwitchedRenderer;
37
+ private justSwitchedLayout;
38
+ private layoutUpdating;
39
+ private layoutComputing;
40
+ private isRenderingDisabled;
41
+ private readonly setRenderSwitchAnimation;
42
+ private readonly stateDisposers;
43
+ private readonly zoomTransitionHandler;
44
+ private currentLayout;
45
+ private readonly layoutTimeLimit;
46
+ private pixelRatio;
47
+ private readonly removeResizeListener;
48
+ private readonly removeMinimapResizeListener;
49
+ private pendingZoomOperation;
50
+ private layoutRunner;
51
+ private animationRequestId;
52
+ private layoutDoneCallback;
53
+ private layoutComputingCallback;
54
+ private currentLayoutType;
55
+ constructor(state: NvlState, options: NvlOptions);
56
+ private onWebGLContextLost;
57
+ private updateMinimapZoom;
58
+ private startMainLoop;
48
59
  updateHtmlOverlay(): void;
49
- dumpNodes(): any[];
50
- dumpRelationships(): any;
60
+ dumpNodes(): Node[];
61
+ dumpRelationships(): Relationship[];
51
62
  /**
52
63
  * Map a relative Canvas space to the DOM position
53
64
  * @param {number} canvasX X position in the canvas space
@@ -62,58 +73,43 @@ export default class NvlController {
62
73
  * @param {*} clientX relative X position from the top left [0..rect.width]
63
74
  * @param {*} clientY relative Y position from the top left [0..rect.height]
64
75
  */
65
- mapRelativePositionToCanvasSpace(clientX: any, clientY: any): {
66
- x: any;
67
- y: any;
76
+ mapRelativePositionToCanvasSpace(clientX: number, clientY: number): {
77
+ x: number;
78
+ y: number;
68
79
  };
69
- getNodePositions(): any[];
70
- setNodePositions(data: any, updateLayout?: boolean): void;
80
+ getNodePositions(): (Node & Point)[];
81
+ setNodePositions(data: Node[], updateLayout?: boolean): void;
71
82
  isLayoutMoving(): boolean;
72
83
  getNodesOnScreen(): {
73
- nodes: import("..").Node[];
74
- rels: import("..").Relationship[];
84
+ nodes: Node[];
85
+ rels: Relationship[];
75
86
  };
76
- registerDoneCallback(cb: any): void;
77
- _layoutDoneCallback: any;
78
- registerComputingCallback(cb: any): void;
79
- _layoutComputingCallback: any;
80
- getPosition(nodeId: any): any;
81
- addCanvasOptions(options: any): void;
82
- setNodeInformationLevel(viewLevel: any): void;
83
- setEdgeInformationLevel(viewLevel: any): void;
84
- getScale(): any;
87
+ registerDoneCallback(cb: NvlController['layoutDoneCallback']): void;
88
+ registerComputingCallback(cb: NvlController['layoutComputingCallback']): void;
89
+ getPosition(nodeId: string): Node;
90
+ getScale(): number;
85
91
  getPan(): {
86
- x: any;
87
- y: any;
92
+ x: number;
93
+ y: number;
88
94
  };
89
- setZoomLevel(_newLevel: any): void;
90
- setPanCoordinates(panX: any, panY: any): void;
91
- setZoomAndPan(zoom: any, panX: any, panY: any): void;
92
- fit(nodeIds: any, zoomOptions: any): void;
95
+ setZoomLevel(_newLevel: number): void;
96
+ setPanCoordinates(panX: number, panY: number): void;
97
+ setZoomAndPan(zoom: number, panX: number, panY: number): void;
98
+ fit(nodeIds: string[], zoomOptions: ZoomOptions): void;
93
99
  resetZoom(): void;
94
- setRenderer(renderer: any): void;
95
- on(name: any, callback: any): void;
100
+ setRenderer(renderer: string): void;
101
+ on(name: keyof ExternalCallbacks, callback: (args: unknown) => void): void;
102
+ isDestroyed(): boolean;
96
103
  destroy(): void;
97
104
  callIfRegistered(...args: any[]): void;
98
- getCanvasRelsAt(point: any): import("../utils/hittest").HitTargetRelationship[];
99
- getCanvasNodesAt(point: any, hitNodeMarginWidth?: number): import("../utils/hittest").HitTargetNode[];
100
- _getLayout(layoutType: any): d3ForceLayout | ForceCytoLayout;
101
- setLayout(layoutType: any): void;
102
- _currentLayout: d3ForceLayout | ForceCytoLayout;
103
- _currentLayoutType: any;
104
- setLayoutOptions(options: any): void;
105
- createDownloadLink(filename: any, canvas: any): HTMLAnchorElement;
106
- saveToFile(options: any): void;
107
- prepareLargeFileForDownload(options: any): Promise<any>;
108
- saveFullGraphToLargeFile(options: any): Promise<void>;
105
+ getCanvasRelsAt(point: Point): import("../utils/hittest").HitTargetRelationship[];
106
+ getCanvasNodesAt(point: Point, hitNodeMarginWidth?: number): import("../utils/hittest").HitTargetNode[];
107
+ private getLayout;
108
+ setLayout(layoutType: Layout): void;
109
+ setLayoutOptions(options: LayoutOptions): void;
110
+ createDownloadLink(filename: string, canvas: HTMLCanvasElement): HTMLAnchorElement;
111
+ saveToFile(options: SaveToFileOptions): void;
112
+ prepareLargeFileForDownload(options: SaveToFileOptions): Promise<unknown>;
113
+ saveFullGraphToLargeFile(options: SaveToFileOptions): Promise<void>;
109
114
  }
110
- import CallbackHelper from './CallbackHelper';
111
- import GLController from '../renderers/webglrenderer/Controller';
112
- import { DummyController as DummyGLController } from '../renderers/webglrenderer/Controller';
113
- import { HierarchicalLayout } from '../layouts/hierarchicallayout/HierarchicalLayout';
114
- import { GridLayout } from '../layouts/gridLayout/GridLayout';
115
- import { FreeLayout } from '../layouts/freeLayout/FreeLayout';
116
- import { d3ForceLayout } from '../layouts/d3forcelayout/d3ForceLayout';
117
- import { ForceCytoLayout } from '../layouts/forcedirectedlayout/ForceCytoLayout';
118
- import CanvasRenderer from '../renderers/canvasrenderer/CanvasRenderer';
119
- import ZoomTransitionHandler from './ZoomTransitionHandler';
115
+ export {};
@@ -1,18 +1,18 @@
1
1
  export default class Shader {
2
- constructor(gl: any, vsSource: any, fsSource: any, defines?: {});
3
- _shaderProgram: any;
4
- _gl: any;
5
- _curTexture: number;
6
- _scanAttributes(): void;
7
- _attributeInfo: {};
8
- _scanUniforms(): void;
9
- _uniformInfo: {};
10
- setUniform(name: any, value: any): void;
11
- setAttributePointer(name: any, size: any, start: any, stride: any): void;
12
- setAttributePointerFloat(name: any, size: any, start: any, stride: any): void;
13
- setAttributePointerUShort(name: any, size: any, start: any, stride: any): void;
14
- setAttributePointerByteNorm(name: any, size: any, start: any, stride: any): void;
15
- setAttributePointerByte(name: any, size: any, start: any, stride: any): void;
2
+ private readonly shaderProgram;
3
+ private readonly gl;
4
+ private curTexture;
5
+ private attributeInfo;
6
+ private uniformInfo;
7
+ constructor(gl: WebGLRenderingContext, vsSource: string, fsSource: string, defines?: {});
8
+ setUniform(name: string, value: any): void;
9
+ setAttributePointer(name: string, size: number, start: number, stride: number): void;
10
+ setAttributePointerFloat(name: string, size: number, start: number, stride: number): void;
11
+ setAttributePointerUShort(name: string | number, size: number, start: number, stride: number): void;
12
+ setAttributePointerByteNorm(name: string, size: number, start: number, stride: number): void;
13
+ setAttributePointerByte(name: string, size: number, start: number, stride: number): void;
16
14
  use(): void;
17
15
  remove(): void;
16
+ private scanAttributes;
17
+ private scanUniforms;
18
18
  }
@@ -13,7 +13,7 @@ export default class ZoomTransitionHandler {
13
13
  private readonly stateDisposers;
14
14
  constructor({ state, getNodePositions, canvas, defaultZoomLevel }: {
15
15
  state: NvlState;
16
- getNodePositions: () => Node[];
16
+ getNodePositions: (data: Node[]) => Node[];
17
17
  canvas: HTMLCanvasElement;
18
18
  defaultZoomLevel: number;
19
19
  });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,8 @@
1
- export function setLogLevel(level: any): void;
2
- export function setupLogging(logger: any, logging: any): void;
1
+ import type { LogLevelDesc, Logger } from 'loglevel';
2
+ declare const nvlLog: Logger;
3
+ export declare const setLogLevel: (level: LogLevelDesc) => void;
4
+ export declare const setupLogging: (logger: Logger, logging: {
5
+ level: LogLevelDesc;
6
+ logger?: (methodName: string, args: unknown) => void;
7
+ }) => void;
3
8
  export { nvlLog as log };
4
- declare const nvlLog: loglevel.Logger;
5
- import loglevel from 'loglevel';
@@ -1,26 +1,29 @@
1
+ import type { LogLevelDesc } from 'loglevel';
1
2
  import type { WaypointPath } from '../renderers/canvasrenderer/types';
2
3
  import type { ExternalCallbacks } from './ExternalCallbackHandler';
3
4
  import type { NodeDataSet, RelationshipDataSet } from './dataset';
4
5
  type RingStyle = {
5
- widthFactor: number;
6
+ width?: number;
7
+ widthFactor?: number;
6
8
  color: string;
7
9
  };
8
- type ShadowStyle = {
10
+ export type ShadowStyle = {
9
11
  width: number;
10
12
  opacity: number;
11
13
  color: string;
12
14
  };
13
- type BorderStyle = {
15
+ export type BorderStyle = {
14
16
  rings?: RingStyle[];
15
17
  shadow?: ShadowStyle;
16
18
  };
17
19
  /**
18
20
  * @internal
19
21
  */
20
- export type NodeBorderStyles = {
21
- selected?: BorderStyle;
22
- default?: BorderStyle;
22
+ export type BorderStyles = {
23
+ selected: BorderStyle;
24
+ default: BorderStyle;
23
25
  };
26
+ export declare const RelationshipBorderStyles: BorderStyles;
24
27
  /** The default zoom level in a graph when not specified otherwise. */
25
28
  export declare const DefaultZoomLevel = 0.75;
26
29
  /**
@@ -38,7 +41,11 @@ export interface ForceDirectedOptions {
38
41
  /**
39
42
  * @internal
40
43
  */
41
- isCytoscapeEnabled: boolean;
44
+ enableCytoscape?: boolean;
45
+ /**
46
+ * @internal
47
+ */
48
+ enableVerlet?: boolean;
42
49
  /**
43
50
  * @internal
44
51
  */
@@ -53,6 +60,7 @@ export interface HierarchicalOptions {
53
60
  /** The packing method to be used */
54
61
  packing?: 'bin' | 'stack';
55
62
  }
63
+ export declare const isHierarchicalLayoutOptions: (options: LayoutOptions) => options is HierarchicalOptions;
56
64
  /**
57
65
  * The name of the force directed layout
58
66
  */
@@ -138,7 +146,13 @@ export interface NvlOptions {
138
146
  * @note will be ignored when {@link renderer} is set
139
147
  */
140
148
  useWebGL?: boolean;
141
- /** What renderer to use */
149
+ /**
150
+ * What renderer to use
151
+ * Possible values are 'webgl' or 'canvas'
152
+ * @defaultValue 'webgl'
153
+ * @note WebGL renderer uses GPU and has better performance.
154
+ * Captions and arrowheads are only displayed when using the canvas renderer.
155
+ */
142
156
  renderer?: Renderer;
143
157
  /**
144
158
  * @internal
@@ -150,7 +164,7 @@ export interface NvlOptions {
150
164
  * Specify the log level.
151
165
  */
152
166
  logging?: {
153
- level?: any;
167
+ level: LogLevelDesc;
154
168
  };
155
169
  /**
156
170
  * @internal
@@ -160,7 +174,18 @@ export interface NvlOptions {
160
174
  /** The color to use for the default border of nodes */
161
175
  nodeDefaultBorderColor?: string;
162
176
  /** The color to use for the selected border of nodes */
163
- nodeSelectedBorderColor?: string;
177
+ selectedBorderColor?: string;
178
+ /**
179
+ * @internal
180
+ * @experimental
181
+ * Defines a time limit for how long layout iterations may run
182
+ */
183
+ layoutTimeLimit?: number;
184
+ /**
185
+ * Disables tracking of library usage
186
+ * @defaultValue false
187
+ */
188
+ disableTelemetry?: boolean;
164
189
  }
165
190
  /** Options that influence how fit-to-zoom should behave */
166
191
  export type ZoomOptions = {
@@ -188,6 +213,7 @@ export interface NvlState {
188
213
  webGLVisible: boolean;
189
214
  renderer: Renderer;
190
215
  disableWebGL: boolean;
216
+ disableTelemetry: boolean;
191
217
  fitMovement: number;
192
218
  layout: Layout;
193
219
  layoutOptions: LayoutOptions;
@@ -220,7 +246,8 @@ export interface NvlState {
220
246
  updateMinimapZoomToFit: Function;
221
247
  autorun: Function;
222
248
  reaction: Function;
223
- nodeBorderStyles: NodeBorderStyles;
249
+ nodeBorderStyles: BorderStyles;
250
+ relationshipBorderStyles: BorderStyles;
224
251
  }
225
252
  /**
226
253
  * Create a new NVL state
@@ -0,0 +1 @@
1
+ export {};
@@ -1,11 +1,11 @@
1
- import type { Cache, CacheInfo, CacheItem } from './types';
1
+ import type { Cache } from './types';
2
2
  declare class ImageCache {
3
3
  cache: Cache;
4
4
  constructor();
5
- getOrCreateEntry(src: string): CacheItem;
6
- invertCanvas(ctx: CanvasRenderingContext2D): void;
7
- loadImage(src: string): CacheInfo;
8
- drawIfNeeded(info: CacheInfo, inverted: boolean): void;
9
- getImage(src: string, inverted: boolean): HTMLCanvasElement;
5
+ getImage(src: string, inverted?: boolean): HTMLCanvasElement;
6
+ private getOrCreateEntry;
7
+ private invertCanvas;
8
+ private loadImage;
9
+ private drawIfNeeded;
10
10
  }
11
11
  export default ImageCache;
@@ -1,5 +1,7 @@
1
+ import type { BorderStyle } from '../../../modules/state';
1
2
  import type { Node, Relationship } from '../../../types/graph-element';
2
3
  import type { Point } from '../../../utils/geometry';
4
+ import type ImageCache from '../ImageCache';
3
5
  import type ArrowBundle from './ArrowBundle';
4
6
  /**
5
7
  * This function calculates the difference in radius between two nodes.
@@ -33,9 +35,9 @@ export declare const getPointsForStraight: (rel: Relationship, bundle: ArrowBund
33
35
  * @param {boolean} flip - whether to flip the label
34
36
  */
35
37
  export declare const drawLabel: (ctx: CanvasRenderingContext2D, point: Point, angle: number, maxWidth: number, rel: Relationship, bundle: ArrowBundle, flip?: boolean) => void;
36
- export declare const renderWaypointArrow: (ctx: CanvasRenderingContext2D, rel: Relationship, from: Node, to: Node, bundle: ArrowBundle, showLabel: boolean, drawCurves: boolean) => void;
37
- export declare const renderSelfArrow: (ctx: CanvasRenderingContext2D, rel: Relationship, node: Node, bundle: ArrowBundle, showLabel: boolean) => void;
38
- export declare const renderArrow: (ctx: CanvasRenderingContext2D, rel: Relationship, fromNode: Node, toNode: Node, bundle: ArrowBundle, showLabel: boolean, drawCurves?: boolean) => void;
38
+ export declare const renderWaypointArrow: (ctx: CanvasRenderingContext2D, rel: Relationship, from: Node, to: Node, bundle: ArrowBundle, imageCache: ImageCache, showLabel: boolean, drawCurves: boolean, selectedBorderStyle: BorderStyle) => void;
39
+ export declare const renderSelfArrow: (ctx: CanvasRenderingContext2D, rel: Relationship, node: Node, bundle: ArrowBundle, imageCache: ImageCache, showLabel: boolean, selectedBorderStyle: BorderStyle) => void;
40
+ export declare const renderArrow: (ctx: CanvasRenderingContext2D, rel: Relationship, fromNode: Node, toNode: Node, bundle: ArrowBundle, imageCache: ImageCache, showLabel: boolean, selectedBorderStyle: BorderStyle, drawCurves?: boolean) => void;
39
41
  export declare const distanceToEdge: (pos: Point, rel: Relationship, fromNode: Node, toNode: Node, bundle: ArrowBundle, showLabel: boolean, drawCurves?: boolean) => number;
40
42
  /**
41
43
  * Returns the bounding box of the arrow.
@@ -28,19 +28,6 @@ export declare const SelfRefHeight = 35;
28
28
  export declare const SelfRefLabelMaxWidth = 40;
29
29
  /** Width increase when a relationship is selected. */
30
30
  export declare const SelectedWidthFactor = 1.5;
31
- /** The width of the outline of a selected relationship. */
32
- export declare const SelectedOutlineWidth = 2;
33
- /** The color of the first outline of a selected relationship. */
34
- export declare const SelectedOutlineColor1 = "white";
35
- /** The color of the second outline of a selected relationship. */
36
- export declare const SelectedOutlineColor2 = "#45bff8";
37
- /** The shadow properties of a selected relationship. */
38
- export declare const SelectedShadow: {
39
- color: string;
40
- size: number;
41
- x: number;
42
- y: number;
43
- };
44
31
  /** The style properties of a disabled relationship. */
45
32
  export declare const Disabled: {
46
33
  color: string;
@@ -1,4 +1,4 @@
1
- import type { NodeBorderStyles } from '../../../modules/state';
1
+ import type { BorderStyles } from '../../../modules/state';
2
2
  import type { Node } from '../../../types/graph-element';
3
3
  import type AnimationHandler from '../AnimationHandler';
4
4
  type RingStyle = {
@@ -13,7 +13,7 @@ type RingStyle = {
13
13
  * a width of 0 and an empty color.
14
14
  * @param node {Node} - The node to get the ring styles for.
15
15
  * @param animationHandler {AnimationHandler} - The animation handler.
16
- * @param nodeBorderStyles {NodeBorderStyles} - The node border styles.
16
+ * @param nodeBorderStyles {BorderStyles} - The node border styles.
17
17
  * @returns {{ width: number, color: string }[]} - An array of ring styles.
18
18
  */
19
19
  export declare const getRingStyles: (node: Node, animationHandler: AnimationHandler, nodeBorderStyles: any) => RingStyle[];
@@ -51,8 +51,8 @@ export declare const findMinLength: (lines: any[], ctx: CanvasRenderingContext2D
51
51
  * @param node {Node} - The node to draw.
52
52
  * @param imageCache {any} - The image cache to use.
53
53
  * @param animationHandler {AnimationHandler} - The animation handler.
54
- * @param nodeBorderStyles {NodeBorderStyles} - The node border styles.
54
+ * @param nodeBorderStyles {BorderStyles} - The node border styles.
55
55
  * @param zoomLevel {number} - The current zoom level.
56
56
  */
57
- export declare const drawNode: (ctx: CanvasRenderingContext2D, node: Node, imageCache: any, animationHandler: AnimationHandler, nodeBorderStyles: NodeBorderStyles, zoomLevel?: number) => void;
57
+ export declare const drawNode: (ctx: CanvasRenderingContext2D, node: Node, imageCache: any, animationHandler: AnimationHandler, nodeBorderStyles: BorderStyles, zoomLevel?: number) => void;
58
58
  export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -31,10 +31,10 @@ export default class Controller implements ControllerInterface {
31
31
  constructor(options: {
32
32
  mainSceneRenderer?: Renderer;
33
33
  minimapRenderer?: Renderer;
34
- state: NvlState;
34
+ state?: NvlState;
35
35
  });
36
36
  needsToRun(): boolean;
37
- renderMainScene(positionArray: any): void;
37
+ renderMainScene(positionArray: Node[]): void;
38
38
  renderMinimap(positionArray: Node[]): void;
39
39
  checkForUpdates(nodes: DataSet<Node>, rels: DataSet<Relationship>): void;
40
40
  onResize(): void;
@@ -1,8 +1,7 @@
1
- /// <reference types="gl-matrix/index.js" />
2
1
  import { mat4 } from 'gl-matrix';
3
- import type { DataSet } from '../../modules/dataset.js';
4
- import type { NvlState } from '../../modules/state.js';
5
- import type { Node, Relationship } from '../../types/graph-element.js';
2
+ import type { DataSet } from '../../modules/dataset';
3
+ import type { NvlState } from '../../modules/state';
4
+ import type { Node, Relationship } from '../../types/graph-element';
6
5
  export default class Renderer {
7
6
  private readonly nodeShader;
8
7
  private readonly nodeAnimShader;
@@ -24,9 +23,6 @@ export default class Renderer {
24
23
  private nodeDataByte;
25
24
  private relIdToIndex;
26
25
  private relData;
27
- private containerWidth;
28
- private containerHeight;
29
- private nodeDataInt;
30
26
  private viewportBoxBuffer;
31
27
  private relBuffer;
32
28
  private nodeBuffer;
@@ -24,10 +24,37 @@ interface GraphElement {
24
24
  hovered?: boolean;
25
25
  /** The caption text size.*/
26
26
  captionSize?: number;
27
- /** The caption align.*/
27
+ /**
28
+ * The caption align.
29
+ * @note Has no affect on self-referring relationships.
30
+ */
28
31
  captionAlign?: 'top' | 'bottom' | 'center';
29
- /** The caption text and font style.*/
32
+ /**
33
+ * The caption text and font style.
34
+ * @note Captions are only visible when using the 'canvas' renderer.
35
+ */
30
36
  captions?: StyledCaption[];
37
+ /**
38
+ * An icon to be displayed anywhere on top of the graph element.
39
+ * @note Icons are expected to be square.
40
+ */
41
+ overlayIcon?: {
42
+ url: string;
43
+ /**
44
+ * The position of the icon relative to the node or relationship.
45
+ * @note The position is a percentage of the node or relationship size.
46
+ * `[1, 1]` is the bottom right corner of the node or relationship.
47
+ * `[-1, -1]` is the top left corner of the node or relationship.
48
+ * @defaultValue `[0, 0]`, the center of the node or relationship.
49
+ */
50
+ position?: number[];
51
+ /**
52
+ * The size of the icon relative to the node size or relationship caption size.
53
+ * @note The size is a percentage of the node size or relationship caption size.
54
+ * @defaultValue `1`, the same size as the node size or relationship caption size.
55
+ */
56
+ size?: number;
57
+ };
31
58
  }
32
59
  export declare const isValidNode: (node: unknown) => node is Node;
33
60
  /**
@@ -44,7 +71,12 @@ interface Node extends GraphElement {
44
71
  y?: number;
45
72
  /** Whether or not the current node is activated.*/
46
73
  activated?: boolean;
47
- /** The icon to display inside the node.*/
74
+ /**
75
+ * The url to an icon to display inside the node.
76
+ * @note Icons are expected to be black. If the node's background color is dark,
77
+ * the icon will be inverted to white.
78
+ * @note Icons are expected to be square.
79
+ */
48
80
  icon?: string;
49
81
  /**
50
82
  * The DOM element to display on top of a node.
@@ -0,0 +1,16 @@
1
+ import type { Node, Relationship } from './graph-element';
2
+ export interface NvlWindow {
3
+ __Nvl_dumpNodes: (instanceId?: string) => Node[];
4
+ __Nvl_dumpRelationships: (instanceId?: string) => Relationship[];
5
+ __Nvl_getNodesOnScreen: (instanceId?: string) => {
6
+ nodes: Node[];
7
+ rels: Relationship[];
8
+ };
9
+ __Nvl_registerDoneCallback: (cb: () => void, instanceId: string) => void;
10
+ __Nvl_getZoomLevel: (instanceId?: string) => number;
11
+ }
12
+ declare global {
13
+ interface Window extends NvlWindow {
14
+ }
15
+ const SEGMENT_WRITE_KEY: string;
16
+ }
@@ -0,0 +1 @@
1
+ export declare const typedObjectEntries: <T>(obj: T) => [keyof T, T[keyof T]][];
@@ -10,6 +10,6 @@ export declare const createCanvasForScreenshot: (fullWidth: number, fullHeight:
10
10
  export declare const createCanvasForRenderer: (parent?: HTMLElement, onContextLostCallback?: (e: WebGLContextEvent) => void) => HTMLCanvasElement;
11
11
  export declare const removeCanvas: (canvas: HTMLCanvasElement) => void;
12
12
  export declare const getCanvas2DContext: (canvas: HTMLCanvasElement) => CanvasRenderingContext2D;
13
- export declare const getWebGLContext: (canvas: HTMLCanvasElement) => RenderingContext;
13
+ export declare const getWebGLContext: (canvas: HTMLCanvasElement) => WebGLRenderingContext | WebGL2RenderingContext;
14
14
  export declare const removeWebGLContext: (webGLCtx: WebGLRenderingContext) => void;
15
15
  export declare const checkWebGLAvailability: (canvas?: HTMLCanvasElement) => boolean;
@@ -0,0 +1 @@
1
+ export {};