@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
@@ -0,0 +1,225 @@
1
+ /**
2
+ * The styles of CX version 1 and CX2 files. Both hold one Cytoscape visual style (defaults, mappings and
3
+ * dependencies) and per-element bypasses. The readers resolve every element the way Cytoscape draws it (bypass over
4
+ * mapping over default) and translate the style into neutral rules, with Cytoscape desktop's default style beneath
5
+ * (Cytoscape starts every imported CX or CX2 style as a copy of it). The writers do the reverse: neutral rules
6
+ * become Cytoscape defaults and mappings, everything else per-element bypasses, so Cytoscape draws what graphty
7
+ * draws; the `graphty.styles` block is an aspect of its own and the style values its rules read are attributes.
8
+ */
9
+ import { STYLE_ISSUE } from "../../styles/codes.js";
10
+ import { cytoscapeWritableProperties, emitCytoscapeStyle, } from "../../styles/cytoscape/emit.js";
11
+ import { cytoscapeStyleFromCx } from "../../styles/cytoscape/mappings.js";
12
+ import { cytoscapeBackground, resolveCytoscape, } from "../../styles/cytoscape/resolve.js";
13
+ import { cytoscapeRules } from "../../styles/cytoscape/translate.js";
14
+ import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
15
+ import { StyleNotes } from "../../styles/notes.js";
16
+ import { plainCell } from "../../styles/plan/resolve.js";
17
+ import { exactFromBlock, nonEmpty } from "../xgmml/styles.js";
18
+ /**
19
+ * The block text of a `graphty.styles` aspect (`[{ "block": "<json>" }]`, the aspect a CX or CX2 file graphty wrote
20
+ * keeps its block in), or null when it holds none.
21
+ * @param elements - the aspect's elements
22
+ * @returns the text
23
+ */
24
+ export function blockOfAspect(elements) {
25
+ const first = elements?.[0];
26
+ if (first === null || typeof first !== "object" || !Object.hasOwn(first, "block")) {
27
+ return null;
28
+ }
29
+ const text = first.block;
30
+ return typeof text === "string" ? text : null;
31
+ }
32
+ /**
33
+ * The `graphty.styles` aspect's elements for a block.
34
+ * @param block - the block's text
35
+ * @returns the elements
36
+ */
37
+ export function blockAspect(block) {
38
+ return [{ block }];
39
+ }
40
+ /**
41
+ * The `graphty.styles` block a snapshot carries as a graph attribute (an import of a file graphty wrote, or the one
42
+ * graph-io adds for a styled export), or null.
43
+ * @param snapshot - the graph
44
+ * @returns the block's text
45
+ */
46
+ export function snapshotBlock(snapshot) {
47
+ const column = snapshot.graph.get(STYLE_BLOCK_NAME);
48
+ const value = column?.isSet(0) ? column.value(0) : null;
49
+ return typeof value === "string" ? value : null;
50
+ }
51
+ /**
52
+ * Each element's bypasses: the columns of an importer's bypass namespace, keyed by the visual property's own name.
53
+ * @param table - the node or edge table
54
+ * @param n - the element count
55
+ * @param namespace - the bypass namespace
56
+ * @returns per element, its bypasses, and the bypass columns' names
57
+ */
58
+ function bypassesOf(table, n, namespace) {
59
+ const columns = [...table].filter((c) => c.meta.origin?.namespace === namespace);
60
+ const maps = new Array(n).fill(null);
61
+ for (let i = 0; i < n; i++) {
62
+ let m = null;
63
+ for (const c of columns) {
64
+ const v = plainCell(c.isSet(i) ? c.value(i) : null);
65
+ if (v !== null) {
66
+ m ?? (m = new Map());
67
+ const id = c.meta.origin?.id;
68
+ m.set(typeof id === "string" && id.length > 0 ? id : c.meta.name, v);
69
+ }
70
+ }
71
+ maps[i] = m;
72
+ }
73
+ return { maps, names: columns.map((c) => c.meta.name) };
74
+ }
75
+ /**
76
+ * The styles of a graph from its Cytoscape style and its bypass columns.
77
+ * @param snapshot - the graph
78
+ * @param context - the budget and cancel signal
79
+ * @param style - the file's style
80
+ * @param namespace - the importer's bypass namespace
81
+ * @param notes - where problems are noted
82
+ * @param dialect - the Cytoscape dialect the file is written in
83
+ * @returns the styles
84
+ */
85
+ export function readDeclaredStyles(snapshot, context, style, namespace, notes, dialect = "desktop") {
86
+ const out = { node: { values: {} }, edge: { values: {} } };
87
+ const readFrom = { node: [], edge: [] };
88
+ for (const target of ["node", "edge"]) {
89
+ context.signal?.throwIfAborted();
90
+ const table = target === "node" ? snapshot.nodes : snapshot.edges;
91
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
92
+ for (const m of style[target].mappings.values()) {
93
+ if (!table.has(m.column)) {
94
+ notes.add(STYLE_ISSUE.MAPPING_COLUMN_MISSING, target, m.column, { sample: m.kind });
95
+ }
96
+ }
97
+ const { maps, names } = bypassesOf(table, n, namespace);
98
+ readFrom[target] = names;
99
+ const elements = {
100
+ count: n,
101
+ value: (column, i) => (table.has(column) ? plainCell(table.value(column, i)) : null),
102
+ bypasses: maps,
103
+ };
104
+ const values = resolveCytoscape(target, style, elements, { notes, budget: context.budget });
105
+ // a file graphty wrote: a value its style writes as the nearest Cytoscape value is the block's
106
+ exactFromBlock(snapshot, target, values, dialect);
107
+ const { rules, columns } = cytoscapeRules(target, style, elements, { notes, budget: context.budget });
108
+ out[target] = { values: nonEmpty(values), rules, columns };
109
+ }
110
+ const background = cytoscapeBackground(style, notes);
111
+ return {
112
+ canonical: true,
113
+ dialect: "cytoscape",
114
+ tool: "cytoscape",
115
+ units: "px",
116
+ node: out.node,
117
+ edge: out.edge,
118
+ graph: background === null ? {} : { background },
119
+ notes: notes.list(),
120
+ readFrom,
121
+ };
122
+ }
123
+ /**
124
+ * The styles of an imported CX version 1 network: the first view's `cyVisualProperties` (other views noted and
125
+ * skipped), its bypasses, and Cytoscape desktop's default style beneath.
126
+ * @param snapshot - the network
127
+ * @param context - what the import kept, the budget and the cancel signal
128
+ * @returns the styles
129
+ */
130
+ export function readCxStyles(snapshot, context) {
131
+ const notes = new StyleNotes();
132
+ const kept = context.kept;
133
+ const style = cytoscapeStyleFromCx(kept?.entries ?? [], notes);
134
+ const otherViews = kept?.otherViews ?? 0;
135
+ if (otherViews > 0) {
136
+ notes.add(STYLE_ISSUE.OTHER_VIEWS, null, "cyVisualProperties", {
137
+ sample: `${otherViews} more`,
138
+ count: otherViews,
139
+ });
140
+ }
141
+ return readDeclaredStyles(snapshot, context, style, "cx.bypass", notes);
142
+ }
143
+ /**
144
+ * The neutral properties a Cytoscape dialect writes, and the graph's background, as writer capabilities.
145
+ * @param dialect - the dialect
146
+ * @returns the capabilities
147
+ */
148
+ export function cytoscapeWriteCapabilities(dialect) {
149
+ return Object.freeze({
150
+ node: Object.freeze(cytoscapeWritableProperties("node", dialect)),
151
+ edge: Object.freeze(cytoscapeWritableProperties("edge", dialect)),
152
+ graph: Object.freeze(["background"]),
153
+ // graph-io adds the block as a graph attribute (the writer moves it into an aspect of its own) and the style
154
+ // values the rules read as element attributes
155
+ block: "attributes",
156
+ });
157
+ }
158
+ /** What the CX version 1 writer holds of a graph's styles. */
159
+ export const CX_STYLE_CAPABILITIES = cytoscapeWriteCapabilities("desktop");
160
+ /**
161
+ * The dtype a column of written style values gets: numbers, booleans or text (a mixed column as text).
162
+ * @param col - the values
163
+ * @returns the dtype
164
+ */
165
+ function valuesDtype(col) {
166
+ const kinds = new Set(col.filter((v) => v !== null).map((v) => typeof v));
167
+ if (kinds.size === 1 && kinds.has("number")) {
168
+ return "f64";
169
+ }
170
+ return kinds.size === 1 && kinds.has("boolean") ? "bool" : "string";
171
+ }
172
+ /**
173
+ * A style note as a loss note.
174
+ * @param n - the note
175
+ * @returns the loss note
176
+ */
177
+ export function lossOf(n) {
178
+ return Object.freeze({
179
+ code: n.code,
180
+ message: n.message,
181
+ column: null,
182
+ count: n.params.count,
183
+ style: n.params.target === null || n.params.property === null || n.params.target === "graph"
184
+ ? undefined
185
+ : Object.freeze({ target: n.params.target, property: n.params.property }),
186
+ });
187
+ }
188
+ /**
189
+ * Works out a CX or CX2 export with styles: the Cytoscape style of the rules, the bypasses that make Cytoscape draw
190
+ * exactly what they give, and the snapshot with the columns its mappings read added.
191
+ * @param snapshot - the graph handed to the exporter
192
+ * @param input - the styles, or undefined when none are written
193
+ * @param dialect - `"desktop"` for CX version 1, `"cx2"` for CX2
194
+ * @returns the styled export, or null without styles
195
+ */
196
+ export function cytoscapeStyledExport(snapshot, input, dialect) {
197
+ if (input === undefined) {
198
+ return null;
199
+ }
200
+ const notes = new StyleNotes();
201
+ const styled = emitCytoscapeStyle(input.rules, snapshot, { dialect, notes });
202
+ return { snapshot: withMappedColumns(snapshot, styled), styled, notes: notes.list().map(lossOf) };
203
+ }
204
+ /**
205
+ * The snapshot with the columns the emitted mappings read and it lacks added.
206
+ * @param snapshot - the graph handed to the exporter
207
+ * @param styled - the emitted style
208
+ * @returns the snapshot itself when it lacks none
209
+ */
210
+ function withMappedColumns(snapshot, styled) {
211
+ const missing = ["node", "edge"].flatMap((target) => [...styled.columns[target]]
212
+ .filter(([name]) => !(target === "node" ? snapshot.nodes : snapshot.edges).has(name))
213
+ .map(([name, values]) => ({ target, name, values })));
214
+ if (missing.length === 0) {
215
+ return snapshot;
216
+ }
217
+ const out = snapshot.withColumns();
218
+ for (const { target, name, values } of missing) {
219
+ const dtype = valuesDtype(values);
220
+ const col = dtype === "string" ? values.map((v) => (v === null ? null : String(v))) : values;
221
+ (target === "node" ? out.nodes : out.edges).set(name, col, { dtype });
222
+ }
223
+ return out;
224
+ }
225
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/formats/cx/styles.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,11 @@
6
6
  * `z` from the `z` column), `edges`, the `cx2.bypass` columns as `nodeBypasses` / `edgeBypasses`,
7
7
  * the opaque aspects a CX2 import kept (which returns its own style rules) and `status`.
8
8
  *
9
+ * Given styles (`exportGraph(..., { styles })`), `visualProperties` and `visualEditorProperties` are the
10
+ * Cytoscape style of the rules (defaults and mappings), the bypasses are every element whose value the style
11
+ * cannot give, and the style values the rules read are attributes; the `graphty.styles` block, which graph-io
12
+ * hands over as a graph attribute, is written as an aspect of its own (a kept one is written back the same way).
13
+ *
9
14
  * What CX2 cannot hold is announced by check() before anything is written: every edge is
10
15
  * directed (W_CX2_UNDIRECTED_AS_DIRECTED, W_MUTUAL_EXPANDED), node ids are integers (E_ID_CHARSET
11
16
  * unless `sanitizeIds: "mangle"`, which keeps the original in the `graphty:originalId` attribute
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../../src/formats/cx2/exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqBH,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAGtH;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,QAAQ;IACjB;;;OAGG;;IAEH,qFAAqF;;IAErF,8FAA8F;;IAE9F,uEAAuE;;IAEvE;;;OAGG;;IAEH,yDAAyD;;IAEzD,yDAAyD;;IAEzD,8GAA8G;;IAE9G;;;OAGG;;IAEH;;;OAGG;;IAEH,6FAA6F;;IAE7F,2DAA2D;;EAE7D,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAiB7B,CAAC;AA0qBH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAkCtD,CAAC"}
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../../src/formats/cx2/exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAwBH,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAKtH;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,QAAQ;IACjB;;;OAGG;;IAEH,qFAAqF;;IAErF,8FAA8F;;IAE9F,uEAAuE;;IAEvE;;;OAGG;;IAEH,yDAAyD;;IAEzD,yDAAyD;;IAEzD,8GAA8G;;IAE9G;;;OAGG;;IAEH;;;OAGG;;IAEH,6FAA6F;;IAE7F,2DAA2D;;EAE7D,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAiB7B,CAAC;AAyyBH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAuCtD,CAAC"}
@@ -6,6 +6,11 @@
6
6
  * `z` from the `z` column), `edges`, the `cx2.bypass` columns as `nodeBypasses` / `edgeBypasses`,
7
7
  * the opaque aspects a CX2 import kept (which returns its own style rules) and `status`.
8
8
  *
9
+ * Given styles (`exportGraph(..., { styles })`), `visualProperties` and `visualEditorProperties` are the
10
+ * Cytoscape style of the rules (defaults and mappings), the bypasses are every element whose value the style
11
+ * cannot give, and the style values the rules read are attributes; the `graphty.styles` block, which graph-io
12
+ * hands over as a graph attribute, is written as an aspect of its own (a kept one is written back the same way).
13
+ *
9
14
  * What CX2 cannot hold is announced by check() before anything is written: every edge is
10
15
  * directed (W_CX2_UNDIRECTED_AS_DIRECTED, W_MUTUAL_EXPANDED), node ids are integers (E_ID_CHARSET
11
16
  * unless `sanitizeIds: "mangle"`, which keeps the original in the `graphty:originalId` attribute
@@ -21,7 +26,11 @@ import { resolveExportOptions } from "../../common/options.js";
21
26
  import { plural } from "../../common/plural.js";
22
27
  import { explicitWeights } from "../../common/weights.js";
23
28
  import { encodeChunks, joinText } from "../../common/writer.js";
29
+ import { cytoscapeCx2Aspects } from "../../styles/cytoscape/emit.js";
30
+ import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
31
+ import { blockAspect, cytoscapeStyledExport, snapshotBlock } from "../cx/styles.js";
24
32
  import { BYPASS_NAMESPACE, CX2_FORMAT, cx2Type, ORIGINAL_ID_ATTRIBUTE } from "./importer.js";
33
+ import { CX2_STYLE_CAPABILITIES } from "./styles.js";
25
34
  /**
26
35
  * The loss notes the CX2 exporter's check() returns, by name. A key is the
27
36
  * code without its severity and format prefixes.
@@ -119,8 +128,11 @@ const SKIPPED_ROLES = new Set([
119
128
  "shape",
120
129
  "thickness",
121
130
  ]);
131
+ /** The style aspects; written from the styles when styles are given, else the kept ones. */
132
+ const STYLE_ASPECTS = new Set(["visualProperties", "visualEditorProperties"]);
122
133
  /** The aspects the exporter writes itself; an opaque aspect of the same name is not written again. */
123
134
  const CORE_ASPECTS = new Set([
135
+ STYLE_BLOCK_NAME,
124
136
  "nodes",
125
137
  "edges",
126
138
  "attributeDeclarations",
@@ -322,7 +334,9 @@ function plan(snapshot, common) {
322
334
  const label = snapshot.nodes.byRole("label");
323
335
  const nodeAttrs = planAttributes(snapshot.nodes, (c) => (c.meta.role !== null && SKIPPED_ROLES.has(c.meta.role)) || isBypass(c) || isZ(c), (c) => (c === label && !snapshot.nodes.has("name") ? "name" : c.meta.name), ids !== null && ids.changed > 0 ? new Set([ORIGINAL_ID_ATTRIBUTE]) : new Set());
324
336
  const edgeAttrs = planEdgeAttributes(snapshot, weights, note);
325
- const graphAttrs = planAttributes(snapshot.graph, () => false, (c) => c.meta.name).map((p) => ({ ...p, key: p.name }));
337
+ const graphAttrs = planAttributes(snapshot.graph,
338
+ // the graphty.styles block is an aspect of its own
339
+ (c) => c.meta.name === STYLE_BLOCK_NAME, (c) => c.meta.name).map((p) => ({ ...p, key: p.name }));
326
340
  const position = snapshot.nodes.byRole("position");
327
341
  nonFiniteNote(snapshot, [...nodeAttrs, ...edgeAttrs, ...graphAttrs], weights, position, note);
328
342
  const edgeIds = planEdgeIds(snapshot, note, ids);
@@ -437,35 +451,13 @@ function attributesOf(plans, row) {
437
451
  return out;
438
452
  }
439
453
  /**
440
- * Write the document as text parts.
454
+ * The networkAttributes element and its declarations: the graph attributes, then the snapshot's name and
455
+ * description where no attribute of that name is written.
441
456
  * @param snapshot - the snapshot
442
457
  * @param p - the plan
443
- * @yields the document's text
444
- * @returns nothing
458
+ * @returns the element and the declarations
445
459
  */
446
- function* write(snapshot, p) {
447
- if (p.fatal !== null) {
448
- throw p.fatal;
449
- }
450
- const { ids } = p;
451
- if (ids === null) {
452
- throw new GraphFormatError("E_INVALID_ID", "node ids cannot be written as CX2 integers", { reason: "charset" });
453
- }
454
- const { src, dst } = snapshot.edgeList();
455
- const edges = [];
456
- for (let e = 0; e < snapshot.edgeCount; e++) {
457
- if (!p.folding.folded(e)) {
458
- edges.push(e);
459
- }
460
- }
461
- const nodeDecls = declarations(p.nodeAttrs, true);
462
- if (p.originalIds) {
463
- nodeDecls[ORIGINAL_ID_ATTRIBUTE] = { d: "string" };
464
- }
465
- const edgeDecls = declarations(p.edgeAttrs, true);
466
- if (p.weights.weighted) {
467
- edgeDecls[WEIGHT_ATTRIBUTE] = { d: "double" };
468
- }
460
+ function networkOf(snapshot, p) {
469
461
  const networkDecls = declarations(p.graphAttrs, false);
470
462
  const network = {};
471
463
  for (const a of p.graphAttrs) {
@@ -484,77 +476,136 @@ function* write(snapshot, p) {
484
476
  networkDecls[key] = { d: "string" };
485
477
  }
486
478
  }
487
- const kept = isRecord(meta.extra.cx2) ? meta.extra.cx2 : {};
479
+ return { network, networkDecls };
480
+ }
481
+ /**
482
+ * The attributeDeclarations element: the kept declarations of other tables, then the network's, the nodes' and the
483
+ * edges' where there are any.
484
+ * @param p - the plan
485
+ * @param kept - what an import kept in meta.extra.cx2
486
+ * @param networkDecls - the network's declarations
487
+ * @returns the element
488
+ */
489
+ function declarationsElementOf(p, kept, networkDecls) {
490
+ const nodeDecls = declarations(p.nodeAttrs, true);
491
+ if (p.originalIds) {
492
+ nodeDecls[ORIGINAL_ID_ATTRIBUTE] = { d: "string" };
493
+ }
494
+ const edgeDecls = declarations(p.edgeAttrs, true);
495
+ if (p.weights.weighted) {
496
+ edgeDecls[WEIGHT_ATTRIBUTE] = { d: "double" };
497
+ }
488
498
  const otherDecls = isRecord(kept.declarations) ? kept.declarations : {};
489
- const opaque = meta.sourceFormat === CX2_FORMAT && isRecord(kept.opaque) ? kept.opaque : {};
490
- const declarationsElement = { ...otherDecls };
499
+ const element = { ...otherDecls };
491
500
  for (const [key, table] of [
492
501
  ["networkAttributes", networkDecls],
493
502
  ["nodes", nodeDecls],
494
503
  ["edges", edgeDecls],
495
504
  ]) {
496
505
  if (Object.keys(table).length > 0) {
497
- declarationsElement[key] = table;
506
+ element[key] = table;
498
507
  }
499
508
  }
500
- const nodeBypassRows = bypassRows(p.nodeBypasses, snapshot.nodeCount);
501
- const edgeBypassRows = bypassRows(p.edgeBypasses, snapshot.edgeCount).filter((e) => !p.folding.folded(e));
502
- const opaqueAspects = Object.entries(opaque).filter((entry) => !CORE_ASPECTS.has(entry[0]) && Array.isArray(entry[1]));
503
- const counts = [];
504
- const hasDeclarations = Object.keys(declarationsElement).length > 0;
505
- if (hasDeclarations) {
506
- counts.push(["attributeDeclarations", 1]);
509
+ return element;
510
+ }
511
+ /**
512
+ * One edge element.
513
+ * @param p - the plan
514
+ * @param ids - the written node ids
515
+ * @param src - the source of each edge
516
+ * @param dst - the target of each edge
517
+ * @param e - the edge
518
+ * @returns the element
519
+ */
520
+ function edgeElement(p, ids, src, dst, e) {
521
+ const element = {
522
+ id: p.edgeIds[e],
523
+ s: ids.idAt(src[e]),
524
+ t: ids.idAt(dst[e]),
525
+ };
526
+ let v = attributesOf(p.edgeAttrs, e);
527
+ if (p.weights.isExplicit(e)) {
528
+ const w = p.weights.value(e);
529
+ v ?? (v = {});
530
+ v[WEIGHT_ATTRIBUTE] = Number.isFinite(w) ? w : null;
507
531
  }
508
- if (Object.keys(network).length > 0) {
509
- counts.push(["networkAttributes", 1]);
532
+ if (v !== null) {
533
+ element.v = v;
510
534
  }
511
- counts.push(["nodes", snapshot.nodeCount], ["edges", edges.length]);
512
- if (nodeBypassRows.length > 0) {
513
- counts.push(["nodeBypasses", nodeBypassRows.length]);
535
+ return element;
536
+ }
537
+ /**
538
+ * The optional aspects of a document that are written: those with elements.
539
+ * @param aspects - each aspect's name and element count
540
+ * @returns the metaData counts
541
+ */
542
+ function presentAspects(aspects) {
543
+ return aspects.filter(([, n]) => n > 0).map(([name, n]) => [name, n]);
544
+ }
545
+ /**
546
+ * Write the document as text parts.
547
+ * @param snapshot - the snapshot
548
+ * @param p - the plan
549
+ * @param styled - the styles as a Cytoscape style, or null without styles
550
+ * @yields the document's text
551
+ * @returns nothing
552
+ */
553
+ function* write(snapshot, p, styled = null) {
554
+ if (p.fatal !== null) {
555
+ throw p.fatal;
514
556
  }
515
- if (edgeBypassRows.length > 0) {
516
- counts.push(["edgeBypasses", edgeBypassRows.length]);
557
+ const { ids } = p;
558
+ if (ids === null) {
559
+ throw new GraphFormatError("E_INVALID_ID", "node ids cannot be written as CX2 integers", { reason: "charset" });
517
560
  }
518
- for (const [name, elements] of opaqueAspects) {
519
- counts.push([name, elements.length]);
561
+ const edges = [];
562
+ for (let e = 0; e < snapshot.edgeCount; e++) {
563
+ if (!p.folding.folded(e)) {
564
+ edges.push(e);
565
+ }
520
566
  }
567
+ const { network, networkDecls } = networkOf(snapshot, p);
568
+ const { meta } = snapshot;
569
+ const kept = isRecord(meta.extra.cx2) ? meta.extra.cx2 : {};
570
+ const opaque = meta.sourceFormat === CX2_FORMAT && isRecord(kept.opaque) ? kept.opaque : {};
571
+ const declarationsElement = declarationsElementOf(p, kept, networkDecls);
572
+ const { bypassOf, nodeBypassRows, edgeBypassRows, opaqueAspects } = styleParts(snapshot, p, styled, opaque);
573
+ const hasDeclarations = Object.keys(declarationsElement).length > 0;
574
+ const hasNetwork = Object.keys(network).length > 0;
575
+ const counts = [
576
+ ...presentAspects([
577
+ ["attributeDeclarations", hasDeclarations ? 1 : 0],
578
+ ["networkAttributes", hasNetwork ? 1 : 0],
579
+ ]),
580
+ ["nodes", snapshot.nodeCount],
581
+ ["edges", edges.length],
582
+ ...presentAspects([
583
+ ["nodeBypasses", nodeBypassRows.length],
584
+ ["edgeBypasses", edgeBypassRows.length],
585
+ ]),
586
+ ...opaqueAspects.map(([name, elements]) => [name, elements.length]),
587
+ ];
521
588
  yield '[{"CXVersion":"2.0","hasFragments":false},\n';
522
589
  yield `{"metaData":${stringify(counts.map(([name, elementCount]) => ({ name, elementCount })))}},\n`;
523
590
  if (hasDeclarations) {
524
591
  yield `{"attributeDeclarations":[${stringify(declarationsElement)}]},\n`;
525
592
  }
526
- if (Object.keys(network).length > 0) {
593
+ if (hasNetwork) {
527
594
  yield `{"networkAttributes":[${stringify(network)}]},\n`;
528
595
  }
529
596
  yield* block("nodes", snapshot.nodeCount, (i) => stringify(nodeElement(p, ids, i)));
530
- yield* block("edges", edges.length, (k) => {
531
- const e = edges[k];
532
- const element = {
533
- id: p.edgeIds[e],
534
- s: ids.idAt(src[e]),
535
- t: ids.idAt(dst[e]),
536
- };
537
- let v = attributesOf(p.edgeAttrs, e);
538
- if (p.weights.isExplicit(e)) {
539
- const w = p.weights.value(e);
540
- v ?? (v = {});
541
- v[WEIGHT_ATTRIBUTE] = Number.isFinite(w) ? w : null;
542
- }
543
- if (v !== null) {
544
- element.v = v;
545
- }
546
- return stringify(element);
547
- });
597
+ const { src, dst } = snapshot.edgeList();
598
+ yield* block("edges", edges.length, (k) => stringify(edgeElement(p, ids, src, dst, edges[k])));
548
599
  if (nodeBypassRows.length > 0) {
549
600
  yield* block("nodeBypasses", nodeBypassRows.length, (k) => {
550
601
  const i = nodeBypassRows[k];
551
- return stringify({ id: ids.idAt(i), v: bypassValues(p.nodeBypasses, i) });
602
+ return stringify({ id: ids.idAt(i), v: bypassOf("node", i) });
552
603
  });
553
604
  }
554
605
  if (edgeBypassRows.length > 0) {
555
606
  yield* block("edgeBypasses", edgeBypassRows.length, (k) => {
556
607
  const e = edgeBypassRows[k];
557
- return stringify({ id: p.edgeIds[e], v: bypassValues(p.edgeBypasses, e) });
608
+ return stringify({ id: p.edgeIds[e], v: bypassOf("edge", e) });
558
609
  });
559
610
  }
560
611
  for (const [name, elements] of opaqueAspects) {
@@ -562,6 +613,49 @@ function* write(snapshot, p) {
562
613
  }
563
614
  yield '{"status":[{"error":"","success":true}]}]\n';
564
615
  }
616
+ /**
617
+ * The bypasses and the extra aspects of a document. With styles, the bypasses and the style aspects are the
618
+ * styles' own (the bypass columns and style aspects of an import are what the styles were read from); without, the
619
+ * bypass columns and the kept aspects are written back.
620
+ * @param snapshot - the snapshot
621
+ * @param p - the plan
622
+ * @param styled - the styles as a Cytoscape style, or null without styles
623
+ * @param opaque - the opaque aspects a CX2 import kept
624
+ * @returns the parts
625
+ */
626
+ function styleParts(snapshot, p, styled, opaque) {
627
+ const bypassOf = (target, row) => {
628
+ if (styled === null) {
629
+ return bypassValues(target === "node" ? p.nodeBypasses : p.edgeBypasses, row);
630
+ }
631
+ const m = styled.bypasses[target][row];
632
+ return m === null || m.size === 0 ? null : Object.fromEntries(m);
633
+ };
634
+ const rowsWith = (target, n) => {
635
+ if (styled === null) {
636
+ return bypassRows(target === "node" ? p.nodeBypasses : p.edgeBypasses, n);
637
+ }
638
+ const out = [];
639
+ for (let i = 0; i < n; i++) {
640
+ if (bypassOf(target, i) !== null) {
641
+ out.push(i);
642
+ }
643
+ }
644
+ return out;
645
+ };
646
+ const nodeBypassRows = rowsWith("node", snapshot.nodeCount);
647
+ const edgeBypassRows = rowsWith("edge", snapshot.edgeCount).filter((e) => !p.folding.folded(e));
648
+ const opaqueAspects = Object.entries(opaque).filter((entry) => !CORE_ASPECTS.has(entry[0]) && !(styled !== null && STYLE_ASPECTS.has(entry[0])) && Array.isArray(entry[1]));
649
+ if (styled !== null) {
650
+ const aspects = cytoscapeCx2Aspects(styled.style);
651
+ opaqueAspects.push(["visualProperties", aspects.visualProperties], ["visualEditorProperties", aspects.visualEditorProperties]);
652
+ }
653
+ const styleBlock = snapshotBlock(snapshot);
654
+ if (styleBlock !== null) {
655
+ opaqueAspects.push([STYLE_BLOCK_NAME, blockAspect(styleBlock)]);
656
+ }
657
+ return { bypassOf, nodeBypassRows, edgeBypassRows, opaqueAspects };
658
+ }
565
659
  /**
566
660
  * The text of one aspect block, element by element.
567
661
  * @param aspect - the aspect name
@@ -654,6 +748,7 @@ export const cx2Exporter = Object.freeze({
654
748
  format: CX2_FORMAT,
655
749
  options: Object.freeze([]),
656
750
  capabilities: CX2_CAPABILITIES,
751
+ styles: Object.freeze({ capabilities: CX2_STYLE_CAPABILITIES }),
657
752
  /**
658
753
  * Pre-flight: what export() would lose, without writing anything.
659
754
  * @param snapshot - the snapshot
@@ -661,7 +756,11 @@ export const cx2Exporter = Object.freeze({
661
756
  * @returns the notes, empty when the export is exact
662
757
  */
663
758
  check(snapshot, options) {
664
- return Object.freeze([...plan(snapshot, resolveExportOptions(options)).notes]);
759
+ const styled = cytoscapeStyledExport(snapshot, options?.styles, "cx2");
760
+ return Object.freeze([
761
+ ...plan(styled?.snapshot ?? snapshot, resolveExportOptions(options)).notes,
762
+ ...(styled?.notes ?? []),
763
+ ]);
665
764
  },
666
765
  /**
667
766
  * Write the document as UTF-8 chunks.
@@ -670,7 +769,7 @@ export const cx2Exporter = Object.freeze({
670
769
  * @returns the chunks
671
770
  */
672
771
  export(snapshot, options) {
673
- return encodeChunks(write(snapshot, plan(snapshot, resolveExportOptions(options))));
772
+ return encodeChunks(written(snapshot, options));
674
773
  },
675
774
  /**
676
775
  * Write the document as one string.
@@ -679,7 +778,18 @@ export const cx2Exporter = Object.freeze({
679
778
  * @returns the document
680
779
  */
681
780
  exportToString(snapshot, options) {
682
- return joinText(write(snapshot, plan(snapshot, resolveExportOptions(options))));
781
+ return joinText(written(snapshot, options));
683
782
  },
684
783
  });
784
+ /**
785
+ * The document's text, with the styles when they are given.
786
+ * @param snapshot - the snapshot
787
+ * @param options - the options
788
+ * @returns the text parts
789
+ */
790
+ function written(snapshot, options) {
791
+ const styled = cytoscapeStyledExport(snapshot, options?.styles, "cx2");
792
+ const target = styled?.snapshot ?? snapshot;
793
+ return write(target, plan(target, resolveExportOptions(options)), styled?.styled ?? null);
794
+ }
685
795
  //# sourceMappingURL=exporter.js.map