@graphty/graph-io 0.3.43 → 0.3.44

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 (674) hide show
  1. package/dist/chunks/approximations-3Q4TsdTh.js +40 -0
  2. package/dist/chunks/approximations-3Q4TsdTh.js.map +1 -0
  3. package/dist/chunks/block-JQiwViEt.js +2777 -0
  4. package/dist/chunks/block-JQiwViEt.js.map +1 -0
  5. package/dist/chunks/{choose-DvpbdRuz.js → choose-BemygfH8.js} +3 -2
  6. package/dist/chunks/{choose-DvpbdRuz.js.map → choose-BemygfH8.js.map} +1 -1
  7. package/dist/chunks/{constants-fT3E8JYY.js → constants-BFUR_CtU.js} +6 -2
  8. package/dist/chunks/constants-BFUR_CtU.js.map +1 -0
  9. package/dist/chunks/convert-BcQ8_jMo.js +59 -0
  10. package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
  11. package/dist/chunks/emit-DCwFLts5.js +3456 -0
  12. package/dist/chunks/emit-DCwFLts5.js.map +1 -0
  13. package/dist/chunks/{escape-B62ZGM_a.js → escape-B1rMftd9.js} +43 -20
  14. package/dist/chunks/escape-B1rMftd9.js.map +1 -0
  15. package/dist/chunks/{export-rKLeGQMo.js → export-D7IGzTG4.js} +196 -792
  16. package/dist/chunks/export-D7IGzTG4.js.map +1 -0
  17. package/dist/chunks/{exporter-BWwEuOPT.js → exporter-BtnqYuuj.js} +22 -12
  18. package/dist/chunks/exporter-BtnqYuuj.js.map +1 -0
  19. package/dist/chunks/{exporter-yLxKBvLE.js → exporter-ChPyhBOv.js} +4 -3
  20. package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter-ChPyhBOv.js.map} +1 -1
  21. package/dist/chunks/{exporter-8hLNemFk.js → exporter-KEPxYUXD.js} +133 -74
  22. package/dist/chunks/exporter-KEPxYUXD.js.map +1 -0
  23. package/dist/chunks/{exporter-RVtXVetw.js → exporter-quPUCBiC.js} +1805 -287
  24. package/dist/chunks/exporter-quPUCBiC.js.map +1 -0
  25. package/dist/chunks/format-GDmO6m6Q.js +676 -0
  26. package/dist/chunks/format-GDmO6m6Q.js.map +1 -0
  27. package/dist/chunks/generic-BL06jrJf.js +1347 -0
  28. package/dist/chunks/generic-BL06jrJf.js.map +1 -0
  29. package/dist/chunks/{importer-WrGRZb0N.js → importer-B7r2owVf.js} +449 -102
  30. package/dist/chunks/importer-B7r2owVf.js.map +1 -0
  31. package/dist/chunks/{importer-Ht7LNg8L.js → importer-BFmOP96W.js} +116 -296
  32. package/dist/chunks/importer-BFmOP96W.js.map +1 -0
  33. package/dist/chunks/{importer-BbNb7eNg.js → importer-C2nzGhdV.js} +1390 -129
  34. package/dist/chunks/importer-C2nzGhdV.js.map +1 -0
  35. package/dist/chunks/{importer-Dz7tI8Sa.js → importer-CbX2_rNF.js} +617 -115
  36. package/dist/chunks/importer-CbX2_rNF.js.map +1 -0
  37. package/dist/chunks/{importer-D794XUTe.js → importer-CdzeN6X4.js} +31 -8
  38. package/dist/chunks/importer-CdzeN6X4.js.map +1 -0
  39. package/dist/chunks/{importer-xZ-3suY1.js → importer-ChKNC_GN.js} +791 -135
  40. package/dist/chunks/importer-ChKNC_GN.js.map +1 -0
  41. package/dist/chunks/{importer-C98dpSH4.js → importer-dwoYpSqb.js} +141 -82
  42. package/dist/chunks/importer-dwoYpSqb.js.map +1 -0
  43. package/dist/chunks/index-B9fdNpTA.js +4310 -0
  44. package/dist/chunks/index-B9fdNpTA.js.map +1 -0
  45. package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-C4FwgnH5.js} +123 -32
  46. package/dist/chunks/json-elements-C4FwgnH5.js.map +1 -0
  47. package/dist/chunks/lexicon-B-knUi-l.js +508 -0
  48. package/dist/chunks/lexicon-B-knUi-l.js.map +1 -0
  49. package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-BSpbY5FL.js} +3 -2
  50. package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-BSpbY5FL.js.map} +1 -1
  51. package/dist/chunks/{records-Cu4bxYOm.js → records-Nwz_rbNt.js} +2 -2
  52. package/dist/chunks/{records-Cu4bxYOm.js.map → records-Nwz_rbNt.js.map} +1 -1
  53. package/dist/chunks/styles-Brt9JMfs.js +690 -0
  54. package/dist/chunks/styles-Brt9JMfs.js.map +1 -0
  55. package/dist/chunks/styles-_N-C8S-U.js +2102 -0
  56. package/dist/chunks/styles-_N-C8S-U.js.map +1 -0
  57. package/dist/chunks/styles-yed-DAfcIkf7.js +842 -0
  58. package/dist/chunks/styles-yed-DAfcIkf7.js.map +1 -0
  59. package/dist/chunks/{text-DHOJXnED.js → text-CgzMqHQb.js} +2 -2
  60. package/dist/chunks/{text-DHOJXnED.js.map → text-CgzMqHQb.js.map} +1 -1
  61. package/dist/chunks/units-XMZFIFe1.js +19 -0
  62. package/dist/chunks/units-XMZFIFe1.js.map +1 -0
  63. package/dist/csv.js +5 -4
  64. package/dist/csv.js.map +1 -1
  65. package/dist/cx.js +1 -1
  66. package/dist/cx2.js +2 -2
  67. package/dist/cys.js +1 -1
  68. package/dist/dot.js +5 -2
  69. package/dist/dot.js.map +1 -1
  70. package/dist/gexf.js +292 -412
  71. package/dist/gexf.js.map +1 -1
  72. package/dist/gml.js +8 -3031
  73. package/dist/gml.js.map +1 -1
  74. package/dist/graph-io.js +354 -240
  75. package/dist/graph-io.js.map +1 -1
  76. package/dist/graphml.js +4 -2
  77. package/dist/graphml.js.map +1 -1
  78. package/dist/json.js +1 -1
  79. package/dist/neo4j.js +4 -3
  80. package/dist/neo4j.js.map +1 -1
  81. package/dist/obo.js +1 -1
  82. package/dist/pajek.js +4 -2
  83. package/dist/positions.d.ts +1 -0
  84. package/dist/positions.js +427 -0
  85. package/dist/positions.js.map +1 -0
  86. package/dist/src/common/codes.d.ts +6 -0
  87. package/dist/src/common/codes.d.ts.map +1 -1
  88. package/dist/src/common/codes.js +6 -0
  89. package/dist/src/common/codes.js.map +1 -1
  90. package/dist/src/common/escape.d.ts.map +1 -1
  91. package/dist/src/common/escape.js +4 -2
  92. package/dist/src/common/escape.js.map +1 -1
  93. package/dist/src/common/export.d.ts +10 -0
  94. package/dist/src/common/export.d.ts.map +1 -1
  95. package/dist/src/common/export.js +123 -100
  96. package/dist/src/common/export.js.map +1 -1
  97. package/dist/src/common/input.d.ts.map +1 -1
  98. package/dist/src/common/input.js +8 -1
  99. package/dist/src/common/input.js.map +1 -1
  100. package/dist/src/common/json-elements.d.ts +12 -9
  101. package/dist/src/common/json-elements.d.ts.map +1 -1
  102. package/dist/src/common/json-elements.js +160 -37
  103. package/dist/src/common/json-elements.js.map +1 -1
  104. package/dist/src/common/notes.d.ts +42 -0
  105. package/dist/src/common/notes.d.ts.map +1 -0
  106. package/dist/src/common/notes.js +72 -0
  107. package/dist/src/common/notes.js.map +1 -0
  108. package/dist/src/common/report.d.ts +18 -0
  109. package/dist/src/common/report.d.ts.map +1 -1
  110. package/dist/src/common/report.js +36 -1
  111. package/dist/src/common/report.js.map +1 -1
  112. package/dist/src/common/units.d.ts +24 -0
  113. package/dist/src/common/units.d.ts.map +1 -0
  114. package/dist/src/common/units.js +26 -0
  115. package/dist/src/common/units.js.map +1 -0
  116. package/dist/src/common/xml.d.ts +18 -0
  117. package/dist/src/common/xml.d.ts.map +1 -1
  118. package/dist/src/common/xml.js +42 -5
  119. package/dist/src/common/xml.js.map +1 -1
  120. package/dist/src/formats/cx/exporter.d.ts +6 -0
  121. package/dist/src/formats/cx/exporter.d.ts.map +1 -1
  122. package/dist/src/formats/cx/exporter.js +71 -8
  123. package/dist/src/formats/cx/exporter.js.map +1 -1
  124. package/dist/src/formats/cx/importer.d.ts +5 -2
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +102 -72
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +102 -0
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -0
  130. package/dist/src/formats/cx/styles.js +225 -0
  131. package/dist/src/formats/cx/styles.js.map +1 -0
  132. package/dist/src/formats/cx2/exporter.d.ts +5 -0
  133. package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
  134. package/dist/src/formats/cx2/exporter.js +181 -71
  135. package/dist/src/formats/cx2/exporter.js.map +1 -1
  136. package/dist/src/formats/cx2/importer.d.ts +4 -1
  137. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  138. package/dist/src/formats/cx2/importer.js +19 -1
  139. package/dist/src/formats/cx2/importer.js.map +1 -1
  140. package/dist/src/formats/cx2/styles.d.ts +18 -0
  141. package/dist/src/formats/cx2/styles.d.ts.map +1 -0
  142. package/dist/src/formats/cx2/styles.js +24 -0
  143. package/dist/src/formats/cx2/styles.js.map +1 -0
  144. package/dist/src/formats/cys/constants.d.ts +2 -0
  145. package/dist/src/formats/cys/constants.d.ts.map +1 -1
  146. package/dist/src/formats/cys/constants.js +2 -0
  147. package/dist/src/formats/cys/constants.js.map +1 -1
  148. package/dist/src/formats/cys/exporter.d.ts +6 -2
  149. package/dist/src/formats/cys/exporter.d.ts.map +1 -1
  150. package/dist/src/formats/cys/exporter.js +215 -53
  151. package/dist/src/formats/cys/exporter.js.map +1 -1
  152. package/dist/src/formats/cys/importer.d.ts +2 -1
  153. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  154. package/dist/src/formats/cys/importer.js +119 -6
  155. package/dist/src/formats/cys/importer.js.map +1 -1
  156. package/dist/src/formats/cys/session.d.ts +2 -0
  157. package/dist/src/formats/cys/session.d.ts.map +1 -1
  158. package/dist/src/formats/cys/session.js +5 -0
  159. package/dist/src/formats/cys/session.js.map +1 -1
  160. package/dist/src/formats/cys/styles.d.ts +38 -0
  161. package/dist/src/formats/cys/styles.d.ts.map +1 -0
  162. package/dist/src/formats/cys/styles.js +213 -0
  163. package/dist/src/formats/cys/styles.js.map +1 -0
  164. package/dist/src/formats/cys/tables.d.ts +8 -3
  165. package/dist/src/formats/cys/tables.d.ts.map +1 -1
  166. package/dist/src/formats/cys/tables.js +88 -34
  167. package/dist/src/formats/cys/tables.js.map +1 -1
  168. package/dist/src/formats/dot/exporter.d.ts +2 -0
  169. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  170. package/dist/src/formats/dot/exporter.js +195 -81
  171. package/dist/src/formats/dot/exporter.js.map +1 -1
  172. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  173. package/dist/src/formats/dot/importer.js +100 -20
  174. package/dist/src/formats/dot/importer.js.map +1 -1
  175. package/dist/src/formats/dot/index.d.ts +1 -0
  176. package/dist/src/formats/dot/index.d.ts.map +1 -1
  177. package/dist/src/formats/dot/index.js +1 -0
  178. package/dist/src/formats/dot/index.js.map +1 -1
  179. package/dist/src/formats/dot/positions.d.ts +14 -0
  180. package/dist/src/formats/dot/positions.d.ts.map +1 -0
  181. package/dist/src/formats/dot/positions.js +70 -0
  182. package/dist/src/formats/dot/positions.js.map +1 -0
  183. package/dist/src/formats/dot/styles.d.ts +82 -0
  184. package/dist/src/formats/dot/styles.d.ts.map +1 -0
  185. package/dist/src/formats/dot/styles.js +1484 -0
  186. package/dist/src/formats/dot/styles.js.map +1 -0
  187. package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
  188. package/dist/src/formats/gexf/exporter.js +20 -5
  189. package/dist/src/formats/gexf/exporter.js.map +1 -1
  190. package/dist/src/formats/gexf/importer.d.ts +8 -1
  191. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  192. package/dist/src/formats/gexf/importer.js +251 -131
  193. package/dist/src/formats/gexf/importer.js.map +1 -1
  194. package/dist/src/formats/gexf/index.d.ts +8 -0
  195. package/dist/src/formats/gexf/index.d.ts.map +1 -1
  196. package/dist/src/formats/gexf/index.js +10 -2
  197. package/dist/src/formats/gexf/index.js.map +1 -1
  198. package/dist/src/formats/gexf/schema.d.ts +5 -0
  199. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  200. package/dist/src/formats/gexf/schema.js +5 -0
  201. package/dist/src/formats/gexf/schema.js.map +1 -1
  202. package/dist/src/formats/gexf/styles.d.ts +74 -0
  203. package/dist/src/formats/gexf/styles.d.ts.map +1 -0
  204. package/dist/src/formats/gexf/styles.js +604 -0
  205. package/dist/src/formats/gexf/styles.js.map +1 -0
  206. package/dist/src/formats/gml/exporter.d.ts +1 -5
  207. package/dist/src/formats/gml/exporter.d.ts.map +1 -1
  208. package/dist/src/formats/gml/exporter.js +19 -8
  209. package/dist/src/formats/gml/exporter.js.map +1 -1
  210. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  211. package/dist/src/formats/gml/importer.js +4 -0
  212. package/dist/src/formats/gml/importer.js.map +1 -1
  213. package/dist/src/formats/gml/index.d.ts +2 -1
  214. package/dist/src/formats/gml/index.d.ts.map +1 -1
  215. package/dist/src/formats/gml/index.js +2 -1
  216. package/dist/src/formats/gml/index.js.map +1 -1
  217. package/dist/src/formats/gml/positions.d.ts +14 -0
  218. package/dist/src/formats/gml/positions.d.ts.map +1 -0
  219. package/dist/src/formats/gml/positions.js +46 -0
  220. package/dist/src/formats/gml/positions.js.map +1 -0
  221. package/dist/src/formats/gml/styles.d.ts +59 -0
  222. package/dist/src/formats/gml/styles.d.ts.map +1 -0
  223. package/dist/src/formats/gml/styles.js +1056 -0
  224. package/dist/src/formats/gml/styles.js.map +1 -0
  225. package/dist/src/formats/gml/syntax.d.ts +11 -0
  226. package/dist/src/formats/gml/syntax.d.ts.map +1 -1
  227. package/dist/src/formats/gml/syntax.js +151 -62
  228. package/dist/src/formats/gml/syntax.js.map +1 -1
  229. package/dist/src/formats/graphml/constants.d.ts +4 -0
  230. package/dist/src/formats/graphml/constants.d.ts.map +1 -1
  231. package/dist/src/formats/graphml/constants.js +5 -1
  232. package/dist/src/formats/graphml/constants.js.map +1 -1
  233. package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
  234. package/dist/src/formats/graphml/exporter.js +133 -65
  235. package/dist/src/formats/graphml/exporter.js.map +1 -1
  236. package/dist/src/formats/graphml/importer.d.ts +4 -1
  237. package/dist/src/formats/graphml/importer.d.ts.map +1 -1
  238. package/dist/src/formats/graphml/importer.js +100 -44
  239. package/dist/src/formats/graphml/importer.js.map +1 -1
  240. package/dist/src/formats/graphml/index.d.ts +1 -0
  241. package/dist/src/formats/graphml/index.d.ts.map +1 -1
  242. package/dist/src/formats/graphml/index.js +1 -0
  243. package/dist/src/formats/graphml/index.js.map +1 -1
  244. package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
  245. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
  246. package/dist/src/formats/graphml/styles-plain.js +187 -0
  247. package/dist/src/formats/graphml/styles-plain.js.map +1 -0
  248. package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
  249. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
  250. package/dist/src/formats/graphml/styles-yed.js +1086 -0
  251. package/dist/src/formats/graphml/styles-yed.js.map +1 -0
  252. package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
  253. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
  254. package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
  255. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
  256. package/dist/src/formats/graphml/tree.d.ts.map +1 -1
  257. package/dist/src/formats/graphml/tree.js +34 -19
  258. package/dist/src/formats/graphml/tree.js.map +1 -1
  259. package/dist/src/formats/graphml/yfiles.d.ts +16 -2
  260. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  261. package/dist/src/formats/graphml/yfiles.js +83 -12
  262. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  263. package/dist/src/formats/json/exporter.d.ts +5 -0
  264. package/dist/src/formats/json/exporter.d.ts.map +1 -1
  265. package/dist/src/formats/json/exporter.js +68 -25
  266. package/dist/src/formats/json/exporter.js.map +1 -1
  267. package/dist/src/formats/json/importer.d.ts +22 -3
  268. package/dist/src/formats/json/importer.d.ts.map +1 -1
  269. package/dist/src/formats/json/importer.js +439 -264
  270. package/dist/src/formats/json/importer.js.map +1 -1
  271. package/dist/src/formats/json/positions.d.ts +16 -0
  272. package/dist/src/formats/json/positions.d.ts.map +1 -0
  273. package/dist/src/formats/json/positions.js +44 -0
  274. package/dist/src/formats/json/positions.js.map +1 -0
  275. package/dist/src/formats/json/styles.d.ts +102 -0
  276. package/dist/src/formats/json/styles.d.ts.map +1 -0
  277. package/dist/src/formats/json/styles.js +1753 -0
  278. package/dist/src/formats/json/styles.js.map +1 -0
  279. package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
  280. package/dist/src/formats/neo4j/exporter.js +2 -1
  281. package/dist/src/formats/neo4j/exporter.js.map +1 -1
  282. package/dist/src/formats/pajek/exporter.d.ts +2 -0
  283. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  284. package/dist/src/formats/pajek/exporter.js +142 -76
  285. package/dist/src/formats/pajek/exporter.js.map +1 -1
  286. package/dist/src/formats/pajek/importer.d.ts +4 -0
  287. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  288. package/dist/src/formats/pajek/importer.js +60 -6
  289. package/dist/src/formats/pajek/importer.js.map +1 -1
  290. package/dist/src/formats/pajek/index.d.ts +2 -0
  291. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  292. package/dist/src/formats/pajek/index.js +2 -0
  293. package/dist/src/formats/pajek/index.js.map +1 -1
  294. package/dist/src/formats/pajek/styles.d.ts +50 -0
  295. package/dist/src/formats/pajek/styles.d.ts.map +1 -0
  296. package/dist/src/formats/pajek/styles.js +569 -0
  297. package/dist/src/formats/pajek/styles.js.map +1 -0
  298. package/dist/src/formats/pajek/syntax.d.ts +6 -0
  299. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  300. package/dist/src/formats/pajek/syntax.js +6 -0
  301. package/dist/src/formats/pajek/syntax.js.map +1 -1
  302. package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
  303. package/dist/src/formats/xgmml/columns.js +34 -9
  304. package/dist/src/formats/xgmml/columns.js.map +1 -1
  305. package/dist/src/formats/xgmml/constants.d.ts +2 -0
  306. package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
  307. package/dist/src/formats/xgmml/constants.js +3 -1
  308. package/dist/src/formats/xgmml/constants.js.map +1 -1
  309. package/dist/src/formats/xgmml/document.d.ts +12 -8
  310. package/dist/src/formats/xgmml/document.d.ts.map +1 -1
  311. package/dist/src/formats/xgmml/document.js +56 -13
  312. package/dist/src/formats/xgmml/document.js.map +1 -1
  313. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  314. package/dist/src/formats/xgmml/emit.js +12 -6
  315. package/dist/src/formats/xgmml/emit.js.map +1 -1
  316. package/dist/src/formats/xgmml/exporter.d.ts +3 -1
  317. package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
  318. package/dist/src/formats/xgmml/exporter.js +22 -9
  319. package/dist/src/formats/xgmml/exporter.js.map +1 -1
  320. package/dist/src/formats/xgmml/importer.d.ts +2 -1
  321. package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
  322. package/dist/src/formats/xgmml/importer.js +31 -24
  323. package/dist/src/formats/xgmml/importer.js.map +1 -1
  324. package/dist/src/formats/xgmml/styles.d.ts +104 -0
  325. package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
  326. package/dist/src/formats/xgmml/styles.js +310 -0
  327. package/dist/src/formats/xgmml/styles.js.map +1 -0
  328. package/dist/src/index.d.ts +9 -7
  329. package/dist/src/index.d.ts.map +1 -1
  330. package/dist/src/index.js +7 -7
  331. package/dist/src/index.js.map +1 -1
  332. package/dist/src/positions/codes.d.ts +31 -0
  333. package/dist/src/positions/codes.d.ts.map +1 -0
  334. package/dist/src/positions/codes.js +26 -0
  335. package/dist/src/positions/codes.js.map +1 -0
  336. package/dist/src/positions/convert.d.ts +58 -0
  337. package/dist/src/positions/convert.d.ts.map +1 -0
  338. package/dist/src/positions/convert.js +107 -0
  339. package/dist/src/positions/convert.js.map +1 -0
  340. package/dist/src/positions/extract.d.ts +27 -0
  341. package/dist/src/positions/extract.d.ts.map +1 -0
  342. package/dist/src/positions/extract.js +526 -0
  343. package/dist/src/positions/extract.js.map +1 -0
  344. package/dist/src/positions/index.d.ts +10 -0
  345. package/dist/src/positions/index.d.ts.map +1 -0
  346. package/dist/src/positions/index.js +9 -0
  347. package/dist/src/positions/index.js.map +1 -0
  348. package/dist/src/positions/types.d.ts +208 -0
  349. package/dist/src/positions/types.d.ts.map +1 -0
  350. package/dist/src/positions/types.js +10 -0
  351. package/dist/src/positions/types.js.map +1 -0
  352. package/dist/src/registry.d.ts +30 -0
  353. package/dist/src/registry.d.ts.map +1 -1
  354. package/dist/src/registry.js +130 -9
  355. package/dist/src/registry.js.map +1 -1
  356. package/dist/src/styles/annotations.d.ts +132 -0
  357. package/dist/src/styles/annotations.d.ts.map +1 -0
  358. package/dist/src/styles/annotations.js +320 -0
  359. package/dist/src/styles/annotations.js.map +1 -0
  360. package/dist/src/styles/budget.d.ts +45 -0
  361. package/dist/src/styles/budget.d.ts.map +1 -0
  362. package/dist/src/styles/budget.js +58 -0
  363. package/dist/src/styles/budget.js.map +1 -0
  364. package/dist/src/styles/canon/bends.d.ts +32 -0
  365. package/dist/src/styles/canon/bends.d.ts.map +1 -0
  366. package/dist/src/styles/canon/bends.js +74 -0
  367. package/dist/src/styles/canon/bends.js.map +1 -0
  368. package/dist/src/styles/canon/color-tables.d.ts +22 -0
  369. package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
  370. package/dist/src/styles/canon/color-tables.js +369 -0
  371. package/dist/src/styles/canon/color-tables.js.map +1 -0
  372. package/dist/src/styles/canon/color.d.ts +66 -0
  373. package/dist/src/styles/canon/color.d.ts.map +1 -0
  374. package/dist/src/styles/canon/color.js +548 -0
  375. package/dist/src/styles/canon/color.js.map +1 -0
  376. package/dist/src/styles/canon/enums.d.ts +25 -0
  377. package/dist/src/styles/canon/enums.d.ts.map +1 -0
  378. package/dist/src/styles/canon/enums.js +187 -0
  379. package/dist/src/styles/canon/enums.js.map +1 -0
  380. package/dist/src/styles/canon/graphviz.d.ts +48 -0
  381. package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
  382. package/dist/src/styles/canon/graphviz.js +160 -0
  383. package/dist/src/styles/canon/graphviz.js.map +1 -0
  384. package/dist/src/styles/canon/index.d.ts +13 -0
  385. package/dist/src/styles/canon/index.d.ts.map +1 -0
  386. package/dist/src/styles/canon/index.js +13 -0
  387. package/dist/src/styles/canon/index.js.map +1 -0
  388. package/dist/src/styles/canon/number.d.ts +59 -0
  389. package/dist/src/styles/canon/number.d.ts.map +1 -0
  390. package/dist/src/styles/canon/number.js +142 -0
  391. package/dist/src/styles/canon/number.js.map +1 -0
  392. package/dist/src/styles/canon/site.d.ts +51 -0
  393. package/dist/src/styles/canon/site.d.ts.map +1 -0
  394. package/dist/src/styles/canon/site.js +63 -0
  395. package/dist/src/styles/canon/site.js.map +1 -0
  396. package/dist/src/styles/canon/text.d.ts +61 -0
  397. package/dist/src/styles/canon/text.d.ts.map +1 -0
  398. package/dist/src/styles/canon/text.js +199 -0
  399. package/dist/src/styles/canon/text.js.map +1 -0
  400. package/dist/src/styles/codes.d.ts +95 -0
  401. package/dist/src/styles/codes.d.ts.map +1 -0
  402. package/dist/src/styles/codes.js +97 -0
  403. package/dist/src/styles/codes.js.map +1 -0
  404. package/dist/src/styles/cyjs/cascade.d.ts +134 -0
  405. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
  406. package/dist/src/styles/cyjs/cascade.js +2252 -0
  407. package/dist/src/styles/cyjs/cascade.js.map +1 -0
  408. package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
  409. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
  410. package/dist/src/styles/cyjs/defaults-table.js +76 -0
  411. package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
  412. package/dist/src/styles/cyjs/emit.d.ts +82 -0
  413. package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
  414. package/dist/src/styles/cyjs/emit.js +790 -0
  415. package/dist/src/styles/cyjs/emit.js.map +1 -0
  416. package/dist/src/styles/cyjs/index.d.ts +13 -0
  417. package/dist/src/styles/cyjs/index.d.ts.map +1 -0
  418. package/dist/src/styles/cyjs/index.js +13 -0
  419. package/dist/src/styles/cyjs/index.js.map +1 -0
  420. package/dist/src/styles/cyjs/live.d.ts +46 -0
  421. package/dist/src/styles/cyjs/live.d.ts.map +1 -0
  422. package/dist/src/styles/cyjs/live.js +108 -0
  423. package/dist/src/styles/cyjs/live.js.map +1 -0
  424. package/dist/src/styles/cyjs/mappers.d.ts +147 -0
  425. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
  426. package/dist/src/styles/cyjs/mappers.js +744 -0
  427. package/dist/src/styles/cyjs/mappers.js.map +1 -0
  428. package/dist/src/styles/cyjs/selector.d.ts +113 -0
  429. package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
  430. package/dist/src/styles/cyjs/selector.js +611 -0
  431. package/dist/src/styles/cyjs/selector.js.map +1 -0
  432. package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
  433. package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
  434. package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
  435. package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
  436. package/dist/src/styles/cytoscape/emit.d.ts +125 -0
  437. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
  438. package/dist/src/styles/cytoscape/emit.js +1025 -0
  439. package/dist/src/styles/cytoscape/emit.js.map +1 -0
  440. package/dist/src/styles/cytoscape/index.d.ts +10 -0
  441. package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
  442. package/dist/src/styles/cytoscape/index.js +10 -0
  443. package/dist/src/styles/cytoscape/index.js.map +1 -0
  444. package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
  445. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
  446. package/dist/src/styles/cytoscape/lexicon.js +603 -0
  447. package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
  448. package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
  449. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
  450. package/dist/src/styles/cytoscape/mappings.js +460 -0
  451. package/dist/src/styles/cytoscape/mappings.js.map +1 -0
  452. package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
  453. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
  454. package/dist/src/styles/cytoscape/resolve.js +381 -0
  455. package/dist/src/styles/cytoscape/resolve.js.map +1 -0
  456. package/dist/src/styles/cytoscape/translate.d.ts +50 -0
  457. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
  458. package/dist/src/styles/cytoscape/translate.js +156 -0
  459. package/dist/src/styles/cytoscape/translate.js.map +1 -0
  460. package/dist/src/styles/defaults.d.ts +90 -0
  461. package/dist/src/styles/defaults.d.ts.map +1 -0
  462. package/dist/src/styles/defaults.js +414 -0
  463. package/dist/src/styles/defaults.js.map +1 -0
  464. package/dist/src/styles/index.d.ts +15 -0
  465. package/dist/src/styles/index.d.ts.map +1 -0
  466. package/dist/src/styles/index.js +14 -0
  467. package/dist/src/styles/index.js.map +1 -0
  468. package/dist/src/styles/internal.d.ts +17 -0
  469. package/dist/src/styles/internal.d.ts.map +1 -0
  470. package/dist/src/styles/internal.js +16 -0
  471. package/dist/src/styles/internal.js.map +1 -0
  472. package/dist/src/styles/io/approximations.d.ts +24 -0
  473. package/dist/src/styles/io/approximations.d.ts.map +1 -0
  474. package/dist/src/styles/io/approximations.js +51 -0
  475. package/dist/src/styles/io/approximations.js.map +1 -0
  476. package/dist/src/styles/io/block.d.ts +166 -0
  477. package/dist/src/styles/io/block.d.ts.map +1 -0
  478. package/dist/src/styles/io/block.js +930 -0
  479. package/dist/src/styles/io/block.js.map +1 -0
  480. package/dist/src/styles/io/generic.d.ts +88 -0
  481. package/dist/src/styles/io/generic.d.ts.map +1 -0
  482. package/dist/src/styles/io/generic.js +516 -0
  483. package/dist/src/styles/io/generic.js.map +1 -0
  484. package/dist/src/styles/io/index.d.ts +8 -0
  485. package/dist/src/styles/io/index.d.ts.map +1 -0
  486. package/dist/src/styles/io/index.js +7 -0
  487. package/dist/src/styles/io/index.js.map +1 -0
  488. package/dist/src/styles/io/writer.d.ts +80 -0
  489. package/dist/src/styles/io/writer.d.ts.map +1 -0
  490. package/dist/src/styles/io/writer.js +596 -0
  491. package/dist/src/styles/io/writer.js.map +1 -0
  492. package/dist/src/styles/notes.d.ts +47 -0
  493. package/dist/src/styles/notes.d.ts.map +1 -0
  494. package/dist/src/styles/notes.js +140 -0
  495. package/dist/src/styles/notes.js.map +1 -0
  496. package/dist/src/styles/plan/classes.d.ts +31 -0
  497. package/dist/src/styles/plan/classes.d.ts.map +1 -0
  498. package/dist/src/styles/plan/classes.js +139 -0
  499. package/dist/src/styles/plan/classes.js.map +1 -0
  500. package/dist/src/styles/plan/continuous.d.ts +32 -0
  501. package/dist/src/styles/plan/continuous.d.ts.map +1 -0
  502. package/dist/src/styles/plan/continuous.js +165 -0
  503. package/dist/src/styles/plan/continuous.js.map +1 -0
  504. package/dist/src/styles/plan/discrete.d.ts +39 -0
  505. package/dist/src/styles/plan/discrete.d.ts.map +1 -0
  506. package/dist/src/styles/plan/discrete.js +127 -0
  507. package/dist/src/styles/plan/discrete.js.map +1 -0
  508. package/dist/src/styles/plan/families.d.ts +31 -0
  509. package/dist/src/styles/plan/families.d.ts.map +1 -0
  510. package/dist/src/styles/plan/families.js +95 -0
  511. package/dist/src/styles/plan/families.js.map +1 -0
  512. package/dist/src/styles/plan/features.d.ts +58 -0
  513. package/dist/src/styles/plan/features.d.ts.map +1 -0
  514. package/dist/src/styles/plan/features.js +185 -0
  515. package/dist/src/styles/plan/features.js.map +1 -0
  516. package/dist/src/styles/plan/index.d.ts +7 -0
  517. package/dist/src/styles/plan/index.d.ts.map +1 -0
  518. package/dist/src/styles/plan/index.js +7 -0
  519. package/dist/src/styles/plan/index.js.map +1 -0
  520. package/dist/src/styles/plan/plan.d.ts +71 -0
  521. package/dist/src/styles/plan/plan.d.ts.map +1 -0
  522. package/dist/src/styles/plan/plan.js +893 -0
  523. package/dist/src/styles/plan/plan.js.map +1 -0
  524. package/dist/src/styles/plan/resolve.d.ts +137 -0
  525. package/dist/src/styles/plan/resolve.d.ts.map +1 -0
  526. package/dist/src/styles/plan/resolve.js +587 -0
  527. package/dist/src/styles/plan/resolve.js.map +1 -0
  528. package/dist/src/styles/types.d.ts +702 -0
  529. package/dist/src/styles/types.d.ts.map +1 -0
  530. package/dist/src/styles/types.js +10 -0
  531. package/dist/src/styles/types.js.map +1 -0
  532. package/dist/src/styles/vocabulary.d.ts +41 -0
  533. package/dist/src/styles/vocabulary.d.ts.map +1 -0
  534. package/dist/src/styles/vocabulary.js +140 -0
  535. package/dist/src/styles/vocabulary.js.map +1 -0
  536. package/dist/src/types.d.ts +64 -1
  537. package/dist/src/types.d.ts.map +1 -1
  538. package/dist/src/types.js.map +1 -1
  539. package/dist/styles.d.ts +1 -0
  540. package/dist/styles.js +322 -0
  541. package/dist/styles.js.map +1 -0
  542. package/dist/xgmml.js +5 -4
  543. package/dist/xgmml.js.map +1 -1
  544. package/package.json +13 -2
  545. package/src/common/codes.ts +7 -0
  546. package/src/common/escape.ts +5 -2
  547. package/src/common/export.ts +179 -140
  548. package/src/common/input.ts +8 -4
  549. package/src/common/json-elements.ts +169 -38
  550. package/src/common/notes.ts +94 -0
  551. package/src/common/report.ts +41 -1
  552. package/src/common/units.ts +42 -0
  553. package/src/common/xml.ts +45 -5
  554. package/src/formats/cx/exporter.ts +95 -11
  555. package/src/formats/cx/importer.ts +126 -90
  556. package/src/formats/cx/styles.ts +304 -0
  557. package/src/formats/cx2/exporter.ts +234 -77
  558. package/src/formats/cx2/importer.ts +19 -1
  559. package/src/formats/cx2/styles.ts +29 -0
  560. package/src/formats/cys/constants.ts +3 -0
  561. package/src/formats/cys/exporter.ts +246 -60
  562. package/src/formats/cys/importer.ts +125 -9
  563. package/src/formats/cys/session.ts +6 -0
  564. package/src/formats/cys/styles.ts +254 -0
  565. package/src/formats/cys/tables.ts +117 -48
  566. package/src/formats/dot/exporter.ts +262 -126
  567. package/src/formats/dot/importer.ts +111 -20
  568. package/src/formats/dot/index.ts +1 -0
  569. package/src/formats/dot/positions.ts +77 -0
  570. package/src/formats/dot/styles.ts +1741 -0
  571. package/src/formats/gexf/exporter.ts +27 -11
  572. package/src/formats/gexf/importer.ts +308 -158
  573. package/src/formats/gexf/index.ts +10 -0
  574. package/src/formats/gexf/schema.ts +5 -0
  575. package/src/formats/gexf/styles.ts +719 -0
  576. package/src/formats/gml/exporter.ts +33 -14
  577. package/src/formats/gml/importer.ts +4 -0
  578. package/src/formats/gml/index.ts +2 -1
  579. package/src/formats/gml/positions.ts +52 -0
  580. package/src/formats/gml/styles.ts +1248 -0
  581. package/src/formats/gml/syntax.ts +173 -62
  582. package/src/formats/graphml/constants.ts +5 -0
  583. package/src/formats/graphml/exporter.ts +163 -71
  584. package/src/formats/graphml/importer.ts +119 -45
  585. package/src/formats/graphml/index.ts +1 -0
  586. package/src/formats/graphml/styles-plain.ts +236 -0
  587. package/src/formats/graphml/styles-yed.ts +1221 -0
  588. package/src/formats/graphml/styles-yfiles3.ts +573 -0
  589. package/src/formats/graphml/tree.ts +36 -20
  590. package/src/formats/graphml/yfiles.ts +89 -13
  591. package/src/formats/json/exporter.ts +76 -26
  592. package/src/formats/json/importer.ts +541 -322
  593. package/src/formats/json/positions.ts +50 -0
  594. package/src/formats/json/styles.ts +2082 -0
  595. package/src/formats/neo4j/exporter.ts +2 -1
  596. package/src/formats/pajek/exporter.ts +195 -106
  597. package/src/formats/pajek/importer.ts +78 -9
  598. package/src/formats/pajek/index.ts +2 -0
  599. package/src/formats/pajek/styles.ts +685 -0
  600. package/src/formats/pajek/syntax.ts +7 -0
  601. package/src/formats/xgmml/columns.ts +39 -9
  602. package/src/formats/xgmml/constants.ts +3 -0
  603. package/src/formats/xgmml/document.ts +54 -12
  604. package/src/formats/xgmml/emit.ts +11 -6
  605. package/src/formats/xgmml/exporter.ts +32 -13
  606. package/src/formats/xgmml/importer.ts +43 -29
  607. package/src/formats/xgmml/styles.ts +400 -0
  608. package/src/index.ts +16 -0
  609. package/src/positions/codes.ts +32 -0
  610. package/src/positions/convert.ts +123 -0
  611. package/src/positions/extract.ts +619 -0
  612. package/src/positions/index.ts +23 -0
  613. package/src/positions/types.ts +221 -0
  614. package/src/registry.ts +179 -8
  615. package/src/styles/annotations.ts +478 -0
  616. package/src/styles/budget.ts +60 -0
  617. package/src/styles/canon/bends.ts +84 -0
  618. package/src/styles/canon/color-tables.ts +386 -0
  619. package/src/styles/canon/color.ts +624 -0
  620. package/src/styles/canon/enums.ts +211 -0
  621. package/src/styles/canon/graphviz.ts +189 -0
  622. package/src/styles/canon/index.ts +13 -0
  623. package/src/styles/canon/number.ts +152 -0
  624. package/src/styles/canon/site.ts +87 -0
  625. package/src/styles/canon/text.ts +221 -0
  626. package/src/styles/codes.ts +104 -0
  627. package/src/styles/cyjs/cascade.ts +2670 -0
  628. package/src/styles/cyjs/defaults-table.ts +82 -0
  629. package/src/styles/cyjs/emit.ts +951 -0
  630. package/src/styles/cyjs/index.ts +37 -0
  631. package/src/styles/cyjs/live.ts +147 -0
  632. package/src/styles/cyjs/mappers.ts +879 -0
  633. package/src/styles/cyjs/selector.ts +778 -0
  634. package/src/styles/cyjs/stylesheet-text.ts +214 -0
  635. package/src/styles/cytoscape/emit.ts +1264 -0
  636. package/src/styles/cytoscape/index.ts +40 -0
  637. package/src/styles/cytoscape/lexicon.ts +656 -0
  638. package/src/styles/cytoscape/mappings.ts +603 -0
  639. package/src/styles/cytoscape/resolve.ts +521 -0
  640. package/src/styles/cytoscape/translate.ts +237 -0
  641. package/src/styles/defaults.ts +504 -0
  642. package/src/styles/index.ts +57 -0
  643. package/src/styles/internal.ts +17 -0
  644. package/src/styles/io/approximations.ts +47 -0
  645. package/src/styles/io/block.ts +1138 -0
  646. package/src/styles/io/generic.ts +687 -0
  647. package/src/styles/io/index.ts +18 -0
  648. package/src/styles/io/writer.ts +745 -0
  649. package/src/styles/notes.ts +165 -0
  650. package/src/styles/plan/classes.ts +166 -0
  651. package/src/styles/plan/continuous.ts +218 -0
  652. package/src/styles/plan/discrete.ts +165 -0
  653. package/src/styles/plan/families.ts +115 -0
  654. package/src/styles/plan/features.ts +234 -0
  655. package/src/styles/plan/index.ts +7 -0
  656. package/src/styles/plan/plan.ts +1129 -0
  657. package/src/styles/plan/resolve.ts +685 -0
  658. package/src/styles/types.ts +814 -0
  659. package/src/styles/vocabulary.ts +172 -0
  660. package/src/types.ts +76 -1
  661. package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
  662. package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
  663. package/dist/chunks/export-rKLeGQMo.js.map +0 -1
  664. package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
  665. package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
  666. package/dist/chunks/exporter-RVtXVetw.js.map +0 -1
  667. package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
  668. package/dist/chunks/importer-C98dpSH4.js.map +0 -1
  669. package/dist/chunks/importer-D794XUTe.js.map +0 -1
  670. package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
  671. package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
  672. package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
  673. package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
  674. package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
@@ -0,0 +1,478 @@
1
+ /**
2
+ * The annotations a file draws beside its graph: shapes, text notes and arrows that are not nodes or edges. Cytoscape
3
+ * desktop keeps them in the network's `__Annotations` column (sessions, XGMML, CX and CX2 all carry it), one
4
+ * `key=value|key=value` string per annotation; this reads them as neutral facts in the position convention (y up,
5
+ * the file's own units), so they line up with `extractPositions()`.
6
+ */
7
+
8
+ import type { GraphSnapshot } from "@graphty/graph-format";
9
+
10
+ import type { StyleArrowShape, StyleColor, StyleNodeShape } from "./types.js";
11
+
12
+ /**
13
+ * A point in the position convention: y up, in the file's own units.
14
+ * @category Styles
15
+ */
16
+ export interface AnnotationPoint {
17
+ /** The x coordinate. */
18
+ readonly x: number;
19
+ /** The y coordinate, y up. */
20
+ readonly y: number;
21
+ }
22
+
23
+ /**
24
+ * What every annotation has.
25
+ * @category Styles
26
+ */
27
+ export interface AnnotationBase {
28
+ /** The file's id for the annotation, or its index when the file gives none. */
29
+ readonly id: string;
30
+ /** Whether it is drawn behind the graph or in front of it. */
31
+ readonly layer: "background" | "foreground";
32
+ /** Its drawing order within its layer, lowest first. */
33
+ readonly z: number;
34
+ }
35
+
36
+ /**
37
+ * A filled, outlined shape.
38
+ * @category Styles
39
+ */
40
+ export interface ShapeAnnotation extends AnnotationBase {
41
+ /** Which kind of annotation this is: always "shape". */
42
+ readonly kind: "shape";
43
+ /** The box's center. */
44
+ readonly center: AnnotationPoint;
45
+ /** The box's width. */
46
+ readonly width: number;
47
+ /** The box's height. */
48
+ readonly height: number;
49
+ /** The outline's shape. */
50
+ readonly shape: StyleNodeShape;
51
+ /** The fill color, or null for none. */
52
+ readonly fill: StyleColor | null;
53
+ /** The fill's opacity, 0..1. */
54
+ readonly fillOpacity: number;
55
+ /** The outline's color. */
56
+ readonly borderColor: StyleColor;
57
+ /** The outline's opacity, 0..1. */
58
+ readonly borderOpacity: number;
59
+ /** The outline's width. */
60
+ readonly borderWidth: number;
61
+ }
62
+
63
+ /**
64
+ * A line of text.
65
+ * @category Styles
66
+ */
67
+ export interface TextAnnotation extends AnnotationBase {
68
+ /** Which kind of annotation this is: always "text". */
69
+ readonly kind: "text";
70
+ /** The text. */
71
+ readonly text: string;
72
+ /** Where the text is placed: the top-left corner of its box, or its center. */
73
+ readonly at: AnnotationPoint;
74
+ /** What `at` is. */
75
+ readonly anchor: "top-left" | "center";
76
+ /** The font size, in the file's units. */
77
+ readonly fontSize: number;
78
+ /** The font family. */
79
+ readonly fontFamily: string;
80
+ /** Whether the text is bold. */
81
+ readonly bold: boolean;
82
+ /** Whether the text is italic. */
83
+ readonly italic: boolean;
84
+ /** The text color. */
85
+ readonly color: StyleColor;
86
+ /** The text's opacity, 0..1. */
87
+ readonly opacity: number;
88
+ }
89
+
90
+ /**
91
+ * A line between two points, with an arrowhead at either end.
92
+ * @category Styles
93
+ */
94
+ export interface ArrowAnnotation extends AnnotationBase {
95
+ /** Which kind of annotation this is: always "arrow". */
96
+ readonly kind: "arrow";
97
+ /** Where the line starts. */
98
+ readonly from: AnnotationPoint;
99
+ /** Where it ends. */
100
+ readonly to: AnnotationPoint;
101
+ /** The line color. */
102
+ readonly color: StyleColor;
103
+ /** The line's opacity, 0..1. */
104
+ readonly opacity: number;
105
+ /** The line width. */
106
+ readonly width: number;
107
+ /** The arrowhead at the start. */
108
+ readonly sourceArrow: StyleArrowShape;
109
+ /** The arrowhead at the end. */
110
+ readonly targetArrow: StyleArrowShape;
111
+ /** The start's arrowhead size as a factor of the normal size. */
112
+ readonly sourceSize: number;
113
+ /** The end's arrowhead size as a factor of the normal size. */
114
+ readonly targetSize: number;
115
+ }
116
+
117
+ /**
118
+ * One annotation.
119
+ * @category Styles
120
+ */
121
+ export type GraphAnnotation = ShapeAnnotation | TextAnnotation | ArrowAnnotation;
122
+
123
+ /**
124
+ * A file's annotations, and the kinds it holds that are not read (images, groups of annotations), by the file's
125
+ * own type name, once each.
126
+ * @category Styles
127
+ */
128
+ export interface FileAnnotations {
129
+ /** The annotations read, in the file's order. */
130
+ readonly annotations: readonly GraphAnnotation[];
131
+ /** The file's type names of the annotations not read. */
132
+ readonly skipped: readonly string[];
133
+ }
134
+
135
+ /** The graph column Cytoscape desktop keeps its annotations in. */
136
+ const CYTOSCAPE_ANNOTATIONS_COLUMN = "__Annotations";
137
+
138
+ const TYPE_PREFIX = "org.cytoscape.view.presentation.annotations.";
139
+
140
+ /** Cytoscape's annotation shape names, lowercase, as neutral shapes. */
141
+ const SHAPES: ReadonlyMap<string, StyleNodeShape> = new Map<string, StyleNodeShape>([
142
+ ["rectangle", "rectangle"],
143
+ ["roundedrectangle", "round-rectangle"],
144
+ ["rounded_rectangle", "round-rectangle"],
145
+ ["ellipse", "ellipse"],
146
+ ["triangle", "triangle"],
147
+ ["diamond", "diamond"],
148
+ ["pentagon", "pentagon"],
149
+ ["hexagon", "hexagon"],
150
+ ["octagon", "octagon"],
151
+ ["parallelogram", "parallelogram"],
152
+ ["star5", "star"],
153
+ ["star6", "star"],
154
+ ]);
155
+
156
+ /**
157
+ * Cytoscape's annotation arrowheads, by the position in its `ArrowType` list (older sessions) and by name (newer
158
+ * ones), lowercase.
159
+ */
160
+ const ARROW_ORDER: readonly StyleArrowShape[] = [
161
+ "circle",
162
+ "triangle",
163
+ "vee",
164
+ "diamond",
165
+ "triangle-open",
166
+ "none",
167
+ "tee",
168
+ "triangle",
169
+ "triangle",
170
+ "triangle",
171
+ "tee",
172
+ "other:x",
173
+ ];
174
+ const ARROW_NAMES: ReadonlyMap<string, StyleArrowShape> = new Map<string, StyleArrowShape>([
175
+ ["circle", "circle"],
176
+ ["closed arrow", "triangle"],
177
+ ["concave arrow", "vee"],
178
+ ["diamond", "diamond"],
179
+ ["open arrow", "triangle-open"],
180
+ ["no arrow", "none"],
181
+ ["pipe", "tee"],
182
+ ["triangle", "triangle"],
183
+ ["t", "tee"],
184
+ ["x", "other:x"],
185
+ ]);
186
+
187
+ /**
188
+ * The annotations a graph holds, from the column Cytoscape desktop keeps them in.
189
+ * @param snapshot - the graph
190
+ * @returns the annotations; none when the graph has the column empty or not at all
191
+ * @category Styles
192
+ */
193
+ export function readAnnotations(snapshot: GraphSnapshot): FileAnnotations {
194
+ const { graph } = snapshot;
195
+ const cell = graph.has(CYTOSCAPE_ANNOTATIONS_COLUMN) ? graph.value(CYTOSCAPE_ANNOTATIONS_COLUMN, 0) : null;
196
+ const entries = cellStrings(cell);
197
+ const fields = entries.map(parseEntry);
198
+ const byId = new Map(fields.map((f, i) => [f.get("uuid") ?? String(i), f]));
199
+ const annotations: GraphAnnotation[] = [];
200
+ const skipped = new Set<string>();
201
+ fields.forEach((f, i) => {
202
+ const read = readOne(f, String(i), byId);
203
+ if (read === null) {
204
+ skipped.add((f.get("type") ?? "").replace(TYPE_PREFIX, ""));
205
+ } else {
206
+ annotations.push(...read);
207
+ }
208
+ });
209
+ return { annotations, skipped: [...skipped] };
210
+ }
211
+
212
+ /**
213
+ * A cell's strings: a list cell's items, or the lines of a text cell.
214
+ * @param cell - the cell
215
+ * @returns the strings
216
+ */
217
+ function cellStrings(cell: unknown): string[] {
218
+ if (typeof cell === "string") {
219
+ return cell.split(/[\r\n]+/).filter((s) => s !== "");
220
+ }
221
+ if (cell !== null && typeof cell === "object" && Symbol.iterator in cell) {
222
+ return Array.from(cell as Iterable<unknown>).filter((s): s is string => typeof s === "string" && s !== "");
223
+ }
224
+ return [];
225
+ }
226
+
227
+ /**
228
+ * One annotation string's fields.
229
+ * @param entry - `key=value|key=value`
230
+ * @returns the fields
231
+ */
232
+ function parseEntry(entry: string): Map<string, string> {
233
+ const out = new Map<string, string>();
234
+ for (const part of entry.split("|")) {
235
+ const eq = part.indexOf("=");
236
+ if (eq > 0) {
237
+ out.set(part.slice(0, eq), part.slice(eq + 1));
238
+ }
239
+ }
240
+ return out;
241
+ }
242
+
243
+ /**
244
+ * One annotation as neutral facts; a bounded text annotation is a shape and its text.
245
+ * @param f - its fields
246
+ * @param index - its position, its id when it has no uuid
247
+ * @param byId - every annotation's fields by id, for an arrow's ends
248
+ * @returns the annotations, or null for a kind not read
249
+ */
250
+ function readOne(
251
+ f: ReadonlyMap<string, string>,
252
+ index: string,
253
+ byId: ReadonlyMap<string, ReadonlyMap<string, string>>,
254
+ ): GraphAnnotation[] | null {
255
+ const type = (f.get("type") ?? "").replace(TYPE_PREFIX, "");
256
+ const zoom = positive(f.get("zoom")) ?? 1;
257
+ const base: AnnotationBase = {
258
+ id: f.get("uuid") ?? index,
259
+ layer: f.get("canvas") === "background" ? "background" : "foreground",
260
+ z: num(f.get("z")) ?? 0,
261
+ };
262
+ switch (type) {
263
+ case "ShapeAnnotation":
264
+ return [shapeOf(f, base, zoom)];
265
+ case "TextAnnotation":
266
+ return [textOf(f, base, zoom, { x: num(f.get("x")) ?? 0, y: -(num(f.get("y")) ?? 0) }, "top-left")];
267
+ case "BoundedTextAnnotation": {
268
+ const shape = shapeOf(f, base, zoom);
269
+ return [shape, textOf(f, { ...base, id: `${base.id}:text` }, zoom, shape.center, "center")];
270
+ }
271
+ case "ArrowAnnotation":
272
+ return arrowOf(f, base, zoom, byId);
273
+ default:
274
+ return null;
275
+ }
276
+ }
277
+
278
+ /**
279
+ * A shape annotation: `x`, `y` its top-left corner, y down; `width`, `height` and the outline at the saved zoom.
280
+ * @param f - its fields
281
+ * @param base - its id, layer and order
282
+ * @param zoom - the zoom its sizes were saved at
283
+ * @returns the shape
284
+ */
285
+ function shapeOf(f: ReadonlyMap<string, string>, base: AnnotationBase, zoom: number): ShapeAnnotation {
286
+ const x = num(f.get("x")) ?? 0;
287
+ const y = num(f.get("y")) ?? 0;
288
+ const width = (positive(f.get("width")) ?? 0) / zoom;
289
+ const height = (positive(f.get("height")) ?? 0) / zoom;
290
+ const fill = javaColor(f.get("fillColor"));
291
+ const border = javaColor(f.get("edgeColor")) ?? { color: "#000000", alpha: 1 };
292
+ return {
293
+ ...base,
294
+ kind: "shape",
295
+ center: { x: x + width / 2, y: -(y + height / 2) },
296
+ width,
297
+ height,
298
+ shape: SHAPES.get((f.get("shapeType") ?? "rectangle").toLowerCase()) ?? "rectangle",
299
+ fill: fill?.color ?? null,
300
+ fillOpacity: fill === null ? 0 : fill.alpha * percent(f.get("fillOpacity")),
301
+ borderColor: border.color,
302
+ borderOpacity: border.alpha * percent(f.get("edgeOpacity")),
303
+ borderWidth: (num(f.get("edgeThickness")) ?? 1) / zoom,
304
+ };
305
+ }
306
+
307
+ /**
308
+ * A text annotation, or the text of a bounded one.
309
+ * @param f - its fields
310
+ * @param base - its id, layer and order
311
+ * @param zoom - the zoom its font size was saved at
312
+ * @param at - where it is placed
313
+ * @param anchor - what `at` is
314
+ * @returns the text
315
+ */
316
+ function textOf(
317
+ f: ReadonlyMap<string, string>,
318
+ base: AnnotationBase,
319
+ zoom: number,
320
+ at: AnnotationPoint,
321
+ anchor: TextAnnotation["anchor"],
322
+ ): TextAnnotation {
323
+ // java.awt.Font styles: 1 bold, 2 italic, 3 both
324
+ const style = num(f.get("fontStyle")) ?? 0;
325
+ const color = javaColor(f.get("color")) ?? { color: "#000000", alpha: 1 };
326
+ return {
327
+ ...base,
328
+ kind: "text",
329
+ text: f.get("text") ?? "",
330
+ at,
331
+ anchor,
332
+ fontSize: (positive(f.get("fontSize")) ?? 12) / zoom,
333
+ fontFamily: f.get("fontFamily") ?? "sans-serif",
334
+ bold: (style & 1) !== 0,
335
+ italic: (style & 2) !== 0,
336
+ color: color.color,
337
+ opacity: color.alpha,
338
+ };
339
+ }
340
+
341
+ /**
342
+ * An arrow annotation. Cytoscape keeps its start as the annotation it leaves (`sourceAnnotation`) and its end as a
343
+ * point, a node's center at save time (`targetNode`) or another annotation, and saves the arrow's top-left corner
344
+ * as `x`, `y`: the start wherever the end lies right of and below it, which is taken for the start, else the center
345
+ * of the annotation it leaves.
346
+ * @param f - its fields
347
+ * @param base - its id, layer and order
348
+ * @param zoom - the zoom its line width was saved at
349
+ * @param byId - every annotation's fields by id
350
+ * @returns the arrow, or null when it has no end
351
+ */
352
+ function arrowOf(
353
+ f: ReadonlyMap<string, string>,
354
+ base: AnnotationBase,
355
+ zoom: number,
356
+ byId: ReadonlyMap<string, ReadonlyMap<string, string>>,
357
+ ): ArrowAnnotation[] | null {
358
+ const target = f.get("targetAnnotation");
359
+ const to = point(f.get("targetPoint")) ?? point(f.get("targetNode")) ?? centerOf(byId.get(target ?? ""), zoom);
360
+ if (to === null) {
361
+ return null;
362
+ }
363
+ const corner = { x: num(f.get("x")) ?? 0, y: num(f.get("y")) ?? 0 };
364
+ const source = centerOf(byId.get(f.get("sourceAnnotation") ?? ""), zoom) ?? corner;
365
+ // ponytail: the start is exact only when the end lies right of and below it; elsewhere the center of the
366
+ // annotation it leaves, as Cytoscape stores no other start. Clip to that annotation's box if it matters.
367
+ const from = { x: to.x > corner.x ? corner.x : source.x, y: to.y > corner.y ? corner.y : source.y };
368
+ const color = javaColor(f.get("lineColor")) ?? { color: "#000000", alpha: 1 };
369
+ return [
370
+ {
371
+ ...base,
372
+ kind: "arrow",
373
+ from: { x: from.x, y: -from.y },
374
+ to: { x: to.x, y: -to.y },
375
+ color: color.color,
376
+ opacity: color.alpha * percent(f.get("lineOpacity")),
377
+ width: (positive(f.get("lineThickness")) ?? 1) / zoom,
378
+ sourceArrow: arrowShape(f.get("sourceType")),
379
+ targetArrow: arrowShape(f.get("targetType")),
380
+ sourceSize: positive(f.get("sourceSize")) ?? 1,
381
+ targetSize: positive(f.get("targetSize")) ?? 1,
382
+ },
383
+ ];
384
+ }
385
+
386
+ /**
387
+ * An annotation's center, y down as the file writes it: a shape's box center, a text's corner.
388
+ * @param f - its fields, or undefined
389
+ * @param zoom - the zoom the arrow was saved at
390
+ * @returns the point, or null
391
+ */
392
+ function centerOf(f: ReadonlyMap<string, string> | undefined, zoom: number): AnnotationPoint | null {
393
+ if (f === undefined) {
394
+ return null;
395
+ }
396
+ const x = num(f.get("x"));
397
+ const y = num(f.get("y"));
398
+ if (x === null || y === null) {
399
+ return null;
400
+ }
401
+ return { x: x + (positive(f.get("width")) ?? 0) / zoom / 2, y: y + (positive(f.get("height")) ?? 0) / zoom / 2 };
402
+ }
403
+
404
+ /**
405
+ * An arrowhead by its `ArrowType` position or name.
406
+ * @param raw - the field
407
+ * @returns the shape; a triangle for one not known
408
+ */
409
+ function arrowShape(raw: string | undefined): StyleArrowShape {
410
+ if (raw === undefined) {
411
+ return "none";
412
+ }
413
+ const n = num(raw);
414
+ if (n !== null) {
415
+ return ARROW_ORDER[n] ?? "triangle";
416
+ }
417
+ return ARROW_NAMES.get(raw.trim().toLowerCase()) ?? "triangle";
418
+ }
419
+
420
+ /**
421
+ * A `x,y` point as the file writes it.
422
+ * @param raw - the field
423
+ * @returns the point, or null
424
+ */
425
+ function point(raw: string | undefined): AnnotationPoint | null {
426
+ const [x, y] = (raw ?? "").split(",").map((s) => num(s));
427
+ return x === null || x === undefined || y === null || y === undefined ? null : { x, y };
428
+ }
429
+
430
+ /**
431
+ * A Java color as a signed ARGB integer.
432
+ * @param raw - the field
433
+ * @returns the color and its alpha, or null
434
+ */
435
+ function javaColor(raw: string | undefined): { color: StyleColor; alpha: number } | null {
436
+ const n = num(raw);
437
+ if (n === null || !Number.isInteger(n)) {
438
+ return null;
439
+ }
440
+ const argb = n >>> 0;
441
+ return {
442
+ color: `#${(argb & 0xffffff).toString(16).padStart(6, "0")}`,
443
+ alpha: (argb >>> 24) / 255,
444
+ };
445
+ }
446
+
447
+ /**
448
+ * A 0..100 percentage as 0..1; 1 when absent.
449
+ * @param raw - the field
450
+ * @returns the fraction
451
+ */
452
+ function percent(raw: string | undefined): number {
453
+ const n = num(raw);
454
+ return n === null ? 1 : Math.min(1, Math.max(0, n / 100));
455
+ }
456
+
457
+ /**
458
+ * A finite number.
459
+ * @param raw - the field
460
+ * @returns the number, or null
461
+ */
462
+ function num(raw: string | undefined): number | null {
463
+ if (raw === undefined || raw.trim() === "") {
464
+ return null;
465
+ }
466
+ const n = Number(raw);
467
+ return Number.isFinite(n) ? n : null;
468
+ }
469
+
470
+ /**
471
+ * A positive number.
472
+ * @param raw - the field
473
+ * @returns the number, or null
474
+ */
475
+ function positive(raw: string | undefined): number | null {
476
+ const n = num(raw);
477
+ return n !== null && n > 0 ? n : null;
478
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The one counted work budget of a style extraction: the readers' cascades, the planner, the translation and the
3
+ * replay all spend from it. It counts operations, never time, so the same file always stops at the same place.
4
+ */
5
+
6
+ import type { StyleTarget, StyleWorkBudget } from "./types.js";
7
+
8
+ /**
9
+ * Operations one extraction may spend per target (nodes, edges) before what is left is copied per element.
10
+ * @category Styles
11
+ */
12
+ export const STYLE_WORK_BUDGET = 2e8;
13
+
14
+ /**
15
+ * A counted work budget per target. `spend()` adds operations and answers whether the target is still within its
16
+ * limit; once a target has spent more than the limit it stays exhausted.
17
+ * @category Styles
18
+ */
19
+ export class StyleBudget implements StyleWorkBudget {
20
+ /** Operations allowed per target. */
21
+ readonly limit: number;
22
+ readonly #used = { node: 0, edge: 0 };
23
+
24
+ /**
25
+ * Creates a budget.
26
+ * @param limit - operations allowed per target; defaults to `STYLE_WORK_BUDGET`
27
+ */
28
+ constructor(limit: number = STYLE_WORK_BUDGET) {
29
+ this.limit = limit;
30
+ }
31
+
32
+ /**
33
+ * Spends operations for a target.
34
+ * @param target - nodes or edges
35
+ * @param operations - how many operations the work costs
36
+ * @returns true while the target has spent at most `limit` operations
37
+ */
38
+ spend(target: StyleTarget, operations: number): boolean {
39
+ this.#used[target] += operations;
40
+ return this.#used[target] <= this.limit;
41
+ }
42
+
43
+ /**
44
+ * Whether a target has spent more than `limit` operations.
45
+ * @param target - nodes or edges
46
+ * @returns true once the target's budget is exhausted
47
+ */
48
+ exhausted(target: StyleTarget): boolean {
49
+ return this.#used[target] > this.limit;
50
+ }
51
+
52
+ /**
53
+ * How many operations a target has spent.
54
+ * @param target - nodes or edges
55
+ * @returns the operations spent so far
56
+ */
57
+ used(target: StyleTarget): number {
58
+ return this.#used[target];
59
+ }
60
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * The neutral `bends` value of an edge: the points its route passes through between its two nodes, each relative to
3
+ * the straight line from the source node's center to the target node's center. `along` is how far along that line
4
+ * the point lies (0 at the source center, 1 at the target center) and `across` how far to its left, y up, both as
5
+ * fractions of the line's length. Written `along,across` per point, in order from the source, separated by spaces:
6
+ * `"0,-0.5 1,-0.5"` is a route that leaves the source, runs parallel to the line half its length to the right, and
7
+ * comes back to the target. Relative, so a drawing that moves or scales the nodes keeps the route's shape and its
8
+ * right angles.
9
+ */
10
+
11
+ /** A point in the file's own coordinates. */
12
+ export type BendPoint = readonly [x: number, y: number];
13
+
14
+ /**
15
+ * Rounds a fraction to 4 decimals, so a value spells the same whatever float noise the file's numbers carry.
16
+ * @param v - the fraction
17
+ * @returns its spelling
18
+ */
19
+ const fraction = (v: number): string => String(Math.round(v * 1e4) / 1e4);
20
+
21
+ /**
22
+ * The `bends` value of an edge whose route passes through `points`.
23
+ * @param source - the source node's center
24
+ * @param target - the target node's center
25
+ * @param points - the bend points, from the source end
26
+ * @param yDown - true when the file's y axis points down (the value is always y up)
27
+ * @returns the value, or null with no bends, no line between distinct centers, or a coordinate that is not finite
28
+ * @category Styles
29
+ */
30
+ export function canonBends(
31
+ source: BendPoint,
32
+ target: BendPoint,
33
+ points: readonly BendPoint[],
34
+ yDown: boolean,
35
+ ): string | null {
36
+ const flip = yDown ? -1 : 1;
37
+ const dx = target[0] - source[0];
38
+ const dy = (target[1] - source[1]) * flip;
39
+ const length2 = dx * dx + dy * dy;
40
+ if (points.length === 0 || length2 <= 0 || !Number.isFinite(length2)) {
41
+ return null;
42
+ }
43
+ const out: string[] = [];
44
+ for (const [px, py] of points) {
45
+ const rx = px - source[0];
46
+ const ry = (py - source[1]) * flip;
47
+ const along = (rx * dx + ry * dy) / length2;
48
+ const across = (dx * ry - dy * rx) / length2;
49
+ if (!Number.isFinite(along) || !Number.isFinite(across)) {
50
+ return null;
51
+ }
52
+ out.push(`${fraction(along)},${fraction(across)}`);
53
+ }
54
+ return out.join(" ");
55
+ }
56
+
57
+ /**
58
+ * The bend points a `bends` value places between two node centers: the inverse of {@link canonBends}.
59
+ * @param source - the source node's center
60
+ * @param target - the target node's center
61
+ * @param value - the `bends` value
62
+ * @param yDown - true when the points are wanted in a y-down file's coordinates
63
+ * @returns the points, or null when the value is not `along,across` pairs or a coordinate is not finite
64
+ * @category Styles
65
+ */
66
+ export function bendsToPoints(source: BendPoint, target: BendPoint, value: string, yDown: boolean): BendPoint[] | null {
67
+ const flip = yDown ? -1 : 1;
68
+ const dx = target[0] - source[0];
69
+ const dy = (target[1] - source[1]) * flip;
70
+ const out: BendPoint[] = [];
71
+ for (const pair of value.trim().split(/\s+/)) {
72
+ const [a, c, extra] = pair.split(",").map(Number);
73
+ if (extra !== undefined || !Number.isFinite(a) || !Number.isFinite(c)) {
74
+ return null;
75
+ }
76
+ const x = source[0] + a * dx - c * dy;
77
+ const y = source[1] + (a * dy + c * dx) * flip;
78
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
79
+ return null;
80
+ }
81
+ out.push([x, y]);
82
+ }
83
+ return out.length === 0 ? null : out;
84
+ }