@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,237 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Vertex computation helpers for polygon shape initialisation.
5
+ *
6
+ * @see lib/common/shapes.c:poly_init
7
+ */
8
+
9
+ import type { PolygonT } from './types.js';
10
+ import type { Point } from '../model/geom.js';
11
+ import { polygonVertices, polygonRingOffsets, GAP } from './poly-sizing.js';
12
+ import { CYLINDER, STAR } from './shapeData.js';
13
+
14
+ /** Compute vertices for an ellipse/circle (sides <= 2). */
15
+ export function ellipseVertices(w: number, h: number): Point[] {
16
+ return [
17
+ { x: -w / 2, y: -h / 2 },
18
+ { x: w / 2, y: h / 2 },
19
+ ];
20
+ }
21
+
22
+ /**
23
+ * Cylinder control polygon: 19 Bézier control points (origin-centred), ported
24
+ * verbatim from C's cylinder_vertices. Drawn as a bezier outline, not a polygon.
25
+ * @see lib/common/shapes.c:4159 cylinder_vertices
26
+ */
27
+ export function cylinderVertices(w: number, h: number): Point[] {
28
+ const x = w / 2, y = h / 2, yr = h / 11;
29
+ const r = (1 - 0.551784) * yr;
30
+ const yflip = (p: Point): Point => ({ x: p.x, y: -p.y });
31
+ // v0..v6: top-right corner, top cap arc, top-left corner.
32
+ const v: Point[] = [
33
+ { x, y: y - yr }, { x, y: y - r }, { x: 0.551784 * x, y },
34
+ { x: 0, y }, { x: -0.551784 * x, y }, { x: -x, y: y - r }, { x: -x, y: y - yr },
35
+ ];
36
+ v.push(v[6]!, { x: -x, y: yr - y }); // v7=v6, v8 (left side down)
37
+ v.push(v[8]!); // v9=v8
38
+ for (let k = 5; k >= 0; k--) v.push(yflip(v[k]!)); // v10..v15: bottom = yflip(v5..v0)
39
+ v.push(v[15]!, v[0]!, v[0]!); // v16=v15, v17=v18=v0
40
+ return v;
41
+ }
42
+
43
+ /**
44
+ * Compute vertices for a simple box (sides == 4, no distortion/skew).
45
+ * Order matches C poly_init: top-right → top-left → bottom-left → bottom-right.
46
+ * @see lib/common/shapes.c:poly_init
47
+ */
48
+ export function boxVertices(w: number, h: number, orientation = 0): Point[] {
49
+ // C computes vertices[0] with the orientation rotation, then forces the other
50
+ // three corners symmetric about it. For a box, orientation is a multiple of 90
51
+ // (the isBox test), so vertices[0] steps TR->TL->BL->BR as orientation goes
52
+ // 0->90->180->270 — same rectangle, different starting corner (hence
53
+ // structural-match, not diverged). orientation=0 is the fixed order below.
54
+ // @see lib/common/shapes.c:poly_init (2244-2268, isBox symmetry)
55
+ const corners: Point[] = [
56
+ { x: w / 2, y: h / 2 }, // TR — orientation 0
57
+ { x: -w / 2, y: h / 2 }, // TL — orientation 90
58
+ { x: -w / 2, y: -h / 2 }, // BL — orientation 180
59
+ { x: w / 2, y: -h / 2 }, // BR — orientation 270
60
+ ];
61
+ const k = ((Math.round(orientation / 90) % 4) + 4) % 4;
62
+ const p = corners[k]!;
63
+ return [
64
+ { x: p.x, y: p.y },
65
+ { x: -p.x, y: p.y },
66
+ { x: -p.x, y: -p.y },
67
+ { x: p.x, y: -p.y },
68
+ ];
69
+ }
70
+
71
+ /**
72
+ * Compute vertices for a regular polygon with arbitrary sides.
73
+ *
74
+ * Starting angle matches C poly_init: first vertex at 3π/n - π/2
75
+ * (top-right for n=4, top for n=3).
76
+ * @see lib/common/shapes.c:poly_init (polygon vertex loop)
77
+ */
78
+ export function generalPolyVertices(poly: PolygonT, w: number, h: number): Point[] {
79
+ // C computes the unit ring (distort/skew/orient), then scales so its
80
+ // extents exactly span the node box. @see shapes.c:poly_init (scale)
81
+ const { verts, xmax, ymax } = polygonVertices(
82
+ { x: w, y: h },
83
+ {
84
+ sides: poly.sides,
85
+ orientation: poly.orientation,
86
+ distortion: poly.distortion,
87
+ skew: poly.skew,
88
+ },
89
+ false,
90
+ );
91
+ const sx = xmax !== 0 ? w / (2 * xmax) : 1;
92
+ const sy = ymax !== 0 ? h / (2 * ymax) : 1;
93
+ return verts.map((v) => ({ x: v.x * sx, y: v.y * sy }));
94
+ }
95
+
96
+ /**
97
+ * Concentric ellipse rings, innermost first (C vertex layout
98
+ * vertices[i + j*sides], sides = 2). The node box spans the OUTERMOST
99
+ * ring; inner rings shrink by GAP per ring — the inverse of poly_init,
100
+ * which grows bb to the outermost ring after placing rings outward.
101
+ * @see lib/common/shapes.c:poly_init (ellipse peripheries, :2173-2184)
102
+ */
103
+ function ellipseRings(w: number, h: number, peripheries: number): Point[] {
104
+ const out: Point[] = [];
105
+ for (let j = 0; j < peripheries; j++) {
106
+ const inset = (peripheries - 1 - j) * GAP;
107
+ out.push(...ellipseVertices(w - 2 * inset, h - 2 * inset));
108
+ }
109
+ return out;
110
+ }
111
+
112
+ /**
113
+ * Concentric box rings, innermost first. C runs the SAME bisector periphery
114
+ * loop for boxes as for general polygons (isBox only forces base-vertex
115
+ * symmetry, not a different periphery walk). The per-vertex GAP offset follows
116
+ * the base ring's vertex winding, so orientation 0/180 (counter-clockwise) steps
117
+ * OUTWARD while 90/270 (clockwise) steps INWARD — which flips the two rings'
118
+ * draw order. The fixed-inset form (always innermost-first) matches only the
119
+ * outward case; it reversed the ring order for 90/270 boxes (polypoly under
120
+ * patchwork, 9012/9016). With the base box we reproduce C exactly for every
121
+ * orientation. Without a base (no-measurer fallback) we keep the inset form.
122
+ * @see lib/common/shapes.c:poly_init (peripheries bisector loop)
123
+ */
124
+ function boxRings(
125
+ w: number,
126
+ h: number,
127
+ peripheries: number,
128
+ orientation: number,
129
+ base?: { w: number; h: number },
130
+ ): Point[] {
131
+ if (peripheries <= 1 || base === undefined) {
132
+ const out: Point[] = [];
133
+ for (let j = 0; j < peripheries; j++) {
134
+ const inset = (peripheries - 1 - j) * GAP;
135
+ out.push(...boxVertices(w - 2 * inset, h - 2 * inset, orientation));
136
+ }
137
+ return out;
138
+ }
139
+ const inner = boxVertices(base.w, base.h, orientation);
140
+ const offs = polygonRingOffsets(inner, 4);
141
+ const rings: Point[][] = [inner];
142
+ for (let j = 1; j < peripheries; j++) {
143
+ rings.push(inner.map((v, i) => ({ x: v.x + j * offs[i]!.x, y: v.y + j * offs[i]!.y })));
144
+ }
145
+ return rings.flat();
146
+ }
147
+
148
+ /**
149
+ * General polygon rings, innermost first, in C's forward order: the
150
+ * base ring is scaled to the pre-growth box, then each further ring
151
+ * steps OUTWARD by the per-vertex bisector GAP offsets computed from
152
+ * the base ring's angles. Without a base box (no-measurer fallback)
153
+ * the node box is used directly, stepping inward — exact only for
154
+ * peripheries = 1.
155
+ * @see lib/common/shapes.c:poly_init (peripheries bisector loop)
156
+ */
157
+ function generalPolyRings(
158
+ poly: PolygonT,
159
+ box: { w: number; h: number; base?: { w: number; h: number } },
160
+ peripheries: number,
161
+ ): Point[] {
162
+ if (peripheries <= 1 || box.base === undefined) {
163
+ return generalPolyVertices(poly, box.w, box.h);
164
+ }
165
+ const inner = generalPolyVertices(poly, box.base.w, box.base.h);
166
+ const offs = polygonRingOffsets(inner, poly.sides);
167
+ const rings: Point[][] = [inner];
168
+ for (let j = 1; j < peripheries; j++) {
169
+ rings.push(inner.map((v, i) =>
170
+ ({ x: v.x + j * offs[i]!.x, y: v.y + j * offs[i]!.y })));
171
+ }
172
+ return rings.flat();
173
+ }
174
+
175
+ /**
176
+ * Star (5-pointed) base vertices: 10 points alternating an outer radius `r` and
177
+ * inner radius `r0`, shifted down by `offset`. The box is first scaled to the
178
+ * star aspect ratio (the `a < aspect` branch grows only the unused y extent).
179
+ * @see lib/common/shapes.c:star_vertices (alpha = PI/10)
180
+ */
181
+ export function starVertices(w: number, h: number): Point[] {
182
+ const alpha = Math.PI / 10;
183
+ const alpha2 = 2 * alpha, alpha3 = 3 * alpha, alpha4 = 2 * alpha2;
184
+ let szx = w;
185
+ const aspect = (1 + Math.sin(alpha3)) / (2 * Math.cos(alpha));
186
+ if (h / szx > aspect) szx = h / aspect;
187
+ const r = szx / (2 * Math.cos(alpha));
188
+ const r0 = (r * Math.cos(alpha) * Math.cos(alpha4)) / (Math.sin(alpha4) * Math.cos(alpha2));
189
+ const offset = (r * (1 - Math.sin(alpha3))) / 2;
190
+ const v: Point[] = [];
191
+ let theta = alpha;
192
+ for (let i = 0; i < 10; i += 2) {
193
+ v.push({ x: r * Math.cos(theta), y: r * Math.sin(theta) - offset });
194
+ theta += alpha2;
195
+ v.push({ x: r0 * Math.cos(theta), y: r0 * Math.sin(theta) - offset });
196
+ theta += alpha2;
197
+ }
198
+ return v;
199
+ }
200
+
201
+ /** Star periphery rings — like generalPolyRings but over the 10 star vertices. */
202
+ function starRings(
203
+ box: { w: number; h: number; base?: { w: number; h: number } },
204
+ peripheries: number,
205
+ ): Point[] {
206
+ if (peripheries <= 1 || box.base === undefined) return starVertices(box.w, box.h);
207
+ const inner = starVertices(box.base.w, box.base.h);
208
+ const offs = polygonRingOffsets(inner, 10);
209
+ const rings: Point[][] = [inner];
210
+ for (let j = 1; j < peripheries; j++) {
211
+ rings.push(inner.map((v, i) => ({ x: v.x + j * offs[i]!.x, y: v.y + j * offs[i]!.y })));
212
+ }
213
+ return rings.flat();
214
+ }
215
+
216
+ /** Choose vertex layout strategy based on polygon descriptor and size. */
217
+ export function computeVertices(
218
+ poly: PolygonT,
219
+ w: number,
220
+ h: number,
221
+ base?: { w: number; h: number },
222
+ ): Point[] {
223
+ const sides = poly.sides;
224
+ // Cylinder is a 19-point bezier control polygon, not a regular 19-gon.
225
+ if (poly.option.shape === CYLINDER) return cylinderVertices(w, h);
226
+ // C generates one ring even for peripheries=0 (outp >= 1); the draw
227
+ // loop is what skips it. @see lib/common/shapes.c:poly_init (outp)
228
+ const peripheries = Math.max(poly.peripheries, 1);
229
+ if (poly.option.shape === STAR) return starRings({ w, h, base }, peripheries);
230
+ if (sides <= 2) return ellipseRings(w, h, peripheries);
231
+ // C's isBox test: right angles only (diamond = orientation 45).
232
+ if (sides === 4 && Math.abs(poly.orientation % 90) < 0.5
233
+ && poly.distortion === 0 && poly.skew === 0) {
234
+ return boxRings(w, h, peripheries, poly.orientation, base);
235
+ }
236
+ return generalPolyRings(poly, { w, h, base }, peripheries);
237
+ }
@@ -0,0 +1,436 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * TypeScript port of lib/common/postproc.c — gv_postprocess (coordinate
5
+ * rotation + translation pass run after spline routing).
6
+ *
7
+ * addXLabels logic lives in xlabels-place.ts to keep this file under the
8
+ * 500-line limit. It is called from gvPostprocess at the C point
9
+ * (postproc.c:616 — after graph-label placement, before the bb adjustment).
10
+ *
11
+ * @see lib/common/postproc.c:gv_postprocess
12
+ * @see lib/common/postproc.c:map_point
13
+ * @see lib/common/postproc.c:translate_bb
14
+ * @see lib/common/postproc.c:translate_drawing
15
+ * @see lib/common/postproc.c:addXLabels
16
+ */
17
+
18
+ import type { Graph } from '../model/graph.js';
19
+ import type { Point, Box } from '../model/geom.js';
20
+ import { ccwrotatepf } from '../model/geom.js';
21
+ import type { ArrowDrawOp } from './arrows-types.js';
22
+ import { mapArrowOpPoints } from './arrows-shapes-util.js';
23
+ import type { TextlabelT } from './types.js';
24
+ import { gvNodesize } from './poly-sizing.js';
25
+ import {
26
+ RANKDIR_TB, RANKDIR_LR, RANKDIR_BT, RANKDIR_RL,
27
+ } from '../layout/dot/init.js';
28
+ import { addXLabels } from './xlabels-place.js';
29
+
30
+ /** Concentrated multi-edge duplicate — never drawn. @see lib/common/const.h:IGNORED */
31
+ const IGNORED_EDGE = 6;
32
+
33
+ // ---------------------------------------------------------------------------
34
+ // Module-level state (mirrors the C file-scope statics Rankdir, Flip, Offset)
35
+ // These are set once per gvPostprocess call and read by the helpers.
36
+ // @see lib/common/postproc.c:56-58
37
+ // ---------------------------------------------------------------------------
38
+
39
+ let Rankdir = 0;
40
+ let Offset: Point = { x: 0, y: 0 };
41
+
42
+ /** The edge-info shape map_edge reads/writes (spline, labels, arrow ops). */
43
+ interface EdgeArrowInfo {
44
+ spl?: { list: Array<{ list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }> };
45
+ label?: unknown;
46
+ xlabel?: unknown;
47
+ head_label?: unknown;
48
+ tail_label?: unknown;
49
+ headArrowOps?: ArrowDrawOp[];
50
+ tailArrowOps?: ArrowDrawOp[];
51
+ }
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // map_point
55
+ // @see lib/common/postproc.c:90-96
56
+ // ---------------------------------------------------------------------------
57
+
58
+ /**
59
+ * Apply the CCW rotation (Rankdir*90 degrees) then subtract Offset.
60
+ * @see lib/common/postproc.c:map_point
61
+ */
62
+ function mapPoint(p: Point): Point {
63
+ const r = ccwrotatepf(p, Rankdir * 90);
64
+ return { x: r.x - Offset.x, y: r.y - Offset.y };
65
+ }
66
+
67
+ // ---------------------------------------------------------------------------
68
+ // Label-position mapping helpers
69
+ // ---------------------------------------------------------------------------
70
+
71
+ /** Map pos on a TextlabelT in place if the label and its pos exist. */
72
+ function mapLabelPos(raw: unknown): void {
73
+ const lab = raw as TextlabelT | undefined;
74
+ if (lab?.pos !== undefined) lab.pos = mapPoint(lab.pos);
75
+ }
76
+
77
+ // ---------------------------------------------------------------------------
78
+ // Bezier / spline helpers
79
+ // @see lib/common/postproc.c:98-125 (map_edge)
80
+ // ---------------------------------------------------------------------------
81
+
82
+ /** Map all control points in one Bezier segment. */
83
+ function mapBezierPoints(bz: { list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }): void {
84
+ for (let k = 0; k < bz.list.length; k++) {
85
+ bz.list[k] = mapPoint(bz.list[k]);
86
+ }
87
+ if (bz.sflag) bz.sp = mapPoint(bz.sp);
88
+ if (bz.eflag) bz.ep = mapPoint(bz.ep);
89
+ }
90
+
91
+ /** Map all spline segments on an edge. */
92
+ function mapSpl(spl: { list: Array<{ list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }> }): void {
93
+ for (let j = 0; j < spl.list.length; j++) {
94
+ mapBezierPoints(spl.list[j]);
95
+ }
96
+ }
97
+
98
+ // ---------------------------------------------------------------------------
99
+ // map_edge
100
+ // @see lib/common/postproc.c:98-125
101
+ // ---------------------------------------------------------------------------
102
+
103
+ /** Rotate the stored arrow draw-ops for the rankdir transform.
104
+ * BT (180°) and RL (270°) are reflections (det = -1): they reverse polygon
105
+ * winding, so each polygon's vertices are reversed to match the order the C
106
+ * render-time generator produces. TB (0°) and LR (90°) are proper rotations
107
+ * (det = +1) and need no reversal. @see lib/common/postproc.c:map_edge
108
+ */
109
+ function mapArrowOps(ops: ArrowDrawOp[] | undefined): ArrowDrawOp[] | undefined {
110
+ if (!ops) return ops;
111
+ const isReflection = Rankdir === RANKDIR_BT || Rankdir === RANKDIR_RL;
112
+ return ops.map((op) => {
113
+ const m = mapArrowOpPoints(op, mapPoint);
114
+ if (isReflection && m.kind === 'polygon') return { ...m, points: [...m.points].reverse() };
115
+ return m;
116
+ });
117
+ }
118
+
119
+ /** The edge-info shape map_edge reads/writes (spline, labels, arrow ops). */
120
+ interface EdgeArrowInfo {
121
+ spl?: { list: Array<{ list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }> };
122
+ label?: unknown;
123
+ xlabel?: unknown;
124
+ head_label?: unknown;
125
+ tail_label?: unknown;
126
+ headArrowOps?: ArrowDrawOp[];
127
+ tailArrowOps?: ArrowDrawOp[];
128
+ }
129
+
130
+ /**
131
+ * Map spline control points, label positions, and pre-computed arrow draw-ops
132
+ * for one edge. The C port regenerates arrowheads at render time from the
133
+ * rotated ep/sp; this port pre-computes them during routing, so they are
134
+ * rotated here to match the post-gvPostprocess coordinate space.
135
+ * @see lib/common/postproc.c:map_edge
136
+ */
137
+ function mapEdge(e: { info: EdgeArrowInfo }): void {
138
+ const spl = e.info.spl;
139
+ if (spl === undefined) return;
140
+ mapSpl(spl);
141
+ mapLabelPos(e.info.label);
142
+ mapLabelPos(e.info.xlabel);
143
+ mapLabelPos(e.info.head_label);
144
+ mapLabelPos(e.info.tail_label);
145
+ // Rotate pre-computed arrowhead draw-ops (TS-only: C computes at render time).
146
+ e.info.headArrowOps = mapArrowOps(e.info.headArrowOps);
147
+ e.info.tailArrowOps = mapArrowOps(e.info.tailArrowOps);
148
+ }
149
+
150
+ // ---------------------------------------------------------------------------
151
+ // translate_bb — bounding-box rotation per rankdir
152
+ // @see lib/common/postproc.c:127-146
153
+ // ---------------------------------------------------------------------------
154
+
155
+ /** Compute the new bb after mapping corners (LR/BT swap corners first). */
156
+ function rotateBb(bb: Box, rankdir: number): Box {
157
+ if (rankdir === RANKDIR_LR || rankdir === RANKDIR_BT) {
158
+ return {
159
+ ll: mapPoint({ x: bb.ll.x, y: bb.ur.y }),
160
+ ur: mapPoint({ x: bb.ur.x, y: bb.ll.y }),
161
+ };
162
+ }
163
+ return {
164
+ ll: mapPoint({ x: bb.ll.x, y: bb.ll.y }),
165
+ ur: mapPoint({ x: bb.ur.x, y: bb.ur.y }),
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Rotate the bounding box of a graph (and its clusters, recursively).
171
+ * @see lib/common/postproc.c:translate_bb
172
+ */
173
+ export function translateBb(g: Graph, rankdir: number): void {
174
+ g.info.bb = rotateBb(g.info.bb, rankdir);
175
+ mapLabelPos(g.info.label);
176
+ const nc = g.info.n_cluster ?? 0;
177
+ const clust = g.info.clust;
178
+ for (let c = 1; c <= nc; c++) {
179
+ if (clust?.[c - 1]) translateBb(clust[c - 1], rankdir);
180
+ }
181
+ }
182
+
183
+ // ---------------------------------------------------------------------------
184
+ // Node-size reset helper
185
+ // @see lib/common/utils.c:gv_nodesize (flip=false branch)
186
+ // ---------------------------------------------------------------------------
187
+
188
+ /** Reset node lw/rw/ht to unflipped (width-based) values. */
189
+ function resetNodeSize(v: { info: { width?: number; height?: number; lw?: number; rw?: number; ht?: number } }): void {
190
+ const widthPts = v.info.width !== undefined ? v.info.width * 72 : (v.info.lw ?? 0) + (v.info.rw ?? 0);
191
+ const heightPts = v.info.height !== undefined ? v.info.height * 72 : (v.info.ht ?? 0);
192
+ const ns = gvNodesize(widthPts, heightPts, false);
193
+ v.info.lw = ns.lw;
194
+ v.info.rw = ns.rw;
195
+ v.info.ht = ns.ht;
196
+ }
197
+
198
+ /** Map coord + xlabel for one node; resize if rankdir is non-TB. */
199
+ function mapNode(v: { info: { coord?: Point; xlabel?: unknown; width?: number; height?: number; lw?: number; rw?: number; ht?: number } }): void {
200
+ if (Rankdir) resetNodeSize(v);
201
+ v.info.coord = mapPoint(v.info.coord ?? { x: 0, y: 0 });
202
+ mapLabelPos(v.info.xlabel);
203
+ }
204
+
205
+ // ---------------------------------------------------------------------------
206
+ // translate_drawing
207
+ // @see lib/common/postproc.c:153-172
208
+ // ---------------------------------------------------------------------------
209
+
210
+ /**
211
+ * Translate and/or rotate nodes, splines, and bbox info.
212
+ *
213
+ * NOTE: The C comment says "if Rankdir (!= RANKDIR_BT), reset ND_lw/rw/ht"
214
+ * but the code calls gv_nodesize(v, false) whenever Rankdir != 0.
215
+ * We follow the code.
216
+ *
217
+ * @see lib/common/postproc.c:translate_drawing
218
+ */
219
+ function translateDrawing(g: Graph): void {
220
+ const shift = Offset.x !== 0 || Offset.y !== 0;
221
+ if (!shift && !Rankdir) return;
222
+
223
+ for (const v of g.nodes.values()) {
224
+ mapNode(v);
225
+ // State == GVSPLINES is always true post-spline-routing in the dot pipeline
226
+ for (const e of g.edges) {
227
+ if (e.tail !== v) continue;
228
+ // C map_edge: a spline-less (non-concentrate, non-IGNORED) edge was
229
+ // LOST during routing — warn and skip, exactly as native dot.
230
+ // @see lib/common/postproc.c:map_edge ("lost %s %s edge")
231
+ if (e.info.spl === undefined) {
232
+ if (!(g.info.concentrate ?? false) && (e.info.edge_type ?? 0) !== IGNORED_EDGE) {
233
+ console.warn(`lost ${e.tail.name} ${e.head.name} edge`);
234
+ }
235
+ continue;
236
+ }
237
+ mapEdge(e);
238
+ }
239
+ }
240
+ translateBb(g, g.info.rankdir & 0x3);
241
+ }
242
+
243
+ // ---------------------------------------------------------------------------
244
+ // Offset computation per rankdir
245
+ // @see lib/common/postproc.c:657-672
246
+ // ---------------------------------------------------------------------------
247
+
248
+ /** Compute Offset from the current bb for the given rankdir. */
249
+ function computeOffset(bb: Box, rankdir: number): Point {
250
+ switch (rankdir) {
251
+ case RANKDIR_TB: return { x: bb.ll.x, y: bb.ll.y };
252
+ case RANKDIR_LR: return { x: -bb.ur.y, y: bb.ll.x };
253
+ case RANKDIR_BT: return { x: bb.ll.x, y: -bb.ur.y };
254
+ case RANKDIR_RL: return { x: bb.ll.y, y: bb.ll.x };
255
+ default: return { x: 0, y: 0 };
256
+ }
257
+ }
258
+
259
+ // ---------------------------------------------------------------------------
260
+ // LABEL_AT constants
261
+ // @see lib/common/const.h:LABEL_AT_BOTTOM / LABEL_AT_TOP / LABEL_AT_LEFT / LABEL_AT_RIGHT
262
+ // ---------------------------------------------------------------------------
263
+
264
+ /** @see lib/common/const.h:LABEL_AT_BOTTOM */
265
+ const LABEL_AT_BOTTOM = 0;
266
+ /** @see lib/common/const.h:LABEL_AT_TOP */
267
+ const LABEL_AT_TOP = 1;
268
+ /** @see lib/common/const.h:LABEL_AT_LEFT */
269
+ const LABEL_AT_LEFT = 2;
270
+ /** @see lib/common/const.h:LABEL_AT_RIGHT */
271
+ const LABEL_AT_RIGHT = 4;
272
+
273
+ /** PAD constants (GAP=4): x += 4*GAP=16, y += 2*GAP=8. @see lib/common/macros.h:PAD */
274
+ const XPAD_AMOUNT = 16;
275
+ const YPAD_AMOUNT = 8;
276
+
277
+ // ---------------------------------------------------------------------------
278
+ // rootLabelPos — read label position flags directly from graph attrs
279
+ // Used when doGraphLabel hasn't set label_pos on the root graph.
280
+ // @see lib/common/input.c:do_graph_label:866-877
281
+ // ---------------------------------------------------------------------------
282
+
283
+ /**
284
+ * Compute the label-position flag for the root graph from its attributes.
285
+ * Root default is LABEL_AT_BOTTOM (unlike clusters which default to TOP).
286
+ * @see lib/common/input.c:do_graph_label:866-877
287
+ */
288
+ function rootLabelPos(g: Graph): number {
289
+ const loc = g.attrs.get('labelloc');
290
+ let pos: number = loc && loc[0] === 't' ? LABEL_AT_TOP : LABEL_AT_BOTTOM;
291
+ const just = g.attrs.get('labeljust');
292
+ if (just) {
293
+ if (just[0] === 'l') pos |= LABEL_AT_LEFT;
294
+ else if (just[0] === 'r') pos |= LABEL_AT_RIGHT;
295
+ }
296
+ return pos;
297
+ }
298
+
299
+ // ---------------------------------------------------------------------------
300
+ // expandBbForRootLabel — expand bounding box for unplaced root graph label
301
+ // @see lib/common/postproc.c:619-655
302
+ // ---------------------------------------------------------------------------
303
+
304
+ /**
305
+ * If the root graph has an unset label, expand the bounding box to make
306
+ * room for it and return the padded dimen. Returns {x:0, y:0} otherwise.
307
+ *
308
+ * Called after addXLabels (postproc.c:616), before Offset/translateDrawing.
309
+ *
310
+ * @see lib/common/postproc.c:619-655
311
+ */
312
+ function expandBbForRootLabel(g: Graph): { x: number; y: number } {
313
+ const label = g.info.label as TextlabelT | undefined;
314
+ if (!label || label.set) return { x: 0, y: 0 };
315
+
316
+ const dimen = { x: label.dimen.x + XPAD_AMOUNT, y: label.dimen.y + YPAD_AMOUNT };
317
+ const labelPos = rootLabelPos(g);
318
+ const flip = g.info.flip ?? false;
319
+ const bb = g.info.bb;
320
+
321
+ if (flip) {
322
+ expandBbFlip(bb, dimen, labelPos);
323
+ } else {
324
+ expandBbNoFlip(bb, dimen, labelPos, Rankdir);
325
+ }
326
+ return dimen;
327
+ }
328
+
329
+ /** @see lib/common/postproc.c:622-634 (Flip branch) */
330
+ function expandBbFlip(bb: { ll: { x: number; y: number }; ur: { x: number; y: number } }, dimen: { x: number; y: number }, labelPos: number): void {
331
+ if (labelPos & LABEL_AT_TOP) {
332
+ bb.ur.x += dimen.y;
333
+ } else {
334
+ bb.ll.x -= dimen.y;
335
+ }
336
+ const span = bb.ur.y - bb.ll.y;
337
+ if (dimen.x > span) {
338
+ const diff = (dimen.x - span) / 2;
339
+ bb.ll.y -= diff;
340
+ bb.ur.y += diff;
341
+ }
342
+ }
343
+
344
+ /** Expand bb y-axis for label height in the non-flip case. @see lib/common/postproc.c:636-646 */
345
+ function expandBbNoFlipY(bb: { ll: { x: number; y: number }; ur: { x: number; y: number } }, dy: number, labelPos: number, rankdir: number): void {
346
+ if (labelPos & LABEL_AT_TOP) {
347
+ if (rankdir === RANKDIR_TB) bb.ur.y += dy; else bb.ll.y -= dy;
348
+ } else {
349
+ if (rankdir === RANKDIR_TB) bb.ll.y -= dy; else bb.ur.y += dy;
350
+ }
351
+ }
352
+
353
+ /** @see lib/common/postproc.c:635-654 (non-Flip branch) */
354
+ function expandBbNoFlip(bb: { ll: { x: number; y: number }; ur: { x: number; y: number } }, dimen: { x: number; y: number }, labelPos: number, rankdir: number): void {
355
+ expandBbNoFlipY(bb, dimen.y, labelPos, rankdir);
356
+ const span = bb.ur.x - bb.ll.x;
357
+ if (dimen.x > span) {
358
+ const diff = (dimen.x - span) / 2;
359
+ bb.ll.x -= diff;
360
+ bb.ur.x += diff;
361
+ }
362
+ }
363
+
364
+ // ---------------------------------------------------------------------------
365
+ // place_root_label
366
+ // @see lib/common/postproc.c:174-200
367
+ // ---------------------------------------------------------------------------
368
+
369
+ /** Label x-coordinate per justification flags. @see lib/common/postproc.c:184-190 */
370
+ function rootLabelX(bb: Box, labelPos: number, dimX: number): number {
371
+ if (labelPos & LABEL_AT_RIGHT) return bb.ur.x - dimX / 2;
372
+ if (labelPos & LABEL_AT_LEFT) return bb.ll.x + dimX / 2;
373
+ return (bb.ll.x + bb.ur.x) / 2;
374
+ }
375
+
376
+ /** Label y-coordinate per position flag. @see lib/common/postproc.c:192-196 */
377
+ function rootLabelY(bb: Box, labelPos: number, dimY: number): number {
378
+ if (labelPos & LABEL_AT_TOP) return bb.ur.y - dimY / 2;
379
+ return bb.ll.y + dimY / 2;
380
+ }
381
+
382
+ /**
383
+ * Set the position of the root graph label.
384
+ * Called after translate_drawing so the bb is already in output space;
385
+ * no flip/rotation compensation is needed here.
386
+ *
387
+ * @see lib/common/postproc.c:place_root_label
388
+ */
389
+ export function placeRootLabel(g: Graph, dimen: { x: number; y: number }): void {
390
+ const label = g.info.label as TextlabelT | undefined;
391
+ if (!label) return;
392
+ const labelPos = rootLabelPos(g);
393
+ const bb = g.info.bb;
394
+ label.pos = { x: rootLabelX(bb, labelPos, dimen.x), y: rootLabelY(bb, labelPos, dimen.y) };
395
+ label.set = true;
396
+ }
397
+
398
+ // ---------------------------------------------------------------------------
399
+ // gvPostprocess
400
+ // @see lib/common/postproc.c:599-687
401
+ // ---------------------------------------------------------------------------
402
+
403
+ /**
404
+ * Port of gv_postprocess. `allowTranslation` mirrors the C parameter:
405
+ * `dotneato_postprocess` (dot, sfdp, circo, twopi) and `neato_layout` pass 1;
406
+ * `fdp_layout` passes 0 (layout.c:1076) because fdp's finalCC has already
407
+ * placed the drawing at the origin.
408
+ *
409
+ * Order matches C: addXLabels → expand bb for root label → compute Offset →
410
+ * translateDrawing → place_root_label.
411
+ *
412
+ * addXLabels is called at postproc.c:616 — after place_graph_label (cluster
413
+ * labels handled elsewhere), before bb adjustment.
414
+ * Root graph label is placed at postproc.c:675-676, after translateDrawing.
415
+ *
416
+ * @see lib/common/postproc.c:gv_postprocess
417
+ * @see lib/common/postproc.c:dotneato_postprocess
418
+ */
419
+ export function gvPostprocess(g: Graph, allowTranslation = true): void {
420
+ Rankdir = g.info.rankdir & 0x3;
421
+ // addXLabels at postproc.c:616 — after place_graph_label, before bb adjust.
422
+ addXLabels(g);
423
+ // Expand bb to make room for root graph label (postproc.c:619-655).
424
+ const dimen = expandBbForRootLabel(g);
425
+ // Compute Offset from the (possibly expanded) bb, then translate
426
+ // (postproc.c:656-674 — gated on allowTranslation).
427
+ if (allowTranslation) {
428
+ Offset = computeOffset(g.info.bb, Rankdir);
429
+ translateDrawing(g);
430
+ }
431
+ // Place root graph label after translation (postproc.c:675-676).
432
+ const rootLabel = g.info.label as TextlabelT | undefined;
433
+ if (rootLabel && !rootLabel.set) {
434
+ placeRootLabel(g, dimen);
435
+ }
436
+ }