@knowvah/dot-engine 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 (986) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +292 -0
  3. package/dist/api/builder.d.ts +78 -0
  4. package/dist/api/builder.d.ts.map +1 -0
  5. package/dist/api/edge-ops.d.ts +45 -0
  6. package/dist/api/edge-ops.d.ts.map +1 -0
  7. package/dist/api/geometry.d.ts +159 -0
  8. package/dist/api/geometry.d.ts.map +1 -0
  9. package/dist/api/index.d.ts +24 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api.js +719 -0
  12. package/dist/api.js.map +7 -0
  13. package/dist/bundle.js +101 -0
  14. package/dist/cdt/bag.d.ts +58 -0
  15. package/dist/cdt/bag.d.ts.map +1 -0
  16. package/dist/cdt/hash-core.d.ts +40 -0
  17. package/dist/cdt/hash-core.d.ts.map +1 -0
  18. package/dist/cdt/hash.d.ts +74 -0
  19. package/dist/cdt/hash.d.ts.map +1 -0
  20. package/dist/cdt/index.d.ts +16 -0
  21. package/dist/cdt/index.d.ts.map +1 -0
  22. package/dist/cdt/splay-core.d.ts +78 -0
  23. package/dist/cdt/splay-core.d.ts.map +1 -0
  24. package/dist/cdt/splay.d.ts +63 -0
  25. package/dist/cdt/splay.d.ts.map +1 -0
  26. package/dist/cdt/strhash.d.ts +26 -0
  27. package/dist/cdt/strhash.d.ts.map +1 -0
  28. package/dist/cdt/types.d.ts +11 -0
  29. package/dist/cdt/types.d.ts.map +1 -0
  30. package/dist/common/arith.d.ts +35 -0
  31. package/dist/common/arith.d.ts.map +1 -0
  32. package/dist/common/arm-pow-data.d.ts +17 -0
  33. package/dist/common/arm-pow-data.d.ts.map +1 -0
  34. package/dist/common/arm-pow.d.ts +12 -0
  35. package/dist/common/arm-pow.d.ts.map +1 -0
  36. package/dist/common/arrows-constants.d.ts +97 -0
  37. package/dist/common/arrows-constants.d.ts.map +1 -0
  38. package/dist/common/arrows-geometry.d.ts +24 -0
  39. package/dist/common/arrows-geometry.d.ts.map +1 -0
  40. package/dist/common/arrows-miter.d.ts +24 -0
  41. package/dist/common/arrows-miter.d.ts.map +1 -0
  42. package/dist/common/arrows-shapes-poly.d.ts +24 -0
  43. package/dist/common/arrows-shapes-poly.d.ts.map +1 -0
  44. package/dist/common/arrows-shapes-util.d.ts +77 -0
  45. package/dist/common/arrows-shapes-util.d.ts.map +1 -0
  46. package/dist/common/arrows-shapes.d.ts +48 -0
  47. package/dist/common/arrows-shapes.d.ts.map +1 -0
  48. package/dist/common/arrows-types.d.ts +59 -0
  49. package/dist/common/arrows-types.d.ts.map +1 -0
  50. package/dist/common/arrows.d.ts +69 -0
  51. package/dist/common/arrows.d.ts.map +1 -0
  52. package/dist/common/color.d.ts +66 -0
  53. package/dist/common/color.d.ts.map +1 -0
  54. package/dist/common/colorData.d.ts +10 -0
  55. package/dist/common/colorData.d.ts.map +1 -0
  56. package/dist/common/compass-port.d.ts +39 -0
  57. package/dist/common/compass-port.d.ts.map +1 -0
  58. package/dist/common/crand.d.ts +42 -0
  59. package/dist/common/crand.d.ts.map +1 -0
  60. package/dist/common/edge-label-init.d.ts +51 -0
  61. package/dist/common/edge-label-init.d.ts.map +1 -0
  62. package/dist/common/edge-offset.d.ts +66 -0
  63. package/dist/common/edge-offset.d.ts.map +1 -0
  64. package/dist/common/ellipse-wedge.d.ts +10 -0
  65. package/dist/common/ellipse-wedge.d.ts.map +1 -0
  66. package/dist/common/emit-types.d.ts +255 -0
  67. package/dist/common/emit-types.d.ts.map +1 -0
  68. package/dist/common/fma.d.ts +10 -0
  69. package/dist/common/fma.d.ts.map +1 -0
  70. package/dist/common/graph-init.d.ts +61 -0
  71. package/dist/common/graph-init.d.ts.map +1 -0
  72. package/dist/common/html-entities.d.ts +17 -0
  73. package/dist/common/html-entities.d.ts.map +1 -0
  74. package/dist/common/html-string.d.ts +14 -0
  75. package/dist/common/html-string.d.ts.map +1 -0
  76. package/dist/common/htmltable-emit-fill.d.ts +84 -0
  77. package/dist/common/htmltable-emit-fill.d.ts.map +1 -0
  78. package/dist/common/htmltable-emit-rules.d.ts +79 -0
  79. package/dist/common/htmltable-emit-rules.d.ts.map +1 -0
  80. package/dist/common/htmltable-emit.d.ts +63 -0
  81. package/dist/common/htmltable-emit.d.ts.map +1 -0
  82. package/dist/common/htmltable-lex.d.ts +16 -0
  83. package/dist/common/htmltable-lex.d.ts.map +1 -0
  84. package/dist/common/htmltable-parse.d.ts +37 -0
  85. package/dist/common/htmltable-parse.d.ts.map +1 -0
  86. package/dist/common/htmltable-port.d.ts +15 -0
  87. package/dist/common/htmltable-port.d.ts.map +1 -0
  88. package/dist/common/htmltable-pos-runs.d.ts +88 -0
  89. package/dist/common/htmltable-pos-runs.d.ts.map +1 -0
  90. package/dist/common/htmltable-pos.d.ts +192 -0
  91. package/dist/common/htmltable-pos.d.ts.map +1 -0
  92. package/dist/common/htmltable-types.d.ts +237 -0
  93. package/dist/common/htmltable-types.d.ts.map +1 -0
  94. package/dist/common/htmltable.d.ts +74 -0
  95. package/dist/common/htmltable.d.ts.map +1 -0
  96. package/dist/common/layers.d.ts +20 -0
  97. package/dist/common/layers.d.ts.map +1 -0
  98. package/dist/common/make-label.d.ts +60 -0
  99. package/dist/common/make-label.d.ts.map +1 -0
  100. package/dist/common/multicolor.d.ts +46 -0
  101. package/dist/common/multicolor.d.ts.map +1 -0
  102. package/dist/common/nodeinit.d.ts +45 -0
  103. package/dist/common/nodeinit.d.ts.map +1 -0
  104. package/dist/common/poly-gencode.d.ts +40 -0
  105. package/dist/common/poly-gencode.d.ts.map +1 -0
  106. package/dist/common/poly-init.d.ts +51 -0
  107. package/dist/common/poly-init.d.ts.map +1 -0
  108. package/dist/common/poly-inside.d.ts +37 -0
  109. package/dist/common/poly-inside.d.ts.map +1 -0
  110. package/dist/common/poly-shapes-cases.d.ts +31 -0
  111. package/dist/common/poly-shapes-cases.d.ts.map +1 -0
  112. package/dist/common/poly-shapes-cases2.d.ts +25 -0
  113. package/dist/common/poly-shapes-cases2.d.ts.map +1 -0
  114. package/dist/common/poly-shapes-util.d.ts +42 -0
  115. package/dist/common/poly-shapes-util.d.ts.map +1 -0
  116. package/dist/common/poly-shapes.d.ts +39 -0
  117. package/dist/common/poly-shapes.d.ts.map +1 -0
  118. package/dist/common/poly-sizing.d.ts +189 -0
  119. package/dist/common/poly-sizing.d.ts.map +1 -0
  120. package/dist/common/poly-vertices.d.ts +42 -0
  121. package/dist/common/poly-vertices.d.ts.map +1 -0
  122. package/dist/common/postproc.d.ts +49 -0
  123. package/dist/common/postproc.d.ts.map +1 -0
  124. package/dist/common/ps-fontalias.d.ts +36 -0
  125. package/dist/common/ps-fontalias.d.ts.map +1 -0
  126. package/dist/common/random.d.ts +8 -0
  127. package/dist/common/random.d.ts.map +1 -0
  128. package/dist/common/record-port.d.ts +34 -0
  129. package/dist/common/record-port.d.ts.map +1 -0
  130. package/dist/common/record.d.ts +105 -0
  131. package/dist/common/record.d.ts.map +1 -0
  132. package/dist/common/shapeData.d.ts +186 -0
  133. package/dist/common/shapeData.d.ts.map +1 -0
  134. package/dist/common/shapes.d.ts +36 -0
  135. package/dist/common/shapes.d.ts.map +1 -0
  136. package/dist/common/spline-midpoint.d.ts +31 -0
  137. package/dist/common/spline-midpoint.d.ts.map +1 -0
  138. package/dist/common/splines-clip.d.ts +21 -0
  139. package/dist/common/splines-clip.d.ts.map +1 -0
  140. package/dist/common/splines-constants.d.ts +42 -0
  141. package/dist/common/splines-constants.d.ts.map +1 -0
  142. package/dist/common/splines-geom.d.ts +51 -0
  143. package/dist/common/splines-geom.d.ts.map +1 -0
  144. package/dist/common/splines-path-begin.d.ts +17 -0
  145. package/dist/common/splines-path-begin.d.ts.map +1 -0
  146. package/dist/common/splines-path-end.d.ts +17 -0
  147. package/dist/common/splines-path-end.d.ts.map +1 -0
  148. package/dist/common/splines-path-shared.d.ts +53 -0
  149. package/dist/common/splines-path-shared.d.ts.map +1 -0
  150. package/dist/common/splines-routespl.d.ts +40 -0
  151. package/dist/common/splines-routespl.d.ts.map +1 -0
  152. package/dist/common/splines-selfedge.d.ts +21 -0
  153. package/dist/common/splines-selfedge.d.ts.map +1 -0
  154. package/dist/common/splines.d.ts +18 -0
  155. package/dist/common/splines.d.ts.map +1 -0
  156. package/dist/common/style-resolve.d.ts +197 -0
  157. package/dist/common/style-resolve.d.ts.map +1 -0
  158. package/dist/common/subst.d.ts +31 -0
  159. package/dist/common/subst.d.ts.map +1 -0
  160. package/dist/common/taper.d.ts +23 -0
  161. package/dist/common/taper.d.ts.map +1 -0
  162. package/dist/common/textmeasure-factory.d.ts +33 -0
  163. package/dist/common/textmeasure-factory.d.ts.map +1 -0
  164. package/dist/common/textmeasure-lookup.d.ts +17 -0
  165. package/dist/common/textmeasure-lookup.d.ts.map +1 -0
  166. package/dist/common/textmeasure-lut-data-a.d.ts +13 -0
  167. package/dist/common/textmeasure-lut-data-a.d.ts.map +1 -0
  168. package/dist/common/textmeasure-lut-data-b.d.ts +12 -0
  169. package/dist/common/textmeasure-lut-data-b.d.ts.map +1 -0
  170. package/dist/common/textmeasure-lut-data-c.d.ts +13 -0
  171. package/dist/common/textmeasure-lut-data-c.d.ts.map +1 -0
  172. package/dist/common/textmeasure-lut-data.d.ts +27 -0
  173. package/dist/common/textmeasure-lut-data.d.ts.map +1 -0
  174. package/dist/common/textmeasure.d.ts +120 -0
  175. package/dist/common/textmeasure.d.ts.map +1 -0
  176. package/dist/common/types.d.ts +316 -0
  177. package/dist/common/types.d.ts.map +1 -0
  178. package/dist/common/xlabels-place.d.ts +125 -0
  179. package/dist/common/xlabels-place.d.ts.map +1 -0
  180. package/dist/debug.d.ts +58 -0
  181. package/dist/debug.d.ts.map +1 -0
  182. package/dist/errors.d.ts +63 -0
  183. package/dist/errors.d.ts.map +1 -0
  184. package/dist/gvc/anchor.d.ts +86 -0
  185. package/dist/gvc/anchor.d.ts.map +1 -0
  186. package/dist/gvc/context.d.ts +177 -0
  187. package/dist/gvc/context.d.ts.map +1 -0
  188. package/dist/gvc/default-context.d.ts +20 -0
  189. package/dist/gvc/default-context.d.ts.map +1 -0
  190. package/dist/gvc/device-cluster.d.ts +25 -0
  191. package/dist/gvc/device-cluster.d.ts.map +1 -0
  192. package/dist/gvc/device.d.ts +99 -0
  193. package/dist/gvc/device.d.ts.map +1 -0
  194. package/dist/gvc/edge-labels.d.ts +10 -0
  195. package/dist/gvc/edge-labels.d.ts.map +1 -0
  196. package/dist/gvc/emit-walk.d.ts +22 -0
  197. package/dist/gvc/emit-walk.d.ts.map +1 -0
  198. package/dist/gvc/image-resolver.d.ts +44 -0
  199. package/dist/gvc/image-resolver.d.ts.map +1 -0
  200. package/dist/gvc/job.d.ts +234 -0
  201. package/dist/gvc/job.d.ts.map +1 -0
  202. package/dist/gvc/textlayout.d.ts +33 -0
  203. package/dist/gvc/textlayout.d.ts.map +1 -0
  204. package/dist/gvc/textspan-emit.d.ts +41 -0
  205. package/dist/gvc/textspan-emit.d.ts.map +1 -0
  206. package/dist/gvc/usershape.d.ts +25 -0
  207. package/dist/gvc/usershape.d.ts.map +1 -0
  208. package/dist/gvc/viewport.d.ts +71 -0
  209. package/dist/gvc/viewport.d.ts.map +1 -0
  210. package/dist/index.d.ts +54 -0
  211. package/dist/index.d.ts.map +1 -0
  212. package/dist/index.js +52862 -0
  213. package/dist/index.js.map +7 -0
  214. package/dist/label/index.d.ts +74 -0
  215. package/dist/label/index.d.ts.map +1 -0
  216. package/dist/label/node.d.ts +108 -0
  217. package/dist/label/node.d.ts.map +1 -0
  218. package/dist/label/rectangle.d.ts +60 -0
  219. package/dist/label/rectangle.d.ts.map +1 -0
  220. package/dist/label/split-q.d.ts +13 -0
  221. package/dist/label/split-q.d.ts.map +1 -0
  222. package/dist/label/xlabels-geom.d.ts +46 -0
  223. package/dist/label/xlabels-geom.d.ts.map +1 -0
  224. package/dist/label/xlabels-intersect.d.ts +79 -0
  225. package/dist/label/xlabels-intersect.d.ts.map +1 -0
  226. package/dist/label/xlabels.d.ts +67 -0
  227. package/dist/label/xlabels.d.ts.map +1 -0
  228. package/dist/layout/circo/blockpath.d.ts +120 -0
  229. package/dist/layout/circo/blockpath.d.ts.map +1 -0
  230. package/dist/layout/circo/blocks.d.ts +135 -0
  231. package/dist/layout/circo/blocks.d.ts.map +1 -0
  232. package/dist/layout/circo/blocktree.d.ts +51 -0
  233. package/dist/layout/circo/blocktree.d.ts.map +1 -0
  234. package/dist/layout/circo/circular.d.ts +59 -0
  235. package/dist/layout/circo/circular.d.ts.map +1 -0
  236. package/dist/layout/circo/index.d.ts +35 -0
  237. package/dist/layout/circo/index.d.ts.map +1 -0
  238. package/dist/layout/circo/init.d.ts +50 -0
  239. package/dist/layout/circo/init.d.ts.map +1 -0
  240. package/dist/layout/circo/position-helpers.d.ts +33 -0
  241. package/dist/layout/circo/position-helpers.d.ts.map +1 -0
  242. package/dist/layout/circo/position.d.ts +66 -0
  243. package/dist/layout/circo/position.d.ts.map +1 -0
  244. package/dist/layout/dot/acyclic.d.ts +8 -0
  245. package/dist/layout/dot/acyclic.d.ts.map +1 -0
  246. package/dist/layout/dot/aspect.d.ts +17 -0
  247. package/dist/layout/dot/aspect.d.ts.map +1 -0
  248. package/dist/layout/dot/classify.d.ts +52 -0
  249. package/dist/layout/dot/classify.d.ts.map +1 -0
  250. package/dist/layout/dot/cluster-path.d.ts +38 -0
  251. package/dist/layout/dot/cluster-path.d.ts.map +1 -0
  252. package/dist/layout/dot/cluster.d.ts +102 -0
  253. package/dist/layout/dot/cluster.d.ts.map +1 -0
  254. package/dist/layout/dot/compound-clip.d.ts +69 -0
  255. package/dist/layout/dot/compound-clip.d.ts.map +1 -0
  256. package/dist/layout/dot/compound-geom.d.ts +115 -0
  257. package/dist/layout/dot/compound-geom.d.ts.map +1 -0
  258. package/dist/layout/dot/compound.d.ts +56 -0
  259. package/dist/layout/dot/compound.d.ts.map +1 -0
  260. package/dist/layout/dot/conc.d.ts +88 -0
  261. package/dist/layout/dot/conc.d.ts.map +1 -0
  262. package/dist/layout/dot/decomp.d.ts +66 -0
  263. package/dist/layout/dot/decomp.d.ts.map +1 -0
  264. package/dist/layout/dot/edge-order.d.ts +27 -0
  265. package/dist/layout/dot/edge-order.d.ts.map +1 -0
  266. package/dist/layout/dot/edge-route-arrow.d.ts +46 -0
  267. package/dist/layout/dot/edge-route-arrow.d.ts.map +1 -0
  268. package/dist/layout/dot/edge-route-boxes.d.ts +75 -0
  269. package/dist/layout/dot/edge-route-boxes.d.ts.map +1 -0
  270. package/dist/layout/dot/edge-route-chain.d.ts +67 -0
  271. package/dist/layout/dot/edge-route-chain.d.ts.map +1 -0
  272. package/dist/layout/dot/edge-route-clip.d.ts +88 -0
  273. package/dist/layout/dot/edge-route-clip.d.ts.map +1 -0
  274. package/dist/layout/dot/edge-route-faithful.d.ts +94 -0
  275. package/dist/layout/dot/edge-route-faithful.d.ts.map +1 -0
  276. package/dist/layout/dot/edge-route-geom.d.ts +43 -0
  277. package/dist/layout/dot/edge-route-geom.d.ts.map +1 -0
  278. package/dist/layout/dot/edge-route-helpers.d.ts +50 -0
  279. package/dist/layout/dot/edge-route-helpers.d.ts.map +1 -0
  280. package/dist/layout/dot/edge-route-poly.d.ts +48 -0
  281. package/dist/layout/dot/edge-route-poly.d.ts.map +1 -0
  282. package/dist/layout/dot/edge-route-rank.d.ts +57 -0
  283. package/dist/layout/dot/edge-route-rank.d.ts.map +1 -0
  284. package/dist/layout/dot/edge-route-routing.d.ts +99 -0
  285. package/dist/layout/dot/edge-route-routing.d.ts.map +1 -0
  286. package/dist/layout/dot/edge-route.d.ts +57 -0
  287. package/dist/layout/dot/edge-route.d.ts.map +1 -0
  288. package/dist/layout/dot/fastgr.d.ts +147 -0
  289. package/dist/layout/dot/fastgr.d.ts.map +1 -0
  290. package/dist/layout/dot/flat-utils.d.ts +21 -0
  291. package/dist/layout/dot/flat-utils.d.ts.map +1 -0
  292. package/dist/layout/dot/flat.d.ts +152 -0
  293. package/dist/layout/dot/flat.d.ts.map +1 -0
  294. package/dist/layout/dot/graph-label.d.ts +18 -0
  295. package/dist/layout/dot/graph-label.d.ts.map +1 -0
  296. package/dist/layout/dot/index.d.ts +128 -0
  297. package/dist/layout/dot/index.d.ts.map +1 -0
  298. package/dist/layout/dot/init.d.ts +93 -0
  299. package/dist/layout/dot/init.d.ts.map +1 -0
  300. package/dist/layout/dot/label-order.d.ts +45 -0
  301. package/dist/layout/dot/label-order.d.ts.map +1 -0
  302. package/dist/layout/dot/mincross-build.d.ts +52 -0
  303. package/dist/layout/dot/mincross-build.d.ts.map +1 -0
  304. package/dist/layout/dot/mincross-cross.d.ts +80 -0
  305. package/dist/layout/dot/mincross-cross.d.ts.map +1 -0
  306. package/dist/layout/dot/mincross-flat.d.ts +27 -0
  307. package/dist/layout/dot/mincross-flat.d.ts.map +1 -0
  308. package/dist/layout/dot/mincross-order.d.ts +89 -0
  309. package/dist/layout/dot/mincross-order.d.ts.map +1 -0
  310. package/dist/layout/dot/mincross-utils.d.ts +60 -0
  311. package/dist/layout/dot/mincross-utils.d.ts.map +1 -0
  312. package/dist/layout/dot/mincross.d.ts +75 -0
  313. package/dist/layout/dot/mincross.d.ts.map +1 -0
  314. package/dist/layout/dot/ns-core.d.ts +37 -0
  315. package/dist/layout/dot/ns-core.d.ts.map +1 -0
  316. package/dist/layout/dot/ns-range.d.ts +17 -0
  317. package/dist/layout/dot/ns-range.d.ts.map +1 -0
  318. package/dist/layout/dot/ns-subtree.d.ts +78 -0
  319. package/dist/layout/dot/ns-subtree.d.ts.map +1 -0
  320. package/dist/layout/dot/ns.d.ts +86 -0
  321. package/dist/layout/dot/ns.d.ts.map +1 -0
  322. package/dist/layout/dot/ortho-adapter.d.ts +19 -0
  323. package/dist/layout/dot/ortho-adapter.d.ts.map +1 -0
  324. package/dist/layout/dot/pack-components.d.ts +100 -0
  325. package/dist/layout/dot/pack-components.d.ts.map +1 -0
  326. package/dist/layout/dot/position-aux.d.ts +110 -0
  327. package/dist/layout/dot/position-aux.d.ts.map +1 -0
  328. package/dist/layout/dot/position-bbox.d.ts +57 -0
  329. package/dist/layout/dot/position-bbox.d.ts.map +1 -0
  330. package/dist/layout/dot/position-cluster.d.ts +48 -0
  331. package/dist/layout/dot/position-cluster.d.ts.map +1 -0
  332. package/dist/layout/dot/position-ycoords.d.ts +42 -0
  333. package/dist/layout/dot/position-ycoords.d.ts.map +1 -0
  334. package/dist/layout/dot/position.d.ts +47 -0
  335. package/dist/layout/dot/position.d.ts.map +1 -0
  336. package/dist/layout/dot/rank-dot2.d.ts +114 -0
  337. package/dist/layout/dot/rank-dot2.d.ts.map +1 -0
  338. package/dist/layout/dot/rank.d.ts +119 -0
  339. package/dist/layout/dot/rank.d.ts.map +1 -0
  340. package/dist/layout/dot/sameport.d.ts +70 -0
  341. package/dist/layout/dot/sameport.d.ts.map +1 -0
  342. package/dist/layout/dot/self-loop.d.ts +54 -0
  343. package/dist/layout/dot/self-loop.d.ts.map +1 -0
  344. package/dist/layout/dot/splines-clone.d.ts +33 -0
  345. package/dist/layout/dot/splines-clone.d.ts.map +1 -0
  346. package/dist/layout/dot/splines-flat-labeled.d.ts +101 -0
  347. package/dist/layout/dot/splines-flat-labeled.d.ts.map +1 -0
  348. package/dist/layout/dot/splines-flat-multi.d.ts +35 -0
  349. package/dist/layout/dot/splines-flat-multi.d.ts.map +1 -0
  350. package/dist/layout/dot/splines-flat.d.ts +116 -0
  351. package/dist/layout/dot/splines-flat.d.ts.map +1 -0
  352. package/dist/layout/dot/splines-groups.d.ts +38 -0
  353. package/dist/layout/dot/splines-groups.d.ts.map +1 -0
  354. package/dist/layout/dot/splines-label.d.ts +105 -0
  355. package/dist/layout/dot/splines-label.d.ts.map +1 -0
  356. package/dist/layout/dot/splines-route-type.d.ts +28 -0
  357. package/dist/layout/dot/splines-route-type.d.ts.map +1 -0
  358. package/dist/layout/dot/splines-route.d.ts +99 -0
  359. package/dist/layout/dot/splines-route.d.ts.map +1 -0
  360. package/dist/layout/dot/splines.d.ts +157 -0
  361. package/dist/layout/dot/splines.d.ts.map +1 -0
  362. package/dist/layout/dot/straight-edges.d.ts +39 -0
  363. package/dist/layout/dot/straight-edges.d.ts.map +1 -0
  364. package/dist/layout/fdp/cluster-edges.d.ts +31 -0
  365. package/dist/layout/fdp/cluster-edges.d.ts.map +1 -0
  366. package/dist/layout/fdp/comp.d.ts +29 -0
  367. package/dist/layout/fdp/comp.d.ts.map +1 -0
  368. package/dist/layout/fdp/derive.d.ts +39 -0
  369. package/dist/layout/fdp/derive.d.ts.map +1 -0
  370. package/dist/layout/fdp/fdp-model.d.ts +101 -0
  371. package/dist/layout/fdp/fdp-model.d.ts.map +1 -0
  372. package/dist/layout/fdp/grid.d.ts +49 -0
  373. package/dist/layout/fdp/grid.d.ts.map +1 -0
  374. package/dist/layout/fdp/index.d.ts +36 -0
  375. package/dist/layout/fdp/index.d.ts.map +1 -0
  376. package/dist/layout/fdp/init.d.ts +26 -0
  377. package/dist/layout/fdp/init.d.ts.map +1 -0
  378. package/dist/layout/fdp/layout.d.ts +57 -0
  379. package/dist/layout/fdp/layout.d.ts.map +1 -0
  380. package/dist/layout/fdp/normalize.d.ts +18 -0
  381. package/dist/layout/fdp/normalize.d.ts.map +1 -0
  382. package/dist/layout/fdp/ports.d.ts +41 -0
  383. package/dist/layout/fdp/ports.d.ts.map +1 -0
  384. package/dist/layout/fdp/tlayout-init.d.ts +21 -0
  385. package/dist/layout/fdp/tlayout-init.d.ts.map +1 -0
  386. package/dist/layout/fdp/tlayout-parms.d.ts +98 -0
  387. package/dist/layout/fdp/tlayout-parms.d.ts.map +1 -0
  388. package/dist/layout/fdp/tlayout.d.ts +43 -0
  389. package/dist/layout/fdp/tlayout.d.ts.map +1 -0
  390. package/dist/layout/fdp/xlayout.d.ts +26 -0
  391. package/dist/layout/fdp/xlayout.d.ts.map +1 -0
  392. package/dist/layout/neato/bfs.d.ts +43 -0
  393. package/dist/layout/neato/bfs.d.ts.map +1 -0
  394. package/dist/layout/neato/cdt-surface.d.ts +16 -0
  395. package/dist/layout/neato/cdt-surface.d.ts.map +1 -0
  396. package/dist/layout/neato/conjgrad.d.ts +61 -0
  397. package/dist/layout/neato/conjgrad.d.ts.map +1 -0
  398. package/dist/layout/neato/delaunay.d.ts +28 -0
  399. package/dist/layout/neato/delaunay.d.ts.map +1 -0
  400. package/dist/layout/neato/dijkstra.d.ts +80 -0
  401. package/dist/layout/neato/dijkstra.d.ts.map +1 -0
  402. package/dist/layout/neato/fdp-adjust.d.ts +31 -0
  403. package/dist/layout/neato/fdp-adjust.d.ts.map +1 -0
  404. package/dist/layout/neato/index.d.ts +58 -0
  405. package/dist/layout/neato/index.d.ts.map +1 -0
  406. package/dist/layout/neato/init.d.ts +207 -0
  407. package/dist/layout/neato/init.d.ts.map +1 -0
  408. package/dist/layout/neato/legal.d.ts +7 -0
  409. package/dist/layout/neato/legal.d.ts.map +1 -0
  410. package/dist/layout/neato/matrix-ops.d.ts +28 -0
  411. package/dist/layout/neato/matrix-ops.d.ts.map +1 -0
  412. package/dist/layout/neato/multispline-router.d.ts +80 -0
  413. package/dist/layout/neato/multispline-router.d.ts.map +1 -0
  414. package/dist/layout/neato/multispline.d.ts +24 -0
  415. package/dist/layout/neato/multispline.d.ts.map +1 -0
  416. package/dist/layout/neato/overlap-prism.d.ts +26 -0
  417. package/dist/layout/neato/overlap-prism.d.ts.map +1 -0
  418. package/dist/layout/neato/overlap.d.ts +85 -0
  419. package/dist/layout/neato/overlap.d.ts.map +1 -0
  420. package/dist/layout/neato/sc-adjust.d.ts +33 -0
  421. package/dist/layout/neato/sc-adjust.d.ts.map +1 -0
  422. package/dist/layout/neato/sep-factor.d.ts +41 -0
  423. package/dist/layout/neato/sep-factor.d.ts.map +1 -0
  424. package/dist/layout/neato/set-aspect.d.ts +33 -0
  425. package/dist/layout/neato/set-aspect.d.ts.map +1 -0
  426. package/dist/layout/neato/sgd.d.ts +166 -0
  427. package/dist/layout/neato/sgd.d.ts.map +1 -0
  428. package/dist/layout/neato/splines.d.ts +153 -0
  429. package/dist/layout/neato/splines.d.ts.map +1 -0
  430. package/dist/layout/neato/stress-kernel.d.ts +53 -0
  431. package/dist/layout/neato/stress-kernel.d.ts.map +1 -0
  432. package/dist/layout/neato/stress.d.ts +158 -0
  433. package/dist/layout/neato/stress.d.ts.map +1 -0
  434. package/dist/layout/osage/index.d.ts +158 -0
  435. package/dist/layout/osage/index.d.ts.map +1 -0
  436. package/dist/layout/osage/layout.d.ts +49 -0
  437. package/dist/layout/osage/layout.d.ts.map +1 -0
  438. package/dist/layout/osage/types.d.ts +28 -0
  439. package/dist/layout/osage/types.d.ts.map +1 -0
  440. package/dist/layout/pack/array-pack.d.ts +114 -0
  441. package/dist/layout/pack/array-pack.d.ts.map +1 -0
  442. package/dist/layout/pack/index.d.ts +157 -0
  443. package/dist/layout/pack/index.d.ts.map +1 -0
  444. package/dist/layout/pack/poly-pack.d.ts +126 -0
  445. package/dist/layout/pack/poly-pack.d.ts.map +1 -0
  446. package/dist/layout/pack/poly-place.d.ts +27 -0
  447. package/dist/layout/pack/poly-place.d.ts.map +1 -0
  448. package/dist/layout/pack/spiral-search.d.ts +18 -0
  449. package/dist/layout/pack/spiral-search.d.ts.map +1 -0
  450. package/dist/layout/pack/test-helpers.d.ts +7 -0
  451. package/dist/layout/pack/test-helpers.d.ts.map +1 -0
  452. package/dist/layout/pack/types.d.ts +74 -0
  453. package/dist/layout/pack/types.d.ts.map +1 -0
  454. package/dist/layout/patchwork/index.d.ts +136 -0
  455. package/dist/layout/patchwork/index.d.ts.map +1 -0
  456. package/dist/layout/patchwork/tree-map.d.ts +32 -0
  457. package/dist/layout/patchwork/tree-map.d.ts.map +1 -0
  458. package/dist/layout/patchwork/tree-node.d.ts +46 -0
  459. package/dist/layout/patchwork/tree-node.d.ts.map +1 -0
  460. package/dist/layout/sfdp/index.d.ts +39 -0
  461. package/dist/layout/sfdp/index.d.ts.map +1 -0
  462. package/dist/layout/sfdp/init.d.ts +61 -0
  463. package/dist/layout/sfdp/init.d.ts.map +1 -0
  464. package/dist/layout/sfdp/multilevel.d.ts +23 -0
  465. package/dist/layout/sfdp/multilevel.d.ts.map +1 -0
  466. package/dist/layout/sfdp/quadtree.d.ts +45 -0
  467. package/dist/layout/sfdp/quadtree.d.ts.map +1 -0
  468. package/dist/layout/sfdp/sparse-matrix-multiply.d.ts +34 -0
  469. package/dist/layout/sfdp/sparse-matrix-multiply.d.ts.map +1 -0
  470. package/dist/layout/sfdp/sparse-matrix.d.ts +101 -0
  471. package/dist/layout/sfdp/sparse-matrix.d.ts.map +1 -0
  472. package/dist/layout/sfdp/sparse-solve.d.ts +14 -0
  473. package/dist/layout/sfdp/sparse-solve.d.ts.map +1 -0
  474. package/dist/layout/sfdp/spring-driver.d.ts +18 -0
  475. package/dist/layout/sfdp/spring-driver.d.ts.map +1 -0
  476. package/dist/layout/sfdp/spring-electrical.d.ts +61 -0
  477. package/dist/layout/sfdp/spring-electrical.d.ts.map +1 -0
  478. package/dist/layout/twopi/circle.d.ts +83 -0
  479. package/dist/layout/twopi/circle.d.ts.map +1 -0
  480. package/dist/layout/twopi/index.d.ts +24 -0
  481. package/dist/layout/twopi/index.d.ts.map +1 -0
  482. package/dist/layout/twopi/init.d.ts +85 -0
  483. package/dist/layout/twopi/init.d.ts.map +1 -0
  484. package/dist/layout/twopi/pipeline.d.ts +37 -0
  485. package/dist/layout/twopi/pipeline.d.ts.map +1 -0
  486. package/dist/layout/twopi/twopi-test-helpers.d.ts +12 -0
  487. package/dist/layout/twopi/twopi-test-helpers.d.ts.map +1 -0
  488. package/dist/model/algData.d.ts +175 -0
  489. package/dist/model/algData.d.ts.map +1 -0
  490. package/dist/model/cgraph-ops.d.ts +86 -0
  491. package/dist/model/cgraph-ops.d.ts.map +1 -0
  492. package/dist/model/edge.d.ts +80 -0
  493. package/dist/model/edge.d.ts.map +1 -0
  494. package/dist/model/edgeInfo.d.ts +299 -0
  495. package/dist/model/edgeInfo.d.ts.map +1 -0
  496. package/dist/model/geom.d.ts +149 -0
  497. package/dist/model/geom.d.ts.map +1 -0
  498. package/dist/model/graph.d.ts +135 -0
  499. package/dist/model/graph.d.ts.map +1 -0
  500. package/dist/model/graphInfo.d.ts +418 -0
  501. package/dist/model/graphInfo.d.ts.map +1 -0
  502. package/dist/model/index.d.ts +10 -0
  503. package/dist/model/index.d.ts.map +1 -0
  504. package/dist/model/layoutParams.d.ts +85 -0
  505. package/dist/model/layoutParams.d.ts.map +1 -0
  506. package/dist/model/node.d.ts +101 -0
  507. package/dist/model/node.d.ts.map +1 -0
  508. package/dist/model/nodeInfo.d.ts +278 -0
  509. package/dist/model/nodeInfo.d.ts.map +1 -0
  510. package/dist/model/rankEntry.d.ts +80 -0
  511. package/dist/model/rankEntry.d.ts.map +1 -0
  512. package/dist/ortho/chan-dict.d.ts +82 -0
  513. package/dist/ortho/chan-dict.d.ts.map +1 -0
  514. package/dist/ortho/fpq.d.ts +54 -0
  515. package/dist/ortho/fpq.d.ts.map +1 -0
  516. package/dist/ortho/index.d.ts +35 -0
  517. package/dist/ortho/index.d.ts.map +1 -0
  518. package/dist/ortho/maze-channels.d.ts +47 -0
  519. package/dist/ortho/maze-channels.d.ts.map +1 -0
  520. package/dist/ortho/maze.d.ts +27 -0
  521. package/dist/ortho/maze.d.ts.map +1 -0
  522. package/dist/ortho/ortho-parallel.d.ts +26 -0
  523. package/dist/ortho/ortho-parallel.d.ts.map +1 -0
  524. package/dist/ortho/ortho-route.d.ts +31 -0
  525. package/dist/ortho/ortho-route.d.ts.map +1 -0
  526. package/dist/ortho/partition.d.ts +34 -0
  527. package/dist/ortho/partition.d.ts.map +1 -0
  528. package/dist/ortho/rawgraph.d.ts +41 -0
  529. package/dist/ortho/rawgraph.d.ts.map +1 -0
  530. package/dist/ortho/sgraph.d.ts +74 -0
  531. package/dist/ortho/sgraph.d.ts.map +1 -0
  532. package/dist/ortho/trap-query.d.ts +32 -0
  533. package/dist/ortho/trap-query.d.ts.map +1 -0
  534. package/dist/ortho/trap-segment.d.ts +23 -0
  535. package/dist/ortho/trap-segment.d.ts.map +1 -0
  536. package/dist/ortho/trap-types.d.ts +91 -0
  537. package/dist/ortho/trap-types.d.ts.map +1 -0
  538. package/dist/ortho/trap-update.d.ts +12 -0
  539. package/dist/ortho/trap-update.d.ts.map +1 -0
  540. package/dist/ortho/trapezoid.d.ts +18 -0
  541. package/dist/ortho/trapezoid.d.ts.map +1 -0
  542. package/dist/ortho/types.d.ts +241 -0
  543. package/dist/ortho/types.d.ts.map +1 -0
  544. package/dist/parser/ast.d.ts +49 -0
  545. package/dist/parser/ast.d.ts.map +1 -0
  546. package/dist/parser/builder.d.ts +75 -0
  547. package/dist/parser/builder.d.ts.map +1 -0
  548. package/dist/parser/index.d.ts +97 -0
  549. package/dist/parser/index.d.ts.map +1 -0
  550. package/dist/pathplan/index.d.ts +8 -0
  551. package/dist/pathplan/index.d.ts.map +1 -0
  552. package/dist/pathplan/route.d.ts +9 -0
  553. package/dist/pathplan/route.d.ts.map +1 -0
  554. package/dist/pathplan/shortest.d.ts +5 -0
  555. package/dist/pathplan/shortest.d.ts.map +1 -0
  556. package/dist/pathplan/solvers.d.ts +5 -0
  557. package/dist/pathplan/solvers.d.ts.map +1 -0
  558. package/dist/pathplan/triang.d.ts +25 -0
  559. package/dist/pathplan/triang.d.ts.map +1 -0
  560. package/dist/pathplan/types.d.ts +22 -0
  561. package/dist/pathplan/types.d.ts.map +1 -0
  562. package/dist/pathplan/visibility.d.ts +13 -0
  563. package/dist/pathplan/visibility.d.ts.map +1 -0
  564. package/dist/pathplan/vispath.d.ts +9 -0
  565. package/dist/pathplan/vispath.d.ts.map +1 -0
  566. package/dist/rbtree/index.d.ts +127 -0
  567. package/dist/rbtree/index.d.ts.map +1 -0
  568. package/dist/render/color-resolve.d.ts +38 -0
  569. package/dist/render/color-resolve.d.ts.map +1 -0
  570. package/dist/render/dot.d.ts +379 -0
  571. package/dist/render/dot.d.ts.map +1 -0
  572. package/dist/render/index.d.ts +24 -0
  573. package/dist/render/index.d.ts.map +1 -0
  574. package/dist/render/json.d.ts +89 -0
  575. package/dist/render/json.d.ts.map +1 -0
  576. package/dist/render/map-test-helpers.d.ts +13 -0
  577. package/dist/render/map-test-helpers.d.ts.map +1 -0
  578. package/dist/render/map.d.ts +197 -0
  579. package/dist/render/map.d.ts.map +1 -0
  580. package/dist/render/public.d.ts +64 -0
  581. package/dist/render/public.d.ts.map +1 -0
  582. package/dist/render/svg-arrow-ops.d.ts +10 -0
  583. package/dist/render/svg-arrow-ops.d.ts.map +1 -0
  584. package/dist/render/svg-cluster.d.ts +9 -0
  585. package/dist/render/svg-cluster.d.ts.map +1 -0
  586. package/dist/render/svg-edge-ortho-radius.d.ts +31 -0
  587. package/dist/render/svg-edge-ortho-radius.d.ts.map +1 -0
  588. package/dist/render/svg-edge-split.d.ts +48 -0
  589. package/dist/render/svg-edge-split.d.ts.map +1 -0
  590. package/dist/render/svg-gradient.d.ts +46 -0
  591. package/dist/render/svg-gradient.d.ts.map +1 -0
  592. package/dist/render/svg-graph.d.ts +97 -0
  593. package/dist/render/svg-graph.d.ts.map +1 -0
  594. package/dist/render/svg-helpers.d.ts +122 -0
  595. package/dist/render/svg-helpers.d.ts.map +1 -0
  596. package/dist/render/svg-id.d.ts +28 -0
  597. package/dist/render/svg-id.d.ts.map +1 -0
  598. package/dist/render/svg-multicolor.d.ts +60 -0
  599. package/dist/render/svg-multicolor.d.ts.map +1 -0
  600. package/dist/render/svg-parallel-edge.d.ts +28 -0
  601. package/dist/render/svg-parallel-edge.d.ts.map +1 -0
  602. package/dist/render/svg-tapered-edge.d.ts +18 -0
  603. package/dist/render/svg-tapered-edge.d.ts.map +1 -0
  604. package/dist/render/svg.d.ts +104 -0
  605. package/dist/render/svg.d.ts.map +1 -0
  606. package/dist/render/xdot-public.d.ts +95 -0
  607. package/dist/render/xdot-public.d.ts.map +1 -0
  608. package/dist/render/xml-escape.d.ts +21 -0
  609. package/dist/render/xml-escape.d.ts.map +1 -0
  610. package/dist/render.js +52556 -0
  611. package/dist/render.js.map +7 -0
  612. package/dist/util/agxbuf.d.ts +72 -0
  613. package/dist/util/agxbuf.d.ts.map +1 -0
  614. package/dist/util/bsd-qsort.d.ts +22 -0
  615. package/dist/util/bsd-qsort.d.ts.map +1 -0
  616. package/dist/util/index.d.ts +11 -0
  617. package/dist/util/index.d.ts.map +1 -0
  618. package/dist/util/list.d.ts +47 -0
  619. package/dist/util/list.d.ts.map +1 -0
  620. package/dist/util/math.d.ts +54 -0
  621. package/dist/util/math.d.ts.map +1 -0
  622. package/dist/util/mt19937.d.ts +40 -0
  623. package/dist/util/mt19937.d.ts.map +1 -0
  624. package/dist/util/printf-round.d.ts +45 -0
  625. package/dist/util/printf-round.d.ts.map +1 -0
  626. package/dist/util/xml.d.ts +24 -0
  627. package/dist/util/xml.d.ts.map +1 -0
  628. package/dist/vpsc/Block.d.ts +116 -0
  629. package/dist/vpsc/Block.d.ts.map +1 -0
  630. package/dist/vpsc/Blocks.d.ts +66 -0
  631. package/dist/vpsc/Blocks.d.ts.map +1 -0
  632. package/dist/vpsc/Constraint.d.ts +51 -0
  633. package/dist/vpsc/Constraint.d.ts.map +1 -0
  634. package/dist/vpsc/HeapUtils.d.ts +37 -0
  635. package/dist/vpsc/HeapUtils.d.ts.map +1 -0
  636. package/dist/vpsc/Solver.d.ts +107 -0
  637. package/dist/vpsc/Solver.d.ts.map +1 -0
  638. package/dist/vpsc/SweepLine.d.ts +38 -0
  639. package/dist/vpsc/SweepLine.d.ts.map +1 -0
  640. package/dist/vpsc/Variable.d.ts +38 -0
  641. package/dist/vpsc/Variable.d.ts.map +1 -0
  642. package/dist/vpsc/index.d.ts +54 -0
  643. package/dist/vpsc/index.d.ts.map +1 -0
  644. package/dist/vpsc/sweepTypes.d.ts +29 -0
  645. package/dist/vpsc/sweepTypes.d.ts.map +1 -0
  646. package/dist/xdot/index.d.ts +6 -0
  647. package/dist/xdot/index.d.ts.map +1 -0
  648. package/dist/xdot/lex.d.ts +22 -0
  649. package/dist/xdot/lex.d.ts.map +1 -0
  650. package/dist/xdot/misc.d.ts +13 -0
  651. package/dist/xdot/misc.d.ts.map +1 -0
  652. package/dist/xdot/parse.d.ts +21 -0
  653. package/dist/xdot/parse.d.ts.map +1 -0
  654. package/dist/xdot/types.d.ts +152 -0
  655. package/dist/xdot/types.d.ts.map +1 -0
  656. package/package.json +113 -0
  657. package/src/api/builder.ts +277 -0
  658. package/src/api/edge-ops.ts +113 -0
  659. package/src/api/geometry.ts +307 -0
  660. package/src/api/index.ts +46 -0
  661. package/src/cdt/bag.ts +196 -0
  662. package/src/cdt/hash-core.ts +84 -0
  663. package/src/cdt/hash.ts +207 -0
  664. package/src/cdt/index.ts +17 -0
  665. package/src/cdt/splay-core.ts +301 -0
  666. package/src/cdt/splay.ts +191 -0
  667. package/src/cdt/strhash.ts +52 -0
  668. package/src/cdt/types.ts +13 -0
  669. package/src/common/arith.ts +39 -0
  670. package/src/common/arm-pow-data.ts +201 -0
  671. package/src/common/arm-pow.ts +296 -0
  672. package/src/common/arrows-constants.ts +175 -0
  673. package/src/common/arrows-geometry.ts +62 -0
  674. package/src/common/arrows-miter.ts +84 -0
  675. package/src/common/arrows-shapes-poly.ts +241 -0
  676. package/src/common/arrows-shapes-util.ts +162 -0
  677. package/src/common/arrows-shapes.ts +360 -0
  678. package/src/common/arrows-types.ts +59 -0
  679. package/src/common/arrows.ts +209 -0
  680. package/src/common/color.ts +340 -0
  681. package/src/common/colorData.ts +264 -0
  682. package/src/common/compass-port.ts +384 -0
  683. package/src/common/crand.ts +79 -0
  684. package/src/common/edge-label-init.ts +310 -0
  685. package/src/common/edge-offset.ts +140 -0
  686. package/src/common/ellipse-wedge.ts +189 -0
  687. package/src/common/emit-types.ts +332 -0
  688. package/src/common/fma.ts +52 -0
  689. package/src/common/graph-init.ts +359 -0
  690. package/src/common/html-entities.ts +299 -0
  691. package/src/common/html-string.ts +22 -0
  692. package/src/common/htmltable-emit-fill.ts +367 -0
  693. package/src/common/htmltable-emit-rules.ts +293 -0
  694. package/src/common/htmltable-emit.ts +345 -0
  695. package/src/common/htmltable-lex.ts +138 -0
  696. package/src/common/htmltable-parse.ts +539 -0
  697. package/src/common/htmltable-port.ts +32 -0
  698. package/src/common/htmltable-pos-runs.ts +313 -0
  699. package/src/common/htmltable-pos.ts +601 -0
  700. package/src/common/htmltable-types.ts +262 -0
  701. package/src/common/htmltable.ts +477 -0
  702. package/src/common/layers.ts +113 -0
  703. package/src/common/make-label.ts +192 -0
  704. package/src/common/multicolor.ts +167 -0
  705. package/src/common/nodeinit.ts +339 -0
  706. package/src/common/poly-gencode.ts +475 -0
  707. package/src/common/poly-init.ts +133 -0
  708. package/src/common/poly-inside.ts +202 -0
  709. package/src/common/poly-shapes-cases.ts +253 -0
  710. package/src/common/poly-shapes-cases2.ts +170 -0
  711. package/src/common/poly-shapes-util.ts +124 -0
  712. package/src/common/poly-shapes.ts +181 -0
  713. package/src/common/poly-sizing.ts +639 -0
  714. package/src/common/poly-vertices.ts +237 -0
  715. package/src/common/postproc.ts +436 -0
  716. package/src/common/ps-fontalias.ts +112 -0
  717. package/src/common/random.ts +37 -0
  718. package/src/common/record-port.ts +89 -0
  719. package/src/common/record.ts +523 -0
  720. package/src/common/shapeData.ts +502 -0
  721. package/src/common/shapes.ts +187 -0
  722. package/src/common/spline-midpoint.ts +105 -0
  723. package/src/common/splines-clip.ts +449 -0
  724. package/src/common/splines-constants.ts +53 -0
  725. package/src/common/splines-geom.ts +194 -0
  726. package/src/common/splines-path-begin.ts +243 -0
  727. package/src/common/splines-path-end.ts +231 -0
  728. package/src/common/splines-path-shared.ts +258 -0
  729. package/src/common/splines-routespl.ts +444 -0
  730. package/src/common/splines-selfedge.ts +403 -0
  731. package/src/common/splines.ts +33 -0
  732. package/src/common/style-resolve.ts +481 -0
  733. package/src/common/subst.ts +126 -0
  734. package/src/common/taper.ts +219 -0
  735. package/src/common/textmeasure-factory.ts +86 -0
  736. package/src/common/textmeasure-lookup.ts +50 -0
  737. package/src/common/textmeasure-lut-data-a.ts +182 -0
  738. package/src/common/textmeasure-lut-data-b.ts +140 -0
  739. package/src/common/textmeasure-lut-data-c.ts +221 -0
  740. package/src/common/textmeasure-lut-data.ts +78 -0
  741. package/src/common/textmeasure.ts +321 -0
  742. package/src/common/types.ts +425 -0
  743. package/src/common/xlabels-place.ts +475 -0
  744. package/src/debug.ts +38 -0
  745. package/src/errors.ts +95 -0
  746. package/src/gvc/anchor.ts +530 -0
  747. package/src/gvc/context.ts +260 -0
  748. package/src/gvc/default-context.ts +70 -0
  749. package/src/gvc/device-cluster.ts +114 -0
  750. package/src/gvc/device.ts +598 -0
  751. package/src/gvc/edge-labels.ts +116 -0
  752. package/src/gvc/emit-walk.ts +98 -0
  753. package/src/gvc/image-resolver.ts +137 -0
  754. package/src/gvc/job.ts +401 -0
  755. package/src/gvc/textlayout.ts +44 -0
  756. package/src/gvc/textspan-emit.ts +100 -0
  757. package/src/gvc/usershape.ts +33 -0
  758. package/src/gvc/viewport.ts +203 -0
  759. package/src/index.ts +165 -0
  760. package/src/label/index.ts +302 -0
  761. package/src/label/node.ts +278 -0
  762. package/src/label/rectangle.ts +123 -0
  763. package/src/label/split-q.ts +237 -0
  764. package/src/label/xlabels-geom.ts +132 -0
  765. package/src/label/xlabels-intersect.ts +421 -0
  766. package/src/label/xlabels.ts +212 -0
  767. package/src/layout/circo/blockpath.ts +560 -0
  768. package/src/layout/circo/blocks.ts +234 -0
  769. package/src/layout/circo/blocktree.ts +246 -0
  770. package/src/layout/circo/circular.ts +227 -0
  771. package/src/layout/circo/index.ts +90 -0
  772. package/src/layout/circo/init.ts +84 -0
  773. package/src/layout/circo/position-helpers.ts +104 -0
  774. package/src/layout/circo/position.ts +196 -0
  775. package/src/layout/dot/__fixtures__/xcoord-pivot-divergence.gv +79 -0
  776. package/src/layout/dot/acyclic.ts +60 -0
  777. package/src/layout/dot/aspect.ts +22 -0
  778. package/src/layout/dot/classify.ts +462 -0
  779. package/src/layout/dot/cluster-path.ts +200 -0
  780. package/src/layout/dot/cluster.ts +480 -0
  781. package/src/layout/dot/compound-clip.ts +224 -0
  782. package/src/layout/dot/compound-geom.ts +282 -0
  783. package/src/layout/dot/compound.ts +294 -0
  784. package/src/layout/dot/conc.ts +433 -0
  785. package/src/layout/dot/decomp.ts +165 -0
  786. package/src/layout/dot/edge-order.ts +62 -0
  787. package/src/layout/dot/edge-route-arrow.ts +87 -0
  788. package/src/layout/dot/edge-route-boxes.ts +99 -0
  789. package/src/layout/dot/edge-route-chain.ts +420 -0
  790. package/src/layout/dot/edge-route-clip.ts +253 -0
  791. package/src/layout/dot/edge-route-faithful.ts +404 -0
  792. package/src/layout/dot/edge-route-geom.ts +90 -0
  793. package/src/layout/dot/edge-route-helpers.ts +170 -0
  794. package/src/layout/dot/edge-route-poly.ts +174 -0
  795. package/src/layout/dot/edge-route-rank.ts +136 -0
  796. package/src/layout/dot/edge-route-routing.ts +219 -0
  797. package/src/layout/dot/edge-route.ts +490 -0
  798. package/src/layout/dot/fastgr.ts +377 -0
  799. package/src/layout/dot/flat-utils.ts +52 -0
  800. package/src/layout/dot/flat.ts +518 -0
  801. package/src/layout/dot/graph-label.ts +114 -0
  802. package/src/layout/dot/index.ts +302 -0
  803. package/src/layout/dot/init.ts +300 -0
  804. package/src/layout/dot/label-order.ts +161 -0
  805. package/src/layout/dot/mincross-build.ts +373 -0
  806. package/src/layout/dot/mincross-cross.ts +409 -0
  807. package/src/layout/dot/mincross-flat.ts +213 -0
  808. package/src/layout/dot/mincross-order.ts +401 -0
  809. package/src/layout/dot/mincross-utils.ts +170 -0
  810. package/src/layout/dot/mincross.ts +386 -0
  811. package/src/layout/dot/ns-core.ts +122 -0
  812. package/src/layout/dot/ns-range.ts +228 -0
  813. package/src/layout/dot/ns-subtree.ts +347 -0
  814. package/src/layout/dot/ns.ts +506 -0
  815. package/src/layout/dot/ortho-adapter.ts +133 -0
  816. package/src/layout/dot/pack-components.ts +433 -0
  817. package/src/layout/dot/position-aux.ts +382 -0
  818. package/src/layout/dot/position-bbox.ts +221 -0
  819. package/src/layout/dot/position-cluster.ts +286 -0
  820. package/src/layout/dot/position-ycoords.ts +287 -0
  821. package/src/layout/dot/position.ts +194 -0
  822. package/src/layout/dot/rank-dot2.ts +528 -0
  823. package/src/layout/dot/rank.ts +547 -0
  824. package/src/layout/dot/sameport.ts +278 -0
  825. package/src/layout/dot/self-loop.ts +147 -0
  826. package/src/layout/dot/splines-clone.ts +121 -0
  827. package/src/layout/dot/splines-flat-labeled.ts +408 -0
  828. package/src/layout/dot/splines-flat-multi.ts +188 -0
  829. package/src/layout/dot/splines-flat.ts +598 -0
  830. package/src/layout/dot/splines-groups.ts +190 -0
  831. package/src/layout/dot/splines-label.ts +432 -0
  832. package/src/layout/dot/splines-route-type.ts +44 -0
  833. package/src/layout/dot/splines-route.ts +478 -0
  834. package/src/layout/dot/splines.ts +538 -0
  835. package/src/layout/dot/straight-edges.ts +332 -0
  836. package/src/layout/fdp/cluster-edges.ts +0 -0
  837. package/src/layout/fdp/comp.ts +160 -0
  838. package/src/layout/fdp/derive.ts +272 -0
  839. package/src/layout/fdp/fdp-model.ts +238 -0
  840. package/src/layout/fdp/grid.ts +77 -0
  841. package/src/layout/fdp/index.ts +113 -0
  842. package/src/layout/fdp/init.ts +116 -0
  843. package/src/layout/fdp/layout.ts +485 -0
  844. package/src/layout/fdp/normalize.ts +100 -0
  845. package/src/layout/fdp/ports.ts +161 -0
  846. package/src/layout/fdp/tlayout-init.ts +230 -0
  847. package/src/layout/fdp/tlayout-parms.ts +234 -0
  848. package/src/layout/fdp/tlayout.ts +317 -0
  849. package/src/layout/fdp/xlayout.ts +350 -0
  850. package/src/layout/neato/bfs.ts +131 -0
  851. package/src/layout/neato/cdt-surface.ts +693 -0
  852. package/src/layout/neato/conjgrad.ts +159 -0
  853. package/src/layout/neato/delaunay.ts +259 -0
  854. package/src/layout/neato/dijkstra.ts +296 -0
  855. package/src/layout/neato/fdp-adjust.ts +124 -0
  856. package/src/layout/neato/index.ts +310 -0
  857. package/src/layout/neato/init.ts +505 -0
  858. package/src/layout/neato/legal.ts +316 -0
  859. package/src/layout/neato/matrix-ops.ts +112 -0
  860. package/src/layout/neato/multispline-router.ts +417 -0
  861. package/src/layout/neato/multispline.ts +427 -0
  862. package/src/layout/neato/overlap-prism.ts +503 -0
  863. package/src/layout/neato/overlap.ts +158 -0
  864. package/src/layout/neato/sc-adjust.ts +206 -0
  865. package/src/layout/neato/sep-factor.ts +118 -0
  866. package/src/layout/neato/set-aspect.ts +178 -0
  867. package/src/layout/neato/sgd.ts +461 -0
  868. package/src/layout/neato/splines.ts +1014 -0
  869. package/src/layout/neato/stress-kernel.ts +362 -0
  870. package/src/layout/neato/stress.ts +420 -0
  871. package/src/layout/osage/index.ts +548 -0
  872. package/src/layout/osage/layout.ts +254 -0
  873. package/src/layout/osage/types.ts +31 -0
  874. package/src/layout/pack/array-pack.ts +254 -0
  875. package/src/layout/pack/index.ts +570 -0
  876. package/src/layout/pack/poly-pack.ts +266 -0
  877. package/src/layout/pack/poly-place.ts +426 -0
  878. package/src/layout/pack/spiral-search.ts +106 -0
  879. package/src/layout/pack/test-helpers.ts +46 -0
  880. package/src/layout/pack/types.ts +85 -0
  881. package/src/layout/patchwork/index.ts +441 -0
  882. package/src/layout/patchwork/tree-map.ts +183 -0
  883. package/src/layout/patchwork/tree-node.ts +120 -0
  884. package/src/layout/sfdp/index.ts +231 -0
  885. package/src/layout/sfdp/init.ts +224 -0
  886. package/src/layout/sfdp/multilevel.ts +262 -0
  887. package/src/layout/sfdp/quadtree.ts +267 -0
  888. package/src/layout/sfdp/sparse-matrix-multiply.ts +160 -0
  889. package/src/layout/sfdp/sparse-matrix.ts +367 -0
  890. package/src/layout/sfdp/sparse-solve.ts +122 -0
  891. package/src/layout/sfdp/spring-driver.ts +209 -0
  892. package/src/layout/sfdp/spring-electrical.ts +431 -0
  893. package/src/layout/twopi/circle.ts +339 -0
  894. package/src/layout/twopi/index.ts +78 -0
  895. package/src/layout/twopi/init.ts +174 -0
  896. package/src/layout/twopi/pipeline.ts +98 -0
  897. package/src/layout/twopi/twopi-test-helpers.ts +44 -0
  898. package/src/model/algData.ts +194 -0
  899. package/src/model/cgraph-ops.ts +175 -0
  900. package/src/model/edge.ts +104 -0
  901. package/src/model/edgeInfo.ts +431 -0
  902. package/src/model/geom.ts +204 -0
  903. package/src/model/graph.ts +172 -0
  904. package/src/model/graphInfo.ts +528 -0
  905. package/src/model/index.ts +10 -0
  906. package/src/model/layoutParams.ts +127 -0
  907. package/src/model/node.ts +138 -0
  908. package/src/model/nodeInfo.ts +424 -0
  909. package/src/model/rankEntry.ts +95 -0
  910. package/src/ortho/chan-dict.ts +236 -0
  911. package/src/ortho/fpq.ts +149 -0
  912. package/src/ortho/index.ts +206 -0
  913. package/src/ortho/maze-channels.ts +196 -0
  914. package/src/ortho/maze.ts +311 -0
  915. package/src/ortho/ortho-parallel.ts +254 -0
  916. package/src/ortho/ortho-route.ts +349 -0
  917. package/src/ortho/partition.ts +303 -0
  918. package/src/ortho/rawgraph.ts +119 -0
  919. package/src/ortho/sgraph.ts +283 -0
  920. package/src/ortho/trap-query.ts +174 -0
  921. package/src/ortho/trap-segment.ts +303 -0
  922. package/src/ortho/trap-types.ts +171 -0
  923. package/src/ortho/trap-update.ts +89 -0
  924. package/src/ortho/trapezoid.ts +120 -0
  925. package/src/ortho/types.ts +286 -0
  926. package/src/parser/__fixtures__/directed.dot +10 -0
  927. package/src/parser/__fixtures__/simple.dot +7 -0
  928. package/src/parser/__fixtures__/subgraph.dot +17 -0
  929. package/src/parser/ast.ts +64 -0
  930. package/src/parser/builder.ts +401 -0
  931. package/src/parser/dot.d.ts +208 -0
  932. package/src/parser/dot.js +3321 -0
  933. package/src/parser/dot.pegjs +263 -0
  934. package/src/parser/index.ts +353 -0
  935. package/src/pathplan/index.ts +9 -0
  936. package/src/pathplan/route.ts +284 -0
  937. package/src/pathplan/shortest.ts +268 -0
  938. package/src/pathplan/solvers.ts +65 -0
  939. package/src/pathplan/triang.ts +221 -0
  940. package/src/pathplan/types.ts +16 -0
  941. package/src/pathplan/visibility.ts +170 -0
  942. package/src/pathplan/vispath.ts +118 -0
  943. package/src/rbtree/index.ts +418 -0
  944. package/src/render/color-resolve.ts +171 -0
  945. package/src/render/dot.ts +1514 -0
  946. package/src/render/index.ts +29 -0
  947. package/src/render/json.ts +734 -0
  948. package/src/render/map-test-helpers.ts +61 -0
  949. package/src/render/map.ts +528 -0
  950. package/src/render/public.ts +131 -0
  951. package/src/render/svg-arrow-ops.ts +113 -0
  952. package/src/render/svg-cluster.ts +24 -0
  953. package/src/render/svg-edge-ortho-radius.ts +228 -0
  954. package/src/render/svg-edge-split.ts +180 -0
  955. package/src/render/svg-gradient.ts +185 -0
  956. package/src/render/svg-graph.ts +415 -0
  957. package/src/render/svg-helpers.ts +623 -0
  958. package/src/render/svg-id.ts +76 -0
  959. package/src/render/svg-multicolor.ts +313 -0
  960. package/src/render/svg-parallel-edge.ts +123 -0
  961. package/src/render/svg-tapered-edge.ts +56 -0
  962. package/src/render/svg.ts +307 -0
  963. package/src/render/xdot-public.ts +164 -0
  964. package/src/render/xml-escape.ts +56 -0
  965. package/src/util/agxbuf.ts +138 -0
  966. package/src/util/bsd-qsort.ts +251 -0
  967. package/src/util/index.ts +25 -0
  968. package/src/util/list.ts +122 -0
  969. package/src/util/math.ts +104 -0
  970. package/src/util/mt19937.ts +143 -0
  971. package/src/util/printf-round.ts +163 -0
  972. package/src/util/xml.ts +184 -0
  973. package/src/vpsc/Block.ts +375 -0
  974. package/src/vpsc/Blocks.ts +164 -0
  975. package/src/vpsc/Constraint.ts +94 -0
  976. package/src/vpsc/HeapUtils.ts +88 -0
  977. package/src/vpsc/Solver.ts +274 -0
  978. package/src/vpsc/SweepLine.ts +214 -0
  979. package/src/vpsc/Variable.ts +54 -0
  980. package/src/vpsc/index.ts +122 -0
  981. package/src/vpsc/sweepTypes.ts +31 -0
  982. package/src/xdot/index.ts +7 -0
  983. package/src/xdot/lex.ts +151 -0
  984. package/src/xdot/misc.ts +226 -0
  985. package/src/xdot/parse.ts +349 -0
  986. package/src/xdot/types.ts +158 -0
@@ -0,0 +1,303 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ /**
3
+ * Partition free space around nodes into rectangular tiles.
4
+ *
5
+ * Faithful port of lib/ortho/partition.c.
6
+ * Runs Seidel trapezoidation TWICE: once normal, once with x/y swapped
7
+ * (via perp()). Intersection of the two decompositions yields cells
8
+ * bounded on all four sides.
9
+ *
10
+ * SEED is fixed at 173 — matches lib/ortho/partition.c:srand48(173).
11
+ *
12
+ * @see lib/ortho/partition.c
13
+ */
14
+
15
+ import { srand48, drand48 } from "../common/random.js";
16
+ import type { OrthoBox, OrthoPoint, Cell } from "./types.js";
17
+ import {
18
+ constructTrapezoids, fpEqual, greaterThan, isValidTrap, C_EPS, equalTo,
19
+ } from "./trapezoid.js";
20
+ import type { SegmentT, TrapT } from "./trapezoid.js";
21
+
22
+ /** Fixed RNG seed — matches lib/ortho/partition.c:srand48(173) */
23
+ const SEED = 173;
24
+
25
+ export { SEED };
26
+
27
+ const NPOINTS = 4;
28
+
29
+ /** @see lib/ortho/partition.c:#define TR_FROM_UP/TR_FROM_DN */
30
+ const TR_FROM_UP = 1;
31
+ const TR_FROM_DN = 2;
32
+
33
+ class PartitionHelper {
34
+ /** @see lib/common/geomprocs.h:perp — r.x = -p.y, r.y = p.x */
35
+ static perp(p: OrthoPoint): OrthoPoint {
36
+ return { x: -p.y, y: p.x };
37
+ }
38
+
39
+ static rectIntersect(r0: OrthoBox, r1: OrthoBox): OrthoBox | null {
40
+ const llx = Math.max(r0.LL.x, r1.LL.x);
41
+ const urx = Math.min(r0.UR.x, r1.UR.x);
42
+ const lly = Math.max(r0.LL.y, r1.LL.y);
43
+ const ury = Math.min(r0.UR.y, r1.UR.y);
44
+ if (llx >= urx || lly >= ury) return null;
45
+ return { LL: { x: llx, y: lly }, UR: { x: urx, y: ury } };
46
+ }
47
+
48
+ static convert(bb: OrthoBox, flip: boolean, ccw: boolean): OrthoPoint[] {
49
+ const pts: OrthoPoint[] = [
50
+ { ...bb.LL },
51
+ ccw ? { x: bb.UR.x, y: bb.LL.y } : { x: bb.LL.x, y: bb.UR.y },
52
+ { ...bb.UR },
53
+ ccw ? { x: bb.LL.x, y: bb.UR.y } : { x: bb.UR.x, y: bb.LL.y },
54
+ ];
55
+ if (flip) return pts.map(PartitionHelper.perp);
56
+ return pts;
57
+ }
58
+
59
+ static store(seg: SegmentT[], first: number, pts: OrthoPoint[]): number {
60
+ const last = first + NPOINTS - 1;
61
+ for (let i = first, j = 0; i <= last; i++, j++) {
62
+ seg[i].next = i === first ? first + 1 : i === last ? first : i + 1;
63
+ seg[i].prev = i === first ? last : i - 1;
64
+ seg[i].isInserted = false;
65
+ seg[i].v0 = { ...pts[j] };
66
+ seg[seg[i].prev].v1 = { ...pts[j] };
67
+ }
68
+ return last + 1;
69
+ }
70
+
71
+ static genSegments(cells: Cell[], bb: OrthoBox, flip: boolean): SegmentT[] {
72
+ const nsegs = 4 * (cells.length + 1);
73
+ const seg: SegmentT[] = [];
74
+ for (let i = 0; i <= nsegs; i++) {
75
+ seg.push({
76
+ v0: { x: 0, y: 0 }, v1: { x: 0, y: 0 },
77
+ isInserted: false, root0: 0, root1: 0, next: 0, prev: 0,
78
+ });
79
+ }
80
+ let i = 1;
81
+ i = PartitionHelper.store(seg, i, PartitionHelper.convert(bb, flip, true));
82
+ for (const cell of cells) {
83
+ i = PartitionHelper.store(seg, i, PartitionHelper.convert(cell.bb, flip, false));
84
+ }
85
+ return seg;
86
+ }
87
+
88
+ /**
89
+ * Generate a random permutation of the segments 1..n, drawing from the
90
+ * process-global POSIX drand48 stream (seeded by partition's srand48).
91
+ * @see lib/ortho/partition.c:generateRandomOrdering
92
+ */
93
+ static generateRandomOrdering(n: number): number[] {
94
+ const permute: number[] = [];
95
+ for (let i = 0; i < n; i++) permute.push(i + 1);
96
+ for (let i = 0; i < n; i++) {
97
+ // C: j = (size_t)((double)i + drand48() * (double)(n - i));
98
+ const j = Math.floor(i + drand48() * (n - i));
99
+ if (j !== i) {
100
+ const tmp = permute[i]; permute[i] = permute[j]; permute[j] = tmp;
101
+ }
102
+ }
103
+ return permute;
104
+ }
105
+
106
+ /**
107
+ * Build the box for a rectangular trapezoid (un-flipping the perp frame
108
+ * for the vertical pass). Caller has already verified the rect condition.
109
+ * @see lib/ortho/partition.c:traverse_polygon (box block)
110
+ */
111
+ static mkTrapBox(t: TrapT, seg: SegmentT[], flip: boolean): OrthoBox {
112
+ if (flip) {
113
+ return {
114
+ LL: { x: t.lo.y, y: -seg[t.rseg].v0.x },
115
+ UR: { x: t.hi.y, y: -seg[t.lseg].v0.x },
116
+ };
117
+ }
118
+ return {
119
+ LL: { x: seg[t.lseg].v0.x, y: t.lo.y },
120
+ UR: { x: seg[t.rseg].v0.x, y: t.hi.y },
121
+ };
122
+ }
123
+
124
+ /**
125
+ * True if the (triangular) trapezoid lies inside the polygon — used to
126
+ * locate the traversal start trapezoid.
127
+ * @see lib/ortho/partition.c:inside_polygon
128
+ */
129
+ static insidePolygon(t: TrapT, seg: SegmentT[]): boolean {
130
+ if (!t.isValid) return false;
131
+ if (t.lseg <= 0 || t.rseg <= 0) return false;
132
+ const triangle =
133
+ (!isValidTrap(t.u0) && !isValidTrap(t.u1)) ||
134
+ (!isValidTrap(t.d0) && !isValidTrap(t.d1));
135
+ if (triangle) return greaterThan(seg[t.rseg].v1, seg[t.rseg].v0);
136
+ return false;
137
+ }
138
+
139
+ /**
140
+ * Determines the ordered list of (child trapezoid, direction) pairs that
141
+ * `traverse_polygon` recurses into for trapezoid `t`, given the `from`/
142
+ * `dir` it was entered with. This is the C function's full branch table
143
+ * (partition.c:400-621) minus the monotone-chain bookkeeping
144
+ * (`make_new_monotone_poly`/`mcur`/`mnew`/`vert`/`mon`), which is provably
145
+ * dead for box output — `decomp` boxes depend only on trap geometry and
146
+ * `flip`, never on the chain state — but the CALL ORDER of children is
147
+ * live: it determines maze-cell construction order downstream (mkMaze →
148
+ * createSEdges → snode adjEdgeList), which is the tie-break for equal-cost
149
+ * Dijkstra corridors in ortho edge routing.
150
+ * @see lib/ortho/partition.c:traverse_polygon
151
+ */
152
+ static childOrder(t: TrapT, seg: SegmentT[], from: number, dir: number): [number, number][] {
153
+ const UP = TR_FROM_UP; const DN = TR_FROM_DN;
154
+ const { u0, u1, d0, d1 } = t;
155
+ if (!isValidTrap(u0) && !isValidTrap(u1)) {
156
+ if (isValidTrap(d0) && isValidTrap(d1)) { // downward opening triangle
157
+ if (from === d1) return [[d1, UP], [d0, UP]];
158
+ return [[d0, UP], [d1, UP]];
159
+ }
160
+ return [[u0, DN], [u1, DN], [d0, UP], [d1, UP]]; // just traverse all neighbours
161
+ }
162
+ if (!isValidTrap(d0) && !isValidTrap(d1)) {
163
+ if (isValidTrap(u0) && isValidTrap(u1)) { // upward opening triangle
164
+ if (from === u1) return [[u1, DN], [u0, DN]];
165
+ return [[u0, DN], [u1, DN]];
166
+ }
167
+ return [[u0, DN], [u1, DN], [d0, UP], [d1, UP]]; // just traverse all neighbours
168
+ }
169
+ if (isValidTrap(u0) && isValidTrap(u1)) {
170
+ if (isValidTrap(d0) && isValidTrap(d1)) { // downward + upward cusps
171
+ if ((dir === DN && d1 === from) || (dir === UP && u1 === from)) {
172
+ return [[u1, DN], [d1, UP], [u0, DN], [d0, UP]];
173
+ }
174
+ return [[u0, DN], [d0, UP], [u1, DN], [d1, UP]];
175
+ }
176
+ // only downward cusp
177
+ if (equalTo(t.lo, seg[t.lseg].v1)) {
178
+ if (dir === UP && u0 === from) return [[u0, DN], [d0, UP], [u1, DN], [d1, UP]];
179
+ return [[u1, DN], [d0, UP], [d1, UP], [u0, DN]];
180
+ }
181
+ if (dir === UP && u1 === from) return [[u1, DN], [d1, UP], [d0, UP], [u0, DN]];
182
+ return [[u0, DN], [d0, UP], [d1, UP], [u1, DN]];
183
+ }
184
+ // no downward cusp (is_valid_trap(u0) || is_valid_trap(u1), always true here)
185
+ if (isValidTrap(d0) && isValidTrap(d1)) { // only upward cusp
186
+ if (equalTo(t.hi, seg[t.lseg].v0)) {
187
+ if (!(dir === DN && d0 === from)) return [[u1, DN], [d1, UP], [u0, DN], [d0, UP]];
188
+ return [[d0, UP], [u0, DN], [u1, DN], [d1, UP]];
189
+ }
190
+ if (dir === DN && d1 === from) return [[d1, UP], [u1, DN], [u0, DN], [d0, UP]];
191
+ return [[u0, DN], [d0, UP], [u1, DN], [d1, UP]];
192
+ }
193
+ // no cusp
194
+ if (equalTo(t.hi, seg[t.lseg].v0) && equalTo(t.lo, seg[t.rseg].v0)) {
195
+ if (dir === UP) return [[u0, DN], [u1, DN], [d1, UP], [d0, UP]];
196
+ return [[d1, UP], [d0, UP], [u0, DN], [u1, DN]];
197
+ }
198
+ if (equalTo(t.hi, seg[t.rseg].v1) && equalTo(t.lo, seg[t.lseg].v1)) {
199
+ if (dir === UP) return [[u0, DN], [u1, DN], [d1, UP], [d0, UP]];
200
+ return [[d1, UP], [d0, UP], [u0, DN], [u1, DN]];
201
+ }
202
+ return [[u0, DN], [d0, UP], [u1, DN], [d1, UP]]; // no split possible
203
+ }
204
+
205
+ /**
206
+ * Faithful port of monotonate_trapezoids' observable output: collect the
207
+ * rectangle for every trapezoid reachable from the inside-polygon start
208
+ * via u0/u1/d0/d1 adjacency, IN C's EXACT traverse_polygon call order.
209
+ *
210
+ * Realized as an explicit-stack DFS (not real recursion, to stay
211
+ * stack-safe on large polygons per
212
+ * .agent-notes/triangulation-recursion-stack-overflow.md) that preserves
213
+ * C's preorder emission sequence: children are pushed in REVERSE of
214
+ * `childOrder`'s call order so LIFO pop visits them in forward order,
215
+ * fully exploring each child's subtree (via its own pushed descendants)
216
+ * before returning to the next sibling — exactly mirroring recursive DFS.
217
+ *
218
+ * @see lib/ortho/partition.c:monotonate_trapezoids, traverse_polygon
219
+ */
220
+ static monotonateTrapezoids(tr: TrapT[], seg: SegmentT[], flip: boolean): OrthoBox[] {
221
+ const decomp: OrthoBox[] = [];
222
+ let trStart = -1;
223
+ for (let j = 0; j < tr.length; j++) {
224
+ if (PartitionHelper.insidePolygon(tr[j], seg)) { trStart = j; break; }
225
+ }
226
+ if (trStart < 0) return decomp;
227
+
228
+ let startFrom: number; let startDir: number;
229
+ if (isValidTrap(tr[trStart].u0)) { startFrom = tr[trStart].u0; startDir = TR_FROM_UP; }
230
+ else if (isValidTrap(tr[trStart].d0)) { startFrom = tr[trStart].d0; startDir = TR_FROM_DN; }
231
+ else return decomp;
232
+
233
+ const visited = new Array<boolean>(tr.length).fill(false);
234
+ // Stack items are [trnum, from, dir] — mirrors the recursive call's
235
+ // (trnum, from, dir) parameters exactly.
236
+ const stack: [number, number, number][] = [[trStart, startFrom, startDir]];
237
+ while (stack.length > 0) {
238
+ const [trnum, from, dir] = stack.pop()!;
239
+ if (!isValidTrap(trnum) || visited[trnum]) continue;
240
+ visited[trnum] = true;
241
+ const t = tr[trnum];
242
+ if (
243
+ t.hi.y > t.lo.y + C_EPS &&
244
+ fpEqual(seg[t.lseg].v0.x, seg[t.lseg].v1.x) &&
245
+ fpEqual(seg[t.rseg].v0.x, seg[t.rseg].v1.x)
246
+ ) {
247
+ decomp.push(PartitionHelper.mkTrapBox(t, seg, flip));
248
+ }
249
+ const children = PartitionHelper.childOrder(t, seg, from, dir);
250
+ for (let i = children.length - 1; i >= 0; i--) {
251
+ const [child, childDir] = children[i];
252
+ stack.push([child, trnum, childDir]);
253
+ }
254
+ }
255
+ return decomp;
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Partition free space around cells into rectangular tiles.
261
+ * @see lib/ortho/partition.c:partition
262
+ */
263
+ export function partition(cells: Cell[], bb: OrthoBox): OrthoBox[] {
264
+ const h = PartitionHelper;
265
+ const nsegs = 4 * (cells.length + 1);
266
+
267
+ // C: srand48(173) once, then two generateRandomOrdering calls share the
268
+ // continuing drand48 stream (partition.c:737-763).
269
+ srand48(SEED);
270
+
271
+ const hSeg = h.genSegments(cells, bb, false);
272
+ const hPerm = h.generateRandomOrdering(nsegs);
273
+ const hTr = constructTrapezoids(nsegs, hSeg, hPerm);
274
+ const hDecomp = h.monotonateTrapezoids(hTr, hSeg, false);
275
+
276
+ const vSeg = h.genSegments(cells, bb, true);
277
+ const vPerm = h.generateRandomOrdering(nsegs);
278
+ const vTr = constructTrapezoids(nsegs, vSeg, vPerm);
279
+ const vDecomp = h.monotonateTrapezoids(vTr, vSeg, true);
280
+
281
+ const result: OrthoBox[] = [];
282
+ for (const v of vDecomp) {
283
+ for (const hb of hDecomp) {
284
+ const isect = h.rectIntersect(v, hb);
285
+ if (isect) result.push(isect);
286
+ }
287
+ }
288
+ return result;
289
+ }
290
+
291
+ /**
292
+ * Test-only accessor for `PartitionHelper.childOrder` — exposes the
293
+ * traverse_polygon branch-table transcription for direct unit testing
294
+ * without requiring a full trapezoidation pipeline to exercise each branch.
295
+ * @see PartitionHelper.childOrder
296
+ */
297
+ export function traverseChildOrderForTest(
298
+ t: TrapT, seg: SegmentT[], from: number, dir: number,
299
+ ): [number, number][] {
300
+ return PartitionHelper.childOrder(t, seg, from, dir);
301
+ }
302
+
303
+ export { TR_FROM_UP, TR_FROM_DN };
@@ -0,0 +1,119 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ /**
3
+ * Directed graph with DFS-based topological sort.
4
+ *
5
+ * Faithful port of lib/ortho/rawgraph.c.
6
+ * @see lib/ortho/rawgraph.c
7
+ * @see lib/ortho/rawgraph.h
8
+ */
9
+
10
+ import type { RawGraph, RawVertex } from "./types.js";
11
+
12
+ const UNSCANNED = 0;
13
+ const SCANNING = 1;
14
+ const SCANNED = 2;
15
+
16
+ /**
17
+ * Allocate a graph with n vertices and no edges.
18
+ * @see lib/ortho/rawgraph.c:make_graph
19
+ */
20
+ export function makeGraph(n: number): RawGraph {
21
+ const vertices: RawVertex[] = [];
22
+ for (let i = 0; i < n; i++) {
23
+ vertices.push({ color: UNSCANNED, topsortOrder: 0, adjList: [] });
24
+ }
25
+ return { nvs: n, vertices };
26
+ }
27
+
28
+ /**
29
+ * Release all memory associated with the graph.
30
+ * (No-op in TS — GC handles it; retained for API symmetry.)
31
+ * @see lib/ortho/rawgraph.c:free_graph
32
+ */
33
+ export function freeGraph(_g: RawGraph): void {
34
+ // GC handled
35
+ }
36
+
37
+ /**
38
+ * Insert a directed edge from v1 to v2 (if it doesn't exist yet).
39
+ * @see lib/ortho/rawgraph.c:insert_edge
40
+ */
41
+ export function insertEdge(g: RawGraph, v1: number, v2: number): void {
42
+ if (!edgeExists(g, v1, v2)) {
43
+ g.vertices[v1].adjList.push(v2);
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Remove any edge between v1 and v2 (either direction).
49
+ * @see lib/ortho/rawgraph.c:remove_redge
50
+ */
51
+ export function removeRedge(g: RawGraph, v1: number, v2: number): void {
52
+ g.vertices[v1].adjList = g.vertices[v1].adjList.filter((x) => x !== v2);
53
+ g.vertices[v2].adjList = g.vertices[v2].adjList.filter((x) => x !== v1);
54
+ }
55
+
56
+ /**
57
+ * Test if there is a directed edge FROM v1 TO v2.
58
+ * @see lib/ortho/rawgraph.c:edge_exists
59
+ */
60
+ export function edgeExists(g: RawGraph, v1: number, v2: number): boolean {
61
+ return g.vertices[v1].adjList.includes(v2);
62
+ }
63
+
64
+ /**
65
+ * Recursive DFS visit used by topological sort.
66
+ * @see lib/ortho/rawgraph.c:DFS_visit
67
+ */
68
+ function dfsVisit(
69
+ g: RawGraph,
70
+ v: number,
71
+ time: number,
72
+ sp: number[],
73
+ ): number {
74
+ const vp = g.vertices[v];
75
+ vp.color = SCANNING;
76
+ const adj = vp.adjList;
77
+ time = time + 1;
78
+
79
+ for (let i = 0; i < adj.length; i++) {
80
+ const id = adj[i];
81
+ if (g.vertices[id].color === UNSCANNED) {
82
+ time = dfsVisit(g, id, time, sp);
83
+ }
84
+ }
85
+ vp.color = SCANNED;
86
+ sp.push(v);
87
+ return time + 1;
88
+ }
89
+
90
+ /**
91
+ * Topologically sort the directed graph.
92
+ * After this call, each vertex has topsortOrder set.
93
+ * @see lib/ortho/rawgraph.c:top_sort
94
+ */
95
+ export function topSort(g: RawGraph): void {
96
+ let time = 0;
97
+ let count = 0;
98
+
99
+ if (g.nvs === 0) return;
100
+ if (g.nvs === 1) {
101
+ g.vertices[0].topsortOrder = count;
102
+ return;
103
+ }
104
+
105
+ const sp: number[] = [];
106
+ sp.length = 0;
107
+
108
+ for (let i = 0; i < g.nvs; i++) {
109
+ if (g.vertices[i].color === UNSCANNED) {
110
+ time = dfsVisit(g, i, time, sp);
111
+ }
112
+ }
113
+
114
+ while (sp.length > 0) {
115
+ const v = sp.pop() as number;
116
+ g.vertices[v].topsortOrder = count;
117
+ count++;
118
+ }
119
+ }
@@ -0,0 +1,283 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ /**
3
+ * Search graph and Dijkstra shortest path for ortho edge routing.
4
+ *
5
+ * Faithful port of lib/ortho/sgraph.c.
6
+ * Distance values stored NEGATED in nVal while in the priority queue.
7
+ * When a node is finalized (popped), nVal is flipped positive.
8
+ * UNSEEN = Number.MIN_SAFE_INTEGER (mirrors C INT_MIN).
9
+ *
10
+ * @see lib/ortho/sgraph.c
11
+ * @see lib/ortho/sgraph.h
12
+ */
13
+
14
+ import type { SGraph, SNode, SEdge, Cell } from "./types.js";
15
+ import { pqGen, pqFree, pqInit, pqInsert, pqRemove, pqUpdate } from "./fpq.js";
16
+ import type { Pq } from "./fpq.js";
17
+
18
+ /** Sentinel value for unseen nodes. @see lib/ortho/sgraph.c:UNSEEN */
19
+ export const UNSEEN = Number.MIN_SAFE_INTEGER;
20
+
21
+ // ─── Graph lifecycle ─────────────────────────────────────────────────────────
22
+
23
+ /**
24
+ * Allocate a search graph with capacity for nnodes nodes (+2 dummy slots).
25
+ * @see lib/ortho/sgraph.c:createSGraph
26
+ */
27
+ export function createSGraph(nnodes: number): SGraph {
28
+ const nodes: SNode[] = [];
29
+ for (let i = 0; i < nnodes; i++) {
30
+ nodes.push(makeSNode(i));
31
+ }
32
+ return {
33
+ nnodes: 0,
34
+ nedges: 0,
35
+ saveNnodes: 0,
36
+ saveNedges: 0,
37
+ nodes,
38
+ edges: [],
39
+ };
40
+ }
41
+
42
+ /** Allocate a blank SNode at the given index. */
43
+ function makeSNode(index: number): SNode {
44
+ return {
45
+ nVal: UNSEEN,
46
+ nIdx: 0,
47
+ nDad: null,
48
+ nEdge: null,
49
+ nAdj: 0,
50
+ saveNAdj: 0,
51
+ cells: [null, null],
52
+ adjEdgeList: [],
53
+ index,
54
+ isVert: false,
55
+ x: 0,
56
+ y: 0,
57
+ };
58
+ }
59
+
60
+ /**
61
+ * Free the graph. (No-op in TS — GC handles it.)
62
+ * @see lib/ortho/sgraph.c:freeSGraph
63
+ */
64
+ export function freeSGraph(_g: SGraph): void {
65
+ // GC handled
66
+ }
67
+
68
+ /**
69
+ * Initialize per-node adjacency list storage.
70
+ * Regular nodes get 6 slots; the two dummy nodes get maxdeg slots each.
71
+ * @see lib/ortho/sgraph.c:initSEdges
72
+ */
73
+ export function initSEdges(g: SGraph, maxdeg: number): void {
74
+ // The two extra dummy nodes at indices nnodes and nnodes+1 need maxdeg slots
75
+ const total = g.nnodes + 2;
76
+ while (g.nodes.length < total) {
77
+ g.nodes.push(makeSNode(g.nodes.length));
78
+ }
79
+ // ONE contiguous buffer, exactly as C (sgraph.c:initSEdges): 6 int slots per
80
+ // regular node, `maxdeg` per dummy. Each node's adjEdgeList is a subarray view
81
+ // from its offset to the buffer END — so addEdgeToNode writing past a node's
82
+ // region spills forward into the next node's slots (and persists across reset),
83
+ // matching C's unbounded addEdgeToNode into the shared allocation.
84
+ const buf = new Int32Array(6 * g.nnodes + 2 * maxdeg);
85
+ g.adjBuf = buf;
86
+ let off = 0;
87
+ for (let i = 0; i < g.nnodes; i++) {
88
+ g.nodes[i].adjEdgeList = buf.subarray(off);
89
+ off += 6;
90
+ }
91
+ for (let i = g.nnodes; i < g.nnodes + 2; i++) {
92
+ g.nodes[i].adjEdgeList = buf.subarray(off);
93
+ off += maxdeg;
94
+ }
95
+ // pre-allocate edge array capacity
96
+ g.edges = new Array<SEdge>(3 * g.nnodes + maxdeg);
97
+ g.nedges = 0;
98
+ }
99
+
100
+ // ─── Node / edge creation ────────────────────────────────────────────────────
101
+
102
+ /**
103
+ * Append a new node to the graph and return it.
104
+ * @see lib/ortho/sgraph.c:createSNode
105
+ */
106
+ export function createSNode(g: SGraph): SNode {
107
+ const np = g.nodes[g.nnodes];
108
+ np.index = g.nnodes;
109
+ g.nnodes++;
110
+ return np;
111
+ }
112
+
113
+ /**
114
+ * Create an edge between v1 and v2 with the given weight.
115
+ * @see lib/ortho/sgraph.c:createSEdge
116
+ */
117
+ export function createSEdge(
118
+ g: SGraph,
119
+ v1: SNode,
120
+ v2: SNode,
121
+ wt: number,
122
+ ): SEdge {
123
+ const idx = g.nedges++;
124
+ const e: SEdge = { weight: wt, cnt: 0, v1: v1.index, v2: v2.index };
125
+ g.edges[idx] = e;
126
+ // C addEdgeToNode (sgraph.c:45) writes at index n_adj then increments, so
127
+ // after reset() restores n_adj to save_n_adj the next createSEdge OVERWRITES
128
+ // the stale temp-edge slot. Using push() here would instead append beyond
129
+ // nAdj, leaving the stale edge at index nAdj for the next edge's shortPath to
130
+ // follow (corrupts the 2nd+ edge sharing a boundary node). Index-assign.
131
+ v1.adjEdgeList[v1.nAdj] = idx;
132
+ v1.nAdj++;
133
+ v2.adjEdgeList[v2.nAdj] = idx;
134
+ v2.nAdj++;
135
+ return e;
136
+ }
137
+
138
+ // ─── State save / restore ────────────────────────────────────────────────────
139
+
140
+ /**
141
+ * Save the current graph state (node/edge counts + adjacency counts).
142
+ * @see lib/ortho/sgraph.c:gsave
143
+ */
144
+ export function gsave(g: SGraph): void {
145
+ g.saveNnodes = g.nnodes;
146
+ g.saveNedges = g.nedges;
147
+ for (let i = 0; i < g.nnodes; i++) {
148
+ g.nodes[i].saveNAdj = g.nodes[i].nAdj;
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Restore the graph to the last saved state and clear the two dummy nodes.
154
+ * @see lib/ortho/sgraph.c:reset
155
+ */
156
+ export function reset(g: SGraph): void {
157
+ g.nnodes = g.saveNnodes;
158
+ g.nedges = g.saveNedges;
159
+ for (let i = 0; i < g.nnodes; i++) {
160
+ g.nodes[i].nAdj = g.nodes[i].saveNAdj;
161
+ }
162
+ // Zero the two dummy nodes' adjacency. createSEdge index-assigns at nAdj
163
+ // (like C addEdgeToNode), so the next addNodeEdges overwrites stale slots —
164
+ // no adjEdgeList truncation needed (matches sgraph.c:reset exactly).
165
+ for (let i = g.nnodes; i < g.nnodes + 2; i++) {
166
+ if (g.nodes[i]) g.nodes[i].nAdj = 0;
167
+ }
168
+ }
169
+
170
+ // ─── Dijkstra ────────────────────────────────────────────────────────────────
171
+
172
+ /** Return the other endpoint of edge e from node n. */
173
+ function adjacentNode(g: SGraph, e: SEdge, n: SNode): SNode {
174
+ return e.v1 === n.index ? g.nodes[e.v2] : g.nodes[e.v1];
175
+ }
176
+
177
+ /** shortPath inner adjacency loop; true on PQ overflow. Extracted only for the
178
+ * CCN cap — side-effect order preserved. @see lib/ortho/sgraph.c:shortPath */
179
+ function relaxNeighbors(pq: Pq, g: SGraph, n: SNode): boolean {
180
+ for (let y = 0; y < n.nAdj; y++) {
181
+ const e = g.edges[n.adjEdgeList[y]];
182
+ const adjn = adjacentNode(g, e, n);
183
+ // C uses `< 0` exactly (sgraph.c:164): skips finalized nodes (nVal >= 0).
184
+ if (adjn.nVal < 0) {
185
+ // C sgraph.h:27 n_val is `int`; sgraph.c:142 `int d` truncates the sum
186
+ // toward zero on assignment every relax step (not just the final total).
187
+ // d is always <= 0 here, so Math.trunc matches C's toward-zero int cast
188
+ // exactly (unlike Math.floor, which rounds negatives away from zero).
189
+ const d = Math.trunc(-(n.nVal + e.weight));
190
+ if (adjn.nVal === UNSEEN) {
191
+ adjn.nVal = d;
192
+ if (pqInsert(pq, adjn) !== 0) return true;
193
+ adjn.nDad = n;
194
+ adjn.nEdge = e;
195
+ } else if (adjn.nVal < d) {
196
+ pqUpdate(pq, adjn, d);
197
+ adjn.nDad = n;
198
+ adjn.nEdge = e;
199
+ }
200
+ }
201
+ }
202
+ return false;
203
+ }
204
+
205
+ /** Dijkstra shortest path from `from` to `to`; 0 on success, 1 on PQ overflow.
206
+ * Distances stored NEGATED while pending, flipped positive when finalized.
207
+ * @see lib/ortho/sgraph.c:shortPath */
208
+ export function shortPath(pq: Pq, g: SGraph, from: SNode, to: SNode): number {
209
+ // mark all nodes unseen
210
+ for (let x = 0; x < g.nnodes; x++) {
211
+ g.nodes[x].nVal = UNSEEN;
212
+ }
213
+
214
+ pqInit(pq);
215
+ if (pqInsert(pq, from) !== 0) return 1;
216
+ from.nDad = null;
217
+ from.nVal = 0;
218
+
219
+ let n: SNode | null;
220
+ while ((n = pqRemove(pq)) !== null) {
221
+ n.nVal *= -1; // finalize: flip to positive
222
+ if (n === to) break;
223
+ if (relaxNeighbors(pq, g, n)) return 1;
224
+ }
225
+ return 0;
226
+ }
227
+
228
+ /**
229
+ * Generate a fresh priority queue sized for the search graph.
230
+ * @see lib/ortho/sgraph.c shortPath preamble
231
+ */
232
+ export function pqGenForGraph(g: SGraph): Pq {
233
+ return pqGen(g.nnodes + 2);
234
+ }
235
+
236
+ export { pqFree };
237
+
238
+ // ─── Node/edge helpers used by maze.ts / ortho/index.ts ──────────────────────
239
+
240
+ /**
241
+ * Add temporary edges from a node cell to the search graph.
242
+ * Used to attach source/dest nodes before each Dijkstra call.
243
+ * @see lib/ortho/ortho.c:addNodeEdges
244
+ */
245
+ export function addNodeEdges(
246
+ sg: SGraph,
247
+ cp: Cell,
248
+ np: SNode,
249
+ ): void {
250
+ for (let i = 0; i < cp.nsides; i++) {
251
+ const onp = cp.sides[i];
252
+ if (onp !== null) {
253
+ createSEdge(sg, np, onp, 0);
254
+ }
255
+ }
256
+ sg.nnodes++;
257
+ np.cells[0] = cp;
258
+ np.cells[1] = cp;
259
+ }
260
+
261
+ /**
262
+ * Add temporary loop edges (self-loop at a single cell).
263
+ * @see lib/ortho/ortho.c:addLoop
264
+ */
265
+ export function addLoop(
266
+ sg: SGraph,
267
+ cp: Cell,
268
+ dp: SNode,
269
+ sp: SNode,
270
+ ): void {
271
+ for (let i = 0; i < cp.nsides; i++) {
272
+ const onp = cp.sides[i];
273
+ if (onp === null) continue;
274
+ if (onp.isVert) continue;
275
+ const onTop = onp.cells[0] === cp;
276
+ if (onTop) {
277
+ createSEdge(sg, sp, onp, 0);
278
+ } else {
279
+ createSEdge(sg, dp, onp, 0);
280
+ }
281
+ }
282
+ sg.nnodes += 2;
283
+ }