@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,180 @@
1
+ /**
2
+ * Label system helper functions and constants.
3
+ *
4
+ * These are used by fillNodeTexts, fillEdgeTexts, and LabelManager
5
+ * for computing label geometry, collision rects, and debug rendering.
6
+ */
7
+ /** Number of floats per bounding-box record: [minX, minY, maxX, maxY, isNode, elementIndex] */
8
+ export declare const REC_SIZE = 6;
9
+ /** Number of floats per oriented rect record: [x, y, w, h, angle] */
10
+ export declare const RECT_SIZE = 5;
11
+ /** Padding multiplier applied to text dimensions */
12
+ export declare const PADDING = 1;
13
+ /** Minimum layer value used to normalize layer indices */
14
+ export declare const MINIMUM_LAYER_VALUE = -1;
15
+ export declare const X_MULTIPLIER: Record<string, number>;
16
+ export declare const Y_MULTIPLIER: Record<string, number>;
17
+ export declare const WIDTH_MULTIPLIER: Record<string, number>;
18
+ export declare const HEIGHT_MULTIPLIER: Record<string, number>;
19
+ export interface FlexArrayAccessor {
20
+ get(index: number): any;
21
+ }
22
+ export interface NodeAttributes {
23
+ x: FlexArrayAccessor;
24
+ y: FlexArrayAccessor;
25
+ radius: FlexArrayAccessor;
26
+ layer: FlexArrayAccessor;
27
+ scalingMethod: FlexArrayAccessor;
28
+ excluded: FlexArrayAccessor;
29
+ textHidden: FlexArrayAccessor;
30
+ text: {
31
+ content: FlexArrayAccessor;
32
+ scaling: FlexArrayAccessor;
33
+ size: FlexArrayAccessor;
34
+ font: FlexArrayAccessor;
35
+ style: FlexArrayAccessor;
36
+ scale: FlexArrayAccessor;
37
+ maxLineLength: FlexArrayAccessor;
38
+ margin: FlexArrayAccessor;
39
+ minVisibleSize: FlexArrayAccessor;
40
+ padding: FlexArrayAccessor;
41
+ position: FlexArrayAccessor;
42
+ };
43
+ }
44
+ export interface EdgeAttributes {
45
+ source: FlexArrayAccessor;
46
+ target: FlexArrayAccessor;
47
+ scalingMethod: FlexArrayAccessor;
48
+ width: FlexArrayAccessor;
49
+ curvature: FlexArrayAccessor;
50
+ layer: FlexArrayAccessor;
51
+ animationDuration: FlexArrayAccessor;
52
+ text: {
53
+ content: FlexArrayAccessor;
54
+ scaling: FlexArrayAccessor;
55
+ size: FlexArrayAccessor;
56
+ font: FlexArrayAccessor;
57
+ style: FlexArrayAccessor;
58
+ scale: FlexArrayAccessor;
59
+ maxLineLength: FlexArrayAccessor;
60
+ margin: FlexArrayAccessor;
61
+ minVisibleSize: FlexArrayAccessor;
62
+ padding: FlexArrayAccessor;
63
+ adjustAngle: FlexArrayAccessor;
64
+ position: FlexArrayAccessor;
65
+ };
66
+ }
67
+ export interface FrameData {
68
+ angle: number;
69
+ zoom: number;
70
+ screen: number[];
71
+ sin: number;
72
+ cos: number;
73
+ }
74
+ export interface LabelOutput {
75
+ remove: {
76
+ nodes: number[];
77
+ edges: number[];
78
+ };
79
+ redraw: {
80
+ nodes: number[];
81
+ edges: number[];
82
+ };
83
+ rects: number[];
84
+ bboxes: number[];
85
+ intersects: any[];
86
+ realIntersection: boolean;
87
+ indexToLayer: Record<number, number>;
88
+ byLayer: (number[] | undefined)[];
89
+ indexToRedrawEdgeText: Record<number, boolean>;
90
+ indexToRemoveEdgeText: Record<number, boolean>;
91
+ indexToRedrawNodeText: Record<number, boolean>;
92
+ indexToRemoveNodeText: Record<number, boolean>;
93
+ indexToQuadIndex: Record<number, number>;
94
+ }
95
+ export type MeasureTextFn = (text: string, font: string, style: string, size: number) => {
96
+ width: number;
97
+ };
98
+ export interface LinesInfo {
99
+ data: string[];
100
+ maxLength: number;
101
+ lines: number;
102
+ }
103
+ export declare function getLinesInfo(text: string | null, maxLineLength: number): LinesInfo | null;
104
+ /**
105
+ * Compute the axis-aligned bounding box of a rotated rectangle.
106
+ *
107
+ * @param x - Left edge of the un-rotated rectangle
108
+ * @param y - Top edge of the un-rotated rectangle
109
+ * @param w - Width
110
+ * @param h - Height
111
+ * @param angle - Rotation angle in radians (default 0)
112
+ * @param sinA - Pre-computed sin(angle), or computed if omitted
113
+ * @param cosA - Pre-computed cos(angle), or computed if omitted
114
+ * @param out - Output array [minX, minY, maxX, maxY] (allocated if omitted)
115
+ * @returns The output array [minX, minY, maxX, maxY]
116
+ */
117
+ export declare function getAABB(x: number, y: number, w: number, h: number, angle?: number, sinA?: number, cosA?: number, out?: number[]): number[];
118
+ /**
119
+ * Get the four corner points of an oriented bounding box (OBB).
120
+ */
121
+ export declare function getOBBPoints(x: number, y: number, w: number, h: number, angle?: number): {
122
+ x: number;
123
+ y: number;
124
+ }[];
125
+ export declare function polygonsIntersect(a: {
126
+ x: number;
127
+ y: number;
128
+ }[], b: {
129
+ x: number;
130
+ y: number;
131
+ }[]): boolean;
132
+ /**
133
+ * Check if two OBBs (oriented bounding boxes) collide.
134
+ * Each OBB is represented as [x, y, w, h, angle].
135
+ */
136
+ export declare function checkOBBCollision(a: number[], b: number[]): boolean;
137
+ export declare function moveAABB(bbox: number[], angle?: number, dist?: number, out?: number[]): number[];
138
+ export declare function lineAngle(x1: number, y1: number, x2: number, y2: number): number;
139
+ export declare function formatAngle(angle: number): number;
140
+ export declare function distance(x1: number, y1: number, x2: number, y2: number): number;
141
+ interface CubicControlPoints {
142
+ x1: number;
143
+ y1: number;
144
+ x2: number;
145
+ y2: number;
146
+ }
147
+ interface Point2D {
148
+ x: number;
149
+ y: number;
150
+ }
151
+ export declare function getSelfLoopControlPoints(x: number, y: number, curvature: number, radius: number, _unused: number, out: CubicControlPoints): void;
152
+ export declare function getPointOnBezierCurve(t: number, x1: number, y1: number, x2: number, y2: number, cx1: number, cy1: number, cx2: number, cy2: number, out: Point2D): Point2D;
153
+ export declare function getQuadraticCurveControlPoint(x1: number, y1: number, x2: number, y2: number, curvature: number, out: Point2D): void;
154
+ export declare function getPointOnQuadraticCurve(t: number, x1: number, y1: number, x2: number, y2: number, cx: number, cy: number, out?: Point2D): Point2D;
155
+ /**
156
+ * Compute text displacement/offset for a node label.
157
+ *
158
+ * Returns a 10-element tuple:
159
+ * [offsetX, offsetY, marginX, marginY, radiusX, radiusY, width, height, halfWidth, halfHeight]
160
+ *
161
+ * These values are consumed by fillNodeTexts to position the label
162
+ * relative to the node center, accounting for text position (left/right/top/bottom/center),
163
+ * node radius, margins, and padding.
164
+ */
165
+ export declare function getNTextDisplacement(index: number, nodeAttrs: NodeAttributes, measureText: MeasureTextFn): [number, number, number, number, number, number, number, number, number, number];
166
+ /**
167
+ * Render debug overlays showing label bounding boxes and oriented rects.
168
+ *
169
+ * @param ctx - Canvas 2D context
170
+ * @param bboxes - Flat array of AABB records (REC_SIZE floats each)
171
+ * @param rects - Flat array of oriented rect records (RECT_SIZE floats each)
172
+ * @param concealed - Set or array of indices that are hidden/concealed
173
+ * @param intersects - Array of polygon point arrays to draw as intersections
174
+ */
175
+ export declare function renderDebug2(ctx: CanvasRenderingContext2D, bboxes: number[], rects: number[], concealed: Set<number> | number[], intersects: {
176
+ x: number;
177
+ y: number;
178
+ }[][]): void;
179
+ export declare function formatPriority(priority: string | number | undefined): number;
180
+ export {};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Layout worker entry — runs Nodus's existing layout descriptors in a real
3
+ * Web Worker so heavy iterations don't freeze the main thread.
4
+ *
5
+ * Protocol (postMessage shapes):
6
+ * Main → Worker:
7
+ * { type: 'init', workerId, name, msg } — start a layout run
8
+ * { type: 'step', workerId, msg } — supply the next chunk's input
9
+ * { type: 'stop', workerId } — request graceful stop
10
+ *
11
+ * Worker → Main:
12
+ * { type: 'update', workerId, workerMessage, isRunning } — one chunk done
13
+ * { type: 'complete', workerId, workerMessage } — final chunk
14
+ * { type: 'error', workerId, error } — propagated error
15
+ *
16
+ * The Nodus layout descriptor API is preserved exactly: configure() runs on
17
+ * the main thread (it needs the graph), and its serialisable result is
18
+ * shipped here as the initial `msg`. From there `update(msg, context)` is
19
+ * pure on its inputs and runs in this thread.
20
+ */
21
+ export {};
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tracks the global maximum values of various visual metrics across all
3
+ * rendered elements. These maxima are used by the shader to map world-space
4
+ * values into the limited byte ranges available in the GPU buffer.
5
+ *
6
+ * Call {@link set} each frame with the new maxima. If any value grew the
7
+ * manager marks itself dirty; {@link update} then bumps the version so
8
+ * downstream caches can invalidate.
9
+ */
10
+ export declare class BoundariesManager {
11
+ private _version;
12
+ private _mustUpdate;
13
+ /** Largest absolute coordinate (x or y) of any element. */
14
+ maxCoord: number;
15
+ /** Largest scaled size (width/height) of any element. */
16
+ maxScaledSize: number;
17
+ /** Largest `minVisibleSize` value across all elements. */
18
+ maxMinVisibleSize: number;
19
+ /** Largest symbolic size across all elements. */
20
+ maxSymbolicSize: number;
21
+ /** Largest dash length used by any edge. */
22
+ maxDashLength: number;
23
+ /** Largest gap length used by any edge. */
24
+ maxGapLength: number;
25
+ /** Largest pattern scale across all elements. */
26
+ maxPatternScale: number;
27
+ constructor();
28
+ /** Reset all tracked maxima to zero. */
29
+ reset(): void;
30
+ private _initialize;
31
+ /**
32
+ * Update the tracked maxima. Returns `true` if any value increased
33
+ * (meaning shaders may need re-uploading).
34
+ */
35
+ set({ maxCoord, maxScaledSize, maxMinVisibleSize, maxSymbolicSize, maxDashLength, maxGapLength, maxPatternScale, }: {
36
+ maxCoord: number;
37
+ maxScaledSize: number;
38
+ maxMinVisibleSize: number;
39
+ maxSymbolicSize: number;
40
+ maxDashLength: number;
41
+ maxGapLength: number;
42
+ maxPatternScale: number;
43
+ }): boolean;
44
+ /**
45
+ * If the boundaries changed since the last call, bump the internal
46
+ * version counter and clear the dirty flag.
47
+ *
48
+ * @returns `this` for chaining.
49
+ */
50
+ update(): this;
51
+ /** Monotonically increasing version; changes whenever boundaries grow. */
52
+ getVersion(): number;
53
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * GPU buffer memory management.
3
+ *
4
+ * A {@link Buffer2} represents a single typed-array-backed buffer that stores
5
+ * a fixed number of rendering elements. Each element occupies `elementSize`
6
+ * bytes in the main array and may additionally occupy side-element space
7
+ * (for badges, arrow tips, etc.).
8
+ *
9
+ * Allocation is append-only until the buffer is full; freed cells are tracked
10
+ * so the buffer can be reclaimed once every cell has been freed.
11
+ */
12
+ import type { BufferOptions } from './types';
13
+ export declare class Buffer2 {
14
+ private _nbCellsAllocated;
15
+ private _nbCellsFreed;
16
+ private _isFullyAllocated;
17
+ private _isFullyFreed;
18
+ private _mustUpdate;
19
+ /** Maximum number of elements this buffer can hold */
20
+ private _capacity;
21
+ /** Monotonically increasing version; bumped on every `update()` */
22
+ version: number;
23
+ private _id;
24
+ depth: number;
25
+ type: number;
26
+ animated: boolean;
27
+ stencilUsage: number;
28
+ /** Byte size of a single main element */
29
+ elementSize: number;
30
+ private _nbSideElementsPerMainElement;
31
+ private _totalSideElementsSize;
32
+ private _byteCapacity;
33
+ private _byteArray;
34
+ private _dataView;
35
+ private _sideByteCapacity;
36
+ private _sideByteArray;
37
+ private _sideDataView;
38
+ constructor(options: BufferOptions);
39
+ /**
40
+ * Mark the buffer as up-to-date and bump the version counter.
41
+ * If every allocated cell has been freed the buffer is flagged for
42
+ * reclamation.
43
+ */
44
+ update(): void;
45
+ /**
46
+ * Try to allocate `count` contiguous cells.
47
+ *
48
+ * @param count - Number of cells to allocate.
49
+ * @returns The starting cell offset, or `-1` if the buffer is full.
50
+ */
51
+ allocate(count: number): number;
52
+ /**
53
+ * Free `count` cells starting at `offset`. The first two bytes of each
54
+ * freed element are zeroed so the renderer can skip them.
55
+ */
56
+ free(offset: number, count: number): void;
57
+ /** Force the buffer to be re-uploaded on the next frame. */
58
+ triggerUpdate(): void;
59
+ /** `true` when every allocated cell has also been freed. */
60
+ isEmpty(): boolean;
61
+ /** `true` once the buffer was fully allocated *and* all cells were freed. */
62
+ isFullyFreed(): boolean;
63
+ /** Unique buffer identifier (index in {@link BufferList._buffersById}). */
64
+ getId(): number;
65
+ /** DataView over the main byte array (for reading / writing element data). */
66
+ getDataView(): DataView;
67
+ /** Raw byte array backing the main data. */
68
+ getByteArray(): Uint8Array;
69
+ /** Number of cells that have been allocated (including freed ones). */
70
+ getSize(): number;
71
+ /** How many side-elements are attached to each main element. */
72
+ getNbSideElementsPerMainElement(): number;
73
+ /** Whether this buffer uses side-element data at all. */
74
+ hasSideData(): boolean;
75
+ /** DataView over the side byte array. */
76
+ getSideDataView(): DataView;
77
+ /** Raw byte array backing the side data. */
78
+ getSideByteArray(): Uint8Array;
79
+ /** Total byte size consumed by side-elements for one main element. */
80
+ getTotalSideElementsSize(): number;
81
+ }
82
+ /**
83
+ * Encode a buffer id, an element offset within that buffer, and a block size
84
+ * into a single 32-bit block address.
85
+ */
86
+ export declare function makeBlockAddress(bufferId: number, offset: number, size: number): number;
87
+ /**
88
+ * Round `value` up to the next multiple of `unit`.
89
+ * Returns 0 when `value` is 0.
90
+ */
91
+ export declare function roundTo(value: number, unit: number): number;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Manages a collection of {@link Buffer2} instances, organising them by
3
+ * depth, animation state, element type, side-element count, and stencil
4
+ * usage.
5
+ *
6
+ * Provides block-level allocation / freeing that transparently creates new
7
+ * GPU buffers when existing ones are full, and reclaims fully-freed buffers
8
+ * during the update pass.
9
+ */
10
+ import { Buffer2 } from './Buffer2';
11
+ import type { BlockInfo } from './types';
12
+ export declare class BufferList {
13
+ /** Monotonically increasing version; bumped on every `update()` */
14
+ version: number;
15
+ /** Shared mutable scratch object returned by `getBlockInfo` / `allocateBlock` */
16
+ private _blockInfo;
17
+ /**
18
+ * Sparse 5-dimensional array:
19
+ * `[depth][animated][elementType][sideEltBuckets][stencilUsage]` → Buffer2[]
20
+ */
21
+ private _buffersByDepth;
22
+ /** Flat list indexed by buffer id (may contain `undefined` holes) */
23
+ private _buffersById;
24
+ /** Buffers sorted by ascending depth (rebuilt on update) */
25
+ private _buffersByAscendingDepth;
26
+ /** Buffers sorted by descending depth (rebuilt on update) */
27
+ private _buffersByDescendingDepth;
28
+ /** Whether the sorted lists need rebuilding */
29
+ private _mustUpdate;
30
+ constructor();
31
+ /** Reset the list, releasing references to all buffers. */
32
+ reset(): void;
33
+ private _init_;
34
+ /**
35
+ * Populate the shared {@link _blockInfo} scratch object and return it.
36
+ */
37
+ private _fillBlockInfo;
38
+ /**
39
+ * Instantiate a new {@link Buffer2} with the given characteristics and
40
+ * register it in {@link _buffersById}.
41
+ */
42
+ private _createBuffer;
43
+ /**
44
+ * Decode a block address and return the corresponding
45
+ * `{ buffer, offset, size, address }`.
46
+ */
47
+ getBlockInfo(address: number): BlockInfo;
48
+ /**
49
+ * Allocate (or re-use) a contiguous block of `blockSize` cells.
50
+ *
51
+ * When `previousAddress` is non-zero the method first checks whether the
52
+ * existing allocation can be kept (same depth, type, animation, side-
53
+ * element count, and stencil). If not the old block is freed and a fresh
54
+ * one is obtained from a compatible buffer.
55
+ *
56
+ * @param previousAddress - Address of a previous allocation, or 0.
57
+ * @param elementType - Element type (ELT_GENERIC, ELT_TEXT, …).
58
+ * @param animated - Whether animation data is needed.
59
+ * @param depth - Draw-order depth.
60
+ * @param blockSize - Number of cells to allocate.
61
+ * @param nbSideElements - Number of side-elements per main element.
62
+ * @param stencilUsage - Stencil mode (STENCIL_IGNORE, …).
63
+ * @returns A {@link BlockInfo} describing the allocation.
64
+ */
65
+ allocateBlock(previousAddress: number, elementType: number, animated: boolean, depth: number, blockSize: number, nbSideElements: number, stencilUsage: number): BlockInfo;
66
+ /**
67
+ * Free the block at `address`. Returns 0 (a convenient "null address").
68
+ */
69
+ freeBlock(address: number): 0;
70
+ /**
71
+ * Walk the sparse depth structure, call `update()` on every buffer,
72
+ * reclaim fully-freed buffers, and rebuild the sorted lists.
73
+ */
74
+ private _sortBuffersByDepth;
75
+ /**
76
+ * If any allocation / free happened since the last call, rebuild sorted
77
+ * lists and bump the version counter.
78
+ */
79
+ update(): void;
80
+ /** All buffers indexed by id (may contain `undefined` holes). */
81
+ getBuffers(): Array<Buffer2 | undefined>;
82
+ /** Buffers ordered from lowest depth to highest. */
83
+ getBuffersByAscendingDepth(): Buffer2[];
84
+ /** Buffers ordered from highest depth to lowest. */
85
+ getBuffersByDescendingDepth(): Buffer2[];
86
+ }
@@ -0,0 +1,128 @@
1
+ /**
2
+ * CpuRenderer — CPU-based rendering base class for Canvas 2D and SVG.
3
+ *
4
+ * Extends {@link RendererBase} and implements the `_render()` / element
5
+ * display pipeline that iterates over the buffer list drawing nodes, edges,
6
+ * edge heads/tails, text, and patterns.
7
+ *
8
+ * Concrete subclasses (CanvasRenderer, SVGRenderer) override the low-level
9
+ * drawing primitives (_drawCircle, _drawPolygon, _fill, _stroke, etc.).
10
+ */
11
+ import { RendererBase } from './RendererBase';
12
+ import type { RendererBaseOptions } from './RendererBase';
13
+ import type { ShapeDefinition, ShapePoint } from './ShapeManager';
14
+ import type { ElementInfo, ObjectInfo, AnimationInfo } from './types';
15
+ interface Point {
16
+ x: number;
17
+ y: number;
18
+ }
19
+ interface ScaledPoint extends Point {
20
+ r: number;
21
+ }
22
+ /** Computed render-time info for a single element. */
23
+ interface RenderInfo {
24
+ shape: ShapeDefinition;
25
+ pieceId: number;
26
+ dashLength: number;
27
+ gapLength: number;
28
+ hasHead: boolean;
29
+ hasTail: boolean;
30
+ isBodyTriangle: boolean;
31
+ isSelfLoop: boolean;
32
+ patternScale: number;
33
+ offsetAngle: number;
34
+ isText: boolean;
35
+ adjustTextAngle: boolean;
36
+ isBadge: boolean;
37
+ bentEnable: boolean;
38
+ bentVertical: boolean;
39
+ opacity: number;
40
+ globalMinVisibleSize: number;
41
+ strokeMinVisibleSize: number;
42
+ patternMinVisibleSize: number;
43
+ symbolicSize: number;
44
+ curvature: number;
45
+ pattern: any;
46
+ fillColor: string | null;
47
+ strokeColor: string | null;
48
+ patternColor: string | null;
49
+ textColor?: string | null;
50
+ pos1OnGraph: Point;
51
+ pos2OnGraph: Point;
52
+ pos1: Point;
53
+ pos2: Point;
54
+ rectWidthOrSourceRadius: number;
55
+ rectHeightOrTargetRadius: number;
56
+ thicknessOrFontSize: number;
57
+ strokeWidth: number;
58
+ offset: number;
59
+ }
60
+ export declare function applyAlpha(color: string, alpha: number): string;
61
+ export declare class CpuRenderer extends RendererBase {
62
+ private _cachePoints;
63
+ private _nextCachePoint;
64
+ private _tmp;
65
+ private _ccp;
66
+ private _pointCopies;
67
+ protected _clipViewport: boolean;
68
+ constructor(options: RendererBaseOptions);
69
+ protected _resetCachePoints(): void;
70
+ protected _point(x: number, y: number): Point;
71
+ setViewportClipping(enabled: boolean): void;
72
+ protected _displayBuffer(buffer: any): void;
73
+ protected _mixAttributes(end: ObjectInfo, start: ObjectInfo, animation: AnimationInfo): ObjectInfo;
74
+ protected _computeRenderInfo(attrs: ObjectInfo): RenderInfo;
75
+ protected _applyBackgroundBlending(info: RenderInfo): void;
76
+ protected _pointArray(count: number): ScaledPoint[];
77
+ protected _scalePoints(info: RenderInfo, center: Point, halfWidth: number, halfHeight: number): ScaledPoint[];
78
+ protected _drawPoints(points: ScaledPoint[], closePath?: boolean): void;
79
+ protected _drawCircle(_center: Point, _radius: number): void;
80
+ protected _drawPolygon(_points: ScaledPoint[], _closePath?: boolean): void;
81
+ protected _fill(_color: string | null): void;
82
+ protected _stroke(_color: string | null, _width?: number, _dash?: number[]): void;
83
+ protected _startClip(): void;
84
+ protected _endClip(): void;
85
+ protected _startReverseClip(): void;
86
+ protected _endReverseClip(): void;
87
+ protected _drawStraightLine(_from: Point, _to: Point): void;
88
+ protected _drawQuadraticCurve(_from: Point, _control: Point, _to: Point): void;
89
+ protected _drawCubicCurve(_from: Point, _cp1: Point, _cp2: Point, _to: Point): void;
90
+ protected _drawRoundedRectangle(_center: Point, _halfWidth: number, _halfHeight: number, _angle: number, _fillColor: string | null): void;
91
+ protected _displayPieChart(_center: Point, _radius: number, _colors: string[]): void;
92
+ protected _displayText(_center: Point, _angle: number, _text: string, _color: string, _font: any, _fontSize: number, _style: any, _align: any, _maxWidth: number, _paddingLeft: number, _paddingTop: number, _isIcon: boolean, _stroke?: {
93
+ color: string;
94
+ width: number;
95
+ }): void;
96
+ protected _displayImage(_center: Point, _width: number, _height: number, _image: any, _scaled: boolean, _duplicated: boolean, _opacity: number): void;
97
+ protected _computeCenter(info: RenderInfo): Point;
98
+ protected _displayTextBox(info: RenderInfo, hasFill: boolean, _hasStroke: boolean, hasPattern: boolean): void;
99
+ protected _displayNodeComponent(info: RenderInfo, hasFill: boolean, hasStroke: boolean, hasPattern: boolean): void;
100
+ protected _displayElement(element: ElementInfo, animated: boolean): void;
101
+ protected _makeTriangleEdgeBody(from: Point, cp1: Point | null, cp2: Point | null, to: Point, startDist: number, endDist: number, startWidth: number, endWidth: number, totalLength: number): ScaledPoint[];
102
+ protected _makeCurveTriangleEdge(from: Point, cp: Point, to: Point, startDist: number, endDist: number, startWidth: number, endWidth: number): ScaledPoint[];
103
+ protected _makeSelfLoopTriangleEdge(from: Point, cp1: Point, cp2: Point, to: Point, startDist: number, endDist: number, startWidth: number, endWidth: number, totalLength: number): ScaledPoint[];
104
+ protected _makeStraightTriangleEdge(from: Point, to: Point, startDist: number, endDist: number, startWidth: number, endWidth: number): ScaledPoint[];
105
+ protected _makeEdgeExtremityPoints(tip: Point, tangent: Point, size: number, shapePoints: ShapePoint[]): ScaledPoint[];
106
+ protected _drawLine(from: Point, cp1: Point | null, cp2: Point | null, to: Point): void;
107
+ protected _getSelfLoopControlPoints(pos: Point, curvature: number, radius: number): {
108
+ x1: number;
109
+ y1: number;
110
+ x2: number;
111
+ y2: number;
112
+ };
113
+ protected _getQuadraticCurveControlPoint(info: RenderInfo): Point;
114
+ protected _graphToScreenCoordinates(pt: Point): Point;
115
+ protected _blendColor(color: string | null, opacity: number): string | null;
116
+ protected _getTangentOnLine(from: Point, cp1: Point | null, cp2: Point | null, to: Point, t: number): Point;
117
+ protected _getTangentOnStraightLine(from: Point, to: Point): Point;
118
+ protected _getTangentOnQuadraticCurve(from: Point, cp: Point, to: Point, t: number): Point;
119
+ protected _getTangentOnCubicCurve(from: Point, cp1: Point, cp2: Point, to: Point, t: number): Point;
120
+ protected _mixPoints(from: Point, to: Point, t: number): Point;
121
+ protected _getOrthogonal(dir: Point): Point;
122
+ protected _getPointOnLine(from: Point, cp1: Point | null, cp2: Point | null, to: Point, t: number): Point;
123
+ protected _getPointOnQuadraticCurve(from: Point, cp: Point, to: Point, t: number): Point;
124
+ protected _getPointOnCubicCurve(from: Point, cp1: Point, cp2: Point, to: Point, t: number): Point;
125
+ protected _getTFromLengthOnCubicCurve(from: Point, cp1: Point, cp2: Point, to: Point, targetLength: number, forward?: boolean): number;
126
+ protected _getTFromLengthOnQuadraticCurve(from: Point, cp: Point, to: Point, targetLength: number): number;
127
+ }
128
+ export {};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Manages named easing functions represented as polynomial coefficients.
3
+ *
4
+ * Each easing is stored as an array of 8 numbers — two sets of 4 polynomial
5
+ * coefficients (one for each half of an in-out easing). A simple easing that
6
+ * uses only 4 coefficients is expanded by duplicating the first 4 into
7
+ * positions [4..7].
8
+ */
9
+ /**
10
+ * Built-in easing functions expressed as polynomial coefficients.
11
+ * Each value is an array of 4 (single-phase) or 8 (dual-phase) numbers.
12
+ */
13
+ export declare const DEFAULT_EASING_FUNCTIONS: Record<string, number[]>;
14
+ export declare class EasingManager {
15
+ /** Fallback linear coefficients (8 values: two identical halves) */
16
+ private _linearEasing;
17
+ /** name → 8-element coefficient array */
18
+ private _nameToPolygon;
19
+ /** hash → easing name */
20
+ private _polygonToName;
21
+ constructor();
22
+ /**
23
+ * Register one or more named easing functions.
24
+ *
25
+ * @param easings - Map of `name → coefficient-array` (4 or 8 values).
26
+ */
27
+ add(easings: Record<string, number[]>): void;
28
+ /**
29
+ * Look up the 8 polynomial coefficients for a named easing.
30
+ * Returns the linear easing if the name is not registered.
31
+ */
32
+ getCoefficients(name: string): number[];
33
+ /**
34
+ * Reverse-lookup: given 8 polynomial coefficients find the registered name.
35
+ * Falls back to `"linear"` when no match is found.
36
+ */
37
+ getName(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number): string;
38
+ }
39
+ /** Global singleton easing manager pre-loaded with default curves. */
40
+ export declare const easingManager: EasingManager;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * EdgeDrawer — responsible for drawing edges (body, halo, outline, text,
3
+ * badges) into GPU buffer groups.
4
+ *
5
+ * Each edge is decomposed into a set of pieces (body, halo, outline, text,
6
+ * text background and badges) that are written into per-layer GPU groups,
7
+ * with optional animation between previous and current attribute states.
8
+ */
9
+ declare class EdgeDrawer {
10
+ private _fullComponents;
11
+ private _startComponents;
12
+ private _endComponents;
13
+ private _startFlags;
14
+ private _endFlags;
15
+ private _startInput;
16
+ private _endInput;
17
+ private _depthInfo;
18
+ private _nullElt;
19
+ private _engine;
20
+ private _view;
21
+ private _helper;
22
+ private _attributes;
23
+ private _attributesPrev;
24
+ private _nodeAttributes;
25
+ private _nodeAttributesPrev;
26
+ private _layers;
27
+ private _blockIds;
28
+ private _extremitiesAttributes;
29
+ constructor({ engine, imageManager, fontManager, formatText, view, attributes, attributesPrev, nodeAttributes, nodeAttributesPrev, }: {
30
+ engine: any;
31
+ imageManager: any;
32
+ fontManager: any;
33
+ formatText: any;
34
+ view: any;
35
+ attributes: any;
36
+ attributesPrev: any;
37
+ nodeAttributes: any;
38
+ nodeAttributesPrev: any;
39
+ });
40
+ drawEdge(index: number): void;
41
+ private _setupHaloMasking;
42
+ private _computeBlockIds;
43
+ private _prepareBlocks;
44
+ private _storeBlocks;
45
+ private _freeBlocks;
46
+ private _setBlocksAnimation;
47
+ private _initComponents;
48
+ private _initEdgeComponents;
49
+ private _initBadgeComponents;
50
+ private _initTextComponents;
51
+ private _nextElement;
52
+ }
53
+ export { EdgeDrawer };
54
+ export default EdgeDrawer;