@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,14 +13,15 @@
13
13
  * shows), in a label column named `name`, and ids an exporter mangled are restored from the node
14
14
  * table's `graphty:originalId` (restoreMangledIds). 2.x: one full XGMML file per network, with
15
15
  * selection and hidden state from `cysession.xml`. Everything is resolved by the XGMML emitter, so
16
- * both readers share every column rule. Styles are not read (issue #706): W_STYLES_NOT_IMPORTED.
16
+ * both readers share every column rule. Asked for styles, the importer reads the style the imported view names
17
+ * from `session_vizmap.xml` (styles.ts), kept for it through the report; otherwise W_STYLES_NOT_IMPORTED.
17
18
  */
18
19
 
19
20
  import { GraphFormatError, type GraphSink, INVALID_INDEX } from "@graphty/graph-format";
20
21
 
21
22
  import { declareResolved } from "../../common/attributes.js";
22
23
  import { IdCoercer } from "../../common/ids.js";
23
- import { decodeEntryName, throwIfAborted } from "../../common/input.js";
24
+ import { decodeEntryName, readText, throwIfAborted } from "../../common/input.js";
24
25
  import {
25
26
  chooseGraph,
26
27
  graphChosen,
@@ -33,6 +34,7 @@ import {
33
34
  import { agree, elementCount, plural } from "../../common/plural.js";
34
35
  import { ImportReportBuilder } from "../../common/report.js";
35
36
  import { startsLikeZip } from "../../common/zip.js";
37
+ import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
36
38
  import {
37
39
  type CommonImportOptions,
38
40
  type GraphChoiceOptions,
@@ -88,6 +90,7 @@ import {
88
90
  urlDecode,
89
91
  type XmlNode,
90
92
  } from "./session.js";
93
+ import { readSessionStyles, type SessionStyleSource } from "./styles.js";
91
94
  import { cellAtt, type CyTable, readCyTable, type VirtualColumn, virtualColumnsOf } from "./tables.js";
92
95
 
93
96
  /**
@@ -469,8 +472,9 @@ function registeredGraphs(parsed: Parsed): GraphRec[] {
469
472
  * @param choice - the subnetwork
470
473
  * @param sink - the sink
471
474
  * @param parsed - its network file, parsed for this import (its records are filled in)
475
+ * @returns the style its view names, or null
472
476
  */
473
- async function import3(prepared: Prepared, choice: Choice3, sink: GraphSink, parsed: Parsed): Promise<void> {
477
+ async function import3(prepared: Prepared, choice: Choice3, sink: GraphSink, parsed: Parsed): Promise<string | null> {
474
478
  const { graph } = choice;
475
479
  const members = membersOf(parsed.doc, graph);
476
480
  const nodes = byId(members.nodes);
@@ -478,7 +482,7 @@ async function import3(prepared: Prepared, choice: Choice3, sink: GraphSink, par
478
482
  // the records are shared by every network of the file: what this import adds is undone after
479
483
  const restore = saveRecords(graph, nodes, edges);
480
484
  try {
481
- await fill3(prepared, choice, sink, parsed, nodes, edges);
485
+ return await fill3(prepared, choice, sink, parsed, nodes, edges);
482
486
  } finally {
483
487
  restore();
484
488
  }
@@ -530,6 +534,7 @@ function saveRecords(
530
534
  * @param parsed - its network file
531
535
  * @param nodes - its node records by id
532
536
  * @param edges - its edge records by id
537
+ * @returns the style its view names, or null
533
538
  */
534
539
  async function fill3(
535
540
  prepared: Prepared,
@@ -538,7 +543,7 @@ async function fill3(
538
543
  parsed: Parsed,
539
544
  nodes: ReadonlyMap<string, NodeRec>,
540
545
  edges: ReadonlyMap<string, EdgeRec>,
541
- ): Promise<void> {
546
+ ): Promise<string | null> {
542
547
  const { report, inner } = prepared;
543
548
  const { doc, dialect } = parsed;
544
549
  const { graph } = choice;
@@ -553,6 +558,12 @@ async function fill3(
553
558
  }
554
559
  const restoredIds = inner.restoreMangledIds ? restoreIds(members.nodes) : new Map<string, string>();
555
560
  const { visualStyle, extraViews, extraIds } = await readViews(prepared, choice, nodes, edges);
561
+ const block =
562
+ prepared.session.layout.block === null ? null : await entryText(prepared, prepared.session.layout.block);
563
+ if (block !== null) {
564
+ // the graphty.styles block of a session graphty wrote: a graph attribute, as in every other format
565
+ graph.atts.push(textAtt(STYLE_BLOCK_NAME, block));
566
+ }
556
567
  const cyMeta = sessionMeta(prepared, {
557
568
  collection: doc.root.label ?? choice.network.title,
558
569
  network: choice.graphId,
@@ -586,6 +597,7 @@ async function fill3(
586
597
  }
587
598
  reportRootOnly(parsed, report, choice.network.name);
588
599
  writeViewPositions(sink, extraViews, extraIds, report, prepared.inner, restoredIds);
600
+ return visualStyle;
589
601
  }
590
602
 
591
603
  /**
@@ -749,7 +761,8 @@ function rowAtts(
749
761
  const line = table.lines.get(key) ?? 0;
750
762
  const out: AttRec[] = [];
751
763
  for (let i = 1; i < table.columns.length && i < cells.length; i++) {
752
- pushAtt(out, cellAtt(table.columns[i], cells[i], line, namespace, hidden));
764
+ const quoted = table.quotedEmpty?.get(key)?.has(i) === true;
765
+ pushAtt(out, cellAtt(table.columns[i], cells[i], line, namespace, hidden, quoted));
753
766
  }
754
767
  return out;
755
768
  }
@@ -1305,8 +1318,9 @@ function sessionRecord(report: ImportReportBuilder, entry: string, message: stri
1305
1318
  * @param prepared - the prepared import
1306
1319
  * @param choice - the network
1307
1320
  * @param sink - the sink
1321
+ * @returns the style the network uses, or null
1308
1322
  */
1309
- async function import2(prepared: Prepared, choice: Choice2, sink: GraphSink): Promise<void> {
1323
+ async function import2(prepared: Prepared, choice: Choice2, sink: GraphSink): Promise<string | null> {
1310
1324
  const { report, inner, session } = prepared;
1311
1325
  const { doc, dialect } = await parseEntry(session, choice.file, report, inner);
1312
1326
  let unmatched = 0;
@@ -1343,6 +1357,7 @@ async function import2(prepared: Prepared, choice: Choice2, sink: GraphSink): Pr
1343
1357
  };
1344
1358
  const settings: XgmmlSettings = { labelAliases: true, cytoscapeEscapes: true, zAs: prepared.zAs };
1345
1359
  new XgmmlEmitter(doc, dialect, sink, report, inner, settings, extras).emit(null);
1360
+ return cyMeta.visualStyle;
1346
1361
  }
1347
1362
 
1348
1363
  /**
@@ -1466,16 +1481,116 @@ function sessionMeta(
1466
1481
  */
1467
1482
  async function importChoice(prepared: Prepared, index: number, sink: GraphSink): Promise<ImportReport> {
1468
1483
  const choice = prepared.choices[index];
1484
+ let visualStyle: string | null;
1469
1485
  if (choice.era === "3") {
1470
1486
  const parsed = prepared.docs.get(choice.network.name) as Parsed;
1471
- await import3(prepared, choice, sink, parsed);
1487
+ visualStyle = await import3(prepared, choice, sink, parsed);
1472
1488
  } else {
1473
- await import2(prepared, choice, sink);
1489
+ visualStyle = await import2(prepared, choice, sink);
1474
1490
  }
1491
+ await keepStyleSource(prepared, index, visualStyle);
1475
1492
  throwIfAborted(prepared.common.signal);
1476
1493
  return prepared.report.finish();
1477
1494
  }
1478
1495
 
1496
+ /**
1497
+ * Keep what the session's style reader needs (`styles()` gets it back as `context.kept`): the parsed
1498
+ * `session_vizmap.xml` of a 3.x session, the style the imported view names, and which network was imported.
1499
+ * Reading the styles never fails the import: a damaged entry is kept as the reason it cannot be read.
1500
+ * @param prepared - the prepared import
1501
+ * @param index - the network imported
1502
+ * @param visualStyle - the style its view names, or null
1503
+ */
1504
+ async function keepStyleSource(prepared: Prepared, index: number, visualStyle: string | null): Promise<void> {
1505
+ const { layout } = prepared.session;
1506
+ const entry = layout.styles.find((e) => e.path.endsWith("session_vizmap.xml"));
1507
+ let vizmap: XmlNode | null = null;
1508
+ let problem: string | null = null;
1509
+ if (layout.era === "3" && entry !== undefined) {
1510
+ const bytes = await entryBytes(prepared, entry);
1511
+ const tree =
1512
+ typeof bytes === "string"
1513
+ ? bytes
1514
+ : await parseXmlTree(bytes, entry.name, new ImportReportBuilder(FORMAT, 0), prepared.inner);
1515
+ if (typeof tree === "string") {
1516
+ problem = tree;
1517
+ } else {
1518
+ vizmap = tree;
1519
+ }
1520
+ }
1521
+ const source: SessionStyleSource = {
1522
+ era: layout.era,
1523
+ vizmap,
1524
+ problem,
1525
+ visualStyle,
1526
+ network: { index, name: prepared.choices[index].name },
1527
+ };
1528
+ prepared.report.keepForStyles(source);
1529
+ }
1530
+
1531
+ /**
1532
+ * An entry's bytes for the styles, read outside the import's report: a damaged entry is the reason, never a failure.
1533
+ * @param prepared - the prepared import
1534
+ * @param entry - the entry
1535
+ * @returns the bytes, or why they cannot be read
1536
+ */
1537
+ async function entryBytes(prepared: Prepared, entry: SessionEntry): Promise<Uint8Array | string> {
1538
+ try {
1539
+ return await prepared.session.read(entry, new ImportReportBuilder(FORMAT, 0));
1540
+ } catch (err) {
1541
+ if (err instanceof ImportError) {
1542
+ return err.message;
1543
+ }
1544
+ throw err;
1545
+ }
1546
+ }
1547
+
1548
+ /**
1549
+ * An entry's text for the styles, or null when it cannot be read.
1550
+ * @param prepared - the prepared import
1551
+ * @param entry - the entry
1552
+ * @returns the text, or null
1553
+ */
1554
+ async function entryText(prepared: Prepared, entry: SessionEntry): Promise<string | null> {
1555
+ const bytes = await entryBytes(prepared, entry);
1556
+ if (typeof bytes === "string") {
1557
+ return null;
1558
+ }
1559
+ try {
1560
+ return await readText(bytes, new ImportReportBuilder(FORMAT, 0), { signal: prepared.common.signal });
1561
+ } catch (err) {
1562
+ if (err instanceof ImportError) {
1563
+ return null;
1564
+ }
1565
+ throw err;
1566
+ }
1567
+ }
1568
+
1569
+ /**
1570
+ * A text att of the network.
1571
+ * @param name - its name
1572
+ * @param value - its text
1573
+ * @returns the att
1574
+ */
1575
+ function textAtt(name: string, value: string): AttRec {
1576
+ return {
1577
+ name,
1578
+ type: "string",
1579
+ cyType: "String",
1580
+ elementType: null,
1581
+ value,
1582
+ hidden: false,
1583
+ equation: false,
1584
+ children: [],
1585
+ extra: {},
1586
+ xml: null,
1587
+ hasGraph: false,
1588
+ text: "",
1589
+ line: 0,
1590
+ namespace: null,
1591
+ };
1592
+ }
1593
+
1479
1594
  /**
1480
1595
  * Import one network of a session.
1481
1596
  * @param input - the session bytes
@@ -1599,4 +1714,5 @@ export const cysImporter: GraphImporter<CysImportOptions> = Object.freeze({
1599
1714
  import: importCys,
1600
1715
  importAll: importAllCys,
1601
1716
  listGraphs: listCysGraphs,
1717
+ styles: readSessionStyles,
1602
1718
  });
@@ -12,6 +12,7 @@ import { plural } from "../../common/plural.js";
12
12
  import { ImportReportBuilder } from "../../common/report.js";
13
13
  import { tokenizeXml, xmlDeclaredEncoding, XmlSyntaxError } from "../../common/xml.js";
14
14
  import { readZipDirectory, readZipEntry, type ZipEntry, ZipError } from "../../common/zip.js";
15
+ import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
15
16
  import { ImportError, type ImportInput } from "../../types.js";
16
17
  import { CYS_ISSUE, FORMAT, MAX_RATIO } from "./constants.js";
17
18
 
@@ -83,6 +84,8 @@ interface SessionLayout {
83
84
  readonly files: ReadonlyMap<string, SessionEntry>;
84
85
  /** The style entries (`session_vizmap.xml`, `session_vizmap.props`). */
85
86
  readonly styles: readonly SessionEntry[];
87
+ /** 3.x: the `graphty.styles` entry a session graphty wrote holds, if present. */
88
+ readonly block: SessionEntry | null;
86
89
  /** Every entry the importer does not read. */
87
90
  readonly skipped: readonly string[];
88
91
  }
@@ -321,6 +324,7 @@ function layoutOf(zipEntries: readonly ZipEntry[], report: ImportReportBuilder):
321
324
  cysession: null as SessionEntry | null,
322
325
  files: new Map<string, SessionEntry>(),
323
326
  styles: [] as SessionEntry[],
327
+ block: null as SessionEntry | null,
324
328
  skipped: [] as string[],
325
329
  };
326
330
  for (const [name, zip] of byName) {
@@ -379,6 +383,8 @@ function classify3(entry: SessionEntry, layout: Mutable): void {
379
383
  layout.networkList = entry;
380
384
  } else if (/(^|\/)session_vizmap\.(xml|props)$/.test(path)) {
381
385
  layout.styles.push(entry);
386
+ } else if (path === STYLE_BLOCK_NAME) {
387
+ layout.block = entry;
382
388
  } else {
383
389
  layout.skipped.push(entry.name);
384
390
  }
@@ -0,0 +1,254 @@
1
+ /**
2
+ * The styles of a Cytoscape session. A 3.x session keeps its named visual styles in `session_vizmap.xml` and each
3
+ * view names the one it uses (`cy:visualStyle`); the view's elements carry only their bypasses
4
+ * (`lockedVisualProperties`). The import reads the style the imported network's view names, resolved the way
5
+ * Cytoscape draws it (bypass over mapping over default), with Cytoscape's renderer fallbacks for what the style
6
+ * leaves unset. A 2.x session's network files carry every element's resolved values, read like XGMML, and its
7
+ * hidden elements come back invisible. The writer emits the graph's styles as a named style, bypasses and columns.
8
+ */
9
+
10
+ import type { GraphSnapshot } from "@graphty/graph-format";
11
+
12
+ import { STYLE_ISSUE } from "../../styles/codes.js";
13
+ import {
14
+ type CytoscapeMapping,
15
+ type CytoscapeStyle,
16
+ emptyCytoscapeStyle,
17
+ typedKey,
18
+ } from "../../styles/cytoscape/mappings.js";
19
+ import { cytoscapeBackground, type CytoscapeElements, resolveCytoscape } from "../../styles/cytoscape/resolve.js";
20
+ import { cytoscapeRules } from "../../styles/cytoscape/translate.js";
21
+ import { StyleNotes } from "../../styles/notes.js";
22
+ import { dataCell } from "../../styles/plan/resolve.js";
23
+ import type { ImporterStyles, ReaderOutput, StyleReadContext, StyleTarget } from "../../styles/types.js";
24
+ import { exactFromBlock, graphicsBypasses, hiddenToVisible, nonEmpty, readXgmmlStyles } from "../xgmml/styles.js";
25
+ import { HIDDEN_COLUMN } from "./constants.js";
26
+ import type { XmlNode } from "./session.js";
27
+
28
+ /**
29
+ * What a session import keeps for its styles (through `report.keepForStyles()`): the era, the parsed
30
+ * `session_vizmap.xml`, the style the imported network's view names, and which network was imported.
31
+ */
32
+ export interface SessionStyleSource {
33
+ /** "3" for a 3.x session, "2" for a 2.x one. */
34
+ readonly era: "2" | "3";
35
+ /** The root element of `session_vizmap.xml`, or null when the session has none or it cannot be read. */
36
+ readonly vizmap: XmlNode | null;
37
+ /** Why `session_vizmap.xml` could not be read, or null. */
38
+ readonly problem: string | null;
39
+ /** The style the imported view names, or null. */
40
+ readonly visualStyle: string | null;
41
+ /** The network the import read: its index among the session's networks, and its name. */
42
+ readonly network: { readonly index: number; readonly name: string | null };
43
+ }
44
+
45
+ /**
46
+ * The styles of an imported session network.
47
+ * @param snapshot - the network
48
+ * @param context - what the import kept, the budget and the cancel signal
49
+ * @returns the styles
50
+ */
51
+ export function readSessionStyles(snapshot: GraphSnapshot, context: StyleReadContext): ImporterStyles {
52
+ const kept = context.kept as SessionStyleSource | undefined;
53
+ if (kept?.era === "2") {
54
+ return readXgmmlStyles(snapshot, context, { tool: "cytoscape-fallbacks", hiddenColumn: HIDDEN_COLUMN });
55
+ }
56
+ const notes = new StyleNotes();
57
+ const style = sessionStyle(kept, notes);
58
+ const out: Record<StyleTarget, ReaderOutput> = { node: { values: {} }, edge: { values: {} } };
59
+ for (const target of ["node", "edge"] as const) {
60
+ context.signal?.throwIfAborted();
61
+ out[target] = sessionTargetStyles(snapshot, target, style, { notes, budget: context.budget });
62
+ }
63
+ const background = cytoscapeBackground(style, notes);
64
+ return {
65
+ canonical: true,
66
+ dialect: "cytoscape",
67
+ tool: "cytoscape-fallbacks",
68
+ units: "px",
69
+ node: out.node,
70
+ edge: out.edge,
71
+ graph: background === null ? {} : { background },
72
+ notes: notes.list(),
73
+ };
74
+ }
75
+
76
+ /**
77
+ * The Cytoscape style of a session: its vizmap's, or an empty one with a note saying why there is none.
78
+ * @param kept - what the import kept
79
+ * @param notes - where problems are noted
80
+ * @returns the style
81
+ */
82
+ function sessionStyle(kept: SessionStyleSource | undefined, notes: StyleNotes): CytoscapeStyle {
83
+ if (kept?.vizmap === null || kept?.vizmap === undefined) {
84
+ const problem = kept?.problem ?? null;
85
+ notes.add(problem === null ? STYLE_ISSUE.NO_VIZMAP : STYLE_ISSUE.UNREADABLE, null, "session_vizmap.xml", {
86
+ sample: problem ?? "absent",
87
+ });
88
+ return emptyCytoscapeStyle();
89
+ }
90
+ return cytoscapeStyleFromVizmap(kept.vizmap, kept.visualStyle, notes);
91
+ }
92
+
93
+ /**
94
+ * The styles of a session's nodes or edges.
95
+ * @param snapshot - the network
96
+ * @param target - nodes or edges
97
+ * @param style - the session's style
98
+ * @param work - where problems are noted, and the work budget
99
+ * @param work.notes - where problems are noted
100
+ * @param work.budget - the work budget
101
+ * @returns the reader output for the target
102
+ */
103
+ function sessionTargetStyles(
104
+ snapshot: GraphSnapshot,
105
+ target: StyleTarget,
106
+ style: CytoscapeStyle,
107
+ work: { readonly notes: StyleNotes; readonly budget: StyleReadContext["budget"] },
108
+ ): ReaderOutput {
109
+ const { notes } = work;
110
+ const table = target === "node" ? snapshot.nodes : snapshot.edges;
111
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
112
+ for (const m of style[target].mappings.values()) {
113
+ if (!table.has(m.column)) {
114
+ notes.add(STYLE_ISSUE.MAPPING_COLUMN_MISSING, target, m.column, { sample: m.kind });
115
+ }
116
+ }
117
+ const elements: CytoscapeElements = {
118
+ count: n,
119
+ value: (column, i) => (table.has(column) ? dataCell(table, column, i) : null),
120
+ bypasses: graphicsBypasses(table, target, n, notes),
121
+ };
122
+ const values = resolveCytoscape(target, style, elements, work);
123
+ hiddenToVisible(table, HIDDEN_COLUMN, n, values);
124
+ // a session graphty wrote: a value its style writes as the nearest Cytoscape value is the block's
125
+ exactFromBlock(snapshot, target, values);
126
+ const { rules, columns } = cytoscapeRules(target, style, elements, work);
127
+ return { values: nonEmpty(values), rules, columns };
128
+ }
129
+
130
+ /**
131
+ * One named style of a `session_vizmap.xml` as a Cytoscape style: the one named `name`, else the first with a
132
+ * `W_STYLE_VIEW_STYLE_MISSING` note; the other styles are noted as `W_STYLE_OTHER_STYLES`.
133
+ * @param root - the `<vizmap>` element
134
+ * @param name - the style the view names, or null
135
+ * @param notes - where problems are noted
136
+ * @returns the style
137
+ */
138
+ function cytoscapeStyleFromVizmap(root: XmlNode, name: string | null, notes: StyleNotes): CytoscapeStyle {
139
+ const style = emptyCytoscapeStyle();
140
+ const styles = root.children.filter((c) => c.name === "visualStyle");
141
+ let chosen = styles.find((s) => s.attrs.get("name") === name);
142
+ if (chosen === undefined) {
143
+ chosen = styles.at(0);
144
+ if (chosen === undefined) {
145
+ notes.add(STYLE_ISSUE.NO_VIZMAP, null, "visualStyle", { sample: "no visualStyle" });
146
+ return style;
147
+ }
148
+ notes.add(STYLE_ISSUE.VIEW_STYLE_MISSING, null, "visualStyle", { sample: String(name) });
149
+ }
150
+ if (styles.length > 1) {
151
+ notes.add(STYLE_ISSUE.OTHER_STYLES, null, "visualStyle", {
152
+ sample: `${styles.length - 1} unused`,
153
+ count: styles.length - 1,
154
+ });
155
+ }
156
+ for (const kind of ["network", "node", "edge"] as const) {
157
+ const section = chosen.children.find((c) => c.name === kind);
158
+ for (const child of section?.children ?? []) {
159
+ readVizmapEntry(style, kind, child);
160
+ }
161
+ }
162
+ return style;
163
+ }
164
+
165
+ /**
166
+ * One dependency or visual property of a vizmap style section, into the style.
167
+ * @param style - the style being read
168
+ * @param kind - the section
169
+ * @param child - the entry
170
+ */
171
+ function readVizmapEntry(style: CytoscapeStyle, kind: "network" | "node" | "edge", child: XmlNode): void {
172
+ const childName = child.attrs.get("name");
173
+ if (childName === undefined) {
174
+ return;
175
+ }
176
+ if (child.name === "dependency" && kind !== "network") {
177
+ style[kind].dependencies.set(childName, child.attrs.get("value")?.trim().toLowerCase() === "true");
178
+ return;
179
+ }
180
+ if (child.name !== "visualProperty") {
181
+ return;
182
+ }
183
+ const d = child.attrs.get("default");
184
+ if (d !== undefined) {
185
+ style[kind].defaults.set(childName, d);
186
+ }
187
+ if (kind !== "network") {
188
+ const mapping = vizmapMapping(child);
189
+ if (mapping !== null) {
190
+ style[kind].mappings.set(childName, mapping);
191
+ }
192
+ }
193
+ }
194
+
195
+ /**
196
+ * The mapping of one `<visualProperty>`: a passthrough, discrete or continuous mapping element.
197
+ * @param vp - the element
198
+ * @returns the mapping, or null
199
+ */
200
+ function vizmapMapping(vp: XmlNode): CytoscapeMapping | null {
201
+ for (const m of vp.children) {
202
+ const column = m.attrs.get("attributeName");
203
+ if (column === undefined) {
204
+ continue;
205
+ }
206
+ const type = m.attrs.get("attributeType") ?? null;
207
+ if (m.name === "passthroughMapping") {
208
+ return { kind: "passthrough", column, type };
209
+ }
210
+ if (m.name === "discreteMapping") {
211
+ return { kind: "discrete", column, type, table: discreteTable(m, type) };
212
+ }
213
+ if (m.name === "continuousMapping") {
214
+ return { kind: "continuous", column, type, points: continuousPoints(m) };
215
+ }
216
+ }
217
+ return null;
218
+ }
219
+
220
+ /**
221
+ * The entries of a `<discreteMapping>`.
222
+ * @param m - the element
223
+ * @param type - the attribute type its keys are read as
224
+ * @returns the key and value of each entry
225
+ */
226
+ function discreteTable(m: XmlNode, type: string | null): [string | number | boolean, unknown][] {
227
+ const table: [string | number | boolean, unknown][] = [];
228
+ for (const e of m.children) {
229
+ const key = typedKey(e.attrs.get("attributeValue"), type);
230
+ const value = e.attrs.get("value");
231
+ if (e.name === "discreteMappingEntry" && key !== null && value !== undefined) {
232
+ table.push([key, value]);
233
+ }
234
+ }
235
+ return table;
236
+ }
237
+
238
+ /**
239
+ * The points of a `<continuousMapping>`.
240
+ * @param m - the element
241
+ * @returns the points with a finite position
242
+ */
243
+ function continuousPoints(
244
+ m: XmlNode,
245
+ ): { at: number; below: string | undefined; value: string | undefined; above: string | undefined }[] {
246
+ return m.children
247
+ .filter((p) => p.name === "continuousMappingPoint" && Number.isFinite(Number(p.attrs.get("attrValue"))))
248
+ .map((p) => ({
249
+ at: Number(p.attrs.get("attrValue")),
250
+ below: p.attrs.get("lesserValue"),
251
+ value: p.attrs.get("equalValue"),
252
+ above: p.attrs.get("greaterValue"),
253
+ }));
254
+ }