@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,639 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Label-driven node sizing — a faithful port of the sizing portion of
5
+ * poly_init. Computes the node bounding box from the label dimensions
6
+ * and node attributes, then converts to lw/rw/ht via gv_nodesize.
7
+ *
8
+ * poly_desc size_gen hooks (star_size, cylinder_size) ARE ported — see
9
+ * starSize/cylinderSize and the shapes.c:2073-2085 dispatch in polySize.
10
+ * The star_vertices aspect-correction feedback into node width (shapes.c:2217,
11
+ * only observable when an explicit width/height forces a non-star aspect) is
12
+ * NOT yet replicated — polygonBB sizes the star via a regular decagon.
13
+ *
14
+ * Not ported (no TS counterpart yet, no suite coverage):
15
+ * - usershape/image sizing (gvusershape_size) — needs an image loader.
16
+ *
17
+ * @see lib/common/shapes.c:poly_init
18
+ * @see lib/common/utils.c:gv_nodesize
19
+ */
20
+
21
+ import type { Point } from '../model/geom.js';
22
+ import { STAR, CYLINDER } from './shapeData.js';
23
+ import { starVertices } from './poly-vertices.js';
24
+ import { fma } from './fma.js';
25
+
26
+ /** Whitespace in points around labels / between peripheries. @see lib/common/const.h:GAP */
27
+ export const GAP = 4;
28
+ /** @see lib/common/macros.h:XPAD */
29
+ const XPAD = 4 * GAP;
30
+ /** @see lib/common/macros.h:YPAD */
31
+ const YPAD = 2 * GAP;
32
+ /** @see lib/common/arith.h:SQRT2 */
33
+ const SQRT2 = 1.41421356237309504880;
34
+ /** Points per inch. @see lib/common/geom.h:INCH2PS */
35
+ const INCH2PS = 72;
36
+
37
+ /**
38
+ * Inputs for polySize, mirroring what poly_init reads from the node.
39
+ * All lengths are in points unless suffixed `In` (inches).
40
+ */
41
+ export interface PolySizeParams {
42
+ /** Label size in points. @see ND_label(n)->dimen */
43
+ labelDimen: Point;
44
+ /** Effective polygon sides after attr resolution (0 means attr-driven). */
45
+ sides: number;
46
+ /** Periphery count after the peripheries attr override. */
47
+ peripheries: number;
48
+ /** Orientation in degrees (shape base + orientation attr). */
49
+ orientation: number;
50
+ /** Distortion factor. */
51
+ distortion: number;
52
+ /** Skew factor. */
53
+ skew: number;
54
+ /** Shape regular flag OR'd with the regular attr. */
55
+ regular: boolean;
56
+ /** True for shape=plain. @see lib/common/shapes.c:IS_PLAIN */
57
+ isPlain: boolean;
58
+ /** width attr in inches (default 0.75, min 0.01). */
59
+ widthIn: number;
60
+ /** height attr in inches (default 0.5, min 0.02). */
61
+ heightIn: number;
62
+ /** INCH2PS(max(width attr, height attr)), 0 when unset. @see shapes.c:userSize */
63
+ userSizePts: number;
64
+ /** Raw margin attr (inches, "x" or "x,y"), undefined when unset. */
65
+ margin: string | undefined;
66
+ /** fixedsize attr (default "false"). */
67
+ fixedsize: string;
68
+ /** labelloc attr, undefined when unset. */
69
+ labelloc: string | undefined;
70
+ /** Graph quantum attr in inches (0 disables quantization). */
71
+ quantumIn: number;
72
+ /** True when rankdir flips coordinates. @see GD_flip */
73
+ flip: boolean;
74
+ /** penwidth attr (default 1, min 0). @see lib/common/const.h:DEFAULT_NODEPENWIDTH */
75
+ penwidth?: number;
76
+ /**
77
+ * polygon->option.shape — the size_gen discriminant. STAR and CYLINDER have a
78
+ * poly_desc (star_gen/cylinder_gen) whose size_gen inflates the label box;
79
+ * every other value (0, or an SBOL shape) takes the generic ellipse fit.
80
+ * @see lib/common/shapes.c:2075 (`else if (polygon->vertices) bb = size_gen(bb)`)
81
+ */
82
+ optionShape?: number;
83
+ /**
84
+ * nojustify attr. When true, the label's justification borders shrink to the
85
+ * label's own width instead of the node width, so a `\l`/`\r` line aligns to
86
+ * the centered label block rather than the node edge.
87
+ * @see lib/common/shapes.c:2132-2145
88
+ */
89
+ nojustify?: boolean;
90
+ }
91
+
92
+ /** Node geometry in points: left/right half-widths and height. */
93
+ export interface NodeSize {
94
+ lw: number;
95
+ rw: number;
96
+ ht: number;
97
+ }
98
+
99
+ /** polySize result: node size plus unflipped outline extents (points). */
100
+ export interface PolySizeResult extends NodeSize {
101
+ /** Outline width in points (bb + penwidth growth). @see ND_outline_width */
102
+ outlineW: number;
103
+ /** Outline height in points. @see ND_outline_height */
104
+ outlineH: number;
105
+ /**
106
+ * Pre-periphery-growth bb (points) — the box C scales the BASE
107
+ * (innermost) vertex ring to before stepping rings outward. Needed
108
+ * by ring generation for multi-periphery general polygons.
109
+ * @see lib/common/shapes.c:poly_init (bb before the outp loop)
110
+ */
111
+ baseW: number;
112
+ baseH: number;
113
+ /**
114
+ * Justification borders — the space available for the label within the node
115
+ * box. `emit_label` reads this (not `dimen`) for `labelloc` top/bottom and
116
+ * left/right justification; without it a `labelloc=b` label centers.
117
+ * @see lib/common/shapes.c:poly_init (2132-2152)
118
+ */
119
+ space: Point;
120
+ /** Resolved vertical alignment ('t'/'c'/'b') from labelloc. */
121
+ valign: string;
122
+ }
123
+
124
+ /** @see lib/common/utils.c:mapbool */
125
+ function mapbool(s: string | undefined): boolean {
126
+ if (!s || s.toLowerCase() === 'false' || s.toLowerCase() === 'no') return false;
127
+ if (s.toLowerCase() === 'true' || s.toLowerCase() === 'yes') return true;
128
+ const n = parseInt(s, 10);
129
+ return !Number.isNaN(n) && n !== 0;
130
+ }
131
+
132
+ /**
133
+ * Initial width/height in points from the width/height attrs,
134
+ * the regular flag, and the plain special case.
135
+ * @see lib/common/shapes.c:poly_init (width/height setup)
136
+ */
137
+ export function initialSizePts(p: PolySizeParams): { width: number; height: number } {
138
+ if (p.isPlain) return { width: 0, height: 0 };
139
+ if (p.regular) {
140
+ if (p.userSizePts > 0) return { width: p.userSizePts, height: p.userSizePts };
141
+ const m = INCH2PS * Math.min(p.widthIn, p.heightIn);
142
+ return { width: m, height: m };
143
+ }
144
+ return { width: INCH2PS * p.widthIn, height: INCH2PS * p.heightIn };
145
+ }
146
+
147
+ /** Parse the margin attr like sscanf("%lf,%lf"); null means PAD instead. */
148
+ function parseMargin(margin: string | undefined): Point | null {
149
+ if (margin === undefined) return null;
150
+ const mx = parseFloat(margin);
151
+ if (Number.isNaN(mx)) return null;
152
+ const comma = margin.indexOf(',');
153
+ const my = comma >= 0 ? parseFloat(margin.slice(comma + 1)) : NaN;
154
+ const x = Math.max(mx, 0);
155
+ return { x, y: Number.isNaN(my) ? x : Math.max(my, 0) };
156
+ }
157
+
158
+ /**
159
+ * Add minimal whitespace around the label: the margin attr in inches,
160
+ * or PAD (16x8 points) when unset. Plain shapes get no padding.
161
+ * @see lib/common/shapes.c:poly_init (margin/PAD block)
162
+ */
163
+ export function padLabelDimen(
164
+ labelDimen: Point,
165
+ margin: string | undefined,
166
+ isPlain: boolean,
167
+ ): Point {
168
+ const d = { x: labelDimen.x, y: labelDimen.y };
169
+ if ((d.x > 0 || d.y > 0) && !isPlain) {
170
+ const m = parseMargin(margin);
171
+ if (m) {
172
+ d.x += 2 * INCH2PS * m.x;
173
+ d.y += 2 * INCH2PS * m.y;
174
+ } else {
175
+ d.x += XPAD;
176
+ d.y += YPAD;
177
+ }
178
+ }
179
+ return d;
180
+ }
181
+
182
+ /** Round up to a multiple of the quantum (inches). @see lib/common/shapes.c:quant */
183
+ function quantize(d: Point, quantumIn: number): Point {
184
+ if (quantumIn <= 0) return d;
185
+ const q = INCH2PS * quantumIn;
186
+ return { x: Math.ceil(d.x / q) * q, y: Math.ceil(d.y / q) * q };
187
+ }
188
+
189
+ /**
190
+ * Expand bb so the smallest ellipse (or inscribing polygon) centered on
191
+ * the origin contains the label box. Boxes are exempt (exact fit).
192
+ * @see lib/common/shapes.c:poly_init (ellipse/polygon expansion)
193
+ */
194
+ /**
195
+ * star_gen size_gen: inflate the label box to the node size a 5-pointed star
196
+ * needs so the label fits inside its inner pentagon. Much larger than the
197
+ * generic ellipse fit — omitting it leaves the node box too small, so the
198
+ * star's outer points render outside the node bbox and the graph viewport.
199
+ * @see lib/common/shapes.c:4039 star_size (alpha = PI/10)
200
+ */
201
+ export function starSize(bb: Point): Point {
202
+ const alpha = Math.PI / 10;
203
+ const alpha2 = 2 * alpha, alpha3 = 3 * alpha, alpha4 = 2 * alpha2;
204
+ const rx = bb.x / (2 * Math.cos(alpha));
205
+ const ry = bb.y / (Math.sin(alpha) + Math.sin(alpha3));
206
+ const r0 = Math.max(rx, ry);
207
+ const r = (r0 * Math.sin(alpha4) * Math.cos(alpha2)) / (Math.cos(alpha) * Math.cos(alpha4));
208
+ return { x: 2 * r * Math.cos(alpha), y: r * (1 + Math.sin(alpha3)) };
209
+ }
210
+
211
+ /**
212
+ * cylinder_gen size_gen: scale height by 1.375 (x unchanged), leaving room for
213
+ * the top/bottom ellipse arcs. @see lib/common/shapes.c:4153 cylinder_size
214
+ */
215
+ export function cylinderSize(bb: Point): Point {
216
+ return { x: bb.x, y: bb.y * 1.375 };
217
+ }
218
+
219
+ export function expandForShape(
220
+ bb: Point,
221
+ sides: number,
222
+ heightPts: number,
223
+ valign: string,
224
+ ): Point {
225
+ const b = { x: bb.x, y: bb.y };
226
+ const temp = b.y * SQRT2;
227
+ if (heightPts > temp && valign === 'c') {
228
+ // spare height + vertically centered label: pad x only
229
+ b.x *= Math.sqrt(1 / (1 - (b.y / heightPts) ** 2));
230
+ } else {
231
+ b.x *= SQRT2;
232
+ b.y = temp;
233
+ }
234
+ if (sides > 2) {
235
+ const c = Math.cos(Math.PI / sides);
236
+ b.x /= c;
237
+ b.y /= c;
238
+ }
239
+ return b;
240
+ }
241
+
242
+ /**
243
+ * Grow an ellipse bb by GAP per extra periphery; the outline adds half
244
+ * the penwidth on each side. @see shapes.c:poly_init (sides < 3)
245
+ */
246
+ function ellipsePeripheryBB(
247
+ bb: Point,
248
+ peripheries: number,
249
+ penwidth: number,
250
+ hasOutline: boolean,
251
+ ): { bb: Point; outline: Point } {
252
+ let b = bb;
253
+ if (peripheries > 1) {
254
+ const grow = 2 * GAP * (peripheries - 1);
255
+ b = { x: bb.x + grow, y: bb.y + grow };
256
+ }
257
+ const outline = hasOutline ? { x: b.x + penwidth, y: b.y + penwidth } : b;
258
+ return { bb: b, outline };
259
+ }
260
+
261
+ /** Effective polygon geometry for the unit vertex loop. */
262
+ export interface PolyGeom {
263
+ sides: number;
264
+ orientation: number;
265
+ distortion: number;
266
+ skew: number;
267
+ }
268
+
269
+ /** Distort, skew, orient, and scale one unit vertex. @see shapes.c:poly_init */
270
+ function transformUnitVertex(R: Point, g: PolyGeom, c: { skewdist: number; gdistortion: number; gskew: number }, bb: Point): Point {
271
+ const D = { x: R.x * (c.skewdist + R.y * c.gdistortion) + R.y * c.gskew, y: R.y };
272
+ const alpha = (g.orientation * Math.PI) / 180 + Math.atan2(D.y, D.x);
273
+ // C uses libm hypot(D.x, D.y). V8's Math.hypot is a scaled algorithm that
274
+ // returns a result 1 ULP off from libm hypot for in-range polygon vertices
275
+ // (e.g. hypot(0.35355…, 0.35355…): libm = 0.5 exactly, Math.hypot = 0.5+1ULP),
276
+ // whereas the naive sqrt(x²+y²) reproduces libm's value bit-for-bit here.
277
+ // That ULP inflated ND_ht by ~7e-15, and pack.c genPoly's GRID(=ceil) rounded
278
+ // an exactly-on-boundary component height up a cell, reordering polyomino
279
+ // packing and swapping two circo/osage components. @see shapes.c:poly_init
280
+ const r = Math.sqrt(D.x * D.x + D.y * D.y);
281
+ return { x: r * Math.cos(alpha) * bb.x, y: r * Math.sin(alpha) * bb.y };
282
+ }
283
+
284
+ /**
285
+ * Unit-polygon vertex loop: distort, skew, orient, then scale by bb.
286
+ * Returns the scaled vertices and the bounding half-extents.
287
+ * @see lib/common/shapes.c:poly_init (polygon vertex loop)
288
+ */
289
+ export function polygonVertices(
290
+ bb: Point,
291
+ g: PolyGeom,
292
+ isBox: boolean,
293
+ ): { verts: Point[]; xmax: number; ymax: number } {
294
+ const sectorangle = (2 * Math.PI) / g.sides;
295
+ const sidelength = Math.sin(sectorangle / 2);
296
+ const c = {
297
+ skewdist: Math.hypot(Math.abs(g.distortion) + Math.abs(g.skew), 1),
298
+ gdistortion: (g.distortion * SQRT2) / Math.cos(sectorangle / 2),
299
+ gskew: g.skew / 2,
300
+ };
301
+ let angle = (sectorangle - Math.PI) / 2;
302
+ const R = { x: 0.5 * Math.cos(angle), y: 0.5 * Math.sin(angle) };
303
+ angle += (Math.PI - sectorangle) / 2;
304
+ const verts: Point[] = [];
305
+ for (let i = 0; i < g.sides; i++) {
306
+ angle += sectorangle;
307
+ // C's `R.x += sidelength*cosx` is contracted by clang (-ffp-contract) into a
308
+ // single-rounding fmadd; two-rounding JS `+=` drifts 1 ULP, and for distorted
309
+ // 5-gons (house/invhouse) that inflated the accumulated vertex y from 0.5 to
310
+ // 0.5+1ULP -> ND_ht 36+7e-15 -> a swapped pack cell. @see shapes.c:poly_init
311
+ R.x = fma(sidelength, Math.cos(angle), R.x);
312
+ R.y = fma(sidelength, Math.sin(angle), R.y);
313
+ const P = transformUnitVertex(R, g, c, bb);
314
+ verts.push(P);
315
+ if (isBox) {
316
+ // enforce exact symmetry of box
317
+ verts.push({ x: -P.x, y: P.y }, { x: -P.x, y: -P.y }, { x: P.x, y: -P.y });
318
+ break;
319
+ }
320
+ }
321
+ return { verts, ...vertexExtents(verts) };
322
+ }
323
+
324
+ /** Max |x| / |y| half-extents over a vertex list. */
325
+ function vertexExtents(verts: Point[]): { xmax: number; ymax: number } {
326
+ let xmax = 0;
327
+ let ymax = 0;
328
+ for (const v of verts) {
329
+ xmax = Math.max(Math.abs(v.x), xmax);
330
+ ymax = Math.max(Math.abs(v.y), ymax);
331
+ }
332
+ return { xmax, ymax };
333
+ }
334
+
335
+ /** Mutable bisector-walk state shared across vertices. */
336
+ interface BisectorState {
337
+ beta: number;
338
+ Qprev: Point;
339
+ sinx: number;
340
+ cosx: number;
341
+ }
342
+
343
+ /** Initial bisector state from the last distinct vertex pair. @see shapes.c:poly_init */
344
+ function initBisector(verts: Point[], sides: number): BisectorState {
345
+ const R = verts[0]!;
346
+ let Q = R;
347
+ for (let j = 1; j < sides; j++) {
348
+ Q = verts[(sides - j) % sides]!;
349
+ if (Q.x !== R.x || Q.y !== R.y) break;
350
+ }
351
+ return { beta: Math.atan2(R.y - Q.y, R.x - Q.x), Qprev: Q, sinx: 0, cosx: 0 };
352
+ }
353
+
354
+ /**
355
+ * Per-vertex GAP offset along the angle bisector; degenerate sides
356
+ * keep the previous offset (cylinder-style shapes).
357
+ * @see lib/common/shapes.c:poly_init (peripheries bisector loop)
358
+ */
359
+ function bisectorOffset(verts: Point[], sides: number, i: number, st: BisectorState): void {
360
+ const V = verts[i]!;
361
+ if (V.x !== st.Qprev.x || V.y !== st.Qprev.y) {
362
+ let R = V;
363
+ for (let j = 1; j < sides; j++) {
364
+ R = verts[(i + j) % sides]!;
365
+ if (R.x !== V.x || R.y !== V.y) break;
366
+ }
367
+ const alpha = st.beta;
368
+ st.beta = Math.atan2(R.y - V.y, R.x - V.x);
369
+ const gamma = (alpha + Math.PI - st.beta) / 2;
370
+ const temp = GAP / Math.sin(gamma);
371
+ st.sinx = Math.sin(alpha - gamma) * temp;
372
+ st.cosx = Math.cos(alpha - gamma) * temp;
373
+ }
374
+ st.Qprev = V;
375
+ }
376
+
377
+ /**
378
+ * Per-vertex bisector GAP offsets for a polygon ring — the (cosx, sinx)
379
+ * pairs C uses to place each successive periphery.
380
+ * @see lib/common/shapes.c:poly_init (peripheries bisector loop)
381
+ */
382
+ export function polygonRingOffsets(verts: Point[], sides: number): Point[] {
383
+ const st = initBisector(verts, sides);
384
+ const out: Point[] = [];
385
+ for (let i = 0; i < sides; i++) {
386
+ bisectorOffset(verts, sides, i, st);
387
+ out.push({ x: st.cosx, y: st.sinx });
388
+ }
389
+ return out;
390
+ }
391
+
392
+ /**
393
+ * The outline ring: each vertex offset along its angle bisector by
394
+ * half the penwidth (the stroked boundary poly_inside clips against).
395
+ * @see lib/common/shapes.c:poly_init (outline ring at outp)
396
+ */
397
+ export function polygonOutlineRing(verts: Point[], sides: number, penwidth: number): Point[] {
398
+ const st = initBisector(verts, sides);
399
+ const out: Point[] = [];
400
+ const k = penwidth / 2 / GAP;
401
+ for (let i = 0; i < sides; i++) {
402
+ bisectorOffset(verts, sides, i, st);
403
+ const V = verts[i]!;
404
+ out.push({ x: V.x + k * st.cosx, y: V.y + k * st.sinx });
405
+ }
406
+ return out;
407
+ }
408
+
409
+ /**
410
+ * Grow a polygon bb to cover the outermost periphery ring, and the
411
+ * outline bb to cover the half-penwidth ring beyond it.
412
+ * @see lib/common/shapes.c:poly_init (peripheries bisector loop)
413
+ */
414
+ export function polygonPeripheryBB(
415
+ verts: Point[],
416
+ sides: number,
417
+ p: { peripheries: number; penwidth: number; hasOutline: boolean },
418
+ bb: Point,
419
+ ): { bb: Point; outline: Point } {
420
+ const st = initBisector(verts, sides);
421
+ const out = { x: bb.x, y: bb.y };
422
+ const outl = { x: bb.x, y: bb.y };
423
+ for (let i = 0; i < sides; i++) {
424
+ bisectorOffset(verts, sides, i, st);
425
+ const off = p.peripheries - 1;
426
+ const V = verts[i]!;
427
+ const P = { x: V.x + off * st.cosx, y: V.y + off * st.sinx };
428
+ out.x = Math.max(2 * Math.abs(P.x), out.x);
429
+ out.y = Math.max(2 * Math.abs(P.y), out.y);
430
+ // outline ring: half the penwidth outside the outermost periphery
431
+ const k = p.hasOutline ? p.penwidth / 2 / GAP : 0;
432
+ const Q = { x: P.x + k * st.cosx, y: P.y + k * st.sinx };
433
+ outl.x = Math.max(2 * Math.abs(Q.x), outl.x);
434
+ outl.y = Math.max(2 * Math.abs(Q.y), outl.y);
435
+ }
436
+ return { bb: out, outline: { x: Math.max(outl.x, out.x), y: Math.max(outl.y, out.y) } };
437
+ }
438
+
439
+ /**
440
+ * Polygon (sides >= 3) bounding box: apply minimum dimensions against
441
+ * the vertex extents, then grow for peripheries and the outline.
442
+ * @see lib/common/shapes.c:poly_init (apply minimum dimensions)
443
+ */
444
+ /**
445
+ * Vertex generation + extent for a STAR, mirroring C's star_vertices poly_desc
446
+ * (shapes.c:4066): it scales the box to the star's aspect ratio and reports the
447
+ * scaled box as the extent (`*bb = sz`), so xmax/ymax = sz/2. The vertices come
448
+ * from the port's starVertices (same r as C, computed from the aspect-adjusted
449
+ * width). @see lib/common/shapes.c:star_vertices
450
+ */
451
+ function starVertexGen(bb: Point): { verts: Point[]; xmax: number; ymax: number } {
452
+ const alpha = Math.PI / 10, alpha3 = 3 * alpha;
453
+ const aspect = (1 + Math.sin(alpha3)) / (2 * Math.cos(alpha));
454
+ let sz = bb;
455
+ if (bb.x > 0) {
456
+ const a = bb.y / bb.x;
457
+ if (a > aspect) sz = { x: bb.y / aspect, y: bb.y };
458
+ else if (a < aspect) sz = { x: bb.x, y: bb.x * aspect };
459
+ }
460
+ return { verts: starVertices(bb.x, bb.y), xmax: sz.x / 2, ymax: sz.y / 2 };
461
+ }
462
+
463
+ function polygonBB(
464
+ bb: Point,
465
+ minSize: Point,
466
+ p: PolySizeParams & { penwidth: number; hasOutline: boolean },
467
+ sides: number,
468
+ isBox: boolean,
469
+ ): { bb: Point; outline: Point; base: Point } {
470
+ const geom: PolyGeom = {
471
+ sides, orientation: p.orientation, distortion: p.distortion, skew: p.skew,
472
+ };
473
+ // C poly_init (shapes.c:2214-2222) dispatches vertex generation to the
474
+ // shape's poly_desc: a STAR's vertex_gen mutates bb to the aspect-adjusted
475
+ // extent (its outer points reach beyond the label box) and reports
476
+ // xmax=bb.x/2, ymax=bb.y/2 from that. The generic n-gon path here would use a
477
+ // regular 10-gon inscribed in the label box, undercounting the star's real
478
+ // extent — leaving ND_ht at the un-inflated minimum and shrinking every rank
479
+ // gap (1718: rank pitch 72 vs native 87.35). @see shapes.c:star_vertices
480
+ const { verts, xmax, ymax } = p.optionShape === STAR
481
+ ? starVertexGen(bb)
482
+ : polygonVertices(bb, geom, isBox);
483
+ const xmax2 = 2 * xmax;
484
+ const ymax2 = 2 * ymax;
485
+ const nbb = { x: Math.max(minSize.x, xmax2), y: Math.max(minSize.y, ymax2) };
486
+ // C gates the bisector walk on outp > 1; peripheries < 1 never enters it.
487
+ const walk = p.peripheries > 1 || (p.peripheries >= 1 && p.penwidth > 0);
488
+ if (!walk) return { bb: nbb, outline: nbb, base: nbb };
489
+ const scalex = nbb.x / xmax2;
490
+ const scaley = nbb.y / ymax2;
491
+ for (const v of verts) {
492
+ v.x *= scalex;
493
+ v.y *= scaley;
494
+ }
495
+ return { ...polygonPeripheryBB(verts, isBox ? 4 : sides, p, nbb), base: nbb };
496
+ }
497
+
498
+ /** Convert final node width/height (points) to lw/rw/ht. @see lib/common/utils.c:gv_nodesize */
499
+ export function gvNodesize(widthPts: number, heightPts: number, flip: boolean): NodeSize {
500
+ if (flip) return { lw: heightPts / 2, rw: heightPts / 2, ht: widthPts };
501
+ return { lw: widthPts / 2, rw: widthPts / 2, ht: heightPts };
502
+ }
503
+
504
+ /** Result of the fixedsize/regular constraint block. */
505
+ interface SizeConstraints {
506
+ bb: Point;
507
+ width: number;
508
+ height: number;
509
+ fixedshape: boolean;
510
+ }
511
+
512
+ /** Apply fixedsize/regular minimums. @see shapes.c:poly_init ("increase node size") */
513
+ function applySizeConstraints(
514
+ p: PolySizeParams,
515
+ bb0: Point,
516
+ width0: number,
517
+ height0: number,
518
+ ): SizeConstraints {
519
+ let c: SizeConstraints;
520
+ if (p.fixedsize === 'shape') {
521
+ c = { bb: { x: width0, y: height0 }, width: width0, height: height0, fixedshape: true };
522
+ } else if (mapbool(p.fixedsize)) {
523
+ c = { bb: { x: width0, y: height0 }, width: width0, height: height0, fixedshape: false };
524
+ } else {
525
+ const bb = { x: Math.max(width0, bb0.x), y: Math.max(height0, bb0.y) };
526
+ c = { bb, width: bb.x, height: bb.y, fixedshape: false };
527
+ }
528
+ if (p.regular) {
529
+ const m = Math.max(c.bb.x, c.bb.y);
530
+ c = { bb: { x: m, y: m }, width: m, height: m, fixedshape: c.fixedshape };
531
+ }
532
+ return c;
533
+ }
534
+
535
+ /**
536
+ * Compute node dimensions from label size and attrs — the sizing
537
+ * portion of poly_init followed by gv_nodesize.
538
+ * @see lib/common/shapes.c:poly_init
539
+ */
540
+ export function polySize(p: PolySizeParams): PolySizeResult {
541
+ const init = initialSizePts(p);
542
+ const dimen = quantize(padLabelDimen(p.labelDimen, p.margin, p.isPlain), p.quantumIn);
543
+ const { sides, isBox } = effectiveShape(p);
544
+ let bb: Point = { x: dimen.x, y: dimen.y };
545
+ // C shapes.c:2073-2085 dispatch: box → exact fit; poly_desc shapes (star,
546
+ // cylinder) → their size_gen; everything else → generic ellipse fit.
547
+ if (isBox) {
548
+ // exact fit — no expansion
549
+ } else if (p.optionShape === STAR) {
550
+ bb = starSize(bb);
551
+ } else if (p.optionShape === CYLINDER) {
552
+ bb = cylinderSize(bb);
553
+ } else {
554
+ bb = expandForShape(bb, sides, init.height, labelValign(p));
555
+ }
556
+ const minBb = bb; // C min_bb (shapes.c:2106): after shape fit, before size constraints
557
+
558
+ const c = applySizeConstraints(p, bb, init.width, init.height);
559
+ const penwidth = p.penwidth ?? 1; // DEFAULT_NODEPENWIDTH
560
+ // C: outp exceeds peripheries when an outline ring is added.
561
+ const hasOutline = penwidth > 0 || p.peripheries < 1;
562
+ // C shapes.c:2288-2296: polygonBB folds the distortion-inflated vertex
563
+ // extent back into nbb (the base periphery ring) and that IS the base box;
564
+ // the ellipse path (sides < 3) has no such ring, so base stays c.bb (the
565
+ // pre-inflation box) there — it is unconsumed for ellipses.
566
+ const grown = sides < 3
567
+ ? { ...ellipsePeripheryBB(c.bb, p.peripheries, penwidth, hasOutline), base: c.bb }
568
+ : polygonBB(c.bb, { x: c.width, y: c.height }, { ...p, penwidth, hasOutline }, sides, isBox);
569
+ const result = assembleResult(p, dimen, grown, c.fixedshape);
570
+ return { ...result, ...labelSpace(p, dimen, c.bb, minBb, isBox, c.fixedshape) };
571
+ }
572
+
573
+ /**
574
+ * Compute the label's justification borders (ND_label->space) and vertical
575
+ * alignment — the "space available for label" block of poly_init. `bb` is the
576
+ * final (constrained) box; `minBb` is the pre-constraint shape-fit box.
577
+ * Image sizing is unported, so `imagesize` is 0 (which matches C for the
578
+ * missing-image repro cases); revisit when image loading lands.
579
+ * @see lib/common/shapes.c:poly_init (2132-2152)
580
+ */
581
+ function labelSpace(
582
+ p: PolySizeParams, dimen: Point, bb: Point, minBb: Point, isBox: boolean, fixedshape: boolean,
583
+ ): { space: Point; valign: string } {
584
+ const spacex = dimen.x - p.labelDimen.x; // shapes.c:2011 (padding added to the label)
585
+ // shapes.c:2132-2145: justified borders span the node (bb.x); nojustify shrinks
586
+ // them to the label's own width (dimen.x) so a \l/\r line aligns to the block.
587
+ let spaceX: number;
588
+ if (p.nojustify) {
589
+ spaceX = dimen.x - spacex;
590
+ } else if (isBox) {
591
+ spaceX = Math.max(dimen.x, bb.x) - spacex;
592
+ } else if (dimen.y < bb.y) {
593
+ spaceX = Math.max(dimen.x, bb.x * Math.sqrt(1 - (dimen.y * dimen.y) / (bb.y * bb.y))) - spacex;
594
+ } else {
595
+ spaceX = dimen.x - spacex;
596
+ }
597
+ // space.y: !fixedshape → dimen.y + (bb.y - min_bb.y); fixedshape keeps dimen.y.
598
+ const spaceY = fixedshape ? dimen.y : dimen.y + (bb.y - minBb.y);
599
+ return { space: { x: spaceX, y: spaceY }, valign: labelValign(p) };
600
+ }
601
+
602
+ /** Effective sides (distortion/skew turn ellipses into 120-gons) and box test. */
603
+ function effectiveShape(p: PolySizeParams): { sides: number; isBox: boolean } {
604
+ let sides = p.sides;
605
+ if (sides <= 2 && (p.distortion !== 0 || p.skew !== 0)) sides = 120;
606
+ const isBox =
607
+ sides === 4 && Math.abs(p.orientation % 90) < 0.5 &&
608
+ p.distortion === 0 && p.skew === 0;
609
+ return { sides, isBox };
610
+ }
611
+
612
+ /** labelloc -> vertical alignment character. @see shapes.c:poly_init */
613
+ function labelValign(p: PolySizeParams): string {
614
+ const ll = p.labelloc?.[0];
615
+ return ll === 't' || ll === 'b' ? ll : 'c';
616
+ }
617
+
618
+ /** Final width/height selection (fixedshape covers the label) + gv_nodesize. */
619
+ function assembleResult(
620
+ p: PolySizeParams,
621
+ dimen: Point,
622
+ grown: { bb: Point; outline: Point; base: Point },
623
+ fixedshape: boolean,
624
+ ): Omit<PolySizeResult, 'space' | 'valign'> {
625
+ if (fixedshape) {
626
+ return {
627
+ ...gvNodesize(Math.max(dimen.x, grown.bb.x), Math.max(dimen.y, grown.bb.y), p.flip),
628
+ outlineW: Math.max(dimen.x, grown.outline.x),
629
+ outlineH: Math.max(dimen.y, grown.outline.y),
630
+ baseW: grown.base.x, baseH: grown.base.y,
631
+ };
632
+ }
633
+ return {
634
+ ...gvNodesize(grown.bb.x, grown.bb.y, p.flip),
635
+ outlineW: grown.outline.x,
636
+ outlineH: grown.outline.y,
637
+ baseW: grown.base.x, baseH: grown.base.y,
638
+ };
639
+ }