@graphty/graph-io 0.3.42 → 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-CpRyHZ3H.js → exporter-quPUCBiC.js} +1807 -288
  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 +295 -414
  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 +23 -7
  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 +441 -265
  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 +30 -13
  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 +543 -323
  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-CpRyHZ3H.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
@@ -13,8 +13,12 @@
13
13
  * - `views/<subnetwork>-<view>-<name>.xgmml`, the node coordinates (y negated back to screen
14
14
  * coordinates), only when the snapshot has positions: graph-io computes no layout.
15
15
  *
16
- * Styles, the network list, properties and thumbnails are not written; Cytoscape gives the view
17
- * its default style. Entries are stored, not compressed. Every SUID comes from one counter, above
16
+ * Given styles (`exportGraph(..., { styles })`), the session also holds `session_vizmap.xml` with one style named
17
+ * for the network, which the view names, the view's per-element bypasses, and the `graphty.styles` block as an
18
+ * archive entry of its own (Cytoscape ignores it), with the style values its rules read inside it: a CyCSV text
19
+ * cell cannot be unset, so a table column would read an element without a value back as "". Without styles the
20
+ * view names Cytoscape's default style. The network list, properties and thumbnails are not written. Entries are
21
+ * stored, not compressed. Every SUID comes from one counter, above
18
22
  * the node ids that are kept as SUIDs; Cytoscape renumbers them all on load.
19
23
  */
20
24
 
@@ -30,7 +34,13 @@ import { agree, plural } from "../../common/plural.js";
30
34
  import { type ExplicitWeights, explicitWeights } from "../../common/weights.js";
31
35
  import { hasIllegalXmlChar } from "../../common/xml.js";
32
36
  import { writeZip, type ZipWriteEntry } from "../../common/zip.js";
37
+ import { type CytoscapeEmitted, cytoscapeVizmapXml, emitCytoscapeStyle } from "../../styles/cytoscape/emit.js";
38
+ import { STYLE_BLOCK_NAME, styleBlockLosses, writeStyleBlock } from "../../styles/io/block.js";
39
+ import type { ExporterStyleOptions } from "../../styles/io/writer.js";
40
+ import { StyleNotes } from "../../styles/notes.js";
41
+ import type { StyleValue, StyleWriteCapabilities } from "../../styles/types.js";
33
42
  import { type CommonExportOptions, type ExportCapabilities, type GraphExporter, type LossNote } from "../../types.js";
43
+ import { lossOf, snapshotBlock } from "../cx/styles.js";
34
44
  import { ORIGINAL_ID_ATTRIBUTE } from "../graphml/constants.js";
35
45
  import {
36
46
  CY_NAMESPACE,
@@ -44,10 +54,12 @@ import {
44
54
  POSITION_COLUMN,
45
55
  SUBGRAPH_COLUMN,
46
56
  XGMML_NAMESPACE,
57
+ XGMML_ORIGIN_NAMESPACE,
47
58
  XLINK_NAMESPACE,
48
59
  Z_COLUMN,
49
60
  } from "../xgmml/constants.js";
50
- import { FORMAT } from "./constants.js";
61
+ import { XGMML_STYLE_CAPABILITIES } from "../xgmml/styles.js";
62
+ import { FORMAT, STYLE_COLUMN_PREFIX } from "./constants.js";
51
63
 
52
64
  /**
53
65
  * The options of the Cytoscape session exporter: the common export options; it has none of its own. The
@@ -233,6 +245,12 @@ const LONG = "java.lang.Long";
233
245
  const BOOLEAN = "java.lang.Boolean";
234
246
  const I32_MAX = 2147483647;
235
247
 
248
+ /**
249
+ * What the session writer holds of a graph's styles: every visual property Cytoscape keeps, as a named style and
250
+ * view bypasses, and the graph's background; the block, with the style values its rules read, in an entry of its own.
251
+ */
252
+ const CYS_STYLE_CAPABILITIES: StyleWriteCapabilities = Object.freeze({ ...XGMML_STYLE_CAPABILITIES, block: "native" });
253
+
236
254
  /** The folder every entry lives under (Cytoscape needs one; the name is free). */
237
255
  const ROOT_FOLDER = "CytoscapeSession/";
238
256
 
@@ -289,6 +307,12 @@ interface Plan {
289
307
  readonly z: Column | null;
290
308
  /** Whether a position's own z is written as the view's z (no z column). */
291
309
  readonly positionZ: boolean;
310
+ /** The styles as a Cytoscape style, its bypasses and the columns its mappings add, or null without styles. */
311
+ readonly styled: CytoscapeEmitted | null;
312
+ /** Every style value written approximately or flattened into bypasses, as loss notes. */
313
+ readonly styleNotes: readonly LossNote[];
314
+ /** The `graphty.styles` block, written as its own entry: the styles being written, else the one the snapshot carries as a graph attribute; or null. */
315
+ readonly block: string | null;
292
316
  }
293
317
 
294
318
  // ============================================================ ids
@@ -947,7 +971,50 @@ function networkCandidates(snapshot: GraphSnapshot, name: string): Candidate[] {
947
971
  out.push({ name: "description", source: null, javaClass: STRING, cell: () => description });
948
972
  }
949
973
  for (const column of snapshot.graph) {
950
- out.push(candidateOf(column, column.meta.name));
974
+ // the graphty.styles block goes into an archive entry of its own, not the network table
975
+ if (column.meta.name !== STYLE_BLOCK_NAME) {
976
+ out.push(candidateOf(column, column.meta.name));
977
+ }
978
+ }
979
+ return out;
980
+ }
981
+
982
+ /**
983
+ * The columns a Cytoscape style's mappings read that the graph does not hold (a computed degree), as table
984
+ * candidates.
985
+ * @param table - the node or edge table
986
+ * @param added - the columns by name, each element's value
987
+ * @returns the candidates
988
+ */
989
+ function addedCandidates(
990
+ table: GraphSnapshot["nodes"],
991
+ added: ReadonlyMap<string, readonly (StyleValue | null)[]>,
992
+ ): Candidate[] {
993
+ const out: Candidate[] = [];
994
+ for (const [name, values] of added) {
995
+ if (table.has(name)) {
996
+ continue;
997
+ }
998
+ const kinds = new Set(values.filter((v) => v !== null).map((v) => typeof v));
999
+ const [kind] = kinds;
1000
+ let javaClass = STRING;
1001
+ if (kinds.size === 1 && kind === "number") {
1002
+ javaClass = DOUBLE;
1003
+ } else if (kinds.size === 1 && kind === "boolean") {
1004
+ javaClass = BOOLEAN;
1005
+ }
1006
+ out.push({
1007
+ name,
1008
+ source: null,
1009
+ javaClass,
1010
+ cell: (row) => {
1011
+ const v = values[row] ?? null;
1012
+ if (v === null) {
1013
+ return null;
1014
+ }
1015
+ return typeof v === "number" ? formatDecimal(v) : String(v);
1016
+ },
1017
+ });
951
1018
  }
952
1019
  return out;
953
1020
  }
@@ -956,23 +1023,21 @@ function networkCandidates(snapshot: GraphSnapshot, name: string): Candidate[] {
956
1023
  * Plan an export: the notes, the fatal condition, the SUIDs and the tables.
957
1024
  * @param snapshot - the snapshot
958
1025
  * @param common - the resolved common options
1026
+ * @param styles - the styles being written, or undefined
959
1027
  * @returns the plan
960
1028
  */
961
- function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
1029
+ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions, styles?: ExporterStyleOptions["styles"]): Plan {
962
1030
  const notes: LossNote[] = [];
963
1031
  const note: NoteFn = (code, message, column = null, count = null) => {
964
1032
  notes.push(Object.freeze({ code, message, column, count }));
965
1033
  };
966
- for (const gen of checkCapabilities(snapshot, CYS_CAPABILITIES, common, {
1034
+ const generic = checkCapabilities(snapshot, CYS_CAPABILITIES, common, {
967
1035
  roles: SLOT_ROLES,
968
1036
  roleNames: ROLE_NAMES,
969
1037
  positionDtype: "f64",
970
- })) {
971
- // json is reported per column below; ids by the SUID rule (positive integers)
972
- if (gen.code !== LOSS.JSON && gen.code !== LOSS.ID_CHARSET && gen.code !== LOSS.ID_MANGLED) {
973
- notes.push(gen);
974
- }
975
- }
1038
+ });
1039
+ // json is reported per column below; ids by the SUID rule (positive integers)
1040
+ notes.push(...generic.filter((gen) => !SESSION_OWN_CODES.has(gen.code)));
976
1041
 
977
1042
  const ids = planIds(snapshot, common, note);
978
1043
  const { nodeSuids, edgeSuids, mangled, fatal } = ids;
@@ -982,14 +1047,7 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
982
1047
 
983
1048
  // direction
984
1049
  const folding = pairFolding(snapshot);
985
- if (folding.mutualCount > 0) {
986
- note(
987
- LOSS.MUTUAL_EXPANDED,
988
- `${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as two directed edges; the mutual mark is lost`,
989
- null,
990
- folding.mutualCount,
991
- );
992
- }
1050
+ noteMutualPairs(folding.mutualCount, note);
993
1051
 
994
1052
  // positions
995
1053
  const position = snapshot.nodes.byRole("position");
@@ -998,50 +1056,39 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
998
1056
  if (position !== null) {
999
1057
  positionNotes(position, z, note);
1000
1058
  }
1001
- const placed =
1002
- (position !== null && position.nullCount < position.length) || (z !== null && z.nullCount < z.length);
1003
- const viewSuid = placed ? next++ : null;
1059
+ const placed = holdsValues(position) || holdsValues(z);
1060
+ const emitNotes = new StyleNotes();
1061
+ const styled =
1062
+ styles === undefined
1063
+ ? null
1064
+ : emitCytoscapeStyle(styles.rules, snapshot, { dialect: "desktop", notes: emitNotes });
1065
+ // written with styles, the graphics an XGMML or session import kept are the view's to say, from the styles
1066
+ const superseded = (c: Column): boolean => styled !== null && isKeptGraphics(c);
1067
+ // a styled session always has a view: the view names the style and holds the bypasses
1068
+ const viewSuid = placed || styled !== null ? next++ : null;
1004
1069
  const viewNodeBase = next;
1005
1070
 
1006
1071
  // node table
1007
- const nodeOwn: Candidate[] = mangled
1008
- ? [
1009
- {
1010
- name: ORIGINAL_ID_ATTRIBUTE,
1011
- source: null,
1012
- javaClass: STRING,
1013
- // every node carries its original, so an empty id ("") is told apart from an unset cell
1014
- cell: (row) => String(snapshot.ids.idOf(row)),
1015
- },
1016
- ]
1017
- : [];
1072
+ const nodeOwn = mangled ? [originalIdCandidate(snapshot)] : [];
1018
1073
  const nodeTable = planTable(
1019
1074
  "node",
1020
- elementCandidates(snapshot, "node", nodeOwn, (c) => placed && c === z, note),
1075
+ [
1076
+ ...elementCandidates(snapshot, "node", nodeOwn, (c) => (placed && c === z) || superseded(c), note),
1077
+ ...(styled === null ? [] : addedCandidates(snapshot.nodes, styled.columns.node)),
1078
+ ],
1021
1079
  snapshot.nodeCount,
1022
1080
  note,
1023
1081
  );
1024
1082
 
1025
1083
  // edge table
1026
- const weights: ExplicitWeights = explicitWeights(snapshot);
1027
- const plainWeight = snapshot.edges.get("weight");
1028
- if (plainWeight !== null && plainWeight.meta.role === null && !weights.weighted) {
1029
- note(LOSS.WEIGHT_KEY_CLASH, `edge column "weight" reads back as the edge weight`, "weight", null);
1030
- }
1031
- const edgeOwn: Candidate[] = weights.weighted
1032
- ? [
1033
- {
1034
- name: "weight",
1035
- source: null,
1036
- javaClass: DOUBLE,
1037
- cell: (e) => (weights.isExplicit(e) ? formatDecimal(weights.value(e)) : null),
1038
- },
1039
- ]
1040
- : [];
1084
+ const edgeOwn = weightCandidates(snapshot, note);
1041
1085
  const edgeRows = snapshot.edgeCount;
1042
1086
  const edgeTable = planTable(
1043
1087
  "edge",
1044
- elementCandidates(snapshot, "edge", edgeOwn, () => false, note),
1088
+ [
1089
+ ...elementCandidates(snapshot, "edge", edgeOwn, superseded, note),
1090
+ ...(styled === null ? [] : addedCandidates(snapshot.edges, styled.columns.edge)),
1091
+ ],
1045
1092
  edgeRows,
1046
1093
  note,
1047
1094
  );
@@ -1049,6 +1096,9 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
1049
1096
  const name = snapshot.meta.name ?? DEFAULT_NAME;
1050
1097
  const networkTable = planTable("network", networkCandidates(snapshot, name), 1, note);
1051
1098
  const rootTable: TableColumn[] = [{ name: "name", javaClass: STRING, cell: () => name }];
1099
+ const inlineBlock = styles === undefined ? null : writeStyleBlock(styles.rules, { inlineColumns: true, snapshot });
1100
+ const blockNotes =
1101
+ inlineBlock === null ? [] : styleBlockLosses(inlineBlock, styles?.rules.styles.rules.length ?? 0, "size");
1052
1102
  return {
1053
1103
  notes,
1054
1104
  fatal,
@@ -1067,9 +1117,91 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
1067
1117
  position,
1068
1118
  z: placed ? z : null,
1069
1119
  positionZ,
1120
+ styled,
1121
+ styleNotes: [...emitNotes.list().map(lossOf), ...blockNotes],
1122
+ block: styles === undefined ? snapshotBlock(snapshot) : inlineBlock,
1123
+ };
1124
+ }
1125
+
1126
+ /** The generic notes a session export reports itself: json per column, ids by the SUID rule (positive integers). */
1127
+ const SESSION_OWN_CODES: ReadonlySet<string> = new Set([LOSS.JSON, LOSS.ID_CHARSET, LOSS.ID_MANGLED]);
1128
+
1129
+ /**
1130
+ * MUTUAL_EXPANDED for the mutual pairs written as two directed edges.
1131
+ * @param mutualCount - how many mutual pairs
1132
+ * @param note - the recorder
1133
+ */
1134
+ function noteMutualPairs(mutualCount: number, note: NoteFn): void {
1135
+ if (mutualCount > 0) {
1136
+ note(
1137
+ LOSS.MUTUAL_EXPANDED,
1138
+ `${mutualCount} mutual pair${plural(mutualCount)} ${agree(mutualCount, "is", "are")} written as two directed edges; the mutual mark is lost`,
1139
+ null,
1140
+ mutualCount,
1141
+ );
1142
+ }
1143
+ }
1144
+
1145
+ /**
1146
+ * Whether a column holds any value.
1147
+ * @param column - the column, or null
1148
+ * @returns false for null or an empty column
1149
+ */
1150
+ function holdsValues(column: Column | null): boolean {
1151
+ return column !== null && column.nullCount < column.length;
1152
+ }
1153
+
1154
+ /**
1155
+ * Whether a column is the graphics an XGMML or session import kept.
1156
+ * @param c - the column
1157
+ * @returns true for kept graphics
1158
+ */
1159
+ function isKeptGraphics(c: Column): boolean {
1160
+ return (
1161
+ c.dtype === "json" && c.meta.origin?.type === "graphics" && c.meta.origin.namespace === XGMML_ORIGIN_NAMESPACE
1162
+ );
1163
+ }
1164
+
1165
+ /**
1166
+ * The node column of original ids, for ids written as SUIDs.
1167
+ * @param snapshot - the snapshot
1168
+ * @returns the candidate
1169
+ */
1170
+ function originalIdCandidate(snapshot: GraphSnapshot): Candidate {
1171
+ return {
1172
+ name: ORIGINAL_ID_ATTRIBUTE,
1173
+ source: null,
1174
+ javaClass: STRING,
1175
+ // every node carries its original, so an empty id ("") is told apart from an unset cell
1176
+ cell: (row) => String(snapshot.ids.idOf(row)),
1070
1177
  };
1071
1178
  }
1072
1179
 
1180
+ /**
1181
+ * The edge weight column, when the graph is weighted, and WEIGHT_KEY_CLASH for a plain column named weight.
1182
+ * @param snapshot - the snapshot
1183
+ * @param note - the recorder
1184
+ * @returns the candidates
1185
+ */
1186
+ function weightCandidates(snapshot: GraphSnapshot, note: NoteFn): Candidate[] {
1187
+ const weights: ExplicitWeights = explicitWeights(snapshot);
1188
+ const plainWeight = snapshot.edges.get("weight");
1189
+ if (plainWeight !== null && plainWeight.meta.role === null && !weights.weighted) {
1190
+ note(LOSS.WEIGHT_KEY_CLASH, `edge column "weight" reads back as the edge weight`, "weight", null);
1191
+ }
1192
+ if (!weights.weighted) {
1193
+ return [];
1194
+ }
1195
+ return [
1196
+ {
1197
+ name: "weight",
1198
+ source: null,
1199
+ javaClass: DOUBLE,
1200
+ cell: (e) => (weights.isExplicit(e) ? formatDecimal(weights.value(e)) : null),
1201
+ },
1202
+ ];
1203
+ }
1204
+
1073
1205
  /**
1074
1206
  * The notes of the position column: its shape, non-finite coordinates, and a z that reads back
1075
1207
  * in the z column.
@@ -1150,14 +1282,20 @@ function* cyTable(
1150
1282
  columns: readonly TableColumn[],
1151
1283
  rows: Iterable<readonly [number, number]>,
1152
1284
  ): Generator<string, void, undefined> {
1153
- const line = (cells: readonly string[]): string => `${cells.map((c) => quoteCsvCell(c)).join(",")}\n`;
1285
+ // null is an unquoted empty cell: no value, where `""` is the empty string
1286
+ const line = (cells: readonly (string | null)[]): string =>
1287
+ `${cells.map((c) => (c === null ? "" : quoteCsvCell(c))).join(",")}\n`;
1154
1288
  yield line(["CyCSV-Version", "1"]);
1155
1289
  yield line(["SUID", ...columns.map((c) => c.name)]);
1156
1290
  yield line([LONG, ...columns.map((c) => c.javaClass)]);
1157
1291
  yield line(["", ...columns.map(() => "mutable")]);
1158
1292
  yield line([title, ""]);
1159
1293
  for (const [suid, row] of rows) {
1160
- yield line([String(suid), ...columns.map((c) => c.cell(row) ?? "")]);
1294
+ // a graphty style column tells an element without a value from one whose value is the empty string
1295
+ yield line([
1296
+ String(suid),
1297
+ ...columns.map((c) => c.cell(row) ?? (c.name.startsWith(STYLE_COLUMN_PREFIX) ? null : "")),
1298
+ ]);
1161
1299
  }
1162
1300
  }
1163
1301
 
@@ -1202,18 +1340,50 @@ function* networkFile(snapshot: GraphSnapshot, p: Plan): Generator<string, void,
1202
1340
  * @returns nothing
1203
1341
  */
1204
1342
  function* viewFile(snapshot: GraphSnapshot, p: Plan, viewSuid: number): Generator<string, void, undefined> {
1343
+ const style = p.styled === null ? "default" : p.name;
1205
1344
  yield XML_DECLARATION;
1206
- yield `<graph id="${viewSuid}" label="${viewSuid}" cy:view="1" cy:networkId="${p.subSuid}" cy:visualStyle="default" cy:rendererId="org.cytoscape.ding" cy:documentVersion="3.0" ${NAMESPACES}>\n`;
1345
+ yield `<graph id="${viewSuid}" label="${viewSuid}" cy:view="1" cy:networkId="${p.subSuid}" cy:visualStyle="${escapeXmlAttribute(style)}" cy:rendererId="org.cytoscape.ding" cy:documentVersion="3.0" ${NAMESPACES}>\n`;
1207
1346
  let view = p.viewNodeBase;
1208
1347
  for (let i = 0; i < snapshot.nodeCount; i++) {
1209
1348
  const coords = viewCoords(p, i);
1210
- if (coords.length > 0) {
1211
- yield ` <node id="${view++}" cy:nodeId="${p.nodeSuids[i]}">\n <graphics ${coords.join(" ")}/>\n </node>\n`;
1349
+ const locked = p.styled?.bypasses.node[i] ?? null;
1350
+ if (coords.length > 0 || locked !== null) {
1351
+ yield ` <node id="${view++}" cy:nodeId="${p.nodeSuids[i]}">\n`;
1352
+ yield* viewGraphics(coords, locked);
1353
+ yield " </node>\n";
1354
+ }
1355
+ }
1356
+ for (let e = 0; e < snapshot.edgeCount; e++) {
1357
+ const locked = p.styled?.bypasses.edge[e] ?? null;
1358
+ if (locked !== null && !p.folding.folded(e)) {
1359
+ yield ` <edge id="${view++}" cy:edgeId="${p.edgeSuids[e]}">\n`;
1360
+ yield* viewGraphics([], locked);
1361
+ yield " </edge>\n";
1212
1362
  }
1213
1363
  }
1214
1364
  yield "</graph>\n";
1215
1365
  }
1216
1366
 
1367
+ /**
1368
+ * One view element's graphics: its coordinates, and its bypasses as `lockedVisualProperties`.
1369
+ * @param coords - the coordinate attributes
1370
+ * @param locked - the bypasses, or null
1371
+ * @yields the graphics element
1372
+ * @returns nothing
1373
+ */
1374
+ function* viewGraphics(coords: readonly string[], locked: ReadonlyMap<string, unknown> | null): Generator<string> {
1375
+ const head = coords.length === 0 ? " <graphics" : ` <graphics ${coords.join(" ")}`;
1376
+ if (locked === null) {
1377
+ yield `${head}/>\n`;
1378
+ return;
1379
+ }
1380
+ yield `${head}>\n <att name="lockedVisualProperties">\n`;
1381
+ for (const [vp, value] of locked) {
1382
+ yield ` <att name="${escapeXmlAttribute(vp)}" value="${escapeXmlAttribute(String(value))}" type="string" cy:type="String"/>\n`;
1383
+ }
1384
+ yield " </att>\n </graphics>\n";
1385
+ }
1386
+
1217
1387
  /**
1218
1388
  * The graphics attributes of one node's view: x and y (y down, as Cytoscape draws), and z.
1219
1389
  * @param p - the plan
@@ -1306,6 +1476,20 @@ function* entries(snapshot: GraphSnapshot, p: Plan): Generator<ZipWriteEntry, vo
1306
1476
  data: encode(viewFile(snapshot, p, p.viewSuid)),
1307
1477
  };
1308
1478
  }
1479
+ if (p.styled !== null) {
1480
+ yield {
1481
+ name: `${ROOT_FOLDER}session_vizmap.xml`,
1482
+ data: encode([
1483
+ XML_DECLARATION,
1484
+ '<vizmap documentVersion="3.0" id="VizMap-graphty">\n',
1485
+ cytoscapeVizmapXml(p.styled.style, p.name),
1486
+ "\n</vizmap>\n",
1487
+ ]),
1488
+ };
1489
+ }
1490
+ if (p.block !== null) {
1491
+ yield { name: `${ROOT_FOLDER}${STYLE_BLOCK_NAME}`, data: new TextEncoder().encode(p.block) };
1492
+ }
1309
1493
  }
1310
1494
 
1311
1495
  /**
@@ -1317,9 +1501,9 @@ function* entries(snapshot: GraphSnapshot, p: Plan): Generator<ZipWriteEntry, vo
1317
1501
  */
1318
1502
  async function* write(
1319
1503
  snapshot: GraphSnapshot,
1320
- options: CysExportOptions | undefined,
1504
+ options: (CysExportOptions & ExporterStyleOptions) | undefined,
1321
1505
  ): AsyncGenerator<Uint8Array, void, undefined> {
1322
- const p = plan(snapshot, resolveExportOptions(options));
1506
+ const p = plan(snapshot, resolveExportOptions(options), options?.styles);
1323
1507
  await Promise.resolve();
1324
1508
  yield* writeZip(entries(snapshot, p));
1325
1509
  }
@@ -1332,6 +1516,7 @@ export const cysExporter: GraphExporter<CysExportOptions> = Object.freeze({
1332
1516
  format: FORMAT,
1333
1517
  options: Object.freeze([]),
1334
1518
  capabilities: CYS_CAPABILITIES,
1519
+ styles: Object.freeze({ capabilities: CYS_STYLE_CAPABILITIES }),
1335
1520
 
1336
1521
  /**
1337
1522
  * Pre-flight: what export() would lose, without writing anything.
@@ -1339,8 +1524,9 @@ export const cysExporter: GraphExporter<CysExportOptions> = Object.freeze({
1339
1524
  * @param options - the common options
1340
1525
  * @returns the notes, empty when the export is exact
1341
1526
  */
1342
- check(snapshot: GraphSnapshot, options?: CysExportOptions): readonly LossNote[] {
1343
- return Object.freeze([...plan(snapshot, resolveExportOptions(options)).notes]);
1527
+ check(snapshot: GraphSnapshot, options?: CysExportOptions & ExporterStyleOptions): readonly LossNote[] {
1528
+ const p = plan(snapshot, resolveExportOptions(options), options?.styles);
1529
+ return Object.freeze([...p.notes, ...p.styleNotes]);
1344
1530
  },
1345
1531
 
1346
1532
  /**