@kortexya/nodus 0.1.0

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 (252) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +60 -0
  3. package/__vite-plugin-wasm-helper-1Aiokjk5.js +24 -0
  4. package/assets/hypergraphWorker-DV0aFI3L.js +1 -0
  5. package/assets/layoutWorker-DwDJwbgr.js +285 -0
  6. package/assets/nodus_wasm-C0vDfO5K.js +1 -0
  7. package/chunk-DmhlhrBa.js +11 -0
  8. package/nodus.src.bundle.js +33577 -0
  9. package/nodus_render_wasm-Bs6hlsx-.js +2617 -0
  10. package/nodus_wasm-DKYQVSUZ.js +2789 -0
  11. package/package.json +61 -0
  12. package/types/Nodus.d.ts +100 -0
  13. package/types/algorithms/concentric/index.d.ts +29 -0
  14. package/types/algorithms/concentricFactory.d.ts +43 -0
  15. package/types/algorithms/force/Alea.d.ts +13 -0
  16. package/types/algorithms/force/BVH.d.ts +35 -0
  17. package/types/algorithms/force/LayoutData.d.ts +40 -0
  18. package/types/algorithms/force/Packing.d.ts +31 -0
  19. package/types/algorithms/force/Physics.d.ts +61 -0
  20. package/types/algorithms/force/SEC.d.ts +14 -0
  21. package/types/algorithms/force/Topology.d.ts +3 -0
  22. package/types/algorithms/force/index.d.ts +54 -0
  23. package/types/algorithms/force-gpu/ParticleSystem.d.ts +45 -0
  24. package/types/algorithms/force-gpu/Settings.d.ts +60 -0
  25. package/types/algorithms/force-gpu/Simulation.d.ts +7 -0
  26. package/types/algorithms/force-gpu/getGlContext.d.ts +10 -0
  27. package/types/algorithms/force-gpu/gpuLayout.d.ts +14 -0
  28. package/types/algorithms/force-gpu/index.d.ts +2 -0
  29. package/types/algorithms/force-gpu/kernels/index.d.ts +176 -0
  30. package/types/algorithms/force-gpu/kernels/utils.d.ts +31 -0
  31. package/types/algorithms/force-gpu/shaders/aabb.d.ts +2 -0
  32. package/types/algorithms/force-gpu/shaders/bhExpand.d.ts +2 -0
  33. package/types/algorithms/force-gpu/shaders/bhTranslate.d.ts +2 -0
  34. package/types/algorithms/force-gpu/shaders/cellLookup.d.ts +2 -0
  35. package/types/algorithms/force-gpu/shaders/index.d.ts +9 -0
  36. package/types/algorithms/force-gpu/shaders/integrate.d.ts +2 -0
  37. package/types/algorithms/force-gpu/shaders/morton.d.ts +2 -0
  38. package/types/algorithms/force-gpu/shaders/sortIntervals.d.ts +2 -0
  39. package/types/algorithms/force-gpu/shaders/sortKeys.d.ts +2 -0
  40. package/types/algorithms/force-gpu/shaders/types.d.ts +10 -0
  41. package/types/algorithms/force-gpu/webgl/helpers.d.ts +24 -0
  42. package/types/algorithms/force-gpu/webgl/index.d.ts +4 -0
  43. package/types/algorithms/force-gpu/webgl/program.d.ts +15 -0
  44. package/types/algorithms/forceFactory.d.ts +55 -0
  45. package/types/algorithms/forceLinkFactory.d.ts +40 -0
  46. package/types/algorithms/grid/index.d.ts +26 -0
  47. package/types/algorithms/gridFactory.d.ts +30 -0
  48. package/types/algorithms/hierarchical/index.d.ts +80 -0
  49. package/types/algorithms/hierarchical/sugiyama.d.ts +144 -0
  50. package/types/algorithms/hierarchicalFactory.d.ts +49 -0
  51. package/types/algorithms/index.d.ts +13 -0
  52. package/types/algorithms/radial/index.d.ts +33 -0
  53. package/types/algorithms/radialFactory.d.ts +54 -0
  54. package/types/algorithms/sequential/index.d.ts +37 -0
  55. package/types/algorithms/sequentialFactory.d.ts +37 -0
  56. package/types/core/Edge.d.ts +67 -0
  57. package/types/core/EdgeList.d.ts +86 -0
  58. package/types/core/Node.d.ts +89 -0
  59. package/types/core/NodeList.d.ts +105 -0
  60. package/types/core/Transformation.d.ts +108 -0
  61. package/types/core/enums.d.ts +16 -0
  62. package/types/geometry/BoundingBox.d.ts +41 -0
  63. package/types/geometry/index.d.ts +276 -0
  64. package/types/geometry/types.d.ts +27 -0
  65. package/types/hypergraph/Hypergraph.d.ts +74 -0
  66. package/types/hypergraph/KoenigGraph.d.ts +29 -0
  67. package/types/hypergraph/Simplifier.d.ts +39 -0
  68. package/types/hypergraph/Statistics.d.ts +55 -0
  69. package/types/hypergraph/forbidden/StrangledHyperedge.d.ts +12 -0
  70. package/types/hypergraph/forbidden/StrangledVertex.d.ts +16 -0
  71. package/types/hypergraph/forbidden/ThreeAdjacentCluster2.d.ts +10 -0
  72. package/types/hypergraph/forbidden/TwoAdjacentCluster3.d.ts +14 -0
  73. package/types/hypergraph/forbidden/index.d.ts +22 -0
  74. package/types/hypergraph/index.d.ts +21 -0
  75. package/types/hypergraph/layout/Adam.d.ts +12 -0
  76. package/types/hypergraph/layout/Energy.d.ts +55 -0
  77. package/types/hypergraph/layout/LBFGS.d.ts +32 -0
  78. package/types/hypergraph/layout/Optimizer.d.ts +60 -0
  79. package/types/hypergraph/layout/Reverser.d.ts +42 -0
  80. package/types/hypergraph/operations/AtomicOperation.d.ts +54 -0
  81. package/types/hypergraph/operations/HyperedgeMerger.d.ts +30 -0
  82. package/types/hypergraph/operations/HyperedgeRemoval.d.ts +27 -0
  83. package/types/hypergraph/operations/VertexMerger.d.ts +32 -0
  84. package/types/hypergraph/operations/VertexRemoval.d.ts +30 -0
  85. package/types/hypergraph/operations/index.d.ts +19 -0
  86. package/types/hypergraph/osfkb/adapter.d.ts +315 -0
  87. package/types/hypergraph/render/Interaction.d.ts +40 -0
  88. package/types/hypergraph/render/PolygonRenderer.d.ts +50 -0
  89. package/types/hypergraph/render/SVGPolygonRenderer.d.ts +7 -0
  90. package/types/hypergraph/types.d.ts +170 -0
  91. package/types/index.d.ts +21 -0
  92. package/types/internals/Algorithms.d.ts +68 -0
  93. package/types/internals/AlgorithmsPrimitives.d.ts +18 -0
  94. package/types/internals/Animations.d.ts +39 -0
  95. package/types/internals/AttributePathPrimitives.d.ts +2 -0
  96. package/types/internals/Brand.d.ts +22 -0
  97. package/types/internals/Camera.d.ts +115 -0
  98. package/types/internals/CameraInteractions.d.ts +15 -0
  99. package/types/internals/CameraInteractionsPrimitives.d.ts +18 -0
  100. package/types/internals/Captor.d.ts +56 -0
  101. package/types/internals/CaptorPrimitives.d.ts +9 -0
  102. package/types/internals/ClassModule.d.ts +42 -0
  103. package/types/internals/ConnectNodes.d.ts +23 -0
  104. package/types/internals/CurvatureManager.d.ts +14 -0
  105. package/types/internals/DataModule.d.ts +29 -0
  106. package/types/internals/Disabled.d.ts +27 -0
  107. package/types/internals/DomModule.d.ts +87 -0
  108. package/types/internals/DragModule.d.ts +14 -0
  109. package/types/internals/ElementSet.d.ts +17 -0
  110. package/types/internals/EventsModule.d.ts +41 -0
  111. package/types/internals/FlexArray.d.ts +54 -0
  112. package/types/internals/Geo.d.ts +127 -0
  113. package/types/internals/Graph.d.ts +109 -0
  114. package/types/internals/Graphics.d.ts +112 -0
  115. package/types/internals/GraphicsEngine.d.ts +96 -0
  116. package/types/internals/Hover.d.ts +32 -0
  117. package/types/internals/Hypergraph.d.ts +112 -0
  118. package/types/internals/IndexList.d.ts +28 -0
  119. package/types/internals/IndividualAttributes.d.ts +27 -0
  120. package/types/internals/Interactions.d.ts +45 -0
  121. package/types/internals/Keyboard.d.ts +25 -0
  122. package/types/internals/LabelManager.d.ts +56 -0
  123. package/types/internals/Lasso.d.ts +22 -0
  124. package/types/internals/Layers.d.ts +79 -0
  125. package/types/internals/LayersPrimitives.d.ts +5 -0
  126. package/types/internals/Layouts.d.ts +35 -0
  127. package/types/internals/LayoutsInternal.d.ts +37 -0
  128. package/types/internals/LayoutsPrimitives.d.ts +23 -0
  129. package/types/internals/Legend.d.ts +33 -0
  130. package/types/internals/LegendPrimitives.d.ts +3 -0
  131. package/types/internals/Locate.d.ts +43 -0
  132. package/types/internals/LocatePrimitives.d.ts +20 -0
  133. package/types/internals/MappingManager.d.ts +27 -0
  134. package/types/internals/MappingPrimitives.d.ts +29 -0
  135. package/types/internals/Module.d.ts +23 -0
  136. package/types/internals/Mouse.d.ts +42 -0
  137. package/types/internals/NodusModules.d.ts +99 -0
  138. package/types/internals/PositionModule.d.ts +10 -0
  139. package/types/internals/PulseModule.d.ts +29 -0
  140. package/types/internals/Quadtree.d.ts +100 -0
  141. package/types/internals/RectangleSelect.d.ts +18 -0
  142. package/types/internals/Resizing.d.ts +48 -0
  143. package/types/internals/Rewiring.d.ts +64 -0
  144. package/types/internals/SchemaWatchPrimitives.d.ts +75 -0
  145. package/types/internals/Selection.d.ts +52 -0
  146. package/types/internals/SelectionModule.d.ts +27 -0
  147. package/types/internals/Settings.d.ts +20 -0
  148. package/types/internals/Snapping.d.ts +54 -0
  149. package/types/internals/Spatial.d.ts +50 -0
  150. package/types/internals/SpatialPrimitives.d.ts +75 -0
  151. package/types/internals/Storage.d.ts +46 -0
  152. package/types/internals/StyleRulesModule.d.ts +21 -0
  153. package/types/internals/Synchronizer.d.ts +17 -0
  154. package/types/internals/Tooltip.d.ts +25 -0
  155. package/types/internals/TooltipPrimitives.d.ts +21 -0
  156. package/types/internals/Topology.d.ts +50 -0
  157. package/types/internals/Touch.d.ts +16 -0
  158. package/types/internals/Transformations.d.ts +36 -0
  159. package/types/internals/VirtualMouse.d.ts +52 -0
  160. package/types/internals/WasmHGrid.d.ts +25 -0
  161. package/types/internals/WatcherModule.d.ts +25 -0
  162. package/types/internals/Workers.d.ts +79 -0
  163. package/types/internals/algorithmExports.d.ts +333 -0
  164. package/types/internals/algorithmHelpers.d.ts +36 -0
  165. package/types/internals/attributes/AttributesManager.d.ts +216 -0
  166. package/types/internals/attributes/ElementAttributesManager.d.ts +119 -0
  167. package/types/internals/attributes/attributeHelpers.d.ts +70 -0
  168. package/types/internals/attributes/flexArrayFactories.d.ts +277 -0
  169. package/types/internals/easing.d.ts +15 -0
  170. package/types/internals/helpers.d.ts +79 -0
  171. package/types/internals/hypergraphWorker.d.ts +37 -0
  172. package/types/internals/hypergraphWorkerHost.d.ts +40 -0
  173. package/types/internals/labels/SpatialGrid.d.ts +29 -0
  174. package/types/internals/labels/fillEdgeTexts.d.ts +25 -0
  175. package/types/internals/labels/fillNodeTexts.d.ts +24 -0
  176. package/types/internals/labels/helpers.d.ts +180 -0
  177. package/types/internals/layoutWorker.d.ts +21 -0
  178. package/types/internals/rendering/BoundariesManager.d.ts +53 -0
  179. package/types/internals/rendering/Buffer2.d.ts +91 -0
  180. package/types/internals/rendering/BufferList.d.ts +86 -0
  181. package/types/internals/rendering/CpuRenderer.d.ts +128 -0
  182. package/types/internals/rendering/EasingManager.d.ts +40 -0
  183. package/types/internals/rendering/EdgeDrawer.d.ts +54 -0
  184. package/types/internals/rendering/ElementGroup.d.ts +66 -0
  185. package/types/internals/rendering/MemoryManager.d.ts +71 -0
  186. package/types/internals/rendering/NodeDrawer.d.ts +49 -0
  187. package/types/internals/rendering/PatternManager.d.ts +29 -0
  188. package/types/internals/rendering/RENDER_MAPPING.d.ts +5 -0
  189. package/types/internals/rendering/RendererBase.d.ts +127 -0
  190. package/types/internals/rendering/ShapeManager.d.ts +46 -0
  191. package/types/internals/rendering/TextManager.d.ts +112 -0
  192. package/types/internals/rendering/canvasHelpers.d.ts +5 -0
  193. package/types/internals/rendering/constants.d.ts +125 -0
  194. package/types/internals/rendering/curveHelpers.d.ts +96 -0
  195. package/types/internals/rendering/drawerHelpers.d.ts +32 -0
  196. package/types/internals/rendering/float16.d.ts +25 -0
  197. package/types/internals/rendering/hitDetection.d.ts +89 -0
  198. package/types/internals/rendering/loadGraph.d.ts +103 -0
  199. package/types/internals/rendering/objectInfo.d.ts +46 -0
  200. package/types/internals/rendering/packing.d.ts +46 -0
  201. package/types/internals/rendering/shapeHelpers.d.ts +26 -0
  202. package/types/internals/rendering/types.d.ts +143 -0
  203. package/types/internals/renderingBinaryPrimitives.d.ts +110 -0
  204. package/types/internals/utilsExports.d.ts +408 -0
  205. package/types/internals/wasmBackend.d.ts +38 -0
  206. package/types/internals/wasmColumns.d.ts +61 -0
  207. package/types/internals/wasmInit.d.ts +1 -0
  208. package/types/modules/APIModule.d.ts +8 -0
  209. package/types/modules/AlgorithmsAPI.d.ts +15 -0
  210. package/types/modules/BrandAPI.d.ts +6 -0
  211. package/types/modules/CaptorAPI.d.ts +9 -0
  212. package/types/modules/ClassesAPI.d.ts +9 -0
  213. package/types/modules/DebugAPI.d.ts +18 -0
  214. package/types/modules/DisabledAPI.d.ts +11 -0
  215. package/types/modules/DomAPI.d.ts +9 -0
  216. package/types/modules/EventsAPI.d.ts +16 -0
  217. package/types/modules/ExportAPI.d.ts +23 -0
  218. package/types/modules/GeneratorsAPI.d.ts +12 -0
  219. package/types/modules/GeoAPI.d.ts +20 -0
  220. package/types/modules/GraphAPI.d.ts +26 -0
  221. package/types/modules/GraphicsAPI.d.ts +8 -0
  222. package/types/modules/HypergraphAPI.d.ts +71 -0
  223. package/types/modules/KeyboardAPI.d.ts +6 -0
  224. package/types/modules/LayersAPI.d.ts +7 -0
  225. package/types/modules/LayoutsAPI.d.ts +25 -0
  226. package/types/modules/LegendAPI.d.ts +9 -0
  227. package/types/modules/MouseAPI.d.ts +16 -0
  228. package/types/modules/ParseAPI.d.ts +83 -0
  229. package/types/modules/RulesAPI.d.ts +7 -0
  230. package/types/modules/SchemaAPI.d.ts +9 -0
  231. package/types/modules/SelectionAPI.d.ts +12 -0
  232. package/types/modules/SettingsAPI.d.ts +9 -0
  233. package/types/modules/StylesAPI.d.ts +64 -0
  234. package/types/modules/ToolsAPI.d.ts +68 -0
  235. package/types/modules/TransformationsAPI.d.ts +30 -0
  236. package/types/modules/ViewAPI.d.ts +52 -0
  237. package/types/publicTypes.d.ts +56 -0
  238. package/types/renderers/CanvasRenderer.d.ts +86 -0
  239. package/types/renderers/Renderer.d.ts +13 -0
  240. package/types/renderers/SVGRenderer.d.ts +57 -0
  241. package/types/renderers/WasmGraphRenderer.d.ts +118 -0
  242. package/types/renderers/WasmRendererAdapter.d.ts +38 -0
  243. package/types/tools/ConnectNodesAPI.d.ts +42 -0
  244. package/types/tools/LassoAPI.d.ts +78 -0
  245. package/types/tools/RectangleSelectAPI.d.ts +51 -0
  246. package/types/tools/ResizingAPI.d.ts +62 -0
  247. package/types/tools/RewiringAPI.d.ts +78 -0
  248. package/types/tools/SnappingAPI.d.ts +71 -0
  249. package/types/tools/ToolsAPI.d.ts +46 -0
  250. package/types/tools/TooltipAPI.d.ts +141 -0
  251. package/types/transformations/TransformationsEngine.d.ts +602 -0
  252. package/types/utils/index.d.ts +6 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Public type definitions shared across the Nodus API surface.
3
+ *
4
+ * These describe the plain-JSON graph format that {@link Nodus.setGraph} and
5
+ * the parsers accept, plus a handful of small style primitives reused by the
6
+ * interaction tools. They are intentionally permissive so consumers can attach
7
+ * arbitrary `data` and visual attributes to nodes and edges.
8
+ */
9
+ import type { Node } from './core/Node';
10
+ import type { Edge } from './core/Edge';
11
+ export type { Point, SimpleBoundingBox } from './geometry/types';
12
+ /** Unique identifier for a node. */
13
+ export type NodeId = string | number;
14
+ /** Unique identifier for an edge. */
15
+ export type EdgeId = string | number;
16
+ /** A CSS color string, or `null` to clear/inherit. */
17
+ export type Color = string | null;
18
+ /** Free-form bag of visual attributes attached to a node or edge. */
19
+ export type ElementAttributes = Record<string, any>;
20
+ /** Plain-JSON representation of a node. */
21
+ export interface RawNode<T = any> {
22
+ id?: NodeId;
23
+ attributes?: ElementAttributes;
24
+ data?: T;
25
+ }
26
+ /** Plain-JSON representation of an edge. */
27
+ export interface RawEdge<T = any> {
28
+ id?: EdgeId;
29
+ source: NodeId;
30
+ target: NodeId;
31
+ attributes?: ElementAttributes;
32
+ data?: T;
33
+ }
34
+ /** Plain-JSON representation of a graph: a set of nodes and edges. */
35
+ export interface RawGraph<T = any, U = any> {
36
+ nodes: RawNode<T>[];
37
+ edges: RawEdge<U>[];
38
+ }
39
+ /** Valid CSS cursor keywords accepted by the interaction tools. */
40
+ export type CursorStyle = 'auto' | 'default' | 'none' | 'context-menu' | 'help' | 'pointer' | 'progress' | 'wait' | 'cell' | 'crosshair' | 'text' | 'vertical-text' | 'alias' | 'copy' | 'move' | 'no-drop' | 'not-allowed' | 'e-resize' | 'n-resize' | 'ne-resize' | 'nw-resize' | 's-resize' | 'se-resize' | 'sw-resize' | 'w-resize' | 'ew-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'col-resize' | 'row-resize' | 'all-scroll' | 'zoom-in' | 'zoom-out' | 'grab' | 'grabbing';
41
+ /** Options for the connect-nodes interaction tool. */
42
+ export interface ConnectNodesOptions<ND = any, ED = any> {
43
+ continueDrawing?: boolean;
44
+ cursorStyle?: CursorStyle;
45
+ strokeColor?: Color;
46
+ strokeWidth?: number;
47
+ dashLength?: number;
48
+ dashed?: boolean;
49
+ createNodes?: boolean;
50
+ condition?: (source: Node<ND, ED>, target?: Node<ND, ED>) => boolean;
51
+ onNodeCreated?: (node: Node<ND, ED>) => void;
52
+ onEdgeCreated?: (edge: Edge<ED, ND>) => void;
53
+ createEdge?: (edge: RawEdge<ED>) => RawEdge<ED>;
54
+ createNode?: (node: RawNode<ND>) => RawNode<ND>;
55
+ onComplete?: (source: Node<ND, ED>, target: Node<ND, ED>, edge?: Edge<ED, ND>) => void;
56
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * CanvasRenderer — Canvas 2D renderer that extends CpuRenderer.
3
+ *
4
+ * Implements the low-level Canvas 2D drawing primitives (shapes, lines,
5
+ * curves, text, images and pie charts) that CpuRenderer invokes during its
6
+ * `_render()` pipeline, translating scene geometry into `CanvasRenderingContext2D`
7
+ * calls scaled by the device pixel ratio.
8
+ */
9
+ import { CpuRenderer } from '../internals/rendering/CpuRenderer';
10
+ import type { RendererBaseOptions, ChangeFlags } from '../internals/rendering/RendererBase';
11
+ export declare class CanvasRenderer extends CpuRenderer {
12
+ protected _canvas: HTMLCanvasElement;
13
+ protected _ctx: CanvasRenderingContext2D;
14
+ private _imgCanvas;
15
+ private _imgCtx;
16
+ constructor(opts: RendererBaseOptions);
17
+ static getName(): string;
18
+ static isAvailable(): boolean;
19
+ getDomElement(): HTMLCanvasElement;
20
+ _render({ shapesChanged, dimensionsChanged }: ChangeFlags): void;
21
+ protected _drawRoundedRectangle(center: {
22
+ x: number;
23
+ y: number;
24
+ }, halfW: number, halfH: number, angle: number, fillColor: string | null): void;
25
+ protected _drawCircle(center: {
26
+ x: number;
27
+ y: number;
28
+ }, radius: number): void;
29
+ protected _drawPolygon(points: Array<{
30
+ x: number;
31
+ y: number;
32
+ }>): void;
33
+ protected _drawStraightLine(from: {
34
+ x: number;
35
+ y: number;
36
+ }, to: {
37
+ x: number;
38
+ y: number;
39
+ }): void;
40
+ protected _drawQuadraticCurve(from: {
41
+ x: number;
42
+ y: number;
43
+ }, control: {
44
+ x: number;
45
+ y: number;
46
+ }, to: {
47
+ x: number;
48
+ y: number;
49
+ }): void;
50
+ protected _drawCubicCurve(from: {
51
+ x: number;
52
+ y: number;
53
+ }, cp1: {
54
+ x: number;
55
+ y: number;
56
+ }, cp2: {
57
+ x: number;
58
+ y: number;
59
+ }, to: {
60
+ x: number;
61
+ y: number;
62
+ }): void;
63
+ protected _fill(color: string | null): void;
64
+ protected _stroke(color: string | null, width?: number, dash?: number[]): void;
65
+ protected _startClip(): void;
66
+ protected _endClip(): void;
67
+ protected _startReverseClip(): void;
68
+ protected _endReverseClip(): void;
69
+ protected _displayText(position: {
70
+ x: number;
71
+ y: number;
72
+ }, angle: number, text: string, color: string, fontFamily: string, fontSize: number, isIcon: boolean, textAlign: string, textWidth: number, offsetX: number, offsetY: number, _unused?: any, stroke?: {
73
+ color: string;
74
+ width: number;
75
+ }): void;
76
+ protected _displayImage(center: {
77
+ x: number;
78
+ y: number;
79
+ }, width: number, height: number, image: any, scaled: boolean, duplicated: boolean, opacity: number): void;
80
+ protected _displayPieChart(center: {
81
+ x: number;
82
+ y: number;
83
+ }, radius: number, colors: string[]): void;
84
+ private _blendImageOnBackground;
85
+ getImageData(): ImageData;
86
+ }
@@ -0,0 +1,13 @@
1
+ import { Nodus } from '../Nodus';
2
+ import { Module } from '../internals/Module';
3
+ export declare abstract class Renderer extends Module {
4
+ protected canvas: HTMLCanvasElement | null;
5
+ protected ctx: CanvasRenderingContext2D | WebGLRenderingContext | null;
6
+ protected width: number;
7
+ protected height: number;
8
+ constructor(nodus: Nodus<any, any>);
9
+ init(container: HTMLElement): void;
10
+ resize(): void;
11
+ abstract render(): void;
12
+ refresh(): void;
13
+ }
@@ -0,0 +1,57 @@
1
+ import { Renderer } from './Renderer';
2
+ import { Nodus } from '../Nodus';
3
+ export declare class SvgRenderer extends Renderer {
4
+ private _svgRoot;
5
+ private _defsEl;
6
+ private _stylesGroup;
7
+ private _background;
8
+ private _viewGroup;
9
+ private _selectionGroup;
10
+ private _edgeGroup;
11
+ private _nodeGroup;
12
+ private _labelGroup;
13
+ private _badgeGroup;
14
+ private _transform;
15
+ private _backgroundColor;
16
+ private _renderBackground;
17
+ private _nodeElements;
18
+ private _edgeElements;
19
+ private _edgeArrowMarkers;
20
+ private _labelElements;
21
+ private _labelBgElements;
22
+ private _badgeElements;
23
+ private _edgeLabelElements;
24
+ private _selectionElements;
25
+ private _selectedNodes;
26
+ private _selectedEdges;
27
+ private _selectionColor;
28
+ private _clipPathCounter;
29
+ constructor(nodus: Nodus<any, any>);
30
+ static getName(): string;
31
+ static isAvailable(): boolean;
32
+ init(container: HTMLElement): void;
33
+ resize(): void;
34
+ setTransform(x: number, y: number, zoom: number, angle?: number): void;
35
+ private _updateTransform;
36
+ setBackgroundColor(color: string | null, render?: boolean): void;
37
+ setSelectedNodes(nodeIndices: number[]): void;
38
+ setSelectedEdges(edgeIndices: number[]): void;
39
+ render(): void;
40
+ private _clear;
41
+ private _renderEdges;
42
+ private _createEdgePath;
43
+ private _computeControlPoint;
44
+ private _renderEdgeLabel;
45
+ private _renderNodes;
46
+ private _createShapeElement;
47
+ private _renderBadge;
48
+ private _renderNodeLabel;
49
+ private _getColor;
50
+ getNodeAt(screenX: number, screenY: number): number | null;
51
+ getEdgeAt(screenX: number, screenY: number): number | null;
52
+ toSVGString(): string;
53
+ toDataURL(): string;
54
+ destroy(): void;
55
+ requestRender(): void;
56
+ }
57
+ export { SvgRenderer as SVGRenderer };
@@ -0,0 +1,118 @@
1
+ /**
2
+ * WasmGraphRenderer — a live Rust/wgpu renderer for a Nodus graph.
3
+ *
4
+ * Drives the real Nodus CIRCLE + EDGE WGSL shaders (via the `nodus-render-wasm` `WasmRenderer`)
5
+ * from the live graph: it extracts each node's resolved style (colour/shape/size/stroke) into the
6
+ * SoA the shaders decode, re-reads positions every frame, and follows the live camera. The
7
+ * `WasmRenderer` class is injected so the heavy wgpu module stays lazy-loaded by the caller.
8
+ *
9
+ * This is the integration layer: `await WasmGraphRenderer.create(nodus, canvas, WasmRenderer)` then
10
+ * `.start()` runs a requestAnimationFrame loop; `.renderFrame()` draws one frame on demand.
11
+ */
12
+ export interface WasmGraphRendererOptions {
13
+ /** Camera mode: 'follow' reads the Nodus camera (default); 'fit' auto-fits the graph each frame. */
14
+ camera?: 'follow' | 'fit';
15
+ /** Background clear colour is white in the shader; this controls supersampling (default 2). */
16
+ pixelRatio?: number;
17
+ /** Edge arrowheads: 'none' (default), 'target' (head), or 'both'. */
18
+ arrows?: 'none' | 'target' | 'both';
19
+ }
20
+ export declare class WasmGraphRenderer {
21
+ private _nodus;
22
+ private _canvas;
23
+ private _wasm;
24
+ private _opts;
25
+ private _raf;
26
+ private _toLinear;
27
+ private _styleVersion;
28
+ private _radii;
29
+ private _fill;
30
+ private _shape;
31
+ private _stroke;
32
+ private _sw;
33
+ private _outline;
34
+ private _haloCol;
35
+ private _haloW;
36
+ private _imageTile;
37
+ private _atlasKey;
38
+ private _pieOffset;
39
+ private _pieCount;
40
+ private _pieSegs;
41
+ private _edges;
42
+ private _edgeColor;
43
+ private _edgeWidth;
44
+ private _edgeCurv;
45
+ private _xs;
46
+ private _ys;
47
+ private _nodeIds;
48
+ private _labels;
49
+ private _lastCam;
50
+ private _fitted;
51
+ private _glyphs;
52
+ private _fontPx;
53
+ private _highlight;
54
+ private _pieData;
55
+ private _badgeNode;
56
+ private _badgeAngle;
57
+ private _badgeScale;
58
+ private _badgePosScale;
59
+ private _badgeFill;
60
+ private _badgeStrokeCol;
61
+ private _badgeStrokeW;
62
+ private _badgeText;
63
+ private _badgeTextCol;
64
+ private constructor();
65
+ /** Create a renderer bound to `canvas`. `WasmRendererClass` is the lazy-loaded wgpu class. */
66
+ static create(nodus: any, canvas: HTMLCanvasElement, WasmRendererClass: any, opts?: WasmGraphRendererOptions): Promise<WasmGraphRenderer>;
67
+ /** Rasterise an ASCII glyph atlas (white, alpha=coverage) into a texture the TEXT shader samples,
68
+ * recording each glyph's UV region. Monospace-ish layout in a fixed cell grid. */
69
+ private _buildAtlas;
70
+ /** Load image URLs into a 16×16 tile grid atlas (64px tiles, 1024² sRGB) and upload it; redraw on
71
+ * completion so node icons appear. attrEx.y (set in _buildNodeAttrs) selects each node's tile. */
72
+ private _loadAtlas;
73
+ /** Lay out each node's label into TEXT-shader glyph instances (5 vec4f each), from live positions.
74
+ * `zoom` is the dpr-scaled camera zoom; the world font size is derived so labels stay a constant
75
+ * on-screen size (backing px = world·zoom, so worldFont = targetCssPx·dpr / zoom). */
76
+ private _buildText;
77
+ private _dpr;
78
+ private _sizeCanvas;
79
+ /** getAttribute that returns null instead of throwing on an undefined attribute name. */
80
+ private _safeAttr;
81
+ /** A Nodus style value (false/null = off, colour string, or {color,...}) → LINEAR rgba, or null. */
82
+ private _styleColor;
83
+ /** Width from a style value ({width} object) or a default. */
84
+ private _styleWidth;
85
+ /** Re-read each node's resolved style into the SoA. Cheap: skipped unless the graph version moved. */
86
+ private _rebuildStyle;
87
+ /** The camera as (cx, cy, zoom) for the shader, accounting for DPR (zoom·dpr) — or auto-fit. */
88
+ private _camera;
89
+ /** Set the node ids that get a highlight ring (selection/hover); redraw to reflect it. */
90
+ setHighlight(ids: any[]): void;
91
+ /** Render a node as a pie chart of equal-angle colour slices (or clear with null). Restyle next frame. */
92
+ setPie(id: any, colours: string[] | null): void;
93
+ /** Assemble the node `attrs` SoA the CIRCLE shader decodes — 7×vec4f (28 f32) per node. THIS is
94
+ * the feature surface: every node feature is a write into this layout, no Rust change needed.
95
+ * [0..4] fillCol [4..8] attrEx=(shapeId, imageId, innerStrokeW px, haloW px)
96
+ * [8..12] strokeCol(inner) [12..16] haloCol
97
+ * [16..20] pieMeta=(pieOff, pieCount, innerStrokeMinVis, outerStrokeW px)
98
+ * [20..24] outerStrokeCol [24..28] outlineCol */
99
+ private _buildNodeAttrs;
100
+ /** Assemble the edge attr SoA the EDGE shader decodes — 2×u32 per edge: packed rgba8 colour, then
101
+ * (widthU16 | dash<<16 | arrows<<20 | widthScale<<22 | curvByte<<24). The edge feature surface. */
102
+ private _buildEdgeAttrs;
103
+ /** Draw one frame from the live graph. */
104
+ renderFrame(): void;
105
+ /** Hit-test a canvas-relative screen point (CSS px) → node id, or null. CPU point-in-radius
106
+ * against the last rendered frame's camera + positions (the inverse of the shader's mapping). */
107
+ pick(cssX: number, cssY: number): any;
108
+ /** World point → canvas-relative CSS px (the forward mapping; inverse of `pick`'s unproject). */
109
+ worldToScreen(wx: number, wy: number): {
110
+ x: number;
111
+ y: number;
112
+ };
113
+ /** Resize the surface to the canvas's container, then redraw. */
114
+ resize(): void;
115
+ /** Start the requestAnimationFrame loop (follows live positions + camera). */
116
+ start(): void;
117
+ stop(): void;
118
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * WasmRendererAdapter — bridges the live Rust renderer (WasmGraphRenderer) into the Nodus
3
+ * GraphicsEngine's renderer slot, so it can be selected like any other renderer
4
+ * (`new Nodus({ renderer: 'wasm' })`). Registered in RENDER_MAPPING as 'wasm'.
5
+ *
6
+ * The heavy wgpu module (`nodus-render-wasm`) is injected once via `setModule()` (kept out of the
7
+ * default bundle / lazy-loaded by the host), so this adapter carries no wgpu weight itself.
8
+ */
9
+ import { RendererBase } from '../internals/rendering/RendererBase';
10
+ export declare class WasmRendererAdapter extends RendererBase {
11
+ private _canvas;
12
+ private _nodus;
13
+ private _renderer;
14
+ private _loading;
15
+ private static _module;
16
+ private static _loader;
17
+ /** Inject the `WasmRenderer` class from `nodus-render-wasm` (pkg-render) directly. */
18
+ static setModule(WasmRendererClass: any): void;
19
+ /** Provide an async loader for the wgpu module (e.g. `() => import('@kortexya/nodus/render-wasm')`).
20
+ * Used when the module isn't injected — the adapter lazy-loads it on first render. */
21
+ static setModuleLoader(loader: () => Promise<any>): void;
22
+ /** Resolve the `WasmRenderer` class: injected module, else the loader, else the default pkg-render. */
23
+ private static _resolveModule;
24
+ static createInitData(): any;
25
+ static getName(): string | null;
26
+ static isAvailable(): boolean;
27
+ constructor(opts: any);
28
+ getDomElement(): HTMLElement;
29
+ /** Lazily resolve the wgpu module + create the WasmGraphRenderer once the canvas is in the DOM. */
30
+ private _ensure;
31
+ renderFrame(): void;
32
+ /** Hit-test for hover/click — canvas-relative CSS px → the Node, or null. */
33
+ extractElement(x: number, y: number): any;
34
+ resize(): void;
35
+ ensureAnimationsReady(): Promise<void>;
36
+ getImageData(): any;
37
+ destroy(): void;
38
+ }
@@ -0,0 +1,42 @@
1
+ import { Nodus } from '../Nodus';
2
+ import { Module } from '../internals/Module';
3
+ import type { ConnectNodesOptions } from '../publicTypes';
4
+ /**
5
+ * Connect Nodes API: functions to connect nodes by drawing edges.
6
+ *
7
+ * Enables the user to draw edges between nodes by clicking and dragging.
8
+ * When enabled, clicking on a node and dragging to another node creates an edge.
9
+ * Optionally, dragging to empty space creates a new node and connects to it.
10
+ */
11
+ export declare class ConnectNodesAPI<ND = any, ED = any> extends Module {
12
+ private _enabled;
13
+ private _options;
14
+ private _startNode;
15
+ private _startPos;
16
+ private _endPos;
17
+ private _cursorEnabled;
18
+ private _prevSettings;
19
+ private _blockId;
20
+ private _canvasLayer;
21
+ private _interaction;
22
+ constructor(nodus: Nodus<ND, ED>);
23
+ private _init;
24
+ private _onStart;
25
+ private _onMove;
26
+ private _onStop;
27
+ private _getNodeAtPosition;
28
+ private _drawLine;
29
+ private _clearLine;
30
+ /**
31
+ * Enable the "connectNodes" mode, allowing the user to draw edges with the mouse.
32
+ */
33
+ enable(options?: ConnectNodesOptions<ND, ED>): this;
34
+ /**
35
+ * Disable the "connectNodes" mode.
36
+ */
37
+ disable(): this;
38
+ /**
39
+ * Indicates if the "connectNodes" mode is enabled.
40
+ */
41
+ enabled(): boolean;
42
+ }
@@ -0,0 +1,78 @@
1
+ import { Nodus } from '../Nodus';
2
+ import { Module } from '../internals/Module';
3
+ import type { Color, CursorStyle, Point } from '../publicTypes';
4
+ interface LassoInternalOptions {
5
+ strokeColor: Color;
6
+ strokeWidth: number;
7
+ fillColor: Color | null;
8
+ cursorStyle: CursorStyle;
9
+ callback: (payload: {
10
+ nodes: any;
11
+ edges: any;
12
+ points: Point[];
13
+ }) => void;
14
+ bothExtremities: boolean;
15
+ }
16
+ /**
17
+ * Simple axis-aligned bounding box for polygon point tracking.
18
+ */
19
+ declare class BoundingBox {
20
+ minX: number;
21
+ minY: number;
22
+ maxX: number;
23
+ maxY: number;
24
+ reset(): void;
25
+ extend(x: number, y: number): void;
26
+ }
27
+ /**
28
+ * Lasso API: functions to select nodes and edges by drawing a lasso.
29
+ *
30
+ * When enabled, the user can draw a freeform shape on the canvas.
31
+ * Nodes and edges within the lasso region are selected (or passed to a callback).
32
+ */
33
+ export declare class LassoAPI<ND = any, ED = any> extends Module {
34
+ protected _enabled: boolean;
35
+ protected _options: LassoInternalOptions;
36
+ protected _points: Point[];
37
+ protected _bbox: BoundingBox;
38
+ protected _canvasLayer: any;
39
+ protected _cachedCursor: string;
40
+ protected _interaction: any;
41
+ constructor(nodus: Nodus<ND, ED>);
42
+ private _init;
43
+ private _onStart;
44
+ private _onProgress;
45
+ private _onStop;
46
+ protected _queryElements(minX: number, minY: number, maxX: number, maxY: number): {
47
+ nodes: any;
48
+ edges: any;
49
+ };
50
+ protected _filterNodesInPolygon(nodes: any, polygon: Point[], nodeInsideMap: Record<string, boolean>): any;
51
+ protected _filterEdges(edges: any, nodeInsideMap: Record<string, boolean>): any;
52
+ protected _savePoint(x: number, y: number, draw: boolean): void;
53
+ protected _clearCanvas(): void;
54
+ /**
55
+ * Enables the lasso selection tool.
56
+ */
57
+ enable(options?: {
58
+ strokeColor?: Color;
59
+ strokeWidth?: number;
60
+ fillColor?: Color | null;
61
+ cursorStyle?: CursorStyle;
62
+ callback?: (payload: {
63
+ nodes: any;
64
+ edges: any;
65
+ points: Point[];
66
+ }) => void;
67
+ bothExtremities?: boolean;
68
+ }): this;
69
+ /**
70
+ * Disables the lasso tool.
71
+ */
72
+ disable(): this;
73
+ /**
74
+ * Check whether the lasso tool is enabled.
75
+ */
76
+ enabled(): boolean;
77
+ }
78
+ export {};
@@ -0,0 +1,51 @@
1
+ import { Nodus } from '../Nodus';
2
+ import { Module } from '../internals/Module';
3
+ import type { Color, CursorStyle, SimpleBoundingBox } from '../publicTypes';
4
+ /**
5
+ * Rectangle Select API: functions to select nodes and edges by drawing a rectangle.
6
+ *
7
+ * When enabled, the user can draw a rectangle by clicking and dragging on the canvas.
8
+ * Nodes within the rectangle are selected (or passed to a callback).
9
+ * If no nodes are found, edges within the rectangle are selected instead.
10
+ */
11
+ export declare class RectangleSelectAPI<ND = any, ED = any> extends Module {
12
+ private _enabled;
13
+ private _options;
14
+ private _canvasLayer;
15
+ private _cachedCursor;
16
+ private _start;
17
+ private _interaction;
18
+ constructor(nodus: Nodus<ND, ED>);
19
+ private _onStart;
20
+ private _refreshRectangle;
21
+ private _formatRectangle;
22
+ private _onStop;
23
+ private _queryElements;
24
+ private _filterNodesInRectangle;
25
+ private _filterEdges;
26
+ private _clearCanvas;
27
+ /**
28
+ * Enable the selection by rectangle tool, allowing the user to select nodes
29
+ * by drawing a rectangle on the screen.
30
+ */
31
+ enable(options?: {
32
+ strokeColor?: Color;
33
+ strokeWidth?: number;
34
+ fillColor?: Color | null;
35
+ cursorStyle?: CursorStyle;
36
+ callback?: (payload: {
37
+ nodes: any;
38
+ edges: any;
39
+ rectangle: SimpleBoundingBox;
40
+ }) => void;
41
+ bothExtremities?: boolean;
42
+ }): void;
43
+ /**
44
+ * Disable the rectangle selection.
45
+ */
46
+ disable(): void;
47
+ /**
48
+ * Indicates if the rectangle selection is enabled.
49
+ */
50
+ enabled(): boolean;
51
+ }
@@ -0,0 +1,62 @@
1
+ import { Nodus } from '../Nodus';
2
+ import { Module } from '../internals/Module';
3
+ import type { Color, CursorStyle } from '../publicTypes';
4
+ /**
5
+ * Resizing API: functions to resize nodes.
6
+ *
7
+ * When enabled, selected nodes display resize handles at the corners of their
8
+ * bounding box. Dragging a handle changes the node radius. The tool supports
9
+ * snapping to nearby node sizes and displays size indicator guidelines.
10
+ */
11
+ export declare class ResizingAPI<ND = any, ED = any> extends Module {
12
+ private _enabled;
13
+ private _options;
14
+ private _nodesToHighlight;
15
+ private _cursorEnabled;
16
+ private _x;
17
+ private _y;
18
+ private _pointedNode;
19
+ private _nodeBeingResized;
20
+ private _additionalRadiuses;
21
+ private _canvasLayer;
22
+ private _engine;
23
+ private _interaction;
24
+ constructor(nodus: Nodus<ND, ED>);
25
+ private _init;
26
+ private _onSelectionChange;
27
+ private _displayHandlesHandler;
28
+ private _moveHandler;
29
+ private _enableCursor;
30
+ private _disableCursor;
31
+ private _detectBoundingBoxes;
32
+ private _getTotalRadius;
33
+ private _snap;
34
+ private _displayHandles;
35
+ /**
36
+ * Enable the "resize" mode, allowing the user to manually change the size
37
+ * of the selected nodes.
38
+ */
39
+ enable(options?: {
40
+ cursor?: CursorStyle;
41
+ color?: Color;
42
+ lineWidth?: number;
43
+ handleSize?: number;
44
+ detectionMargin?: number;
45
+ snappingRatio?: number;
46
+ nbNodesToSnapTo?: number;
47
+ previewColor?: Color;
48
+ sizeIndicatorColor?: Color;
49
+ sizeIndicatorOffset?: number;
50
+ sizeIndicatorWidth?: number;
51
+ sizeIndicatorThickness?: number;
52
+ }): void;
53
+ /**
54
+ * Disable the "resize" mode.
55
+ */
56
+ disable(): void;
57
+ private _reset;
58
+ /**
59
+ * Indicates if the "resize" mode is enabled.
60
+ */
61
+ enabled(): boolean;
62
+ }
@@ -0,0 +1,78 @@
1
+ import { Nodus } from '../Nodus';
2
+ import { Module } from '../internals/Module';
3
+ import type { Color, CursorStyle } from '../publicTypes';
4
+ type HandleAnchor = 'center' | 'circumference' | 'text';
5
+ /**
6
+ * Rewiring API: functions to manually change the extremities of the selected edges.
7
+ *
8
+ * When enabled, selected edges display handles at their source and target node
9
+ * positions. The user can drag these handles to change which node an edge connects to.
10
+ */
11
+ export declare class RewiringAPI<ND = any, ED = any> extends Module {
12
+ private _enabled;
13
+ private _options;
14
+ private _canvasLayer;
15
+ private _nodesToHighlight;
16
+ private _edgeHandles;
17
+ private _hoveredHandle;
18
+ private _hoveredNode;
19
+ private _hoverHandle;
20
+ private _grabHandle;
21
+ private _x;
22
+ private _y;
23
+ private _movedEdges;
24
+ private _startNode;
25
+ private _prevSettings;
26
+ private _interaction;
27
+ private _fixedEdges;
28
+ private _rewirableClass;
29
+ private _hiddenEdgesClass;
30
+ constructor(nodus: Nodus<ND, ED>);
31
+ private _init;
32
+ private _getAnchor;
33
+ private _getAnchorPosition;
34
+ private _onMouseUp;
35
+ private _onMouseDown;
36
+ private _onDragProgress;
37
+ private _refreshCanvas;
38
+ private _checkForHover;
39
+ private _shouldInteractionStart;
40
+ private _onDragStart;
41
+ private _onDragEnd;
42
+ private _refreshHandles;
43
+ private _getNodeAtPosition;
44
+ private _enableCursorOnHover;
45
+ private _disableCursorOnHover;
46
+ private _restoreSettings;
47
+ private _drawHandleDefault;
48
+ /**
49
+ * Enable the "rewire" tool, enabling the user to manually change the
50
+ * extremities of the selected edges.
51
+ */
52
+ enable(options?: {
53
+ color?: Color;
54
+ radius?: number;
55
+ hoverRadius?: number;
56
+ cursorOnHover?: CursorStyle;
57
+ cursorOnDrag?: CursorStyle;
58
+ drawHandle?: (ctx: CanvasRenderingContext2D, node: any, isHovered: boolean) => void;
59
+ anchor?: HandleAnchor | ((node: any) => HandleAnchor);
60
+ edges?: any;
61
+ drawEdges?: boolean;
62
+ }): void;
63
+ private _displayMovedEdges;
64
+ /**
65
+ * Set the edges eligible for rewiring at runtime.
66
+ * Pass `undefined` to fall back to the current selection.
67
+ */
68
+ setEdgesToRewire(edges: any | undefined): void;
69
+ /**
70
+ * Disable the "rewire" tool.
71
+ */
72
+ disable(): void;
73
+ /**
74
+ * Indicates if the "rewire" tool is enabled.
75
+ */
76
+ enabled(): boolean;
77
+ }
78
+ export {};