@graphty/graph-io 0.3.48 → 0.3.50

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 (600) hide show
  1. package/dist/chunks/{approximations-C2riR4NT.js → approximations-BRXsll0T.js} +2 -2
  2. package/dist/chunks/{approximations-C2riR4NT.js.map → approximations-BRXsll0T.js.map} +1 -1
  3. package/dist/chunks/bends-BGXjv_U4.js +129 -0
  4. package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
  5. package/dist/chunks/{block-Cu22ewuS.js → block-yl0f_qLO.js} +931 -164
  6. package/dist/chunks/block-yl0f_qLO.js.map +1 -0
  7. package/dist/chunks/choose-CczZJaX_.js +717 -0
  8. package/dist/chunks/choose-CczZJaX_.js.map +1 -0
  9. package/dist/chunks/{codes-CV_Bhcyi.js → codes-BE2xir2k.js} +6 -2
  10. package/dist/chunks/codes-BE2xir2k.js.map +1 -0
  11. package/dist/chunks/{constants-D0LqcsLJ.js → constants-CKkYLPtt.js} +2 -2
  12. package/dist/chunks/{constants-D0LqcsLJ.js.map → constants-CKkYLPtt.js.map} +1 -1
  13. package/dist/chunks/{context-cgmmOxZ2.js → context-DizmppHy.js} +5 -4
  14. package/dist/chunks/{context-cgmmOxZ2.js.map → context-DizmppHy.js.map} +1 -1
  15. package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
  16. package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
  17. package/dist/chunks/{credentials-BiQsnMTb.js → credentials-CmvJXYeH.js} +67 -16
  18. package/dist/chunks/credentials-CmvJXYeH.js.map +1 -0
  19. package/dist/chunks/{cx-export-BEeF6ymo.js → cx-export-Bt6NoqTQ.js} +3 -3
  20. package/dist/chunks/{cx-export-BEeF6ymo.js.map → cx-export-Bt6NoqTQ.js.map} +1 -1
  21. package/dist/chunks/descriptor-B28U25x4.js +60 -0
  22. package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
  23. package/dist/chunks/{descriptor-BJ-W0Jd-.js → descriptor-Dhez_Cew.js} +11 -2
  24. package/dist/chunks/descriptor-Dhez_Cew.js.map +1 -0
  25. package/dist/chunks/{emit-CD8xnY8s.js → emit-7Jkpg0yd.js} +1788 -133
  26. package/dist/chunks/emit-7Jkpg0yd.js.map +1 -0
  27. package/dist/chunks/{escape-DH2Egt-l.js → escape-CuCIzNMB.js} +8 -8
  28. package/dist/chunks/{escape-DH2Egt-l.js.map → escape-CuCIzNMB.js.map} +1 -1
  29. package/dist/chunks/{export-CZ7VRm4I.js → export-Cha4dRFz.js} +45 -387
  30. package/dist/chunks/export-Cha4dRFz.js.map +1 -0
  31. package/dist/chunks/{exporter-ChjL5fmP.js → exporter-1Ajud15J.js} +9 -8
  32. package/dist/chunks/{exporter-ChjL5fmP.js.map → exporter-1Ajud15J.js.map} +1 -1
  33. package/dist/chunks/{exporter-BIdaoIgh.js → exporter-B6yvL3wy.js} +7 -7
  34. package/dist/chunks/{exporter-BIdaoIgh.js.map → exporter-B6yvL3wy.js.map} +1 -1
  35. package/dist/chunks/{exporter-Dcw7Ldtq.js → exporter-BP6otMO6.js} +6 -6
  36. package/dist/chunks/{exporter-Dcw7Ldtq.js.map → exporter-BP6otMO6.js.map} +1 -1
  37. package/dist/chunks/{exporter-DtVU80Fa.js → exporter-CA5q8ROP.js} +9 -8
  38. package/dist/chunks/{exporter-DtVU80Fa.js.map → exporter-CA5q8ROP.js.map} +1 -1
  39. package/dist/chunks/{exporter-bxxjOrDZ.js → exporter-CQQZFJ2v.js} +1284 -156
  40. package/dist/chunks/exporter-CQQZFJ2v.js.map +1 -0
  41. package/dist/chunks/format-BXiAb-1h.js +408 -0
  42. package/dist/chunks/format-BXiAb-1h.js.map +1 -0
  43. package/dist/chunks/{generic-CP6YD34u.js → generic-Dc21MAdg.js} +387 -31
  44. package/dist/chunks/generic-Dc21MAdg.js.map +1 -0
  45. package/dist/chunks/{importer-B87_fmVx.js → importer-C6NVpCXp.js} +327 -84
  46. package/dist/chunks/importer-C6NVpCXp.js.map +1 -0
  47. package/dist/chunks/{importer-DPZDN40-.js → importer-CKFe4q54.js} +25 -17
  48. package/dist/chunks/importer-CKFe4q54.js.map +1 -0
  49. package/dist/chunks/{importer-Bji2MeWr.js → importer-CKbUbsJA.js} +13 -10
  50. package/dist/chunks/{importer-Bji2MeWr.js.map → importer-CKbUbsJA.js.map} +1 -1
  51. package/dist/chunks/{importer-CB_zV5_L.js → importer-ClCsdgTJ.js} +208 -1104
  52. package/dist/chunks/importer-ClCsdgTJ.js.map +1 -0
  53. package/dist/chunks/{importer-e3huMZbm.js → importer-CyVZTrf0.js} +14 -10
  54. package/dist/chunks/importer-CyVZTrf0.js.map +1 -0
  55. package/dist/chunks/{importer-CVT-JyDE.js → importer-DgG4v1Ms.js} +1537 -355
  56. package/dist/chunks/importer-DgG4v1Ms.js.map +1 -0
  57. package/dist/chunks/{importer-Cyy6UseH.js → importer-asFUrIsj.js} +66 -13
  58. package/dist/chunks/importer-asFUrIsj.js.map +1 -0
  59. package/dist/chunks/{input-Ccg9I22A.js → input-CAxt_aV-.js} +4 -4
  60. package/dist/chunks/{input-Ccg9I22A.js.map → input-CAxt_aV-.js.map} +1 -1
  61. package/dist/chunks/{json-elements-By172SVq.js → json-elements-Cq76WjnZ.js} +4 -4
  62. package/dist/chunks/{json-elements-By172SVq.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
  63. package/dist/chunks/{lexicon-u2SI5xcx.js → lexicon-IVRq2Uoo.js} +282 -74
  64. package/dist/chunks/lexicon-IVRq2Uoo.js.map +1 -0
  65. package/dist/chunks/{ontology-export-BwgMyuF0.js → ontology-export-OMo91mb0.js} +4 -4
  66. package/dist/chunks/{ontology-export-BwgMyuF0.js.map → ontology-export-OMo91mb0.js.map} +1 -1
  67. package/dist/chunks/{records-Cgvxz-Vx.js → records-NJiYvekn.js} +2 -2
  68. package/dist/chunks/{records-Cgvxz-Vx.js.map → records-NJiYvekn.js.map} +1 -1
  69. package/dist/chunks/{report-CgdsL9Hb.js → report-CwMfYa9J.js} +23 -23
  70. package/dist/chunks/{report-CgdsL9Hb.js.map → report-CwMfYa9J.js.map} +1 -1
  71. package/dist/chunks/round-trip-Cy3_SHRZ.js +79 -0
  72. package/dist/chunks/round-trip-Cy3_SHRZ.js.map +1 -0
  73. package/dist/chunks/{sigv4-LkAzsLAu.js → sigv4-BXwVbza3.js} +5 -5
  74. package/dist/chunks/sigv4-BXwVbza3.js.map +1 -0
  75. package/dist/chunks/{styles-CaABMoO1.js → styles-CAVmBLgp.js} +1237 -138
  76. package/dist/chunks/styles-CAVmBLgp.js.map +1 -0
  77. package/dist/chunks/styles-CPczw1Jz.js +1928 -0
  78. package/dist/chunks/styles-CPczw1Jz.js.map +1 -0
  79. package/dist/chunks/styles-boK6Ln54.js +2847 -0
  80. package/dist/chunks/styles-boK6Ln54.js.map +1 -0
  81. package/dist/chunks/{styles-yed-Cs1nmrjn.js → styles-yed-XeFBQ6VS.js} +506 -175
  82. package/dist/chunks/styles-yed-XeFBQ6VS.js.map +1 -0
  83. package/dist/chunks/{text-BuKQVMz2.js → text-ystE2bYi.js} +2 -2
  84. package/dist/chunks/{text-BuKQVMz2.js.map → text-ystE2bYi.js.map} +1 -1
  85. package/dist/csv.js +7 -7
  86. package/dist/cx.js +2 -2
  87. package/dist/cx2.js +2 -2
  88. package/dist/cys.js +1 -1
  89. package/dist/dot.js +8 -4
  90. package/dist/dot.js.map +1 -1
  91. package/dist/gexf.js +42 -12
  92. package/dist/gexf.js.map +1 -1
  93. package/dist/gml.js +848 -194
  94. package/dist/gml.js.map +1 -1
  95. package/dist/graph-io.js +230 -193
  96. package/dist/graph-io.js.map +1 -1
  97. package/dist/graphml.js +3 -3
  98. package/dist/json.js +3 -2
  99. package/dist/neo4j.js +6 -6
  100. package/dist/obo.js +1 -1
  101. package/dist/pajek.js +1 -1
  102. package/dist/positions.js +45 -3
  103. package/dist/positions.js.map +1 -1
  104. package/dist/sources-cypher.js +141 -23
  105. package/dist/sources-cypher.js.map +1 -1
  106. package/dist/sources-ndex.js +2 -2
  107. package/dist/sources-rest.js +32 -6
  108. package/dist/sources-rest.js.map +1 -1
  109. package/dist/sources-sparql.d.ts +1 -0
  110. package/dist/sources-sparql.js +439 -0
  111. package/dist/sources-sparql.js.map +1 -0
  112. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  113. package/dist/src/formats/cx/importer.js +5 -1
  114. package/dist/src/formats/cx/importer.js.map +1 -1
  115. package/dist/src/formats/cx/styles.d.ts +24 -1
  116. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  117. package/dist/src/formats/cx/styles.js +117 -11
  118. package/dist/src/formats/cx/styles.js.map +1 -1
  119. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  120. package/dist/src/formats/cx2/importer.js +1 -0
  121. package/dist/src/formats/cx2/importer.js.map +1 -1
  122. package/dist/src/formats/cx2/styles.d.ts.map +1 -1
  123. package/dist/src/formats/cx2/styles.js +3 -1
  124. package/dist/src/formats/cx2/styles.js.map +1 -1
  125. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cys/importer.js +1 -0
  127. package/dist/src/formats/cys/importer.js.map +1 -1
  128. package/dist/src/formats/cys/styles.d.ts +2 -0
  129. package/dist/src/formats/cys/styles.d.ts.map +1 -1
  130. package/dist/src/formats/cys/styles.js +15 -7
  131. package/dist/src/formats/cys/styles.js.map +1 -1
  132. package/dist/src/formats/dot/drawing.d.ts +98 -0
  133. package/dist/src/formats/dot/drawing.d.ts.map +1 -0
  134. package/dist/src/formats/dot/drawing.js +734 -0
  135. package/dist/src/formats/dot/drawing.js.map +1 -0
  136. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  137. package/dist/src/formats/dot/exporter.js +34 -2
  138. package/dist/src/formats/dot/exporter.js.map +1 -1
  139. package/dist/src/formats/dot/importer.d.ts +6 -1
  140. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  141. package/dist/src/formats/dot/importer.js +170 -33
  142. package/dist/src/formats/dot/importer.js.map +1 -1
  143. package/dist/src/formats/dot/index.d.ts +3 -1
  144. package/dist/src/formats/dot/index.d.ts.map +1 -1
  145. package/dist/src/formats/dot/index.js +2 -1
  146. package/dist/src/formats/dot/index.js.map +1 -1
  147. package/dist/src/formats/dot/label-places.d.ts +41 -0
  148. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  149. package/dist/src/formats/dot/label-places.js +185 -0
  150. package/dist/src/formats/dot/label-places.js.map +1 -0
  151. package/dist/src/formats/dot/names.d.ts +13 -0
  152. package/dist/src/formats/dot/names.d.ts.map +1 -1
  153. package/dist/src/formats/dot/names.js +13 -0
  154. package/dist/src/formats/dot/names.js.map +1 -1
  155. package/dist/src/formats/dot/record.d.ts +50 -0
  156. package/dist/src/formats/dot/record.d.ts.map +1 -0
  157. package/dist/src/formats/dot/record.js +275 -0
  158. package/dist/src/formats/dot/record.js.map +1 -0
  159. package/dist/src/formats/dot/styles.d.ts +72 -2
  160. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  161. package/dist/src/formats/dot/styles.js +1500 -119
  162. package/dist/src/formats/dot/styles.js.map +1 -1
  163. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  164. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  165. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  166. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  167. package/dist/src/formats/gexf/importer.d.ts +7 -0
  168. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  169. package/dist/src/formats/gexf/importer.js +41 -5
  170. package/dist/src/formats/gexf/importer.js.map +1 -1
  171. package/dist/src/formats/gexf/preview.d.ts +77 -0
  172. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  173. package/dist/src/formats/gexf/preview.js +191 -0
  174. package/dist/src/formats/gexf/preview.js.map +1 -0
  175. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  176. package/dist/src/formats/gexf/schema.js +2 -1
  177. package/dist/src/formats/gexf/schema.js.map +1 -1
  178. package/dist/src/formats/gexf/styles.d.ts +58 -31
  179. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  180. package/dist/src/formats/gexf/styles.js +848 -225
  181. package/dist/src/formats/gexf/styles.js.map +1 -1
  182. package/dist/src/formats/gml/importer.d.ts +5 -2
  183. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  184. package/dist/src/formats/gml/importer.js +258 -71
  185. package/dist/src/formats/gml/importer.js.map +1 -1
  186. package/dist/src/formats/gml/index.d.ts +1 -1
  187. package/dist/src/formats/gml/index.d.ts.map +1 -1
  188. package/dist/src/formats/gml/index.js +1 -1
  189. package/dist/src/formats/gml/index.js.map +1 -1
  190. package/dist/src/formats/gml/positions.d.ts +7 -0
  191. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  192. package/dist/src/formats/gml/positions.js +29 -7
  193. package/dist/src/formats/gml/positions.js.map +1 -1
  194. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  195. package/dist/src/formats/gml/styles.js +754 -102
  196. package/dist/src/formats/gml/styles.js.map +1 -1
  197. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  198. package/dist/src/formats/graphml/styles-plain.js +6 -10
  199. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  200. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  201. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  202. package/dist/src/formats/graphml/styles-yed.js +695 -164
  203. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  204. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  205. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  206. package/dist/src/formats/graphml/styles-yfiles3.js +431 -64
  207. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  208. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  209. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  210. package/dist/src/formats/graphml/yfiles.js +16 -6
  211. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  212. package/dist/src/formats/json/dialect.d.ts +3 -2
  213. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  214. package/dist/src/formats/json/dialect.js +39 -5
  215. package/dist/src/formats/json/dialect.js.map +1 -1
  216. package/dist/src/formats/json/importer.d.ts +13 -2
  217. package/dist/src/formats/json/importer.d.ts.map +1 -1
  218. package/dist/src/formats/json/importer.js +42 -6
  219. package/dist/src/formats/json/importer.js.map +1 -1
  220. package/dist/src/formats/json/index.d.ts +1 -1
  221. package/dist/src/formats/json/index.d.ts.map +1 -1
  222. package/dist/src/formats/json/index.js +1 -1
  223. package/dist/src/formats/json/index.js.map +1 -1
  224. package/dist/src/formats/json/positions.d.ts +5 -2
  225. package/dist/src/formats/json/positions.d.ts.map +1 -1
  226. package/dist/src/formats/json/positions.js +20 -4
  227. package/dist/src/formats/json/positions.js.map +1 -1
  228. package/dist/src/formats/json/styles.d.ts +12 -1
  229. package/dist/src/formats/json/styles.d.ts.map +1 -1
  230. package/dist/src/formats/json/styles.js +1843 -136
  231. package/dist/src/formats/json/styles.js.map +1 -1
  232. package/dist/src/formats/pajek/draw.d.ts +104 -0
  233. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  234. package/dist/src/formats/pajek/draw.js +382 -0
  235. package/dist/src/formats/pajek/draw.js.map +1 -0
  236. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  237. package/dist/src/formats/pajek/exporter.js +70 -51
  238. package/dist/src/formats/pajek/exporter.js.map +1 -1
  239. package/dist/src/formats/pajek/importer.d.ts +9 -0
  240. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  241. package/dist/src/formats/pajek/importer.js +233 -102
  242. package/dist/src/formats/pajek/importer.js.map +1 -1
  243. package/dist/src/formats/pajek/index.d.ts +1 -0
  244. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  245. package/dist/src/formats/pajek/index.js.map +1 -1
  246. package/dist/src/formats/pajek/styles.d.ts +15 -7
  247. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  248. package/dist/src/formats/pajek/styles.js +1395 -114
  249. package/dist/src/formats/pajek/styles.js.map +1 -1
  250. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  251. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  252. package/dist/src/formats/pajek/syntax.js +26 -2
  253. package/dist/src/formats/pajek/syntax.js.map +1 -1
  254. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  255. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  256. package/dist/src/formats/xgmml/emit.js +65 -5
  257. package/dist/src/formats/xgmml/emit.js.map +1 -1
  258. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  259. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  260. package/dist/src/formats/xgmml/styles.js +277 -60
  261. package/dist/src/formats/xgmml/styles.js.map +1 -1
  262. package/dist/src/index.d.ts +6 -5
  263. package/dist/src/index.d.ts.map +1 -1
  264. package/dist/src/index.js +6 -5
  265. package/dist/src/index.js.map +1 -1
  266. package/dist/src/positions/convert.d.ts.map +1 -1
  267. package/dist/src/positions/convert.js +11 -1
  268. package/dist/src/positions/convert.js.map +1 -1
  269. package/dist/src/positions/extract.d.ts.map +1 -1
  270. package/dist/src/positions/extract.js +53 -1
  271. package/dist/src/positions/extract.js.map +1 -1
  272. package/dist/src/positions/index.d.ts +1 -1
  273. package/dist/src/positions/index.d.ts.map +1 -1
  274. package/dist/src/positions/types.d.ts +59 -0
  275. package/dist/src/positions/types.d.ts.map +1 -1
  276. package/dist/src/sources/builtins.d.ts +1 -1
  277. package/dist/src/sources/builtins.d.ts.map +1 -1
  278. package/dist/src/sources/builtins.js +8 -2
  279. package/dist/src/sources/builtins.js.map +1 -1
  280. package/dist/src/sources/context.d.ts.map +1 -1
  281. package/dist/src/sources/context.js +1 -0
  282. package/dist/src/sources/context.js.map +1 -1
  283. package/dist/src/sources/credentials.d.ts +50 -1
  284. package/dist/src/sources/credentials.d.ts.map +1 -1
  285. package/dist/src/sources/credentials.js +69 -0
  286. package/dist/src/sources/credentials.js.map +1 -1
  287. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -1
  288. package/dist/src/sources/cypher/descriptor.js +5 -0
  289. package/dist/src/sources/cypher/descriptor.js.map +1 -1
  290. package/dist/src/sources/cypher/index.d.ts.map +1 -1
  291. package/dist/src/sources/cypher/index.js +125 -18
  292. package/dist/src/sources/cypher/index.js.map +1 -1
  293. package/dist/src/sources/cypher/params.d.ts +1 -1
  294. package/dist/src/sources/cypher/params.d.ts.map +1 -1
  295. package/dist/src/sources/cypher/query-builder.d.ts +17 -0
  296. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
  297. package/dist/src/sources/cypher/query-builder.js +31 -0
  298. package/dist/src/sources/cypher/query-builder.js.map +1 -1
  299. package/dist/src/sources/ids.d.ts +5 -0
  300. package/dist/src/sources/ids.d.ts.map +1 -1
  301. package/dist/src/sources/ids.js +5 -0
  302. package/dist/src/sources/ids.js.map +1 -1
  303. package/dist/src/sources/params.d.ts +3 -0
  304. package/dist/src/sources/params.d.ts.map +1 -1
  305. package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
  306. package/dist/src/sources/rest/descriptor.js +9 -0
  307. package/dist/src/sources/rest/descriptor.js.map +1 -1
  308. package/dist/src/sources/rest/openalex.d.ts +4 -2
  309. package/dist/src/sources/rest/openalex.d.ts.map +1 -1
  310. package/dist/src/sources/rest/openalex.js +4 -2
  311. package/dist/src/sources/rest/openalex.js.map +1 -1
  312. package/dist/src/sources/rest/source.d.ts.map +1 -1
  313. package/dist/src/sources/rest/source.js +38 -0
  314. package/dist/src/sources/rest/source.js.map +1 -1
  315. package/dist/src/sources/run.d.ts +2 -0
  316. package/dist/src/sources/run.d.ts.map +1 -1
  317. package/dist/src/sources/run.js +30 -3
  318. package/dist/src/sources/run.js.map +1 -1
  319. package/dist/src/sources/sigv4.d.ts +5 -3
  320. package/dist/src/sources/sigv4.d.ts.map +1 -1
  321. package/dist/src/sources/sigv4.js +6 -4
  322. package/dist/src/sources/sigv4.js.map +1 -1
  323. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  324. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  325. package/dist/src/sources/sparql/descriptor.js +64 -0
  326. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  327. package/dist/src/sources/sparql/index.d.ts +28 -0
  328. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  329. package/dist/src/sources/sparql/index.js +327 -0
  330. package/dist/src/sources/sparql/index.js.map +1 -0
  331. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  332. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  333. package/dist/src/sources/sparql/ntriples.js +180 -0
  334. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  335. package/dist/src/sources/sparql/params.d.ts +27 -0
  336. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  337. package/dist/src/sources/sparql/params.js +5 -0
  338. package/dist/src/sources/sparql/params.js.map +1 -0
  339. package/dist/src/sources/sparql/query.d.ts +73 -0
  340. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  341. package/dist/src/sources/sparql/query.js +164 -0
  342. package/dist/src/sources/sparql/query.js.map +1 -0
  343. package/dist/src/sources/types.d.ts +60 -0
  344. package/dist/src/sources/types.d.ts.map +1 -1
  345. package/dist/src/styles/annotations.d.ts +61 -5
  346. package/dist/src/styles/annotations.d.ts.map +1 -1
  347. package/dist/src/styles/annotations.js +130 -22
  348. package/dist/src/styles/annotations.js.map +1 -1
  349. package/dist/src/styles/canon/bends.d.ts +46 -0
  350. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  351. package/dist/src/styles/canon/bends.js +123 -0
  352. package/dist/src/styles/canon/bends.js.map +1 -1
  353. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  354. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  355. package/dist/src/styles/canon/color-tables.js +10 -4
  356. package/dist/src/styles/canon/color-tables.js.map +1 -1
  357. package/dist/src/styles/canon/color.d.ts +3 -1
  358. package/dist/src/styles/canon/color.d.ts.map +1 -1
  359. package/dist/src/styles/canon/color.js +103 -3
  360. package/dist/src/styles/canon/color.js.map +1 -1
  361. package/dist/src/styles/canon/enums.d.ts +2 -2
  362. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  363. package/dist/src/styles/canon/enums.js +89 -7
  364. package/dist/src/styles/canon/enums.js.map +1 -1
  365. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  366. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  367. package/dist/src/styles/canon/graphviz.js +57 -9
  368. package/dist/src/styles/canon/graphviz.js.map +1 -1
  369. package/dist/src/styles/canon/number.d.ts +8 -0
  370. package/dist/src/styles/canon/number.d.ts.map +1 -1
  371. package/dist/src/styles/canon/number.js +18 -0
  372. package/dist/src/styles/canon/number.js.map +1 -1
  373. package/dist/src/styles/canon/text.d.ts +29 -2
  374. package/dist/src/styles/canon/text.d.ts.map +1 -1
  375. package/dist/src/styles/canon/text.js +156 -16
  376. package/dist/src/styles/canon/text.js.map +1 -1
  377. package/dist/src/styles/codes.d.ts +2 -0
  378. package/dist/src/styles/codes.d.ts.map +1 -1
  379. package/dist/src/styles/codes.js +2 -0
  380. package/dist/src/styles/codes.js.map +1 -1
  381. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  382. package/dist/src/styles/cyjs/cascade.js +1139 -79
  383. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  384. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  385. package/dist/src/styles/cyjs/defaults-table.js +4 -0
  386. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  387. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  388. package/dist/src/styles/cyjs/emit.js +232 -10
  389. package/dist/src/styles/cyjs/emit.js.map +1 -1
  390. package/dist/src/styles/cyjs/face.d.ts +20 -0
  391. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  392. package/dist/src/styles/cyjs/face.js +332 -0
  393. package/dist/src/styles/cyjs/face.js.map +1 -0
  394. package/dist/src/styles/cyjs/mappers.d.ts +44 -1
  395. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  396. package/dist/src/styles/cyjs/mappers.js +475 -26
  397. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  398. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  399. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  400. package/dist/src/styles/cyjs/routes.js +360 -0
  401. package/dist/src/styles/cyjs/routes.js.map +1 -0
  402. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  403. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  404. package/dist/src/styles/cytoscape/charts.js +560 -0
  405. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  406. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  407. package/dist/src/styles/cytoscape/emit.js +156 -48
  408. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  409. package/dist/src/styles/cytoscape/lexicon.d.ts +91 -3
  410. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  411. package/dist/src/styles/cytoscape/lexicon.js +387 -77
  412. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  413. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  414. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  415. package/dist/src/styles/cytoscape/mappings.js +92 -0
  416. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  417. package/dist/src/styles/cytoscape/resolve.d.ts +42 -2
  418. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  419. package/dist/src/styles/cytoscape/resolve.js +623 -17
  420. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  421. package/dist/src/styles/defaults.d.ts +46 -26
  422. package/dist/src/styles/defaults.d.ts.map +1 -1
  423. package/dist/src/styles/defaults.js +308 -71
  424. package/dist/src/styles/defaults.js.map +1 -1
  425. package/dist/src/styles/index.d.ts +4 -3
  426. package/dist/src/styles/index.d.ts.map +1 -1
  427. package/dist/src/styles/index.js +3 -2
  428. package/dist/src/styles/index.js.map +1 -1
  429. package/dist/src/styles/internal.d.ts +1 -0
  430. package/dist/src/styles/internal.d.ts.map +1 -1
  431. package/dist/src/styles/internal.js +1 -0
  432. package/dist/src/styles/internal.js.map +1 -1
  433. package/dist/src/styles/io/generic.d.ts.map +1 -1
  434. package/dist/src/styles/io/generic.js +56 -16
  435. package/dist/src/styles/io/generic.js.map +1 -1
  436. package/dist/src/styles/io/round-trip.d.ts +56 -0
  437. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  438. package/dist/src/styles/io/round-trip.js +138 -0
  439. package/dist/src/styles/io/round-trip.js.map +1 -0
  440. package/dist/src/styles/io/writer.d.ts.map +1 -1
  441. package/dist/src/styles/io/writer.js +6 -1
  442. package/dist/src/styles/io/writer.js.map +1 -1
  443. package/dist/src/styles/notes.d.ts.map +1 -1
  444. package/dist/src/styles/notes.js +1 -0
  445. package/dist/src/styles/notes.js.map +1 -1
  446. package/dist/src/styles/plan/features.d.ts +1 -1
  447. package/dist/src/styles/plan/features.d.ts.map +1 -1
  448. package/dist/src/styles/plan/features.js +22 -2
  449. package/dist/src/styles/plan/features.js.map +1 -1
  450. package/dist/src/styles/plan/index.d.ts +1 -1
  451. package/dist/src/styles/plan/index.d.ts.map +1 -1
  452. package/dist/src/styles/plan/index.js +1 -1
  453. package/dist/src/styles/plan/index.js.map +1 -1
  454. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  455. package/dist/src/styles/plan/plan.js +61 -4
  456. package/dist/src/styles/plan/plan.js.map +1 -1
  457. package/dist/src/styles/plan/resolve.d.ts +11 -0
  458. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  459. package/dist/src/styles/plan/resolve.js +40 -4
  460. package/dist/src/styles/plan/resolve.js.map +1 -1
  461. package/dist/src/styles/slots.d.ts +14 -0
  462. package/dist/src/styles/slots.d.ts.map +1 -0
  463. package/dist/src/styles/slots.js +20 -0
  464. package/dist/src/styles/slots.js.map +1 -0
  465. package/dist/src/styles/types.d.ts +687 -6
  466. package/dist/src/styles/types.d.ts.map +1 -1
  467. package/dist/src/styles/vocabulary.d.ts +3 -2
  468. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  469. package/dist/src/styles/vocabulary.js +224 -0
  470. package/dist/src/styles/vocabulary.js.map +1 -1
  471. package/dist/styles.js +30 -239
  472. package/dist/styles.js.map +1 -1
  473. package/dist/xgmml.js +3 -3
  474. package/package.json +27 -7
  475. package/src/formats/cx/importer.ts +6 -1
  476. package/src/formats/cx/styles.ts +143 -9
  477. package/src/formats/cx2/importer.ts +1 -0
  478. package/src/formats/cx2/styles.ts +3 -1
  479. package/src/formats/cys/importer.ts +1 -0
  480. package/src/formats/cys/styles.ts +27 -5
  481. package/src/formats/dot/drawing.ts +799 -0
  482. package/src/formats/dot/exporter.ts +37 -1
  483. package/src/formats/dot/importer.ts +192 -36
  484. package/src/formats/dot/index.ts +3 -1
  485. package/src/formats/dot/label-places.ts +241 -0
  486. package/src/formats/dot/names.ts +15 -0
  487. package/src/formats/dot/record.ts +336 -0
  488. package/src/formats/dot/styles.ts +1702 -149
  489. package/src/formats/gexf/dialog-metrics.ts +61 -0
  490. package/src/formats/gexf/importer.ts +50 -5
  491. package/src/formats/gexf/preview.ts +217 -0
  492. package/src/formats/gexf/schema.ts +2 -1
  493. package/src/formats/gexf/styles.ts +1099 -245
  494. package/src/formats/gml/importer.ts +291 -76
  495. package/src/formats/gml/index.ts +1 -1
  496. package/src/formats/gml/positions.ts +29 -7
  497. package/src/formats/gml/styles.ts +852 -110
  498. package/src/formats/graphml/styles-plain.ts +6 -15
  499. package/src/formats/graphml/styles-yed.ts +765 -176
  500. package/src/formats/graphml/styles-yfiles3.ts +487 -63
  501. package/src/formats/graphml/yfiles.ts +19 -6
  502. package/src/formats/json/dialect.ts +41 -5
  503. package/src/formats/json/importer.ts +59 -7
  504. package/src/formats/json/index.ts +1 -0
  505. package/src/formats/json/positions.ts +22 -5
  506. package/src/formats/json/styles.ts +2123 -171
  507. package/src/formats/pajek/draw.ts +469 -0
  508. package/src/formats/pajek/exporter.ts +81 -49
  509. package/src/formats/pajek/importer.ts +278 -103
  510. package/src/formats/pajek/index.ts +1 -0
  511. package/src/formats/pajek/styles.ts +1506 -133
  512. package/src/formats/pajek/syntax.ts +27 -2
  513. package/src/formats/xgmml/emit.ts +73 -5
  514. package/src/formats/xgmml/styles.ts +330 -71
  515. package/src/index.ts +12 -1
  516. package/src/positions/convert.ts +12 -1
  517. package/src/positions/extract.ts +55 -1
  518. package/src/positions/index.ts +1 -0
  519. package/src/positions/types.ts +60 -0
  520. package/src/sources/builtins.ts +8 -1
  521. package/src/sources/context.ts +1 -0
  522. package/src/sources/credentials.ts +90 -1
  523. package/src/sources/cypher/descriptor.ts +7 -1
  524. package/src/sources/cypher/index.ts +149 -18
  525. package/src/sources/cypher/params.ts +1 -1
  526. package/src/sources/cypher/query-builder.ts +33 -0
  527. package/src/sources/ids.ts +6 -0
  528. package/src/sources/params.ts +3 -0
  529. package/src/sources/rest/descriptor.ts +9 -0
  530. package/src/sources/rest/openalex.ts +4 -2
  531. package/src/sources/rest/source.ts +41 -0
  532. package/src/sources/run.ts +35 -3
  533. package/src/sources/sigv4.ts +6 -4
  534. package/src/sources/sparql/descriptor.ts +67 -0
  535. package/src/sources/sparql/index.ts +371 -0
  536. package/src/sources/sparql/ntriples.ts +219 -0
  537. package/src/sources/sparql/params.ts +28 -0
  538. package/src/sources/sparql/query.ts +216 -0
  539. package/src/sources/types.ts +68 -0
  540. package/src/styles/annotations.ts +201 -27
  541. package/src/styles/canon/bends.ts +137 -0
  542. package/src/styles/canon/color-tables.ts +10 -4
  543. package/src/styles/canon/color.ts +105 -3
  544. package/src/styles/canon/enums.ts +107 -8
  545. package/src/styles/canon/graphviz.ts +71 -10
  546. package/src/styles/canon/number.ts +19 -0
  547. package/src/styles/canon/text.ts +187 -16
  548. package/src/styles/codes.ts +2 -0
  549. package/src/styles/cyjs/cascade.ts +1303 -84
  550. package/src/styles/cyjs/defaults-table.ts +4 -0
  551. package/src/styles/cyjs/emit.ts +268 -14
  552. package/src/styles/cyjs/face.ts +372 -0
  553. package/src/styles/cyjs/mappers.ts +506 -27
  554. package/src/styles/cyjs/routes.ts +432 -0
  555. package/src/styles/cytoscape/charts.ts +684 -0
  556. package/src/styles/cytoscape/emit.ts +170 -48
  557. package/src/styles/cytoscape/lexicon.ts +431 -78
  558. package/src/styles/cytoscape/mappings.ts +108 -0
  559. package/src/styles/cytoscape/resolve.ts +741 -17
  560. package/src/styles/defaults.ts +417 -108
  561. package/src/styles/index.ts +5 -0
  562. package/src/styles/internal.ts +1 -0
  563. package/src/styles/io/generic.ts +79 -23
  564. package/src/styles/io/round-trip.ts +202 -0
  565. package/src/styles/io/writer.ts +6 -1
  566. package/src/styles/notes.ts +1 -0
  567. package/src/styles/plan/features.ts +23 -2
  568. package/src/styles/plan/index.ts +1 -1
  569. package/src/styles/plan/plan.ts +69 -5
  570. package/src/styles/plan/resolve.ts +47 -4
  571. package/src/styles/slots.ts +25 -0
  572. package/src/styles/types.ts +698 -5
  573. package/src/styles/vocabulary.ts +232 -2
  574. package/dist/chunks/block-Cu22ewuS.js.map +0 -1
  575. package/dist/chunks/choose-Cdx6Enl2.js +0 -57
  576. package/dist/chunks/choose-Cdx6Enl2.js.map +0 -1
  577. package/dist/chunks/codes-CV_Bhcyi.js.map +0 -1
  578. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  579. package/dist/chunks/credentials-BiQsnMTb.js.map +0 -1
  580. package/dist/chunks/descriptor-BJ-W0Jd-.js.map +0 -1
  581. package/dist/chunks/emit-CD8xnY8s.js.map +0 -1
  582. package/dist/chunks/export-CZ7VRm4I.js.map +0 -1
  583. package/dist/chunks/exporter-bxxjOrDZ.js.map +0 -1
  584. package/dist/chunks/format-BMS-1Nxb.js +0 -64
  585. package/dist/chunks/format-BMS-1Nxb.js.map +0 -1
  586. package/dist/chunks/generic-CP6YD34u.js.map +0 -1
  587. package/dist/chunks/importer-B87_fmVx.js.map +0 -1
  588. package/dist/chunks/importer-CB_zV5_L.js.map +0 -1
  589. package/dist/chunks/importer-CVT-JyDE.js.map +0 -1
  590. package/dist/chunks/importer-Cyy6UseH.js.map +0 -1
  591. package/dist/chunks/importer-DPZDN40-.js.map +0 -1
  592. package/dist/chunks/importer-e3huMZbm.js.map +0 -1
  593. package/dist/chunks/lexicon-u2SI5xcx.js.map +0 -1
  594. package/dist/chunks/sigv4-LkAzsLAu.js.map +0 -1
  595. package/dist/chunks/styles-CaABMoO1.js.map +0 -1
  596. package/dist/chunks/styles-P_gmFAOi.js +0 -770
  597. package/dist/chunks/styles-P_gmFAOi.js.map +0 -1
  598. package/dist/chunks/styles-yed-Cs1nmrjn.js.map +0 -1
  599. package/dist/chunks/writer-DvHTl36J.js +0 -449
  600. package/dist/chunks/writer-DvHTl36J.js.map +0 -1
@@ -14,6 +14,8 @@ function v(value, source) {
14
14
  }
15
15
  const CY = "cytoscape-impl vizmap-gui-impl default_vizmap.xml, style default, line";
16
16
  const CYL = "cytoscape-api BasicVisualLexicon.java line";
17
+ /** Cytoscape desktop's zigzag and sine-wave strokes: both swing 10 px and repeat every 20 px. */
18
+ const CY_WAVE = "cytoscape-impl ding-presentation-impl 3.10.5 org.cytoscape.ding.impl.strokes: ZigzagStroke (amplitude 10, a turn every 10) and SineWaveStroke (amplitude 10, wavelength 20)";
17
19
  const CYJS = "cytoscape.js 3.34.3 dist/cytoscape.cjs.js line";
18
20
  const GV = "graphviz.org/docs/attrs";
19
21
  const YED_QA = "yEd Q&A, How can I change the default nodes and/or default edges";
@@ -23,13 +25,73 @@ const YED_BG = "yFiles for Java 2.19 DefaultBackgroundRenderer API docs";
23
25
  const Y3 = "yFiles for HTML API docs,";
24
26
  const GEPHI = "gephi master 92e503df61a7";
25
27
  const VIS = "vis-network 10.1.2 vis-network.esm.js";
28
+ const VIS9 = "vis-network 9.1.9 standalone/umd/vis-network.js";
26
29
  const SIGMA = "sigma 3.0.3 packages/sigma/src";
27
- const GEXFJS = "github.com/raphv/gexf-js ebfd2a7213d3 js/gexfjs.js";
30
+ const SIGMA4 = "sigma 4.0.1 dist/types-d8ce3382.esm.js";
28
31
  const PAJEK = "Pajek 6.02 reference manual";
29
- const PAJEK_SHAPES = "the SHAPES.CFG Pajek writes when none exists (DrawEPS.htm), " +
30
- "github.com/ohshane/radical-clustering 0f568f67893558035868b3db1bf365870ba52f6b shapes.cfg, SHAPE ELLIPSE";
31
32
  const OGDF = "ogdf master 1a40505ac006";
33
+ const OGDF_SVG = "OGDF 2025.10 GraphIO::drawSVG with its default SVGSettings (graph-io/test/fidelity/oracles/gml-specimen-labels-p5.svg: ";
32
34
  const NX = "networkx 6da4704cbf32 networkx/drawing/nx_pylab.py line";
35
+ const MEASURED = "measured in the program's own SVG export (graph-io/test/fidelity/oracles/";
36
+ const PAJEK_SVG = `${MEASURED}pajek-`;
37
+ /**
38
+ * Cytoscape desktop draws an arrow `EDGE_*_ARROW_SIZE` (6 by default, the neutral arrowSize 1) plus the line width
39
+ * across, a DELTA twice as long, a square, a circle and a half arrow as long as that, and a T bar as wide as the
40
+ * DELTA is long and a tenth of that deep: measured on cx-ndex-90f78bcd (width 1), cx2-u2os-hierarchy (width 2),
41
+ * cx2-signor-aml and cx2-syn-bypass (widths 1 and 7).
42
+ */
43
+ const CYTOSCAPE_ARROWHEAD = {
44
+ length: (size, width) => 2 * (6 * size + width),
45
+ aspect: 0.5,
46
+ shapes: {
47
+ square: { length: 0.5, aspect: 1 },
48
+ circle: { length: 0.5, aspect: 1 },
49
+ "circle-open": { length: 0.5, aspect: 1 },
50
+ // HALF_TOP's barb: 1.135 long and 1 to one side of its line
51
+ half: { length: 0.5675, aspect: 0.881 },
52
+ "other:half-bottom": { length: 0.5675, aspect: 0.881 },
53
+ tee: { length: 0.1, aspect: 10 },
54
+ // a square's outline, and a half circle (half a CIRCLE deep, as wide)
55
+ "other:open-square": { length: 0.5, aspect: 1 },
56
+ "other:half-circle": { length: 0.25, aspect: 2 },
57
+ "other:open-half-circle": { length: 0.25, aspect: 2 },
58
+ },
59
+ source: `${MEASURED}cx-ndex-90f78bcd, cx2-u2os-hierarchy, cx2-signor-aml, cx2-syn-bypass, cx-syn-mappings: each arrow's unit glyph), Cytoscape 3.10.5`,
60
+ };
61
+ /**
62
+ * Cytoscape desktop draws a node's outline its size less its border's width across and strokes the border along it,
63
+ * so the border's outer edge is the node's size: a 40 x 40 HEXAGON with a border of 1 is a 39-wide path.
64
+ */
65
+ /** Cytoscape desktop draws a curved edge through its handles, and the loops it adds itself, through their midpoints. */
66
+ const CYTOSCAPE_BEND_CURVE = v("midpoints", "cytoscape-impl ding-presentation-impl GraphGraphics.java computeCubicPolyEdgePath (cubic pieces between the handles' midpoints, controls pulled toward each handle by CURVE_ELLIPTICAL)");
67
+ /**
68
+ * Cytoscape desktop draws a label's background box round its words alone: as wide as the text and one line tall,
69
+ * the font's ascent plus descent (1.164 of a DejaVu Sans font's size), which is also the step between its lines.
70
+ */
71
+ const CYTOSCAPE_LABEL_BOX = `${MEASURED}xgmml-specimen-labels: label-background-* boxes and the captions' two lines), Cytoscape 3.10.5`;
72
+ const CYTOSCAPE_LABEL_PADDING = v(0, CYTOSCAPE_LABEL_BOX);
73
+ const CYTOSCAPE_LABEL_LINE_HEIGHT = v(1, CYTOSCAPE_LABEL_BOX);
74
+ const CYTOSCAPE_BORDER_INSIDE = v("inside", `${MEASURED}cx2-repro-shared-interaction, cys-luad-vest-v2, cx2-synthetic-lethal), Cytoscape 3.10.5`);
75
+ /**
76
+ * draw.io draws a yEd or yFiles file's arrows `endSize` 6 plus the line width long and as wide; yEd itself could not
77
+ * be run, so draw.io's drawing stands in.
78
+ */
79
+ const DRAWIO_ARROWHEAD = {
80
+ length: (size, width) => 6 * size + width,
81
+ aspect: 1,
82
+ source: `${MEASURED}graphml-*, draw.io 32.4.1 standing in for yEd)`,
83
+ };
84
+ /**
85
+ * The largest corner radius of a rounded rectangle whose file gives none, in the program's units. Cytoscape.js is the
86
+ * one program that publishes its rule (`getRoundRectangleRadius`); the others draw barely rounded corners too, so they
87
+ * get the same 8, and a 513 x 453 group keeps small corners instead of a quarter of its side.
88
+ * @param tool - the program, when it is not Cytoscape.js and so states no radius of its own
89
+ * @returns the default
90
+ */
91
+ function cornerCap(tool) {
92
+ const rule = `${CYJS} 4386`;
93
+ return v(8, tool === undefined ? rule : `${rule} (Cytoscape.js's rule; ${tool} states none)`);
94
+ }
33
95
  /**
34
96
  * The defaults of every program graph-io recognizes as a file's writer, by tool id.
35
97
  * @category Styles
@@ -39,6 +101,8 @@ export const TOOL_DEFAULTS = new Map([
39
101
  tool: "cytoscape",
40
102
  version: "cytoscape-impl develop 6c63e97c5152 (3.11)",
41
103
  units: "px",
104
+ roundedCornerRadius: cornerCap("cytoscape"),
105
+ arrowhead: CYTOSCAPE_ARROWHEAD,
42
106
  node: {
43
107
  fill: v("#89d0f5", `${CY} 382`),
44
108
  fillOpacity: v(1, `${CY} 383`),
@@ -48,29 +112,41 @@ export const TOOL_DEFAULTS = new Map([
48
112
  borderColor: v("#cccccc", `${CY} 392`),
49
113
  borderWidth: v(0, `${CY} 350`),
50
114
  borderStyle: v("solid", `${CY} 366`),
115
+ borderPosition: CYTOSCAPE_BORDER_INSIDE,
116
+ borderWaveAmplitude: v(10, CY_WAVE),
117
+ borderWavePeriod: v(20, CY_WAVE),
51
118
  labelColor: v("#000000", `${CY} 395`),
52
- labelFont: v("sans-serif", `${CY} 370`),
119
+ labelFont: v("DejaVu Sans, sans-serif", `${CY} 370 (SansSerif, drawn in Java's face for it)`),
53
120
  labelWeight: v("normal", `${CY} 370`),
54
121
  labelItalic: v(false, `${CY} 370`),
55
122
  labelSize: v(12, `${CY} 371`),
123
+ labelWrapWidth: v(200, `${CY} 372`),
124
+ labelWrapTrailingSpace: v(true, `${MEASURED}cx-ndex-90f78bcd: each word is measured with the space after it), Cytoscape 3.10.5`),
56
125
  labelPosition: v("center", `${CY} 380`),
126
+ labelPadding: CYTOSCAPE_LABEL_PADDING,
127
+ labelLineHeight: CYTOSCAPE_LABEL_LINE_HEIGHT,
57
128
  },
58
129
  edge: {
59
130
  color: v("#848484", `${CY} 431`),
60
131
  width: v(2, `${CY} 417`),
61
132
  lineStyle: v("solid", `${CY} 438`),
133
+ waveAmplitude: v(10, CY_WAVE),
134
+ wavePeriod: v(20, CY_WAVE),
62
135
  opacity: v(1, `${CY} 423`),
63
136
  sourceArrow: v("none", `${CY} 437`),
64
137
  targetArrow: v("none", `${CY} 428`),
65
138
  sourceArrowColor: v("#000000", `${CY} 432`),
66
139
  targetArrowColor: v("#000000", `${CY} 432`),
67
140
  labelColor: v("#000000", `${CY} 415`),
68
- labelFont: v("sans-serif", `${CY} 439`),
141
+ labelFont: v("DejaVu Sans, sans-serif", `${CY} 439 (SansSerif, drawn in Java's face for it)`),
69
142
  labelWeight: v("normal", `${CY} 439`),
70
143
  labelItalic: v(false, `${CY} 439`),
71
144
  labelSize: v(10, `${CY} 439`),
145
+ labelPadding: CYTOSCAPE_LABEL_PADDING,
146
+ labelLineHeight: CYTOSCAPE_LABEL_LINE_HEIGHT,
72
147
  // EDGE_CURVED is true there, but it only rounds an edge's bends: an edge without bends is straight
73
148
  curved: v(false, `${CY} 422`),
149
+ bendCurve: CYTOSCAPE_BEND_CURVE,
74
150
  },
75
151
  graph: { background: v("#ffffff", `${CY} 335`) },
76
152
  derived: [{ kind: "labelFromColumn", column: "name", source: `${CY} 406-408` }],
@@ -79,6 +155,8 @@ export const TOOL_DEFAULTS = new Map([
79
155
  tool: "cytoscape-fallbacks",
80
156
  version: "cytoscape-api develop (3.11)",
81
157
  units: "px",
158
+ roundedCornerRadius: cornerCap("cytoscape-fallbacks"),
159
+ arrowhead: CYTOSCAPE_ARROWHEAD,
82
160
  node: {
83
161
  fill: v("#c80000", `${CYL} 83`),
84
162
  fillOpacity: v(1, `${CYL} 273`),
@@ -87,24 +165,36 @@ export const TOOL_DEFAULTS = new Map([
87
165
  height: v(40, `${CYL} 163`),
88
166
  borderColor: v("#000000", `${CYL} 230`),
89
167
  borderWidth: v(2, `${CYL} 54`),
168
+ borderPosition: CYTOSCAPE_BORDER_INSIDE,
169
+ borderWaveAmplitude: v(10, CY_WAVE),
170
+ borderWavePeriod: v(20, CY_WAVE),
90
171
  labelColor: v("#000000", `${CYL} 91`),
91
- labelFont: v("sans-serif", `${CYL} 255`),
172
+ labelFont: v("DejaVu Sans, sans-serif", `${CYL} 255 (SansSerif, drawn in Java's face for it)`),
92
173
  labelWeight: v("normal", `${CYL} 255`),
93
174
  labelItalic: v(false, `${CYL} 255`),
94
175
  labelSize: v(12, `${CYL} 55`),
176
+ labelWrapWidth: v(200, `${CYL} 196`),
177
+ labelWrapTrailingSpace: v(true, `${MEASURED}cx-ndex-90f78bcd: each word is measured with the space after it), Cytoscape 3.10.5`),
95
178
  labelPosition: v("center", `${CYL} 205`),
179
+ labelPadding: CYTOSCAPE_LABEL_PADDING,
180
+ labelLineHeight: CYTOSCAPE_LABEL_LINE_HEIGHT,
96
181
  },
97
182
  edge: {
98
183
  color: v("#404040", `${CYL} 469`),
99
184
  width: v(1, `${CYL} 368`),
100
185
  lineStyle: v("solid", `${CYL} 392`),
186
+ waveAmplitude: v(10, CY_WAVE),
187
+ wavePeriod: v(20, CY_WAVE),
101
188
  sourceArrow: v("none", `${CYL} 487`),
102
189
  targetArrow: v("none", `${CYL} 493`),
103
190
  labelColor: v("#000000", `${CYL} 327`),
104
- labelFont: v("sans-serif", `${CYL} 408`),
191
+ labelFont: v("DejaVu Sans, sans-serif", `${CYL} 408 (SansSerif, drawn in Java's face for it)`),
105
192
  labelWeight: v("normal", `${CYL} 408`),
106
193
  labelItalic: v(false, `${CYL} 408`),
107
194
  labelSize: v(10, `${CYL} 416`),
195
+ labelPadding: CYTOSCAPE_LABEL_PADDING,
196
+ labelLineHeight: CYTOSCAPE_LABEL_LINE_HEIGHT,
197
+ bendCurve: CYTOSCAPE_BEND_CURVE,
108
198
  },
109
199
  graph: { background: v("#ffffff", `${CYL} 667`) },
110
200
  derived: [],
@@ -113,6 +203,22 @@ export const TOOL_DEFAULTS = new Map([
113
203
  tool: "cytoscape-js",
114
204
  version: "cytoscape.js 3.34.3",
115
205
  units: "px",
206
+ roundedCornerRadius: cornerCap(),
207
+ arrowhead: {
208
+ // getArrowWidth, and the triangle's points at +-0.15, -0.3 of it
209
+ length: (size, width) => 0.3 * Math.max((width * 13.37) ** 0.9, 29) * size,
210
+ aspect: 1,
211
+ // a tee is 0.1 of the arrow width deep, the triangle 0.3 long; triangle-tee reaches back to its bar
212
+ // at 0.5, circle-triangle to 0.6 and triangle-cross to its cross line at 0.4 plus the line's width
213
+ shapes: {
214
+ tee: { length: 1 / 3, aspect: 3 },
215
+ "other:triangle-tee": { length: 5 / 3, aspect: 0.6 },
216
+ "other:triangle-cross": { length: 1.5, aspect: 0.66 },
217
+ "other:circle-triangle": { length: 2, aspect: 0.5 },
218
+ "other:chevron": { length: 2 / 3, aspect: 1.5 },
219
+ },
220
+ source: `${CYJS} 23497 (getArrowWidth), 22714-22716 (triangle), 22813-22814 (tee), 22627 (arrowShapeWidth)`,
221
+ },
116
222
  node: {
117
223
  fill: v("#999999", `${CYJS} 18536`),
118
224
  fillOpacity: v(1, `${CYJS} 18538`),
@@ -122,17 +228,42 @@ export const TOOL_DEFAULTS = new Map([
122
228
  borderColor: v("#000000", `${CYJS} 18555`),
123
229
  borderWidth: v(0, `${CYJS} 18557`),
124
230
  borderStyle: v("solid", `${CYJS} 18558`),
231
+ borderPosition: v("center", `${CYJS} 18563`),
232
+ outerBorderColor: v("#999999", `${CYJS} 18564`),
233
+ // the underlay and the overlay draw nothing until an opacity is set; then these
234
+ underlayColor: v("#000000", `${CYJS} 18524`),
235
+ underlayPadding: v(10, `${CYJS} 18525`),
236
+ underlayShape: v("round-rectangle", `${CYJS} 18526`),
237
+ overlayColor: v("#000000", `${CYJS} 18519`),
238
+ overlayPadding: v(10, `${CYJS} 18520`),
239
+ overlayShape: v("round-rectangle", `${CYJS} 18521`),
125
240
  opacity: v(1, `${CYJS} 18503`),
126
241
  labelColor: v("#000000", `${CYJS} 18474`),
127
242
  labelSize: v(16, `${CYJS} 18496`),
128
243
  labelFont: v("Helvetica Neue, Helvetica, sans-serif", `${CYJS} 18493`),
129
244
  labelWeight: v("normal", `${CYJS} 18495`),
130
245
  labelPosition: v("top", `${CYJS} 18470-18471`),
246
+ // text-wrap: wrap measures `subline + word + wordSeparator` against text-max-width; ponytail: a
247
+ // line's last word has no separator there, where graphty counts a space after it too
248
+ labelWrapTrailingSpace: v(true, `${CYJS} 25218`),
131
249
  },
132
250
  edge: {
133
251
  color: v("#999999", `${CYJS} 18639`),
134
252
  sourceArrowColor: v("#999999", `${CYJS} 18639`),
135
253
  targetArrowColor: v("#999999", `${CYJS} 18639`),
254
+ outlineColor: v("#000000", `${CYJS} 18644`),
255
+ underlayColor: v("#000000", `${CYJS} 18524`),
256
+ underlayPadding: v(10, `${CYJS} 18525`),
257
+ overlayColor: v("#000000", `${CYJS} 18519`),
258
+ overlayPadding: v(10, `${CYJS} 18520`),
259
+ gradientKind: v("none", `${CYJS} 18640 (line-fill solid)`),
260
+ midSourceArrowColor: v("#999999", `${CYJS} 18639`),
261
+ midTargetArrowColor: v("#999999", `${CYJS} 18639`),
262
+ // an edge's label is centered on the line's middle (recalculateEdgeLabelProjections)
263
+ labelPosition: v("center", `${CYJS} 24942`),
264
+ // a source or target label is centered on the line where it leaves its node, unless offset
265
+ sourceLabelOffset: v(0, `${CYJS} 18511, 18515`),
266
+ targetLabelOffset: v(0, `${CYJS} 18511, 18515`),
136
267
  width: v(3, `${CYJS} 18711`),
137
268
  lineStyle: v("solid", `${CYJS} 18638`),
138
269
  opacity: v(1, `${CYJS} 18503`),
@@ -140,28 +271,56 @@ export const TOOL_DEFAULTS = new Map([
140
271
  targetArrow: v("none", `${CYJS} 18671`),
141
272
  arrowSize: v(1, `${CYJS} 18660`),
142
273
  curved: v(false, `${CYJS} 18658`),
274
+ // control-point-step-size 40: a quadratic's middle is half as far out as its control point
275
+ fanSpacing: v(20, `${CYJS} 18647`),
143
276
  labelColor: v("#000000", `${CYJS} 18474`),
144
277
  labelSize: v(16, `${CYJS} 18496`),
145
278
  labelFont: v("Helvetica Neue, Helvetica, sans-serif", `${CYJS} 18493`),
146
279
  labelWeight: v("normal", `${CYJS} 18495`),
147
280
  },
148
- graph: {},
281
+ graph: {
282
+ // the canvas is cleared to transparent, so the page's default white shows through
283
+ background: v("#ffffff", `${CYJS} 31537 (clearCanvas: clearRect)`),
284
+ },
149
285
  derived: [],
150
286
  },
151
287
  {
152
288
  tool: "graphviz",
153
289
  version: "graphviz main (16.1.0)",
154
290
  units: "px",
291
+ roundedCornerRadius: cornerCap("graphviz"),
292
+ arrowhead: {
293
+ // ARROW_LENGTH 10 and the normal arrow's half width 0.35 of its length
294
+ length: (size) => 10 * size,
295
+ aspect: 0.7,
296
+ // each arrow type's length factor and the half width its arrow_type_* function draws
297
+ shapes: {
298
+ tee: { length: 0.2, aspect: 5 },
299
+ square: { length: 0.8, aspect: 1 },
300
+ diamond: { length: 1.2, aspect: 2 / 3 },
301
+ "diamond-open": { length: 1.2, aspect: 2 / 3 },
302
+ circle: { length: 0.8, aspect: 1 },
303
+ "circle-open": { length: 0.8, aspect: 1 },
304
+ crow: { length: 1, aspect: 0.9 },
305
+ vee: { length: 1, aspect: 0.9 },
306
+ // the arc of curve and icurve, a half circle of radius half the arrow's length across its
307
+ // stem (the stem is the line, carried on to the tip)
308
+ "other:curve": { length: 0.5, aspect: 2 },
309
+ "other:inv-curve": { length: 0.5, aspect: 2 },
310
+ },
311
+ source: "graphviz lib/common/arrows.c (ARROW_LENGTH 10, Arrowtypes lenfact, arrow_type_normal 0.35, arrow_type_crow 0.45, arrow_type_tee, arrow_type_box 0.4, arrow_type_diamond 1/3, arrow_type_dot, arrow_type_curve)",
312
+ },
155
313
  node: {
156
314
  fillOpacity: v(0, `${GV}/style/ (default "", not filled)`),
157
315
  borderColor: v("#000000", `${GV}/color/`),
158
316
  borderWidth: v(1, `${GV}/penwidth/; lib/common/const.h line 77`),
317
+ borderPosition: v("center", `${MEASURED}dot-synth-nodes), Graphviz strokes the node's own outline`),
159
318
  shape: v("ellipse", `${GV}/shape/; lib/common/const.h line 76`),
160
319
  width: v(54, `${GV}/width/ (0.75 inch); lib/common/const.h line 72`),
161
320
  height: v(36, `${GV}/height/ (0.5 inch); lib/common/const.h line 73`),
162
321
  labelColor: v("#000000", `${GV}/fontcolor/`),
163
322
  labelSize: v(14, `${GV}/fontsize/; lib/common/const.h line 61`),
164
- labelFont: v("Times-Roman", `${GV}/fontname/; lib/common/const.h line 67`),
323
+ labelFont: v("Times, serif", `${GV}/fontname/ (Times-Roman); lib/common/const.h line 67`),
165
324
  labelPosition: v("center", `${GV}/labelloc/`),
166
325
  },
167
326
  edge: {
@@ -173,10 +332,10 @@ export const TOOL_DEFAULTS = new Map([
173
332
  arrowSize: v(1, `${GV}/arrowsize/`),
174
333
  labelColor: v("#000000", `${GV}/fontcolor/`),
175
334
  labelSize: v(14, `${GV}/fontsize/`),
176
- labelFont: v("Times-Roman", `${GV}/fontname/`),
335
+ labelFont: v("Times, serif", `${GV}/fontname/ (Times-Roman)`),
177
336
  },
178
337
  graph: {
179
- background: v("#ffffff", `${GV}/bgcolor/ (default none); lib/common/emit.c emit_background: no bgcolor paints white`),
338
+ background: v("#ffffff", `${GV}/bgcolor/ (default unset); lib/common/emit.c emit_background (an unset bgcolor paints the page white)`),
180
339
  },
181
340
  derived: [
182
341
  { kind: "labelFromId", source: String.raw `${GV}/label/ (default \N, the node name)` },
@@ -191,14 +350,17 @@ export const TOOL_DEFAULTS = new Map([
191
350
  tool: "yed",
192
351
  version: "yEd / yFiles for Java 2.19",
193
352
  units: "px",
353
+ roundedCornerRadius: cornerCap("yed"),
354
+ arrowhead: DRAWIO_ARROWHEAD,
194
355
  node: {
195
356
  fill: v("#ffcc00", `${YED_QA}; ${YED_CORPUS} of y:Fill color`),
196
357
  shape: v("rectangle", "yFiles for Java 2.19 ShapeNodeRealizer API docs"),
197
358
  borderColor: v("#000000", `${YED_CORPUS} of y:BorderStyle`),
198
359
  borderWidth: v(1, `${YED_CORPUS} of y:BorderStyle`),
199
360
  borderStyle: v("solid", `${YED_CORPUS} of y:BorderStyle`),
361
+ borderPosition: v("center", `${MEASURED}graphml-*, draw.io 32.4.1 standing in for yEd)`),
200
362
  labelColor: v("#000000", `${YED_CORPUS} of y:NodeLabel`),
201
- labelFont: v("Dialog", `${YED_CORPUS} of y:NodeLabel`),
363
+ labelFont: v("DejaVu Sans, sans-serif", `${YED_CORPUS} of y:NodeLabel (Dialog's face)`),
202
364
  labelSize: v(12, `${YED_CORPUS} of y:NodeLabel`),
203
365
  labelWeight: v("normal", `${YED_CORPUS} of y:NodeLabel`),
204
366
  labelPosition: v("center", `${YED_CORPUS} of y:NodeLabel`),
@@ -210,7 +372,7 @@ export const TOOL_DEFAULTS = new Map([
210
372
  sourceArrow: v("none", `${YED_EDGE} (defaults to Arrow.NONE)`),
211
373
  targetArrow: v("none", `${YED_EDGE} (defaults to Arrow.NONE)`),
212
374
  labelColor: v("#000000", `${YED_CORPUS} of y:EdgeLabel`),
213
- labelFont: v("Dialog", `${YED_CORPUS} of y:EdgeLabel`),
375
+ labelFont: v("DejaVu Sans, sans-serif", `${YED_CORPUS} of y:EdgeLabel (Dialog's face)`),
214
376
  labelSize: v(12, `${YED_CORPUS} of y:EdgeLabel`),
215
377
  },
216
378
  graph: {
@@ -222,14 +384,18 @@ export const TOOL_DEFAULTS = new Map([
222
384
  tool: "yfiles3",
223
385
  version: "yFiles for HTML (API docs retrieved 2026-10-11)",
224
386
  units: "px",
387
+ roundedCornerRadius: cornerCap("yfiles3"),
388
+ arrowhead: DRAWIO_ARROWHEAD,
225
389
  node: {
226
390
  fill: v("#ffffff", `${Y3} ShapeNodeStyle fill`),
227
391
  borderColor: v("#000000", `${Y3} ShapeNodeStyle stroke`),
228
392
  borderWidth: v(1, `${Y3} ShapeNodeStyle stroke`),
393
+ borderPosition: v("center", `${MEASURED}graphml-yfiles-html-*, draw.io 32.4.1 standing in for yFiles)`),
229
394
  shape: v("rectangle", `${Y3} ShapeNodeStyle shape`),
230
395
  labelColor: v("#000000", `${Y3} LabelStyle textFill`),
231
396
  labelFont: v("Arial", `${Y3} LabelStyle font`),
232
397
  labelSize: v(12, `${Y3} LabelStyle font`),
398
+ labelPosition: v("center", `${Y3} IGraph.nodeDefaults labels layoutParameter (InteriorLabelModel center)`),
233
399
  },
234
400
  edge: {
235
401
  color: v("#000000", `${Y3} PolylineEdgeStyle stroke`),
@@ -240,64 +406,43 @@ export const TOOL_DEFAULTS = new Map([
240
406
  labelFont: v("Arial", `${Y3} LabelStyle font`),
241
407
  labelSize: v(12, `${Y3} LabelStyle font`),
242
408
  },
243
- graph: {},
409
+ graph: {
410
+ background: v("#ffffff", `${Y3} GraphComponent (a transparent canvas over the page's white)`),
411
+ },
244
412
  derived: [],
245
413
  },
246
414
  {
247
415
  tool: "gephi",
248
416
  version: "gephi 0.11.4-SNAPSHOT",
249
417
  units: "relative",
418
+ roundedCornerRadius: cornerCap("gephi"),
419
+ arrowhead: {
420
+ length: (size, width) => 3.25 * width * size,
421
+ aspect: 0.9,
422
+ source: `${MEASURED}gexf-synth-nx-viz, widths 1 to 4), Gephi Toolkit 0.11.3`,
423
+ },
250
424
  node: {
251
425
  fill: v("#000000", "gephi/graphstore a4c790b2343e NodeImpl.java line 322"),
252
- width: v(10, `${GEPHI} AbstractProcessor.java lines 195-198`),
253
- height: v(10, `${GEPHI} AbstractProcessor.java lines 195-198`),
426
+ width: v(20, `${GEPHI} AbstractProcessor.java lines 195-198 (size 10 is a radius)`),
427
+ height: v(20, `${GEPHI} AbstractProcessor.java lines 195-198 (size 10 is a radius)`),
254
428
  shape: v("ellipse", "GEXF 1.3 viz shape default disc; Preview NodeRenderer"),
255
- opacity: v(1, `${GEPHI} DefaultPreset.java line 87 (NODE_OPACITY 100)`),
256
- // Preview hides labels (DefaultPreset.java line 106) and so does the Overview (VizConfig.java
257
- // line 113); graph-io shows them as sigma.js and gexf-js do (see formats/gexf/styles.ts), in
258
- // the color and font Gephi gives a label it shows
259
- labelColor: v("#000000", `${GEPHI} DefaultPreset.java line 91 (DependantOriginalColor(BLACK))`),
260
- labelFont: v("Arial", `${GEPHI} DefaultPreset.java line 93 (Arial plain 12)`),
261
- // the size of a size-10 node's label; Preview scales it with the node (labelSizeFromWidth below)
262
- labelSize: v(12, `${GEPHI} DefaultPreset.java line 93 (Arial plain 12)`),
429
+ borderPosition: v("inside", `${MEASURED}gexf-specimen-node-fills-borders-p3), Gephi Toolkit 0.11.3: the border is stroked on a circle of radius size - border / 2`),
263
430
  labelPosition: v("center", `${GEPHI} NodeLabelRenderer.java (a label is drawn centered on its node)`),
431
+ // a node drawn under another still shows its label (gexf-cns-wos n5 under n109: "Borner, K")
432
+ labelOnTop: v(true, `${GEPHI} PreviewController (the node label items are drawn after every node); Gephi Toolkit 0.11.3 SVG export: g#node-labels after g#nodes`),
264
433
  },
265
434
  edge: {
266
- curved: v(true, `${GEPHI} DefaultPreset.java line 66 (EDGE_CURVED true); EdgeRenderer.java line 117`),
267
435
  sourceArrow: v("none", `${GEPHI} DefaultPreset.java line 62`),
268
436
  targetArrow: v("none", `${GEPHI} DefaultPreset.java line 62`),
269
- // the vocabulary's 1 is the tool's normal arrow: Preview's ARROW_SIZE 3, drawn 3 times the edge's
270
- // weight long, as Cytoscape.js's arrow-scale 1 scales with the edge's width
271
- arrowSize: v(1, `${GEPHI} DefaultPreset.java line 62 (ARROW_SIZE 3); EdgeRenderer.java lines 255-256 (times the weight)`),
272
- opacity: v(1, `${GEPHI} DefaultPreset.java line 71 (EDGE_OPACITY 100)`),
437
+ curved: v(true, `${GEPHI} DefaultPreset.java (EDGE_CURVED true); Gephi Toolkit 0.11.3 SVG export`),
438
+ fanned: v(false, `${GEPHI} EdgeRenderer.java (each curved edge bows left of its own direction, siblings ignored); Gephi Toolkit 0.11.3 SVG export`),
439
+ arcRadius: v(1 / 1.2, `${GEPHI} EdgeRenderer.java (CurvedEdgeRenderer: an arc through both node centers of radius length / ARC_CURVENESS, default 1.2)`),
273
440
  },
274
441
  graph: { background: v("#ffffff", `${GEPHI} VizConfig.java line 111`) },
275
442
  derived: [
276
- {
277
- kind: "labelFromColumn",
278
- column: "label",
279
- source: `${SIGMA}/settings.ts lines 119-126 (renderLabels); ${GEXFJS} lines 1019-1040`,
280
- },
281
443
  {
282
444
  kind: "colorFromEndNodes",
283
- source: `${GEPHI} DefaultPreset.java line 65 (EdgeColor.Mode.MIXED); ` +
284
- "PreviewAPI types/EdgeColor.java lines 89-93",
285
- },
286
- {
287
- kind: "borderFromFill",
288
- darken: 0.498,
289
- widthFactor: 0.08,
290
- source: `${GEPHI} DefaultPreset.java lines 84, 86 (DependantColor DARKER, NODE_BORDER_FIXED false); ` +
291
- "PreviewAPI types/DependantColor.java lines 55, 85-86; Utils ColorUtils.java lines 22-34; " +
292
- "PreviewPlugin renderers/SizeUtils.java lines 11, 33-38 (0.16 x size / 2 of a node drawn " +
293
- "size x 2 wide, builders/NodeBuilder.java line 65)",
294
- },
295
- {
296
- kind: "labelSizeFromWidth",
297
- factor: 1.2,
298
- source: `${GEPHI} DefaultPreset.java lines 93, 98 (Arial 12, NODE_LABEL_PROPORTIONAL_SIZE true); ` +
299
- "PreviewPlugin renderers/NodeLabelRenderer.java lines 165-173 (12 x the node drawn size x 2 " +
300
- "wide x 0.05, builders/NodeBuilder.java line 65)",
445
+ source: `${GEPHI} DefaultPreset.java (EDGE_COLOR EdgeColor.Mode.MIXED); Gephi Toolkit 0.11.3 SVG export`,
301
446
  },
302
447
  {
303
448
  kind: "widthFromWeight",
@@ -314,26 +459,56 @@ export const TOOL_DEFAULTS = new Map([
314
459
  tool: "vis-network",
315
460
  version: "vis-network 10.1.2",
316
461
  units: "px",
462
+ roundedCornerRadius: cornerCap("vis-network"),
463
+ arrowhead: {
464
+ // EdgeBase.getArrowData: 15 * scaleFactor + 3 * width; ArrowHead's points at -1, +-0.3
465
+ length: (size, width) => 15 * size + 3 * width,
466
+ aspect: 0.6,
467
+ // its bar is 0.15 of the arrow's length deep and as wide as the arrow is long; its box is 0.6 of the
468
+ // length square, its circle 0.8 of the length across, and its curve and inv_curve arcs have a
469
+ // radius of 0.4 of it
470
+ shapes: {
471
+ tee: { length: 0.15, aspect: 1 / 0.15 },
472
+ square: { length: 0.6, aspect: 1 },
473
+ circle: { length: 0.8, aspect: 1 },
474
+ "other:curve": { length: 0.4, aspect: 2 },
475
+ "other:inv-curve": { length: 0.4, aspect: 2 },
476
+ },
477
+ source: `${VIS} EdgeBase.getArrowData, ArrowHead, Bar, Box, Circle, Curve, InvertedCurve (measured on json-vis-unix, json-vis-world, json-vis-synth)`,
478
+ },
479
+ nodeBorderOnScreen: v(true, `${VIS9} NodeBase.initContextForDraw and performStroke: borderWidth / view.scale, at most the node's width`),
317
480
  node: {
318
481
  fill: v("#97c2fc", `${VIS} lines 32986-33110`),
319
482
  borderColor: v("#2b7ce9", `${VIS} lines 32986-33110`),
320
483
  borderWidth: v(1, `${VIS} lines 32986-33110`),
484
+ // a canvas stroke along the node's own outline, half in and half out (NodeBase.performStroke)
485
+ borderPosition: v("center", `${VIS9} NodeBase.performStroke: ctx.stroke() on the shape's own path`),
321
486
  shape: v("ellipse", `${VIS} lines 32986-33110`),
322
487
  labelColor: v("#343434", `${VIS} lines 32986-33110`),
323
488
  labelSize: v(14, `${VIS} lines 32986-33110`),
324
489
  labelFont: v("arial", `${VIS} lines 32986-33110`),
325
490
  labelPosition: v("center", `${VIS} lines 32986-33110`),
491
+ // Label.draw returns before drawing when the font is under drawThreshold - 1 px on screen
492
+ labelMinScreenSize: v(4, `${VIS9} Label.draw, nodes scaling.label.drawThreshold 5`),
326
493
  },
327
494
  edge: {
328
495
  width: v(1, `${VIS} lines 25160-25290`),
496
+ outlineColor: v("#6f6f6f", `${VIS} lines 25160-25290 (background.color)`),
329
497
  lineStyle: v("solid", `${VIS} lines 25160-25290 (dashes false)`),
330
498
  sourceArrow: v("none", `${VIS} lines 25160-25290`),
331
499
  targetArrow: v("none", `${VIS} lines 25160-25290`),
332
500
  labelColor: v("#343434", `${VIS} lines 25160-25290`),
333
501
  labelSize: v(14, `${VIS} lines 25160-25290`),
334
502
  labelFont: v("arial", `${VIS} lines 25160-25290`),
503
+ labelMinScreenSize: v(4, `${VIS9} Label.draw, edges scaling.label.drawThreshold 5`),
504
+ // an edge label is drawn on the line, its letters stroked white 2 px wide (font.strokeWidth 2)
505
+ labelPosition: v("center", `${VIS9} Edge.drawLabel (the label at the line's middle point)`),
506
+ labelOutlineColor: v("#ffffff", `${VIS} lines 25160-25290 (font.strokeColor)`),
507
+ labelOutlineWidth: v(2, `${VIS} lines 25160-25290 (font.strokeWidth)`),
508
+ },
509
+ graph: {
510
+ background: v("#ffffff", "vis-network 9.1.9 vis-network.esm.js line 32378 (clearRect: the page's white shows through)"),
335
511
  },
336
- graph: {},
337
512
  derived: [
338
513
  { kind: "labelFromColumn", column: "label", source: `${VIS} lines 32986-33110` },
339
514
  { kind: "colorFromSourceNode", source: `${VIS} lines 25160-25290 (color.inherit "from")` },
@@ -341,50 +516,95 @@ export const TOOL_DEFAULTS = new Map([
341
516
  },
342
517
  {
343
518
  tool: "sigma",
344
- version: "sigma 3.0.3",
519
+ version: "sigma 4.0.1",
345
520
  units: "relative",
521
+ roundedCornerRadius: cornerCap("sigma"),
346
522
  node: {
347
- fill: v("#999999", `${SIGMA}/settings.ts lines 119-126`),
523
+ fill: v("#666666", `${SIGMA4} DEFAULT_NODE_DISPLAY_DATA (color "#666")`),
348
524
  shape: v("ellipse", `${SIGMA}/settings.ts lines 119-126`),
349
- width: v(2, `${SIGMA}/sigma.ts line 76`),
350
- height: v(2, `${SIGMA}/sigma.ts line 76`),
525
+ width: v(20, `${SIGMA4} DEFAULT_NODE_DISPLAY_DATA (size 10 is a radius)`),
526
+ height: v(20, `${SIGMA4} DEFAULT_NODE_DISPLAY_DATA (size 10 is a radius)`),
351
527
  labelColor: v("#000000", `${SIGMA}/settings.ts lines 119-126`),
352
528
  labelFont: v("Arial", `${SIGMA}/settings.ts lines 119-126`),
353
- labelSize: v(14, `${SIGMA}/settings.ts lines 119-126`),
529
+ // sigma 4 sets every node's labelSize to 12 before its styles run; the 14 in sigma.esm.js
530
+ // (`defaultLabelSize`) is only reached by a node whose styles cleared it.
531
+ labelSize: v(12, `${SIGMA4} DEFAULT_NODE_DISPLAY_DATA (labelSize 12)`),
354
532
  labelWeight: v("normal", `${SIGMA}/settings.ts lines 119-126`),
533
+ labelPosition: v("right", `${SIGMA4} DEFAULT_NODE_DISPLAY_DATA (labelPosition "right")`),
534
+ // sigma keeps the largest node's label per 100 px cell of its first framing; it avoids no overlap
535
+ labelGridCellSize: v(100, `${SIGMA4} LabelGrid.getLabelsToDisplay (labelDensity 1, labelGridCellSize 100)`),
536
+ labelOnTop: v(true, `${SIGMA4} labels are drawn by their own program after every node and edge`),
537
+ // a node's label is drawn only while its node's rendered size (a radius) is 6 px or more
538
+ labelMinNodeScreenSize: v(12, `${SIGMA4} renderLabels (labelRenderedSizeThreshold 6, a radius)`),
355
539
  },
356
540
  edge: {
357
541
  color: v("#cccccc", `${SIGMA}/settings.ts lines 119-126`),
358
- width: v(0.5, `${SIGMA}/sigma.ts line 100`),
542
+ // an edge of sigma's default size 1, drawn half as wide as its size (readSigmaRow)
543
+ width: v(0.5, `${SIGMA4} DEFAULT_EDGE_DISPLAY_DATA (size 1)`),
544
+ // an edge label (renderEdgeLabels) is drawn at its line's middle, 12 px, in #666
545
+ labelColor: v("#666666", `${SIGMA4} DEFAULT_EDGE_DISPLAY_DATA (labelColor "#666")`),
546
+ labelSize: v(12, "sigma 4.0.1 dist/sigma.esm.js line 2816 (DEFAULT_EDGE_LABEL_SIZE)"),
547
+ labelPosition: v("center", "sigma 4.0.1 dist/sigma.esm.js line 3647 (the middle of its two ends)"),
359
548
  sourceArrow: v("none", `${SIGMA}/settings.ts lines 119-126 (type line)`),
360
549
  targetArrow: v("none", `${SIGMA}/settings.ts lines 119-126 (type line)`),
550
+ // no edge is drawn thinner on screen, whatever its size (the shader's max(size, minEdgeThickness 1.7),
551
+ // drawn half as wide as a node of that size is in radius, as readSigmaRow halves a size)
552
+ minScreenWidth: v(0.85, `${SIGMA4} edge program (pixelsThickness = max(size, minEdgeThickness 1.7))`),
553
+ },
554
+ graph: {
555
+ background: v("#ffffff", "sigma 4.0.1 dist/sigma.esm.js line 5202 (gl.clear to transparent: the page's white shows through)"),
361
556
  },
362
- graph: {},
363
557
  derived: [{ kind: "labelFromColumn", column: "label", source: `${SIGMA}/settings.ts lines 119-126` }],
364
558
  },
365
559
  {
366
560
  tool: "pajek",
367
561
  version: "Pajek 6.02",
368
- units: "relative",
562
+ // PostScript points, the unit of Pajek's EPS and SVG export (formats/pajek/styles.ts)
563
+ units: "px",
564
+ roundedCornerRadius: cornerCap("pajek"),
565
+ // a line's `s` (arrowSize) scales Pajek's arrowhead whatever its width: 6 x s long (tip to its back
566
+ // corners) and 5 x s wide
567
+ arrowhead: {
568
+ length: (size) => 6 * size,
569
+ aspect: 5 / 6,
570
+ source: `${PAJEK_SVG}specimen-arrows: s 0.5, 1, 2, 3 and 5 draw arrowheads 3, 6, 12, 18 and 30 long, 2.5, 5, 10, 15 and 25 wide; football: s 4 and 9)`,
571
+ },
369
572
  node: {
370
573
  shape: v("ellipse", `${PAJEK} p. 85`),
371
574
  opacity: v(1, `${PAJEK} p. 87`),
372
- borderColor: v("#000000", `${PAJEK}, vertex parameter bc (default Black)`),
373
- borderWidth: v(0.2, `${PAJEK}, vertex parameter bw (default 1, against the default vertex size 5)`),
374
- labelColor: v("#000000", `${PAJEK_SHAPES} (lc Black)`),
375
- labelPosition: v("center", `${PAJEK_SHAPES} (lr 0); ${PAJEK} p. 85 (radius 0 is centered)`),
575
+ // Pajek 6.02's own defaults, as its SVG export draws a vertex and label the file gives no
576
+ // parameters for (the manual names these settings but not their values)
577
+ borderColor: v("#660000", `${PAJEK_SVG}football, kdorola: every vertex without bc)`),
578
+ borderWidth: v(0.5, `${PAJEK_SVG}football, kdorola: every vertex without bw)`),
579
+ // an SVG stroke along the vertex's own outline, half in and half out
580
+ borderPosition: v("center", `${PAJEK_SVG}specimen-node-fills-borders-p3: bw 8 draws a vertex of size 36 44 across)`),
581
+ width: v(20, `${PAJEK_SVG}football, iliad: a vertex without s_size, x_fact or y_fact)`),
582
+ height: v(20, `${PAJEK_SVG}football, iliad: a vertex without s_size, x_fact or y_fact)`),
583
+ fill: v("#ffd9bc", `${PAJEK_SVG}football, kdorola: every vertex without ic)`),
584
+ labelColor: v("#ad0000", `${PAJEK_SVG}football, 1crn: every label without lc)`),
585
+ labelSize: v(15, `${PAJEK_SVG}football, 1crn: every label without fos)`),
586
+ labelFont: v("Arial", `${PAJEK_SVG}football, 1crn: every label without font)`),
587
+ labelWeight: v("bold", `${PAJEK_SVG}football, 1crn: every label is bold)`),
588
+ // the text starts 20 from the center at lphi 285 and runs to the right, its baseline through
589
+ // that point: its left edge's middle at 20 cos 285 across and 20 sin 285 less 0.3465 of its
590
+ // size down (formats/pajek/styles.ts readLabelPosition)
591
+ labelPosition: v("center", `${PAJEK_SVG}football, 1crn, specimen-labels: lr 20 lphi 285)`),
592
+ labelOffsetX: v(5.176380902, `${PAJEK_SVG}football, 1crn, specimen-labels: lr 20 lphi 285)`),
593
+ labelOffsetY: v(14.121016526, `${PAJEK_SVG}football, 1crn, specimen-labels: lr 20 lphi 285)`),
594
+ labelShiftX: v(0.5, `${PAJEK_SVG}football, 1crn, specimen-labels: text-anchor start)`),
376
595
  },
377
596
  edge: {
378
- color: v("#000000", `${PAJEK} p. 90`),
379
- // No line width: Pajek's w is read as the file has it, not as a factor of the vertex size as bw is,
380
- // so a default of 1 here, with no vertex size in the file, became the length every other length
381
- // of the drawing was scaled by, and a border 0.2 wide was drawn far too thin to see.
597
+ // an edge (undirected) is drawn twice the width of an arc; the arc rule below sets an arc's
598
+ width: v(2, `${PAJEK_SVG}1crn, lin-rel4, synth-vertices: edges without w; c: w 0.5 drawn 1)`),
599
+ color: v("#007091", `${PAJEK_SVG}1crn, lin-rel4, c: edges without c)`),
382
600
  lineStyle: v("solid", `${PAJEK} p. 90`),
383
601
  opacity: v(1, `${PAJEK} p. 87`),
384
602
  sourceArrow: v("none", `${PAJEK} p. 91`),
385
603
  targetArrow: v("none", `${PAJEK} p. 91 (edges have none)`),
386
604
  },
387
- graph: {},
605
+ graph: {
606
+ background: v("#ffffff", `${PAJEK}, Draw window (assumed: a white background)`),
607
+ },
388
608
  derived: [
389
609
  { kind: "labelFromColumn", column: "label", source: `${PAJEK}, vertex labels (drawn by default)` },
390
610
  { kind: "targetArrowOnDirected", arrow: "triangle", source: `${PAJEK} p. 91 (arcs)` },
@@ -394,6 +614,13 @@ export const TOOL_DEFAULTS = new Map([
394
614
  tool: "ogdf",
395
615
  version: "ogdf master 1a40505ac006",
396
616
  units: "px",
617
+ roundedCornerRadius: cornerCap("ogdf"),
618
+ // OGDF's arrowhead is three times its line's width long and half as wide as it is long
619
+ arrowhead: {
620
+ length: (size, width) => 3 * width * size,
621
+ aspect: 0.5,
622
+ source: `${MEASURED}gml-specimen-arrows-p5.svg: lineWidth 1, 1.5 and 3 draw arrowheads 3, 4.5 and 9 long, 1.5, 2.25 and 4.5 wide)`,
623
+ },
397
624
  node: {
398
625
  fill: v("#ffffff", `${OGDF} LayoutStandards.cpp lines 38-45`),
399
626
  shape: v("rectangle", `${OGDF} LayoutStandards.cpp lines 38-45`),
@@ -402,19 +629,29 @@ export const TOOL_DEFAULTS = new Map([
402
629
  borderColor: v("#000000", `${OGDF} LayoutStandards.cpp lines 38-45`),
403
630
  borderWidth: v(1, `${OGDF} LayoutStandards.cpp lines 38-45`),
404
631
  borderStyle: v("solid", `${OGDF} LayoutStandards.cpp lines 38-45`),
632
+ // GraphIO::drawSVG's default SVGSettings: every label in one font, centered on its node
633
+ labelColor: v("#000000", `${OGDF_SVG}fill #000000)`),
634
+ labelFont: v("Arial", `${OGDF_SVG}font-family Arial)`),
635
+ labelSize: v(10, `${OGDF_SVG}font-size 10)`),
636
+ labelPosition: v("center", `${OGDF_SVG}text-anchor middle at the node's center)`),
405
637
  },
406
638
  edge: {
407
639
  color: v("#000000", `${OGDF} LayoutStandards.cpp lines 38-45`),
408
640
  width: v(1, `${OGDF} LayoutStandards.cpp lines 38-45`),
409
641
  lineStyle: v("solid", `${OGDF} LayoutStandards.cpp lines 38-45`),
642
+ labelColor: v("#000000", `${OGDF_SVG}fill #000000)`),
643
+ labelFont: v("Arial", `${OGDF_SVG}font-family Arial)`),
644
+ labelSize: v(10, `${OGDF_SVG}font-size 10)`),
645
+ labelPosition: v("center", `${OGDF_SVG}text-anchor middle on the line, dominant-baseline middle)`),
410
646
  },
411
- graph: {},
647
+ graph: { background: v("#ffffff", `${OGDF_SVG}no background: the page's white shows through)`) },
412
648
  derived: [],
413
649
  },
414
650
  {
415
651
  tool: "networkx",
416
652
  version: "networkx 3.7 (main 6da4704cbf32)",
417
653
  units: "px",
654
+ roundedCornerRadius: cornerCap("networkx"),
418
655
  node: {
419
656
  fill: v("#1f78b4", `${NX} 1378`),
420
657
  fillOpacity: v(1, `${NX} 549`),