@graphty/graph-io 0.3.43 → 0.3.45

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-DJMHdDvv.js +40 -0
  2. package/dist/chunks/approximations-DJMHdDvv.js.map +1 -0
  3. package/dist/chunks/block-CPCHkX42.js +2777 -0
  4. package/dist/chunks/block-CPCHkX42.js.map +1 -0
  5. package/dist/chunks/{choose-DvpbdRuz.js → choose--jM0yYCo.js} +3 -2
  6. package/dist/chunks/{choose-DvpbdRuz.js.map → choose--jM0yYCo.js.map} +1 -1
  7. package/dist/chunks/{constants-fT3E8JYY.js → constants-BKwqelYD.js} +6 -2
  8. package/dist/chunks/constants-BKwqelYD.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-DZy6JgdA.js +3456 -0
  12. package/dist/chunks/emit-DZy6JgdA.js.map +1 -0
  13. package/dist/chunks/{escape-B62ZGM_a.js → escape-CgzxiYPg.js} +44 -21
  14. package/dist/chunks/escape-CgzxiYPg.js.map +1 -0
  15. package/dist/chunks/{export-rKLeGQMo.js → export-BvqAXCKh.js} +196 -792
  16. package/dist/chunks/export-BvqAXCKh.js.map +1 -0
  17. package/dist/chunks/{exporter-yLxKBvLE.js → exporter--Mk9gXCJ.js} +4 -3
  18. package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter--Mk9gXCJ.js.map} +1 -1
  19. package/dist/chunks/{exporter-RVtXVetw.js → exporter-C-9cgZKa.js} +1805 -287
  20. package/dist/chunks/exporter-C-9cgZKa.js.map +1 -0
  21. package/dist/chunks/{exporter-8hLNemFk.js → exporter-DFqJhBnj.js} +133 -74
  22. package/dist/chunks/exporter-DFqJhBnj.js.map +1 -0
  23. package/dist/chunks/{exporter-BWwEuOPT.js → exporter-DteVeJki.js} +22 -12
  24. package/dist/chunks/exporter-DteVeJki.js.map +1 -0
  25. package/dist/chunks/format-BpQBx8MZ.js +676 -0
  26. package/dist/chunks/format-BpQBx8MZ.js.map +1 -0
  27. package/dist/chunks/generic-BGO71QBv.js +1347 -0
  28. package/dist/chunks/generic-BGO71QBv.js.map +1 -0
  29. package/dist/chunks/{importer-C98dpSH4.js → importer-B-9Rc1zO.js} +141 -82
  30. package/dist/chunks/importer-B-9Rc1zO.js.map +1 -0
  31. package/dist/chunks/{importer-D794XUTe.js → importer-BVVR740x.js} +31 -8
  32. package/dist/chunks/importer-BVVR740x.js.map +1 -0
  33. package/dist/chunks/{importer-WrGRZb0N.js → importer-C0AjA3Ax.js} +449 -102
  34. package/dist/chunks/importer-C0AjA3Ax.js.map +1 -0
  35. package/dist/chunks/{importer-BbNb7eNg.js → importer-C7pvJe1L.js} +1398 -129
  36. package/dist/chunks/importer-C7pvJe1L.js.map +1 -0
  37. package/dist/chunks/{importer-xZ-3suY1.js → importer-ClwoVx3O.js} +791 -135
  38. package/dist/chunks/importer-ClwoVx3O.js.map +1 -0
  39. package/dist/chunks/{importer-Ht7LNg8L.js → importer-D0sC_6bO.js} +116 -296
  40. package/dist/chunks/importer-D0sC_6bO.js.map +1 -0
  41. package/dist/chunks/{importer-Dz7tI8Sa.js → importer-EHQk1jbM.js} +617 -115
  42. package/dist/chunks/importer-EHQk1jbM.js.map +1 -0
  43. package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-DJZRZ6jd.js} +123 -32
  44. package/dist/chunks/json-elements-DJZRZ6jd.js.map +1 -0
  45. package/dist/chunks/lexicon-WMsNddyU.js +509 -0
  46. package/dist/chunks/lexicon-WMsNddyU.js.map +1 -0
  47. package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-G4MqRdux.js} +3 -2
  48. package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-G4MqRdux.js.map} +1 -1
  49. package/dist/chunks/{records-Cu4bxYOm.js → records-CiaWZrFH.js} +2 -2
  50. package/dist/chunks/{records-Cu4bxYOm.js.map → records-CiaWZrFH.js.map} +1 -1
  51. package/dist/chunks/styles-DvoFBKCK.js +690 -0
  52. package/dist/chunks/styles-DvoFBKCK.js.map +1 -0
  53. package/dist/chunks/styles-yed-Cz9rLBCP.js +842 -0
  54. package/dist/chunks/styles-yed-Cz9rLBCP.js.map +1 -0
  55. package/dist/chunks/styles-zNTmz5R7.js +2102 -0
  56. package/dist/chunks/styles-zNTmz5R7.js.map +1 -0
  57. package/dist/chunks/{text-DHOJXnED.js → text-CzJNFOS9.js} +2 -2
  58. package/dist/chunks/{text-DHOJXnED.js.map → text-CzJNFOS9.js.map} +1 -1
  59. package/dist/chunks/units-XMZFIFe1.js +19 -0
  60. package/dist/chunks/units-XMZFIFe1.js.map +1 -0
  61. package/dist/chunks/writer-gQ8kx99H.js +448 -0
  62. package/dist/chunks/writer-gQ8kx99H.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 +927 -74
  73. package/dist/gml.js.map +1 -1
  74. package/dist/graph-io.js +351 -236
  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 +1496 -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 +791 -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 +605 -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 +89 -0
  489. package/dist/src/styles/io/writer.d.ts.map +1 -0
  490. package/dist/src/styles/io/writer.js +626 -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 +1755 -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 +952 -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 +658 -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 +780 -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,221 @@
1
+ /**
2
+ * The types of `@graphty/graph-io/positions`: the neutral form every format's stored node
3
+ * coordinates are read into, and how a column or an importer says how its coordinates are spelled.
4
+ *
5
+ * The neutral convention: every coordinate is the node's center, y grows upward, in the file's own
6
+ * length unit (`units`), with 3 components (z = 0 when the file stored 2, or when every node has the
7
+ * same z).
8
+ */
9
+
10
+ import type { GraphTool, LengthUnit } from "../common/units.js";
11
+ import type { PositionNoteCode } from "./codes.js";
12
+
13
+ export type { GraphTool, LengthUnit } from "../common/units.js";
14
+
15
+ /**
16
+ * Which way a file's y coordinate grows. "down" is screen order (yEd, Cytoscape, Pajek, d3), "up"
17
+ * is math order (Gephi, Graphviz, graph-io's own position columns).
18
+ * @category Positions
19
+ */
20
+ export type YAxis = "up" | "down";
21
+
22
+ /**
23
+ * What a stored node coordinate points at: the node's center, or the top-left corner of its box
24
+ * (yEd), which needs the node's width and height to find the center.
25
+ * @category Positions
26
+ */
27
+ export type PositionAnchor = "center" | "top-left";
28
+
29
+ /**
30
+ * How a role-`position` column's values are spelled, as optional fields of the column's
31
+ * `meta.extra`. A missing field means y up, center, `"file"` units: what the Cytoscape-family,
32
+ * GEXF and DOT columns already hold.
33
+ * @category Positions
34
+ */
35
+ export interface PositionColumnExtra {
36
+ /** The unit of the coordinates. */
37
+ readonly units?: LengthUnit;
38
+ /**
39
+ * How many px (points) one unit of the coordinates is, when `units` is "file" but the file's
40
+ * unit is a known length: 72 for Graphviz input inches. Lets a reader draw the coordinates in
41
+ * the same unit as the file's px style lengths; the coordinates themselves stay as written.
42
+ */
43
+ readonly pxPerUnit?: number;
44
+ /** How many coordinates the file wrote per node: 2, or 3 when it stored a z. */
45
+ readonly sourceDims?: 2 | 3;
46
+ /** Which way y grows; "down" is flipped to y up. */
47
+ readonly yAxis?: YAxis;
48
+ /** What the coordinate points at; "top-left" is moved to the center using `width` and `height`. */
49
+ readonly anchor?: PositionAnchor;
50
+ /** The name of the node column holding each node's width, for a top-left anchor. */
51
+ readonly width?: string;
52
+ /** The name of the node column holding each node's height, for a top-left anchor. */
53
+ readonly height?: string;
54
+ /** A z the file centers its depth on (Pajek's 0.5): subtracted from a real z before any flip. */
55
+ readonly zOrigin?: number;
56
+ /**
57
+ * The file writes (0, 0) for a node it has no position for (NetworkX's Pajek writer): when other
58
+ * rows are placed, a (0, 0) shared by two or more rows counts as unplaced.
59
+ */
60
+ readonly zeroUnplaced?: boolean;
61
+ }
62
+
63
+ /**
64
+ * A group container's box, as an importer's `positions()` hook gives it: (`x`, `y`) is where the
65
+ * box's anchor is, spelled like the node coordinates (the same y direction and anchor).
66
+ * @category Positions
67
+ */
68
+ export interface ImporterGroupBox {
69
+ /** The container node, by index. */
70
+ readonly node: number;
71
+ /** The box. */
72
+ readonly box: {
73
+ /** The box's anchor, x. */
74
+ readonly x: number;
75
+ /** The box's anchor, y. */
76
+ readonly y: number;
77
+ /** The box's width. */
78
+ readonly width: number;
79
+ /** The box's height. */
80
+ readonly height: number;
81
+ };
82
+ }
83
+
84
+ /**
85
+ * What an importer's `positions()` hook returns: where its coordinates are and how they are spelled.
86
+ *
87
+ * The simple form names two (or three) plain numeric node columns:
88
+ * `{ x: "x", y: "y", yAxis: "down", units: "px" }`. The advanced form names a 3-component column
89
+ * (`column`) and may add the anchor, size columns, group boxes, a median node size and the tool.
90
+ * @category Positions
91
+ */
92
+ export interface ImporterPositions extends PositionColumnExtra {
93
+ /** A plain numeric node column holding x (simple form). */
94
+ readonly x?: string;
95
+ /** A plain numeric node column holding y (simple form). */
96
+ readonly y?: string;
97
+ /** A plain numeric node column holding z (simple form); omit for a 2D file. */
98
+ readonly z?: string;
99
+ /** A 3-component node column holding the coordinates (advanced form); defaults to the role-`position` column. */
100
+ readonly column?: string;
101
+ /** Group container boxes the file stores apart from the node coordinates (Graphviz cluster `bb`). */
102
+ readonly groups?: readonly ImporterGroupBox[];
103
+ /** The median node diameter in the file's unit, when the importer knows it better than the size columns. */
104
+ readonly medianNodeSize?: number | null;
105
+ /** The tool that wrote the file, when the importer knows it better than `meta.creator`. */
106
+ readonly tool?: GraphTool | null;
107
+ }
108
+
109
+ /**
110
+ * What an importer's `positions()` hook is given besides the snapshot.
111
+ * @category Positions
112
+ */
113
+ export interface PositionReadContext {
114
+ /** Aborts a long read. */
115
+ readonly signal: AbortSignal | null;
116
+ }
117
+
118
+ /**
119
+ * A note about the stored positions: a code with its parameters, never a sentence for a reader.
120
+ * `message` is graph-io's English for its own logs.
121
+ * @category Positions
122
+ */
123
+ export interface PositionNote {
124
+ /** The condition. */
125
+ readonly code: PositionNoteCode;
126
+ /** How many elements (or columns) it covers, and up to 8 examples. */
127
+ readonly params: {
128
+ /** How many elements (or columns) it covers. */
129
+ readonly count: number;
130
+ /** Up to 8 of their ids (or column names). */
131
+ readonly samples: readonly string[];
132
+ };
133
+ /** The node indexes it covers, or only their count when it is about the file as a whole. */
134
+ readonly elements:
135
+ | readonly number[]
136
+ | {
137
+ /** How many it covers. */
138
+ readonly count: number;
139
+ };
140
+ /** graph-io's English; never shown to a reader by graphty-element. */
141
+ readonly message: string;
142
+ }
143
+
144
+ /**
145
+ * A group container's box in the neutral convention: (`x`, `y`) is the box's center, y up.
146
+ * @category Positions
147
+ */
148
+ export interface FilePositionGroup {
149
+ /** The container node, by index. */
150
+ readonly node: number;
151
+ /** The box: center, width and height in the file's unit. */
152
+ readonly box: {
153
+ /** The box's center, x. */
154
+ readonly x: number;
155
+ /** The box's center, y. */
156
+ readonly y: number;
157
+ /** The box's width. */
158
+ readonly width: number;
159
+ /** The box's height. */
160
+ readonly height: number;
161
+ };
162
+ }
163
+
164
+ /**
165
+ * A file's stored node coordinates in the neutral convention: the node's center, y up, in the
166
+ * file's own unit, 3 components per node.
167
+ * @category Positions
168
+ */
169
+ export interface FilePositions {
170
+ /** The shape version of this object. */
171
+ readonly version: 1;
172
+ /** Where the coordinates came from: the format, the tool that wrote the file, and the y direction it used. */
173
+ readonly source: {
174
+ /** The format that read the file. */
175
+ readonly format: string;
176
+ /** The tool that wrote the file, or null when the file does not say. */
177
+ readonly tool: GraphTool | null;
178
+ /** Which way y grew in the file; every coordinate here has y up. */
179
+ readonly yAxis: YAxis;
180
+ };
181
+ /** The unit of every coordinate and size. */
182
+ readonly units: LengthUnit;
183
+ /**
184
+ * How many px (points) one unit is, when `units` is "file" but the file's unit is a known
185
+ * length (Graphviz input inches: 72); absent otherwise. Multiply a coordinate by it to compare
186
+ * it with the file's px style lengths.
187
+ */
188
+ readonly pxPerUnit?: number;
189
+ /** The median node diameter, in `units`, when the file stores node sizes; else null. */
190
+ readonly medianNodeSize: number | null;
191
+ /** 3 when the nodes differ in z, else 2 (z is then 0). */
192
+ readonly dims: 2 | 3;
193
+ /** x, y, z per node, by node index (3 * nodeCount); NaN for a node with no position. */
194
+ readonly coords: Float64Array;
195
+ /** The nodes with a position. */
196
+ readonly placed: number;
197
+ /** The nodes that need one: every node except group containers the file gives no box. */
198
+ readonly total: number;
199
+ /** False when nothing is stored, or every node sits on one point (coords are then all NaN). */
200
+ readonly usable: boolean;
201
+ /** The box around every placed node, or null when none is placed. */
202
+ readonly bounds: {
203
+ /** The smallest x, y and z. */
204
+ readonly min: readonly [number, number, number];
205
+ /** The largest x, y and z. */
206
+ readonly max: readonly [number, number, number];
207
+ } | null;
208
+ /** Group containers with a box. */
209
+ readonly groups: readonly FilePositionGroup[];
210
+ /** What could not be read as written. */
211
+ readonly notes: readonly PositionNote[];
212
+ }
213
+
214
+ /**
215
+ * Options of `extractPositions()`.
216
+ * @category Positions
217
+ */
218
+ export interface ExtractPositionsOptions {
219
+ /** Aborts the read; it throws the signal's reason. */
220
+ readonly signal?: AbortSignal | null;
221
+ }
package/src/registry.ts CHANGED
@@ -23,6 +23,7 @@ import {
23
23
  FETCH_CODE,
24
24
  OPTION_IGNORED_CODE,
25
25
  SELF_LOOPS_DROPPED_CODE,
26
+ STYLES_NOT_IMPORTED_CODE,
26
27
  UNKNOWN_OPTION_CODE,
27
28
  WEIGHT_NOT_FOUND_CODE,
28
29
  } from "./common/codes.js";
@@ -45,6 +46,9 @@ import { oboExporter, oboImporter } from "./formats/obo/index.js";
45
46
  import { pajekExporter, pajekImporter } from "./formats/pajek/index.js";
46
47
  import { xgmmlExporter, xgmmlImporter } from "./formats/xgmml/index.js";
47
48
  import { type FormatName, rankFormats, SNIFF_HEAD_BYTES, type SniffHints, type SniffResult } from "./sniff.js";
49
+ import { extractStyles, type StyleImportOptions } from "./styles/io/generic.js";
50
+ import { isKeptGraphtyProperty, prepareStyleExport } from "./styles/io/writer.js";
51
+ import type { ExtractedStyles } from "./styles/types.js";
48
52
  import {
49
53
  type CommonExportOptions,
50
54
  type CommonImportOptions,
@@ -137,6 +141,13 @@ export interface ImportGraphOptions extends CommonImportOptions, GraphChoiceOpti
137
141
  * @defaultValue 16777216
138
142
  */
139
143
  readonly maxEmptyCells?: number | undefined;
144
+ /**
145
+ * Read the file's styles too: `true`, or `{ toolDefaults: false }` to leave out the defaults of the program
146
+ * that wrote the file. The styles are in `result.styles`; the graph, the report and every export are the same
147
+ * either way.
148
+ * @defaultValue false
149
+ */
150
+ readonly styles?: boolean | StyleImportOptions | undefined;
140
151
  /** Format-specific options, passed to the importer as they are. */
141
152
  readonly [formatOption: string]: unknown;
142
153
  }
@@ -172,6 +183,12 @@ export interface ImportGraphResult {
172
183
  * can ignore it. It is not enumerable, so `console.log(result)` and `{ ...result }` leave it out.
173
184
  */
174
185
  readonly freeze: FreezeReport;
186
+ /**
187
+ * The file's styles, when you passed the `styles` option: the rules that reproduce how the program that wrote
188
+ * the file draws each node and edge, read by the importer that read the file. Null when the file has none.
189
+ * Absent without the option.
190
+ */
191
+ readonly styles?: ExtractedStyles | null;
175
192
  }
176
193
 
177
194
  /**
@@ -239,6 +256,13 @@ export interface FormatInfo {
239
256
  * @category Saving
240
257
  */
241
258
  export interface ExportGraphOptions extends CommonExportOptions {
259
+ /**
260
+ * Write these styles too (`result.styles` of an import, or styles built for this graph): each element's look in
261
+ * the format's own style slots and, where the format can keep them, the rules, so importing the file back
262
+ * rebuilds them. What the format cannot hold is a W_STYLE_ note of checkExport(). Styles read from or built for a
263
+ * different graph fail with E_STYLES_MISMATCH before anything is written.
264
+ */
265
+ readonly styles?: ExtractedStyles | null | undefined;
242
266
  /** Format-specific options, passed to the exporter as they are. */
243
267
  readonly [formatOption: string]: unknown;
244
268
  }
@@ -272,6 +296,7 @@ const FUNCTION_OPTIONS: ReadonlySet<string> = new Set([
272
296
  "sanitizeIds",
273
297
  "selfLoops",
274
298
  "signal",
299
+ "styles",
275
300
  "weightDtype",
276
301
  "weightFrom",
277
302
  ]);
@@ -284,6 +309,7 @@ const REGISTRY_KEYS: ReadonlySet<string> = new Set([
284
309
  "builder",
285
310
  "freeze",
286
311
  "maxEmptyCells",
312
+ "styles",
287
313
  ]);
288
314
 
289
315
  /**
@@ -687,7 +713,43 @@ export class FormatRegistry {
687
713
  format: FormatName,
688
714
  options?: ExportGraphOptions | CommonExportOptions,
689
715
  ): AsyncIterable<Uint8Array> {
690
- return this.exporter(format).export(snapshot, options);
716
+ const styled = this.styled(snapshot, format, options);
717
+ if (styled === null) {
718
+ return this.exporter(format).export(snapshot, options);
719
+ }
720
+ if (styled.refusal !== null) {
721
+ return refuse(styled.refusal);
722
+ }
723
+ return styled.exporter.export(styled.snapshot, styled.options);
724
+ }
725
+
726
+ /**
727
+ * An export with styles worked out, or null when no styles were given (the export is then exactly as before).
728
+ * @param snapshot - the graph
729
+ * @param format - the format name
730
+ * @param options - the caller's options
731
+ * @returns the exporter, the snapshot and options to hand it, the style losses and any refusal
732
+ */
733
+ private styled(
734
+ snapshot: GraphSnapshot,
735
+ format: FormatName,
736
+ options: ExportGraphOptions | CommonExportOptions | undefined,
737
+ ): StyledExport | null {
738
+ const styles = (options as ExportGraphOptions | undefined)?.styles;
739
+ if (styles === undefined || styles === null) {
740
+ return null;
741
+ }
742
+ const exporter = this.exporter(format);
743
+ const { styles: _given, ...rest } = options as ExportGraphOptions;
744
+ const prepared = prepareStyleExport(snapshot, exporter, styles, rest);
745
+ return {
746
+ exporter,
747
+ snapshot: prepared.snapshot,
748
+ options: prepared.input === null ? rest : { ...rest, styles: prepared.input },
749
+ plain: rest,
750
+ notes: prepared.notes,
751
+ refusal: prepared.refusal,
752
+ };
691
753
  }
692
754
 
693
755
  /**
@@ -702,7 +764,14 @@ export class FormatRegistry {
702
764
  format: FormatName,
703
765
  options?: ExportGraphOptions | CommonExportOptions,
704
766
  ): Promise<string> {
705
- return this.exporter(format).exportToString(snapshot, options);
767
+ const styled = this.styled(snapshot, format, options);
768
+ if (styled === null) {
769
+ return this.exporter(format).exportToString(snapshot, options);
770
+ }
771
+ if (styled.refusal !== null) {
772
+ throw refusalError(styled.refusal);
773
+ }
774
+ return styled.exporter.exportToString(styled.snapshot, styled.options);
706
775
  }
707
776
 
708
777
  /**
@@ -754,7 +823,28 @@ export class FormatRegistry {
754
823
  format: FormatName,
755
824
  options?: ExportGraphOptions | CommonExportOptions,
756
825
  ): readonly LossNote[] {
757
- const notes = this.exporter(format).check(snapshot, options);
826
+ const styled = this.styled(snapshot, format, options);
827
+ let notes: readonly LossNote[];
828
+ if (styled === null) {
829
+ notes = this.exporter(format).check(snapshot, options);
830
+ } else if (styled.refusal === null) {
831
+ // a property graph-io already reports as not written is reported once, whoever else notices
832
+ const key = (n: LossNote): string =>
833
+ `${n.code}\u0000${n.style?.target ?? ""}\u0000${n.style?.property ?? ""}`;
834
+ const reported = new Set(styled.notes.filter((n) => n.style !== undefined).map(key));
835
+ notes = [
836
+ ...styled.exporter
837
+ .check(styled.snapshot, styled.options)
838
+ .filter(
839
+ (n) =>
840
+ n.style === undefined ||
841
+ (!reported.has(key(n)) && !isKeptGraphtyProperty(n, styled.exporter)),
842
+ ),
843
+ ...styled.notes,
844
+ ];
845
+ } else {
846
+ notes = [...styled.exporter.check(snapshot, styled.plain), styled.refusal];
847
+ }
758
848
  const unknown = this.unknownOptions(options);
759
849
  if (unknown.length === 0) {
760
850
  return notes;
@@ -845,7 +935,7 @@ export class FormatRegistry {
845
935
  mimeTypes: importer?.mimeTypes ?? exporter?.mimeTypes ?? [],
846
936
  canImport: importer !== undefined,
847
937
  canExport: exporter !== undefined,
848
- capabilities: exporter?.capabilities ?? null,
938
+ capabilities: capabilitiesOf(exporter),
849
939
  });
850
940
  });
851
941
  }
@@ -1405,6 +1495,16 @@ function result(
1405
1495
  throw freezeFailure(err, report);
1406
1496
  }
1407
1497
  const { warnings } = chosen;
1498
+ const wanted = options.styles;
1499
+ let styles: ExtractedStyles | null | undefined;
1500
+ if (wanted !== undefined && wanted !== false) {
1501
+ styles = extractStyles(chosen.importer, frozen.snapshot, report, {
1502
+ signal: options.signal,
1503
+ toolDefaults: typeof wanted === "object" ? wanted.toolDefaults : undefined,
1504
+ });
1505
+ }
1506
+ const read =
1507
+ styles !== undefined && chosen.importer.styles !== undefined ? withoutStylesNotImported(report) : report;
1408
1508
  const result = {
1409
1509
  format: chosen.importer.format,
1410
1510
  sniff: chosen.sniff,
@@ -1412,11 +1512,11 @@ function result(
1412
1512
  report: withFreezeWarnings(
1413
1513
  weightNotFound(
1414
1514
  warnings.length === 0
1415
- ? report
1515
+ ? read
1416
1516
  : Object.freeze({
1417
- ...report,
1418
- issues: Object.freeze([...warnings, ...report.issues]),
1419
- warningCount: report.warningCount + warnings.length,
1517
+ ...read,
1518
+ issues: Object.freeze([...warnings, ...read.issues]),
1519
+ warningCount: read.warningCount + warnings.length,
1420
1520
  }),
1421
1521
  frozen.snapshot,
1422
1522
  options.weightFrom,
@@ -1424,11 +1524,82 @@ function result(
1424
1524
  frozen.report,
1425
1525
  ),
1426
1526
  };
1527
+ if (styles !== undefined) {
1528
+ Object.assign(result, { styles });
1529
+ }
1427
1530
  // not enumerable: it holds one entry per edge, and console.log(result) should show the graph, not that
1428
1531
  Object.defineProperty(result, "freeze", { value: frozen.report, enumerable: false });
1429
1532
  return Object.freeze(result as ImportGraphResult);
1430
1533
  }
1431
1534
 
1535
+ /**
1536
+ * A report without its W_STYLES_NOT_IMPORTED warnings: the importer read the styles it would have named.
1537
+ * @param report - the importer's report
1538
+ * @returns the report, a copy only when it held such a warning
1539
+ */
1540
+ function withoutStylesNotImported(report: ImportReport): ImportReport {
1541
+ const issues = report.issues.filter((i) => i.code !== STYLES_NOT_IMPORTED_CODE);
1542
+ if (issues.length === report.issues.length) {
1543
+ return report;
1544
+ }
1545
+ return Object.freeze({
1546
+ ...report,
1547
+ issues: Object.freeze(issues),
1548
+ warningCount: report.warningCount - (report.issues.length - issues.length),
1549
+ });
1550
+ }
1551
+
1552
+ /** An export with styles, worked out by FormatRegistry.styled(). */
1553
+ interface StyledExport {
1554
+ /** The exporter. */
1555
+ readonly exporter: GraphExporter;
1556
+ /** The snapshot to hand it. */
1557
+ readonly snapshot: GraphSnapshot;
1558
+ /** The options to hand it: the caller's, with `styles` replaced by the exporter's input or left out. */
1559
+ readonly options: ExportGraphOptions;
1560
+ /** The caller's options without `styles`. */
1561
+ readonly plain: ExportGraphOptions;
1562
+ /** The style losses. */
1563
+ readonly notes: readonly LossNote[];
1564
+ /** E_STYLES_MISMATCH, or null. */
1565
+ readonly refusal: LossNote | null;
1566
+ }
1567
+
1568
+ /**
1569
+ * The error an export refused for its styles throws.
1570
+ * @param note - the refusal note
1571
+ * @returns the error
1572
+ */
1573
+ function refusalError(note: LossNote): GraphFormatError {
1574
+ return new GraphFormatError("E_UNSUPPORTED", note.message, { code: note.code });
1575
+ }
1576
+
1577
+ /**
1578
+ * Chunks that fail on the first read, before any byte: an export refused for its styles.
1579
+ * @param note - the refusal note
1580
+ * @returns chunks whose first read rejects
1581
+ */
1582
+ function refuse(note: LossNote): AsyncIterable<Uint8Array> {
1583
+ return {
1584
+ [Symbol.asyncIterator]: () => ({ next: () => Promise.reject(refusalError(note)) }),
1585
+ };
1586
+ }
1587
+
1588
+ /**
1589
+ * The capabilities listFormats() reports for an exporter: its table plus, when it writes styles, their capabilities.
1590
+ * @param exporter - the exporter, or undefined
1591
+ * @returns the capabilities, or null
1592
+ */
1593
+ function capabilitiesOf(exporter: GraphExporter | undefined): ExportCapabilities | null {
1594
+ if (exporter === undefined) {
1595
+ return null;
1596
+ }
1597
+ if (exporter.styles === undefined) {
1598
+ return exporter.capabilities;
1599
+ }
1600
+ return Object.freeze({ ...exporter.capabilities, styles: exporter.styles.capabilities });
1601
+ }
1602
+
1432
1603
  /**
1433
1604
  * The message of a W_UNKNOWN_OPTION warning or note.
1434
1605
  * @param name - the option name