@graphty/graph-io 0.3.43 → 0.3.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (674) hide show
  1. package/dist/chunks/approximations-DJMHdDvv.js +40 -0
  2. package/dist/chunks/approximations-DJMHdDvv.js.map +1 -0
  3. package/dist/chunks/block-CPCHkX42.js +2777 -0
  4. package/dist/chunks/block-CPCHkX42.js.map +1 -0
  5. package/dist/chunks/{choose-DvpbdRuz.js → choose--jM0yYCo.js} +3 -2
  6. package/dist/chunks/{choose-DvpbdRuz.js.map → choose--jM0yYCo.js.map} +1 -1
  7. package/dist/chunks/{constants-fT3E8JYY.js → constants-BKwqelYD.js} +6 -2
  8. package/dist/chunks/constants-BKwqelYD.js.map +1 -0
  9. package/dist/chunks/convert-BcQ8_jMo.js +59 -0
  10. package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
  11. package/dist/chunks/emit-DZy6JgdA.js +3456 -0
  12. package/dist/chunks/emit-DZy6JgdA.js.map +1 -0
  13. package/dist/chunks/{escape-B62ZGM_a.js → escape-CgzxiYPg.js} +44 -21
  14. package/dist/chunks/escape-CgzxiYPg.js.map +1 -0
  15. package/dist/chunks/{export-rKLeGQMo.js → export-BvqAXCKh.js} +196 -792
  16. package/dist/chunks/export-BvqAXCKh.js.map +1 -0
  17. package/dist/chunks/{exporter-yLxKBvLE.js → exporter--Mk9gXCJ.js} +4 -3
  18. package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter--Mk9gXCJ.js.map} +1 -1
  19. package/dist/chunks/{exporter-RVtXVetw.js → exporter-C-9cgZKa.js} +1805 -287
  20. package/dist/chunks/exporter-C-9cgZKa.js.map +1 -0
  21. package/dist/chunks/{exporter-8hLNemFk.js → exporter-DFqJhBnj.js} +133 -74
  22. package/dist/chunks/exporter-DFqJhBnj.js.map +1 -0
  23. package/dist/chunks/{exporter-BWwEuOPT.js → exporter-DteVeJki.js} +22 -12
  24. package/dist/chunks/exporter-DteVeJki.js.map +1 -0
  25. package/dist/chunks/format-BpQBx8MZ.js +676 -0
  26. package/dist/chunks/format-BpQBx8MZ.js.map +1 -0
  27. package/dist/chunks/generic-BGO71QBv.js +1347 -0
  28. package/dist/chunks/generic-BGO71QBv.js.map +1 -0
  29. package/dist/chunks/{importer-C98dpSH4.js → importer-B-9Rc1zO.js} +141 -82
  30. package/dist/chunks/importer-B-9Rc1zO.js.map +1 -0
  31. package/dist/chunks/{importer-D794XUTe.js → importer-BVVR740x.js} +31 -8
  32. package/dist/chunks/importer-BVVR740x.js.map +1 -0
  33. package/dist/chunks/{importer-WrGRZb0N.js → importer-C0AjA3Ax.js} +449 -102
  34. package/dist/chunks/importer-C0AjA3Ax.js.map +1 -0
  35. package/dist/chunks/{importer-BbNb7eNg.js → importer-C7pvJe1L.js} +1398 -129
  36. package/dist/chunks/importer-C7pvJe1L.js.map +1 -0
  37. package/dist/chunks/{importer-xZ-3suY1.js → importer-ClwoVx3O.js} +791 -135
  38. package/dist/chunks/importer-ClwoVx3O.js.map +1 -0
  39. package/dist/chunks/{importer-Ht7LNg8L.js → importer-D0sC_6bO.js} +116 -296
  40. package/dist/chunks/importer-D0sC_6bO.js.map +1 -0
  41. package/dist/chunks/{importer-Dz7tI8Sa.js → importer-EHQk1jbM.js} +617 -115
  42. package/dist/chunks/importer-EHQk1jbM.js.map +1 -0
  43. package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-DJZRZ6jd.js} +123 -32
  44. package/dist/chunks/json-elements-DJZRZ6jd.js.map +1 -0
  45. package/dist/chunks/lexicon-WMsNddyU.js +509 -0
  46. package/dist/chunks/lexicon-WMsNddyU.js.map +1 -0
  47. package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-G4MqRdux.js} +3 -2
  48. package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-G4MqRdux.js.map} +1 -1
  49. package/dist/chunks/{records-Cu4bxYOm.js → records-CiaWZrFH.js} +2 -2
  50. package/dist/chunks/{records-Cu4bxYOm.js.map → records-CiaWZrFH.js.map} +1 -1
  51. package/dist/chunks/styles-DvoFBKCK.js +690 -0
  52. package/dist/chunks/styles-DvoFBKCK.js.map +1 -0
  53. package/dist/chunks/styles-yed-Cz9rLBCP.js +842 -0
  54. package/dist/chunks/styles-yed-Cz9rLBCP.js.map +1 -0
  55. package/dist/chunks/styles-zNTmz5R7.js +2102 -0
  56. package/dist/chunks/styles-zNTmz5R7.js.map +1 -0
  57. package/dist/chunks/{text-DHOJXnED.js → text-CzJNFOS9.js} +2 -2
  58. package/dist/chunks/{text-DHOJXnED.js.map → text-CzJNFOS9.js.map} +1 -1
  59. package/dist/chunks/units-XMZFIFe1.js +19 -0
  60. package/dist/chunks/units-XMZFIFe1.js.map +1 -0
  61. package/dist/chunks/writer-gQ8kx99H.js +448 -0
  62. package/dist/chunks/writer-gQ8kx99H.js.map +1 -0
  63. package/dist/csv.js +5 -4
  64. package/dist/csv.js.map +1 -1
  65. package/dist/cx.js +1 -1
  66. package/dist/cx2.js +2 -2
  67. package/dist/cys.js +1 -1
  68. package/dist/dot.js +5 -2
  69. package/dist/dot.js.map +1 -1
  70. package/dist/gexf.js +292 -412
  71. package/dist/gexf.js.map +1 -1
  72. package/dist/gml.js +927 -74
  73. package/dist/gml.js.map +1 -1
  74. package/dist/graph-io.js +351 -236
  75. package/dist/graph-io.js.map +1 -1
  76. package/dist/graphml.js +4 -2
  77. package/dist/graphml.js.map +1 -1
  78. package/dist/json.js +1 -1
  79. package/dist/neo4j.js +4 -3
  80. package/dist/neo4j.js.map +1 -1
  81. package/dist/obo.js +1 -1
  82. package/dist/pajek.js +4 -2
  83. package/dist/positions.d.ts +1 -0
  84. package/dist/positions.js +427 -0
  85. package/dist/positions.js.map +1 -0
  86. package/dist/src/common/codes.d.ts +6 -0
  87. package/dist/src/common/codes.d.ts.map +1 -1
  88. package/dist/src/common/codes.js +6 -0
  89. package/dist/src/common/codes.js.map +1 -1
  90. package/dist/src/common/escape.d.ts.map +1 -1
  91. package/dist/src/common/escape.js +4 -2
  92. package/dist/src/common/escape.js.map +1 -1
  93. package/dist/src/common/export.d.ts +10 -0
  94. package/dist/src/common/export.d.ts.map +1 -1
  95. package/dist/src/common/export.js +123 -100
  96. package/dist/src/common/export.js.map +1 -1
  97. package/dist/src/common/input.d.ts.map +1 -1
  98. package/dist/src/common/input.js +8 -1
  99. package/dist/src/common/input.js.map +1 -1
  100. package/dist/src/common/json-elements.d.ts +12 -9
  101. package/dist/src/common/json-elements.d.ts.map +1 -1
  102. package/dist/src/common/json-elements.js +160 -37
  103. package/dist/src/common/json-elements.js.map +1 -1
  104. package/dist/src/common/notes.d.ts +42 -0
  105. package/dist/src/common/notes.d.ts.map +1 -0
  106. package/dist/src/common/notes.js +72 -0
  107. package/dist/src/common/notes.js.map +1 -0
  108. package/dist/src/common/report.d.ts +18 -0
  109. package/dist/src/common/report.d.ts.map +1 -1
  110. package/dist/src/common/report.js +36 -1
  111. package/dist/src/common/report.js.map +1 -1
  112. package/dist/src/common/units.d.ts +24 -0
  113. package/dist/src/common/units.d.ts.map +1 -0
  114. package/dist/src/common/units.js +26 -0
  115. package/dist/src/common/units.js.map +1 -0
  116. package/dist/src/common/xml.d.ts +18 -0
  117. package/dist/src/common/xml.d.ts.map +1 -1
  118. package/dist/src/common/xml.js +42 -5
  119. package/dist/src/common/xml.js.map +1 -1
  120. package/dist/src/formats/cx/exporter.d.ts +6 -0
  121. package/dist/src/formats/cx/exporter.d.ts.map +1 -1
  122. package/dist/src/formats/cx/exporter.js +71 -8
  123. package/dist/src/formats/cx/exporter.js.map +1 -1
  124. package/dist/src/formats/cx/importer.d.ts +5 -2
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +102 -72
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +102 -0
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -0
  130. package/dist/src/formats/cx/styles.js +225 -0
  131. package/dist/src/formats/cx/styles.js.map +1 -0
  132. package/dist/src/formats/cx2/exporter.d.ts +5 -0
  133. package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
  134. package/dist/src/formats/cx2/exporter.js +181 -71
  135. package/dist/src/formats/cx2/exporter.js.map +1 -1
  136. package/dist/src/formats/cx2/importer.d.ts +4 -1
  137. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  138. package/dist/src/formats/cx2/importer.js +19 -1
  139. package/dist/src/formats/cx2/importer.js.map +1 -1
  140. package/dist/src/formats/cx2/styles.d.ts +18 -0
  141. package/dist/src/formats/cx2/styles.d.ts.map +1 -0
  142. package/dist/src/formats/cx2/styles.js +24 -0
  143. package/dist/src/formats/cx2/styles.js.map +1 -0
  144. package/dist/src/formats/cys/constants.d.ts +2 -0
  145. package/dist/src/formats/cys/constants.d.ts.map +1 -1
  146. package/dist/src/formats/cys/constants.js +2 -0
  147. package/dist/src/formats/cys/constants.js.map +1 -1
  148. package/dist/src/formats/cys/exporter.d.ts +6 -2
  149. package/dist/src/formats/cys/exporter.d.ts.map +1 -1
  150. package/dist/src/formats/cys/exporter.js +215 -53
  151. package/dist/src/formats/cys/exporter.js.map +1 -1
  152. package/dist/src/formats/cys/importer.d.ts +2 -1
  153. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  154. package/dist/src/formats/cys/importer.js +119 -6
  155. package/dist/src/formats/cys/importer.js.map +1 -1
  156. package/dist/src/formats/cys/session.d.ts +2 -0
  157. package/dist/src/formats/cys/session.d.ts.map +1 -1
  158. package/dist/src/formats/cys/session.js +5 -0
  159. package/dist/src/formats/cys/session.js.map +1 -1
  160. package/dist/src/formats/cys/styles.d.ts +38 -0
  161. package/dist/src/formats/cys/styles.d.ts.map +1 -0
  162. package/dist/src/formats/cys/styles.js +213 -0
  163. package/dist/src/formats/cys/styles.js.map +1 -0
  164. package/dist/src/formats/cys/tables.d.ts +8 -3
  165. package/dist/src/formats/cys/tables.d.ts.map +1 -1
  166. package/dist/src/formats/cys/tables.js +88 -34
  167. package/dist/src/formats/cys/tables.js.map +1 -1
  168. package/dist/src/formats/dot/exporter.d.ts +2 -0
  169. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  170. package/dist/src/formats/dot/exporter.js +195 -81
  171. package/dist/src/formats/dot/exporter.js.map +1 -1
  172. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  173. package/dist/src/formats/dot/importer.js +100 -20
  174. package/dist/src/formats/dot/importer.js.map +1 -1
  175. package/dist/src/formats/dot/index.d.ts +1 -0
  176. package/dist/src/formats/dot/index.d.ts.map +1 -1
  177. package/dist/src/formats/dot/index.js +1 -0
  178. package/dist/src/formats/dot/index.js.map +1 -1
  179. package/dist/src/formats/dot/positions.d.ts +14 -0
  180. package/dist/src/formats/dot/positions.d.ts.map +1 -0
  181. package/dist/src/formats/dot/positions.js +70 -0
  182. package/dist/src/formats/dot/positions.js.map +1 -0
  183. package/dist/src/formats/dot/styles.d.ts +82 -0
  184. package/dist/src/formats/dot/styles.d.ts.map +1 -0
  185. package/dist/src/formats/dot/styles.js +1496 -0
  186. package/dist/src/formats/dot/styles.js.map +1 -0
  187. package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
  188. package/dist/src/formats/gexf/exporter.js +20 -5
  189. package/dist/src/formats/gexf/exporter.js.map +1 -1
  190. package/dist/src/formats/gexf/importer.d.ts +8 -1
  191. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  192. package/dist/src/formats/gexf/importer.js +251 -131
  193. package/dist/src/formats/gexf/importer.js.map +1 -1
  194. package/dist/src/formats/gexf/index.d.ts +8 -0
  195. package/dist/src/formats/gexf/index.d.ts.map +1 -1
  196. package/dist/src/formats/gexf/index.js +10 -2
  197. package/dist/src/formats/gexf/index.js.map +1 -1
  198. package/dist/src/formats/gexf/schema.d.ts +5 -0
  199. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  200. package/dist/src/formats/gexf/schema.js +5 -0
  201. package/dist/src/formats/gexf/schema.js.map +1 -1
  202. package/dist/src/formats/gexf/styles.d.ts +74 -0
  203. package/dist/src/formats/gexf/styles.d.ts.map +1 -0
  204. package/dist/src/formats/gexf/styles.js +604 -0
  205. package/dist/src/formats/gexf/styles.js.map +1 -0
  206. package/dist/src/formats/gml/exporter.d.ts +1 -5
  207. package/dist/src/formats/gml/exporter.d.ts.map +1 -1
  208. package/dist/src/formats/gml/exporter.js +19 -8
  209. package/dist/src/formats/gml/exporter.js.map +1 -1
  210. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  211. package/dist/src/formats/gml/importer.js +4 -0
  212. package/dist/src/formats/gml/importer.js.map +1 -1
  213. package/dist/src/formats/gml/index.d.ts +2 -1
  214. package/dist/src/formats/gml/index.d.ts.map +1 -1
  215. package/dist/src/formats/gml/index.js +2 -1
  216. package/dist/src/formats/gml/index.js.map +1 -1
  217. package/dist/src/formats/gml/positions.d.ts +14 -0
  218. package/dist/src/formats/gml/positions.d.ts.map +1 -0
  219. package/dist/src/formats/gml/positions.js +46 -0
  220. package/dist/src/formats/gml/positions.js.map +1 -0
  221. package/dist/src/formats/gml/styles.d.ts +59 -0
  222. package/dist/src/formats/gml/styles.d.ts.map +1 -0
  223. package/dist/src/formats/gml/styles.js +1056 -0
  224. package/dist/src/formats/gml/styles.js.map +1 -0
  225. package/dist/src/formats/gml/syntax.d.ts +11 -0
  226. package/dist/src/formats/gml/syntax.d.ts.map +1 -1
  227. package/dist/src/formats/gml/syntax.js +151 -62
  228. package/dist/src/formats/gml/syntax.js.map +1 -1
  229. package/dist/src/formats/graphml/constants.d.ts +4 -0
  230. package/dist/src/formats/graphml/constants.d.ts.map +1 -1
  231. package/dist/src/formats/graphml/constants.js +5 -1
  232. package/dist/src/formats/graphml/constants.js.map +1 -1
  233. package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
  234. package/dist/src/formats/graphml/exporter.js +133 -65
  235. package/dist/src/formats/graphml/exporter.js.map +1 -1
  236. package/dist/src/formats/graphml/importer.d.ts +4 -1
  237. package/dist/src/formats/graphml/importer.d.ts.map +1 -1
  238. package/dist/src/formats/graphml/importer.js +100 -44
  239. package/dist/src/formats/graphml/importer.js.map +1 -1
  240. package/dist/src/formats/graphml/index.d.ts +1 -0
  241. package/dist/src/formats/graphml/index.d.ts.map +1 -1
  242. package/dist/src/formats/graphml/index.js +1 -0
  243. package/dist/src/formats/graphml/index.js.map +1 -1
  244. package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
  245. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
  246. package/dist/src/formats/graphml/styles-plain.js +187 -0
  247. package/dist/src/formats/graphml/styles-plain.js.map +1 -0
  248. package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
  249. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
  250. package/dist/src/formats/graphml/styles-yed.js +1086 -0
  251. package/dist/src/formats/graphml/styles-yed.js.map +1 -0
  252. package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
  253. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
  254. package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
  255. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
  256. package/dist/src/formats/graphml/tree.d.ts.map +1 -1
  257. package/dist/src/formats/graphml/tree.js +34 -19
  258. package/dist/src/formats/graphml/tree.js.map +1 -1
  259. package/dist/src/formats/graphml/yfiles.d.ts +16 -2
  260. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  261. package/dist/src/formats/graphml/yfiles.js +83 -12
  262. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  263. package/dist/src/formats/json/exporter.d.ts +5 -0
  264. package/dist/src/formats/json/exporter.d.ts.map +1 -1
  265. package/dist/src/formats/json/exporter.js +68 -25
  266. package/dist/src/formats/json/exporter.js.map +1 -1
  267. package/dist/src/formats/json/importer.d.ts +22 -3
  268. package/dist/src/formats/json/importer.d.ts.map +1 -1
  269. package/dist/src/formats/json/importer.js +439 -264
  270. package/dist/src/formats/json/importer.js.map +1 -1
  271. package/dist/src/formats/json/positions.d.ts +16 -0
  272. package/dist/src/formats/json/positions.d.ts.map +1 -0
  273. package/dist/src/formats/json/positions.js +44 -0
  274. package/dist/src/formats/json/positions.js.map +1 -0
  275. package/dist/src/formats/json/styles.d.ts +102 -0
  276. package/dist/src/formats/json/styles.d.ts.map +1 -0
  277. package/dist/src/formats/json/styles.js +1753 -0
  278. package/dist/src/formats/json/styles.js.map +1 -0
  279. package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
  280. package/dist/src/formats/neo4j/exporter.js +2 -1
  281. package/dist/src/formats/neo4j/exporter.js.map +1 -1
  282. package/dist/src/formats/pajek/exporter.d.ts +2 -0
  283. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  284. package/dist/src/formats/pajek/exporter.js +142 -76
  285. package/dist/src/formats/pajek/exporter.js.map +1 -1
  286. package/dist/src/formats/pajek/importer.d.ts +4 -0
  287. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  288. package/dist/src/formats/pajek/importer.js +60 -6
  289. package/dist/src/formats/pajek/importer.js.map +1 -1
  290. package/dist/src/formats/pajek/index.d.ts +2 -0
  291. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  292. package/dist/src/formats/pajek/index.js +2 -0
  293. package/dist/src/formats/pajek/index.js.map +1 -1
  294. package/dist/src/formats/pajek/styles.d.ts +50 -0
  295. package/dist/src/formats/pajek/styles.d.ts.map +1 -0
  296. package/dist/src/formats/pajek/styles.js +569 -0
  297. package/dist/src/formats/pajek/styles.js.map +1 -0
  298. package/dist/src/formats/pajek/syntax.d.ts +6 -0
  299. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  300. package/dist/src/formats/pajek/syntax.js +6 -0
  301. package/dist/src/formats/pajek/syntax.js.map +1 -1
  302. package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
  303. package/dist/src/formats/xgmml/columns.js +34 -9
  304. package/dist/src/formats/xgmml/columns.js.map +1 -1
  305. package/dist/src/formats/xgmml/constants.d.ts +2 -0
  306. package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
  307. package/dist/src/formats/xgmml/constants.js +3 -1
  308. package/dist/src/formats/xgmml/constants.js.map +1 -1
  309. package/dist/src/formats/xgmml/document.d.ts +12 -8
  310. package/dist/src/formats/xgmml/document.d.ts.map +1 -1
  311. package/dist/src/formats/xgmml/document.js +56 -13
  312. package/dist/src/formats/xgmml/document.js.map +1 -1
  313. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  314. package/dist/src/formats/xgmml/emit.js +12 -6
  315. package/dist/src/formats/xgmml/emit.js.map +1 -1
  316. package/dist/src/formats/xgmml/exporter.d.ts +3 -1
  317. package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
  318. package/dist/src/formats/xgmml/exporter.js +22 -9
  319. package/dist/src/formats/xgmml/exporter.js.map +1 -1
  320. package/dist/src/formats/xgmml/importer.d.ts +2 -1
  321. package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
  322. package/dist/src/formats/xgmml/importer.js +31 -24
  323. package/dist/src/formats/xgmml/importer.js.map +1 -1
  324. package/dist/src/formats/xgmml/styles.d.ts +104 -0
  325. package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
  326. package/dist/src/formats/xgmml/styles.js +310 -0
  327. package/dist/src/formats/xgmml/styles.js.map +1 -0
  328. package/dist/src/index.d.ts +9 -7
  329. package/dist/src/index.d.ts.map +1 -1
  330. package/dist/src/index.js +7 -7
  331. package/dist/src/index.js.map +1 -1
  332. package/dist/src/positions/codes.d.ts +31 -0
  333. package/dist/src/positions/codes.d.ts.map +1 -0
  334. package/dist/src/positions/codes.js +26 -0
  335. package/dist/src/positions/codes.js.map +1 -0
  336. package/dist/src/positions/convert.d.ts +58 -0
  337. package/dist/src/positions/convert.d.ts.map +1 -0
  338. package/dist/src/positions/convert.js +107 -0
  339. package/dist/src/positions/convert.js.map +1 -0
  340. package/dist/src/positions/extract.d.ts +27 -0
  341. package/dist/src/positions/extract.d.ts.map +1 -0
  342. package/dist/src/positions/extract.js +526 -0
  343. package/dist/src/positions/extract.js.map +1 -0
  344. package/dist/src/positions/index.d.ts +10 -0
  345. package/dist/src/positions/index.d.ts.map +1 -0
  346. package/dist/src/positions/index.js +9 -0
  347. package/dist/src/positions/index.js.map +1 -0
  348. package/dist/src/positions/types.d.ts +208 -0
  349. package/dist/src/positions/types.d.ts.map +1 -0
  350. package/dist/src/positions/types.js +10 -0
  351. package/dist/src/positions/types.js.map +1 -0
  352. package/dist/src/registry.d.ts +30 -0
  353. package/dist/src/registry.d.ts.map +1 -1
  354. package/dist/src/registry.js +130 -9
  355. package/dist/src/registry.js.map +1 -1
  356. package/dist/src/styles/annotations.d.ts +132 -0
  357. package/dist/src/styles/annotations.d.ts.map +1 -0
  358. package/dist/src/styles/annotations.js +320 -0
  359. package/dist/src/styles/annotations.js.map +1 -0
  360. package/dist/src/styles/budget.d.ts +45 -0
  361. package/dist/src/styles/budget.d.ts.map +1 -0
  362. package/dist/src/styles/budget.js +58 -0
  363. package/dist/src/styles/budget.js.map +1 -0
  364. package/dist/src/styles/canon/bends.d.ts +32 -0
  365. package/dist/src/styles/canon/bends.d.ts.map +1 -0
  366. package/dist/src/styles/canon/bends.js +74 -0
  367. package/dist/src/styles/canon/bends.js.map +1 -0
  368. package/dist/src/styles/canon/color-tables.d.ts +22 -0
  369. package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
  370. package/dist/src/styles/canon/color-tables.js +369 -0
  371. package/dist/src/styles/canon/color-tables.js.map +1 -0
  372. package/dist/src/styles/canon/color.d.ts +66 -0
  373. package/dist/src/styles/canon/color.d.ts.map +1 -0
  374. package/dist/src/styles/canon/color.js +548 -0
  375. package/dist/src/styles/canon/color.js.map +1 -0
  376. package/dist/src/styles/canon/enums.d.ts +25 -0
  377. package/dist/src/styles/canon/enums.d.ts.map +1 -0
  378. package/dist/src/styles/canon/enums.js +187 -0
  379. package/dist/src/styles/canon/enums.js.map +1 -0
  380. package/dist/src/styles/canon/graphviz.d.ts +48 -0
  381. package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
  382. package/dist/src/styles/canon/graphviz.js +160 -0
  383. package/dist/src/styles/canon/graphviz.js.map +1 -0
  384. package/dist/src/styles/canon/index.d.ts +13 -0
  385. package/dist/src/styles/canon/index.d.ts.map +1 -0
  386. package/dist/src/styles/canon/index.js +13 -0
  387. package/dist/src/styles/canon/index.js.map +1 -0
  388. package/dist/src/styles/canon/number.d.ts +59 -0
  389. package/dist/src/styles/canon/number.d.ts.map +1 -0
  390. package/dist/src/styles/canon/number.js +142 -0
  391. package/dist/src/styles/canon/number.js.map +1 -0
  392. package/dist/src/styles/canon/site.d.ts +51 -0
  393. package/dist/src/styles/canon/site.d.ts.map +1 -0
  394. package/dist/src/styles/canon/site.js +63 -0
  395. package/dist/src/styles/canon/site.js.map +1 -0
  396. package/dist/src/styles/canon/text.d.ts +61 -0
  397. package/dist/src/styles/canon/text.d.ts.map +1 -0
  398. package/dist/src/styles/canon/text.js +199 -0
  399. package/dist/src/styles/canon/text.js.map +1 -0
  400. package/dist/src/styles/codes.d.ts +95 -0
  401. package/dist/src/styles/codes.d.ts.map +1 -0
  402. package/dist/src/styles/codes.js +97 -0
  403. package/dist/src/styles/codes.js.map +1 -0
  404. package/dist/src/styles/cyjs/cascade.d.ts +134 -0
  405. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
  406. package/dist/src/styles/cyjs/cascade.js +2252 -0
  407. package/dist/src/styles/cyjs/cascade.js.map +1 -0
  408. package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
  409. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
  410. package/dist/src/styles/cyjs/defaults-table.js +76 -0
  411. package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
  412. package/dist/src/styles/cyjs/emit.d.ts +82 -0
  413. package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
  414. package/dist/src/styles/cyjs/emit.js +791 -0
  415. package/dist/src/styles/cyjs/emit.js.map +1 -0
  416. package/dist/src/styles/cyjs/index.d.ts +13 -0
  417. package/dist/src/styles/cyjs/index.d.ts.map +1 -0
  418. package/dist/src/styles/cyjs/index.js +13 -0
  419. package/dist/src/styles/cyjs/index.js.map +1 -0
  420. package/dist/src/styles/cyjs/live.d.ts +46 -0
  421. package/dist/src/styles/cyjs/live.d.ts.map +1 -0
  422. package/dist/src/styles/cyjs/live.js +108 -0
  423. package/dist/src/styles/cyjs/live.js.map +1 -0
  424. package/dist/src/styles/cyjs/mappers.d.ts +147 -0
  425. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
  426. package/dist/src/styles/cyjs/mappers.js +744 -0
  427. package/dist/src/styles/cyjs/mappers.js.map +1 -0
  428. package/dist/src/styles/cyjs/selector.d.ts +113 -0
  429. package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
  430. package/dist/src/styles/cyjs/selector.js +611 -0
  431. package/dist/src/styles/cyjs/selector.js.map +1 -0
  432. package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
  433. package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
  434. package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
  435. package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
  436. package/dist/src/styles/cytoscape/emit.d.ts +125 -0
  437. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
  438. package/dist/src/styles/cytoscape/emit.js +1025 -0
  439. package/dist/src/styles/cytoscape/emit.js.map +1 -0
  440. package/dist/src/styles/cytoscape/index.d.ts +10 -0
  441. package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
  442. package/dist/src/styles/cytoscape/index.js +10 -0
  443. package/dist/src/styles/cytoscape/index.js.map +1 -0
  444. package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
  445. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
  446. package/dist/src/styles/cytoscape/lexicon.js +605 -0
  447. package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
  448. package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
  449. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
  450. package/dist/src/styles/cytoscape/mappings.js +460 -0
  451. package/dist/src/styles/cytoscape/mappings.js.map +1 -0
  452. package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
  453. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
  454. package/dist/src/styles/cytoscape/resolve.js +381 -0
  455. package/dist/src/styles/cytoscape/resolve.js.map +1 -0
  456. package/dist/src/styles/cytoscape/translate.d.ts +50 -0
  457. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
  458. package/dist/src/styles/cytoscape/translate.js +156 -0
  459. package/dist/src/styles/cytoscape/translate.js.map +1 -0
  460. package/dist/src/styles/defaults.d.ts +90 -0
  461. package/dist/src/styles/defaults.d.ts.map +1 -0
  462. package/dist/src/styles/defaults.js +414 -0
  463. package/dist/src/styles/defaults.js.map +1 -0
  464. package/dist/src/styles/index.d.ts +15 -0
  465. package/dist/src/styles/index.d.ts.map +1 -0
  466. package/dist/src/styles/index.js +14 -0
  467. package/dist/src/styles/index.js.map +1 -0
  468. package/dist/src/styles/internal.d.ts +17 -0
  469. package/dist/src/styles/internal.d.ts.map +1 -0
  470. package/dist/src/styles/internal.js +16 -0
  471. package/dist/src/styles/internal.js.map +1 -0
  472. package/dist/src/styles/io/approximations.d.ts +24 -0
  473. package/dist/src/styles/io/approximations.d.ts.map +1 -0
  474. package/dist/src/styles/io/approximations.js +51 -0
  475. package/dist/src/styles/io/approximations.js.map +1 -0
  476. package/dist/src/styles/io/block.d.ts +166 -0
  477. package/dist/src/styles/io/block.d.ts.map +1 -0
  478. package/dist/src/styles/io/block.js +930 -0
  479. package/dist/src/styles/io/block.js.map +1 -0
  480. package/dist/src/styles/io/generic.d.ts +88 -0
  481. package/dist/src/styles/io/generic.d.ts.map +1 -0
  482. package/dist/src/styles/io/generic.js +516 -0
  483. package/dist/src/styles/io/generic.js.map +1 -0
  484. package/dist/src/styles/io/index.d.ts +8 -0
  485. package/dist/src/styles/io/index.d.ts.map +1 -0
  486. package/dist/src/styles/io/index.js +7 -0
  487. package/dist/src/styles/io/index.js.map +1 -0
  488. package/dist/src/styles/io/writer.d.ts +89 -0
  489. package/dist/src/styles/io/writer.d.ts.map +1 -0
  490. package/dist/src/styles/io/writer.js +626 -0
  491. package/dist/src/styles/io/writer.js.map +1 -0
  492. package/dist/src/styles/notes.d.ts +47 -0
  493. package/dist/src/styles/notes.d.ts.map +1 -0
  494. package/dist/src/styles/notes.js +140 -0
  495. package/dist/src/styles/notes.js.map +1 -0
  496. package/dist/src/styles/plan/classes.d.ts +31 -0
  497. package/dist/src/styles/plan/classes.d.ts.map +1 -0
  498. package/dist/src/styles/plan/classes.js +139 -0
  499. package/dist/src/styles/plan/classes.js.map +1 -0
  500. package/dist/src/styles/plan/continuous.d.ts +32 -0
  501. package/dist/src/styles/plan/continuous.d.ts.map +1 -0
  502. package/dist/src/styles/plan/continuous.js +165 -0
  503. package/dist/src/styles/plan/continuous.js.map +1 -0
  504. package/dist/src/styles/plan/discrete.d.ts +39 -0
  505. package/dist/src/styles/plan/discrete.d.ts.map +1 -0
  506. package/dist/src/styles/plan/discrete.js +127 -0
  507. package/dist/src/styles/plan/discrete.js.map +1 -0
  508. package/dist/src/styles/plan/families.d.ts +31 -0
  509. package/dist/src/styles/plan/families.d.ts.map +1 -0
  510. package/dist/src/styles/plan/families.js +95 -0
  511. package/dist/src/styles/plan/families.js.map +1 -0
  512. package/dist/src/styles/plan/features.d.ts +58 -0
  513. package/dist/src/styles/plan/features.d.ts.map +1 -0
  514. package/dist/src/styles/plan/features.js +185 -0
  515. package/dist/src/styles/plan/features.js.map +1 -0
  516. package/dist/src/styles/plan/index.d.ts +7 -0
  517. package/dist/src/styles/plan/index.d.ts.map +1 -0
  518. package/dist/src/styles/plan/index.js +7 -0
  519. package/dist/src/styles/plan/index.js.map +1 -0
  520. package/dist/src/styles/plan/plan.d.ts +71 -0
  521. package/dist/src/styles/plan/plan.d.ts.map +1 -0
  522. package/dist/src/styles/plan/plan.js +893 -0
  523. package/dist/src/styles/plan/plan.js.map +1 -0
  524. package/dist/src/styles/plan/resolve.d.ts +137 -0
  525. package/dist/src/styles/plan/resolve.d.ts.map +1 -0
  526. package/dist/src/styles/plan/resolve.js +587 -0
  527. package/dist/src/styles/plan/resolve.js.map +1 -0
  528. package/dist/src/styles/types.d.ts +702 -0
  529. package/dist/src/styles/types.d.ts.map +1 -0
  530. package/dist/src/styles/types.js +10 -0
  531. package/dist/src/styles/types.js.map +1 -0
  532. package/dist/src/styles/vocabulary.d.ts +41 -0
  533. package/dist/src/styles/vocabulary.d.ts.map +1 -0
  534. package/dist/src/styles/vocabulary.js +140 -0
  535. package/dist/src/styles/vocabulary.js.map +1 -0
  536. package/dist/src/types.d.ts +64 -1
  537. package/dist/src/types.d.ts.map +1 -1
  538. package/dist/src/types.js.map +1 -1
  539. package/dist/styles.d.ts +1 -0
  540. package/dist/styles.js +322 -0
  541. package/dist/styles.js.map +1 -0
  542. package/dist/xgmml.js +5 -4
  543. package/dist/xgmml.js.map +1 -1
  544. package/package.json +13 -2
  545. package/src/common/codes.ts +7 -0
  546. package/src/common/escape.ts +5 -2
  547. package/src/common/export.ts +179 -140
  548. package/src/common/input.ts +8 -4
  549. package/src/common/json-elements.ts +169 -38
  550. package/src/common/notes.ts +94 -0
  551. package/src/common/report.ts +41 -1
  552. package/src/common/units.ts +42 -0
  553. package/src/common/xml.ts +45 -5
  554. package/src/formats/cx/exporter.ts +95 -11
  555. package/src/formats/cx/importer.ts +126 -90
  556. package/src/formats/cx/styles.ts +304 -0
  557. package/src/formats/cx2/exporter.ts +234 -77
  558. package/src/formats/cx2/importer.ts +19 -1
  559. package/src/formats/cx2/styles.ts +29 -0
  560. package/src/formats/cys/constants.ts +3 -0
  561. package/src/formats/cys/exporter.ts +246 -60
  562. package/src/formats/cys/importer.ts +125 -9
  563. package/src/formats/cys/session.ts +6 -0
  564. package/src/formats/cys/styles.ts +254 -0
  565. package/src/formats/cys/tables.ts +117 -48
  566. package/src/formats/dot/exporter.ts +262 -126
  567. package/src/formats/dot/importer.ts +111 -20
  568. package/src/formats/dot/index.ts +1 -0
  569. package/src/formats/dot/positions.ts +77 -0
  570. package/src/formats/dot/styles.ts +1755 -0
  571. package/src/formats/gexf/exporter.ts +27 -11
  572. package/src/formats/gexf/importer.ts +308 -158
  573. package/src/formats/gexf/index.ts +10 -0
  574. package/src/formats/gexf/schema.ts +5 -0
  575. package/src/formats/gexf/styles.ts +719 -0
  576. package/src/formats/gml/exporter.ts +33 -14
  577. package/src/formats/gml/importer.ts +4 -0
  578. package/src/formats/gml/index.ts +2 -1
  579. package/src/formats/gml/positions.ts +52 -0
  580. package/src/formats/gml/styles.ts +1248 -0
  581. package/src/formats/gml/syntax.ts +173 -62
  582. package/src/formats/graphml/constants.ts +5 -0
  583. package/src/formats/graphml/exporter.ts +163 -71
  584. package/src/formats/graphml/importer.ts +119 -45
  585. package/src/formats/graphml/index.ts +1 -0
  586. package/src/formats/graphml/styles-plain.ts +236 -0
  587. package/src/formats/graphml/styles-yed.ts +1221 -0
  588. package/src/formats/graphml/styles-yfiles3.ts +573 -0
  589. package/src/formats/graphml/tree.ts +36 -20
  590. package/src/formats/graphml/yfiles.ts +89 -13
  591. package/src/formats/json/exporter.ts +76 -26
  592. package/src/formats/json/importer.ts +541 -322
  593. package/src/formats/json/positions.ts +50 -0
  594. package/src/formats/json/styles.ts +2082 -0
  595. package/src/formats/neo4j/exporter.ts +2 -1
  596. package/src/formats/pajek/exporter.ts +195 -106
  597. package/src/formats/pajek/importer.ts +78 -9
  598. package/src/formats/pajek/index.ts +2 -0
  599. package/src/formats/pajek/styles.ts +685 -0
  600. package/src/formats/pajek/syntax.ts +7 -0
  601. package/src/formats/xgmml/columns.ts +39 -9
  602. package/src/formats/xgmml/constants.ts +3 -0
  603. package/src/formats/xgmml/document.ts +54 -12
  604. package/src/formats/xgmml/emit.ts +11 -6
  605. package/src/formats/xgmml/exporter.ts +32 -13
  606. package/src/formats/xgmml/importer.ts +43 -29
  607. package/src/formats/xgmml/styles.ts +400 -0
  608. package/src/index.ts +16 -0
  609. package/src/positions/codes.ts +32 -0
  610. package/src/positions/convert.ts +123 -0
  611. package/src/positions/extract.ts +619 -0
  612. package/src/positions/index.ts +23 -0
  613. package/src/positions/types.ts +221 -0
  614. package/src/registry.ts +179 -8
  615. package/src/styles/annotations.ts +478 -0
  616. package/src/styles/budget.ts +60 -0
  617. package/src/styles/canon/bends.ts +84 -0
  618. package/src/styles/canon/color-tables.ts +386 -0
  619. package/src/styles/canon/color.ts +624 -0
  620. package/src/styles/canon/enums.ts +211 -0
  621. package/src/styles/canon/graphviz.ts +189 -0
  622. package/src/styles/canon/index.ts +13 -0
  623. package/src/styles/canon/number.ts +152 -0
  624. package/src/styles/canon/site.ts +87 -0
  625. package/src/styles/canon/text.ts +221 -0
  626. package/src/styles/codes.ts +104 -0
  627. package/src/styles/cyjs/cascade.ts +2670 -0
  628. package/src/styles/cyjs/defaults-table.ts +82 -0
  629. package/src/styles/cyjs/emit.ts +952 -0
  630. package/src/styles/cyjs/index.ts +37 -0
  631. package/src/styles/cyjs/live.ts +147 -0
  632. package/src/styles/cyjs/mappers.ts +879 -0
  633. package/src/styles/cyjs/selector.ts +778 -0
  634. package/src/styles/cyjs/stylesheet-text.ts +214 -0
  635. package/src/styles/cytoscape/emit.ts +1264 -0
  636. package/src/styles/cytoscape/index.ts +40 -0
  637. package/src/styles/cytoscape/lexicon.ts +658 -0
  638. package/src/styles/cytoscape/mappings.ts +603 -0
  639. package/src/styles/cytoscape/resolve.ts +521 -0
  640. package/src/styles/cytoscape/translate.ts +237 -0
  641. package/src/styles/defaults.ts +504 -0
  642. package/src/styles/index.ts +57 -0
  643. package/src/styles/internal.ts +17 -0
  644. package/src/styles/io/approximations.ts +47 -0
  645. package/src/styles/io/block.ts +1138 -0
  646. package/src/styles/io/generic.ts +687 -0
  647. package/src/styles/io/index.ts +18 -0
  648. package/src/styles/io/writer.ts +780 -0
  649. package/src/styles/notes.ts +165 -0
  650. package/src/styles/plan/classes.ts +166 -0
  651. package/src/styles/plan/continuous.ts +218 -0
  652. package/src/styles/plan/discrete.ts +165 -0
  653. package/src/styles/plan/families.ts +115 -0
  654. package/src/styles/plan/features.ts +234 -0
  655. package/src/styles/plan/index.ts +7 -0
  656. package/src/styles/plan/plan.ts +1129 -0
  657. package/src/styles/plan/resolve.ts +685 -0
  658. package/src/styles/types.ts +814 -0
  659. package/src/styles/vocabulary.ts +172 -0
  660. package/src/types.ts +76 -1
  661. package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
  662. package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
  663. package/dist/chunks/export-rKLeGQMo.js.map +0 -1
  664. package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
  665. package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
  666. package/dist/chunks/exporter-RVtXVetw.js.map +0 -1
  667. package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
  668. package/dist/chunks/importer-C98dpSH4.js.map +0 -1
  669. package/dist/chunks/importer-D794XUTe.js.map +0 -1
  670. package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
  671. package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
  672. package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
  673. package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
  674. package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
@@ -1,9 +1,13 @@
1
1
  import { GraphFormatError, INVALID_INDEX } from "@graphty/graph-format";
2
- import { L as LOSS, r as resolveExportOptions, aE as sanitizeIds, a as checkCapabilities, p as pairFolding, b as plural, $ as agree, c as capabilities, a9 as idText, e as explicitWeights, av as formatNumber, aF as formatDecimal, aa as formatF32, aG as formatInteger, aH as canonicalId, P as PRECISION_CODE, o as DUPLICATE_ATTRIBUTE_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, R as ROLE_TAKEN_CODE, ay as RENAMED_CODE, I as ID_MERGED_CODE, n as DUPLICATE_NODE_CODE, ak as SYNTAX_CODE, ae as AMBIGUOUS_GRAPH_NAME_CODE, af as GRAPH_NOT_FOUND_CODE, l as MULTIPLE_GRAPHS_CODE, w as UNKNOWN_ENCODING_CODE, x as ENCODING_FALLBACK_CODE, y as INVALID_ENCODING_CODE, z as INVALID_UTF8_CODE, F as ELEMENT_ISSUE, G as INPUT_ISSUE, al as resolveImportOptions, a8 as ImportReportBuilder, an as reportUnusedOptions, az as LineReader, am as throwIfAborted, ap as graphChosen, ao as reportSinkOptions, aq as DirectionResolver, ar as IdCoercer, a0 as uniqueColumnName, a1 as declareResolved, aI as coerceIdText, aJ as isWeightField, aK as parseWeightText } from "./export-rKLeGQMo.js";
3
- import { i as isPajekLabel, q as quotePajekLabel } from "./escape-B62ZGM_a.js";
4
- import { i as inferTextDtype, W as WIDENING_UNSUPPORTED_CODE, a as isNumericText, T as TextCellWriter } from "./text-DHOJXnED.js";
2
+ import { L as LOSS, c as capabilities, r as resolveExportOptions, G as sanitizeIds, p as pairFolding, a as checkCapabilities, e as explicitWeights, a1 as canonicalId, R as RENAMED_CODE, g as resolveImportOptions, i as reportUnusedOptions, P as LineReader, h as throwIfAborted, k as graphChosen, j as reportSinkOptions, l as DirectionResolver, I as IdCoercer, u as uniqueColumnName, d as declareResolved, a3 as coerceIdText, o as isWeightField, s as parseWeightText } from "./export-BvqAXCKh.js";
3
+ import { g as isPajekLabel, j as quotePajekLabel } from "./escape-CgzxiYPg.js";
4
+ import { p as plural, a as agree, _ as idText, ab as formatNumber, aO as formatDecimal, $ as formatF32, ad as formatInteger, P as PRECISION_CODE, l as DUPLICATE_ATTRIBUTE_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, R as ROLE_TAKEN_CODE, I as ID_MERGED_CODE, k as DUPLICATE_NODE_CODE, a8 as SYNTAX_CODE, a2 as AMBIGUOUS_GRAPH_NAME_CODE, a3 as GRAPH_NOT_FOUND_CODE, i as MULTIPLE_GRAPHS_CODE, s as UNKNOWN_ENCODING_CODE, t as ENCODING_FALLBACK_CODE, u as INVALID_ENCODING_CODE, v as INVALID_UTF8_CODE, y as ELEMENT_ISSUE, z as INPUT_ISSUE, Z as ImportReportBuilder } from "./format-BpQBx8MZ.js";
5
+ import { i as inferTextDtype, W as WIDENING_UNSUPPORTED_CODE, a as isNumericText, T as TextCellWriter } from "./text-CzJNFOS9.js";
5
6
  import { j as joinText, e as encodeChunks } from "./writer-DxjgHwSe.js";
6
- import { i as importChosenGraph } from "./choose-DvpbdRuz.js";
7
+ import { i as importChosenGraph } from "./choose--jM0yYCo.js";
8
+ import { w as writeStyleBlock, c as styleBlockLosses, t as StyleNotes, p as plainCell, u as parseStyleBlock, s as styleFingerprint, v as blockStyles, r as resolveStyles, o as canonText, l as canonEnum, h as canonNumber, g as canonColor, x as colorOpacity, D as DVIPS_COLORS } from "./block-CPCHkX42.js";
9
+ import { S as StyleApproximations } from "./approximations-DJMHdDvv.js";
10
+ import { v as valueColumns } from "./styles-yed-Cz9rLBCP.js";
7
11
  const LABEL_COLUMN = "label";
8
12
  const POSITION_COLUMN = "position";
9
13
  const SHAPE_COLUMN = "shape";
@@ -13,7 +17,7 @@ const VALUE_COLUMN = "value";
13
17
  const VALUE_FIELD = "value";
14
18
  const PARTITION_COLUMN = "partition";
15
19
  const VECTOR_COLUMN = "vector";
16
- const SHAPES = /* @__PURE__ */ new Set([
20
+ const SHAPES$1 = /* @__PURE__ */ new Set([
17
21
  "ellipse",
18
22
  "box",
19
23
  "diamond",
@@ -25,9 +29,10 @@ const SHAPES = /* @__PURE__ */ new Set([
25
29
  "woman"
26
30
  ]);
27
31
  function isShapeKeyword(token) {
28
- return SHAPES.has(token.toLowerCase());
32
+ return SHAPES$1.has(token.toLowerCase());
29
33
  }
30
34
  const ORIGINAL_ID_KEY = "graphty_originalId";
35
+ const PAJEK_STYLE_COMMENT = "% graphty.styles ";
31
36
  const SECTION_KINDS = /* @__PURE__ */ new Map([
32
37
  ["network", "network"],
33
38
  ["vertices", "vertices"],
@@ -321,6 +326,406 @@ function isParameterKey(text) {
321
326
  }
322
327
  return !/^[+-]?(\.\d|\d)/.test(text) && !/^[+-]?(?:nan|inf|infinity)$/i.test(text);
323
328
  }
329
+ const PAJEK_STYLE_CAPABILITIES = Object.freeze({
330
+ node: Object.freeze([
331
+ "label",
332
+ "fill",
333
+ "fillOpacity",
334
+ "opacity",
335
+ "borderColor",
336
+ "borderWidth",
337
+ "shape",
338
+ "width",
339
+ "height",
340
+ "labelColor",
341
+ "labelSize"
342
+ ]),
343
+ edge: Object.freeze(["color", "opacity", "width", "lineStyle", "sourceArrow", "targetArrow"]),
344
+ block: "native"
345
+ });
346
+ const VERTEX_SIZE = 5;
347
+ const NODE_KEYS = ["ic", "bc", "bw", "x_fact", "y_fact", "lc", "fos"];
348
+ const EDGE_KEYS = ["c", "w", "p"];
349
+ const DIRECTED_KEY = "directed";
350
+ const READ = {
351
+ node: [
352
+ "label",
353
+ "shape",
354
+ "fill",
355
+ "fillOpacity",
356
+ "borderColor",
357
+ "borderWidth",
358
+ "width",
359
+ "height",
360
+ "labelColor",
361
+ "labelSize"
362
+ ],
363
+ edge: ["color", "opacity", "width", "lineStyle"]
364
+ };
365
+ function readColor(raw, property, opacity, put, at) {
366
+ if (raw === null) {
367
+ return;
368
+ }
369
+ const c = canonColor(raw, "dvips", at(property));
370
+ if (c === null) {
371
+ return;
372
+ }
373
+ put(property, c.color);
374
+ const alpha = colorOpacity(c, null, at(property), opacity !== null);
375
+ if (opacity !== null) {
376
+ put(opacity, alpha);
377
+ }
378
+ }
379
+ function readNumber(raw, property, put, at) {
380
+ if (raw !== null) {
381
+ put(property, canonNumber(raw, at(property)));
382
+ }
383
+ }
384
+ function readVertex(get, put, at) {
385
+ const label = get(LABEL_COLUMN);
386
+ if (label !== null && label !== "") {
387
+ put("label", canonText(label, at("label")));
388
+ }
389
+ const shape = get(SHAPE_COLUMN);
390
+ if (shape !== null) {
391
+ put("shape", canonEnum("shape", shape, "dvips", at("shape")));
392
+ }
393
+ readColor(get("ic"), "fill", "fillOpacity", put, at);
394
+ readColor(get("bc"), "borderColor", null, put, at);
395
+ const bw = get("bw");
396
+ if (bw !== null) {
397
+ const width = canonNumber(bw, at("borderWidth"));
398
+ put("borderWidth", width === null ? null : width / VERTEX_SIZE);
399
+ }
400
+ readNumber(get("x_fact"), "width", put, at);
401
+ readNumber(get("y_fact"), "height", put, at);
402
+ readColor(get("lc"), "labelColor", null, put, at);
403
+ readNumber(get("fos"), "labelSize", put, at);
404
+ }
405
+ function readLine(get, put, at) {
406
+ readColor(get("c"), "color", "opacity", put, at);
407
+ readNumber(get("w"), "width", put, at);
408
+ const p = get("p");
409
+ if (p !== null) {
410
+ put("lineStyle", canonEnum("lineStyle", p, "dvips", at("lineStyle")));
411
+ }
412
+ }
413
+ function cells(table, i) {
414
+ return (key) => table.has(key) ? plainCell(table.value(key, i)) : null;
415
+ }
416
+ function directedEdges(snapshot) {
417
+ const out = new Array(snapshot.edgeCount).fill(snapshot.directed);
418
+ const col = snapshot.directed ? snapshot.edges.byRole("directed") : null;
419
+ if (col !== null) {
420
+ for (let e = 0; e < snapshot.edgeCount; e++) {
421
+ out[e] = plainCell(col.value(e)) !== false;
422
+ }
423
+ }
424
+ return out;
425
+ }
426
+ function styleColumns(table, keys) {
427
+ return keys.filter((k) => table.has(k));
428
+ }
429
+ function pajekStyles(snapshot, context) {
430
+ const notes = new StyleNotes();
431
+ const read = (target) => {
432
+ const table = target === "node" ? snapshot.nodes : snapshot.edges;
433
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
434
+ const out = valueColumns(n);
435
+ for (let i = 0; i < n; i++) {
436
+ context.budget.spend(target, 1);
437
+ const at = (property) => ({ notes, target, property, element: i, budget: context.budget });
438
+ (target === "node" ? readVertex : readLine)(
439
+ cells(table, i),
440
+ (property, value) => {
441
+ out.put(i, property, value);
442
+ },
443
+ at
444
+ );
445
+ }
446
+ return out.values;
447
+ };
448
+ const node = read("node");
449
+ const edge = read("edge");
450
+ const block = typeof context.kept === "string" ? context.kept : null;
451
+ if (block !== null) {
452
+ exactFromBlock(snapshot, block, { node, edge });
453
+ }
454
+ const rules = [];
455
+ const columns = /* @__PURE__ */ new Map();
456
+ const directed = directedEdges(snapshot);
457
+ if (directed.some(Boolean)) {
458
+ columns.set(
459
+ DIRECTED_KEY,
460
+ directed.map((d) => d ? true : null)
461
+ );
462
+ rules.push({
463
+ id: "edge.tool.arrow",
464
+ target: "edge",
465
+ role: "group",
466
+ origin: "tool",
467
+ where: { has: { style: DIRECTED_KEY } },
468
+ set: { targetArrow: "triangle" }
469
+ });
470
+ }
471
+ return {
472
+ canonical: true,
473
+ dialect: "dvips",
474
+ tool: "pajek",
475
+ units: "relative",
476
+ node: { values: node },
477
+ edge: { values: edge, rules, columns },
478
+ notes: notes.list(),
479
+ block,
480
+ readFrom: {
481
+ node: styleColumns(snapshot.nodes, [SHAPE_COLUMN, ...NODE_KEYS]),
482
+ edge: styleColumns(snapshot.edges, EDGE_KEYS)
483
+ }
484
+ };
485
+ }
486
+ const SHAPES = /* @__PURE__ */ new Map([
487
+ ["ellipse", "ellipse"],
488
+ ["rectangle", "box"],
489
+ ["diamond", "diamond"],
490
+ ["triangle", "triangle"],
491
+ ["none", "empty"],
492
+ ["other:cross", "cross"],
493
+ ["other:house", "house"],
494
+ ["other:man", "man"],
495
+ ["other:woman", "woman"]
496
+ ]);
497
+ const NEAREST_SHAPES = /* @__PURE__ */ new Map([
498
+ ["round-rectangle", "box"],
499
+ ["parallelogram", "box"],
500
+ ["trapezoid", "box"],
501
+ ["vee", "triangle"]
502
+ ]);
503
+ const DVIPS_NAMES = new Map(
504
+ [...DVIPS_COLORS].reverse().map(([name, hex]) => [hex, name])
505
+ );
506
+ function pajekColorText(color) {
507
+ return DVIPS_NAMES.get(color) ?? `RGB${color.slice(1).toUpperCase()}`;
508
+ }
509
+ function opaque(get, properties, approximate) {
510
+ for (const property of properties) {
511
+ const v = get(property);
512
+ if (v !== null && v !== 1) {
513
+ approximate(property, v);
514
+ }
515
+ }
516
+ }
517
+ function shapeKeyword(get, approximate) {
518
+ const shape = get("shape");
519
+ if (typeof shape !== "string") {
520
+ return "ellipse";
521
+ }
522
+ const keyword = SHAPES.get(shape);
523
+ if (keyword !== void 0) {
524
+ return keyword;
525
+ }
526
+ approximate("shape", shape);
527
+ return NEAREST_SHAPES.get(shape) ?? "ellipse";
528
+ }
529
+ function vertexParams(get, approximate) {
530
+ const out = /* @__PURE__ */ new Map();
531
+ opaque(get, ["fillOpacity", "opacity"], approximate);
532
+ const keyword = shapeKeyword(get, approximate);
533
+ if (keyword !== "ellipse") {
534
+ out.set(SHAPE_COLUMN, keyword);
535
+ }
536
+ const colors = [
537
+ ["fill", "ic"],
538
+ ["borderColor", "bc"],
539
+ ["labelColor", "lc"]
540
+ ];
541
+ const numbers = [
542
+ ["width", "x_fact"],
543
+ ["height", "y_fact"],
544
+ ["labelSize", "fos"]
545
+ ];
546
+ for (const [property, key] of colors) {
547
+ const v = get(property);
548
+ if (typeof v === "string" && !(property === "borderColor" && v === "#000000")) {
549
+ out.set(key, pajekColorText(v));
550
+ }
551
+ }
552
+ for (const [property, key] of numbers) {
553
+ const v = get(property);
554
+ if (typeof v === "number") {
555
+ out.set(key, v);
556
+ }
557
+ }
558
+ const bw = get("borderWidth");
559
+ if (typeof bw === "number") {
560
+ const written = Number((bw * VERTEX_SIZE).toPrecision(15));
561
+ if (written === 1) {
562
+ out.delete("bw");
563
+ } else {
564
+ out.set("bw", written);
565
+ }
566
+ }
567
+ return out;
568
+ }
569
+ function lineParams(get, directed, approximate) {
570
+ const out = /* @__PURE__ */ new Map();
571
+ opaque(get, ["opacity"], approximate);
572
+ const color = get("color");
573
+ if (typeof color === "string" && color !== "#000000") {
574
+ out.set("c", pajekColorText(color));
575
+ }
576
+ const width = get("width");
577
+ if (typeof width === "number") {
578
+ out.set("w", width);
579
+ }
580
+ const lineStyle = get("lineStyle");
581
+ if (typeof lineStyle === "string" && lineStyle !== "solid" && pajekDots(lineStyle, approximate)) {
582
+ out.set("p", "Dots");
583
+ }
584
+ const target = get("targetArrow");
585
+ if (target !== null && target !== (directed ? "triangle" : "none")) {
586
+ approximate("targetArrow", target);
587
+ }
588
+ const source = get("sourceArrow");
589
+ if (source !== null && source !== "none") {
590
+ approximate("sourceArrow", source);
591
+ }
592
+ return out;
593
+ }
594
+ function pajekDots(lineStyle, approximate) {
595
+ if (lineStyle === "dotted") {
596
+ return true;
597
+ }
598
+ approximate("lineStyle", lineStyle);
599
+ return lineStyle === "dashed" || lineStyle === "dash-dot" || lineStyle === "long-dash";
600
+ }
601
+ function getter(picture, target) {
602
+ const columns = /* @__PURE__ */ new Map();
603
+ for (const p of PAJEK_STYLE_CAPABILITIES[target]) {
604
+ columns.set(p, picture(target, p));
605
+ }
606
+ return (i) => (property) => columns.get(property)?.[i] ?? null;
607
+ }
608
+ function exactFromBlock(snapshot, text, read) {
609
+ const parsed = parseStyleBlock(text, styleFingerprint(snapshot));
610
+ const ex = parsed.ok ? blockStyles(parsed.block, snapshot, "pajek") : null;
611
+ if (ex === null) {
612
+ return;
613
+ }
614
+ const notes = new StyleNotes();
615
+ const directed = directedEdges(snapshot);
616
+ for (const target of ["node", "edge"]) {
617
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
618
+ const get = getter((t, p) => resolveStyles(ex, t, p, snapshot), target);
619
+ const values = read[target];
620
+ for (let i = 0; i < n; i++) {
621
+ const want = get(i);
622
+ const back = writtenAndReadBack(target, want, directed[i], notes);
623
+ for (const property of READ[target]) {
624
+ const native = values[property]?.[i] ?? null;
625
+ const w = want(property);
626
+ if (w !== null && native !== w && native === (back.get(property) ?? null)) {
627
+ values[property] ??= new Array(n).fill(null);
628
+ values[property][i] = w;
629
+ }
630
+ }
631
+ }
632
+ }
633
+ }
634
+ function writtenAndReadBack(target, want, directed, notes) {
635
+ const ignore = () => void 0;
636
+ const params = target === "node" ? vertexParams(want, ignore) : lineParams(want, directed, ignore);
637
+ const back = /* @__PURE__ */ new Map();
638
+ const label = target === "node" ? want("label") : null;
639
+ if (typeof label === "string") {
640
+ params.set(LABEL_COLUMN, pajekLabelText(label));
641
+ }
642
+ (target === "node" ? readVertex : readLine)(
643
+ (key) => params.get(key) ?? null,
644
+ (property, value) => {
645
+ if (value !== null) {
646
+ back.set(property, value);
647
+ }
648
+ },
649
+ (property) => ({ notes, target, property })
650
+ );
651
+ return back;
652
+ }
653
+ function pajekStyledExport(snapshot, input) {
654
+ if (input === void 0) {
655
+ return null;
656
+ }
657
+ const approximated = new StyleApproximations();
658
+ const out = snapshot.withColumns();
659
+ const directed = directedEdges(snapshot);
660
+ for (const target of ["node", "edge"]) {
661
+ const table = target === "node" ? out.nodes : out.edges;
662
+ const approximate = (property, value) => {
663
+ approximated.add(target, property, value);
664
+ };
665
+ const get = getter((t, p) => input.picture(t, p), target);
666
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
667
+ const params = (i) => target === "node" ? vertexParams(get(i), approximate) : lineParams(get(i), directed[i], approximate);
668
+ replaceParamColumns(
669
+ table,
670
+ target === "node" ? [SHAPE_COLUMN, ...NODE_KEYS] : EDGE_KEYS,
671
+ paramColumns(n, params)
672
+ );
673
+ }
674
+ out.nodes.set(
675
+ LABEL_COLUMN,
676
+ drawnLabels(input, snapshot.nodeCount, approximated),
677
+ { dtype: "string", role: "label" },
678
+ {
679
+ replaceRole: true
680
+ }
681
+ );
682
+ const notes = approximated.notes("Pajek");
683
+ const block = writeStyleBlock(input.rules, { inlineColumns: true, snapshot });
684
+ notes.push(...styleBlockLosses(block, input.rules.styles.rules.length, "size"));
685
+ return { snapshot: out, comment: PAJEK_STYLE_COMMENT + block, notes };
686
+ }
687
+ function drawnLabels(input, n, approximated) {
688
+ const drawn = input.picture("node", "label");
689
+ const out = new Array(n).fill("");
690
+ for (let i = 0; i < n; i++) {
691
+ const v = drawn[i] ?? null;
692
+ if (typeof v === "string") {
693
+ out[i] = pajekLabelText(v);
694
+ if (out[i] !== v) {
695
+ approximated.add("node", "label", v);
696
+ }
697
+ }
698
+ }
699
+ return out;
700
+ }
701
+ function pajekLabelText(label) {
702
+ return label.replaceAll(/\r\n|[\r\n]/g, " ").replaceAll('"', "'");
703
+ }
704
+ function replaceParamColumns(table, keys, columns) {
705
+ for (const key of keys) {
706
+ if (table.has(key)) {
707
+ table.remove(key);
708
+ }
709
+ }
710
+ for (const [key, col] of columns) {
711
+ const numeric = col.every((v) => v === null || typeof v === "number");
712
+ table.set(key, col, { dtype: numeric ? "f64" : "string" });
713
+ }
714
+ }
715
+ function paramColumns(n, params) {
716
+ const columns = /* @__PURE__ */ new Map();
717
+ for (let i = 0; i < n; i++) {
718
+ for (const [key, value] of params(i)) {
719
+ let col = columns.get(key);
720
+ if (col === void 0) {
721
+ col = new Array(n).fill(null);
722
+ columns.set(key, col);
723
+ }
724
+ col[i] = value;
725
+ }
726
+ }
727
+ return columns;
728
+ }
324
729
  const PAJEK_LOSS = Object.freeze({
325
730
  /**
326
731
  * A label or text value holds a double quote or a line break, which Pajek cannot write; the save fails with
@@ -361,6 +766,8 @@ const PAJEK_LOSS = Object.freeze({
361
766
  * reads back with that role.
362
767
  */
363
768
  ROLE_ASSUMED: LOSS.ROLE_ASSUMED,
769
+ /** The label column, when a role-less column named `label` is read over it on import. */
770
+ COLUMN_DROPPED: LOSS.COLUMN_DROPPED,
364
771
  /**
365
772
  * With `sanitizeIds: "mangle"`: an original id that reads back as a different type, such as the text "7" as the
366
773
  * number 7.
@@ -544,16 +951,18 @@ function labelNotes(snapshot, nodePlan, notes) {
544
951
  plain.length - plain.nullCount
545
952
  )
546
953
  );
547
- }
548
- if (carried === 0) {
549
- return;
550
- }
551
- let gained = 0;
552
- for (let i = 0; i < snapshot.nodeCount; i++) {
553
- if (!labels?.isSet(i)) {
554
- gained++;
954
+ if (labels !== null && labels !== plain) {
955
+ notes.push(
956
+ note(
957
+ PAJEK_LOSS.COLUMN_DROPPED,
958
+ `node column "${labels.meta.name}" (the labels) reads back replaced by the parameter "${LABEL_COLUMN}"`,
959
+ labels.meta.name,
960
+ labels.length - labels.nullCount
961
+ )
962
+ );
555
963
  }
556
964
  }
965
+ const gained = carried === 0 ? 0 : unlabeled(snapshot.nodeCount, labels);
557
966
  if (gained > 0) {
558
967
  notes.push(
559
968
  note(
@@ -565,9 +974,18 @@ function labelNotes(snapshot, nodePlan, notes) {
565
974
  );
566
975
  }
567
976
  }
977
+ function unlabeled(nodeCount, labels) {
978
+ let count = 0;
979
+ for (let i = 0; i < nodeCount; i++) {
980
+ if (!labels?.isSet(i)) {
981
+ count++;
982
+ }
983
+ }
984
+ return count;
985
+ }
568
986
  function allShapeKeywords(column) {
569
987
  for (let r = 0; r < column.length; r++) {
570
- if (column.isSet(r) && !SHAPES.has(column.value(r))) {
988
+ if (column.isSet(r) && !SHAPES$1.has(column.value(r))) {
571
989
  return false;
572
990
  }
573
991
  }
@@ -755,7 +1173,7 @@ function needsZ(column) {
755
1173
  }
756
1174
  return false;
757
1175
  }
758
- function* writeParts(snapshot, options) {
1176
+ function* writeParts(snapshot, options, comment = null) {
759
1177
  const ids = sanitizeIds(snapshot, CAPABILITIES.idCharset, options.mangle ? "mangle" : "error");
760
1178
  const nodePlan = withoutReservedKey(plan(snapshot.nodes, "node", null), options.mangle);
761
1179
  const edgePlan = plan(snapshot.edges, "edge", null);
@@ -772,6 +1190,10 @@ function* writeParts(snapshot, options) {
772
1190
  });
773
1191
  }
774
1192
  }
1193
+ if (comment !== null) {
1194
+ yield `${comment}
1195
+ `;
1196
+ }
775
1197
  if (options.networkHeader) {
776
1198
  yield options.name === null ? "*Network\n" : `*Network ${options.name}
777
1199
  `;
@@ -868,7 +1290,7 @@ function* writeVertices(snapshot, ids, nodePlan, mangle) {
868
1290
  }
869
1291
  if (shape?.isSet(i)) {
870
1292
  const keyword = cellText(shape, i);
871
- if (SHAPES.has(keyword)) {
1293
+ if (SHAPES$1.has(keyword)) {
872
1294
  parts.push(keyword);
873
1295
  } else {
874
1296
  parts.push(`${SHAPE_COLUMN} ${quotePajekLabel(keyword)}`);
@@ -1007,96 +1429,20 @@ const pajekExporter = Object.freeze({
1007
1429
  format: "pajek",
1008
1430
  options: Object.freeze(["name", "networkHeader"]),
1009
1431
  capabilities: CAPABILITIES,
1432
+ styles: Object.freeze({ capabilities: PAJEK_STYLE_CAPABILITIES }),
1010
1433
  /**
1011
- * Pre-flight: the generic capability gaps plus the Pajek-specific ones.
1434
+ * Pre-flight: the generic capability gaps plus the Pajek-specific ones; with styles, also the values written as
1435
+ * the nearest ones Pajek has.
1012
1436
  * @param snapshot - the snapshot
1013
1437
  * @param options - export options
1014
1438
  * @returns the loss notes, empty when the export is exact
1015
1439
  */
1016
1440
  check(snapshot, options) {
1017
- const resolved = resolveExportOptions(options);
1018
- const { mangle } = resolvePajekOptions(snapshot, options);
1019
- const notes = [];
1020
- const planned = plan(snapshot.nodes, "node", notes);
1021
- const nodePlan = withoutReservedKey(planned, mangle);
1022
- const edgePlan = plan(snapshot.edges, "edge", notes);
1023
- const ids = sanitizeIds(snapshot, CAPABILITIES.idCharset, mangle ? "mangle" : "error");
1024
- checkIdTexts(snapshot.nodeCount, ids, mangle, notes);
1025
- if (nodePlan.length !== planned.length) {
1026
- const reserved = planned.find((p) => p.slot === "param" && p.column.meta.name === ORIGINAL_ID_KEY);
1027
- if (reserved !== void 0) {
1028
- notes.push(
1029
- note(
1030
- PAJEK_LOSS.KEY_DROPPED,
1031
- `node column "${ORIGINAL_ID_KEY}" is the parameter the exporter writes the original ids under (sanitizeIds "mangle"); it is not written`,
1032
- ORIGINAL_ID_KEY,
1033
- reserved.column.length - reserved.column.nullCount
1034
- )
1035
- );
1036
- }
1037
- }
1038
- const owned = /* @__PURE__ */ new Set();
1039
- for (const { column, slot } of [...nodePlan, ...edgePlan]) {
1040
- if (slot === "shape" || slot === "relation" || slot === "param" && column.meta.domain === "node" && column.meta.name === SHAPE_COLUMN) {
1041
- owned.add(`${column.meta.domain}:${column.meta.name}`);
1042
- }
1043
- }
1044
- for (const table of [snapshot.nodes, snapshot.edges]) {
1045
- for (const column of table) {
1046
- if (column.meta.role === "spells") {
1047
- owned.add(`${column.meta.domain}:${column.meta.name}`);
1048
- }
1049
- }
1050
- }
1051
- for (const n of checkCapabilities(snapshot, CAPABILITIES, resolved, {
1052
- roles: SLOT_ROLES,
1053
- roleNames: ROLE_NAMES,
1054
- // the label slot is a vertex slot; an edge label is a parameter under its own name
1055
- edgeRoleNames: {}
1056
- })) {
1057
- if (n.column !== null && (n.code === LOSS.LIST || n.code === LOSS.DTYPE)) {
1058
- const domain = n.message.startsWith("node column") ? "node" : "edge";
1059
- if (owned.has(`${domain}:${n.column}`)) {
1060
- continue;
1061
- }
1062
- }
1063
- notes.push(n);
1064
- }
1065
- labelNotes(snapshot, nodePlan, notes);
1066
- for (const column of snapshot.edges) {
1067
- if (column.meta.role === "label") {
1068
- notes.push(
1069
- note(
1070
- LOSS.ROLE,
1071
- `edge column "${column.meta.name}" (label) is written as a plain parameter; Pajek labels vertices only and the role is lost`,
1072
- column.meta.name,
1073
- column.length - column.nullCount
1074
- )
1075
- );
1076
- }
1077
- }
1078
- checkCells(nodePlan, "node", notes);
1079
- checkCells(edgePlan, "edge", notes);
1080
- const folding = pairFolding(snapshot, { foldMutual: true });
1081
- if (folding.mutualCount > 0) {
1082
- notes.push(
1083
- note(
1084
- PAJEK_LOSS.MUTUAL_AS_UNDIRECTED,
1085
- `${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as undirected edges; the mutual mark is lost`,
1086
- snapshot.edges.byRole("mutual")?.meta.name ?? null,
1087
- folding.mutualCount
1088
- )
1089
- );
1090
- }
1091
- if (Number.isNaN(firstModeOf(snapshot))) {
1092
- notes.push(
1093
- note(
1094
- PAJEK_LOSS.FIRST_MODE_DROPPED,
1095
- "meta.extra.pajek.firstMode is not a count within 0..nodeCount; the two-mode header is not written"
1096
- )
1097
- );
1441
+ const styled = pajekStyledExport(snapshot, options?.styles);
1442
+ if (styled === null) {
1443
+ return checkPlain(snapshot, options);
1098
1444
  }
1099
- return notes;
1445
+ return Object.freeze([...checkPlain(styled.snapshot, withOriginalIds(options)), ...styled.notes]);
1100
1446
  },
1101
1447
  /**
1102
1448
  * Write the snapshot as UTF-8 chunks.
@@ -1105,8 +1451,7 @@ const pajekExporter = Object.freeze({
1105
1451
  * @returns the chunks
1106
1452
  */
1107
1453
  export(snapshot, options) {
1108
- const resolved = resolvePajekOptions(snapshot, options);
1109
- return encodeChunks(writeParts(snapshot, resolved));
1454
+ return encodeChunks(styledParts(snapshot, options));
1110
1455
  },
1111
1456
  /**
1112
1457
  * Write the snapshot as one string.
@@ -1115,10 +1460,106 @@ const pajekExporter = Object.freeze({
1115
1460
  * @returns the document
1116
1461
  */
1117
1462
  exportToString(snapshot, options) {
1118
- const resolved = resolvePajekOptions(snapshot, options);
1119
- return joinText(writeParts(snapshot, resolved));
1463
+ return joinText(styledParts(snapshot, options));
1120
1464
  }
1121
1465
  });
1466
+ function styledParts(snapshot, options) {
1467
+ const styled = pajekStyledExport(snapshot, options?.styles);
1468
+ if (styled === null) {
1469
+ return writeParts(snapshot, resolvePajekOptions(snapshot, options));
1470
+ }
1471
+ return writeParts(styled.snapshot, resolvePajekOptions(styled.snapshot, withOriginalIds(options)), styled.comment);
1472
+ }
1473
+ function withOriginalIds(options) {
1474
+ return options?.sanitizeIds === void 0 ? { ...options, sanitizeIds: "mangle" } : options;
1475
+ }
1476
+ function ownedColumns(snapshot, planned) {
1477
+ const owned = /* @__PURE__ */ new Set();
1478
+ const key = (column) => `${column.meta.domain}:${column.meta.name}`;
1479
+ for (const { column, slot } of planned) {
1480
+ const shapeParam = slot === "param" && column.meta.domain === "node" && column.meta.name === SHAPE_COLUMN;
1481
+ if (slot === "shape" || slot === "relation" || shapeParam) {
1482
+ owned.add(key(column));
1483
+ }
1484
+ }
1485
+ for (const column of [...snapshot.nodes, ...snapshot.edges]) {
1486
+ if (column.meta.role === "spells") {
1487
+ owned.add(key(column));
1488
+ }
1489
+ }
1490
+ return owned;
1491
+ }
1492
+ function capabilityNotes(snapshot, resolved, owned) {
1493
+ const notes = checkCapabilities(snapshot, CAPABILITIES, resolved, {
1494
+ roles: SLOT_ROLES,
1495
+ roleNames: ROLE_NAMES,
1496
+ // the label slot is a vertex slot; an edge label is a parameter under its own name
1497
+ edgeRoleNames: {}
1498
+ });
1499
+ return notes.filter((n) => {
1500
+ if (n.column === null || n.code !== LOSS.LIST && n.code !== LOSS.DTYPE) {
1501
+ return true;
1502
+ }
1503
+ const domain = n.message.startsWith("node column") ? "node" : "edge";
1504
+ return !owned.has(`${domain}:${n.column}`);
1505
+ });
1506
+ }
1507
+ function checkPlain(snapshot, options) {
1508
+ const resolved = resolveExportOptions(options);
1509
+ const { mangle } = resolvePajekOptions(snapshot, options);
1510
+ const notes = [];
1511
+ const planned = plan(snapshot.nodes, "node", notes);
1512
+ const nodePlan = withoutReservedKey(planned, mangle);
1513
+ const edgePlan = plan(snapshot.edges, "edge", notes);
1514
+ const ids = sanitizeIds(snapshot, CAPABILITIES.idCharset, mangle ? "mangle" : "error");
1515
+ checkIdTexts(snapshot.nodeCount, ids, mangle, notes);
1516
+ const reserved = nodePlan.length === planned.length ? void 0 : planned.find((p) => p.slot === "param" && p.column.meta.name === ORIGINAL_ID_KEY);
1517
+ if (reserved !== void 0) {
1518
+ notes.push(
1519
+ note(
1520
+ PAJEK_LOSS.KEY_DROPPED,
1521
+ `node column "${ORIGINAL_ID_KEY}" is the parameter the exporter writes the original ids under (sanitizeIds "mangle"); it is not written`,
1522
+ ORIGINAL_ID_KEY,
1523
+ reserved.column.length - reserved.column.nullCount
1524
+ )
1525
+ );
1526
+ }
1527
+ const owned = ownedColumns(snapshot, [...nodePlan, ...edgePlan]);
1528
+ notes.push(...capabilityNotes(snapshot, resolved, owned));
1529
+ labelNotes(snapshot, nodePlan, notes);
1530
+ for (const column of [...snapshot.edges].filter((c) => c.meta.role === "label")) {
1531
+ notes.push(
1532
+ note(
1533
+ LOSS.ROLE,
1534
+ `edge column "${column.meta.name}" (label) is written as a plain parameter; Pajek labels vertices only and the role is lost`,
1535
+ column.meta.name,
1536
+ column.length - column.nullCount
1537
+ )
1538
+ );
1539
+ }
1540
+ checkCells(nodePlan, "node", notes);
1541
+ checkCells(edgePlan, "edge", notes);
1542
+ const folding = pairFolding(snapshot, { foldMutual: true });
1543
+ if (folding.mutualCount > 0) {
1544
+ notes.push(
1545
+ note(
1546
+ PAJEK_LOSS.MUTUAL_AS_UNDIRECTED,
1547
+ `${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as undirected edges; the mutual mark is lost`,
1548
+ snapshot.edges.byRole("mutual")?.meta.name ?? null,
1549
+ folding.mutualCount
1550
+ )
1551
+ );
1552
+ }
1553
+ if (Number.isNaN(firstModeOf(snapshot))) {
1554
+ notes.push(
1555
+ note(
1556
+ PAJEK_LOSS.FIRST_MODE_DROPPED,
1557
+ "meta.extra.pajek.firstMode is not a count within 0..nodeCount; the two-mode header is not written"
1558
+ )
1559
+ );
1560
+ }
1561
+ return notes;
1562
+ }
1122
1563
  const PAJEK_ISSUE = Object.freeze({
1123
1564
  ...INPUT_ISSUE,
1124
1565
  ...ELEMENT_ISSUE,
@@ -1230,7 +1671,11 @@ const PAJEK_ISSUE = Object.freeze({
1230
1671
  /** A negative vertex number in an adjacency list, read as its absolute value. */
1231
1672
  NEGATIVE_LIST_ENTRY: "W_PAJEK_NEGATIVE_LIST_ENTRY",
1232
1673
  /** An integer beyond 2^53 was stored as the nearest 64-bit float; pass `long: "string"` to keep every digit. */
1233
- PRECISION: PRECISION_CODE
1674
+ PRECISION: PRECISION_CODE,
1675
+ /** A number alone at the end of a row, after its parameters (Pajek writes a trailing `0`); it is ignored. */
1676
+ TRAILING_VALUE: "W_PAJEK_TRAILING_VALUE",
1677
+ /** A line whose value is `NaN`; the line is kept without a value. */
1678
+ NAN_VALUE: "W_PAJEK_NAN_VALUE"
1234
1679
  });
1235
1680
  const USED_OPTIONS = /* @__PURE__ */ new Set([
1236
1681
  "ids",
@@ -1252,6 +1697,7 @@ const ABORT_CHECK_INTERVAL = 64;
1252
1697
  const FIRST_VERTEX_VALUES = /* @__PURE__ */ new Set([0, 1, "auto"]);
1253
1698
  const NUMERAL = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
1254
1699
  const NON_FINITE_WORD = /^[+-]?(?:nan|inf|infinity)$/i;
1700
+ const NAN_WORD = /^[+-]?nan$/i;
1255
1701
  const LABEL_DECL = {
1256
1702
  name: LABEL_COLUMN,
1257
1703
  dtype: "string",
@@ -1290,7 +1736,9 @@ function positionDecl(sourceDims) {
1290
1736
  nullable: true,
1291
1737
  role: "position",
1292
1738
  origin: { format: "pajek", id: "coordinates" },
1293
- extra: { sourceDims, units: "file" }
1739
+ // Pajek draws y downward (USAir97.net has Deadhorse, Alaska at y 0.10 and Miami at 0.53),
1740
+ // centers depth on 0.5, and NetworkX writes "0.0 0.0" for a node with no position
1741
+ extra: { sourceDims, units: "file", yAxis: "down", zOrigin: 0.5, zeroUnplaced: true }
1294
1742
  };
1295
1743
  }
1296
1744
  class LineError extends Error {
@@ -1356,6 +1804,7 @@ class PajekParser {
1356
1804
  this.nodeParams = /* @__PURE__ */ new Map();
1357
1805
  this.ended = false;
1358
1806
  this.edgeParams = /* @__PURE__ */ new Map();
1807
+ this.styleBlockKept = false;
1359
1808
  this.sink = sink;
1360
1809
  this.report = report;
1361
1810
  this.options = options;
@@ -1363,6 +1812,21 @@ class PajekParser {
1363
1812
  this.resolver = new DirectionResolver(sink, report, options.onMixedDirection);
1364
1813
  this.coercer = new IdCoercer(options.ids);
1365
1814
  }
1815
+ /**
1816
+ * Keep the first `% graphty.styles <json>` comment for the style reader (a file graphty wrote carries its styles
1817
+ * there; Pajek skips comment lines).
1818
+ * @param text - a comment or blank line
1819
+ */
1820
+ comment(text) {
1821
+ if (this.styleBlockKept) {
1822
+ return;
1823
+ }
1824
+ const trimmed = text.trimStart();
1825
+ if (trimmed.startsWith(PAJEK_STYLE_COMMENT)) {
1826
+ this.styleBlockKept = true;
1827
+ this.report.keepForStyles(trimmed.slice(PAJEK_STYLE_COMMENT.length));
1828
+ }
1829
+ }
1366
1830
  /**
1367
1831
  * Handle one line; every problem of the line is recorded as an issue and the line skipped.
1368
1832
  * @param text - the line without its terminator
@@ -1371,6 +1835,7 @@ class PajekParser {
1371
1835
  */
1372
1836
  line(text, line) {
1373
1837
  if (isCommentOrBlank(text)) {
1838
+ this.comment(text);
1374
1839
  return false;
1375
1840
  }
1376
1841
  const afterObjectHeader = this.objectHeader;
@@ -1879,6 +2344,7 @@ class PajekParser {
1879
2344
  i++;
1880
2345
  }
1881
2346
  const extras = this.extras(tokens, i, "node", line);
2347
+ shape = extras.shape ?? shape;
1882
2348
  const restored = this.restoredId(extras);
1883
2349
  this.createNodes();
1884
2350
  const repeated = this.seen[pos] !== 0;
@@ -2115,6 +2581,14 @@ class PajekParser {
2115
2581
  if (i < tokens.length && isNumericText(tokens[i])) {
2116
2582
  valueText = tokens[i];
2117
2583
  i++;
2584
+ } else if (i < tokens.length && NAN_WORD.test(tokens[i])) {
2585
+ this.report.warnOnce(
2586
+ "validation-error",
2587
+ PAJEK_ISSUE.NAN_VALUE,
2588
+ `a line value ${JSON.stringify(tokens[i])} is not a number; the line is kept without a value`,
2589
+ { line }
2590
+ );
2591
+ i++;
2118
2592
  }
2119
2593
  const extras = this.extras(tokens, i, "edge", line);
2120
2594
  const { weightFrom } = this.options;
@@ -2380,7 +2854,7 @@ class PajekParser {
2380
2854
  * @returns the parsed extras
2381
2855
  */
2382
2856
  extras(tokens, start, domain, line) {
2383
- const extras = { keys: [], values: [], spells: null };
2857
+ const extras = { keys: [], values: [], spells: null, shape: null };
2384
2858
  const seen = /* @__PURE__ */ new Set();
2385
2859
  for (let i = start; i < tokens.length; ) {
2386
2860
  const token = tokens[i];
@@ -2389,13 +2863,14 @@ class PajekParser {
2389
2863
  i++;
2390
2864
  continue;
2391
2865
  }
2866
+ if (domain === "node" && isShapeKeyword(token)) {
2867
+ extras.shape = token.toLowerCase();
2868
+ i++;
2869
+ continue;
2870
+ }
2392
2871
  if (i + 1 >= tokens.length) {
2393
- this.skip(domain);
2394
- throw new LineError(
2395
- "parse-error",
2396
- domain === "node" ? PAJEK_ISSUE.VERTEX_LINE : PAJEK_ISSUE.LINE,
2397
- `parameter "${token}" has no value`
2398
- );
2872
+ this.loneLastToken(token, domain, line);
2873
+ break;
2399
2874
  }
2400
2875
  if (seen.has(token)) {
2401
2876
  this.report.warning(
@@ -2412,6 +2887,30 @@ class PajekParser {
2412
2887
  }
2413
2888
  return extras;
2414
2889
  }
2890
+ /**
2891
+ * A token alone at the end of a row, with no value after it: a number is ignored (reported once);
2892
+ * anything else is a parameter without its value, which skips the row.
2893
+ * @param token - the token
2894
+ * @param domain - what is skipped when the row is malformed
2895
+ * @param line - the line number
2896
+ */
2897
+ loneLastToken(token, domain, line) {
2898
+ if (isNumericText(token)) {
2899
+ this.report.warnOnce(
2900
+ "validation-error",
2901
+ PAJEK_ISSUE.TRAILING_VALUE,
2902
+ `the number ${JSON.stringify(token)} alone at the end of a row is not a parameter; it is ignored`,
2903
+ { line }
2904
+ );
2905
+ return;
2906
+ }
2907
+ this.skip(domain);
2908
+ throw new LineError(
2909
+ "parse-error",
2910
+ domain === "node" ? PAJEK_ISSUE.VERTEX_LINE : PAJEK_ISSUE.LINE,
2911
+ `parameter "${token}" has no value`
2912
+ );
2913
+ }
2415
2914
  /**
2416
2915
  * The spells of a row's interval token; a malformed one skips the row.
2417
2916
  * @param token - the token, starting with "["
@@ -2516,6 +3015,7 @@ const pajekImporter = Object.freeze({
2516
3015
  options: Object.freeze(["firstVertex"]),
2517
3016
  extensions: Object.freeze([".net", ".paj"]),
2518
3017
  mimeTypes: Object.freeze(["text/x-pajek", "text/plain"]),
3018
+ styles: pajekStyles,
2519
3019
  /**
2520
3020
  * Confidence that the input is a Pajek network: it starts with `*Vertices` (or `*Network`),
2521
3021
  * after any `%` comment lines.
@@ -2671,7 +3171,9 @@ class NetworkCounter {
2671
3171
  export {
2672
3172
  PAJEK_ISSUE as P,
2673
3173
  PAJEK_LOSS as a,
2674
- pajekImporter as b,
3174
+ PAJEK_STYLE_CAPABILITIES as b,
3175
+ PAJEK_STYLE_COMMENT as c,
3176
+ pajekImporter as d,
2675
3177
  pajekExporter as p
2676
3178
  };
2677
- //# sourceMappingURL=importer-Dz7tI8Sa.js.map
3179
+ //# sourceMappingURL=importer-EHQk1jbM.js.map