@graphty/graph-io 0.3.47 → 0.3.49

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 (770) hide show
  1. package/dist/chunks/{approximations-wWjCRzKj.js → approximations-Bzn3L-je.js} +2 -2
  2. package/dist/chunks/{approximations-wWjCRzKj.js.map → approximations-Bzn3L-je.js.map} +1 -1
  3. package/dist/chunks/bends-BGXjv_U4.js +129 -0
  4. package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
  5. package/dist/chunks/{block-DiGq58c3.js → block-iptrlMBb.js} +947 -134
  6. package/dist/chunks/block-iptrlMBb.js.map +1 -0
  7. package/dist/chunks/choose-CczZJaX_.js +717 -0
  8. package/dist/chunks/choose-CczZJaX_.js.map +1 -0
  9. package/dist/chunks/codes-BE2xir2k.js +157 -0
  10. package/dist/chunks/codes-BE2xir2k.js.map +1 -0
  11. package/dist/chunks/{constants-BKwqelYD.js → constants-CKkYLPtt.js} +2 -2
  12. package/dist/chunks/{constants-BKwqelYD.js.map → constants-CKkYLPtt.js.map} +1 -1
  13. package/dist/chunks/context-C3p0RQxR.js +664 -0
  14. package/dist/chunks/context-C3p0RQxR.js.map +1 -0
  15. package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
  16. package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
  17. package/dist/chunks/credentials-DXHx7nwR.js +349 -0
  18. package/dist/chunks/credentials-DXHx7nwR.js.map +1 -0
  19. package/dist/chunks/cx-export-Bt6NoqTQ.js +259 -0
  20. package/dist/chunks/cx-export-Bt6NoqTQ.js.map +1 -0
  21. package/dist/chunks/descriptor-B28U25x4.js +60 -0
  22. package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
  23. package/dist/chunks/descriptor-C-YDhtsn.js +48 -0
  24. package/dist/chunks/descriptor-C-YDhtsn.js.map +1 -0
  25. package/dist/chunks/descriptor-DLA5kINx.js +142 -0
  26. package/dist/chunks/descriptor-DLA5kINx.js.map +1 -0
  27. package/dist/chunks/{emit-CwU8cUmG.js → emit-BwHQkZle.js} +1690 -103
  28. package/dist/chunks/emit-BwHQkZle.js.map +1 -0
  29. package/dist/chunks/{escape-CgzxiYPg.js → escape-CuCIzNMB.js} +12 -12
  30. package/dist/chunks/{escape-CgzxiYPg.js.map → escape-CuCIzNMB.js.map} +1 -1
  31. package/dist/chunks/{export-BvqAXCKh.js → export-Cha4dRFz.js} +48 -1780
  32. package/dist/chunks/export-Cha4dRFz.js.map +1 -0
  33. package/dist/chunks/{exporter--Mk9gXCJ.js → exporter-BP6otMO6.js} +6 -4
  34. package/dist/chunks/{exporter--Mk9gXCJ.js.map → exporter-BP6otMO6.js.map} +1 -1
  35. package/dist/chunks/{exporter-CrDWIyiq.js → exporter-D2CETOMK.js} +1222 -154
  36. package/dist/chunks/exporter-D2CETOMK.js.map +1 -0
  37. package/dist/chunks/{exporter-DndFlGSa.js → exporter-D9yMtocA.js} +7 -6
  38. package/dist/chunks/{exporter-DndFlGSa.js.map → exporter-D9yMtocA.js.map} +1 -1
  39. package/dist/chunks/exporter-_jrBTnos.js +1009 -0
  40. package/dist/chunks/exporter-_jrBTnos.js.map +1 -0
  41. package/dist/chunks/{exporter-CJgfhF-l.js → exporter-nDfxIK5D.js} +9 -7
  42. package/dist/chunks/{exporter-CJgfhF-l.js.map → exporter-nDfxIK5D.js.map} +1 -1
  43. package/dist/chunks/format-BXiAb-1h.js +408 -0
  44. package/dist/chunks/format-BXiAb-1h.js.map +1 -0
  45. package/dist/chunks/{generic-Dq1ntt9q.js → generic-ymWCETAJ.js} +387 -31
  46. package/dist/chunks/generic-ymWCETAJ.js.map +1 -0
  47. package/dist/chunks/{importer-CMmeMWlC.js → importer-B92x1xY5.js} +15 -263
  48. package/dist/chunks/importer-B92x1xY5.js.map +1 -0
  49. package/dist/chunks/{importer-DiZRmOQG.js → importer-CT9mJ1nn.js} +328 -90
  50. package/dist/chunks/importer-CT9mJ1nn.js.map +1 -0
  51. package/dist/chunks/{importer-COTK9Tsl.js → importer-DaLTjbds.js} +116 -1099
  52. package/dist/chunks/importer-DaLTjbds.js.map +1 -0
  53. package/dist/chunks/{importer-iFYPEKaJ.js → importer-GREKMdIf.js} +28 -16
  54. package/dist/chunks/importer-GREKMdIf.js.map +1 -0
  55. package/dist/chunks/{importer-BSvfrX_h.js → importer-PqaaKKnY.js} +23 -1016
  56. package/dist/chunks/importer-PqaaKKnY.js.map +1 -0
  57. package/dist/chunks/{importer-yh_aBCU6.js → importer-Vn5QvmmJ.js} +66 -12
  58. package/dist/chunks/importer-Vn5QvmmJ.js.map +1 -0
  59. package/dist/chunks/{importer-e6LGpqHB.js → importer-vRq4h3j5.js} +1470 -354
  60. package/dist/chunks/importer-vRq4h3j5.js.map +1 -0
  61. package/dist/chunks/input-CAxt_aV-.js +1397 -0
  62. package/dist/chunks/input-CAxt_aV-.js.map +1 -0
  63. package/dist/chunks/{json-elements-DJZRZ6jd.js → json-elements-Cq76WjnZ.js} +4 -4
  64. package/dist/chunks/{json-elements-DJZRZ6jd.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
  65. package/dist/chunks/{lexicon-CT69Kd87.js → lexicon-Clf4QIyl.js} +299 -77
  66. package/dist/chunks/lexicon-Clf4QIyl.js.map +1 -0
  67. package/dist/chunks/{ontology-export-G4MqRdux.js → ontology-export-OMo91mb0.js} +4 -3
  68. package/dist/chunks/{ontology-export-G4MqRdux.js.map → ontology-export-OMo91mb0.js.map} +1 -1
  69. package/dist/chunks/{records-CiaWZrFH.js → records-NJiYvekn.js} +2 -2
  70. package/dist/chunks/{records-CiaWZrFH.js.map → records-NJiYvekn.js.map} +1 -1
  71. package/dist/chunks/{format-BpQBx8MZ.js → report-CwMfYa9J.js} +70 -127
  72. package/dist/chunks/report-CwMfYa9J.js.map +1 -0
  73. package/dist/chunks/round-trip-Zm3_ivgq.js +79 -0
  74. package/dist/chunks/round-trip-Zm3_ivgq.js.map +1 -0
  75. package/dist/chunks/sigv4-EokFic1V.js +247 -0
  76. package/dist/chunks/sigv4-EokFic1V.js.map +1 -0
  77. package/dist/chunks/{styles-BQnsga7p.js → styles-CCs214_3.js} +1300 -168
  78. package/dist/chunks/styles-CCs214_3.js.map +1 -0
  79. package/dist/chunks/styles-Cm62yyQX.js +2812 -0
  80. package/dist/chunks/styles-Cm62yyQX.js.map +1 -0
  81. package/dist/chunks/styles-DPQQIig4.js +1928 -0
  82. package/dist/chunks/styles-DPQQIig4.js.map +1 -0
  83. package/dist/chunks/styles-yed-UMFdNqze.js +1213 -0
  84. package/dist/chunks/styles-yed-UMFdNqze.js.map +1 -0
  85. package/dist/chunks/{text-CzJNFOS9.js → text-ystE2bYi.js} +2 -2
  86. package/dist/chunks/{text-CzJNFOS9.js.map → text-ystE2bYi.js.map} +1 -1
  87. package/dist/csv.js +7 -5
  88. package/dist/csv.js.map +1 -1
  89. package/dist/cx.js +5 -4
  90. package/dist/cx.js.map +1 -1
  91. package/dist/cx2.js +2 -2
  92. package/dist/cys.js +1 -1
  93. package/dist/dot.js +5 -4
  94. package/dist/dot.js.map +1 -1
  95. package/dist/gexf.js +42 -10
  96. package/dist/gexf.js.map +1 -1
  97. package/dist/gml.js +850 -193
  98. package/dist/gml.js.map +1 -1
  99. package/dist/graph-io.js +1189 -220
  100. package/dist/graph-io.js.map +1 -1
  101. package/dist/graphml.js +3 -3
  102. package/dist/json.js +3 -2
  103. package/dist/neo4j.js +6 -4
  104. package/dist/neo4j.js.map +1 -1
  105. package/dist/obo.js +1 -1
  106. package/dist/pajek.js +1 -1
  107. package/dist/positions.js +45 -3
  108. package/dist/positions.js.map +1 -1
  109. package/dist/sources-cypher.d.ts +1 -0
  110. package/dist/sources-cypher.js +1351 -0
  111. package/dist/sources-cypher.js.map +1 -0
  112. package/dist/sources-ndex.d.ts +1 -0
  113. package/dist/sources-ndex.js +278 -0
  114. package/dist/sources-ndex.js.map +1 -0
  115. package/dist/sources-rest.d.ts +1 -0
  116. package/dist/sources-rest.js +1377 -0
  117. package/dist/sources-rest.js.map +1 -0
  118. package/dist/sources-sparql.d.ts +1 -0
  119. package/dist/sources-sparql.js +405 -0
  120. package/dist/sources-sparql.js.map +1 -0
  121. package/dist/src/common/report.d.ts +6 -3
  122. package/dist/src/common/report.d.ts.map +1 -1
  123. package/dist/src/common/report.js +15 -9
  124. package/dist/src/common/report.js.map +1 -1
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +5 -1
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +24 -1
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  130. package/dist/src/formats/cx/styles.js +118 -11
  131. package/dist/src/formats/cx/styles.js.map +1 -1
  132. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  133. package/dist/src/formats/cx2/importer.js +1 -0
  134. package/dist/src/formats/cx2/importer.js.map +1 -1
  135. package/dist/src/formats/cx2/styles.d.ts.map +1 -1
  136. package/dist/src/formats/cx2/styles.js +3 -1
  137. package/dist/src/formats/cx2/styles.js.map +1 -1
  138. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  139. package/dist/src/formats/cys/importer.js +1 -0
  140. package/dist/src/formats/cys/importer.js.map +1 -1
  141. package/dist/src/formats/cys/styles.d.ts +2 -0
  142. package/dist/src/formats/cys/styles.d.ts.map +1 -1
  143. package/dist/src/formats/cys/styles.js +15 -7
  144. package/dist/src/formats/cys/styles.js.map +1 -1
  145. package/dist/src/formats/dot/drawing.d.ts +98 -0
  146. package/dist/src/formats/dot/drawing.d.ts.map +1 -0
  147. package/dist/src/formats/dot/drawing.js +734 -0
  148. package/dist/src/formats/dot/drawing.js.map +1 -0
  149. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  150. package/dist/src/formats/dot/importer.js +108 -31
  151. package/dist/src/formats/dot/importer.js.map +1 -1
  152. package/dist/src/formats/dot/label-places.d.ts +34 -0
  153. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  154. package/dist/src/formats/dot/label-places.js +179 -0
  155. package/dist/src/formats/dot/label-places.js.map +1 -0
  156. package/dist/src/formats/dot/record.d.ts +50 -0
  157. package/dist/src/formats/dot/record.d.ts.map +1 -0
  158. package/dist/src/formats/dot/record.js +275 -0
  159. package/dist/src/formats/dot/record.js.map +1 -0
  160. package/dist/src/formats/dot/styles.d.ts +62 -2
  161. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  162. package/dist/src/formats/dot/styles.js +1457 -120
  163. package/dist/src/formats/dot/styles.js.map +1 -1
  164. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  165. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  166. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  167. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  168. package/dist/src/formats/gexf/importer.d.ts +7 -0
  169. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  170. package/dist/src/formats/gexf/importer.js +41 -5
  171. package/dist/src/formats/gexf/importer.js.map +1 -1
  172. package/dist/src/formats/gexf/preview.d.ts +77 -0
  173. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  174. package/dist/src/formats/gexf/preview.js +191 -0
  175. package/dist/src/formats/gexf/preview.js.map +1 -0
  176. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  177. package/dist/src/formats/gexf/schema.js +2 -1
  178. package/dist/src/formats/gexf/schema.js.map +1 -1
  179. package/dist/src/formats/gexf/styles.d.ts +60 -16
  180. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  181. package/dist/src/formats/gexf/styles.js +883 -131
  182. package/dist/src/formats/gexf/styles.js.map +1 -1
  183. package/dist/src/formats/gml/importer.d.ts +5 -2
  184. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  185. package/dist/src/formats/gml/importer.js +258 -71
  186. package/dist/src/formats/gml/importer.js.map +1 -1
  187. package/dist/src/formats/gml/index.d.ts +1 -1
  188. package/dist/src/formats/gml/index.d.ts.map +1 -1
  189. package/dist/src/formats/gml/index.js +1 -1
  190. package/dist/src/formats/gml/index.js.map +1 -1
  191. package/dist/src/formats/gml/positions.d.ts +7 -0
  192. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  193. package/dist/src/formats/gml/positions.js +29 -7
  194. package/dist/src/formats/gml/positions.js.map +1 -1
  195. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  196. package/dist/src/formats/gml/styles.js +756 -103
  197. package/dist/src/formats/gml/styles.js.map +1 -1
  198. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  199. package/dist/src/formats/graphml/styles-plain.js +8 -12
  200. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  201. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  202. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  203. package/dist/src/formats/graphml/styles-yed.js +749 -148
  204. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  205. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  206. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  207. package/dist/src/formats/graphml/styles-yfiles3.js +429 -64
  208. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  209. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  210. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  211. package/dist/src/formats/graphml/yfiles.js +16 -6
  212. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  213. package/dist/src/formats/json/dialect.d.ts +3 -2
  214. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  215. package/dist/src/formats/json/dialect.js +39 -5
  216. package/dist/src/formats/json/dialect.js.map +1 -1
  217. package/dist/src/formats/json/importer.d.ts +13 -2
  218. package/dist/src/formats/json/importer.d.ts.map +1 -1
  219. package/dist/src/formats/json/importer.js +42 -6
  220. package/dist/src/formats/json/importer.js.map +1 -1
  221. package/dist/src/formats/json/index.d.ts +1 -1
  222. package/dist/src/formats/json/index.d.ts.map +1 -1
  223. package/dist/src/formats/json/index.js +1 -1
  224. package/dist/src/formats/json/index.js.map +1 -1
  225. package/dist/src/formats/json/positions.d.ts +5 -2
  226. package/dist/src/formats/json/positions.d.ts.map +1 -1
  227. package/dist/src/formats/json/positions.js +20 -4
  228. package/dist/src/formats/json/positions.js.map +1 -1
  229. package/dist/src/formats/json/styles.d.ts +12 -1
  230. package/dist/src/formats/json/styles.d.ts.map +1 -1
  231. package/dist/src/formats/json/styles.js +1755 -136
  232. package/dist/src/formats/json/styles.js.map +1 -1
  233. package/dist/src/formats/pajek/draw.d.ts +96 -0
  234. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  235. package/dist/src/formats/pajek/draw.js +372 -0
  236. package/dist/src/formats/pajek/draw.js.map +1 -0
  237. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  238. package/dist/src/formats/pajek/exporter.js +70 -51
  239. package/dist/src/formats/pajek/exporter.js.map +1 -1
  240. package/dist/src/formats/pajek/importer.d.ts +9 -0
  241. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  242. package/dist/src/formats/pajek/importer.js +233 -102
  243. package/dist/src/formats/pajek/importer.js.map +1 -1
  244. package/dist/src/formats/pajek/index.d.ts +1 -0
  245. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  246. package/dist/src/formats/pajek/index.js.map +1 -1
  247. package/dist/src/formats/pajek/styles.d.ts +15 -7
  248. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  249. package/dist/src/formats/pajek/styles.js +1279 -114
  250. package/dist/src/formats/pajek/styles.js.map +1 -1
  251. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  252. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  253. package/dist/src/formats/pajek/syntax.js +26 -2
  254. package/dist/src/formats/pajek/syntax.js.map +1 -1
  255. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  256. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  257. package/dist/src/formats/xgmml/emit.js +65 -5
  258. package/dist/src/formats/xgmml/emit.js.map +1 -1
  259. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  260. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  261. package/dist/src/formats/xgmml/styles.js +278 -60
  262. package/dist/src/formats/xgmml/styles.js.map +1 -1
  263. package/dist/src/index.d.ts +10 -2
  264. package/dist/src/index.d.ts.map +1 -1
  265. package/dist/src/index.js +11 -2
  266. package/dist/src/index.js.map +1 -1
  267. package/dist/src/positions/convert.d.ts.map +1 -1
  268. package/dist/src/positions/convert.js +11 -1
  269. package/dist/src/positions/convert.js.map +1 -1
  270. package/dist/src/positions/extract.d.ts.map +1 -1
  271. package/dist/src/positions/extract.js +53 -1
  272. package/dist/src/positions/extract.js.map +1 -1
  273. package/dist/src/positions/index.d.ts +1 -1
  274. package/dist/src/positions/index.d.ts.map +1 -1
  275. package/dist/src/positions/types.d.ts +59 -0
  276. package/dist/src/positions/types.d.ts.map +1 -1
  277. package/dist/src/registry.d.ts +173 -1
  278. package/dist/src/registry.d.ts.map +1 -1
  279. package/dist/src/registry.js +196 -1
  280. package/dist/src/registry.js.map +1 -1
  281. package/dist/src/sources/builtins.d.ts +11 -0
  282. package/dist/src/sources/builtins.d.ts.map +1 -0
  283. package/dist/src/sources/builtins.js +53 -0
  284. package/dist/src/sources/builtins.js.map +1 -0
  285. package/dist/src/sources/codes.d.ts +230 -0
  286. package/dist/src/sources/codes.d.ts.map +1 -0
  287. package/dist/src/sources/codes.js +58 -0
  288. package/dist/src/sources/codes.js.map +1 -0
  289. package/dist/src/sources/context.d.ts +112 -0
  290. package/dist/src/sources/context.d.ts.map +1 -0
  291. package/dist/src/sources/context.js +740 -0
  292. package/dist/src/sources/context.js.map +1 -0
  293. package/dist/src/sources/credentials.d.ts +179 -0
  294. package/dist/src/sources/credentials.d.ts.map +1 -0
  295. package/dist/src/sources/credentials.js +301 -0
  296. package/dist/src/sources/credentials.js.map +1 -0
  297. package/dist/src/sources/cypher/descriptor.d.ts +21 -0
  298. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -0
  299. package/dist/src/sources/cypher/descriptor.js +124 -0
  300. package/dist/src/sources/cypher/descriptor.js.map +1 -0
  301. package/dist/src/sources/cypher/flatten.d.ts +72 -0
  302. package/dist/src/sources/cypher/flatten.d.ts.map +1 -0
  303. package/dist/src/sources/cypher/flatten.js +279 -0
  304. package/dist/src/sources/cypher/flatten.js.map +1 -0
  305. package/dist/src/sources/cypher/index.d.ts +33 -0
  306. package/dist/src/sources/cypher/index.d.ts.map +1 -0
  307. package/dist/src/sources/cypher/index.js +511 -0
  308. package/dist/src/sources/cypher/index.js.map +1 -0
  309. package/dist/src/sources/cypher/params.d.ts +40 -0
  310. package/dist/src/sources/cypher/params.d.ts.map +1 -0
  311. package/dist/src/sources/cypher/params.js +6 -0
  312. package/dist/src/sources/cypher/params.js.map +1 -0
  313. package/dist/src/sources/cypher/profiles.d.ts +44 -0
  314. package/dist/src/sources/cypher/profiles.d.ts.map +1 -0
  315. package/dist/src/sources/cypher/profiles.js +61 -0
  316. package/dist/src/sources/cypher/profiles.js.map +1 -0
  317. package/dist/src/sources/cypher/query-builder.d.ts +123 -0
  318. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -0
  319. package/dist/src/sources/cypher/query-builder.js +267 -0
  320. package/dist/src/sources/cypher/query-builder.js.map +1 -0
  321. package/dist/src/sources/cypher/transports/bolt.d.ts +21 -0
  322. package/dist/src/sources/cypher/transports/bolt.d.ts.map +1 -0
  323. package/dist/src/sources/cypher/transports/bolt.js +185 -0
  324. package/dist/src/sources/cypher/transports/bolt.js.map +1 -0
  325. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts +15 -0
  326. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts.map +1 -0
  327. package/dist/src/sources/cypher/transports/neptune-analytics.js +38 -0
  328. package/dist/src/sources/cypher/transports/neptune-analytics.js.map +1 -0
  329. package/dist/src/sources/cypher/transports/neptune-https.d.ts +31 -0
  330. package/dist/src/sources/cypher/transports/neptune-https.d.ts.map +1 -0
  331. package/dist/src/sources/cypher/transports/neptune-https.js +104 -0
  332. package/dist/src/sources/cypher/transports/neptune-https.js.map +1 -0
  333. package/dist/src/sources/cypher/transports/query-api.d.ts +14 -0
  334. package/dist/src/sources/cypher/transports/query-api.d.ts.map +1 -0
  335. package/dist/src/sources/cypher/transports/query-api.js +80 -0
  336. package/dist/src/sources/cypher/transports/query-api.js.map +1 -0
  337. package/dist/src/sources/cypher/transports/transport.d.ts +78 -0
  338. package/dist/src/sources/cypher/transports/transport.d.ts.map +1 -0
  339. package/dist/src/sources/cypher/transports/transport.js +77 -0
  340. package/dist/src/sources/cypher/transports/transport.js.map +1 -0
  341. package/dist/src/sources/cypher/types-map.d.ts +91 -0
  342. package/dist/src/sources/cypher/types-map.d.ts.map +1 -0
  343. package/dist/src/sources/cypher/types-map.js +306 -0
  344. package/dist/src/sources/cypher/types-map.js.map +1 -0
  345. package/dist/src/sources/define.d.ts +47 -0
  346. package/dist/src/sources/define.d.ts.map +1 -0
  347. package/dist/src/sources/define.js +173 -0
  348. package/dist/src/sources/define.js.map +1 -0
  349. package/dist/src/sources/fail.d.ts +33 -0
  350. package/dist/src/sources/fail.d.ts.map +1 -0
  351. package/dist/src/sources/fail.js +49 -0
  352. package/dist/src/sources/fail.js.map +1 -0
  353. package/dist/src/sources/ids.d.ts +69 -0
  354. package/dist/src/sources/ids.d.ts.map +1 -0
  355. package/dist/src/sources/ids.js +69 -0
  356. package/dist/src/sources/ids.js.map +1 -0
  357. package/dist/src/sources/ndex/client.d.ts +31 -0
  358. package/dist/src/sources/ndex/client.d.ts.map +1 -0
  359. package/dist/src/sources/ndex/client.js +90 -0
  360. package/dist/src/sources/ndex/client.js.map +1 -0
  361. package/dist/src/sources/ndex/descriptor.d.ts +10 -0
  362. package/dist/src/sources/ndex/descriptor.d.ts.map +1 -0
  363. package/dist/src/sources/ndex/descriptor.js +55 -0
  364. package/dist/src/sources/ndex/descriptor.js.map +1 -0
  365. package/dist/src/sources/ndex/expand.d.ts +20 -0
  366. package/dist/src/sources/ndex/expand.d.ts.map +1 -0
  367. package/dist/src/sources/ndex/expand.js +87 -0
  368. package/dist/src/sources/ndex/expand.js.map +1 -0
  369. package/dist/src/sources/ndex/index.d.ts +25 -0
  370. package/dist/src/sources/ndex/index.d.ts.map +1 -0
  371. package/dist/src/sources/ndex/index.js +191 -0
  372. package/dist/src/sources/ndex/index.js.map +1 -0
  373. package/dist/src/sources/ndex/params.d.ts +17 -0
  374. package/dist/src/sources/ndex/params.d.ts.map +1 -0
  375. package/dist/src/sources/ndex/params.js +6 -0
  376. package/dist/src/sources/ndex/params.js.map +1 -0
  377. package/dist/src/sources/ndex/share-url.d.ts +40 -0
  378. package/dist/src/sources/ndex/share-url.d.ts.map +1 -0
  379. package/dist/src/sources/ndex/share-url.js +64 -0
  380. package/dist/src/sources/ndex/share-url.js.map +1 -0
  381. package/dist/src/sources/params.d.ts +31 -0
  382. package/dist/src/sources/params.d.ts.map +1 -0
  383. package/dist/src/sources/params.js +6 -0
  384. package/dist/src/sources/params.js.map +1 -0
  385. package/dist/src/sources/registry.d.ts +118 -0
  386. package/dist/src/sources/registry.d.ts.map +1 -0
  387. package/dist/src/sources/registry.js +193 -0
  388. package/dist/src/sources/registry.js.map +1 -0
  389. package/dist/src/sources/rest/descriptor.d.ts +16 -0
  390. package/dist/src/sources/rest/descriptor.d.ts.map +1 -0
  391. package/dist/src/sources/rest/descriptor.js +76 -0
  392. package/dist/src/sources/rest/descriptor.js.map +1 -0
  393. package/dist/src/sources/rest/index.d.ts +14 -0
  394. package/dist/src/sources/rest/index.d.ts.map +1 -0
  395. package/dist/src/sources/rest/index.js +13 -0
  396. package/dist/src/sources/rest/index.js.map +1 -0
  397. package/dist/src/sources/rest/mapping.d.ts +30 -0
  398. package/dist/src/sources/rest/mapping.d.ts.map +1 -0
  399. package/dist/src/sources/rest/mapping.js +362 -0
  400. package/dist/src/sources/rest/mapping.js.map +1 -0
  401. package/dist/src/sources/rest/openalex.d.ts +27 -0
  402. package/dist/src/sources/rest/openalex.d.ts.map +1 -0
  403. package/dist/src/sources/rest/openalex.js +269 -0
  404. package/dist/src/sources/rest/openalex.js.map +1 -0
  405. package/dist/src/sources/rest/paging.d.ts +53 -0
  406. package/dist/src/sources/rest/paging.d.ts.map +1 -0
  407. package/dist/src/sources/rest/paging.js +138 -0
  408. package/dist/src/sources/rest/paging.js.map +1 -0
  409. package/dist/src/sources/rest/params.d.ts +216 -0
  410. package/dist/src/sources/rest/params.d.ts.map +1 -0
  411. package/dist/src/sources/rest/params.js +7 -0
  412. package/dist/src/sources/rest/params.js.map +1 -0
  413. package/dist/src/sources/rest/records.d.ts +41 -0
  414. package/dist/src/sources/rest/records.d.ts.map +1 -0
  415. package/dist/src/sources/rest/records.js +240 -0
  416. package/dist/src/sources/rest/records.js.map +1 -0
  417. package/dist/src/sources/rest/samples/deps-dev.d.ts +10 -0
  418. package/dist/src/sources/rest/samples/deps-dev.d.ts.map +1 -0
  419. package/dist/src/sources/rest/samples/deps-dev.js +47 -0
  420. package/dist/src/sources/rest/samples/deps-dev.js.map +1 -0
  421. package/dist/src/sources/rest/samples/string.d.ts +9 -0
  422. package/dist/src/sources/rest/samples/string.d.ts.map +1 -0
  423. package/dist/src/sources/rest/samples/string.js +42 -0
  424. package/dist/src/sources/rest/samples/string.js.map +1 -0
  425. package/dist/src/sources/rest/selectors.d.ts +41 -0
  426. package/dist/src/sources/rest/selectors.d.ts.map +1 -0
  427. package/dist/src/sources/rest/selectors.js +81 -0
  428. package/dist/src/sources/rest/selectors.js.map +1 -0
  429. package/dist/src/sources/rest/source.d.ts +67 -0
  430. package/dist/src/sources/rest/source.d.ts.map +1 -0
  431. package/dist/src/sources/rest/source.js +650 -0
  432. package/dist/src/sources/rest/source.js.map +1 -0
  433. package/dist/src/sources/rest/templates.d.ts +38 -0
  434. package/dist/src/sources/rest/templates.d.ts.map +1 -0
  435. package/dist/src/sources/rest/templates.js +125 -0
  436. package/dist/src/sources/rest/templates.js.map +1 -0
  437. package/dist/src/sources/run.d.ts +93 -0
  438. package/dist/src/sources/run.d.ts.map +1 -0
  439. package/dist/src/sources/run.js +673 -0
  440. package/dist/src/sources/run.js.map +1 -0
  441. package/dist/src/sources/sha256.d.ts +12 -0
  442. package/dist/src/sources/sha256.d.ts.map +1 -0
  443. package/dist/src/sources/sha256.js +95 -0
  444. package/dist/src/sources/sha256.js.map +1 -0
  445. package/dist/src/sources/sigv4.d.ts +26 -0
  446. package/dist/src/sources/sigv4.d.ts.map +1 -0
  447. package/dist/src/sources/sigv4.js +184 -0
  448. package/dist/src/sources/sigv4.js.map +1 -0
  449. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  450. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  451. package/dist/src/sources/sparql/descriptor.js +64 -0
  452. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  453. package/dist/src/sources/sparql/index.d.ts +28 -0
  454. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  455. package/dist/src/sources/sparql/index.js +314 -0
  456. package/dist/src/sources/sparql/index.js.map +1 -0
  457. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  458. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  459. package/dist/src/sources/sparql/ntriples.js +180 -0
  460. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  461. package/dist/src/sources/sparql/params.d.ts +27 -0
  462. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  463. package/dist/src/sources/sparql/params.js +5 -0
  464. package/dist/src/sources/sparql/params.js.map +1 -0
  465. package/dist/src/sources/sparql/query.d.ts +72 -0
  466. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  467. package/dist/src/sources/sparql/query.js +113 -0
  468. package/dist/src/sources/sparql/query.js.map +1 -0
  469. package/dist/src/sources/testing.d.ts +96 -0
  470. package/dist/src/sources/testing.d.ts.map +1 -0
  471. package/dist/src/sources/testing.js +138 -0
  472. package/dist/src/sources/testing.js.map +1 -0
  473. package/dist/src/sources/types.d.ts +696 -0
  474. package/dist/src/sources/types.d.ts.map +1 -0
  475. package/dist/src/sources/types.js +10 -0
  476. package/dist/src/sources/types.js.map +1 -0
  477. package/dist/src/styles/annotations.d.ts +61 -5
  478. package/dist/src/styles/annotations.d.ts.map +1 -1
  479. package/dist/src/styles/annotations.js +130 -22
  480. package/dist/src/styles/annotations.js.map +1 -1
  481. package/dist/src/styles/canon/bends.d.ts +46 -0
  482. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  483. package/dist/src/styles/canon/bends.js +123 -0
  484. package/dist/src/styles/canon/bends.js.map +1 -1
  485. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  486. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  487. package/dist/src/styles/canon/color-tables.js +10 -4
  488. package/dist/src/styles/canon/color-tables.js.map +1 -1
  489. package/dist/src/styles/canon/color.d.ts +3 -1
  490. package/dist/src/styles/canon/color.d.ts.map +1 -1
  491. package/dist/src/styles/canon/color.js +103 -3
  492. package/dist/src/styles/canon/color.js.map +1 -1
  493. package/dist/src/styles/canon/enums.d.ts +2 -2
  494. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  495. package/dist/src/styles/canon/enums.js +82 -7
  496. package/dist/src/styles/canon/enums.js.map +1 -1
  497. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  498. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  499. package/dist/src/styles/canon/graphviz.js +57 -9
  500. package/dist/src/styles/canon/graphviz.js.map +1 -1
  501. package/dist/src/styles/canon/number.d.ts +8 -0
  502. package/dist/src/styles/canon/number.d.ts.map +1 -1
  503. package/dist/src/styles/canon/number.js +18 -0
  504. package/dist/src/styles/canon/number.js.map +1 -1
  505. package/dist/src/styles/canon/text.d.ts +29 -2
  506. package/dist/src/styles/canon/text.d.ts.map +1 -1
  507. package/dist/src/styles/canon/text.js +156 -16
  508. package/dist/src/styles/canon/text.js.map +1 -1
  509. package/dist/src/styles/codes.d.ts +2 -0
  510. package/dist/src/styles/codes.d.ts.map +1 -1
  511. package/dist/src/styles/codes.js +2 -0
  512. package/dist/src/styles/codes.js.map +1 -1
  513. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  514. package/dist/src/styles/cyjs/cascade.js +1037 -35
  515. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  516. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  517. package/dist/src/styles/cyjs/defaults-table.js +5 -0
  518. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  519. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  520. package/dist/src/styles/cyjs/emit.js +216 -12
  521. package/dist/src/styles/cyjs/emit.js.map +1 -1
  522. package/dist/src/styles/cyjs/face.d.ts +20 -0
  523. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  524. package/dist/src/styles/cyjs/face.js +332 -0
  525. package/dist/src/styles/cyjs/face.js.map +1 -0
  526. package/dist/src/styles/cyjs/mappers.d.ts +48 -2
  527. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  528. package/dist/src/styles/cyjs/mappers.js +463 -26
  529. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  530. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  531. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  532. package/dist/src/styles/cyjs/routes.js +360 -0
  533. package/dist/src/styles/cyjs/routes.js.map +1 -0
  534. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  535. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  536. package/dist/src/styles/cytoscape/charts.js +560 -0
  537. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  538. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  539. package/dist/src/styles/cytoscape/emit.js +204 -44
  540. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  541. package/dist/src/styles/cytoscape/lexicon.d.ts +97 -3
  542. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  543. package/dist/src/styles/cytoscape/lexicon.js +413 -79
  544. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  545. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  546. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  547. package/dist/src/styles/cytoscape/mappings.js +92 -0
  548. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  549. package/dist/src/styles/cytoscape/resolve.d.ts +46 -3
  550. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  551. package/dist/src/styles/cytoscape/resolve.js +632 -22
  552. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  553. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -1
  554. package/dist/src/styles/cytoscape/translate.js +10 -10
  555. package/dist/src/styles/cytoscape/translate.js.map +1 -1
  556. package/dist/src/styles/defaults.d.ts +50 -0
  557. package/dist/src/styles/defaults.d.ts.map +1 -1
  558. package/dist/src/styles/defaults.js +315 -37
  559. package/dist/src/styles/defaults.js.map +1 -1
  560. package/dist/src/styles/index.d.ts +4 -3
  561. package/dist/src/styles/index.d.ts.map +1 -1
  562. package/dist/src/styles/index.js +3 -2
  563. package/dist/src/styles/index.js.map +1 -1
  564. package/dist/src/styles/internal.d.ts +1 -0
  565. package/dist/src/styles/internal.d.ts.map +1 -1
  566. package/dist/src/styles/internal.js +1 -0
  567. package/dist/src/styles/internal.js.map +1 -1
  568. package/dist/src/styles/io/block.d.ts.map +1 -1
  569. package/dist/src/styles/io/block.js +9 -0
  570. package/dist/src/styles/io/block.js.map +1 -1
  571. package/dist/src/styles/io/generic.d.ts.map +1 -1
  572. package/dist/src/styles/io/generic.js +56 -16
  573. package/dist/src/styles/io/generic.js.map +1 -1
  574. package/dist/src/styles/io/round-trip.d.ts +56 -0
  575. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  576. package/dist/src/styles/io/round-trip.js +138 -0
  577. package/dist/src/styles/io/round-trip.js.map +1 -0
  578. package/dist/src/styles/io/writer.d.ts.map +1 -1
  579. package/dist/src/styles/io/writer.js +13 -4
  580. package/dist/src/styles/io/writer.js.map +1 -1
  581. package/dist/src/styles/notes.d.ts.map +1 -1
  582. package/dist/src/styles/notes.js +1 -0
  583. package/dist/src/styles/notes.js.map +1 -1
  584. package/dist/src/styles/plan/features.d.ts +1 -1
  585. package/dist/src/styles/plan/features.d.ts.map +1 -1
  586. package/dist/src/styles/plan/features.js +22 -2
  587. package/dist/src/styles/plan/features.js.map +1 -1
  588. package/dist/src/styles/plan/index.d.ts +1 -1
  589. package/dist/src/styles/plan/index.d.ts.map +1 -1
  590. package/dist/src/styles/plan/index.js +1 -1
  591. package/dist/src/styles/plan/index.js.map +1 -1
  592. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  593. package/dist/src/styles/plan/plan.js +61 -4
  594. package/dist/src/styles/plan/plan.js.map +1 -1
  595. package/dist/src/styles/plan/resolve.d.ts +13 -1
  596. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  597. package/dist/src/styles/plan/resolve.js +53 -6
  598. package/dist/src/styles/plan/resolve.js.map +1 -1
  599. package/dist/src/styles/slots.d.ts +14 -0
  600. package/dist/src/styles/slots.d.ts.map +1 -0
  601. package/dist/src/styles/slots.js +20 -0
  602. package/dist/src/styles/slots.js.map +1 -0
  603. package/dist/src/styles/types.d.ts +638 -5
  604. package/dist/src/styles/types.d.ts.map +1 -1
  605. package/dist/src/styles/vocabulary.d.ts +3 -2
  606. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  607. package/dist/src/styles/vocabulary.js +218 -1
  608. package/dist/src/styles/vocabulary.js.map +1 -1
  609. package/dist/src/types.d.ts +19 -5
  610. package/dist/src/types.d.ts.map +1 -1
  611. package/dist/src/types.js.map +1 -1
  612. package/dist/styles.js +29 -238
  613. package/dist/styles.js.map +1 -1
  614. package/dist/xgmml.js +3 -3
  615. package/docs/samples/people.json +6 -0
  616. package/package.json +53 -8
  617. package/src/common/report.ts +27 -7
  618. package/src/formats/cx/importer.ts +6 -1
  619. package/src/formats/cx/styles.ts +144 -9
  620. package/src/formats/cx2/importer.ts +1 -0
  621. package/src/formats/cx2/styles.ts +3 -1
  622. package/src/formats/cys/importer.ts +1 -0
  623. package/src/formats/cys/styles.ts +27 -5
  624. package/src/formats/dot/drawing.ts +799 -0
  625. package/src/formats/dot/importer.ts +120 -35
  626. package/src/formats/dot/label-places.ts +228 -0
  627. package/src/formats/dot/record.ts +336 -0
  628. package/src/formats/dot/styles.ts +1657 -154
  629. package/src/formats/gexf/dialog-metrics.ts +61 -0
  630. package/src/formats/gexf/importer.ts +50 -5
  631. package/src/formats/gexf/preview.ts +217 -0
  632. package/src/formats/gexf/schema.ts +2 -1
  633. package/src/formats/gexf/styles.ts +1144 -142
  634. package/src/formats/gml/importer.ts +291 -76
  635. package/src/formats/gml/index.ts +1 -1
  636. package/src/formats/gml/positions.ts +29 -7
  637. package/src/formats/gml/styles.ts +854 -111
  638. package/src/formats/graphml/styles-plain.ts +8 -23
  639. package/src/formats/graphml/styles-yed.ts +821 -159
  640. package/src/formats/graphml/styles-yfiles3.ts +485 -63
  641. package/src/formats/graphml/yfiles.ts +19 -6
  642. package/src/formats/json/dialect.ts +41 -5
  643. package/src/formats/json/importer.ts +59 -7
  644. package/src/formats/json/index.ts +1 -0
  645. package/src/formats/json/positions.ts +22 -5
  646. package/src/formats/json/styles.ts +2041 -185
  647. package/src/formats/pajek/draw.ts +458 -0
  648. package/src/formats/pajek/exporter.ts +81 -49
  649. package/src/formats/pajek/importer.ts +278 -103
  650. package/src/formats/pajek/index.ts +1 -0
  651. package/src/formats/pajek/styles.ts +1382 -133
  652. package/src/formats/pajek/syntax.ts +27 -2
  653. package/src/formats/xgmml/emit.ts +73 -5
  654. package/src/formats/xgmml/styles.ts +331 -71
  655. package/src/index.ts +94 -0
  656. package/src/positions/convert.ts +12 -1
  657. package/src/positions/extract.ts +55 -1
  658. package/src/positions/index.ts +1 -0
  659. package/src/positions/types.ts +60 -0
  660. package/src/registry.ts +326 -1
  661. package/src/sources/builtins.ts +63 -0
  662. package/src/sources/codes.ts +235 -0
  663. package/src/sources/context.ts +894 -0
  664. package/src/sources/credentials.ts +409 -0
  665. package/src/sources/cypher/descriptor.ts +131 -0
  666. package/src/sources/cypher/flatten.ts +323 -0
  667. package/src/sources/cypher/index.ts +628 -0
  668. package/src/sources/cypher/params.ts +41 -0
  669. package/src/sources/cypher/profiles.ts +78 -0
  670. package/src/sources/cypher/query-builder.ts +327 -0
  671. package/src/sources/cypher/transports/bolt.ts +228 -0
  672. package/src/sources/cypher/transports/neptune-analytics.ts +41 -0
  673. package/src/sources/cypher/transports/neptune-https.ts +122 -0
  674. package/src/sources/cypher/transports/query-api.ts +100 -0
  675. package/src/sources/cypher/transports/transport.ts +139 -0
  676. package/src/sources/cypher/types-map.ts +418 -0
  677. package/src/sources/define.ts +195 -0
  678. package/src/sources/fail.ts +70 -0
  679. package/src/sources/ids.ts +80 -0
  680. package/src/sources/ndex/client.ts +102 -0
  681. package/src/sources/ndex/descriptor.ts +64 -0
  682. package/src/sources/ndex/expand.ts +100 -0
  683. package/src/sources/ndex/index.ts +235 -0
  684. package/src/sources/ndex/params.ts +17 -0
  685. package/src/sources/ndex/share-url.ts +84 -0
  686. package/src/sources/params.ts +32 -0
  687. package/src/sources/registry.ts +325 -0
  688. package/src/sources/rest/descriptor.ts +79 -0
  689. package/src/sources/rest/index.ts +22 -0
  690. package/src/sources/rest/mapping.ts +401 -0
  691. package/src/sources/rest/openalex.ts +288 -0
  692. package/src/sources/rest/paging.ts +180 -0
  693. package/src/sources/rest/params.ts +243 -0
  694. package/src/sources/rest/records.ts +289 -0
  695. package/src/sources/rest/samples/deps-dev.ts +49 -0
  696. package/src/sources/rest/samples/string.ts +44 -0
  697. package/src/sources/rest/selectors.ts +91 -0
  698. package/src/sources/rest/source.ts +776 -0
  699. package/src/sources/rest/templates.ts +151 -0
  700. package/src/sources/run.ts +793 -0
  701. package/src/sources/sha256.ts +99 -0
  702. package/src/sources/sigv4.ts +209 -0
  703. package/src/sources/sparql/descriptor.ts +67 -0
  704. package/src/sources/sparql/index.ts +356 -0
  705. package/src/sources/sparql/ntriples.ts +219 -0
  706. package/src/sources/sparql/params.ts +28 -0
  707. package/src/sources/sparql/query.ts +162 -0
  708. package/src/sources/testing.ts +210 -0
  709. package/src/sources/types.ts +776 -0
  710. package/src/styles/annotations.ts +201 -27
  711. package/src/styles/canon/bends.ts +137 -0
  712. package/src/styles/canon/color-tables.ts +10 -4
  713. package/src/styles/canon/color.ts +105 -3
  714. package/src/styles/canon/enums.ts +99 -8
  715. package/src/styles/canon/graphviz.ts +71 -10
  716. package/src/styles/canon/number.ts +19 -0
  717. package/src/styles/canon/text.ts +187 -16
  718. package/src/styles/codes.ts +2 -0
  719. package/src/styles/cyjs/cascade.ts +1193 -38
  720. package/src/styles/cyjs/defaults-table.ts +5 -0
  721. package/src/styles/cyjs/emit.ts +247 -16
  722. package/src/styles/cyjs/face.ts +372 -0
  723. package/src/styles/cyjs/mappers.ts +498 -28
  724. package/src/styles/cyjs/routes.ts +432 -0
  725. package/src/styles/cytoscape/charts.ts +684 -0
  726. package/src/styles/cytoscape/emit.ts +220 -44
  727. package/src/styles/cytoscape/lexicon.ts +459 -80
  728. package/src/styles/cytoscape/mappings.ts +108 -0
  729. package/src/styles/cytoscape/resolve.ts +763 -23
  730. package/src/styles/cytoscape/translate.ts +11 -11
  731. package/src/styles/defaults.ts +436 -38
  732. package/src/styles/index.ts +5 -0
  733. package/src/styles/internal.ts +1 -0
  734. package/src/styles/io/block.ts +10 -0
  735. package/src/styles/io/generic.ts +79 -23
  736. package/src/styles/io/round-trip.ts +202 -0
  737. package/src/styles/io/writer.ts +14 -4
  738. package/src/styles/notes.ts +1 -0
  739. package/src/styles/plan/features.ts +23 -2
  740. package/src/styles/plan/index.ts +1 -1
  741. package/src/styles/plan/plan.ts +69 -5
  742. package/src/styles/plan/resolve.ts +61 -6
  743. package/src/styles/slots.ts +25 -0
  744. package/src/styles/types.ts +658 -4
  745. package/src/styles/vocabulary.ts +226 -3
  746. package/src/types.ts +19 -5
  747. package/dist/chunks/block-DiGq58c3.js.map +0 -1
  748. package/dist/chunks/choose--jM0yYCo.js +0 -57
  749. package/dist/chunks/choose--jM0yYCo.js.map +0 -1
  750. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  751. package/dist/chunks/emit-CwU8cUmG.js.map +0 -1
  752. package/dist/chunks/export-BvqAXCKh.js.map +0 -1
  753. package/dist/chunks/exporter-CrDWIyiq.js.map +0 -1
  754. package/dist/chunks/format-BpQBx8MZ.js.map +0 -1
  755. package/dist/chunks/generic-Dq1ntt9q.js.map +0 -1
  756. package/dist/chunks/importer-BSvfrX_h.js.map +0 -1
  757. package/dist/chunks/importer-CMmeMWlC.js.map +0 -1
  758. package/dist/chunks/importer-COTK9Tsl.js.map +0 -1
  759. package/dist/chunks/importer-DiZRmOQG.js.map +0 -1
  760. package/dist/chunks/importer-e6LGpqHB.js.map +0 -1
  761. package/dist/chunks/importer-iFYPEKaJ.js.map +0 -1
  762. package/dist/chunks/importer-yh_aBCU6.js.map +0 -1
  763. package/dist/chunks/lexicon-CT69Kd87.js.map +0 -1
  764. package/dist/chunks/styles-BQnsga7p.js.map +0 -1
  765. package/dist/chunks/styles-D3fRphrO.js +0 -690
  766. package/dist/chunks/styles-D3fRphrO.js.map +0 -1
  767. package/dist/chunks/styles-yed-BF5x3_Y5.js +0 -842
  768. package/dist/chunks/styles-yed-BF5x3_Y5.js.map +0 -1
  769. package/dist/chunks/writer-DMKvthQE.js +0 -448
  770. package/dist/chunks/writer-DMKvthQE.js.map +0 -1
@@ -39,6 +39,29 @@ const opacity255: CytoscapeValueParser = (raw, site) => {
39
39
  // CX2's 0..1 opacity.
40
40
  const opacity01: CytoscapeValueParser = (raw, site) => canonOpacity(raw, "css", site);
41
41
  const length: CytoscapeValueParser = (raw, site) => canonNumber(raw, site);
42
+ // An arrow size as the neutral factor: Cytoscape's normal arrow is size 6 (default_vizmap.xml).
43
+ export const arrowSizeParser: CytoscapeValueParser = (raw, site) => {
44
+ const v = canonNumber(raw, site);
45
+ return v === null ? null : num6(v / 6);
46
+ };
47
+
48
+ // Degrees, clockwise on screen as Cytoscape turns a label, folded into 0..360.
49
+ // ponytail: a continuous mapping across 0 (from -30 to 30) folds to 330..30 and interpolates the long way round;
50
+ // keep the sign when a file needs it.
51
+ const rotation: CytoscapeValueParser = (raw, site) => {
52
+ const v = typeof raw === "number" ? raw : Number(scalarText(raw, site)?.trim() ?? Number.NaN);
53
+ if (!Number.isFinite(v)) {
54
+ noteAt(site, STYLE_ISSUE.BAD_VALUE, String(raw));
55
+ return null;
56
+ }
57
+ return num6(((v % 360) + 360) % 360);
58
+ };
59
+
60
+ // Cytoscape desktop holds a font size as a whole number, so every value read for one is drawn rounded.
61
+ const fontSize: CytoscapeValueParser = (raw, site) => {
62
+ const v = canonNumber(raw, site);
63
+ return v === null ? null : Math.round(v);
64
+ };
42
65
  const text: CytoscapeValueParser = (raw, site) => canonText(raw, site);
43
66
  const bool: CytoscapeValueParser = (raw, site) => canonBoolean(raw, site);
44
67
 
@@ -80,29 +103,34 @@ const shape: CytoscapeValueParser = (raw, site) => {
80
103
  const CY_ARROWS: ReadonlyMap<string, string> = new Map([
81
104
  ["none", "none"],
82
105
  ["delta", "triangle"],
83
- ["arrow", "vee"],
106
+ // a filled delta with a shallow notch in its back, as long and wide as DELTA (Cytoscape 3.10.5 SVG export)
107
+ ["arrow", "triangle"],
84
108
  ["diamond", "diamond"],
85
109
  ["circle", "circle"],
86
110
  ["t", "tee"],
87
111
  ["half_top", "half"],
88
- ["half_bottom", "half"],
112
+ // the half arrow on the line's other side from HALF_TOP's
113
+ ["half_bottom", "other:half-bottom"],
89
114
  ["square", "square"],
90
115
  ["delta_short_1", "triangle"],
91
116
  ["delta_short_2", "triangle"],
92
- ["arrow_short", "vee"],
117
+ // a short arrow whose notch is too shallow to show: drawn as the triangle it reads as
118
+ ["arrow_short", "triangle"],
93
119
  ["diamond_short_1", "diamond"],
94
120
  ["diamond_short_2", "diamond"],
95
121
  ["open_delta", "triangle-open"],
96
122
  ["open_circle", "circle-open"],
97
123
  ["open_diamond", "diamond-open"],
98
124
  ["open_square", "other:open-square"],
99
- ["cross_delta", "vee"],
100
- ["cross_open_delta", "triangle-open"],
125
+ // a delta with a bar across the line behind it
126
+ ["cross_delta", "other:cross-delta"],
127
+ ["cross_open_delta", "other:cross-open-delta"],
101
128
  ["open_half_circle", "other:open-half-circle"],
102
129
  ["half_circle", "other:half-circle"],
103
130
  ["triangle", "triangle"],
104
131
  ["triangle-tee", "tee"],
105
- ["triangle-cross", "vee"],
132
+ // CX2's spelling of CROSS_DELTA
133
+ ["triangle-cross", "other:cross-delta"],
106
134
  ["triangle-backcurve", "triangle"],
107
135
  ["tee", "tee"],
108
136
  ["vee", "vee"],
@@ -112,7 +140,44 @@ const CY_ARROWS: ReadonlyMap<string, string> = new Map([
112
140
  ["open-square", "other:open-square"],
113
141
  ["open-delta", "triangle-open"],
114
142
  ["half-top", "half"],
115
- ["half-bottom", "half"],
143
+ ["half-bottom", "other:half-bottom"],
144
+ ]);
145
+
146
+ /**
147
+ * How much longer and wider than the neutral shape it is read as each Cytoscape arrow is drawn: the short deltas and
148
+ * diamonds, the short arrow and the crossed deltas (a bar behind the delta), from the unit glyphs Cytoscape 3.10.5's
149
+ * SVG export draws (a DELTA is 2 long and 1 wide, DELTA_SHORT_1 1 by 1, ARROW_SHORT 1.2 by 0.8, CROSS_DELTA 3 by 1.5).
150
+ * Every other arrow is drawn in its shape's own proportions.
151
+ */
152
+ const CY_ARROW_PROPORTIONS: ReadonlyMap<string, { readonly length: number; readonly width: number }> = new Map([
153
+ ["delta_short_1", { length: 0.5, width: 1 }],
154
+ ["delta_short_2", { length: 0.25, width: 1 }],
155
+ ["arrow_short", { length: 0.6, width: 0.8 }],
156
+ ["diamond_short_1", { length: 0.5, width: 1 }],
157
+ ["diamond_short_2", { length: 0.25, width: 1 }],
158
+ ["cross_delta", { length: 1.5, width: 1.5 }],
159
+ ["cross_open_delta", { length: 1.5, width: 1.5 }],
160
+ ["triangle-cross", { length: 1.5, width: 1.5 }],
161
+ ]);
162
+
163
+ /**
164
+ * How far from its node Cytoscape draws each arrow that stands off the node's outline, as a multiple of the arrow's
165
+ * own length along its line, from the unit glyphs Cytoscape 3.10.5's SVG export draws back from the outline: T's bar
166
+ * from 0.8 to 1 (4 of its 0.2), a half circle from 0.5 to 1, HALF_TOP's barb from 0.3 to 1.435, a square from 0.25
167
+ * to 1.25. Every other arrow touches the outline.
168
+ */
169
+ const CY_ARROW_GAPS: ReadonlyMap<string, number> = new Map([
170
+ ["t", 4],
171
+ ["tee", 4],
172
+ ["half_circle", 1],
173
+ ["open_half_circle", 1],
174
+ ["half_top", 0.3 / 1.135],
175
+ ["half_bottom", 0.3 / 1.135],
176
+ ["half-top", 0.3 / 1.135],
177
+ ["half-bottom", 0.3 / 1.135],
178
+ ["square", 0.25],
179
+ ["open_square", 0.25],
180
+ ["open-square", 0.25],
116
181
  ]);
117
182
 
118
183
  /** Cytoscape 2.x numbered arrow codes. */
@@ -137,16 +202,55 @@ const LEGACY_ARROW: readonly string[] = [
137
202
  "half_bottom",
138
203
  ];
139
204
 
205
+ /**
206
+ * A Cytoscape arrow name, lowercase, with a 2.x numbered code read as its name.
207
+ * @param s - the raw name
208
+ * @returns the key
209
+ */
210
+ function arrowKey(s: string): string {
211
+ const key = s.trim().toLowerCase();
212
+ return /^\d{1,2}$/.test(key) ? (LEGACY_ARROW.at(Number(key)) ?? key) : key;
213
+ }
214
+
140
215
  const arrow: CytoscapeValueParser = (raw, site) => {
141
216
  const s = scalarText(raw, site);
142
217
  if (s === null) {
143
218
  return null;
144
219
  }
145
- let key = s.trim().toLowerCase();
146
- if (/^\d{1,2}$/.test(key)) {
147
- key = LEGACY_ARROW.at(Number(key)) ?? key;
220
+ return caseless(CY_ARROWS.get(arrowKey(s)) ?? canonEnum("arrow", s, "cytoscape", site));
221
+ };
222
+
223
+ /**
224
+ * The parser of an arrow's length or width as a fraction of its neutral shape's, from the arrow's name: 1 for every
225
+ * arrow Cytoscape draws in its shape's proportions, so a bypass over a short default draws the full shape again.
226
+ * @param side - which proportion
227
+ * @returns the parser; null for a name it does not know (the shape's parser notes it)
228
+ */
229
+ export function arrowProportion(side: "length" | "width"): CytoscapeValueParser {
230
+ return (raw, site) => {
231
+ const s = scalarText(raw, site);
232
+ if (s === null) {
233
+ return null;
234
+ }
235
+ const key = arrowKey(s);
236
+ return CY_ARROW_PROPORTIONS.get(key)?.[side] ?? (CY_ARROWS.has(key) ? 1 : null);
237
+ };
238
+ }
239
+
240
+ /**
241
+ * The parser of how far an arrow stands off its node, as a multiple of its own length (`CY_ARROW_GAPS`), from the
242
+ * arrow's name: 0 for an arrow that touches the node.
243
+ * @param raw - the arrow's name
244
+ * @param site - where it was read
245
+ * @returns the gap; null for a name it does not know (the shape's parser notes it)
246
+ */
247
+ export const arrowGap: CytoscapeValueParser = (raw, site) => {
248
+ const s = scalarText(raw, site);
249
+ if (s === null) {
250
+ return null;
148
251
  }
149
- return caseless(CY_ARROWS.get(key) ?? canonEnum("arrow", s, "cytoscape", site));
252
+ const key = arrowKey(s);
253
+ return CY_ARROW_GAPS.get(key) ?? (CY_ARROWS.has(key) ? 0 : null);
150
254
  };
151
255
 
152
256
  /** Cytoscape's line types, lowercase. */
@@ -194,8 +298,8 @@ function lineOf(kind: "lineStyle" | "borderStyle"): CytoscapeValueParser {
194
298
  if (v === null || isStyleValue("node", kind, v) || kind === "lineStyle") {
195
299
  return v;
196
300
  }
197
- // a line type a border does not have is kept as other:
198
- return `other:${key}`;
301
+ // a line type a border does not have is kept as other:, spelled as the line type's own (other:forward-slash)
302
+ return v.startsWith("other:") ? v : `other:${v}`;
199
303
  };
200
304
  }
201
305
 
@@ -206,10 +310,43 @@ interface FontFace {
206
310
  readonly italic: boolean;
207
311
  }
208
312
 
313
+ /**
314
+ * A Java font name's own style: `Dialog.bolditalic` is the bold italic face of `Dialog`, and Java draws it bold and
315
+ * italic whatever style the rest of the face states (`Dialog.bolditalic,plain,12` is drawn bold italic).
316
+ * @param name - the font name
317
+ * @returns the family without the suffix, and whether the suffix makes it bold or italic
318
+ */
319
+ function javaFace(name: string): FontFace {
320
+ const m = /\.(bold|italic|plain|bolditalic)$/i.exec(name);
321
+ const suffix = m?.[1].toLowerCase() ?? "";
322
+ return {
323
+ family: m === null ? name : name.slice(0, m.index),
324
+ weight: suffix.includes("bold") ? "bold" : "normal",
325
+ italic: suffix.includes("italic"),
326
+ };
327
+ }
328
+
329
+ /**
330
+ * A face whose family may carry a Java style suffix, its suffix's style added to the stated one.
331
+ * @param family - the family as written
332
+ * @param bold - whether the face states bold
333
+ * @param italic - whether the face states italic
334
+ * @returns the face
335
+ */
336
+ function withSuffix(family: string, bold: boolean, italic: boolean): FontFace {
337
+ const own = javaFace(family.trim());
338
+ return {
339
+ family: own.family,
340
+ weight: bold || own.weight === "bold" ? "bold" : "normal",
341
+ italic: italic || own.italic,
342
+ };
343
+ }
344
+
209
345
  /**
210
346
  * A font face: `SansSerif,plain,12`, `Dialog.bold,bold,12`, the legacy `SansSerif-0-12` (style bits 1 bold,
211
347
  * 2 italic) or CX2's `{ FONT_FAMILY, FONT_STYLE, FONT_WEIGHT }`, whose `FONT_NAME` (the font Cytoscape desktop
212
- * wrote it from, which its own import restores) wins over the CSS family when present.
348
+ * wrote it from, which its own import restores) wins over the CSS family when present. A Java style suffix on the
349
+ * name (`SansSerif.bold`) is drawn as well.
213
350
  * @param raw - the value
214
351
  * @param site - where it was read
215
352
  * @returns the face, or null
@@ -224,14 +361,12 @@ function fontFace(raw: unknown, site: CanonSite): FontFace | null {
224
361
  }
225
362
  const parts = s.split(",");
226
363
  if (parts.length >= 2) {
227
- const st = parts[1].trim().toLowerCase();
228
- return {
229
- family: parts[0].trim().replace(/\.(?:bold|italic|plain|bolditalic)$/i, ""),
230
- weight: st.includes("bold") ? "bold" : "normal",
231
- italic: st.includes("italic"),
232
- };
364
+ // desktop takes the face from the name alone (`FontVisualProperty.parseSerializableString`): its style word is
365
+ // what it writes, not what it reads, so a passthrough of `Serif,bold,12` is drawn plain (Cytoscape 3.10.5's
366
+ // SVG of specimen-mappings-bypass-p19, passthrough-font-face) and `SansSerif.bold,bold,10` bold by its suffix
367
+ return withSuffix(parts[0], false, false);
233
368
  }
234
- return legacyFontFace(s) ?? { family: s.trim(), weight: "normal", italic: false };
369
+ return legacyFontFace(s) ?? withSuffix(s, false, false);
235
370
  }
236
371
 
237
372
  /**
@@ -244,18 +379,14 @@ function cx2FontFace(o: Record<string, unknown>, site: CanonSite): FontFace | nu
244
379
  const name = Object.hasOwn(o, "FONT_NAME") ? scalarText(o.FONT_NAME, site) : null;
245
380
  let family = Object.hasOwn(o, "FONT_FAMILY") ? scalarText(o.FONT_FAMILY, site) : null;
246
381
  if (name !== null && name.trim() !== "") {
247
- family = name.trim().replace(/\.(?:bold|italic|plain|bolditalic)$/i, "");
382
+ family = name;
248
383
  }
249
384
  if (family === null) {
250
385
  return null;
251
386
  }
252
387
  const weight = Object.hasOwn(o, "FONT_WEIGHT") ? String(o.FONT_WEIGHT) : "";
253
388
  const style = Object.hasOwn(o, "FONT_STYLE") ? String(o.FONT_STYLE) : "";
254
- return {
255
- family: family.trim(),
256
- weight: /bold/i.test(weight.slice(0, 32)) ? "bold" : "normal",
257
- italic: /italic/i.test(style.slice(0, 32)),
258
- };
389
+ return withSuffix(family, /bold/i.test(weight.slice(0, 32)), /italic/i.test(style.slice(0, 32)));
259
390
  }
260
391
 
261
392
  /**
@@ -276,79 +407,254 @@ function legacyFontFace(s: string): FontFace | null {
276
407
  family = family.slice(0, -"-bold".length);
277
408
  bold = true;
278
409
  }
279
- return { family: family.replace(/\.bold$/i, ""), weight: bold ? "bold" : "normal", italic: (bits & 2) !== 0 };
410
+ return withSuffix(family, bold, (bits & 2) !== 0);
280
411
  }
281
412
 
282
- /** Java's logical font names, which Cytoscape desktop writes, as the CSS generic families they stand for. */
413
+ /**
414
+ * The faces Java draws its logical fonts in on Linux, where the oracles were drawn (the JDK's fontconfig maps
415
+ * SansSerif and Dialog to DejaVu Sans), each before the CSS generic family it stands for. A label wraps by its width
416
+ * in that face: a browser's own sans-serif (Liberation Sans) is 14 percent narrower, so its lines break later.
417
+ */
418
+ export const JAVA_SANS = "DejaVu Sans, sans-serif";
419
+ export const JAVA_SERIF = "DejaVu Serif, serif";
420
+ export const JAVA_MONO = "DejaVu Sans Mono, monospace";
421
+
283
422
  /** The family a Java logical font name is read as (`Dialog` is drawn as a sans-serif font). */
284
- export const JAVA_FONTS: ReadonlyMap<string, string> = new Map([
285
- ["sansserif", "sans-serif"],
286
- ["dialog", "sans-serif"],
287
- ["default", "sans-serif"],
288
- ["dialoginput", "monospace"],
289
- ["monospaced", "monospace"],
290
- ["serif", "serif"],
423
+ const JAVA_FONTS: ReadonlyMap<string, string> = new Map([
424
+ // CX2's CSS generic families too: Cytoscape desktop hands them to Java, which draws them as these
425
+ ["sans-serif", JAVA_SANS],
426
+ ["monospace", JAVA_MONO],
427
+ ["sansserif", JAVA_SANS],
428
+ ["dialog", JAVA_SANS],
429
+ ["default", JAVA_SANS],
430
+ ["dialoginput", JAVA_MONO],
431
+ ["monospaced", JAVA_MONO],
432
+ ["serif", JAVA_SERIF],
291
433
  ]);
292
434
 
293
435
  const fontFamily: CytoscapeValueParser = (raw, site) => {
294
436
  const family = fontFace(raw, site)?.family ?? null;
295
- return family === null ? null : (JAVA_FONTS.get(family.toLowerCase()) ?? family);
437
+ return family === null ? null : javaFamily(family);
296
438
  };
439
+
440
+ /** The CSS generic families. */
441
+ const CSS_GENERIC: ReadonlySet<string> = new Set([
442
+ "sans-serif",
443
+ "serif",
444
+ "monospace",
445
+ "cursive",
446
+ "fantasy",
447
+ "system-ui",
448
+ ]);
449
+
450
+ /**
451
+ * A Java font name as the CSS family Cytoscape draws it with: a logical name as its generic family, and any other
452
+ * with Dialog's face after it, because Java draws a font it does not have as Dialog
453
+ * (`Calibri-Bold` on a machine without Calibri is drawn in Dialog's face and measured so when a label wraps).
454
+ * @param family - the Java font name, without its style suffix
455
+ * @returns the CSS family
456
+ */
457
+ export function javaFamily(family: string): string {
458
+ const logical = JAVA_FONTS.get(family.toLowerCase());
459
+ if (logical !== undefined) {
460
+ return logical;
461
+ }
462
+ // a CSS generic family or family list (CX2 writes them) already says what stands in for a missing font
463
+ return family.includes(",") || CSS_GENERIC.has(family.toLowerCase()) ? family : `${family}, ${JAVA_SANS}`;
464
+ }
297
465
  const fontWeight: CytoscapeValueParser = (raw, site) => fontFace(raw, site)?.weight ?? null;
298
466
  const fontItalic: CytoscapeValueParser = (raw, site) => fontFace(raw, site)?.italic ?? null;
299
467
 
300
- /** The node anchor of a desktop label position `C,C,c,0.00,0.00`. */
301
- const ANCHOR: ReadonlyMap<string, string> = new Map([
302
- ["C", "center"],
303
- ["N", "top"],
304
- ["S", "bottom"],
305
- ["E", "right"],
306
- ["W", "left"],
307
- ["NE", "top-right"],
308
- ["NW", "top-left"],
309
- ["SE", "bottom-right"],
310
- ["SW", "bottom-left"],
311
- ["NONE", "center"],
468
+ /** A desktop anchor letter as a point of a box, x right and y down, each -1, 0 or 1. */
469
+ const ANCHOR: ReadonlyMap<string, readonly [number, number]> = new Map([
470
+ ["C", [0, 0]],
471
+ ["N", [0, -1]],
472
+ ["S", [0, 1]],
473
+ ["E", [1, 0]],
474
+ ["W", [-1, 0]],
475
+ ["NE", [1, -1]],
476
+ ["NW", [-1, -1]],
477
+ ["SE", [1, 1]],
478
+ ["SW", [-1, 1]],
479
+ ["NONE", [0, 0]],
312
480
  ]);
313
481
 
314
- /** CX2's `HORIZONTAL_ANCHOR,VERTICAL_ANCHOR`, lowercase. */
315
- const CX2_ANCHOR: ReadonlyMap<string, string> = new Map([
316
- ["center,center", "center"],
317
- ["center,top", "top"],
318
- ["center,bottom", "bottom"],
319
- ["right,center", "right"],
320
- ["left,center", "left"],
321
- ["right,top", "top-right"],
322
- ["left,top", "top-left"],
323
- ["right,bottom", "bottom-right"],
324
- ["left,bottom", "bottom-left"],
482
+ /** CX2's anchor and align words as a point of a box on one axis. */
483
+ const CX2_SIDE: ReadonlyMap<string, number> = new Map([
484
+ ["center", 0],
485
+ ["left", -1],
486
+ ["right", 1],
487
+ ["top", -1],
488
+ ["bottom", 1],
325
489
  ]);
326
490
 
327
- const labelPosition: CytoscapeValueParser = (raw, site) => {
328
- let key: string;
329
- let found: string | undefined;
491
+ /** A label justification as the neutral text alignment. */
492
+ const JUSTIFY: ReadonlyMap<string, string> = new Map([
493
+ ["l", "left"],
494
+ ["left", "left"],
495
+ ["c", "center"],
496
+ ["center", "center"],
497
+ ["r", "right"],
498
+ ["right", "right"],
499
+ ]);
500
+
501
+ /**
502
+ * A Cytoscape label position, read whole: the point of the node (or the edge's middle) `node` and the point of the
503
+ * label's box `label` it is pinned to, each `[x, y]` with x right and y down as -1, 0 or 1, the justification of its
504
+ * lines, and the offset `[x, y]` in px, y down.
505
+ * @category Styles
506
+ */
507
+ export interface CytoscapeLabelPlace {
508
+ readonly node: readonly [number, number];
509
+ readonly label: readonly [number, number];
510
+ readonly justify: string;
511
+ readonly offset: readonly [number, number];
512
+ }
513
+
514
+ /**
515
+ * The anchors of CX2's edge label position `{ EDGE_ANCHOR, LABEL_ANCHOR, ... }`, each a desktop anchor letter, as
516
+ * `[edge x, edge y, label x, label y]`; undefined where a letter is not one.
517
+ * @param o - the position
518
+ * @param site - where a bad value is noted
519
+ * @returns the four sides
520
+ */
521
+ function cx2EdgeAnchors(o: Record<string, unknown>, site: CanonSite): (number | undefined)[] {
522
+ const letter = (key: string): readonly [number, number] | undefined =>
523
+ ANCHOR.get((scalarText(Object.hasOwn(o, key) ? o[key] : "C", site) ?? "").trim().toUpperCase());
524
+ return [
525
+ ...(letter("EDGE_ANCHOR") ?? [undefined, undefined]),
526
+ ...(letter("LABEL_ANCHOR") ?? [undefined, undefined]),
527
+ ];
528
+ }
529
+
530
+ /**
531
+ * Reads a label position: desktop's `C,C,c,0.00,0.00` (node anchor, label anchor, justification, x and y offsets)
532
+ * or CX2's `{ HORIZONTAL_ANCHOR, VERTICAL_ANCHOR, HORIZONTAL_ALIGN, VERTICAL_ALIGN, JUSTIFICATION, MARGIN_X,
533
+ * MARGIN_Y }` (for an edge's label `{ EDGE_ANCHOR, LABEL_ANCHOR, JUSTIFICATION, MARGIN_X, MARGIN_Y }`, the anchors
534
+ * as desktop's letters).
535
+ * @param raw - the value
536
+ * @param site - where a bad value is noted
537
+ * @returns the place, or null
538
+ * @category Styles
539
+ */
540
+ export function cytoscapeLabelPlace(raw: unknown, site: CanonSite): CytoscapeLabelPlace | null {
330
541
  if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) {
331
542
  const o = raw as Record<string, unknown>;
332
- const h = scalarText(Object.hasOwn(o, "HORIZONTAL_ANCHOR") ? o.HORIZONTAL_ANCHOR : "center", site);
333
- const v = scalarText(Object.hasOwn(o, "VERTICAL_ANCHOR") ? o.VERTICAL_ANCHOR : "center", site);
334
- if (h === null || v === null) {
335
- return null;
336
- }
337
- key = `${h.trim().toLowerCase()},${v.trim().toLowerCase()}`;
338
- found = CX2_ANCHOR.get(key);
339
- } else {
340
- const s = scalarText(raw, site);
341
- if (s === null) {
543
+ const word = (key: string): string => {
544
+ const v = Object.hasOwn(o, key) ? scalarText(o[key], site) : null;
545
+ return (v ?? "center").trim().toLowerCase();
546
+ };
547
+ const num = (key: string): number => {
548
+ const v = Object.hasOwn(o, key) ? Number(o[key]) : 0;
549
+ return Number.isFinite(v) ? v : 0;
550
+ };
551
+ const sides = Object.hasOwn(o, "EDGE_ANCHOR")
552
+ ? cx2EdgeAnchors(o, site)
553
+ : ["HORIZONTAL_ANCHOR", "VERTICAL_ANCHOR", "HORIZONTAL_ALIGN", "VERTICAL_ALIGN"].map((k) =>
554
+ CX2_SIDE.get(word(k)),
555
+ );
556
+ if (sides.includes(undefined)) {
557
+ noteAt(site, STYLE_ISSUE.UNKNOWN_VALUE, JSON.stringify(raw).slice(0, 64));
342
558
  return null;
343
559
  }
344
- key = s;
345
- found = ANCHOR.get(s.split(",")[0].trim().toUpperCase());
560
+ const [nx, ny, lx, ly] = sides as number[];
561
+ return {
562
+ node: [nx, ny],
563
+ label: [lx, ly],
564
+ justify: JUSTIFY.get(word("JUSTIFICATION")) ?? "center",
565
+ offset: [num("MARGIN_X"), num("MARGIN_Y")],
566
+ };
567
+ }
568
+ const s = scalarText(raw, site);
569
+ if (s === null) {
570
+ return null;
346
571
  }
347
- if (found === undefined) {
348
- noteAt(site, STYLE_ISSUE.UNKNOWN_VALUE, key);
572
+ const parts = s.split(",").map((p) => p.trim());
573
+ const node = ANCHOR.get(parts[0].toUpperCase());
574
+ // a position naming only the node's anchor pins the label's opposite point there, as Cytoscape 2.x did
575
+ const label = parts.length > 1 ? ANCHOR.get(parts[1].toUpperCase()) : node?.map((v) => -v);
576
+ if (node === undefined || label === undefined) {
577
+ noteAt(site, STYLE_ISSUE.UNKNOWN_VALUE, s);
349
578
  return null;
350
579
  }
351
- return found;
580
+ const at = (i: number): number => {
581
+ const v = Number(parts[i] ?? 0);
582
+ return Number.isFinite(v) ? v : 0;
583
+ };
584
+ return {
585
+ node,
586
+ label: [label[0], label[1]],
587
+ justify: JUSTIFY.get((parts[2] ?? "c").toLowerCase()) ?? "center",
588
+ offset: [at(3), at(4)],
589
+ };
590
+ }
591
+
592
+ /** The neutral position of a label inside its node against each side, by `[x, y]` of the side, y down. */
593
+ const INSIDE: ReadonlyMap<string, string> = new Map([
594
+ ["0,0", "center"],
595
+ ["0,-1", "inside-top"],
596
+ ["0,1", "inside-bottom"],
597
+ ["-1,0", "inside-left"],
598
+ ["1,0", "inside-right"],
599
+ ["-1,-1", "inside-top-left"],
600
+ ["1,-1", "inside-top-right"],
601
+ ["-1,1", "inside-bottom-left"],
602
+ ["1,1", "inside-bottom-right"],
603
+ ]);
604
+
605
+ /**
606
+ * The neutral `labelPosition` a Cytoscape label position starts from: where the label's point is the node's own
607
+ * point on both axes (its center, or inside against a side or a corner), that position; anywhere else `center`,
608
+ * with the rest said by `labelOffsetX`/`Y` and `labelShiftX`/`Y` (see `cytoscapeLabelMove()`).
609
+ * @param place - the label position
610
+ * @returns the neutral position
611
+ * @category Styles
612
+ */
613
+ export function cytoscapeLabelBase(place: CytoscapeLabelPlace): string {
614
+ const inside = place.node[0] === place.label[0] && place.node[1] === place.label[1];
615
+ return inside ? (INSIDE.get(`${place.node[0]},${place.node[1]}`) ?? "center") : "center";
616
+ }
617
+
618
+ /**
619
+ * How far a Cytoscape label is moved from its `cytoscapeLabelBase()` position: the offset in px (y down), with the
620
+ * node's anchor point added when the base is `center` and the anchors differ, and the shift by the label's own
621
+ * size that pins the label's anchor point there.
622
+ * @param place - the label position
623
+ * @param width - the node's width (0 for an edge's middle)
624
+ * @param height - the node's height (0 for an edge's middle)
625
+ * @returns the offset and the shift, each `[x, y]`
626
+ * @category Styles
627
+ */
628
+ export function cytoscapeLabelMove(
629
+ place: CytoscapeLabelPlace,
630
+ width: number,
631
+ height: number,
632
+ ): { readonly offset: readonly [number, number]; readonly shift: readonly [number, number] } {
633
+ if (
634
+ cytoscapeLabelBase(place) !== "center" ||
635
+ (place.node[0] === 0 && place.node[1] === 0 && place.label[0] === 0 && place.label[1] === 0)
636
+ ) {
637
+ return { offset: place.offset, shift: [0, 0] };
638
+ }
639
+ return {
640
+ offset: [(place.node[0] * width) / 2 + place.offset[0], (place.node[1] * height) / 2 + place.offset[1]],
641
+ shift: [halfBack(place.label[0]), halfBack(place.label[1])],
642
+ };
643
+ }
644
+
645
+ /**
646
+ * How far a label is shifted, as a fraction of its own size, to pin its point `side` (-1, 0 or 1) where its middle was.
647
+ * @param side - the label's point on one axis
648
+ * @returns the shift (0, never -0, for the middle)
649
+ * @category Styles
650
+ */
651
+ export function halfBack(side: number): number {
652
+ return side === 0 ? 0 : -side / 2;
653
+ }
654
+
655
+ const labelPosition: CytoscapeValueParser = (raw, site) => {
656
+ const place = cytoscapeLabelPlace(raw, site);
657
+ return place === null ? null : cytoscapeLabelBase(place);
352
658
  };
353
659
 
354
660
  /**
@@ -383,6 +689,13 @@ export const CYTOSCAPE_LEXICON: Readonly<
383
689
  ["NODE_BORDER_COLOR", color],
384
690
  ],
385
691
  ],
692
+ [
693
+ "borderOpacity",
694
+ [
695
+ ["NODE_BORDER_TRANSPARENCY", opacity255],
696
+ ["NODE_BORDER_OPACITY", opacity01],
697
+ ],
698
+ ],
386
699
  ["borderWidth", [["NODE_BORDER_WIDTH", length]]],
387
700
  [
388
701
  "borderStyle",
@@ -397,11 +710,26 @@ export const CYTOSCAPE_LEXICON: Readonly<
397
710
  ["height", [["NODE_HEIGHT", length]]],
398
711
  ["label", [["NODE_LABEL", text]]],
399
712
  ["labelColor", [["NODE_LABEL_COLOR", color]]],
400
- ["labelSize", [["NODE_LABEL_FONT_SIZE", length]]],
713
+ ["labelSize", [["NODE_LABEL_FONT_SIZE", fontSize]]],
714
+ [
715
+ "labelWrapWidth",
716
+ [
717
+ ["NODE_LABEL_WIDTH", length],
718
+ ["NODE_LABEL_MAX_WIDTH", length],
719
+ ],
720
+ ],
401
721
  ["labelFont", [["NODE_LABEL_FONT_FACE", fontFamily]]],
402
722
  ["labelWeight", [["NODE_LABEL_FONT_FACE", fontWeight]]],
403
723
  ["labelItalic", [["NODE_LABEL_FONT_FACE", fontItalic]]],
404
724
  ["labelPosition", [["NODE_LABEL_POSITION", labelPosition]]],
725
+ ["labelRotation", [["NODE_LABEL_ROTATION", rotation]]],
726
+ [
727
+ "labelOpacity",
728
+ [
729
+ ["NODE_LABEL_TRANSPARENCY", opacity255],
730
+ ["NODE_LABEL_OPACITY", opacity01],
731
+ ],
732
+ ],
405
733
  ["tooltip", [["NODE_TOOLTIP", text]]],
406
734
  [
407
735
  "visible",
@@ -438,6 +766,14 @@ export const CYTOSCAPE_LEXICON: Readonly<
438
766
  ],
439
767
  ["sourceArrow", [["EDGE_SOURCE_ARROW_SHAPE", arrow]]],
440
768
  ["targetArrow", [["EDGE_TARGET_ARROW_SHAPE", arrow]]],
769
+ // One neutral size for both ends: the target's, else the source's.
770
+ [
771
+ "arrowSize",
772
+ [
773
+ ["EDGE_TARGET_ARROW_SIZE", arrowSizeParser],
774
+ ["EDGE_SOURCE_ARROW_SIZE", arrowSizeParser],
775
+ ],
776
+ ],
441
777
  [
442
778
  "sourceArrowColor",
443
779
  [
@@ -455,10 +791,25 @@ export const CYTOSCAPE_LEXICON: Readonly<
455
791
  ["curved", [["EDGE_CURVED", bool]]],
456
792
  ["label", [["EDGE_LABEL", text]]],
457
793
  ["labelColor", [["EDGE_LABEL_COLOR", color]]],
458
- ["labelSize", [["EDGE_LABEL_FONT_SIZE", length]]],
794
+ ["labelSize", [["EDGE_LABEL_FONT_SIZE", fontSize]]],
459
795
  ["labelFont", [["EDGE_LABEL_FONT_FACE", fontFamily]]],
460
796
  ["labelWeight", [["EDGE_LABEL_FONT_FACE", fontWeight]]],
461
797
  ["labelItalic", [["EDGE_LABEL_FONT_FACE", fontItalic]]],
798
+ [
799
+ "labelWrapWidth",
800
+ [
801
+ ["EDGE_LABEL_WIDTH", length],
802
+ ["EDGE_LABEL_MAX_WIDTH", length],
803
+ ],
804
+ ],
805
+ ["labelRotation", [["EDGE_LABEL_ROTATION", rotation]]],
806
+ [
807
+ "labelOpacity",
808
+ [
809
+ ["EDGE_LABEL_TRANSPARENCY", opacity255],
810
+ ["EDGE_LABEL_OPACITY", opacity01],
811
+ ],
812
+ ],
462
813
  ["tooltip", [["EDGE_TOOLTIP", text]]],
463
814
  [
464
815
  "visible",
@@ -479,6 +830,13 @@ export const sizeParser: CytoscapeValueParser = length;
479
830
  /** The parser of colors, for the network background and `arrowColorMatchesEdge`. */
480
831
  export const colorParser: CytoscapeValueParser = color;
481
832
 
833
+ /**
834
+ * The parser of 0..255 transparencies (desktop) and 0..1 opacities (CX2), by visual property.
835
+ * @param vp - the visual property (`*_TRANSPARENCY` or `*_OPACITY`)
836
+ * @returns its parser
837
+ */
838
+ export const opacityParser = (vp: string): CytoscapeValueParser => (vp.endsWith("_OPACITY") ? opacity01 : opacity255);
839
+
482
840
  /** Every visual property the lexicon reads. */
483
841
  const KNOWN_VPS: ReadonlySet<string> = new Set([
484
842
  NODE_SIZE_VP,
@@ -656,3 +1014,24 @@ export function normalizeVisualProperties(target: StyleTarget, raw: unknown, not
656
1014
  }
657
1015
  return out;
658
1016
  }
1017
+
1018
+ /**
1019
+ * The step a continuous mapping's value is rounded to for the integer visual properties Cytoscape desktop rounds an
1020
+ * interpolated value of (cytoscape-api BasicVisualLexicon: the font sizes and the 0..255 transparencies; the latter
1021
+ * read as opacities, so 1/255).
1022
+ */
1023
+ const INTEGER_VP_STEPS: ReadonlyMap<string, number> = new Map([
1024
+ ["NODE_LABEL_FONT_SIZE", 1],
1025
+ ["EDGE_LABEL_FONT_SIZE", 1],
1026
+ ["NODE_TRANSPARENCY", 1 / 255],
1027
+ ["EDGE_TRANSPARENCY", 1 / 255],
1028
+ ]);
1029
+
1030
+ /**
1031
+ * The step Cytoscape rounds an interpolated value of a visual property to.
1032
+ * @param vp - the visual property
1033
+ * @returns the step, or undefined for a property that holds fractions
1034
+ */
1035
+ export function vpStep(vp: string): number | undefined {
1036
+ return INTEGER_VP_STEPS.get(vp);
1037
+ }