@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,105 @@
1
+ /**
2
+ * NodeList: a collection of nodes backed by a Uint32Array of internal indexes.
3
+ * The list holds only indexes; node objects are resolved lazily against the
4
+ * owning Nodus instance, and collection, topology, and style operations are
5
+ * delegated to the relevant Nodus modules.
6
+ */
7
+ import { Node } from './Node';
8
+ export declare class NodeList<ND = any, ED = any> {
9
+ readonly isList = true;
10
+ readonly isNode = true;
11
+ _indexes: Uint32Array;
12
+ private _nodus;
13
+ constructor(indexes: Uint32Array, nodus: any);
14
+ get size(): number;
15
+ setAttributes(attrs: any, opts?: any): Promise<void>;
16
+ setAttribute(name: string, value: any, opts?: any): Promise<void>;
17
+ getAttributes(names?: any): any[];
18
+ getAttribute(name: string): any[];
19
+ resetAttributes(names?: any, opts?: any): Promise<void>;
20
+ replaceOriginalAttributes(attrs: any, opts?: any): Promise<void>;
21
+ getPreviousAttributes(names?: any): any[];
22
+ getPreviousAttribute(name: string): any[];
23
+ getPosition(): {
24
+ x: number;
25
+ y: number;
26
+ }[];
27
+ setPosition(positions: {
28
+ x: number;
29
+ y: number;
30
+ }[], opts?: any): Promise<void>;
31
+ getPositionOnScreen(): {
32
+ x: number;
33
+ y: number;
34
+ }[];
35
+ getAdjacentNodes(opts?: any): any;
36
+ getAdjacentEdges(opts?: any): any;
37
+ getAdjacentElements(opts?: any): {
38
+ nodes: any;
39
+ edges: any;
40
+ };
41
+ getDegree(opts?: any): number[];
42
+ getConnectedComponents(opts?: any): any[];
43
+ fastGetAdjacentElements(): {
44
+ nodes: any;
45
+ edges: any;
46
+ };
47
+ isVisible(): boolean[];
48
+ isExcluded(): boolean[];
49
+ isVirtual(): boolean[];
50
+ setExcluded(value: boolean): void;
51
+ setVisible(value: boolean): void;
52
+ toList(): this;
53
+ toArray(): Node<ND, ED>[];
54
+ clone(): NodeList<ND, ED>;
55
+ getId(): (string | number)[];
56
+ get(index: number): Node<ND, ED>;
57
+ forEach(fn: (node: Node<ND, ED>, i: number, list: this) => void): void;
58
+ find(fn: (node: Node<ND, ED>, i: number, list: this) => boolean): Node<ND, ED> | undefined;
59
+ some(fn: (node: Node<ND, ED>, i: number, list: this) => boolean): boolean;
60
+ every(fn: (node: Node<ND, ED>, i: number, list: this) => boolean): boolean;
61
+ map<T>(fn: (node: Node<ND, ED>, i: number, list: this) => T): T[];
62
+ filter(fn: (node: Node<ND, ED>, i: number, list: this) => boolean): NodeList<ND, ED>;
63
+ reduce<T>(fn: (acc: T, node: Node<ND, ED>, i: number, list: this) => T, init: T): T;
64
+ concat(other: NodeList<ND, ED> | null): NodeList<ND, ED>;
65
+ dedupe(): NodeList<ND, ED>;
66
+ subtract(other: NodeList<ND, ED>): NodeList<ND, ED>;
67
+ slice(start?: number, end?: number): NodeList<ND, ED>;
68
+ indexOf(node: Node<ND, ED>): number;
69
+ includes(node: Node<ND, ED>): boolean;
70
+ inverse(): NodeList<ND, ED>;
71
+ sort(compareFn: (a: Node<ND, ED>, b: Node<ND, ED>) => number): NodeList<ND, ED>;
72
+ [Symbol.iterator](): Iterator<Node<ND, ED>>;
73
+ toJSON(opts?: any): any[];
74
+ setSelected(value: boolean): void;
75
+ isSelected(): boolean[];
76
+ setDisabled(value: boolean): void;
77
+ isDisabled(): boolean[];
78
+ setData(pathOrData: any, value?: any): this;
79
+ fillData(pathOrValue: any, value?: any): this;
80
+ getData(path?: any): any[];
81
+ addClass(className: string, opts?: any): Promise<void>;
82
+ addClasses(classNames: string[], opts?: any): Promise<void>;
83
+ removeClass(className: string, opts?: any): Promise<void>;
84
+ removeClasses(classNames: string[], opts?: any): Promise<void>;
85
+ hasClass(className: string): boolean[];
86
+ getClassList(): string[][];
87
+ locate(opts?: any): Promise<void>;
88
+ getBoundingBox(opts?: {
89
+ includeTexts?: boolean;
90
+ }): any;
91
+ getGeoCoordinates(): {
92
+ latitude?: number;
93
+ longitude?: number;
94
+ }[];
95
+ setGeoCoordinates(coords: any[]): Promise<void>;
96
+ getMetaNode(): any[];
97
+ getSubNodes(): any[];
98
+ group(opts?: any): any;
99
+ ungroup(opts?: any): any;
100
+ getAnimationInformation(): any[];
101
+ pulse(opts?: any): Promise<void>;
102
+ getStyle(name?: string): any[];
103
+ setStyle(attrs: any, opts?: any): Promise<void>;
104
+ resetStyle(opts?: any): Promise<void>;
105
+ }
@@ -0,0 +1,108 @@
1
+ import { Nodus } from '../Nodus';
2
+ /**
3
+ * Transformation type identifiers matching the d.ts TransformationType enum.
4
+ */
5
+ export declare enum TransformationType {
6
+ NodeFilter = "node-filter",
7
+ EdgeFilter = "edge-filter",
8
+ NodeCollapsing = "node-collapsing",
9
+ VirtualProperties = "virtual-properties",
10
+ NeighborGeneration = "neighbor-generation",
11
+ NeighborMerging = "neighbor-merging",
12
+ NodeGrouping = "node-grouping",
13
+ EdgeGrouping = "edge-grouping",
14
+ NodeClustering = "node-clustering",
15
+ GeoClustering = "geo-clustering",
16
+ Unknown = "unknown"
17
+ }
18
+ export interface BaseOptions {
19
+ enabled?: boolean;
20
+ animate?: boolean;
21
+ }
22
+ export interface TransformationOptions<ND, ED> extends BaseOptions {
23
+ id: number;
24
+ nodus: Nodus<ND, ED>;
25
+ module: TransformationModule<ND, ED>;
26
+ }
27
+ export interface TransformationContext {
28
+ }
29
+ export interface AttributeAnimationOptions {
30
+ duration?: number;
31
+ easing?: string;
32
+ }
33
+ /**
34
+ * Minimal interface so the Transformation class can call into the
35
+ * Transformations module without circular import of the full class.
36
+ */
37
+ export interface TransformationModule<ND, ED> {
38
+ list: TransformationListLike<ND, ED>;
39
+ animations?: any;
40
+ refresh(): void;
41
+ invalidate(): void;
42
+ afterNextUpdate(): Promise<unknown>;
43
+ setAnimation(animation: AttributeAnimationOptions): any;
44
+ getAnimation(): AttributeAnimationOptions;
45
+ }
46
+ export interface TransformationListLike<ND, ED> {
47
+ addTransformation(t: Transformation<ND, ED, any>, enabled?: boolean): void;
48
+ removeTransformation(t: Transformation<ND, ED, any>): void;
49
+ getIndex(t: Transformation<ND, ED, any>): number;
50
+ setIndex(t: Transformation<ND, ED, any>, index: number): Promise<unknown>;
51
+ enable(t: Transformation<ND, ED, any>): Promise<unknown>;
52
+ disable(t: Transformation<ND, ED, any>): Promise<unknown>;
53
+ remove(t: Transformation<ND, ED, any>): Promise<unknown>;
54
+ isEnabled(t: Transformation<ND, ED, any>): boolean;
55
+ setOptions(t: Transformation<ND, ED, any>): void;
56
+ refreshTransformation(t: Transformation<ND, ED, any>): void;
57
+ getRefreshPromise(): Promise<unknown>;
58
+ chainRefreshPromise(p: Promise<unknown | void>): void;
59
+ afterNextUpdate(): Promise<unknown>;
60
+ getTransformations(): Transformation<ND, ED, any>[];
61
+ getList(): Transformation<ND, ED, any>[];
62
+ getById(id: number): Transformation<ND, ED, any> | undefined;
63
+ clear(): void;
64
+ destroy(): void;
65
+ }
66
+ /**
67
+ * Base class for all graph transformations. Mirrors the full public API
68
+ * declared in nodus.d.ts for `Transformation<ND, ED, C>`.
69
+ */
70
+ export declare abstract class Transformation<ND = any, ED = any, C = TransformationContext> {
71
+ protected id: number;
72
+ protected destroyed: boolean;
73
+ protected module: TransformationModule<ND, ED>;
74
+ protected nodus: Nodus<ND, ED>;
75
+ protected context: C;
76
+ protected shouldAnimate: boolean;
77
+ private _whenAppliedResolve;
78
+ private _whenAppliedPromise;
79
+ private _applied;
80
+ constructor({ id, animate, nodus, module }: TransformationOptions<ND, ED>);
81
+ abstract run(): Promise<unknown>;
82
+ abstract undo(animates?: boolean): Promise<unknown>;
83
+ abstract onRemove(indexes: Set<number>, isNode: boolean): void;
84
+ abstract getName(): TransformationType;
85
+ /**
86
+ * Called by the transformation pipeline after run() resolves.
87
+ * Allows whenApplied() callers to be notified.
88
+ */
89
+ markApplied(): void;
90
+ setOptions(options: Partial<BaseOptions>): Promise<unknown>;
91
+ enable(animate?: boolean): Promise<unknown>;
92
+ disable(animate?: boolean): Promise<unknown>;
93
+ isEnabled(): boolean;
94
+ getId(): number;
95
+ whenApplied(): Promise<this>;
96
+ toggle(animate?: boolean): Promise<unknown>;
97
+ cleanup(): Promise<void>;
98
+ refresh(): Promise<unknown>;
99
+ getIndex(): number;
100
+ setIndex(index: number): Promise<unknown>;
101
+ animates(): boolean;
102
+ setAnimate(animate: boolean): this;
103
+ getAnimation(): AttributeAnimationOptions;
104
+ getContext(): C;
105
+ setContent(context: C): void;
106
+ resetContext(): void;
107
+ destroy(): Promise<unknown>;
108
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Movement types used by the mouse/captor modules.
3
+ */
4
+ export declare enum MovementType {
5
+ ZOOM = "zoom",
6
+ ROTATE = "rotate",
7
+ PAN = "pan"
8
+ }
9
+ /**
10
+ * Mouse button identifiers.
11
+ */
12
+ export declare enum Buttons {
13
+ LEFT = "left",
14
+ MIDDLE = "middle",
15
+ RIGHT = "right"
16
+ }
@@ -0,0 +1,41 @@
1
+ import type { Point, ScalingMethod } from './types';
2
+ export interface BoundingBoxOptions {
3
+ xValues?: number[];
4
+ yValues?: number[];
5
+ scaledSizeValues?: number[];
6
+ fixedSizeValues?: number[];
7
+ }
8
+ export declare class BoundingBox {
9
+ minX: number;
10
+ minY: number;
11
+ maxX: number;
12
+ maxY: number;
13
+ minScaledSize: number;
14
+ maxScaledSize: number;
15
+ minFixedSize: number;
16
+ maxFixedSize: number;
17
+ cx: number;
18
+ cy: number;
19
+ width: number;
20
+ height: number;
21
+ constructor(options?: BoundingBoxOptions);
22
+ reset(): this;
23
+ addPoint(x: number, y: number, size?: number, scalingMethod?: ScalingMethod): this;
24
+ computeForZoom(zoom: number): BoundingBox;
25
+ static from({ minX, minY, maxX, maxY, width, height, }?: {
26
+ minX?: number;
27
+ minY?: number;
28
+ maxX?: number;
29
+ maxY?: number;
30
+ width?: number;
31
+ height?: number;
32
+ }): BoundingBox;
33
+ static fromValues(xValues: number[], yValues: number[], sizeValues: number[]): BoundingBox;
34
+ pad(value: number): this;
35
+ isValid(): boolean;
36
+ extend(bbox: BoundingBox | [number, number, number, number]): this;
37
+ bottomLeft(): Point;
38
+ topRight(): Point;
39
+ center(): Point;
40
+ clone(): BoundingBox;
41
+ }
@@ -0,0 +1,276 @@
1
+ export type { Point, Circle, AABB, OBB, SimpleBoundingBox, CubicControlPoint, ScalingMethod, } from './types';
2
+ export { BoundingBox } from './BoundingBox';
3
+ import type { Point, Circle, AABB, SimpleBoundingBox, CubicControlPoint } from './types';
4
+ import type { Edge } from '../core/Edge';
5
+ export declare const defaultAABB: AABB;
6
+ /**
7
+ * Rotate a point (px, py) around a rotation center (cx, cy).
8
+ * @param px Point x
9
+ * @param py Point y
10
+ * @param cx Center x
11
+ * @param cy Center y
12
+ * @param angle Angle of the rotation (in radians)
13
+ * @param dest If specified, modifies this object instead of allocating a new one
14
+ */
15
+ export declare function rotate(px: number, py: number, cx: number, cy: number, angle: number, dest?: Point): Point;
16
+ /**
17
+ * Move a point by a distance and angle.
18
+ */
19
+ export declare function move(point: Point, angle: number, dist?: number, dest?: Point): Point;
20
+ /**
21
+ * Compute the distance between two points.
22
+ */
23
+ export declare const distance: (x1: number, y1: number, x2: number, y2: number) => number;
24
+ /**
25
+ * Squared distance between two points.
26
+ */
27
+ export declare function squaredDistance(x1: number, y1: number, x2: number, y2: number): number;
28
+ /**
29
+ * Normalize a vector in-place.
30
+ */
31
+ export declare function normalize(v: Point): Point;
32
+ /**
33
+ * Convert radians to degrees.
34
+ */
35
+ export declare function radiansToDegrees(radians: number): number;
36
+ /**
37
+ * Convert degrees to radians.
38
+ */
39
+ export declare function degreesToRadians(degrees: number): number;
40
+ /**
41
+ * Extend bounds by a padding value (mutates the input).
42
+ */
43
+ export declare function extendBounds(bounds: SimpleBoundingBox, padding: number): SimpleBoundingBox;
44
+ /**
45
+ * Compute the minimum enclosing disk of a set of weighted points.
46
+ * @param X Array of x coordinates
47
+ * @param Y Array of y coordinates
48
+ * @param R Optional array of radii
49
+ * @param inputIndexes Optional subset of indexes to consider
50
+ * @returns Circle as [cx, cy, radius]
51
+ */
52
+ export declare function minDisk(X: Float32Array | number[], Y: Float32Array | number[], R?: Float32Array | number[], inputIndexes?: ArrayLike<number>): Circle;
53
+ /**
54
+ * Intersection points of two circles.
55
+ * Returns null if circles don't intersect.
56
+ */
57
+ export declare function circleCircleIntersection(x1: number, y1: number, r1: number, x2: number, y2: number, r2: number): [[number, number], [number, number]] | null;
58
+ /**
59
+ * Compare two points relative to a center for angular sorting.
60
+ */
61
+ export declare function circleSortCompare(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): number;
62
+ /**
63
+ * Check if a circle [cx, cy, r] contains the point (px, py).
64
+ */
65
+ export declare function circleContainsPoint(circle: Circle, px: number, py: number): boolean;
66
+ /**
67
+ * Check if circle e contains circle centered at (cx, cy) with radius r.
68
+ */
69
+ export declare function circleContainsCircle(e: Circle, cx: number, cy: number, r: number): boolean;
70
+ /**
71
+ * Check if a circle intersects an AABB.
72
+ */
73
+ export declare function circleIntersectsBox(cx: number, cy: number, r: number, minX: number, minY: number, maxX: number, maxY: number): boolean;
74
+ /**
75
+ * Find the closest intersection point of a line and a circle.
76
+ */
77
+ export declare function circleLineIntersection(x1: number, y1: number, x2: number, y2: number, cx: number, cy: number, r: number, dest?: Point): Point | null;
78
+ /**
79
+ * Checks if a point (px, py) is inside a line ((x1, y1), (x2, y2)).
80
+ */
81
+ export declare function isPointInLine(px: number, py: number, x1: number, y1: number, x2: number, y2: number, width: number, margin?: number, isTriangle?: boolean): boolean;
82
+ /**
83
+ * Indicates if two segments intersect.
84
+ */
85
+ export declare function twoSegmentsIntersect(p1: Point, p2: Point, p3: Point, p4: Point, excludeBoundaries?: boolean): boolean;
86
+ /**
87
+ * Compute the angle formed by the line joining two points.
88
+ */
89
+ export declare function lineAngle(x1: number, y1: number, x2: number, y2: number): number;
90
+ /**
91
+ * Compute the angle between three points at the vertex p2.
92
+ */
93
+ export declare function angle(p1: Point, p2: Point, p3: Point): number;
94
+ /**
95
+ * Intersection between two lines (unbounded).
96
+ */
97
+ export declare function lineIntersection(ax0: number, ay0: number, ax1: number, ay1: number, bx0: number, by0: number, bx1: number, by1: number): Point | null;
98
+ /**
99
+ * Intersection between two segments.
100
+ */
101
+ export declare function segmentIntersection(ax0: number, ay0: number, ax1: number, ay1: number, bx0: number, by0: number, bx1: number, by1: number): Point | null;
102
+ /**
103
+ * Intersection points between a segment and a rectangle.
104
+ */
105
+ export declare function segmentRectangleIntersection(ax: number, ay: number, bx: number, by: number, minX: number, minY: number, maxX: number, maxY: number): Point[];
106
+ /**
107
+ * Whether two line segments intersect (boolean).
108
+ */
109
+ export declare function lineLine(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): boolean;
110
+ /**
111
+ * Fast line - AABB intersection test.
112
+ */
113
+ export declare function lineAABB(x1: number, y1: number, x2: number, y2: number, rx1: number, ry1: number, rx2: number, ry2: number): boolean;
114
+ /**
115
+ * Distance from a point to a segment (using Point objects).
116
+ */
117
+ export declare function distancePointSegment(p: Point, v: Point, w: Point): number;
118
+ /**
119
+ * Squared distance from a point to a segment.
120
+ */
121
+ export declare function distToSegmentSquared(px: number, py: number, vx: number, vy: number, wx: number, wy: number): number;
122
+ /**
123
+ * Get the closest point on a segment from a point.
124
+ */
125
+ export declare function getClosestPointOnSegment(px: number, py: number, ax: number, ay: number, bx: number, by: number): Point;
126
+ /**
127
+ * Get the closest point on a line from a point.
128
+ */
129
+ export declare function getClosestPointOnLine(px: number, py: number, ax: number, ay: number, bx: number, by: number): Point;
130
+ /**
131
+ * Check if a point is inside a polygon.
132
+ */
133
+ export declare function isPointInPolygon(px: number, py: number, points: Point[]): boolean;
134
+ /**
135
+ * Test if two convex polygons intersect using SAT.
136
+ */
137
+ export declare function polygonsIntersect(v1: Point[], v2: Point[]): boolean;
138
+ /**
139
+ * Returns the average (centroid) of the specified points.
140
+ */
141
+ export declare function computeCentroid(points: Point[]): Point;
142
+ /**
143
+ * Convex hull via Andrew's monotone-chain algorithm. Returns hull
144
+ * vertices in counter-clockwise order, no duplicate of the first point
145
+ * at the end. O(n log n).
146
+ *
147
+ * Used by the hypergraph polygon renderer to draw a convex hull around
148
+ * each hyperedge's incident-vertex positions.
149
+ */
150
+ export declare function monotoneChain(points: Point[]): Point[];
151
+ /**
152
+ * Sort points in counter-clockwise order around their centroid. Useful
153
+ * for re-ordering hyperedge corner positions before polygon evaluation.
154
+ */
155
+ export declare function sortPointsCCW(points: Point[]): Point[];
156
+ /**
157
+ * Signed area of a (possibly non-convex) polygon via the shoelace
158
+ * formula. Positive for CCW orientation, negative for CW.
159
+ */
160
+ export declare function polygonSignedArea(points: Point[]): number;
161
+ /**
162
+ * Quadratic equation interpolation: (1-t)^2*a + 2(1-t)*t*b + t^2*c.
163
+ */
164
+ export declare function quadraticEquation(a: number, b: number, c: number, t: number): number;
165
+ /**
166
+ * Cubic Bézier interpolation: (1-t)^3*a + 3(1-t)^2*t*b + 3(1-t)*t^2*c + t^3*d.
167
+ */
168
+ export declare function cubicEquation(a: number, b: number, c: number, d: number, t: number): number;
169
+ /**
170
+ * Compute control points for a self-loop curved edge.
171
+ */
172
+ export declare function getSelfLoopControlPoints(x: number, y: number, curvature: number, sourceRadius: number, viewAngle: number, dest?: CubicControlPoint): CubicControlPoint;
173
+ /**
174
+ * Compute control points of a bent edge (cubic bezier).
175
+ */
176
+ export declare function getBentEdgesControlPoints(x1: number, y1: number, x2: number, y2: number, curvature: number, bentEnable: boolean, bentVertical: boolean, dest?: CubicControlPoint): CubicControlPoint;
177
+ /**
178
+ * Returns the control point used to draw a curved edge (quadratic bezier).
179
+ */
180
+ export declare function getQuadraticCurveControlPoint(x1: number, y1: number, x2: number, y2: number, curvature: number, dest?: Point): Point;
181
+ /**
182
+ * Compute the point at parameter t on a quadratic bezier curve.
183
+ */
184
+ export declare function getPointOnQuadraticCurve(t: number, x1: number, y1: number, x2: number, y2: number, xi: number, yi: number, dest?: Point): Point;
185
+ /**
186
+ * Compute the tangent at parameter t on a quadratic bezier curve.
187
+ */
188
+ export declare function getTangentOnQuadraticCurve(t: number, x1: number, y1: number, x2: number, y2: number, xi: number, yi: number, dest?: Point): Point;
189
+ /**
190
+ * Compute the normal at parameter t on a quadratic bezier curve.
191
+ */
192
+ export declare function getNormalOnQuadraticCurve(t: number, x1: number, y1: number, x2: number, y2: number, xi: number, yi: number, dest?: Point): Point;
193
+ /**
194
+ * Check if a point is on a quadratic bezier curve segment with a thickness.
195
+ */
196
+ export declare function isPointOnQuadraticCurve(px: number, py: number, x1: number, y1: number, x2: number, y2: number, xi: number, yi: number, width: number, margin?: number, isTriangle?: boolean): boolean;
197
+ /**
198
+ * Compute the point at parameter t on a cubic bezier curve.
199
+ */
200
+ export declare function getPointOnBezierCurve(t: number, x1: number, y1: number, x2: number, y2: number, cx: number, cy: number, dx: number, dy: number, dest?: Point): Point;
201
+ /**
202
+ * Check if a point is on a cubic bezier curve segment with a thickness.
203
+ */
204
+ export declare function isPointOnBezierCurve(px: number, py: number, x1: number, y1: number, x2: number, y2: number, cx: number, cy: number, dx: number, dy: number, width: number, margin: number): boolean;
205
+ /**
206
+ * Compute the analytical length of a quadratic bezier curve.
207
+ */
208
+ export declare function getQuadraticBezierCurveLength(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number): number;
209
+ /**
210
+ * Test if a quadratic bezier curve intersects an AABB.
211
+ * If intersections array is provided, collects intersection points.
212
+ */
213
+ export declare function quadBezierAABB(bx0: number, by0: number, bx1: number, by1: number, bx2: number, by2: number, rx0: number, ry0: number, rx1: number, ry1: number, intersections?: number[]): number;
214
+ /**
215
+ * Test if a cubic bezier curve intersects an AABB.
216
+ * If intersections array is provided, collects intersection points.
217
+ */
218
+ export declare function cubicBezierAABB(bx0: number, by0: number, bx1: number, by1: number, bx2: number, by2: number, bx3: number, by3: number, rx0: number, ry0: number, rx1: number, ry1: number, intersections?: number[]): number;
219
+ /**
220
+ * Compute the bounding box of a quadratic bezier curve.
221
+ */
222
+ export declare function getQuadraticCurveBoundingBox(x1: number, y1: number, cpx: number, cpy: number, x2: number, y2: number, dest?: SimpleBoundingBox): SimpleBoundingBox;
223
+ /**
224
+ * Compute the bounding box of a cubic bezier curve.
225
+ */
226
+ export declare function getBezierCurveBoundingBox(x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, dest?: SimpleBoundingBox): SimpleBoundingBox;
227
+ /**
228
+ * Returns the point of the edge at parameter t.
229
+ * t=0 gives the source, t=1 gives the target.
230
+ */
231
+ export declare function getPointOnEdge(edge: Edge, t: number): Point;
232
+ /**
233
+ * Returns the normal vector of the edge at parameter t.
234
+ */
235
+ export declare function getNormalOnEdge(edge: Edge, t: number): Point;
236
+ /**
237
+ * Returns the tangent vector of the edge at parameter t.
238
+ */
239
+ export declare function getTangentOnEdge(edge: Edge, t: number): Point;
240
+ /**
241
+ * Get AABB for a rotated rectangle.
242
+ * @param x0 Left bottom X
243
+ * @param y0 Left bottom Y
244
+ * @param w Width
245
+ * @param h Height
246
+ * @param angle Rotation angle
247
+ * @param sin Pre-computed sine (optional)
248
+ * @param cos Pre-computed cosine (optional)
249
+ * @param dest Output array
250
+ */
251
+ export declare function getAABB(x0: number, y0: number, w: number, h: number, angle?: number, sin?: number, cos?: number, dest?: AABB): AABB;
252
+ /**
253
+ * Get corner points for a rotated rectangle (OBB).
254
+ */
255
+ export declare function getOBBPoints(x0: number, y0: number, w: number, h: number, angle?: number): [Point, Point, Point, Point];
256
+ /**
257
+ * Move an AABB by angle and distance.
258
+ */
259
+ export declare function moveAABB(aabb: AABB, angle?: number, dist?: number, dest?: AABB): AABB;
260
+ /**
261
+ * Pad bounds by a padding value (alias for extendBounds).
262
+ */
263
+ export declare function padBounds(bounds: SimpleBoundingBox, padding: number): SimpleBoundingBox;
264
+ /**
265
+ * Check if two AABBs overlap.
266
+ */
267
+ export declare function overlapsAABB(a: AABB, b: AABB): boolean;
268
+ /**
269
+ * Check if a point (or second AABB defined by its corners) intersects an AABB.
270
+ * Returns true if the first rectangle's corners are strictly inside the second.
271
+ */
272
+ export declare function intersects(ax1: number, ay1: number, ax2: number, ay2: number, bx1: number, by1: number, bx2: number, by2: number): boolean;
273
+ /**
274
+ * Check if two rectangles overlap.
275
+ */
276
+ export declare function overlaps(ax1: number, ay1: number, ax2: number, ay2: number, bx1: number, by1: number, bx2: number, by2: number): boolean;
@@ -0,0 +1,27 @@
1
+ export interface Point {
2
+ x: number;
3
+ y: number;
4
+ }
5
+ /** Circle represented as [x, y, radius] */
6
+ export type Circle = [number, number, number];
7
+ /** Axis-aligned bounding box: [minX, minY, maxX, maxY] */
8
+ export type AABB = [number, number, number, number];
9
+ /** Oriented bounding box: [x, y, w, h, angle] */
10
+ export type OBB = [number, number, number, number, number];
11
+ export interface SimpleBoundingBox {
12
+ minX: number;
13
+ minY: number;
14
+ maxX: number;
15
+ maxY: number;
16
+ width?: number;
17
+ height?: number;
18
+ cx?: number;
19
+ cy?: number;
20
+ }
21
+ export interface CubicControlPoint {
22
+ x1: number;
23
+ y1: number;
24
+ x2: number;
25
+ y2: number;
26
+ }
27
+ export type ScalingMethod = 'scaled' | 'fixed';
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Mutable hypergraph data structure.
3
+ *
4
+ * Hypergraph H = ⟨V, E⟩ — Berge/Bretto §3 of the paper. Each hyperedge holds
5
+ * a set of incident vertex ids; we maintain a reverse index `incidence`
6
+ * (vertex id → set of hyperedge ids) so neighborhood queries are O(1).
7
+ */
8
+ import type { HypergraphData, HypergraphHyperedge, HypergraphId, HypergraphVertex } from './types';
9
+ export declare class Hypergraph<VData = any, EData = any> {
10
+ private _vertices;
11
+ private _hyperedges;
12
+ /** Vertex id → set of hyperedge ids that contain it. */
13
+ private _incidence;
14
+ private _struct;
15
+ private _intern;
16
+ private _nextIntern;
17
+ private _internOf;
18
+ private _hs;
19
+ constructor(data?: HypergraphData<VData, EData>);
20
+ load(data: HypergraphData<VData, EData>): this;
21
+ toData(): HypergraphData<VData, EData>;
22
+ clone(): Hypergraph<VData, EData>;
23
+ vertexCount(): number;
24
+ hyperedgeCount(): number;
25
+ hasVertex(id: HypergraphId): boolean;
26
+ hasHyperedge(id: HypergraphId): boolean;
27
+ getVertex(id: HypergraphId): HypergraphVertex<VData> | undefined;
28
+ getHyperedge(id: HypergraphId): HypergraphHyperedge<EData> | undefined;
29
+ vertices(): IterableIterator<HypergraphVertex<VData>>;
30
+ hyperedges(): IterableIterator<HypergraphHyperedge<EData>>;
31
+ vertexIds(): IterableIterator<HypergraphId>;
32
+ hyperedgeIds(): IterableIterator<HypergraphId>;
33
+ addVertex(v: HypergraphVertex<VData>): this;
34
+ addHyperedge(e: HypergraphHyperedge<EData>): this;
35
+ removeVertex(id: HypergraphId): {
36
+ incidentHyperedges: HypergraphId[];
37
+ };
38
+ removeHyperedge(id: HypergraphId): {
39
+ incidentVertices: HypergraphId[];
40
+ };
41
+ /** Replaces hyperedge `eid`'s vertex list. */
42
+ setHyperedgeVertices(eid: HypergraphId, vertices: HypergraphId[]): void;
43
+ /** E_v = set of hyperedge ids incident to vertex v. Berge §3. */
44
+ incidentHyperedges(vid: HypergraphId): HypergraphId[];
45
+ /** V_e = vertex ids of hyperedge e. */
46
+ hyperedgeVertices(eid: HypergraphId): HypergraphId[];
47
+ /** Two vertices are adjacent if they share at least one hyperedge. */
48
+ vertexAdjacent(u: HypergraphId, v: HypergraphId): boolean;
49
+ /** Two hyperedges are adjacent if they share at least one vertex. */
50
+ hyperedgeAdjacent(e: HypergraphId, f: HypergraphId): boolean;
51
+ /** Bretto's vertex-pair adjacency: a_uv = |{e : u,v ∈ e}|. */
52
+ sharedHyperedges(u: HypergraphId, v: HypergraphId): HypergraphId[];
53
+ /** Hyperedge-pair adjacency: a_ef = |V_e ∩ V_f|. */
54
+ sharedVertices(e: HypergraphId, f: HypergraphId): HypergraphId[];
55
+ /** Adjacent vertices = those sharing at least one hyperedge with v. */
56
+ adjacentVertices(vid: HypergraphId): HypergraphId[];
57
+ /** Adjacent hyperedges = those sharing at least one vertex with e. */
58
+ adjacentHyperedges(eid: HypergraphId): HypergraphId[];
59
+ /** deg(v) = |E_v| (number of hyperedges containing v). */
60
+ degree(vid: HypergraphId): number;
61
+ /** card(e) = |V_e|. */
62
+ cardinality(eid: HypergraphId): number;
63
+ /** Hypergraph is linear iff every pair of hyperedges shares ≤1 vertex.
64
+ * O(E²·card) — runs on the Rust HyperStruct snapshot (byte-exact port; the
65
+ * deleted TS body is the frozen oracle in scripts/oracles/). */
66
+ isLinear(): boolean;
67
+ /** Connected iff König graph K(H) has a single component. Rust snapshot. */
68
+ isConnected(): boolean;
69
+ /** Connectivity check on the subgraph induced by deleting one element. Rust snapshot. */
70
+ isConnectedAfterRemoval(opts: {
71
+ vertex?: HypergraphId;
72
+ hyperedge?: HypergraphId;
73
+ }): boolean;
74
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * König graph K(H) of a hypergraph H = ⟨V, E⟩.
3
+ *
4
+ * Bipartite graph (X, Y, D) with X ↔ V (vertex side) and Y ↔ E
5
+ * (hyperedge side). Edge (x, y) ∈ D iff the corresponding vertex v
6
+ * is incident to the corresponding hyperedge e in H. Paper §3.
7
+ *
8
+ * The König graph drives betweenness centrality (Brandes' algorithm
9
+ * applied here gives both vertex and hyperedge betweenness in one pass).
10
+ */
11
+ import type { HypergraphId } from './types';
12
+ import type { Hypergraph } from './Hypergraph';
13
+ export interface KoenigGraph {
14
+ /** Total node count = |V| + |E|. */
15
+ n: number;
16
+ /** Vertex-side count, indices [0, vCount). */
17
+ vCount: number;
18
+ /** Hyperedge-side count, indices [vCount, n). */
19
+ eCount: number;
20
+ /** Index → original hypergraph id (vertices first, then hyperedges). */
21
+ idOf: HypergraphId[];
22
+ /** Original hypergraph id → König index. */
23
+ indexOf: Map<HypergraphId, number>;
24
+ /** Adjacency list: for König node i, list of neighbor indices. */
25
+ adj: number[][];
26
+ }
27
+ export declare function buildKoenigGraph<V, E>(H: Hypergraph<V, E>): KoenigGraph;
28
+ /** Returns true if König-index `i` belongs to a hyperedge (Y-side). */
29
+ export declare function isHyperedgeIndex(K: KoenigGraph, i: number): boolean;