@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
@@ -12,6 +12,12 @@
12
12
  * `cx.bypass` columns, the provenance aspects a CX import created, the style rules and unknown
13
13
  * aspects a CX import kept, and `status`.
14
14
  *
15
+ * Given styles (`exportGraph(..., { styles })`), `cyVisualProperties` holds the Cytoscape style of the rules
16
+ * (`network`, `nodes:default` and `edges:default` with their mappings and dependencies) and a bypass for every
17
+ * element whose value the style cannot give, and the style values the rules read are attributes. The
18
+ * `graphty.styles` block, which graph-io hands over as a graph attribute, is written as an aspect of its own
19
+ * (a kept one is written back the same way).
20
+ *
15
21
  * What CX cannot hold is announced by check() before anything is written: every edge is directed
16
22
  * (W_CX_UNDIRECTED_AS_DIRECTED, W_MUTUAL_EXPANDED), node ids are integers (E_ID_CHARSET unless
17
23
  * `sanitizeIds: "mangle"`, which keeps the original in the `graphty:originalId` attribute the
@@ -42,8 +48,12 @@ import { type ResolvedExportOptions, resolveExportOptions } from "../../common/o
42
48
  import { plural } from "../../common/plural.js";
43
49
  import { type ExplicitWeights, explicitWeights } from "../../common/weights.js";
44
50
  import { encodeChunks, joinText } from "../../common/writer.js";
51
+ import { cytoscapeCxAspect, type CytoscapeEmitted } from "../../styles/cytoscape/emit.js";
52
+ import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
53
+ import type { ExporterStyleOptions } from "../../styles/io/writer.js";
45
54
  import { type CommonExportOptions, type ExportCapabilities, type GraphExporter, type LossNote } from "../../types.js";
46
55
  import { ORIGINAL_ID_ATTRIBUTE } from "../cx2/importer.js";
56
+ import { blockAspect, CX_STYLE_CAPABILITIES, cytoscapeStyledExport, snapshotBlock } from "./styles.js";
47
57
 
48
58
  /** The format name. */
49
59
  const CX_FORMAT = "cx";
@@ -216,6 +226,7 @@ const NEVER_WRITTEN: ReadonlySet<string> = new Set([
216
226
  "status",
217
227
  "groups",
218
228
  "subnetwork",
229
+ STYLE_BLOCK_NAME,
219
230
  ]);
220
231
 
221
232
  /** The weight attribute name (the CX importer's weightFrom default). */
@@ -559,7 +570,12 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
559
570
  nonfinite += weight.nonfinite;
560
571
 
561
572
  graphColumnNotes(snapshot, note);
562
- const graphAttrs = attributePlans(snapshot.graph, isBypass, (c) => c.meta.name);
573
+ // the graphty.styles block is an aspect of its own
574
+ const graphAttrs = attributePlans(
575
+ snapshot.graph,
576
+ (c) => isBypass(c) || c.meta.name === STYLE_BLOCK_NAME,
577
+ (c) => c.meta.name,
578
+ );
563
579
 
564
580
  if (children.column !== null && children.column.meta.role === "parents" && !several) {
565
581
  note(
@@ -900,9 +916,10 @@ function writtenEdges(snapshot: GraphSnapshot, folding: PairFolding): number[] {
900
916
  * @param snapshot - the snapshot
901
917
  * @param p - the plan
902
918
  * @param ids - the written node ids
919
+ * @param styled - the styles as a Cytoscape style, or null without styles
903
920
  * @returns the aspects (those without elements included; the writer skips them)
904
921
  */
905
- function aspects(snapshot: GraphSnapshot, p: Plan, ids: WrittenIds): Aspect[] {
922
+ function aspects(snapshot: GraphSnapshot, p: Plan, ids: WrittenIds, styled: CytoscapeEmitted | null): Aspect[] {
906
923
  const { src, dst } = snapshot.edgeList();
907
924
  const edges = writtenEdges(snapshot, p.folding);
908
925
  const nodeRange = (): number[] => Array.from({ length: snapshot.nodeCount }, (_, i) => i);
@@ -1017,8 +1034,18 @@ function aspects(snapshot: GraphSnapshot, p: Plan, ids: WrittenIds): Aspect[] {
1017
1034
  { name: "cyTableColumn", elements: () => tableColumns(p, ids) },
1018
1035
  { name: "cartesianLayout", elements: () => layoutElements(p, ids, nodeRange()) },
1019
1036
  { name: "cyGroups", elements: () => groupElements(snapshot, p, ids, edges) },
1020
- { name: "cyVisualProperties", elements: () => visualProperties(p, ids, nodeRange(), edges, kept) },
1037
+ {
1038
+ name: "cyVisualProperties",
1039
+ elements: () =>
1040
+ styled === null
1041
+ ? visualProperties(p, ids, nodeRange(), edges, kept)
1042
+ : styledVisualProperties(styled, ids, p.edgeIds, edges),
1043
+ },
1021
1044
  ];
1045
+ const block = snapshotBlock(snapshot);
1046
+ if (block !== null) {
1047
+ out.push({ name: STYLE_BLOCK_NAME, elements: () => blockAspect(block) });
1048
+ }
1022
1049
  out.push(...provenanceAspects(snapshot, p, ids, edges));
1023
1050
  for (const [name, value] of Object.entries(kept)) {
1024
1051
  if (!NEVER_WRITTEN.has(name) && Array.isArray(value)) {
@@ -1281,6 +1308,38 @@ function* visualProperties(
1281
1308
  }
1282
1309
  }
1283
1310
 
1311
+ /**
1312
+ * The cyVisualProperties entries of a styled export: the style's defaults, mappings and dependencies, then every
1313
+ * element's bypasses (as text, Cytoscape's form).
1314
+ * @param styled - the styles as a Cytoscape style
1315
+ * @param ids - the written ids
1316
+ * @param edgeIds - the written edge ids
1317
+ * @param edges - the written edges
1318
+ * @yields the entries
1319
+ */
1320
+ function* styledVisualProperties(
1321
+ styled: CytoscapeEmitted,
1322
+ ids: WrittenIds,
1323
+ edgeIds: readonly number[],
1324
+ edges: readonly number[],
1325
+ ): Generator<unknown, void, undefined> {
1326
+ yield* cytoscapeCxAspect(styled.style);
1327
+ const text = (m: ReadonlyMap<string, unknown>): Record<string, string> =>
1328
+ Object.fromEntries([...m].map(([k, v]) => [k, String(v)]));
1329
+ for (let row = 0; row < styled.bypasses.node.length; row++) {
1330
+ const m = styled.bypasses.node[row];
1331
+ if (m !== null && m.size > 0) {
1332
+ yield { properties_of: "nodes", applies_to: ids.idAt(row), properties: text(m) };
1333
+ }
1334
+ }
1335
+ for (const e of edges) {
1336
+ const m = styled.bypasses.edge[e];
1337
+ if (m !== null && m.size > 0) {
1338
+ yield { properties_of: "edges", applies_to: edgeIds[e], properties: text(m) };
1339
+ }
1340
+ }
1341
+ }
1342
+
1284
1343
  /**
1285
1344
  * The view of the subnetwork a CX import read (the one its style rules belong to).
1286
1345
  * @param kept - meta.extra.cx
@@ -1393,10 +1452,15 @@ function provenanceAspects(snapshot: GraphSnapshot, p: Plan, ids: WrittenIds, ed
1393
1452
  * Write the document as text parts.
1394
1453
  * @param snapshot - the snapshot
1395
1454
  * @param p - the plan
1455
+ * @param styled - the styles as a Cytoscape style, or null without styles
1396
1456
  * @yields the document's text
1397
1457
  * @returns nothing
1398
1458
  */
1399
- function* write(snapshot: GraphSnapshot, p: Plan): Generator<string, void, undefined> {
1459
+ function* write(
1460
+ snapshot: GraphSnapshot,
1461
+ p: Plan,
1462
+ styled: CytoscapeEmitted | null = null,
1463
+ ): Generator<string, void, undefined> {
1400
1464
  if (p.fatal !== null) {
1401
1465
  throw p.fatal;
1402
1466
  }
@@ -1404,7 +1468,7 @@ function* write(snapshot: GraphSnapshot, p: Plan): Generator<string, void, undef
1404
1468
  if (ids === null) {
1405
1469
  throw new GraphFormatError("E_INVALID_ID", "node ids cannot be written as CX integers", { reason: "charset" });
1406
1470
  }
1407
- const all = aspects(snapshot, p, ids);
1471
+ const all = aspects(snapshot, p, ids, styled);
1408
1472
  const written: { aspect: Aspect; count: number }[] = [];
1409
1473
  for (const aspect of all) {
1410
1474
  let count = 0;
@@ -1450,6 +1514,7 @@ export const cxExporter: GraphExporter<CxExportOptions> = Object.freeze({
1450
1514
  format: CX_FORMAT,
1451
1515
  options: Object.freeze([]),
1452
1516
  capabilities: CX_CAPABILITIES,
1517
+ styles: Object.freeze({ capabilities: CX_STYLE_CAPABILITIES }),
1453
1518
 
1454
1519
  /**
1455
1520
  * Pre-flight: what export() would lose, without writing anything.
@@ -1457,8 +1522,12 @@ export const cxExporter: GraphExporter<CxExportOptions> = Object.freeze({
1457
1522
  * @param options - the common options
1458
1523
  * @returns the notes, empty when the export is exact
1459
1524
  */
1460
- check(snapshot: GraphSnapshot, options?: CxExportOptions): readonly LossNote[] {
1461
- return Object.freeze([...plan(snapshot, resolveExportOptions(options)).notes]);
1525
+ check(snapshot: GraphSnapshot, options?: CxExportOptions & ExporterStyleOptions): readonly LossNote[] {
1526
+ const styled = cytoscapeStyledExport(snapshot, options?.styles, "desktop");
1527
+ return Object.freeze([
1528
+ ...plan(styled?.snapshot ?? snapshot, resolveExportOptions(options)).notes,
1529
+ ...(styled?.notes ?? []),
1530
+ ]);
1462
1531
  },
1463
1532
 
1464
1533
  /**
@@ -1467,8 +1536,8 @@ export const cxExporter: GraphExporter<CxExportOptions> = Object.freeze({
1467
1536
  * @param options - the common options
1468
1537
  * @returns the chunks
1469
1538
  */
1470
- export(snapshot: GraphSnapshot, options?: CxExportOptions): AsyncIterable<Uint8Array> {
1471
- return encodeChunks(write(snapshot, plan(snapshot, resolveExportOptions(options))));
1539
+ export(snapshot: GraphSnapshot, options?: CxExportOptions & ExporterStyleOptions): AsyncIterable<Uint8Array> {
1540
+ return encodeChunks(written(snapshot, options));
1472
1541
  },
1473
1542
 
1474
1543
  /**
@@ -1477,7 +1546,22 @@ export const cxExporter: GraphExporter<CxExportOptions> = Object.freeze({
1477
1546
  * @param options - the common options
1478
1547
  * @returns the document
1479
1548
  */
1480
- exportToString(snapshot: GraphSnapshot, options?: CxExportOptions): Promise<string> {
1481
- return joinText(write(snapshot, plan(snapshot, resolveExportOptions(options))));
1549
+ exportToString(snapshot: GraphSnapshot, options?: CxExportOptions & ExporterStyleOptions): Promise<string> {
1550
+ return joinText(written(snapshot, options));
1482
1551
  },
1483
1552
  });
1553
+
1554
+ /**
1555
+ * The document's text, with the styles when they are given.
1556
+ * @param snapshot - the snapshot
1557
+ * @param options - the options
1558
+ * @returns the text parts
1559
+ */
1560
+ function written(
1561
+ snapshot: GraphSnapshot,
1562
+ options: (CxExportOptions & ExporterStyleOptions) | undefined,
1563
+ ): Generator<string, void, undefined> {
1564
+ const styled = cytoscapeStyledExport(snapshot, options?.styles, "desktop");
1565
+ const target = styled?.snapshot ?? snapshot;
1566
+ return write(target, plan(target, resolveExportOptions(options)), styled?.styled ?? null);
1567
+ }
@@ -17,8 +17,11 @@
17
17
  * one `graphIndex` / `graphName` picks, `listGraphs()` lists them. Positions come from the
18
18
  * subnetwork's view, y flipped to y-up, `z` into the `z` column; `cyGroups` give `parent` (or
19
19
  * `parents`); per-element visual properties are one column per property (origin namespace
20
- * "cx.bypass") and style rules are kept verbatim in `meta.extra.cx` and not applied
21
- * (W_STYLES_NOT_IMPORTED, issue #706); provenance aspects become extension tables and list columns.
20
+ * "cx.bypass") and style rules are kept verbatim in `meta.extra.cx`; asked for styles
21
+ * (`importGraph(..., { styles: true })`), the importer reads the view's style rules and bypasses
22
+ * (styles.ts), kept for it through the report, otherwise W_STYLES_NOT_IMPORTED; the `graphty.styles`
23
+ * aspect of a file graphty wrote becomes the graph attribute of that name; provenance aspects become
24
+ * extension tables and list columns.
22
25
  */
23
26
 
24
27
  import {
@@ -111,6 +114,7 @@ import {
111
114
  import { agree, plural } from "../../common/plural.js";
112
115
  import { ImportReportBuilder } from "../../common/report.js";
113
116
  import { weightFromValue } from "../../common/weights.js";
117
+ import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
114
118
  import {
115
119
  type CommonImportOptions,
116
120
  type GraphChoiceOptions,
@@ -120,6 +124,7 @@ import {
120
124
  type ImportReport,
121
125
  } from "../../types.js";
122
126
  import { ORIGINAL_ID_ATTRIBUTE, zAsOption } from "../cx2/importer.js";
127
+ import { blockOfAspect, type CxStyleSource, readCxStyles } from "./styles.js";
123
128
 
124
129
  /** The format name. */
125
130
  const CX_FORMAT = "cx";
@@ -1083,6 +1088,41 @@ function refId(raw: unknown): NodeId | null {
1083
1088
  }
1084
1089
  }
1085
1090
 
1091
+ /**
1092
+ * The view a cyVisualProperties entry names.
1093
+ * @param entry - the entry
1094
+ * @returns the view's id, or null when it names none
1095
+ */
1096
+ function entryView(entry: Record<string, unknown>): NodeId | null {
1097
+ return entry.view === undefined || entry.view === null ? null : refId(entry.view);
1098
+ }
1099
+
1100
+ /**
1101
+ * A visual property value as the text of a bypass cell.
1102
+ * @param raw - the value
1103
+ * @returns the string itself, else its JSON
1104
+ */
1105
+ function cellText(raw: unknown): string {
1106
+ return typeof raw === "string" ? raw : JSON.stringify(raw);
1107
+ }
1108
+
1109
+ /** What readVisualProperties() collects from the entries of this graph's view. */
1110
+ interface VisualPropertiesRead {
1111
+ /** The per-element values, by property: [row, text] pairs. */
1112
+ readonly columns: {
1113
+ readonly node: Map<string, [number, string][]>;
1114
+ readonly edge: Map<string, [number, string][]>;
1115
+ };
1116
+ /** The network values, by property. */
1117
+ readonly network: Map<string, string>;
1118
+ /** How many default values the entries hold. */
1119
+ defaults: number;
1120
+ /** How many mappings. */
1121
+ mappings: number;
1122
+ /** How many dependencies. */
1123
+ dependencies: number;
1124
+ }
1125
+
1086
1126
  /**
1087
1127
  * A member list: the ids of an array, or null for "all" (an absent list is empty).
1088
1128
  * @param raw - the list
@@ -1364,26 +1404,6 @@ function memberCount(members: ReadonlySet<NodeId> | null, total: number): number
1364
1404
 
1365
1405
  // ============================================================ the build
1366
1406
 
1367
- /** The cyVisualProperties of a graph's view, gathered before they are written. */
1368
- interface VisualCollection {
1369
- /** per domain, per property: the [row, text] cells */
1370
- columns: Record<"node" | "edge", Map<string, [number, string][]>>;
1371
- /** the network values by property */
1372
- network: Map<string, string>;
1373
- defaults: number;
1374
- mappings: number;
1375
- dependencies: number;
1376
- }
1377
-
1378
- /**
1379
- * A visual property value as text: a string as it is, anything else as JSON.
1380
- * @param raw - the value
1381
- * @returns its text
1382
- */
1383
- function visualText(raw: unknown): string {
1384
- return typeof raw === "string" ? raw : JSON.stringify(raw);
1385
- }
1386
-
1387
1407
  /** One attribute column of the graph being built. */
1388
1408
  interface AttributeColumn {
1389
1409
  readonly name: string;
@@ -1509,6 +1529,7 @@ class CxReader {
1509
1529
  this.writeAttributes("edge", edgeColumns);
1510
1530
  this.readNetworkAttributes();
1511
1531
  this.readVisualProperties();
1532
+ this.readStyleBlock();
1512
1533
  this.readProvenance();
1513
1534
  for (const [kind, count] of this.dangling) {
1514
1535
  report.warning(
@@ -2872,79 +2893,86 @@ class CxReader {
2872
2893
  * applied.
2873
2894
  */
2874
2895
  private readVisualProperties(): void {
2896
+ const entries = aspect(this.doc, "cyVisualProperties");
2875
2897
  // Cytoscape's table-cell styles: a visual property aspect graph-io keeps but does not read
2876
2898
  const tableStyles = TABLE_STYLE_ASPECTS.reduce((n, name) => n + (this.doc.kept.get(name)?.length ?? 0), 0);
2877
2899
  // the graph's own view (its first): the one its positions come from; the others stay in meta.extra.cx
2878
2900
  const views = new Set(this.plan.views.slice(0, 1));
2879
- const visual: VisualCollection = {
2901
+ const ofThisView = (view: NodeId | null): boolean => view === null || views.size === 0 || views.has(view);
2902
+ this.keepVisualPropertiesForStyles(entries, ofThisView);
2903
+ const read: VisualPropertiesRead = {
2880
2904
  columns: { node: new Map(), edge: new Map() },
2881
2905
  network: new Map(),
2882
2906
  defaults: 0,
2883
2907
  mappings: 0,
2884
2908
  dependencies: 0,
2885
2909
  };
2886
- for (const { value } of aspect(this.doc, "cyVisualProperties")) {
2887
- if (isRecord(value)) {
2888
- this.collectVisualEntry(value, views, visual);
2910
+ for (const { value } of entries) {
2911
+ if (isRecord(value) && ofThisView(entryView(value))) {
2912
+ this.collectVisualProperties(value, read);
2889
2913
  }
2890
2914
  }
2891
- this.writeBypassColumns(visual.columns);
2892
- this.writeBypassNetwork(visual.network);
2893
- this.reportStyleRules(visual, tableStyles);
2915
+ this.writeBypassColumns(read);
2916
+ this.warnStylesNotImported(read, tableStyles);
2894
2917
  }
2895
2918
 
2896
2919
  /**
2897
- * File one cyVisualProperties element of this graph's view into the collection: per-element and
2898
- * network values by property, defaults, mappings and dependencies counted.
2899
- * @param value - the element
2900
- * @param views - the views read (empty: every view)
2901
- * @param visual - the collection to add to
2920
+ * Hand the style reader the entries of this graph's view (and those naming no view).
2921
+ * @param entries - every cyVisualProperties entry
2922
+ * @param ofThisView - whether a view is this graph's
2902
2923
  */
2903
- private collectVisualEntry(
2904
- value: Record<string, unknown>,
2905
- views: ReadonlySet<NodeId>,
2906
- visual: VisualCollection,
2924
+ private keepVisualPropertiesForStyles(
2925
+ entries: readonly { value: unknown }[],
2926
+ ofThisView: (view: NodeId | null) => boolean,
2907
2927
  ): void {
2908
- const view = value.view === undefined || value.view === null ? null : refId(value.view);
2909
- if (view !== null && views.size > 0 && !views.has(view)) {
2910
- return;
2911
- }
2912
- const properties = isRecord(value.properties) ? value.properties : {};
2913
- visual.mappings += isRecord(value.mappings) ? Object.keys(value.mappings).length : 0;
2914
- visual.dependencies += isRecord(value.dependencies) ? Object.keys(value.dependencies).length : 0;
2915
- switch (value.properties_of) {
2916
- case "nodes":
2917
- this.collectElementProperties("node", value.applies_to, properties, visual.columns);
2918
- break;
2919
- case "edges":
2920
- this.collectElementProperties("edge", value.applies_to, properties, visual.columns);
2921
- break;
2922
- case "network":
2923
- for (const [property, raw] of Object.entries(properties)) {
2924
- visual.network.set(property, visualText(raw));
2928
+ const others = new Set<unknown>();
2929
+ const kept = entries
2930
+ .map((h) => h.value)
2931
+ .filter((v) => {
2932
+ const view = isRecord(v) ? entryView(v) : null;
2933
+ if (!ofThisView(view)) {
2934
+ others.add(view);
2935
+ return false;
2925
2936
  }
2926
- break;
2927
- default:
2928
- visual.defaults += Object.keys(properties).length;
2929
- break;
2937
+ return true;
2938
+ });
2939
+ const source: CxStyleSource = others.size > 0 ? { entries: kept, otherViews: others.size } : { entries: kept };
2940
+ this.report.keepForStyles(source);
2941
+ }
2942
+
2943
+ /**
2944
+ * Collect one cyVisualProperties entry of this graph's view.
2945
+ * @param value - the entry
2946
+ * @param read - what is collected so far
2947
+ */
2948
+ private collectVisualProperties(value: Record<string, unknown>, read: VisualPropertiesRead): void {
2949
+ const properties = isRecord(value.properties) ? value.properties : {};
2950
+ read.mappings += isRecord(value.mappings) ? Object.keys(value.mappings).length : 0;
2951
+ read.dependencies += isRecord(value.dependencies) ? Object.keys(value.dependencies).length : 0;
2952
+ if (value.properties_of === "nodes" || value.properties_of === "edges") {
2953
+ this.collectElementProperties(value, properties, read);
2954
+ } else if (value.properties_of === "network") {
2955
+ for (const [property, raw] of Object.entries(properties)) {
2956
+ read.network.set(property, cellText(raw));
2957
+ }
2958
+ } else {
2959
+ read.defaults += Object.keys(properties).length;
2930
2960
  }
2931
2961
  }
2932
2962
 
2933
2963
  /**
2934
- * File the visual values of one node or edge under its row; an element not in this graph is
2935
- * skipped, and reported dangling when it is in no graph of the file.
2936
- * @param domain - node or edge
2937
- * @param appliesTo - the element's applies_to
2938
- * @param properties - its visual properties
2939
- * @param columns - the per-property cells to add to
2964
+ * Collect the per-element values of a nodes or edges entry.
2965
+ * @param value - the entry
2966
+ * @param properties - its properties
2967
+ * @param read - what is collected so far
2940
2968
  */
2941
2969
  private collectElementProperties(
2942
- domain: "node" | "edge",
2943
- appliesTo: unknown,
2970
+ value: Record<string, unknown>,
2944
2971
  properties: Record<string, unknown>,
2945
- columns: VisualCollection["columns"],
2972
+ read: VisualPropertiesRead,
2946
2973
  ): void {
2947
- const target = refId(appliesTo);
2974
+ const domain = value.properties_of === "nodes" ? "node" : "edge";
2975
+ const target = refId(value.applies_to);
2948
2976
  const rows = domain === "node" ? this.nodeRows : this.edgeRows;
2949
2977
  const row = target === null ? undefined : rows.get(target);
2950
2978
  if (row === undefined) {
@@ -2954,19 +2982,19 @@ class CxReader {
2954
2982
  return;
2955
2983
  }
2956
2984
  for (const [property, raw] of Object.entries(properties)) {
2957
- const list = columns[domain].get(property) ?? [];
2958
- list.push([row, visualText(raw)]);
2959
- columns[domain].set(property, list);
2985
+ const list = read.columns[domain].get(property) ?? [];
2986
+ list.push([row, cellText(raw)]);
2987
+ read.columns[domain].set(property, list);
2960
2988
  }
2961
2989
  }
2962
2990
 
2963
2991
  /**
2964
- * Write the collected per-element visual values as string columns in the cx.bypass namespace.
2965
- * @param columns - the per-property cells of each domain
2992
+ * Write the per-element and network values as string columns in the cx.bypass namespace.
2993
+ * @param read - what was collected
2966
2994
  */
2967
- private writeBypassColumns(columns: VisualCollection["columns"]): void {
2995
+ private writeBypassColumns(read: VisualPropertiesRead): void {
2968
2996
  for (const domain of ["node", "edge"] as const) {
2969
- for (const [property, cells] of columns[domain]) {
2997
+ for (const [property, cells] of read.columns[domain]) {
2970
2998
  const handle = declareFresh(
2971
2999
  this.sink,
2972
3000
  domain,
@@ -2987,14 +3015,7 @@ class CxReader {
2987
3015
  }
2988
3016
  }
2989
3017
  }
2990
- }
2991
-
2992
- /**
2993
- * Write the network visual values as graph values in the cx.bypass namespace.
2994
- * @param network - the value of each property
2995
- */
2996
- private writeBypassNetwork(network: ReadonlyMap<string, string>): void {
2997
- for (const [property, text] of network) {
3018
+ for (const [property, text] of read.network) {
2998
3019
  try {
2999
3020
  this.sink.setGraphValue(property, text, {
3000
3021
  dtype: "string",
@@ -3007,12 +3028,12 @@ class CxReader {
3007
3028
  }
3008
3029
 
3009
3030
  /**
3010
- * Warn that the style rules (defaults, mappings, dependencies, table styles) are kept, not applied.
3011
- * @param visual - the counted rules
3012
- * @param tableStyles - the number of table style elements
3031
+ * The warning that the file's style rules are kept and not applied, when it has any.
3032
+ * @param read - what was collected
3033
+ * @param tableStyles - how many table style elements the file holds
3013
3034
  */
3014
- private reportStyleRules(visual: VisualCollection, tableStyles: number): void {
3015
- const { defaults, mappings, dependencies } = visual;
3035
+ private warnStylesNotImported(read: VisualPropertiesRead, tableStyles: number): void {
3036
+ const { defaults, mappings, dependencies } = read;
3016
3037
  if (defaults + mappings + dependencies + tableStyles === 0) {
3017
3038
  return;
3018
3039
  }
@@ -3030,6 +3051,17 @@ class CxReader {
3030
3051
  );
3031
3052
  }
3032
3053
 
3054
+ /** The `graphty.styles` aspect of a file graphty wrote, as the graph attribute of that name. */
3055
+ private readStyleBlock(): void {
3056
+ const block = blockOfAspect(this.doc.kept.get(STYLE_BLOCK_NAME));
3057
+ if (block !== null) {
3058
+ this.sink.setGraphValue(STYLE_BLOCK_NAME, block, {
3059
+ dtype: "string",
3060
+ origin: { format: CX_FORMAT, id: null },
3061
+ });
3062
+ }
3063
+ }
3064
+
3033
3065
  /**
3034
3066
  * Read the provenance aspects: citations and supports as extension tables cx:citations and
3035
3067
  * cx:supports, the node / edge links to them as list columns, functionTerms as a json column,
@@ -3230,7 +3262,10 @@ class CxReader {
3230
3262
  }
3231
3263
  return found;
3232
3264
  };
3233
- const extra: Record<string, unknown> = Object.fromEntries(this.doc.kept);
3265
+ // the graphty.styles aspect is read as a graph attribute (readStyleBlock), not kept
3266
+ const extra: Record<string, unknown> = Object.fromEntries(
3267
+ [...this.doc.kept].filter(([name]) => name !== STYLE_BLOCK_NAME),
3268
+ );
3234
3269
  const groups = aspect(this.doc, "cyGroups").map((h) => plainJson(h.value));
3235
3270
  const own: Record<string, unknown> = {};
3236
3271
  if (groups.length > 0) {
@@ -3312,6 +3347,7 @@ export const cxImporter: GraphImporter<CxImportOptions> = Object.freeze({
3312
3347
  options: Object.freeze(["zAs"]),
3313
3348
  extensions: Object.freeze([".cx"]),
3314
3349
  mimeTypes: Object.freeze(["application/json"]),
3350
+ styles: readCxStyles,
3315
3351
 
3316
3352
  /**
3317
3353
  * Confidence that the head is CX version 1: 0.95 when a top-level array starts with an object