@graphty/graph-io 0.3.48 → 0.3.50

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 (600) hide show
  1. package/dist/chunks/{approximations-C2riR4NT.js → approximations-BRXsll0T.js} +2 -2
  2. package/dist/chunks/{approximations-C2riR4NT.js.map → approximations-BRXsll0T.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-Cu22ewuS.js → block-yl0f_qLO.js} +931 -164
  6. package/dist/chunks/block-yl0f_qLO.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-CV_Bhcyi.js → codes-BE2xir2k.js} +6 -2
  10. package/dist/chunks/codes-BE2xir2k.js.map +1 -0
  11. package/dist/chunks/{constants-D0LqcsLJ.js → constants-CKkYLPtt.js} +2 -2
  12. package/dist/chunks/{constants-D0LqcsLJ.js.map → constants-CKkYLPtt.js.map} +1 -1
  13. package/dist/chunks/{context-cgmmOxZ2.js → context-DizmppHy.js} +5 -4
  14. package/dist/chunks/{context-cgmmOxZ2.js.map → context-DizmppHy.js.map} +1 -1
  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-BiQsnMTb.js → credentials-CmvJXYeH.js} +67 -16
  18. package/dist/chunks/credentials-CmvJXYeH.js.map +1 -0
  19. package/dist/chunks/{cx-export-BEeF6ymo.js → cx-export-Bt6NoqTQ.js} +3 -3
  20. package/dist/chunks/{cx-export-BEeF6ymo.js.map → cx-export-Bt6NoqTQ.js.map} +1 -1
  21. package/dist/chunks/descriptor-B28U25x4.js +60 -0
  22. package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
  23. package/dist/chunks/{descriptor-BJ-W0Jd-.js → descriptor-Dhez_Cew.js} +11 -2
  24. package/dist/chunks/descriptor-Dhez_Cew.js.map +1 -0
  25. package/dist/chunks/{emit-CD8xnY8s.js → emit-7Jkpg0yd.js} +1788 -133
  26. package/dist/chunks/emit-7Jkpg0yd.js.map +1 -0
  27. package/dist/chunks/{escape-DH2Egt-l.js → escape-CuCIzNMB.js} +8 -8
  28. package/dist/chunks/{escape-DH2Egt-l.js.map → escape-CuCIzNMB.js.map} +1 -1
  29. package/dist/chunks/{export-CZ7VRm4I.js → export-Cha4dRFz.js} +45 -387
  30. package/dist/chunks/export-Cha4dRFz.js.map +1 -0
  31. package/dist/chunks/{exporter-ChjL5fmP.js → exporter-1Ajud15J.js} +9 -8
  32. package/dist/chunks/{exporter-ChjL5fmP.js.map → exporter-1Ajud15J.js.map} +1 -1
  33. package/dist/chunks/{exporter-BIdaoIgh.js → exporter-B6yvL3wy.js} +7 -7
  34. package/dist/chunks/{exporter-BIdaoIgh.js.map → exporter-B6yvL3wy.js.map} +1 -1
  35. package/dist/chunks/{exporter-Dcw7Ldtq.js → exporter-BP6otMO6.js} +6 -6
  36. package/dist/chunks/{exporter-Dcw7Ldtq.js.map → exporter-BP6otMO6.js.map} +1 -1
  37. package/dist/chunks/{exporter-DtVU80Fa.js → exporter-CA5q8ROP.js} +9 -8
  38. package/dist/chunks/{exporter-DtVU80Fa.js.map → exporter-CA5q8ROP.js.map} +1 -1
  39. package/dist/chunks/{exporter-bxxjOrDZ.js → exporter-CQQZFJ2v.js} +1284 -156
  40. package/dist/chunks/exporter-CQQZFJ2v.js.map +1 -0
  41. package/dist/chunks/format-BXiAb-1h.js +408 -0
  42. package/dist/chunks/format-BXiAb-1h.js.map +1 -0
  43. package/dist/chunks/{generic-CP6YD34u.js → generic-Dc21MAdg.js} +387 -31
  44. package/dist/chunks/generic-Dc21MAdg.js.map +1 -0
  45. package/dist/chunks/{importer-B87_fmVx.js → importer-C6NVpCXp.js} +327 -84
  46. package/dist/chunks/importer-C6NVpCXp.js.map +1 -0
  47. package/dist/chunks/{importer-DPZDN40-.js → importer-CKFe4q54.js} +25 -17
  48. package/dist/chunks/importer-CKFe4q54.js.map +1 -0
  49. package/dist/chunks/{importer-Bji2MeWr.js → importer-CKbUbsJA.js} +13 -10
  50. package/dist/chunks/{importer-Bji2MeWr.js.map → importer-CKbUbsJA.js.map} +1 -1
  51. package/dist/chunks/{importer-CB_zV5_L.js → importer-ClCsdgTJ.js} +208 -1104
  52. package/dist/chunks/importer-ClCsdgTJ.js.map +1 -0
  53. package/dist/chunks/{importer-e3huMZbm.js → importer-CyVZTrf0.js} +14 -10
  54. package/dist/chunks/importer-CyVZTrf0.js.map +1 -0
  55. package/dist/chunks/{importer-CVT-JyDE.js → importer-DgG4v1Ms.js} +1537 -355
  56. package/dist/chunks/importer-DgG4v1Ms.js.map +1 -0
  57. package/dist/chunks/{importer-Cyy6UseH.js → importer-asFUrIsj.js} +66 -13
  58. package/dist/chunks/importer-asFUrIsj.js.map +1 -0
  59. package/dist/chunks/{input-Ccg9I22A.js → input-CAxt_aV-.js} +4 -4
  60. package/dist/chunks/{input-Ccg9I22A.js.map → input-CAxt_aV-.js.map} +1 -1
  61. package/dist/chunks/{json-elements-By172SVq.js → json-elements-Cq76WjnZ.js} +4 -4
  62. package/dist/chunks/{json-elements-By172SVq.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
  63. package/dist/chunks/{lexicon-u2SI5xcx.js → lexicon-IVRq2Uoo.js} +282 -74
  64. package/dist/chunks/lexicon-IVRq2Uoo.js.map +1 -0
  65. package/dist/chunks/{ontology-export-BwgMyuF0.js → ontology-export-OMo91mb0.js} +4 -4
  66. package/dist/chunks/{ontology-export-BwgMyuF0.js.map → ontology-export-OMo91mb0.js.map} +1 -1
  67. package/dist/chunks/{records-Cgvxz-Vx.js → records-NJiYvekn.js} +2 -2
  68. package/dist/chunks/{records-Cgvxz-Vx.js.map → records-NJiYvekn.js.map} +1 -1
  69. package/dist/chunks/{report-CgdsL9Hb.js → report-CwMfYa9J.js} +23 -23
  70. package/dist/chunks/{report-CgdsL9Hb.js.map → report-CwMfYa9J.js.map} +1 -1
  71. package/dist/chunks/round-trip-Cy3_SHRZ.js +79 -0
  72. package/dist/chunks/round-trip-Cy3_SHRZ.js.map +1 -0
  73. package/dist/chunks/{sigv4-LkAzsLAu.js → sigv4-BXwVbza3.js} +5 -5
  74. package/dist/chunks/sigv4-BXwVbza3.js.map +1 -0
  75. package/dist/chunks/{styles-CaABMoO1.js → styles-CAVmBLgp.js} +1237 -138
  76. package/dist/chunks/styles-CAVmBLgp.js.map +1 -0
  77. package/dist/chunks/styles-CPczw1Jz.js +1928 -0
  78. package/dist/chunks/styles-CPczw1Jz.js.map +1 -0
  79. package/dist/chunks/styles-boK6Ln54.js +2847 -0
  80. package/dist/chunks/styles-boK6Ln54.js.map +1 -0
  81. package/dist/chunks/{styles-yed-Cs1nmrjn.js → styles-yed-XeFBQ6VS.js} +506 -175
  82. package/dist/chunks/styles-yed-XeFBQ6VS.js.map +1 -0
  83. package/dist/chunks/{text-BuKQVMz2.js → text-ystE2bYi.js} +2 -2
  84. package/dist/chunks/{text-BuKQVMz2.js.map → text-ystE2bYi.js.map} +1 -1
  85. package/dist/csv.js +7 -7
  86. package/dist/cx.js +2 -2
  87. package/dist/cx2.js +2 -2
  88. package/dist/cys.js +1 -1
  89. package/dist/dot.js +8 -4
  90. package/dist/dot.js.map +1 -1
  91. package/dist/gexf.js +42 -12
  92. package/dist/gexf.js.map +1 -1
  93. package/dist/gml.js +848 -194
  94. package/dist/gml.js.map +1 -1
  95. package/dist/graph-io.js +230 -193
  96. package/dist/graph-io.js.map +1 -1
  97. package/dist/graphml.js +3 -3
  98. package/dist/json.js +3 -2
  99. package/dist/neo4j.js +6 -6
  100. package/dist/obo.js +1 -1
  101. package/dist/pajek.js +1 -1
  102. package/dist/positions.js +45 -3
  103. package/dist/positions.js.map +1 -1
  104. package/dist/sources-cypher.js +141 -23
  105. package/dist/sources-cypher.js.map +1 -1
  106. package/dist/sources-ndex.js +2 -2
  107. package/dist/sources-rest.js +32 -6
  108. package/dist/sources-rest.js.map +1 -1
  109. package/dist/sources-sparql.d.ts +1 -0
  110. package/dist/sources-sparql.js +439 -0
  111. package/dist/sources-sparql.js.map +1 -0
  112. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  113. package/dist/src/formats/cx/importer.js +5 -1
  114. package/dist/src/formats/cx/importer.js.map +1 -1
  115. package/dist/src/formats/cx/styles.d.ts +24 -1
  116. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  117. package/dist/src/formats/cx/styles.js +117 -11
  118. package/dist/src/formats/cx/styles.js.map +1 -1
  119. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  120. package/dist/src/formats/cx2/importer.js +1 -0
  121. package/dist/src/formats/cx2/importer.js.map +1 -1
  122. package/dist/src/formats/cx2/styles.d.ts.map +1 -1
  123. package/dist/src/formats/cx2/styles.js +3 -1
  124. package/dist/src/formats/cx2/styles.js.map +1 -1
  125. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cys/importer.js +1 -0
  127. package/dist/src/formats/cys/importer.js.map +1 -1
  128. package/dist/src/formats/cys/styles.d.ts +2 -0
  129. package/dist/src/formats/cys/styles.d.ts.map +1 -1
  130. package/dist/src/formats/cys/styles.js +15 -7
  131. package/dist/src/formats/cys/styles.js.map +1 -1
  132. package/dist/src/formats/dot/drawing.d.ts +98 -0
  133. package/dist/src/formats/dot/drawing.d.ts.map +1 -0
  134. package/dist/src/formats/dot/drawing.js +734 -0
  135. package/dist/src/formats/dot/drawing.js.map +1 -0
  136. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  137. package/dist/src/formats/dot/exporter.js +34 -2
  138. package/dist/src/formats/dot/exporter.js.map +1 -1
  139. package/dist/src/formats/dot/importer.d.ts +6 -1
  140. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  141. package/dist/src/formats/dot/importer.js +170 -33
  142. package/dist/src/formats/dot/importer.js.map +1 -1
  143. package/dist/src/formats/dot/index.d.ts +3 -1
  144. package/dist/src/formats/dot/index.d.ts.map +1 -1
  145. package/dist/src/formats/dot/index.js +2 -1
  146. package/dist/src/formats/dot/index.js.map +1 -1
  147. package/dist/src/formats/dot/label-places.d.ts +41 -0
  148. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  149. package/dist/src/formats/dot/label-places.js +185 -0
  150. package/dist/src/formats/dot/label-places.js.map +1 -0
  151. package/dist/src/formats/dot/names.d.ts +13 -0
  152. package/dist/src/formats/dot/names.d.ts.map +1 -1
  153. package/dist/src/formats/dot/names.js +13 -0
  154. package/dist/src/formats/dot/names.js.map +1 -1
  155. package/dist/src/formats/dot/record.d.ts +50 -0
  156. package/dist/src/formats/dot/record.d.ts.map +1 -0
  157. package/dist/src/formats/dot/record.js +275 -0
  158. package/dist/src/formats/dot/record.js.map +1 -0
  159. package/dist/src/formats/dot/styles.d.ts +72 -2
  160. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  161. package/dist/src/formats/dot/styles.js +1500 -119
  162. package/dist/src/formats/dot/styles.js.map +1 -1
  163. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  164. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  165. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  166. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  167. package/dist/src/formats/gexf/importer.d.ts +7 -0
  168. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  169. package/dist/src/formats/gexf/importer.js +41 -5
  170. package/dist/src/formats/gexf/importer.js.map +1 -1
  171. package/dist/src/formats/gexf/preview.d.ts +77 -0
  172. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  173. package/dist/src/formats/gexf/preview.js +191 -0
  174. package/dist/src/formats/gexf/preview.js.map +1 -0
  175. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  176. package/dist/src/formats/gexf/schema.js +2 -1
  177. package/dist/src/formats/gexf/schema.js.map +1 -1
  178. package/dist/src/formats/gexf/styles.d.ts +58 -31
  179. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  180. package/dist/src/formats/gexf/styles.js +848 -225
  181. package/dist/src/formats/gexf/styles.js.map +1 -1
  182. package/dist/src/formats/gml/importer.d.ts +5 -2
  183. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  184. package/dist/src/formats/gml/importer.js +258 -71
  185. package/dist/src/formats/gml/importer.js.map +1 -1
  186. package/dist/src/formats/gml/index.d.ts +1 -1
  187. package/dist/src/formats/gml/index.d.ts.map +1 -1
  188. package/dist/src/formats/gml/index.js +1 -1
  189. package/dist/src/formats/gml/index.js.map +1 -1
  190. package/dist/src/formats/gml/positions.d.ts +7 -0
  191. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  192. package/dist/src/formats/gml/positions.js +29 -7
  193. package/dist/src/formats/gml/positions.js.map +1 -1
  194. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  195. package/dist/src/formats/gml/styles.js +754 -102
  196. package/dist/src/formats/gml/styles.js.map +1 -1
  197. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  198. package/dist/src/formats/graphml/styles-plain.js +6 -10
  199. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  200. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  201. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  202. package/dist/src/formats/graphml/styles-yed.js +695 -164
  203. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  204. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  205. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  206. package/dist/src/formats/graphml/styles-yfiles3.js +431 -64
  207. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  208. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  209. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  210. package/dist/src/formats/graphml/yfiles.js +16 -6
  211. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  212. package/dist/src/formats/json/dialect.d.ts +3 -2
  213. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  214. package/dist/src/formats/json/dialect.js +39 -5
  215. package/dist/src/formats/json/dialect.js.map +1 -1
  216. package/dist/src/formats/json/importer.d.ts +13 -2
  217. package/dist/src/formats/json/importer.d.ts.map +1 -1
  218. package/dist/src/formats/json/importer.js +42 -6
  219. package/dist/src/formats/json/importer.js.map +1 -1
  220. package/dist/src/formats/json/index.d.ts +1 -1
  221. package/dist/src/formats/json/index.d.ts.map +1 -1
  222. package/dist/src/formats/json/index.js +1 -1
  223. package/dist/src/formats/json/index.js.map +1 -1
  224. package/dist/src/formats/json/positions.d.ts +5 -2
  225. package/dist/src/formats/json/positions.d.ts.map +1 -1
  226. package/dist/src/formats/json/positions.js +20 -4
  227. package/dist/src/formats/json/positions.js.map +1 -1
  228. package/dist/src/formats/json/styles.d.ts +12 -1
  229. package/dist/src/formats/json/styles.d.ts.map +1 -1
  230. package/dist/src/formats/json/styles.js +1843 -136
  231. package/dist/src/formats/json/styles.js.map +1 -1
  232. package/dist/src/formats/pajek/draw.d.ts +104 -0
  233. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  234. package/dist/src/formats/pajek/draw.js +382 -0
  235. package/dist/src/formats/pajek/draw.js.map +1 -0
  236. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  237. package/dist/src/formats/pajek/exporter.js +70 -51
  238. package/dist/src/formats/pajek/exporter.js.map +1 -1
  239. package/dist/src/formats/pajek/importer.d.ts +9 -0
  240. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  241. package/dist/src/formats/pajek/importer.js +233 -102
  242. package/dist/src/formats/pajek/importer.js.map +1 -1
  243. package/dist/src/formats/pajek/index.d.ts +1 -0
  244. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  245. package/dist/src/formats/pajek/index.js.map +1 -1
  246. package/dist/src/formats/pajek/styles.d.ts +15 -7
  247. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  248. package/dist/src/formats/pajek/styles.js +1395 -114
  249. package/dist/src/formats/pajek/styles.js.map +1 -1
  250. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  251. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  252. package/dist/src/formats/pajek/syntax.js +26 -2
  253. package/dist/src/formats/pajek/syntax.js.map +1 -1
  254. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  255. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  256. package/dist/src/formats/xgmml/emit.js +65 -5
  257. package/dist/src/formats/xgmml/emit.js.map +1 -1
  258. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  259. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  260. package/dist/src/formats/xgmml/styles.js +277 -60
  261. package/dist/src/formats/xgmml/styles.js.map +1 -1
  262. package/dist/src/index.d.ts +6 -5
  263. package/dist/src/index.d.ts.map +1 -1
  264. package/dist/src/index.js +6 -5
  265. package/dist/src/index.js.map +1 -1
  266. package/dist/src/positions/convert.d.ts.map +1 -1
  267. package/dist/src/positions/convert.js +11 -1
  268. package/dist/src/positions/convert.js.map +1 -1
  269. package/dist/src/positions/extract.d.ts.map +1 -1
  270. package/dist/src/positions/extract.js +53 -1
  271. package/dist/src/positions/extract.js.map +1 -1
  272. package/dist/src/positions/index.d.ts +1 -1
  273. package/dist/src/positions/index.d.ts.map +1 -1
  274. package/dist/src/positions/types.d.ts +59 -0
  275. package/dist/src/positions/types.d.ts.map +1 -1
  276. package/dist/src/sources/builtins.d.ts +1 -1
  277. package/dist/src/sources/builtins.d.ts.map +1 -1
  278. package/dist/src/sources/builtins.js +8 -2
  279. package/dist/src/sources/builtins.js.map +1 -1
  280. package/dist/src/sources/context.d.ts.map +1 -1
  281. package/dist/src/sources/context.js +1 -0
  282. package/dist/src/sources/context.js.map +1 -1
  283. package/dist/src/sources/credentials.d.ts +50 -1
  284. package/dist/src/sources/credentials.d.ts.map +1 -1
  285. package/dist/src/sources/credentials.js +69 -0
  286. package/dist/src/sources/credentials.js.map +1 -1
  287. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -1
  288. package/dist/src/sources/cypher/descriptor.js +5 -0
  289. package/dist/src/sources/cypher/descriptor.js.map +1 -1
  290. package/dist/src/sources/cypher/index.d.ts.map +1 -1
  291. package/dist/src/sources/cypher/index.js +125 -18
  292. package/dist/src/sources/cypher/index.js.map +1 -1
  293. package/dist/src/sources/cypher/params.d.ts +1 -1
  294. package/dist/src/sources/cypher/params.d.ts.map +1 -1
  295. package/dist/src/sources/cypher/query-builder.d.ts +17 -0
  296. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
  297. package/dist/src/sources/cypher/query-builder.js +31 -0
  298. package/dist/src/sources/cypher/query-builder.js.map +1 -1
  299. package/dist/src/sources/ids.d.ts +5 -0
  300. package/dist/src/sources/ids.d.ts.map +1 -1
  301. package/dist/src/sources/ids.js +5 -0
  302. package/dist/src/sources/ids.js.map +1 -1
  303. package/dist/src/sources/params.d.ts +3 -0
  304. package/dist/src/sources/params.d.ts.map +1 -1
  305. package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
  306. package/dist/src/sources/rest/descriptor.js +9 -0
  307. package/dist/src/sources/rest/descriptor.js.map +1 -1
  308. package/dist/src/sources/rest/openalex.d.ts +4 -2
  309. package/dist/src/sources/rest/openalex.d.ts.map +1 -1
  310. package/dist/src/sources/rest/openalex.js +4 -2
  311. package/dist/src/sources/rest/openalex.js.map +1 -1
  312. package/dist/src/sources/rest/source.d.ts.map +1 -1
  313. package/dist/src/sources/rest/source.js +38 -0
  314. package/dist/src/sources/rest/source.js.map +1 -1
  315. package/dist/src/sources/run.d.ts +2 -0
  316. package/dist/src/sources/run.d.ts.map +1 -1
  317. package/dist/src/sources/run.js +30 -3
  318. package/dist/src/sources/run.js.map +1 -1
  319. package/dist/src/sources/sigv4.d.ts +5 -3
  320. package/dist/src/sources/sigv4.d.ts.map +1 -1
  321. package/dist/src/sources/sigv4.js +6 -4
  322. package/dist/src/sources/sigv4.js.map +1 -1
  323. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  324. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  325. package/dist/src/sources/sparql/descriptor.js +64 -0
  326. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  327. package/dist/src/sources/sparql/index.d.ts +28 -0
  328. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  329. package/dist/src/sources/sparql/index.js +327 -0
  330. package/dist/src/sources/sparql/index.js.map +1 -0
  331. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  332. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  333. package/dist/src/sources/sparql/ntriples.js +180 -0
  334. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  335. package/dist/src/sources/sparql/params.d.ts +27 -0
  336. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  337. package/dist/src/sources/sparql/params.js +5 -0
  338. package/dist/src/sources/sparql/params.js.map +1 -0
  339. package/dist/src/sources/sparql/query.d.ts +73 -0
  340. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  341. package/dist/src/sources/sparql/query.js +164 -0
  342. package/dist/src/sources/sparql/query.js.map +1 -0
  343. package/dist/src/sources/types.d.ts +60 -0
  344. package/dist/src/sources/types.d.ts.map +1 -1
  345. package/dist/src/styles/annotations.d.ts +61 -5
  346. package/dist/src/styles/annotations.d.ts.map +1 -1
  347. package/dist/src/styles/annotations.js +130 -22
  348. package/dist/src/styles/annotations.js.map +1 -1
  349. package/dist/src/styles/canon/bends.d.ts +46 -0
  350. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  351. package/dist/src/styles/canon/bends.js +123 -0
  352. package/dist/src/styles/canon/bends.js.map +1 -1
  353. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  354. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  355. package/dist/src/styles/canon/color-tables.js +10 -4
  356. package/dist/src/styles/canon/color-tables.js.map +1 -1
  357. package/dist/src/styles/canon/color.d.ts +3 -1
  358. package/dist/src/styles/canon/color.d.ts.map +1 -1
  359. package/dist/src/styles/canon/color.js +103 -3
  360. package/dist/src/styles/canon/color.js.map +1 -1
  361. package/dist/src/styles/canon/enums.d.ts +2 -2
  362. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  363. package/dist/src/styles/canon/enums.js +89 -7
  364. package/dist/src/styles/canon/enums.js.map +1 -1
  365. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  366. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  367. package/dist/src/styles/canon/graphviz.js +57 -9
  368. package/dist/src/styles/canon/graphviz.js.map +1 -1
  369. package/dist/src/styles/canon/number.d.ts +8 -0
  370. package/dist/src/styles/canon/number.d.ts.map +1 -1
  371. package/dist/src/styles/canon/number.js +18 -0
  372. package/dist/src/styles/canon/number.js.map +1 -1
  373. package/dist/src/styles/canon/text.d.ts +29 -2
  374. package/dist/src/styles/canon/text.d.ts.map +1 -1
  375. package/dist/src/styles/canon/text.js +156 -16
  376. package/dist/src/styles/canon/text.js.map +1 -1
  377. package/dist/src/styles/codes.d.ts +2 -0
  378. package/dist/src/styles/codes.d.ts.map +1 -1
  379. package/dist/src/styles/codes.js +2 -0
  380. package/dist/src/styles/codes.js.map +1 -1
  381. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  382. package/dist/src/styles/cyjs/cascade.js +1139 -79
  383. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  384. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  385. package/dist/src/styles/cyjs/defaults-table.js +4 -0
  386. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  387. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  388. package/dist/src/styles/cyjs/emit.js +232 -10
  389. package/dist/src/styles/cyjs/emit.js.map +1 -1
  390. package/dist/src/styles/cyjs/face.d.ts +20 -0
  391. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  392. package/dist/src/styles/cyjs/face.js +332 -0
  393. package/dist/src/styles/cyjs/face.js.map +1 -0
  394. package/dist/src/styles/cyjs/mappers.d.ts +44 -1
  395. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  396. package/dist/src/styles/cyjs/mappers.js +475 -26
  397. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  398. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  399. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  400. package/dist/src/styles/cyjs/routes.js +360 -0
  401. package/dist/src/styles/cyjs/routes.js.map +1 -0
  402. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  403. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  404. package/dist/src/styles/cytoscape/charts.js +560 -0
  405. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  406. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  407. package/dist/src/styles/cytoscape/emit.js +156 -48
  408. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  409. package/dist/src/styles/cytoscape/lexicon.d.ts +91 -3
  410. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  411. package/dist/src/styles/cytoscape/lexicon.js +387 -77
  412. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  413. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  414. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  415. package/dist/src/styles/cytoscape/mappings.js +92 -0
  416. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  417. package/dist/src/styles/cytoscape/resolve.d.ts +42 -2
  418. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  419. package/dist/src/styles/cytoscape/resolve.js +623 -17
  420. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  421. package/dist/src/styles/defaults.d.ts +46 -26
  422. package/dist/src/styles/defaults.d.ts.map +1 -1
  423. package/dist/src/styles/defaults.js +308 -71
  424. package/dist/src/styles/defaults.js.map +1 -1
  425. package/dist/src/styles/index.d.ts +4 -3
  426. package/dist/src/styles/index.d.ts.map +1 -1
  427. package/dist/src/styles/index.js +3 -2
  428. package/dist/src/styles/index.js.map +1 -1
  429. package/dist/src/styles/internal.d.ts +1 -0
  430. package/dist/src/styles/internal.d.ts.map +1 -1
  431. package/dist/src/styles/internal.js +1 -0
  432. package/dist/src/styles/internal.js.map +1 -1
  433. package/dist/src/styles/io/generic.d.ts.map +1 -1
  434. package/dist/src/styles/io/generic.js +56 -16
  435. package/dist/src/styles/io/generic.js.map +1 -1
  436. package/dist/src/styles/io/round-trip.d.ts +56 -0
  437. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  438. package/dist/src/styles/io/round-trip.js +138 -0
  439. package/dist/src/styles/io/round-trip.js.map +1 -0
  440. package/dist/src/styles/io/writer.d.ts.map +1 -1
  441. package/dist/src/styles/io/writer.js +6 -1
  442. package/dist/src/styles/io/writer.js.map +1 -1
  443. package/dist/src/styles/notes.d.ts.map +1 -1
  444. package/dist/src/styles/notes.js +1 -0
  445. package/dist/src/styles/notes.js.map +1 -1
  446. package/dist/src/styles/plan/features.d.ts +1 -1
  447. package/dist/src/styles/plan/features.d.ts.map +1 -1
  448. package/dist/src/styles/plan/features.js +22 -2
  449. package/dist/src/styles/plan/features.js.map +1 -1
  450. package/dist/src/styles/plan/index.d.ts +1 -1
  451. package/dist/src/styles/plan/index.d.ts.map +1 -1
  452. package/dist/src/styles/plan/index.js +1 -1
  453. package/dist/src/styles/plan/index.js.map +1 -1
  454. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  455. package/dist/src/styles/plan/plan.js +61 -4
  456. package/dist/src/styles/plan/plan.js.map +1 -1
  457. package/dist/src/styles/plan/resolve.d.ts +11 -0
  458. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  459. package/dist/src/styles/plan/resolve.js +40 -4
  460. package/dist/src/styles/plan/resolve.js.map +1 -1
  461. package/dist/src/styles/slots.d.ts +14 -0
  462. package/dist/src/styles/slots.d.ts.map +1 -0
  463. package/dist/src/styles/slots.js +20 -0
  464. package/dist/src/styles/slots.js.map +1 -0
  465. package/dist/src/styles/types.d.ts +687 -6
  466. package/dist/src/styles/types.d.ts.map +1 -1
  467. package/dist/src/styles/vocabulary.d.ts +3 -2
  468. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  469. package/dist/src/styles/vocabulary.js +224 -0
  470. package/dist/src/styles/vocabulary.js.map +1 -1
  471. package/dist/styles.js +30 -239
  472. package/dist/styles.js.map +1 -1
  473. package/dist/xgmml.js +3 -3
  474. package/package.json +27 -7
  475. package/src/formats/cx/importer.ts +6 -1
  476. package/src/formats/cx/styles.ts +143 -9
  477. package/src/formats/cx2/importer.ts +1 -0
  478. package/src/formats/cx2/styles.ts +3 -1
  479. package/src/formats/cys/importer.ts +1 -0
  480. package/src/formats/cys/styles.ts +27 -5
  481. package/src/formats/dot/drawing.ts +799 -0
  482. package/src/formats/dot/exporter.ts +37 -1
  483. package/src/formats/dot/importer.ts +192 -36
  484. package/src/formats/dot/index.ts +3 -1
  485. package/src/formats/dot/label-places.ts +241 -0
  486. package/src/formats/dot/names.ts +15 -0
  487. package/src/formats/dot/record.ts +336 -0
  488. package/src/formats/dot/styles.ts +1702 -149
  489. package/src/formats/gexf/dialog-metrics.ts +61 -0
  490. package/src/formats/gexf/importer.ts +50 -5
  491. package/src/formats/gexf/preview.ts +217 -0
  492. package/src/formats/gexf/schema.ts +2 -1
  493. package/src/formats/gexf/styles.ts +1099 -245
  494. package/src/formats/gml/importer.ts +291 -76
  495. package/src/formats/gml/index.ts +1 -1
  496. package/src/formats/gml/positions.ts +29 -7
  497. package/src/formats/gml/styles.ts +852 -110
  498. package/src/formats/graphml/styles-plain.ts +6 -15
  499. package/src/formats/graphml/styles-yed.ts +765 -176
  500. package/src/formats/graphml/styles-yfiles3.ts +487 -63
  501. package/src/formats/graphml/yfiles.ts +19 -6
  502. package/src/formats/json/dialect.ts +41 -5
  503. package/src/formats/json/importer.ts +59 -7
  504. package/src/formats/json/index.ts +1 -0
  505. package/src/formats/json/positions.ts +22 -5
  506. package/src/formats/json/styles.ts +2123 -171
  507. package/src/formats/pajek/draw.ts +469 -0
  508. package/src/formats/pajek/exporter.ts +81 -49
  509. package/src/formats/pajek/importer.ts +278 -103
  510. package/src/formats/pajek/index.ts +1 -0
  511. package/src/formats/pajek/styles.ts +1506 -133
  512. package/src/formats/pajek/syntax.ts +27 -2
  513. package/src/formats/xgmml/emit.ts +73 -5
  514. package/src/formats/xgmml/styles.ts +330 -71
  515. package/src/index.ts +12 -1
  516. package/src/positions/convert.ts +12 -1
  517. package/src/positions/extract.ts +55 -1
  518. package/src/positions/index.ts +1 -0
  519. package/src/positions/types.ts +60 -0
  520. package/src/sources/builtins.ts +8 -1
  521. package/src/sources/context.ts +1 -0
  522. package/src/sources/credentials.ts +90 -1
  523. package/src/sources/cypher/descriptor.ts +7 -1
  524. package/src/sources/cypher/index.ts +149 -18
  525. package/src/sources/cypher/params.ts +1 -1
  526. package/src/sources/cypher/query-builder.ts +33 -0
  527. package/src/sources/ids.ts +6 -0
  528. package/src/sources/params.ts +3 -0
  529. package/src/sources/rest/descriptor.ts +9 -0
  530. package/src/sources/rest/openalex.ts +4 -2
  531. package/src/sources/rest/source.ts +41 -0
  532. package/src/sources/run.ts +35 -3
  533. package/src/sources/sigv4.ts +6 -4
  534. package/src/sources/sparql/descriptor.ts +67 -0
  535. package/src/sources/sparql/index.ts +371 -0
  536. package/src/sources/sparql/ntriples.ts +219 -0
  537. package/src/sources/sparql/params.ts +28 -0
  538. package/src/sources/sparql/query.ts +216 -0
  539. package/src/sources/types.ts +68 -0
  540. package/src/styles/annotations.ts +201 -27
  541. package/src/styles/canon/bends.ts +137 -0
  542. package/src/styles/canon/color-tables.ts +10 -4
  543. package/src/styles/canon/color.ts +105 -3
  544. package/src/styles/canon/enums.ts +107 -8
  545. package/src/styles/canon/graphviz.ts +71 -10
  546. package/src/styles/canon/number.ts +19 -0
  547. package/src/styles/canon/text.ts +187 -16
  548. package/src/styles/codes.ts +2 -0
  549. package/src/styles/cyjs/cascade.ts +1303 -84
  550. package/src/styles/cyjs/defaults-table.ts +4 -0
  551. package/src/styles/cyjs/emit.ts +268 -14
  552. package/src/styles/cyjs/face.ts +372 -0
  553. package/src/styles/cyjs/mappers.ts +506 -27
  554. package/src/styles/cyjs/routes.ts +432 -0
  555. package/src/styles/cytoscape/charts.ts +684 -0
  556. package/src/styles/cytoscape/emit.ts +170 -48
  557. package/src/styles/cytoscape/lexicon.ts +431 -78
  558. package/src/styles/cytoscape/mappings.ts +108 -0
  559. package/src/styles/cytoscape/resolve.ts +741 -17
  560. package/src/styles/defaults.ts +417 -108
  561. package/src/styles/index.ts +5 -0
  562. package/src/styles/internal.ts +1 -0
  563. package/src/styles/io/generic.ts +79 -23
  564. package/src/styles/io/round-trip.ts +202 -0
  565. package/src/styles/io/writer.ts +6 -1
  566. package/src/styles/notes.ts +1 -0
  567. package/src/styles/plan/features.ts +23 -2
  568. package/src/styles/plan/index.ts +1 -1
  569. package/src/styles/plan/plan.ts +69 -5
  570. package/src/styles/plan/resolve.ts +47 -4
  571. package/src/styles/slots.ts +25 -0
  572. package/src/styles/types.ts +698 -5
  573. package/src/styles/vocabulary.ts +232 -2
  574. package/dist/chunks/block-Cu22ewuS.js.map +0 -1
  575. package/dist/chunks/choose-Cdx6Enl2.js +0 -57
  576. package/dist/chunks/choose-Cdx6Enl2.js.map +0 -1
  577. package/dist/chunks/codes-CV_Bhcyi.js.map +0 -1
  578. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  579. package/dist/chunks/credentials-BiQsnMTb.js.map +0 -1
  580. package/dist/chunks/descriptor-BJ-W0Jd-.js.map +0 -1
  581. package/dist/chunks/emit-CD8xnY8s.js.map +0 -1
  582. package/dist/chunks/export-CZ7VRm4I.js.map +0 -1
  583. package/dist/chunks/exporter-bxxjOrDZ.js.map +0 -1
  584. package/dist/chunks/format-BMS-1Nxb.js +0 -64
  585. package/dist/chunks/format-BMS-1Nxb.js.map +0 -1
  586. package/dist/chunks/generic-CP6YD34u.js.map +0 -1
  587. package/dist/chunks/importer-B87_fmVx.js.map +0 -1
  588. package/dist/chunks/importer-CB_zV5_L.js.map +0 -1
  589. package/dist/chunks/importer-CVT-JyDE.js.map +0 -1
  590. package/dist/chunks/importer-Cyy6UseH.js.map +0 -1
  591. package/dist/chunks/importer-DPZDN40-.js.map +0 -1
  592. package/dist/chunks/importer-e3huMZbm.js.map +0 -1
  593. package/dist/chunks/lexicon-u2SI5xcx.js.map +0 -1
  594. package/dist/chunks/sigv4-LkAzsLAu.js.map +0 -1
  595. package/dist/chunks/styles-CaABMoO1.js.map +0 -1
  596. package/dist/chunks/styles-P_gmFAOi.js +0 -770
  597. package/dist/chunks/styles-P_gmFAOi.js.map +0 -1
  598. package/dist/chunks/styles-yed-Cs1nmrjn.js.map +0 -1
  599. package/dist/chunks/writer-DvHTl36J.js +0 -449
  600. package/dist/chunks/writer-DvHTl36J.js.map +0 -1
@@ -1,47 +1,9 @@
1
- import { t as toNeutral, a as toFilePositions } from "./convert-BcQ8_jMo.js";
2
- import { p as plainCell, n as noteAt, a as STYLE_ISSUE, h as canonNumber, l as canonEnum, g as canonColor, y as colorOpacity, M as MAX_STYLE_VALUE_LENGTH, o as canonText } from "./block-Cu22ewuS.js";
3
- import { S as StyleApproximations } from "./approximations-C2riR4NT.js";
4
- const fraction = (v) => String(Math.round(v * 1e4) / 1e4);
5
- function canonBends(source, target, points, yDown) {
6
- const flip = -1;
7
- const dx = target[0] - source[0];
8
- const dy = (target[1] - source[1]) * flip;
9
- const length2 = dx * dx + dy * dy;
10
- if (points.length === 0 || length2 <= 0 || !Number.isFinite(length2)) {
11
- return null;
12
- }
13
- const out = [];
14
- for (const [px, py] of points) {
15
- const rx = px - source[0];
16
- const ry = (py - source[1]) * flip;
17
- const along = (rx * dx + ry * dy) / length2;
18
- const across = (dx * ry - dy * rx) / length2;
19
- if (!Number.isFinite(along) || !Number.isFinite(across)) {
20
- return null;
21
- }
22
- out.push(`${fraction(along)},${fraction(across)}`);
23
- }
24
- return out.join(" ");
25
- }
26
- function bendsToPoints(source, target, value, yDown) {
27
- const flip = -1;
28
- const dx = target[0] - source[0];
29
- const dy = (target[1] - source[1]) * flip;
30
- const out = [];
31
- for (const pair of value.trim().split(/\s+/)) {
32
- const [a, c, extra] = pair.split(",").map(Number);
33
- if (extra !== void 0 || !Number.isFinite(a) || !Number.isFinite(c)) {
34
- return null;
35
- }
36
- const x = source[0] + a * dx - c * dy;
37
- const y = source[1] + (a * dy + c * dx) * flip;
38
- if (!Number.isFinite(x) || !Number.isFinite(y)) {
39
- return null;
40
- }
41
- out.push([x, y]);
42
- }
43
- return out.length === 0 ? null : out;
44
- }
1
+ import { t as toNeutral, a as toFilePositions } from "./convert-Ct2zelbQ.js";
2
+ import { n as nodeOffsetsToPoints, b as bendsToPoints, f as flattenCubic, a as flattenQuadSpline, c as canonNodeOffsets, d as canonBends } from "./bends-BGXjv_U4.js";
3
+ import { p as plainCell, c as canonNumber, a as canonEnum, n as noteAt, b as STYLE_ISSUE, d as canonColor, e as colorOpacity, M as MAX_STYLE_VALUE_LENGTH, f as canonText, g as canonSigned, h as StyleNotes } from "./block-yl0f_qLO.js";
4
+ import { J as JAVA_MONO, a as JAVA_SERIF, b as JAVA_SANS, j as javaFamily } from "./lexicon-IVRq2Uoo.js";
5
+ import { S as StyleApproximations } from "./approximations-BRXsll0T.js";
6
+ import { e as elementValues, t as takeFromBlock } from "./round-trip-Cy3_SHRZ.js";
45
7
  function isTree(value) {
46
8
  return typeof value === "object" && value !== null && !Array.isArray(value);
47
9
  }
@@ -164,20 +126,120 @@ function activeRealizer(proxy) {
164
126
  const active = Number(treeAttr(realizers, "active") ?? "0");
165
127
  return all[Number.isInteger(active) && active >= 0 && active < all.length ? active : 0] ?? null;
166
128
  }
167
- const FLOWCHART_SHAPES = /* @__PURE__ */ new Map([
168
- ["process", "rectangle"],
169
- ["decision", "diamond"],
170
- ["terminator", "round-rectangle"],
171
- ["start1", "ellipse"],
172
- ["start2", "ellipse"],
173
- ["data", "parallelogram"],
174
- ["preparation", "hexagon"]
129
+ function arcPoints(cx, cy, rx, ry, from, to, steps = 12) {
130
+ return Array.from({ length: steps + 1 }, (_, i) => {
131
+ const t = from + (to - from) * i / steps;
132
+ return pointText(cx + rx * Math.cos(t), cy + ry * Math.sin(t));
133
+ });
134
+ }
135
+ function wavePoints(y0, amp, x0, x1) {
136
+ const steps = 16;
137
+ return Array.from({ length: steps + 1 }, (_, i) => {
138
+ const x = x0 + (x1 - x0) * i / steps;
139
+ return pointText(x, y0 + amp * Math.sin(Math.PI * x));
140
+ });
141
+ }
142
+ function pointText(x, y) {
143
+ const r = (v) => String(Math.round(v * 1e3) / 1e3 + 0);
144
+ return `${r(x)},${r(y)}`;
145
+ }
146
+ const HALF_PI = Math.PI / 2;
147
+ const CLOUD = Array.from({ length: 72 }, (_, i) => {
148
+ const t = 2 * Math.PI * i / 72;
149
+ const r = 0.86 + 0.14 * Math.abs(Math.cos(4 * t));
150
+ return pointText(r * Math.cos(t), r * Math.sin(t));
151
+ }).join(" ");
152
+ const STADIUM = [
153
+ ...arcPoints(0.5, 0, 0.5, 1, -HALF_PI, HALF_PI),
154
+ ...arcPoints(-0.5, 0, 0.5, 1, HALF_PI, 3 * HALF_PI)
155
+ ].join(" ");
156
+ const YED_CONFIGURATIONS = /* @__PURE__ */ new Map([
157
+ ["flowchart.process", { shape: "rectangle" }],
158
+ ["flowchart.predefinedprocess", { shape: "rectangle" }],
159
+ ["flowchart.internalstorage", { shape: "rectangle" }],
160
+ ["flowchart.decision", { shape: "diamond" }],
161
+ ["flowchart.terminator", { shape: "round-rectangle" }],
162
+ ["flowchart.start1", { shape: "ellipse" }],
163
+ ["flowchart.start2", { shape: "ellipse" }],
164
+ ["flowchart.onpagereference", { shape: "ellipse" }],
165
+ ["flowchart.sequentialdata", { shape: "ellipse" }],
166
+ ["flowchart.data", { shape: "parallelogram" }],
167
+ ["flowchart.preparation", { shape: "hexagon" }],
168
+ ["flowchart.database", { shape: "other:database" }],
169
+ ["flowchart.looplimit", { shape: "polygon", points: "-1,-1 1,-1 1,0.5 0.8,1 -0.8,1 -1,0.5" }],
170
+ ["flowchart.looplimitend", { shape: "polygon", points: "-1,1 -1,-0.5 -0.8,-1 0.8,-1 1,-0.5 1,1" }],
171
+ ["flowchart.manualinput", { shape: "polygon", points: "-1,-1 1,-1 1,1 -1,0.4" }],
172
+ ["flowchart.card", { shape: "polygon", points: "-1,-1 1,-1 1,1 -0.6,1 -1,0.6" }],
173
+ ["flowchart.manualoperation", { shape: "polygon", points: "-1,1 -0.7,-1 0.7,-1 1,1" }],
174
+ ["flowchart.offpagereference", { shape: "polygon", points: "-1,1 -1,0 0,-1 1,0 1,1" }],
175
+ ["flowchart.usermessage", { shape: "polygon", points: "-1,1 -1,-1 0.6,-1 1,0 0.6,1" }],
176
+ ["flowchart.networkmessage", { shape: "polygon", points: "-1,1 -0.6,0 -1,-1 1,-1 1,1" }],
177
+ ["flowchart.document", { shape: "polygon", points: ["-1,1", ...wavePoints(-0.75, 0.2, -1, 1), "1,1"].join(" ") }],
178
+ [
179
+ "flowchart.papertype",
180
+ {
181
+ shape: "polygon",
182
+ points: [...wavePoints(-0.8, 0.2, -1, 1), ...wavePoints(0.8, 0.2, 1, -1)].join(" ")
183
+ }
184
+ ],
185
+ [
186
+ "flowchart.delay",
187
+ { shape: "polygon", points: ["-1,-1", ...arcPoints(0, 0, 1, 1, -HALF_PI, HALF_PI), "-1,1"].join(" ") }
188
+ ],
189
+ [
190
+ "flowchart.display",
191
+ {
192
+ shape: "polygon",
193
+ points: ["-1,0", "-0.6,-1", ...arcPoints(0.6, 0, 0.4, 1, -HALF_PI, HALF_PI), "-0.6,1"].join(" ")
194
+ }
195
+ ],
196
+ [
197
+ "flowchart.storeddata",
198
+ {
199
+ shape: "polygon",
200
+ points: [
201
+ ...arcPoints(1, 0, -0.2, 1, -HALF_PI, HALF_PI),
202
+ ...arcPoints(-0.8, 0, 0.2, 1, HALF_PI, 3 * HALF_PI)
203
+ ].join(" ")
204
+ }
205
+ ],
206
+ [
207
+ "flowchart.directdata",
208
+ {
209
+ shape: "polygon",
210
+ points: [
211
+ ...arcPoints(0.8, 0, 0.2, 1, -HALF_PI, HALF_PI),
212
+ ...arcPoints(-0.8, 0, 0.2, 1, HALF_PI, 3 * HALF_PI)
213
+ ].join(" ")
214
+ }
215
+ ],
216
+ ["flowchart.cloud", { shape: "polygon", points: CLOUD }],
217
+ ["entityrelationship.relationship", { shape: "diamond" }],
218
+ ["entityrelationship.attribute", { shape: "ellipse" }],
219
+ ["bpmn.conversation", { shape: "hexagon" }],
220
+ ["sbgn.unspecifiedentity", { shape: "ellipse" }],
221
+ ["sbgn.simplechemical", { shape: "ellipse" }],
222
+ ["sbgn.emptyset", { shape: "ellipse" }],
223
+ ["sbgn.operator", { shape: "ellipse" }],
224
+ ["sbgn.macromolecule", { shape: "round-rectangle" }],
225
+ ["sbgn.phenotype", { shape: "hexagon" }],
226
+ ["sbgn.process", { shape: "rectangle" }],
227
+ ["sbgn.submap", { shape: "rectangle" }],
228
+ ["sbgn.unitofinformation", { shape: "rectangle" }],
229
+ ["sbgn.statevariable", { shape: "polygon", points: STADIUM }],
230
+ ["sbgn.tag", { shape: "polygon", points: "-1,1 -1,-1 0.6,-1 1,0 0.6,1" }]
175
231
  ]);
176
- const FLOWCHART_PREFIX = "com.yworks.flowchart.";
177
- function flowchartShape(configuration) {
178
- return configuration.startsWith(FLOWCHART_PREFIX) ? FLOWCHART_SHAPES.get(configuration.slice(FLOWCHART_PREFIX.length)) ?? null : null;
232
+ function configurationOutline(configuration) {
233
+ const key = configuration.slice(0, MAX_STYLE_VALUE_LENGTH).toLowerCase().replace(/^com\.yworks\./, "").replace(/\.withshadow$/, "");
234
+ return YED_CONFIGURATIONS.get(key) ?? null;
179
235
  }
180
236
  const GENERIC_SHAPES = [
237
+ // yEd's BPMN and entity-relationship palettes: a task is a rounded box, an event a circle, a
238
+ // gateway a diamond, an attribute an ellipse
239
+ ["bpmn.activity", "round-rectangle"],
240
+ ["bpmn.event", "ellipse"],
241
+ ["bpmn.gateway", "diamond"],
242
+ ["entityrelationship.attribute", "ellipse"],
181
243
  ["ellipse", "ellipse"],
182
244
  ["circle", "ellipse"],
183
245
  ["oval", "ellipse"],
@@ -226,7 +288,7 @@ function readColor(raw, property, opacity, put, at) {
226
288
  put(opacity, alpha);
227
289
  }
228
290
  }
229
- function readLabels(labels, node, put, at) {
291
+ function readLabels(labels, node, put, at, geometry) {
230
292
  let label = void 0;
231
293
  let text = "";
232
294
  let extra = 0;
@@ -249,12 +311,20 @@ function readLabels(labels, node, put, at) {
249
311
  noteAt(at("label"), STYLE_ISSUE.EXTRA_LABELS, `${String(extra + 1)} labels`);
250
312
  }
251
313
  put("label", canonText(text, at("label")));
252
- readLabelLook(label, node, put, at);
314
+ readLabelLook(label, node, put, at, geometry);
253
315
  }
254
- function readLabelLook(label, node, put, at) {
316
+ function readLabelLook(label, node, put, at, geometry) {
255
317
  readColor(treeAttr(label, "textColor"), "labelColor", null, put, at);
318
+ if (treeAttr(label, "hasBackgroundColor") !== "false") {
319
+ readColor(treeAttr(label, "backgroundColor"), "labelBackground", null, put, at);
320
+ }
321
+ if (treeAttr(label, "hasLineColor") !== "false" && treeAttr(label, "lineColor") !== void 0) {
322
+ readColor(treeAttr(label, "lineColor"), "labelBorderColor", null, put, at);
323
+ put("labelBorderWidth", 1);
324
+ }
256
325
  put("labelSize", canonNumber(treeAttr(label, "fontSize"), at("labelSize")));
257
- put("labelFont", canonText(treeAttr(label, "fontFamily"), at("labelFont")));
326
+ const font = canonText(treeAttr(label, "fontFamily"), at("labelFont"));
327
+ put("labelFont", font === null ? null : javaFamily(font));
258
328
  const style = treeAttr(label, "fontStyle");
259
329
  if (style !== void 0) {
260
330
  const known = FONT_STYLES.get(style.trim().toLowerCase());
@@ -265,31 +335,101 @@ function readLabelLook(label, node, put, at) {
265
335
  put("labelItalic", known[1]);
266
336
  }
267
337
  }
338
+ readRotation(label, put, at);
268
339
  if (node) {
269
- readLabelPosition(label, put, at);
340
+ const position = nodeLabelPosition(label, geometry, at);
341
+ put("labelPosition", position);
342
+ readInsideInset(label, geometry, position, put);
343
+ readOutsideOffset(label, geometry, position, put);
270
344
  }
271
345
  }
272
- function readLabelPosition(label, put, at) {
273
- const model = treeAttr(label, "modelName")?.trim().toLowerCase() ?? "internal";
274
- if (model === "custom") {
275
- const smart = treeChild(treeChild(label, "ModelParameter"), "SmartNodeLabelModelParameter");
276
- if (smart === void 0) {
277
- noteAt(at("labelPosition"), STYLE_ISSUE.UNKNOWN_VALUE, "custom");
278
- return;
346
+ function readRotation(label, put, at) {
347
+ const angle = canonSigned(treeAttr(label, "rotationAngle"), at("labelRotation"));
348
+ if (angle === null) {
349
+ return;
350
+ }
351
+ const turn = (angle % 360 + 360) % 360;
352
+ put("labelRotation", turn === 0 ? null : turn);
353
+ }
354
+ function readOutsideOffset(label, geometry, position, put) {
355
+ const model = treeAttr(label, "modelName");
356
+ const free = position === "center" && model !== void 0 && model !== "internal";
357
+ if (position === null || position.startsWith("inside-") || position === "center" && !free) {
358
+ return;
359
+ }
360
+ if (Number(treeAttr(label, "rotationAngle") ?? 0) % 360 !== 0) {
361
+ return;
362
+ }
363
+ const num = (o, k) => Number(treeAttr(o, k) ?? Number.NaN);
364
+ const [x, y, w, h] = ["x", "y", "width", "height"].map((k) => num(label, k));
365
+ const [nw, nh] = [num(geometry, "width"), num(geometry, "height")];
366
+ if (![x, y, w, h, nw, nh].every(Number.isFinite)) {
367
+ return;
368
+ }
369
+ const signed = (value) => {
370
+ const r = Math.round(value * 1e3) / 1e3;
371
+ return r === 0 ? null : r;
372
+ };
373
+ const offset = (lo, size, extent, before, after) => {
374
+ if (before) {
375
+ return signed(lo + size);
279
376
  }
280
- put("labelPosition", smartPosition(smart));
377
+ return after ? signed(lo - extent) : signed(lo + size / 2 - extent / 2);
378
+ };
379
+ put("labelOffsetX", offset(x, w, nw, position.includes("left"), position.includes("right")));
380
+ put("labelOffsetY", offset(y, h, nh, position.includes("top"), position.includes("bottom")));
381
+ }
382
+ function readInsideInset(label, geometry, position, put) {
383
+ const sized = treeAttr(label, "autoSizePolicy")?.startsWith("node_") === true;
384
+ if (position?.startsWith("inside-") !== true || sized) {
281
385
  return;
282
386
  }
387
+ const num = (o, k) => Number(treeAttr(o, k) ?? Number.NaN);
388
+ const [x, y, w, h] = ["x", "y", "width", "height"].map((k) => num(label, k));
389
+ const [nw, nh] = [num(geometry, "width"), num(geometry, "height")];
390
+ const inset = (value) => Number.isFinite(value) && value > 0 ? Math.round(value * 1e3) / 1e3 : null;
391
+ if (position.includes("left")) {
392
+ put("labelOffsetX", inset(x));
393
+ } else if (position.includes("right")) {
394
+ const gap = inset(nw - x - w);
395
+ put("labelOffsetX", gap === null ? null : -gap);
396
+ }
397
+ if (position.includes("top")) {
398
+ put("labelOffsetY", inset(y));
399
+ } else if (position.includes("bottom")) {
400
+ const gap = inset(nh - y - h);
401
+ put("labelOffsetY", gap === null ? null : -gap);
402
+ }
403
+ }
404
+ function nodeLabelPosition(label, geometry, at) {
405
+ const outside = boxPosition(label, geometry);
406
+ if (outside !== null && outside !== "center") {
407
+ return outside;
408
+ }
283
409
  const position = treeAttr(label, "modelPosition");
284
- if (position === void 0) {
285
- return;
410
+ const model = treeAttr(label, "modelName");
411
+ if (model === "internal") {
412
+ return insidePosition(label, position);
286
413
  }
287
- const key = position.trim().toLowerCase();
288
- const known = model === "internal" && key === "t" ? "inside-top" : YED_POSITIONS.get(key);
414
+ if (model === "custom") {
415
+ return customPosition(label, outside, at);
416
+ }
417
+ if (outside !== null || position === void 0) {
418
+ return outside;
419
+ }
420
+ const known = YED_POSITIONS.get(position.trim().toLowerCase());
289
421
  if (known === void 0) {
290
422
  noteAt(at("labelPosition"), STYLE_ISSUE.UNKNOWN_VALUE, position.slice(0, MAX_STYLE_VALUE_LENGTH));
291
423
  }
292
- put("labelPosition", known ?? null);
424
+ return known ?? null;
425
+ }
426
+ function customPosition(label, outside, at) {
427
+ const smart = treeChild(treeChild(label, "ModelParameter"), "SmartNodeLabelModelParameter");
428
+ if (smart === void 0) {
429
+ noteAt(at("labelPosition"), STYLE_ISSUE.UNKNOWN_VALUE, "custom");
430
+ return outside;
431
+ }
432
+ return outside ?? smartPosition(smart);
293
433
  }
294
434
  function smartPosition(smart) {
295
435
  const ratio = (name) => {
@@ -312,6 +452,43 @@ function sideOf(ratio, low, high) {
312
452
  }
313
453
  return ratio > 0 ? high : "";
314
454
  }
455
+ function boxPosition(label, geometry) {
456
+ const num = (o, k) => Number(treeAttr(o, k) ?? Number.NaN);
457
+ const [x, y, w, h] = ["x", "y", "width", "height"].map((k) => num(label, k));
458
+ const [nw, nh] = [num(geometry, "width"), num(geometry, "height")];
459
+ if (![x, y, w, h, nw, nh].every(Number.isFinite)) {
460
+ return null;
461
+ }
462
+ const side = (lo, size, extent) => {
463
+ if (lo + size <= 0) {
464
+ return -1;
465
+ }
466
+ return lo >= extent ? 1 : 0;
467
+ };
468
+ return BOX_POSITIONS[side(y, h, nh) + 1][side(x, w, nw) + 1];
469
+ }
470
+ function insidePosition(label, position) {
471
+ const inside = INTERNAL_POSITIONS.get((position ?? "c").trim().toLowerCase()) ?? "center";
472
+ const align = treeAttr(label, "alignment");
473
+ const across = treeAttr(label, "autoSizePolicy") === "node_width" && (align === "left" || align === "right");
474
+ return across && (inside === "inside-top" || inside === "inside-bottom") ? `${inside}-${align}` : inside;
475
+ }
476
+ const INTERNAL_POSITIONS = /* @__PURE__ */ new Map([
477
+ ["c", "center"],
478
+ ["t", "inside-top"],
479
+ ["b", "inside-bottom"],
480
+ ["l", "inside-left"],
481
+ ["r", "inside-right"],
482
+ ["tl", "inside-top-left"],
483
+ ["tr", "inside-top-right"],
484
+ ["bl", "inside-bottom-left"],
485
+ ["br", "inside-bottom-right"]
486
+ ]);
487
+ const BOX_POSITIONS = [
488
+ ["top-left", "top", "top-right"],
489
+ ["left", "center", "right"],
490
+ ["bottom-left", "bottom", "bottom-right"]
491
+ ];
315
492
  function realizerShape(real, at) {
316
493
  const shape = treeChild(real.r, "Shape");
317
494
  if (shape !== void 0) {
@@ -320,11 +497,14 @@ function realizerShape(real, at) {
320
497
  if (real.type === "ShapeNode" || real.type === "GroupNode" || real.type === "GenericGroupNode") {
321
498
  return null;
322
499
  }
500
+ if (real.type === "TableNode") {
501
+ return canonEnum("shape", "rectangle", "yed", at("shape"));
502
+ }
323
503
  if (real.type === "GenericNode") {
324
504
  const conf = treeAttr(real.r, "configuration") ?? "";
325
- const flowchart = flowchartShape(conf);
326
- if (flowchart !== null) {
327
- return flowchart;
505
+ const known = configurationOutline(conf);
506
+ if (known !== null) {
507
+ return known.shape;
328
508
  }
329
509
  const lower = conf.slice(0, MAX_STYLE_VALUE_LENGTH).toLowerCase();
330
510
  for (const [word, value] of GENERIC_SHAPES) {
@@ -341,21 +521,102 @@ function realizerShape(real, at) {
341
521
  noteAt(at("shape"), STYLE_ISSUE.UNKNOWN_VALUE, real.type);
342
522
  return `other:${real.type}`;
343
523
  }
344
- function readNode(real, put, at) {
345
- const { r } = real;
346
- const fill = treeChild(r, "Fill");
347
- if (fill !== void 0) {
348
- if (treeAttr(fill, "hasColor") === "false" || treeAttr(fill, "transparent") === "true") {
349
- noteAt(at("fill"), STYLE_ISSUE.NO_FILL, "transparent");
350
- put("fillOpacity", 0);
351
- } else {
352
- readColor(treeAttr(fill, "color"), "fill", "fillOpacity", put, at);
353
- const second = treeAttr(fill, "color2");
354
- if (second !== void 0) {
355
- noteAt(at("fill"), STYLE_ISSUE.GRADIENT, second);
524
+ const YED_GRADIENT_ANGLE = 45;
525
+ function readFill(real, put, at) {
526
+ const fill = treeChild(real.r, "Fill");
527
+ if (fill === void 0) {
528
+ return;
529
+ }
530
+ if (treeAttr(fill, "hasColor") === "false" || treeAttr(fill, "transparent") === "true") {
531
+ noteAt(at("fill"), STYLE_ISSUE.NO_FILL, "transparent");
532
+ put("fillOpacity", 0);
533
+ return;
534
+ }
535
+ readColor(treeAttr(fill, "color"), "fill", "fillOpacity", put, at);
536
+ const second = canonColor(treeAttr(fill, "color2"), "yed", at("fillGradient"));
537
+ if (second !== null) {
538
+ put("fillGradient", second.color);
539
+ put("fillGradientAngle", YED_GRADIENT_ANGLE);
540
+ }
541
+ }
542
+ function tableColor(real, name, at) {
543
+ const props = treeChildren(treeChild(real.r, "StyleProperties"), "Property");
544
+ const prop = props.find((p) => treeAttr(p, "name") === name);
545
+ return prop === void 0 ? null : canonColor(treeAttr(prop, "value"), "yed", at("stripeColors"))?.color ?? null;
546
+ }
547
+ function readTable(real, put, at) {
548
+ const table = treeChild(real.r, "Table");
549
+ const rows = treeChildren(treeChild(table, "Rows"), "Row");
550
+ const columns = treeChildren(treeChild(table, "Columns"), "Column");
551
+ const across = columns.length > 1 && rows.length <= 1;
552
+ const lanes = (across ? columns : rows).map((l) => Number(treeAttr(l, across ? "width" : "height")));
553
+ const insets = treeChild(table, "Insets");
554
+ const inset = (side) => Math.max(0, Number(treeAttr(insets, side) ?? 0) || 0);
555
+ const [head, tail] = across ? [inset("left"), inset("right")] : [inset("top"), inset("bottom")];
556
+ const sizes = [head, ...lanes, tail];
557
+ const total = sizes.reduce((a, b) => a + b, 0);
558
+ if (lanes.length === 0 || !sizes.every(Number.isFinite) || total <= 0) {
559
+ return;
560
+ }
561
+ const fill = canonColor(treeAttr(treeChild(real.r, "Fill"), "color"), "yed", at("stripeColors"))?.color ?? "#ffffff";
562
+ const main = tableColor(real, "yed.table.lane.color.main", at) ?? fill;
563
+ const alternating = tableColor(real, "yed.table.lane.color.alternating", at) ?? main;
564
+ const header = tableColor(real, "yed.table.header.color.main", at) ?? fill;
565
+ const bands = [[head, header], ...lanes.map((size, i) => [size, i % 2 === 0 ? main : alternating]), [tail, fill]].filter(([size]) => size > 0);
566
+ put("stripeColors", bands.map(([, color]) => color).join(" "));
567
+ put("stripeSizes", bands.map(([size]) => String(Number((size / total).toFixed(6)))).join(" "));
568
+ if (across) {
569
+ put("stripeDirection", "right");
570
+ }
571
+ }
572
+ function yedResources(snapshot) {
573
+ const out = /* @__PURE__ */ new Map();
574
+ for (const col of snapshot.graph) {
575
+ if (col.dtype !== "json" || col.meta.origin?.namespace !== "yfiles") {
576
+ continue;
577
+ }
578
+ addYedResources(plainCell(snapshot.graph.value(col.meta.name, 0)), out);
579
+ }
580
+ return out;
581
+ }
582
+ function addYedResources(root, out) {
583
+ for (const resources of treeChildren(root, "Resources")) {
584
+ for (const r of treeChildren(resources, "Resource")) {
585
+ const id = treeAttr(r, "id");
586
+ const url = id === void 0 || out.has(id) ? null : yedResourceUrl(r);
587
+ if (id !== void 0 && url !== null) {
588
+ out.set(id, url);
356
589
  }
357
590
  }
358
591
  }
592
+ }
593
+ function yedResourceUrl(r) {
594
+ const text = treeText(r)?.trim() ?? "";
595
+ if (text === "") {
596
+ return null;
597
+ }
598
+ const type = treeAttr(r, "type") ?? "";
599
+ if (type.endsWith("BufferedImage")) {
600
+ return `data:image/png;base64,${text.replaceAll(/\s+/g, "")}`;
601
+ }
602
+ if (text.includes("<svg")) {
603
+ return `data:image/svg+xml;utf8,${encodeURIComponent(text)}`;
604
+ }
605
+ return null;
606
+ }
607
+ function readPicture(real, resources, put) {
608
+ const ref = real.type === "ImageNode" ? treeAttr(treeChild(real.r, "Image"), "refid") : treeAttr(treeChild(treeChild(real.r, "SVGModel"), "SVGContent"), "refid");
609
+ const src = ref === void 0 ? void 0 : resources.get(ref);
610
+ if (src === void 0) {
611
+ return;
612
+ }
613
+ put("image", src);
614
+ put("imageFit", "fill");
615
+ put("imageClip", "none");
616
+ }
617
+ function readNode(real, put, at, resources) {
618
+ const { r } = real;
619
+ readFill(real, put, at);
359
620
  const border = treeChild(r, "BorderStyle");
360
621
  if (border !== void 0) {
361
622
  if (treeAttr(border, "hasColor") === "false") {
@@ -370,7 +631,17 @@ function readNode(real, put, at) {
370
631
  put("width", canonNumber(treeAttr(geometry, "width"), at("width")));
371
632
  put("height", canonNumber(treeAttr(geometry, "height"), at("height")));
372
633
  put("shape", realizerShape(real, at));
373
- readLabels(treeChildren(r, "NodeLabel"), true, put, at);
634
+ const points = real.type === "GenericNode" ? configurationOutline(treeAttr(r, "configuration") ?? "")?.points : void 0;
635
+ if (points !== void 0) {
636
+ put("shapePoints", points);
637
+ }
638
+ if (real.type === "TableNode") {
639
+ readTable(real, put, at);
640
+ }
641
+ if (resources !== void 0 && (real.type === "ImageNode" || real.type === "SVGNode")) {
642
+ readPicture(real, resources, put);
643
+ }
644
+ readLabels(treeChildren(r, "NodeLabel"), true, put, at, geometry);
374
645
  }
375
646
  function readEdge(real, put, at) {
376
647
  const { r } = real;
@@ -386,27 +657,56 @@ function readEdge(real, put, at) {
386
657
  put("targetArrow", canonEnum("arrow", treeAttr(arrows, "target"), "yed", at("targetArrow")));
387
658
  }
388
659
  put("curved", edgeCurved(real));
660
+ if (real.type === "ArcEdge") {
661
+ put("bendCurve", "arc");
662
+ }
389
663
  readLabels(treeChildren(r, "EdgeLabel"), false, put, at);
390
664
  }
391
665
  function edgeCurved(real) {
392
666
  if (real.type === "ArcEdge") {
393
667
  return true;
394
668
  }
395
- const bent = treeChildren(treeChild(real.r, "Path"), "Point").length > 0;
396
- if (real.type !== "PolyLineEdge") {
669
+ const points = treeChildren(treeChild(real.r, "Path"), "Point").length;
670
+ if (real.type === "QuadCurveEdge") {
671
+ return false;
672
+ }
673
+ if (real.type === "BezierEdge") {
674
+ return points > 0 && (points + 1) % 3 !== 0;
675
+ }
676
+ const bent = points > 0;
677
+ if (real.type !== "PolyLineEdge" && real.type !== "GenericEdge") {
397
678
  return bent;
398
679
  }
399
680
  const smoothed = treeAttr(treeChild(real.r, "BendStyle"), "smoothed");
400
681
  return smoothed === void 0 ? null : smoothed === "true" && bent;
401
682
  }
402
- function edgeBends(real, centers, source, target) {
403
- const points = treeChildren(treeChild(real.r, "Path"), "Point").map((p) => [
683
+ function readEdgeRoute(real, nodes, source, target, put) {
684
+ const path = treeChild(real.r, "Path");
685
+ const at = (k) => [nodes[4 * k], nodes[4 * k + 1]];
686
+ const size = (k) => [nodes[4 * k + 2], nodes[4 * k + 3]];
687
+ const offset = (key) => Number(treeAttr(path, key) ?? 0) || 0;
688
+ const ends = [
689
+ [at(source)[0] + offset("sx"), at(source)[1] + offset("sy")],
690
+ [at(target)[0] + offset("tx"), at(target)[1] + offset("ty")]
691
+ ];
692
+ const port = (k, end) => end[0] === at(k)[0] && end[1] === at(k)[1] ? null : canonNodeOffsets(at(k), size(k), [end], true);
693
+ put("sourcePort", port(source, ends[0]));
694
+ put("targetPort", port(target, ends[1]));
695
+ let points = treeChildren(path, "Point").map((p) => [
404
696
  Number(treeAttr(p, "x")),
405
697
  Number(treeAttr(p, "y"))
406
698
  ]);
407
- const at = (k) => [centers[2 * k], centers[2 * k + 1]];
408
- return canonBends(at(source), at(target), points);
699
+ if (points.length > 0 && (real.type === "BezierEdge" || real.type === "QuadCurveEdge")) {
700
+ const controls = [ends[0], ...points, ends[1]];
701
+ const curve = real.type === "BezierEdge" ? flattenCubic(controls) : flattenQuadSpline(controls, Number(treeAttr(real.r, "straightness") ?? YED_STRAIGHTNESS));
702
+ points = (curve ?? controls).slice(1, -1);
703
+ }
704
+ put(
705
+ "bends",
706
+ source === target ? canonNodeOffsets(at(source), size(source), points, true) : canonBends(at(source), at(target), points, true)
707
+ );
409
708
  }
709
+ const YED_STRAIGHTNESS = 0.1;
410
710
  function valueColumns(n) {
411
711
  const values = /* @__PURE__ */ Object.create(null);
412
712
  return {
@@ -421,7 +721,8 @@ function valueColumns(n) {
421
721
  }
422
722
  function readYedStyles(snapshot, notes, budget) {
423
723
  let found = false;
424
- const centers = new Float64Array(2 * snapshot.nodeCount).fill(Number.NaN);
724
+ const resources = yedResources(snapshot);
725
+ const boxes = new Float64Array(4 * snapshot.nodeCount).fill(Number.NaN);
425
726
  const read = (target) => {
426
727
  const table = target === "node" ? snapshot.nodes : snapshot.edges;
427
728
  const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
@@ -446,13 +747,16 @@ function readYedStyles(snapshot, notes, budget) {
446
747
  out.put(i, property, value);
447
748
  };
448
749
  if (target === "node") {
449
- readNode(real, put, at);
750
+ readNode(real, put, at, resources);
450
751
  const geometry = treeChild(real.r, "Geometry");
451
- centers[2 * i] = Number(treeAttr(geometry, "x")) + Number(treeAttr(geometry, "width")) / 2;
452
- centers[2 * i + 1] = Number(treeAttr(geometry, "y")) + Number(treeAttr(geometry, "height")) / 2;
752
+ const [w, h] = [Number(treeAttr(geometry, "width")), Number(treeAttr(geometry, "height"))];
753
+ boxes.set(
754
+ [Number(treeAttr(geometry, "x")) + w / 2, Number(treeAttr(geometry, "y")) + h / 2, w, h],
755
+ 4 * i
756
+ );
453
757
  } else {
454
758
  readEdge(real, put, at);
455
- put("bends", edgeBends(real, centers, snapshot.edgeSource(i), snapshot.edgeTarget(i)));
759
+ readEdgeRoute(real, boxes, snapshot.edgeSource(i), snapshot.edgeTarget(i), put);
456
760
  }
457
761
  }
458
762
  return out.values;
@@ -466,6 +770,8 @@ const GRAPHML_STYLE_CAPABILITIES = Object.freeze({
466
770
  node: Object.freeze([
467
771
  "fill",
468
772
  "fillOpacity",
773
+ "fillGradient",
774
+ "fillGradientAngle",
469
775
  "borderColor",
470
776
  "borderWidth",
471
777
  "borderStyle",
@@ -489,6 +795,8 @@ const GRAPHML_STYLE_CAPABILITIES = Object.freeze({
489
795
  "targetArrow",
490
796
  "curved",
491
797
  "bends",
798
+ "sourcePort",
799
+ "targetPort",
492
800
  "label",
493
801
  "labelColor",
494
802
  "labelSize",
@@ -518,9 +826,9 @@ const YED_LINES = /* @__PURE__ */ new Map([
518
826
  ]);
519
827
  const YED_ARROWS = /* @__PURE__ */ new Map([
520
828
  ["none", "none"],
521
- ["triangle", "standard"],
829
+ ["triangle", "delta"],
522
830
  ["triangle-open", "white_delta"],
523
- ["vee", "concave"],
831
+ ["vee", "standard"],
524
832
  ["tee", "t_shape"],
525
833
  ["diamond", "diamond"],
526
834
  ["diamond-open", "white_diamond"],
@@ -529,17 +837,18 @@ const YED_ARROWS = /* @__PURE__ */ new Map([
529
837
  ["square", "skewed_dash"],
530
838
  ["crow", "crows_foot_many"]
531
839
  ]);
840
+ const INTERNAL_MODEL_POSITIONS = new Map(
841
+ [...INTERNAL_POSITIONS].map(([model, position]) => [position, model])
842
+ );
532
843
  const YED_MODEL_POSITIONS = /* @__PURE__ */ new Map([
533
- ["center", ["internal", "c"]],
534
- ["inside-top", ["internal", "t"]],
535
- ["top", ["eight_pos", "n"]],
536
- ["bottom", ["eight_pos", "s"]],
537
- ["left", ["eight_pos", "w"]],
538
- ["right", ["eight_pos", "e"]],
539
- ["top-left", ["eight_pos", "nw"]],
540
- ["top-right", ["eight_pos", "ne"]],
541
- ["bottom-left", ["eight_pos", "sw"]],
542
- ["bottom-right", ["eight_pos", "se"]]
844
+ ["top", "n"],
845
+ ["bottom", "s"],
846
+ ["left", "w"],
847
+ ["right", "e"],
848
+ ["top-left", "nw"],
849
+ ["top-right", "ne"],
850
+ ["bottom-left", "sw"],
851
+ ["bottom-right", "se"]
543
852
  ]);
544
853
  function yedValue(table, value, nearest) {
545
854
  const exact = table.get(value);
@@ -562,15 +871,19 @@ function yedSpelled(table, value, nearest, property, approximate) {
562
871
  }
563
872
  return w.value;
564
873
  }
565
- function labelTree(get, node, approximate) {
566
- const text = get("label");
567
- if (typeof text !== "string" || text.trim().length === 0) {
568
- return null;
569
- }
874
+ const JAVA_LOGICAL = {
875
+ [JAVA_SANS]: "Dialog",
876
+ [JAVA_SERIF]: "Serif",
877
+ [JAVA_MONO]: "Monospaced"
878
+ };
879
+ function yedFontName(family) {
880
+ return Object.hasOwn(JAVA_LOGICAL, family) ? JAVA_LOGICAL[family] : family.split(",")[0].trim();
881
+ }
882
+ function labelFontTree(get) {
570
883
  const label = {};
571
884
  const font = get("labelFont");
572
885
  if (typeof font === "string") {
573
- label["@_fontFamily"] = font;
886
+ label["@_fontFamily"] = yedFontName(font);
574
887
  }
575
888
  const size = get("labelSize");
576
889
  if (typeof size === "number") {
@@ -582,18 +895,27 @@ function labelTree(get, node, approximate) {
582
895
  const style = (weight === "bold" ? "bold" : "") + (italic === true ? "italic" : "");
583
896
  label["@_fontStyle"] = style.length === 0 ? "plain" : style;
584
897
  }
898
+ return label;
899
+ }
900
+ function labelTree(get, node, approximate) {
901
+ const text = get("label");
902
+ if (typeof text !== "string" || text.trim().length === 0) {
903
+ return null;
904
+ }
905
+ const label = labelFontTree(get);
585
906
  const color = get("labelColor");
586
907
  if (typeof color === "string") {
587
908
  label["@_textColor"] = color.toUpperCase();
588
909
  }
589
910
  const position = node ? get("labelPosition") : null;
590
911
  if (typeof position === "string") {
591
- const written = YED_MODEL_POSITIONS.get(position);
592
- if (written === void 0) {
912
+ const inside = INTERNAL_MODEL_POSITIONS.get(position);
913
+ const outside = YED_MODEL_POSITIONS.get(position);
914
+ if (inside === void 0 && outside === void 0) {
593
915
  approximate("labelPosition", position);
594
916
  }
595
- label["@_modelName"] = written?.[0] ?? "internal";
596
- label["@_modelPosition"] = written?.[1] ?? "c";
917
+ label["@_modelName"] = outside === void 0 ? "internal" : "eight_pos";
918
+ label["@_modelPosition"] = outside ?? inside ?? "c";
597
919
  }
598
920
  label["#text"] = text;
599
921
  return label;
@@ -605,6 +927,14 @@ function shapeNodeTree(get, at, approximate) {
605
927
  const fillOpacity = get("fillOpacity");
606
928
  if (typeof fill === "string") {
607
929
  node["y:Fill"] = { "@_color": yedColor(fill, fillOpacity), "@_transparent": "false" };
930
+ const second = get("fillGradient");
931
+ if (typeof second === "string") {
932
+ node["y:Fill"]["@_color2"] = second.toUpperCase();
933
+ const angle = get("fillGradientAngle");
934
+ if (angle !== YED_GRADIENT_ANGLE) {
935
+ approximate("fillGradientAngle", angle ?? 0);
936
+ }
937
+ }
608
938
  } else if (fillOpacity === 0) {
609
939
  node["y:Fill"] = { "@_hasColor": "false", "@_transparent": "false" };
610
940
  }
@@ -673,7 +1003,7 @@ function polyLineEdgeTree(get, path, approximate) {
673
1003
  const source = get("sourceArrow");
674
1004
  const target = get("targetArrow");
675
1005
  if (source !== null || target !== null) {
676
- const arrow = (property, value) => typeof value === "string" ? yedSpelled(YED_ARROWS, value, "standard", property, approximate) : "none";
1006
+ const arrow = (property, value) => typeof value === "string" ? yedSpelled(YED_ARROWS, value, "delta", property, approximate) : "none";
677
1007
  edge["y:Arrows"] = { "@_source": arrow("sourceArrow", source), "@_target": arrow("targetArrow", target) };
678
1008
  }
679
1009
  const label = labelTree(get, false, approximate);
@@ -686,33 +1016,17 @@ function polyLineEdgeTree(get, path, approximate) {
686
1016
  }
687
1017
  return { "y:PolyLineEdge": edge };
688
1018
  }
689
- function getter(picture, target) {
690
- const columns = /* @__PURE__ */ new Map();
691
- for (const p of GRAPHML_STYLE_CAPABILITIES[target]) {
692
- columns.set(p, picture(target, p));
693
- }
694
- return (i) => (property) => columns.get(property)?.[i] ?? null;
695
- }
696
- function exactFromBlock(read, picture, counts, notes) {
697
- for (const target of ["node", "edge"]) {
698
- const values = read[target];
699
- const get = getter(picture, target);
700
- for (let i = 0; i < counts[target]; i++) {
701
- const want = get(i);
1019
+ function exactFromBlock(snapshot, text, read) {
1020
+ const notes = new StyleNotes();
1021
+ takeFromBlock(snapshot, text, "graphml", (target) => ({
1022
+ values: read[target],
1023
+ properties: GRAPHML_STYLE_CAPABILITIES[target],
1024
+ writes: GRAPHML_STYLE_CAPABILITIES[target],
1025
+ readBack: (_i, want) => {
702
1026
  const back = writtenAndReadBack(target, want, notes);
703
- if (back === null) {
704
- continue;
705
- }
706
- for (const property of GRAPHML_STYLE_CAPABILITIES[target]) {
707
- const native = values[property]?.[i] ?? null;
708
- const w = want(property);
709
- if (native !== w && native === (back.get(property) ?? null)) {
710
- values[property] ??= new Array(counts[target]).fill(null);
711
- values[property][i] = w;
712
- }
713
- }
1027
+ return back === null ? null : (property) => back.get(property) ?? null;
714
1028
  }
715
- }
1029
+ }));
716
1030
  }
717
1031
  function writtenAndReadBack(target, want, notes) {
718
1032
  const ignore = () => void 0;
@@ -777,16 +1091,29 @@ function keptPath(table, columns, e) {
777
1091
  }
778
1092
  return void 0;
779
1093
  }
780
- function pathWithBends(kept, bends, ends) {
781
- const points = typeof bends === "string" ? bendsToPoints(ends[0], ends[1], bends) : null;
782
- if (points === null) {
1094
+ function pathWithRoute(kept, get, ends, loop) {
1095
+ const bends = get("bends");
1096
+ const [[c0, size0], [c1]] = ends;
1097
+ let points = null;
1098
+ if (typeof bends === "string") {
1099
+ points = loop ? nodeOffsetsToPoints(c0, size0, bends) : bendsToPoints(c0, c1, bends);
1100
+ }
1101
+ const ports = ["sourcePort", "targetPort"].map((property, k) => {
1102
+ const value = get(property);
1103
+ const [center, size] = ends[k];
1104
+ const at = typeof value === "string" ? nodeOffsetsToPoints(center, size, value) : null;
1105
+ return at === null ? null : [at[0][0] - center[0], at[0][1] - center[1]];
1106
+ });
1107
+ if (points === null && ports.every((p) => p === null)) {
783
1108
  return kept;
784
1109
  }
785
1110
  const path = {};
786
- for (const port of ["sx", "sy", "tx", "ty"]) {
787
- path[`@_${port}`] = treeAttr(kept, port) ?? "0.0";
788
- }
789
- path["y:Point"] = points.map(([x, y]) => ({ "@_x": String(x), "@_y": String(y) }));
1111
+ ["sx", "sy", "tx", "ty"].forEach((key, k) => {
1112
+ const port = ports[k >> 1];
1113
+ path[`@_${key}`] = port === null ? treeAttr(kept, key) ?? "0.0" : String(port[k & 1]);
1114
+ });
1115
+ const written = points ?? treeChildren(kept, "Point").map((q) => [Number(treeAttr(q, "x")), Number(treeAttr(q, "y"))]);
1116
+ path["y:Point"] = written.map(([x, y]) => ({ "@_x": String(x), "@_y": String(y) }));
790
1117
  return path;
791
1118
  }
792
1119
  function freeName(table, base) {
@@ -809,27 +1136,32 @@ function graphmlStyledExport(snapshot, input) {
809
1136
  const picture = (target, property) => input.picture(target, property);
810
1137
  const nodeColumns = treeColumns(snapshot.nodes);
811
1138
  const edgeColumns = treeColumns(snapshot.edges);
812
- const getNode = getter(picture, "node");
813
- const getEdge = getter(picture, "edge");
1139
+ const getNode = elementValues(picture, "node", GRAPHML_STYLE_CAPABILITIES.node);
1140
+ const getEdge = elementValues(picture, "edge", GRAPHML_STYLE_CAPABILITIES.edge);
814
1141
  const nodeTrees = [];
815
1142
  for (let i = 0; i < snapshot.nodeCount; i++) {
816
1143
  const get = getNode(i);
817
1144
  const at = keptPosition(snapshot.nodes, nodeColumns, i) ?? columnPosition(snapshot, i, get);
818
1145
  nodeTrees.push(shapeNodeTree(get, at, approximateFor("node")));
819
1146
  }
820
- const centers = nodeTrees.map((tree) => {
1147
+ const boxes = nodeTrees.map((tree) => {
821
1148
  const geometry = treeChild(treeChild(tree, "ShapeNode"), "Geometry");
822
1149
  const at = (k) => Number(treeAttr(geometry, k) ?? Number.NaN);
823
- return [at("x") + at("width") / 2, at("y") + at("height") / 2];
1150
+ return [
1151
+ [at("x") + at("width") / 2, at("y") + at("height") / 2],
1152
+ [at("width"), at("height")]
1153
+ ];
824
1154
  });
825
1155
  const edgeTrees = [];
826
1156
  for (let e = 0; e < snapshot.edgeCount; e++) {
827
1157
  const get = getEdge(e);
828
- const ends = [
829
- centers[snapshot.edgeSource(e)],
830
- centers[snapshot.edgeTarget(e)]
831
- ];
832
- const path = pathWithBends(keptPath(snapshot.edges, edgeColumns, e), get("bends"), ends);
1158
+ const [source, target] = [snapshot.edgeSource(e), snapshot.edgeTarget(e)];
1159
+ const path = pathWithRoute(
1160
+ keptPath(snapshot.edges, edgeColumns, e),
1161
+ get,
1162
+ [boxes[source], boxes[target]],
1163
+ source === target
1164
+ );
833
1165
  edgeTrees.push(polyLineEdgeTree(get, path, approximateFor("edge")));
834
1166
  }
835
1167
  const out = snapshot.withColumns();
@@ -861,22 +1193,21 @@ export {
861
1193
  YED_SHAPES as Y,
862
1194
  yedColor as a,
863
1195
  yedSpelled as b,
864
- bendsToPoints as c,
1196
+ yedFontName as c,
865
1197
  YED_LINES as d,
866
- canonBends as e,
867
- flowchartShape as f,
868
- YED_ARROWS as g,
869
- graphmlStyledExport as h,
1198
+ configurationOutline as e,
1199
+ YED_ARROWS as f,
1200
+ graphmlStyledExport as g,
1201
+ treeAttr as h,
870
1202
  isTree as i,
871
- treeAttr as j,
872
- treeChild as k,
1203
+ treeChild as j,
1204
+ treeText as k,
873
1205
  localOf as l,
874
- treeText as m,
875
- yfilesColumns as n,
876
- exactFromBlock as o,
1206
+ yfilesColumns as m,
1207
+ exactFromBlock as n,
877
1208
  readYedStyles as r,
878
1209
  treeChildren as t,
879
1210
  valueColumns as v,
880
1211
  yedValue as y
881
1212
  };
882
- //# sourceMappingURL=styles-yed-Cs1nmrjn.js.map
1213
+ //# sourceMappingURL=styles-yed-XeFBQ6VS.js.map