@graphty/graph-io 0.3.48 → 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 (570) hide show
  1. package/dist/chunks/{approximations-C2riR4NT.js → approximations-Bzn3L-je.js} +2 -2
  2. package/dist/chunks/{approximations-C2riR4NT.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-Cu22ewuS.js → block-iptrlMBb.js} +906 -164
  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-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-C3p0RQxR.js} +5 -4
  14. package/dist/chunks/{context-cgmmOxZ2.js.map → context-C3p0RQxR.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-DXHx7nwR.js} +16 -14
  18. package/dist/chunks/credentials-DXHx7nwR.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-DLA5kINx.js} +7 -2
  24. package/dist/chunks/descriptor-DLA5kINx.js.map +1 -0
  25. package/dist/chunks/{emit-CD8xnY8s.js → emit-BwHQkZle.js} +1660 -133
  26. package/dist/chunks/emit-BwHQkZle.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-Dcw7Ldtq.js → exporter-BP6otMO6.js} +6 -6
  32. package/dist/chunks/{exporter-Dcw7Ldtq.js.map → exporter-BP6otMO6.js.map} +1 -1
  33. package/dist/chunks/{exporter-bxxjOrDZ.js → exporter-D2CETOMK.js} +1222 -156
  34. package/dist/chunks/exporter-D2CETOMK.js.map +1 -0
  35. package/dist/chunks/{exporter-BIdaoIgh.js → exporter-D9yMtocA.js} +7 -7
  36. package/dist/chunks/{exporter-BIdaoIgh.js.map → exporter-D9yMtocA.js.map} +1 -1
  37. package/dist/chunks/{exporter-DtVU80Fa.js → exporter-_jrBTnos.js} +9 -8
  38. package/dist/chunks/{exporter-DtVU80Fa.js.map → exporter-_jrBTnos.js.map} +1 -1
  39. package/dist/chunks/{exporter-ChjL5fmP.js → exporter-nDfxIK5D.js} +9 -8
  40. package/dist/chunks/{exporter-ChjL5fmP.js.map → exporter-nDfxIK5D.js.map} +1 -1
  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-ymWCETAJ.js} +387 -31
  44. package/dist/chunks/generic-ymWCETAJ.js.map +1 -0
  45. package/dist/chunks/{importer-e3huMZbm.js → importer-B92x1xY5.js} +14 -10
  46. package/dist/chunks/importer-B92x1xY5.js.map +1 -0
  47. package/dist/chunks/{importer-B87_fmVx.js → importer-CT9mJ1nn.js} +326 -84
  48. package/dist/chunks/importer-CT9mJ1nn.js.map +1 -0
  49. package/dist/chunks/{importer-CB_zV5_L.js → importer-DaLTjbds.js} +116 -1102
  50. package/dist/chunks/importer-DaLTjbds.js.map +1 -0
  51. package/dist/chunks/{importer-DPZDN40-.js → importer-GREKMdIf.js} +25 -17
  52. package/dist/chunks/importer-GREKMdIf.js.map +1 -0
  53. package/dist/chunks/{importer-Bji2MeWr.js → importer-PqaaKKnY.js} +13 -10
  54. package/dist/chunks/{importer-Bji2MeWr.js.map → importer-PqaaKKnY.js.map} +1 -1
  55. package/dist/chunks/{importer-Cyy6UseH.js → importer-Vn5QvmmJ.js} +66 -13
  56. package/dist/chunks/importer-Vn5QvmmJ.js.map +1 -0
  57. package/dist/chunks/{importer-CVT-JyDE.js → importer-vRq4h3j5.js} +1469 -356
  58. package/dist/chunks/importer-vRq4h3j5.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-Clf4QIyl.js} +282 -74
  64. package/dist/chunks/lexicon-Clf4QIyl.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-Zm3_ivgq.js +79 -0
  72. package/dist/chunks/round-trip-Zm3_ivgq.js.map +1 -0
  73. package/dist/chunks/{sigv4-LkAzsLAu.js → sigv4-EokFic1V.js} +5 -5
  74. package/dist/chunks/sigv4-EokFic1V.js.map +1 -0
  75. package/dist/chunks/{styles-CaABMoO1.js → styles-CCs214_3.js} +1237 -138
  76. package/dist/chunks/styles-CCs214_3.js.map +1 -0
  77. package/dist/chunks/styles-Cm62yyQX.js +2812 -0
  78. package/dist/chunks/styles-Cm62yyQX.js.map +1 -0
  79. package/dist/chunks/styles-DPQQIig4.js +1928 -0
  80. package/dist/chunks/styles-DPQQIig4.js.map +1 -0
  81. package/dist/chunks/{styles-yed-Cs1nmrjn.js → styles-yed-UMFdNqze.js} +503 -172
  82. package/dist/chunks/styles-yed-UMFdNqze.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 +5 -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 +847 -193
  94. package/dist/gml.js.map +1 -1
  95. package/dist/graph-io.js +232 -220
  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 +138 -23
  105. package/dist/sources-cypher.js.map +1 -1
  106. package/dist/sources-ndex.js +2 -2
  107. package/dist/sources-rest.js +16 -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 +405 -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/importer.d.ts.map +1 -1
  137. package/dist/src/formats/dot/importer.js +108 -31
  138. package/dist/src/formats/dot/importer.js.map +1 -1
  139. package/dist/src/formats/dot/label-places.d.ts +34 -0
  140. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  141. package/dist/src/formats/dot/label-places.js +179 -0
  142. package/dist/src/formats/dot/label-places.js.map +1 -0
  143. package/dist/src/formats/dot/record.d.ts +50 -0
  144. package/dist/src/formats/dot/record.d.ts.map +1 -0
  145. package/dist/src/formats/dot/record.js +275 -0
  146. package/dist/src/formats/dot/record.js.map +1 -0
  147. package/dist/src/formats/dot/styles.d.ts +62 -2
  148. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  149. package/dist/src/formats/dot/styles.js +1454 -119
  150. package/dist/src/formats/dot/styles.js.map +1 -1
  151. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  152. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  153. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  154. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  155. package/dist/src/formats/gexf/importer.d.ts +7 -0
  156. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  157. package/dist/src/formats/gexf/importer.js +41 -5
  158. package/dist/src/formats/gexf/importer.js.map +1 -1
  159. package/dist/src/formats/gexf/preview.d.ts +77 -0
  160. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  161. package/dist/src/formats/gexf/preview.js +191 -0
  162. package/dist/src/formats/gexf/preview.js.map +1 -0
  163. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  164. package/dist/src/formats/gexf/schema.js +2 -1
  165. package/dist/src/formats/gexf/schema.js.map +1 -1
  166. package/dist/src/formats/gexf/styles.d.ts +58 -31
  167. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  168. package/dist/src/formats/gexf/styles.js +848 -225
  169. package/dist/src/formats/gexf/styles.js.map +1 -1
  170. package/dist/src/formats/gml/importer.d.ts +5 -2
  171. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  172. package/dist/src/formats/gml/importer.js +258 -71
  173. package/dist/src/formats/gml/importer.js.map +1 -1
  174. package/dist/src/formats/gml/index.d.ts +1 -1
  175. package/dist/src/formats/gml/index.d.ts.map +1 -1
  176. package/dist/src/formats/gml/index.js +1 -1
  177. package/dist/src/formats/gml/index.js.map +1 -1
  178. package/dist/src/formats/gml/positions.d.ts +7 -0
  179. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  180. package/dist/src/formats/gml/positions.js +29 -7
  181. package/dist/src/formats/gml/positions.js.map +1 -1
  182. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  183. package/dist/src/formats/gml/styles.js +753 -101
  184. package/dist/src/formats/gml/styles.js.map +1 -1
  185. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  186. package/dist/src/formats/graphml/styles-plain.js +6 -10
  187. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  188. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  189. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  190. package/dist/src/formats/graphml/styles-yed.js +692 -161
  191. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  192. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  193. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  194. package/dist/src/formats/graphml/styles-yfiles3.js +429 -64
  195. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  196. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  197. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  198. package/dist/src/formats/graphml/yfiles.js +16 -6
  199. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  200. package/dist/src/formats/json/dialect.d.ts +3 -2
  201. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  202. package/dist/src/formats/json/dialect.js +39 -5
  203. package/dist/src/formats/json/dialect.js.map +1 -1
  204. package/dist/src/formats/json/importer.d.ts +13 -2
  205. package/dist/src/formats/json/importer.d.ts.map +1 -1
  206. package/dist/src/formats/json/importer.js +42 -6
  207. package/dist/src/formats/json/importer.js.map +1 -1
  208. package/dist/src/formats/json/index.d.ts +1 -1
  209. package/dist/src/formats/json/index.d.ts.map +1 -1
  210. package/dist/src/formats/json/index.js +1 -1
  211. package/dist/src/formats/json/index.js.map +1 -1
  212. package/dist/src/formats/json/positions.d.ts +5 -2
  213. package/dist/src/formats/json/positions.d.ts.map +1 -1
  214. package/dist/src/formats/json/positions.js +20 -4
  215. package/dist/src/formats/json/positions.js.map +1 -1
  216. package/dist/src/formats/json/styles.d.ts +12 -1
  217. package/dist/src/formats/json/styles.d.ts.map +1 -1
  218. package/dist/src/formats/json/styles.js +1755 -136
  219. package/dist/src/formats/json/styles.js.map +1 -1
  220. package/dist/src/formats/pajek/draw.d.ts +96 -0
  221. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  222. package/dist/src/formats/pajek/draw.js +372 -0
  223. package/dist/src/formats/pajek/draw.js.map +1 -0
  224. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  225. package/dist/src/formats/pajek/exporter.js +70 -51
  226. package/dist/src/formats/pajek/exporter.js.map +1 -1
  227. package/dist/src/formats/pajek/importer.d.ts +9 -0
  228. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  229. package/dist/src/formats/pajek/importer.js +233 -102
  230. package/dist/src/formats/pajek/importer.js.map +1 -1
  231. package/dist/src/formats/pajek/index.d.ts +1 -0
  232. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  233. package/dist/src/formats/pajek/index.js.map +1 -1
  234. package/dist/src/formats/pajek/styles.d.ts +15 -7
  235. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  236. package/dist/src/formats/pajek/styles.js +1278 -114
  237. package/dist/src/formats/pajek/styles.js.map +1 -1
  238. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  239. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  240. package/dist/src/formats/pajek/syntax.js +26 -2
  241. package/dist/src/formats/pajek/syntax.js.map +1 -1
  242. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  243. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  244. package/dist/src/formats/xgmml/emit.js +65 -5
  245. package/dist/src/formats/xgmml/emit.js.map +1 -1
  246. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  247. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  248. package/dist/src/formats/xgmml/styles.js +277 -60
  249. package/dist/src/formats/xgmml/styles.js.map +1 -1
  250. package/dist/src/index.d.ts +4 -3
  251. package/dist/src/index.d.ts.map +1 -1
  252. package/dist/src/index.js +4 -3
  253. package/dist/src/index.js.map +1 -1
  254. package/dist/src/positions/convert.d.ts.map +1 -1
  255. package/dist/src/positions/convert.js +11 -1
  256. package/dist/src/positions/convert.js.map +1 -1
  257. package/dist/src/positions/extract.d.ts.map +1 -1
  258. package/dist/src/positions/extract.js +53 -1
  259. package/dist/src/positions/extract.js.map +1 -1
  260. package/dist/src/positions/index.d.ts +1 -1
  261. package/dist/src/positions/index.d.ts.map +1 -1
  262. package/dist/src/positions/types.d.ts +59 -0
  263. package/dist/src/positions/types.d.ts.map +1 -1
  264. package/dist/src/sources/builtins.d.ts +1 -1
  265. package/dist/src/sources/builtins.d.ts.map +1 -1
  266. package/dist/src/sources/builtins.js +8 -2
  267. package/dist/src/sources/builtins.js.map +1 -1
  268. package/dist/src/sources/context.d.ts.map +1 -1
  269. package/dist/src/sources/context.js +1 -0
  270. package/dist/src/sources/context.js.map +1 -1
  271. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -1
  272. package/dist/src/sources/cypher/descriptor.js +5 -0
  273. package/dist/src/sources/cypher/descriptor.js.map +1 -1
  274. package/dist/src/sources/cypher/index.d.ts.map +1 -1
  275. package/dist/src/sources/cypher/index.js +124 -18
  276. package/dist/src/sources/cypher/index.js.map +1 -1
  277. package/dist/src/sources/cypher/params.d.ts +1 -1
  278. package/dist/src/sources/cypher/params.d.ts.map +1 -1
  279. package/dist/src/sources/cypher/query-builder.d.ts +17 -0
  280. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
  281. package/dist/src/sources/cypher/query-builder.js +31 -0
  282. package/dist/src/sources/cypher/query-builder.js.map +1 -1
  283. package/dist/src/sources/ids.d.ts +5 -0
  284. package/dist/src/sources/ids.d.ts.map +1 -1
  285. package/dist/src/sources/ids.js +5 -0
  286. package/dist/src/sources/ids.js.map +1 -1
  287. package/dist/src/sources/params.d.ts +3 -0
  288. package/dist/src/sources/params.d.ts.map +1 -1
  289. package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
  290. package/dist/src/sources/rest/descriptor.js +5 -0
  291. package/dist/src/sources/rest/descriptor.js.map +1 -1
  292. package/dist/src/sources/rest/source.d.ts.map +1 -1
  293. package/dist/src/sources/rest/source.js +15 -0
  294. package/dist/src/sources/rest/source.js.map +1 -1
  295. package/dist/src/sources/sigv4.d.ts +5 -3
  296. package/dist/src/sources/sigv4.d.ts.map +1 -1
  297. package/dist/src/sources/sigv4.js +6 -4
  298. package/dist/src/sources/sigv4.js.map +1 -1
  299. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  300. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  301. package/dist/src/sources/sparql/descriptor.js +64 -0
  302. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  303. package/dist/src/sources/sparql/index.d.ts +28 -0
  304. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  305. package/dist/src/sources/sparql/index.js +314 -0
  306. package/dist/src/sources/sparql/index.js.map +1 -0
  307. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  308. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  309. package/dist/src/sources/sparql/ntriples.js +180 -0
  310. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  311. package/dist/src/sources/sparql/params.d.ts +27 -0
  312. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  313. package/dist/src/sources/sparql/params.js +5 -0
  314. package/dist/src/sources/sparql/params.js.map +1 -0
  315. package/dist/src/sources/sparql/query.d.ts +72 -0
  316. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  317. package/dist/src/sources/sparql/query.js +113 -0
  318. package/dist/src/sources/sparql/query.js.map +1 -0
  319. package/dist/src/sources/types.d.ts +31 -0
  320. package/dist/src/sources/types.d.ts.map +1 -1
  321. package/dist/src/styles/annotations.d.ts +61 -5
  322. package/dist/src/styles/annotations.d.ts.map +1 -1
  323. package/dist/src/styles/annotations.js +130 -22
  324. package/dist/src/styles/annotations.js.map +1 -1
  325. package/dist/src/styles/canon/bends.d.ts +46 -0
  326. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  327. package/dist/src/styles/canon/bends.js +123 -0
  328. package/dist/src/styles/canon/bends.js.map +1 -1
  329. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  330. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  331. package/dist/src/styles/canon/color-tables.js +10 -4
  332. package/dist/src/styles/canon/color-tables.js.map +1 -1
  333. package/dist/src/styles/canon/color.d.ts +3 -1
  334. package/dist/src/styles/canon/color.d.ts.map +1 -1
  335. package/dist/src/styles/canon/color.js +103 -3
  336. package/dist/src/styles/canon/color.js.map +1 -1
  337. package/dist/src/styles/canon/enums.d.ts +2 -2
  338. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  339. package/dist/src/styles/canon/enums.js +81 -7
  340. package/dist/src/styles/canon/enums.js.map +1 -1
  341. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  342. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  343. package/dist/src/styles/canon/graphviz.js +57 -9
  344. package/dist/src/styles/canon/graphviz.js.map +1 -1
  345. package/dist/src/styles/canon/number.d.ts +8 -0
  346. package/dist/src/styles/canon/number.d.ts.map +1 -1
  347. package/dist/src/styles/canon/number.js +18 -0
  348. package/dist/src/styles/canon/number.js.map +1 -1
  349. package/dist/src/styles/canon/text.d.ts +29 -2
  350. package/dist/src/styles/canon/text.d.ts.map +1 -1
  351. package/dist/src/styles/canon/text.js +156 -16
  352. package/dist/src/styles/canon/text.js.map +1 -1
  353. package/dist/src/styles/codes.d.ts +2 -0
  354. package/dist/src/styles/codes.d.ts.map +1 -1
  355. package/dist/src/styles/codes.js +2 -0
  356. package/dist/src/styles/codes.js.map +1 -1
  357. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  358. package/dist/src/styles/cyjs/cascade.js +1015 -79
  359. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  360. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  361. package/dist/src/styles/cyjs/defaults-table.js +3 -0
  362. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  363. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  364. package/dist/src/styles/cyjs/emit.js +202 -9
  365. package/dist/src/styles/cyjs/emit.js.map +1 -1
  366. package/dist/src/styles/cyjs/face.d.ts +20 -0
  367. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  368. package/dist/src/styles/cyjs/face.js +332 -0
  369. package/dist/src/styles/cyjs/face.js.map +1 -0
  370. package/dist/src/styles/cyjs/mappers.d.ts +44 -1
  371. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  372. package/dist/src/styles/cyjs/mappers.js +461 -26
  373. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  374. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  375. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  376. package/dist/src/styles/cyjs/routes.js +360 -0
  377. package/dist/src/styles/cyjs/routes.js.map +1 -0
  378. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  379. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  380. package/dist/src/styles/cytoscape/charts.js +560 -0
  381. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  382. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  383. package/dist/src/styles/cytoscape/emit.js +156 -48
  384. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  385. package/dist/src/styles/cytoscape/lexicon.d.ts +91 -3
  386. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  387. package/dist/src/styles/cytoscape/lexicon.js +387 -77
  388. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  389. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  390. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  391. package/dist/src/styles/cytoscape/mappings.js +92 -0
  392. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  393. package/dist/src/styles/cytoscape/resolve.d.ts +42 -2
  394. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  395. package/dist/src/styles/cytoscape/resolve.js +623 -17
  396. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  397. package/dist/src/styles/defaults.d.ts +46 -26
  398. package/dist/src/styles/defaults.d.ts.map +1 -1
  399. package/dist/src/styles/defaults.js +308 -71
  400. package/dist/src/styles/defaults.js.map +1 -1
  401. package/dist/src/styles/index.d.ts +4 -3
  402. package/dist/src/styles/index.d.ts.map +1 -1
  403. package/dist/src/styles/index.js +3 -2
  404. package/dist/src/styles/index.js.map +1 -1
  405. package/dist/src/styles/internal.d.ts +1 -0
  406. package/dist/src/styles/internal.d.ts.map +1 -1
  407. package/dist/src/styles/internal.js +1 -0
  408. package/dist/src/styles/internal.js.map +1 -1
  409. package/dist/src/styles/io/generic.d.ts.map +1 -1
  410. package/dist/src/styles/io/generic.js +56 -16
  411. package/dist/src/styles/io/generic.js.map +1 -1
  412. package/dist/src/styles/io/round-trip.d.ts +56 -0
  413. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  414. package/dist/src/styles/io/round-trip.js +138 -0
  415. package/dist/src/styles/io/round-trip.js.map +1 -0
  416. package/dist/src/styles/io/writer.d.ts.map +1 -1
  417. package/dist/src/styles/io/writer.js +6 -1
  418. package/dist/src/styles/io/writer.js.map +1 -1
  419. package/dist/src/styles/notes.d.ts.map +1 -1
  420. package/dist/src/styles/notes.js +1 -0
  421. package/dist/src/styles/notes.js.map +1 -1
  422. package/dist/src/styles/plan/features.d.ts +1 -1
  423. package/dist/src/styles/plan/features.d.ts.map +1 -1
  424. package/dist/src/styles/plan/features.js +22 -2
  425. package/dist/src/styles/plan/features.js.map +1 -1
  426. package/dist/src/styles/plan/index.d.ts +1 -1
  427. package/dist/src/styles/plan/index.d.ts.map +1 -1
  428. package/dist/src/styles/plan/index.js +1 -1
  429. package/dist/src/styles/plan/index.js.map +1 -1
  430. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  431. package/dist/src/styles/plan/plan.js +61 -4
  432. package/dist/src/styles/plan/plan.js.map +1 -1
  433. package/dist/src/styles/plan/resolve.d.ts +11 -0
  434. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  435. package/dist/src/styles/plan/resolve.js +40 -4
  436. package/dist/src/styles/plan/resolve.js.map +1 -1
  437. package/dist/src/styles/slots.d.ts +14 -0
  438. package/dist/src/styles/slots.d.ts.map +1 -0
  439. package/dist/src/styles/slots.js +20 -0
  440. package/dist/src/styles/slots.js.map +1 -0
  441. package/dist/src/styles/types.d.ts +622 -6
  442. package/dist/src/styles/types.d.ts.map +1 -1
  443. package/dist/src/styles/vocabulary.d.ts +3 -2
  444. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  445. package/dist/src/styles/vocabulary.js +203 -0
  446. package/dist/src/styles/vocabulary.js.map +1 -1
  447. package/dist/styles.js +30 -239
  448. package/dist/styles.js.map +1 -1
  449. package/dist/xgmml.js +3 -3
  450. package/package.json +27 -7
  451. package/src/formats/cx/importer.ts +6 -1
  452. package/src/formats/cx/styles.ts +143 -9
  453. package/src/formats/cx2/importer.ts +1 -0
  454. package/src/formats/cx2/styles.ts +3 -1
  455. package/src/formats/cys/importer.ts +1 -0
  456. package/src/formats/cys/styles.ts +27 -5
  457. package/src/formats/dot/drawing.ts +799 -0
  458. package/src/formats/dot/importer.ts +120 -35
  459. package/src/formats/dot/label-places.ts +228 -0
  460. package/src/formats/dot/record.ts +336 -0
  461. package/src/formats/dot/styles.ts +1654 -153
  462. package/src/formats/gexf/dialog-metrics.ts +61 -0
  463. package/src/formats/gexf/importer.ts +50 -5
  464. package/src/formats/gexf/preview.ts +217 -0
  465. package/src/formats/gexf/schema.ts +2 -1
  466. package/src/formats/gexf/styles.ts +1099 -245
  467. package/src/formats/gml/importer.ts +291 -76
  468. package/src/formats/gml/index.ts +1 -1
  469. package/src/formats/gml/positions.ts +29 -7
  470. package/src/formats/gml/styles.ts +851 -109
  471. package/src/formats/graphml/styles-plain.ts +6 -15
  472. package/src/formats/graphml/styles-yed.ts +762 -173
  473. package/src/formats/graphml/styles-yfiles3.ts +485 -63
  474. package/src/formats/graphml/yfiles.ts +19 -6
  475. package/src/formats/json/dialect.ts +41 -5
  476. package/src/formats/json/importer.ts +59 -7
  477. package/src/formats/json/index.ts +1 -0
  478. package/src/formats/json/positions.ts +22 -5
  479. package/src/formats/json/styles.ts +2041 -185
  480. package/src/formats/pajek/draw.ts +458 -0
  481. package/src/formats/pajek/exporter.ts +81 -49
  482. package/src/formats/pajek/importer.ts +278 -103
  483. package/src/formats/pajek/index.ts +1 -0
  484. package/src/formats/pajek/styles.ts +1381 -133
  485. package/src/formats/pajek/syntax.ts +27 -2
  486. package/src/formats/xgmml/emit.ts +73 -5
  487. package/src/formats/xgmml/styles.ts +330 -71
  488. package/src/index.ts +5 -1
  489. package/src/positions/convert.ts +12 -1
  490. package/src/positions/extract.ts +55 -1
  491. package/src/positions/index.ts +1 -0
  492. package/src/positions/types.ts +60 -0
  493. package/src/sources/builtins.ts +8 -1
  494. package/src/sources/context.ts +1 -0
  495. package/src/sources/cypher/descriptor.ts +7 -1
  496. package/src/sources/cypher/index.ts +148 -18
  497. package/src/sources/cypher/params.ts +1 -1
  498. package/src/sources/cypher/query-builder.ts +33 -0
  499. package/src/sources/ids.ts +6 -0
  500. package/src/sources/params.ts +3 -0
  501. package/src/sources/rest/descriptor.ts +5 -0
  502. package/src/sources/rest/source.ts +16 -0
  503. package/src/sources/sigv4.ts +6 -4
  504. package/src/sources/sparql/descriptor.ts +67 -0
  505. package/src/sources/sparql/index.ts +356 -0
  506. package/src/sources/sparql/ntriples.ts +219 -0
  507. package/src/sources/sparql/params.ts +28 -0
  508. package/src/sources/sparql/query.ts +162 -0
  509. package/src/sources/types.ts +35 -0
  510. package/src/styles/annotations.ts +201 -27
  511. package/src/styles/canon/bends.ts +137 -0
  512. package/src/styles/canon/color-tables.ts +10 -4
  513. package/src/styles/canon/color.ts +105 -3
  514. package/src/styles/canon/enums.ts +98 -8
  515. package/src/styles/canon/graphviz.ts +71 -10
  516. package/src/styles/canon/number.ts +19 -0
  517. package/src/styles/canon/text.ts +187 -16
  518. package/src/styles/codes.ts +2 -0
  519. package/src/styles/cyjs/cascade.ts +1160 -84
  520. package/src/styles/cyjs/defaults-table.ts +3 -0
  521. package/src/styles/cyjs/emit.ts +233 -13
  522. package/src/styles/cyjs/face.ts +372 -0
  523. package/src/styles/cyjs/mappers.ts +492 -27
  524. package/src/styles/cyjs/routes.ts +432 -0
  525. package/src/styles/cytoscape/charts.ts +684 -0
  526. package/src/styles/cytoscape/emit.ts +170 -48
  527. package/src/styles/cytoscape/lexicon.ts +431 -78
  528. package/src/styles/cytoscape/mappings.ts +108 -0
  529. package/src/styles/cytoscape/resolve.ts +741 -17
  530. package/src/styles/defaults.ts +417 -108
  531. package/src/styles/index.ts +5 -0
  532. package/src/styles/internal.ts +1 -0
  533. package/src/styles/io/generic.ts +79 -23
  534. package/src/styles/io/round-trip.ts +202 -0
  535. package/src/styles/io/writer.ts +6 -1
  536. package/src/styles/notes.ts +1 -0
  537. package/src/styles/plan/features.ts +23 -2
  538. package/src/styles/plan/index.ts +1 -1
  539. package/src/styles/plan/plan.ts +69 -5
  540. package/src/styles/plan/resolve.ts +47 -4
  541. package/src/styles/slots.ts +25 -0
  542. package/src/styles/types.ts +633 -5
  543. package/src/styles/vocabulary.ts +211 -2
  544. package/dist/chunks/block-Cu22ewuS.js.map +0 -1
  545. package/dist/chunks/choose-Cdx6Enl2.js +0 -57
  546. package/dist/chunks/choose-Cdx6Enl2.js.map +0 -1
  547. package/dist/chunks/codes-CV_Bhcyi.js.map +0 -1
  548. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  549. package/dist/chunks/credentials-BiQsnMTb.js.map +0 -1
  550. package/dist/chunks/descriptor-BJ-W0Jd-.js.map +0 -1
  551. package/dist/chunks/emit-CD8xnY8s.js.map +0 -1
  552. package/dist/chunks/export-CZ7VRm4I.js.map +0 -1
  553. package/dist/chunks/exporter-bxxjOrDZ.js.map +0 -1
  554. package/dist/chunks/format-BMS-1Nxb.js +0 -64
  555. package/dist/chunks/format-BMS-1Nxb.js.map +0 -1
  556. package/dist/chunks/generic-CP6YD34u.js.map +0 -1
  557. package/dist/chunks/importer-B87_fmVx.js.map +0 -1
  558. package/dist/chunks/importer-CB_zV5_L.js.map +0 -1
  559. package/dist/chunks/importer-CVT-JyDE.js.map +0 -1
  560. package/dist/chunks/importer-Cyy6UseH.js.map +0 -1
  561. package/dist/chunks/importer-DPZDN40-.js.map +0 -1
  562. package/dist/chunks/importer-e3huMZbm.js.map +0 -1
  563. package/dist/chunks/lexicon-u2SI5xcx.js.map +0 -1
  564. package/dist/chunks/sigv4-LkAzsLAu.js.map +0 -1
  565. package/dist/chunks/styles-CaABMoO1.js.map +0 -1
  566. package/dist/chunks/styles-P_gmFAOi.js +0 -770
  567. package/dist/chunks/styles-P_gmFAOi.js.map +0 -1
  568. package/dist/chunks/styles-yed-Cs1nmrjn.js.map +0 -1
  569. package/dist/chunks/writer-DvHTl36J.js +0 -449
  570. package/dist/chunks/writer-DvHTl36J.js.map +0 -1
@@ -1,1070 +1,15 @@
1
1
  import { GraphFormatError, INVALID_INDEX } from "@graphty/graph-format";
2
2
  import { c as childrenCsr } from "./children-CA4coBi0.js";
3
- import { L as LOSS, c as capabilities, r as resolveExportOptions, a as checkCapabilities, U as countMixedEdges, e as explicitWeights, p as pairFolding, C as sanitizeIds, O as canonicalId, d as resolveImportOptions, f as reportUnusedOptions, g as reportSinkOptions, h as graphChosen, I as IdCoercer, i as DirectionResolver, o as parseWeightText, j as declareResolved } from "./export-CZ7VRm4I.js";
4
- import { h as isWritableDotText, j as quoteDotId } from "./escape-DH2Egt-l.js";
5
- import { f as formatF32, a as formatF64, i as idText, d as formatDecimal, c as formatInteger } from "./format-BMS-1Nxb.js";
6
- import { p as plural, a as agree, M as MIXED_DIRECTION_CODE, D as DIRECTION_FORCED_CODE, b as DIRECTION_REFUSED_CODE, S as SINK_OPTION_CODE, I as ID_MERGED_CODE, O as OPTION_IGNORED_CODE, C as COLUMN_RENAMED_CODE, R as ROLE_TAKEN_CODE, l as DUPLICATE_ATTRIBUTE_CODE, P as PRECISION_CODE, W as AMBIGUOUS_GRAPH_NAME_CODE, Y as GRAPH_NOT_FOUND_CODE, i as MULTIPLE_GRAPHS_CODE, r as ENCODING_CONFLICT_CODE, s as UNKNOWN_ENCODING_CODE, t as ENCODING_FALLBACK_CODE, u as INVALID_ENCODING_CODE, v as INVALID_UTF8_CODE, E as EMPTY_INPUT_CODE, Q as SYNTAX_CODE, y as ELEMENT_ISSUE, z as INPUT_ISSUE, K as ImportReportBuilder } from "./report-CgdsL9Hb.js";
7
- import { i as inferTextDtype, W as WIDENING_UNSUPPORTED_CODE, p as parseTextCell, T as TextCellWriter } from "./text-BuKQVMz2.js";
3
+ import { p as pairFolding, f as formatF32, a as formatF64, i as idText, d as formatDecimal, c as formatInteger, D as DirectionResolver } from "./format-BXiAb-1h.js";
4
+ import { q as quoteDotId, f as isWritableDotText } from "./escape-CuCIzNMB.js";
5
+ import { L as LOSS, c as capabilities, r as resolveExportOptions, a as checkCapabilities, G as countMixedEdges, e as explicitWeights, z as sanitizeIds, H as canonicalId, b as resolveImportOptions, d as reportUnusedOptions, f as reportSinkOptions, h as graphChosen, I as IdCoercer, p as parseWeightText, i as declareResolved } from "./export-Cha4dRFz.js";
6
+ import { p as plural, a as agree, M as MIXED_DIRECTION_CODE, D as DIRECTION_FORCED_CODE, b as DIRECTION_REFUSED_CODE, S as SINK_OPTION_CODE, I as ID_MERGED_CODE, O as OPTION_IGNORED_CODE, C as COLUMN_RENAMED_CODE, R as ROLE_TAKEN_CODE, l as DUPLICATE_ATTRIBUTE_CODE, P as PRECISION_CODE, W as AMBIGUOUS_GRAPH_NAME_CODE, Y as GRAPH_NOT_FOUND_CODE, i as MULTIPLE_GRAPHS_CODE, r as ENCODING_CONFLICT_CODE, s as UNKNOWN_ENCODING_CODE, t as ENCODING_FALLBACK_CODE, u as INVALID_ENCODING_CODE, v as INVALID_UTF8_CODE, E as EMPTY_INPUT_CODE, Q as SYNTAX_CODE, y as ELEMENT_ISSUE, z as INPUT_ISSUE, K as ImportReportBuilder } from "./report-CwMfYa9J.js";
7
+ import { i as inferTextDtype, W as WIDENING_UNSUPPORTED_CODE, p as parseTextCell, T as TextCellWriter } from "./text-ystE2bYi.js";
8
8
  import { j as joinText, e as encodeChunks, i as indentUnit } from "./writer-DxjgHwSe.js";
9
- import { i as importChosenGraph } from "./choose-Cdx6Enl2.js";
10
- import { r as readText, b as throwIfAborted, d as canonicalEncoding } from "./input-Ccg9I22A.js";
11
- import { m as median } from "./convert-BcQ8_jMo.js";
12
- import { u as StyleNotes, n as noteAt, a as STYLE_ISSUE, E as htmlLabelText, F as dotLabelText, p as plainCell, g as canonColor, y as colorOpacity, S as STYLE_BLOCK_NAME, v as parseStyleBlock, s as styleFingerprint, x as blockStyles, M as MAX_STYLE_VALUE_LENGTH, h as canonNumber, l as canonEnum, G as recordLabelText, i as num6, H as DOT_POINTS_PER_INCH, r as resolveStyles, t as toolDefaults, w as writeStyleBlock, c as styleBlockLosses } from "./block-Cu22ewuS.js";
13
- import { S as StyleApproximations } from "./approximations-C2riR4NT.js";
14
- import { s as sharedInExportCall } from "./writer-DvHTl36J.js";
15
- import { v as valueColumns } from "./styles-yed-Cs1nmrjn.js";
16
- const DOT_FORMAT = "dot";
17
- const DOT_ORIGIN = Object.freeze({ format: DOT_FORMAT });
18
- const CLUSTER_COLUMN = "graphty.cluster";
19
- const PARENT_COLUMN = "graphty.parent";
20
- const SOURCE_PORT_COLUMN = "graphty.sourcePort";
21
- const TARGET_PORT_COLUMN = "graphty.targetPort";
22
- const LABEL_ATTRIBUTE = "label";
23
- const POS_ATTRIBUTE = "pos";
24
- const POSITION_COLUMN = "graphty.position";
25
- const KEY_ATTRIBUTE = "key";
26
- const PIN_ATTRIBUTE = "pin";
27
- const DOT_META_KEY = "dot";
28
- const DOT_STYLE_CAPABILITIES = Object.freeze({
29
- tool: "graphviz",
30
- node: Object.freeze([
31
- "fill",
32
- "fillOpacity",
33
- "borderColor",
34
- "borderWidth",
35
- "borderStyle",
36
- "shape",
37
- "width",
38
- "height",
39
- "label",
40
- "labelColor",
41
- "labelSize",
42
- "labelFont",
43
- "tooltip",
44
- "visible"
45
- ]),
46
- edge: Object.freeze([
47
- "color",
48
- "opacity",
49
- "width",
50
- "lineStyle",
51
- "sourceArrow",
52
- "targetArrow",
53
- "arrowSize",
54
- "label",
55
- "sourceLabel",
56
- "targetLabel",
57
- "labelColor",
58
- "labelSize",
59
- "labelFont",
60
- "tooltip",
61
- "visible"
62
- ]),
63
- graph: Object.freeze(["background"]),
64
- block: "native"
65
- });
66
- const NAME_KEY = "name";
67
- const DIRECTED_KEY = "directed";
68
- const CLUSTER_KEY = "cluster";
69
- const NODE_ATTRIBUTES = [
70
- "colorscheme",
71
- "color",
72
- "fillcolor",
73
- "bgcolor",
74
- "pencolor",
75
- "style",
76
- "shape",
77
- "width",
78
- "height",
79
- "fixedsize",
80
- "regular",
81
- "penwidth",
82
- "fontname",
83
- "fontsize",
84
- "fontcolor",
85
- "tooltip"
86
- ];
87
- const EDGE_ATTRIBUTES = [
88
- "colorscheme",
89
- "color",
90
- "style",
91
- "penwidth",
92
- "fontname",
93
- "fontsize",
94
- "fontcolor",
95
- "tooltip",
96
- "edgetooltip",
97
- "arrowhead",
98
- "arrowtail",
99
- "dir",
100
- "arrowsize",
101
- "headlabel",
102
- "taillabel"
103
- ];
104
- const NOTED_ATTRIBUTES = ["peripheries", "xlabel"];
105
- const CIRCLE_LIKE = /* @__PURE__ */ new Set(["circle", "doublecircle", "mcircle", "square", "msquare"]);
106
- const BOX_LIKE = /* @__PURE__ */ new Set(["box", "rect", "rectangle", "square"]);
107
- const ELLIPSE_LIKE = /* @__PURE__ */ new Set(["", "ellipse", "oval", "circle"]);
108
- const NO_OUTLINE = /* @__PURE__ */ new Set(["plain", "plaintext", "none"]);
109
- const RECORD = /* @__PURE__ */ new Set(["record", "mrecord"]);
110
- const TRUE_TEXTS$1 = /* @__PURE__ */ new Set(["true", "yes", "shape"]);
111
- const POINT_SIZE = 0.05;
112
- const REGULAR_SIZE = 0.5;
113
- function isHtmlString(text) {
114
- if (text.length < 2 || !text.startsWith("<") || !text.endsWith(">")) {
115
- return false;
116
- }
117
- let depth = 0;
118
- for (let i = 0; i < text.length; i++) {
119
- const c = text.codePointAt(i);
120
- if (c === 60) {
121
- depth++;
122
- } else if (c === 62) {
123
- depth--;
124
- if (depth === 0 && i !== text.length - 1) {
125
- return false;
126
- }
127
- }
128
- }
129
- return depth === 0;
130
- }
131
- function cellText$1(table, name, i) {
132
- if (!table.has(name)) {
133
- return null;
134
- }
135
- const v = plainCell(table.value(name, i));
136
- if (typeof v === "string") {
137
- return v;
138
- }
139
- return typeof v === "number" || typeof v === "boolean" ? String(v) : null;
140
- }
141
- function nonEmpty(v) {
142
- return v === null || v === "" ? null : v;
143
- }
144
- function styleTokens(raw, at) {
145
- if (raw === null) {
146
- return [];
147
- }
148
- if (raw.length > MAX_STYLE_VALUE_LENGTH) {
149
- noteAt(at, STYLE_ISSUE.VALUE_TOO_LONG, `${String(raw.length)} characters`);
150
- return [];
151
- }
152
- return raw.toLowerCase().split(",").map((t) => t.replace(/^[ \t\r\n]+/, "")).filter((t) => t !== "");
153
- }
154
- function setLineWidth(tokens) {
155
- for (const t of tokens) {
156
- if (t.startsWith("setlinewidth(") && t.endsWith(")")) {
157
- return t.slice("setlinewidth(".length, -1).trim();
158
- }
159
- }
160
- return null;
161
- }
162
- function isTrue(raw) {
163
- if (raw === null) {
164
- return false;
165
- }
166
- const t = raw.trim().toLowerCase();
167
- return TRUE_TEXTS$1.has(t) || /^-?\d+$/.test(t) && Number(t) !== 0;
168
- }
169
- function labelText(raw, names, html, record, at) {
170
- if (isHtmlString(raw)) {
171
- return htmlLabelText(raw, at);
172
- }
173
- if (html.has(`<${raw}>`)) {
174
- return htmlLabelText(`<${raw}>`, at);
175
- }
176
- return dotLabelText(record ? recordLabelText(raw, at) : raw, names, at);
177
- }
178
- function readColor(raw, scheme, use, property, opacity, put, at) {
179
- if (raw === null) {
180
- return null;
181
- }
182
- const c = canonColor(raw, "graphviz", at(property), { scheme, use });
183
- if (c === null) {
184
- return null;
185
- }
186
- put(property, c.color);
187
- if (opacity !== null) {
188
- put(opacity, c.alpha);
189
- } else if (c.alpha > 0 || property !== "borderColor") {
190
- colorOpacity(c, null, at(property), false);
191
- }
192
- return c.alpha;
193
- }
194
- function inchesOf(points) {
195
- const want = num6(points);
196
- for (let digits = 6; digits < 17; digits++) {
197
- const inches2 = Number((points / DOT_POINTS_PER_INCH).toPrecision(digits));
198
- if (num6(inches2 * DOT_POINTS_PER_INCH) === want) {
199
- return inches2 + 0;
200
- }
201
- }
202
- return points / DOT_POINTS_PER_INCH;
203
- }
204
- function inches(raw, at) {
205
- if (raw === null) {
206
- return null;
207
- }
208
- const v = raw.trim() === "" ? Number.NaN : Number(raw);
209
- if (!Number.isFinite(v) || v < 0) {
210
- noteAt(at, STYLE_ISSUE.BAD_VALUE, raw.slice(0, MAX_STYLE_VALUE_LENGTH));
211
- return null;
212
- }
213
- return v;
214
- }
215
- function readCommon(get, tokens, scheme, names, put, at) {
216
- if (tokens.includes("invis")) {
217
- put("visible", false);
218
- }
219
- readColor(nonEmpty(get("fontcolor")), scheme, "line", "labelColor", null, put, at);
220
- const size = get("fontsize");
221
- put("labelSize", size === null ? null : canonNumber(size, at("labelSize")));
222
- const font = get("fontname");
223
- if (font !== null && font.length <= MAX_STYLE_VALUE_LENGTH) {
224
- put("labelFont", font);
225
- }
226
- const tip = get("tooltip") ?? get("edgetooltip");
227
- if (tip !== null) {
228
- put("tooltip", dotLabelText(tip, names, at("tooltip")));
229
- }
230
- }
231
- function readNode(get, cx, put, at) {
232
- const tokens = styleTokens(get("style"), at("visible"));
233
- const shapeRaw = nonEmpty(get("shape"));
234
- const shape = (shapeRaw ?? "").toLowerCase();
235
- const n = {
236
- get,
237
- cx,
238
- put,
239
- at,
240
- tokens,
241
- shapeRaw,
242
- shape,
243
- point: !cx.cluster && shape === "point",
244
- scheme: get("colorscheme"),
245
- color: nonEmpty(get("color"))
246
- };
247
- const names = cx.cluster ? { graph: cx.name } : { node: cx.name, graph: cx.graph, edge: "" };
248
- readCommon(get, tokens, n.scheme, names, put, at);
249
- if (cx.cluster) {
250
- readClusterFill(n);
251
- } else {
252
- readNodeFill(n);
253
- }
254
- readNodeOutline(n);
255
- readNodeShape(n);
256
- const label = n.point ? null : get(LABEL_ATTRIBUTE);
257
- if (label !== null) {
258
- put("label", labelText(label, names, cx.html, RECORD.has(shape), at("label")));
259
- }
260
- if (!cx.cluster) {
261
- readSize(get, shape, n.point, label ?? (n.point ? null : cx.name), put, at);
262
- }
263
- if (Number(get("peripheries")) > 1 || nonEmpty(get("xlabel")) !== null) {
264
- noteAt(at("label"), STYLE_ISSUE.NOT_CARRIED, nonEmpty(get("xlabel")) === null ? "peripheries" : "xlabel");
265
- }
266
- }
267
- function readClusterFill(n) {
268
- const { get, tokens } = n;
269
- const filled = tokens.includes("filled") || tokens.includes("radial") || tokens.includes("striped");
270
- const bg = nonEmpty(get("bgcolor"));
271
- const raw = filled ? nonEmpty(get("fillcolor")) ?? n.color ?? bg ?? "lightgrey" : bg;
272
- readColor(raw, n.scheme, "fill", "fill", "fillOpacity", n.put, n.at);
273
- }
274
- function readNodeFill(n) {
275
- const { shape, point } = n;
276
- const fillcolor = nonEmpty(n.get("fillcolor"));
277
- const filled = point || n.tokens.some(
278
- (t) => t === "filled" || t === "radial" || t === "striped" && BOX_LIKE.has(shape) || t === "wedged" && ELLIPSE_LIKE.has(shape)
279
- );
280
- if (filled) {
281
- const raw = fillcolor ?? n.color ?? (point ? "black" : "lightgrey");
282
- readColor(raw, n.scheme, "fill", "fill", "fillOpacity", n.put, n.at);
283
- } else if (fillcolor !== null) {
284
- noteAt(n.at("fill"), STYLE_ISSUE.UNFILLED, fillcolor.slice(0, MAX_STYLE_VALUE_LENGTH));
285
- }
286
- }
287
- function readNodeOutline(n) {
288
- const { get, cx, put, at, tokens } = n;
289
- if (!cx.cluster && NO_OUTLINE.has(n.shape)) {
290
- put("borderWidth", 0);
291
- } else {
292
- const outline = cx.cluster ? nonEmpty(get("pencolor")) ?? n.color : n.color;
293
- const alpha = readColor(outline, n.scheme, "line", "borderColor", null, put, at);
294
- const width = nonEmpty(get("penwidth")) ?? setLineWidth(tokens);
295
- if (alpha === 0) {
296
- put("borderWidth", 0);
297
- } else if (width !== null) {
298
- put("borderWidth", penWidth(width, get("penwidth") !== null, at("borderWidth")));
299
- } else if (tokens.includes("bold")) {
300
- put("borderWidth", 2);
301
- }
302
- }
303
- if (tokens.includes("dashed")) {
304
- put("borderStyle", "dashed");
305
- } else if (tokens.includes("dotted")) {
306
- put("borderStyle", "dotted");
307
- }
308
- }
309
- function readNodeShape(n) {
310
- const rounded = n.tokens.includes("rounded");
311
- if (n.cx.cluster) {
312
- n.put("shape", rounded ? "round-rectangle" : "rectangle");
313
- } else if (n.shapeRaw !== null) {
314
- n.put(
315
- "shape",
316
- rounded && BOX_LIKE.has(n.shape) ? "round-rectangle" : canonEnum("shape", n.shapeRaw, "graphviz", n.at("shape"))
317
- );
318
- }
319
- }
320
- function penWidth(raw, attribute, site) {
321
- const value = Number(raw.trim());
322
- if (attribute && Number.isFinite(value) && value < 0) {
323
- noteAt(site, STYLE_ISSUE.BAD_VALUE, raw.slice(0, MAX_STYLE_VALUE_LENGTH));
324
- return 0;
325
- }
326
- return canonNumber(raw, site);
327
- }
328
- function readSize(get, shape, point, label, put, at) {
329
- let w = inches(get("width"), at("width"));
330
- let h = inches(get("height"), at("height"));
331
- const same = point || CIRCLE_LIKE.has(shape) || isTrue(get("regular"));
332
- if (shape === "plain") {
333
- w = h = 0;
334
- } else if (w === null && h === null) {
335
- if (point) {
336
- put("width", num6(POINT_SIZE * DOT_POINTS_PER_INCH));
337
- put("height", num6(POINT_SIZE * DOT_POINTS_PER_INCH));
338
- return;
339
- }
340
- if (!same) {
341
- return;
342
- }
343
- w = h = REGULAR_SIZE;
344
- }
345
- let ww = w;
346
- let hh = h;
347
- if (point) {
348
- ww = hh = Math.min(w ?? Infinity, h ?? Infinity);
349
- } else if (same) {
350
- ww = hh = Math.max(w ?? 0, h ?? 0);
351
- }
352
- const exact = point || isTrue(get("fixedsize")) || label === "" && !RECORD.has(shape);
353
- if (!exact) {
354
- noteAt(at("width"), STYLE_ISSUE.SIZE_MINIMUM, "grows to fit its label");
355
- }
356
- put("width", ww === null ? null : canonNumber(ww, at("width"), DOT_POINTS_PER_INCH));
357
- put("height", hh === null ? null : canonNumber(hh, at("height"), DOT_POINTS_PER_INCH));
358
- }
359
- function readEdge(get, cx, put, at) {
360
- const tokens = styleTokens(get("style"), at("visible"));
361
- const scheme = get("colorscheme");
362
- readCommon(get, tokens, scheme, cx.names, put, at);
363
- readColor(nonEmpty(get("color")), scheme, "edge", "color", "opacity", put, at);
364
- readEdgeLine(get, tokens, put, at);
365
- readEdgeArrows(get, cx, put, at);
366
- for (const [attribute, property] of [
367
- [LABEL_ATTRIBUTE, "label"],
368
- ["headlabel", "targetLabel"],
369
- ["taillabel", "sourceLabel"]
370
- ]) {
371
- const raw = get(attribute);
372
- if (raw !== null) {
373
- put(property, labelText(raw, cx.names, cx.html, false, at(property)));
374
- }
375
- }
376
- if (nonEmpty(get("xlabel")) !== null) {
377
- noteAt(at("label"), STYLE_ISSUE.NOT_CARRIED, "xlabel");
378
- }
379
- }
380
- function readEdgeLine(get, tokens, put, at) {
381
- const width = nonEmpty(get("penwidth")) ?? setLineWidth(tokens);
382
- if (width !== null) {
383
- put("width", penWidth(width, get("penwidth") !== null, at("width")));
384
- } else if (tokens.includes("bold")) {
385
- put("width", 2);
386
- }
387
- if (tokens.includes("dashed")) {
388
- put("lineStyle", "dashed");
389
- } else if (tokens.includes("dotted")) {
390
- put("lineStyle", "dotted");
391
- } else if (tokens.includes("solid") || tokens.includes("bold")) {
392
- put("lineStyle", "solid");
393
- } else if (tokens.includes("tapered")) {
394
- put("lineStyle", "other:tapered");
395
- }
396
- }
397
- function readEdgeArrows(get, cx, put, at) {
398
- const dirRaw = nonEmpty(get("dir"));
399
- const head = nonEmpty(get("arrowhead"));
400
- const tail = nonEmpty(get("arrowtail"));
401
- if (dirRaw !== null || head !== null || tail !== null) {
402
- const dir = (dirRaw ?? (cx.directed ? "forward" : "none")).trim().toLowerCase();
403
- const forward = dir === "forward" || dir === "both";
404
- const back = dir === "back" || dir === "both";
405
- put("targetArrow", forward ? canonEnum("arrow", head ?? "normal", "graphviz", at("targetArrow")) : "none");
406
- put("sourceArrow", back ? canonEnum("arrow", tail ?? "normal", "graphviz", at("sourceArrow")) : "none");
407
- }
408
- const size = get("arrowsize");
409
- if (size !== null) {
410
- put("arrowSize", canonNumber(size, at("arrowSize")));
411
- }
412
- }
413
- function htmlStrings(snapshot) {
414
- const out = /* @__PURE__ */ new Set();
415
- for (let i = 0; i < snapshot.nodeCount; i++) {
416
- const id = snapshot.ids.idOf(i);
417
- if (typeof id === "string" && isHtmlString(id)) {
418
- out.add(id);
419
- }
420
- }
421
- for (const [table, n] of [
422
- [snapshot.nodes, snapshot.nodeCount],
423
- [snapshot.edges, snapshot.edgeCount]
424
- ]) {
425
- for (const name of [LABEL_ATTRIBUTE, "headlabel", "taillabel"].filter((c) => table.has(c))) {
426
- addHtmlCells(table, name, n, out);
427
- }
428
- }
429
- return out;
430
- }
431
- function addHtmlCells(table, name, n, out) {
432
- for (let i = 0; i < n; i++) {
433
- const v = cellText$1(table, name, i);
434
- if (v !== null && isHtmlString(v)) {
435
- out.add(v);
436
- }
437
- }
438
- }
439
- function directedEdges(snapshot) {
440
- const out = new Array(snapshot.edgeCount).fill(snapshot.directed);
441
- const col = snapshot.directed ? snapshot.edges.byRole("directed") : null;
442
- if (col !== null) {
443
- for (let e = 0; e < snapshot.edgeCount; e++) {
444
- const v = plainCell(col.value(e));
445
- if (typeof v === "boolean") {
446
- out[e] = v;
447
- }
448
- }
449
- }
450
- return out;
451
- }
452
- function isCluster(snapshot, i) {
453
- return snapshot.nodes.has(CLUSTER_COLUMN) && snapshot.nodes.value(CLUSTER_COLUMN, i) === true;
454
- }
455
- function contexts(snapshot, written = null) {
456
- const html = htmlStrings(snapshot);
457
- const graph = snapshot.meta.name ?? "";
458
- const own = directedEdges(snapshot);
459
- const directed = written === null || own.every((d) => d === snapshot.directed) ? own : own.map(() => written);
460
- const name = (i) => String(snapshot.ids.idOf(i));
461
- return {
462
- node: (i) => ({ name: name(i), graph, cluster: isCluster(snapshot, i), html }),
463
- edge: (e) => {
464
- const tail = name(snapshot.edgeSource(e));
465
- const head = name(snapshot.edgeTarget(e));
466
- return {
467
- names: { graph, tail, head, edge: `${tail}${directed[e] ? "->" : "--"}${head}` },
468
- directed: directed[e],
469
- html
470
- };
471
- }
472
- };
473
- }
474
- function defaultLabel(cx, shape, notes) {
475
- if (cx.cluster || shape === "point") {
476
- return null;
477
- }
478
- const at = { notes, target: "node", property: "label" };
479
- return isHtmlString(cx.name) ? htmlLabelText(cx.name, at) : dotLabelText(String.raw`\N`, { node: cx.name, graph: cx.graph }, at);
480
- }
481
- function styleColumns(table, attributes) {
482
- const own = /* @__PURE__ */ new Set([...attributes, ...NOTED_ATTRIBUTES]);
483
- return [...table.names()].filter((c) => own.has(c) || c.startsWith("graphty.style."));
484
- }
485
- function dotStyles(snapshot, context) {
486
- const notes = new StyleNotes();
487
- const cx = contexts(snapshot);
488
- const node = valueColumns(snapshot.nodeCount);
489
- const nameColumn = new Array(snapshot.nodeCount).fill(null);
490
- const clusterColumn = new Array(snapshot.nodeCount).fill(null);
491
- let named = 0;
492
- let clusters = 0;
493
- for (let i = 0; i < snapshot.nodeCount; i++) {
494
- context.budget.spend("node", NODE_ATTRIBUTES.length);
495
- const get = (name) => cellText$1(snapshot.nodes, name, i);
496
- const ncx = cx.node(i);
497
- const at = (property) => ({ notes, target: "node", property, element: i, budget: context.budget });
498
- readNode(
499
- get,
500
- ncx,
501
- (p, v) => {
502
- node.put(i, p, v);
503
- },
504
- at
505
- );
506
- const shown = defaultLabel(ncx, (get("shape") ?? "").toLowerCase(), notes);
507
- if (shown !== null) {
508
- nameColumn[i] = shown;
509
- named++;
510
- }
511
- if (ncx.cluster) {
512
- clusterColumn[i] = true;
513
- clusters++;
514
- }
515
- }
516
- const edge = valueColumns(snapshot.edgeCount);
517
- for (let e = 0; e < snapshot.edgeCount; e++) {
518
- context.budget.spend("edge", EDGE_ATTRIBUTES.length);
519
- const get = (name) => cellText$1(snapshot.edges, name, e);
520
- const at = (property) => ({ notes, target: "edge", property, element: e, budget: context.budget });
521
- readEdge(
522
- get,
523
- cx.edge(e),
524
- (p, v) => {
525
- edge.put(e, p, v);
526
- },
527
- at
528
- );
529
- }
530
- const graph = {};
531
- const bg = nonEmpty(cellText$1(snapshot.graph, "bgcolor", 0));
532
- if (snapshot.graph.has("bgcolor") && bg !== null) {
533
- readColor(
534
- bg,
535
- cellText$1(snapshot.graph, "colorscheme", 0),
536
- "fill",
537
- "background",
538
- null,
539
- (p, v) => {
540
- if (v !== null) {
541
- graph[p] = v;
542
- }
543
- },
544
- (property) => ({ notes, target: "graph", property })
545
- );
546
- }
547
- const blockText = cellText$1(snapshot.graph, STYLE_BLOCK_NAME, 0);
548
- if (blockText !== null) {
549
- exactFromBlock(snapshot, blockText, { node: node.values, edge: edge.values }, cx);
550
- }
551
- const nodeRules = [];
552
- const nodeColumns = /* @__PURE__ */ new Map();
553
- if (named > 0) {
554
- nodeColumns.set(NAME_KEY, nameColumn);
555
- nodeRules.push({
556
- id: "node.tool.name-label",
557
- target: "node",
558
- role: "passthrough",
559
- origin: "tool",
560
- where: { has: { style: NAME_KEY } },
561
- map: { label: { kind: "passthrough", by: { style: NAME_KEY } } },
562
- facts: { elements: named, reason: "NODE_NAME" }
563
- });
564
- }
565
- const features = clusters > 0 ? [{ ref: { style: CLUSTER_KEY }, values: clusterColumn }] : [];
566
- const edgeRules = [];
567
- const edgeColumns = /* @__PURE__ */ new Map();
568
- const directed = directedEdges(snapshot);
569
- if (directed.some(Boolean)) {
570
- edgeColumns.set(
571
- DIRECTED_KEY,
572
- directed.map((d) => d ? true : null)
573
- );
574
- edgeRules.push({
575
- id: "edge.tool.arrow",
576
- target: "edge",
577
- role: "group",
578
- origin: "tool",
579
- where: { has: { style: DIRECTED_KEY } },
580
- set: { targetArrow: "triangle" }
581
- });
582
- }
583
- return {
584
- canonical: true,
585
- dialect: "graphviz",
586
- tool: "graphviz",
587
- units: "px",
588
- node: { values: node.values, rules: nodeRules, columns: nodeColumns, features },
589
- edge: { values: edge.values, rules: edgeRules, columns: edgeColumns },
590
- graph,
591
- notes: notes.list(),
592
- readFrom: {
593
- node: styleColumns(snapshot.nodes, NODE_ATTRIBUTES),
594
- edge: styleColumns(snapshot.edges, EDGE_ATTRIBUTES)
595
- }
596
- };
597
- }
598
- const SHAPES = /* @__PURE__ */ new Map([
599
- ["ellipse", "ellipse"],
600
- ["rectangle", "box"],
601
- ["round-rectangle", "box"],
602
- ["triangle", "triangle"],
603
- ["diamond", "diamond"],
604
- ["pentagon", "pentagon"],
605
- ["hexagon", "hexagon"],
606
- ["octagon", "octagon"],
607
- ["parallelogram", "parallelogram"],
608
- ["trapezoid", "trapezium"],
609
- ["star", "star"],
610
- ["none", "none"]
611
- ]);
612
- const ARROWS = /* @__PURE__ */ new Map([
613
- ["none", "none"],
614
- ["triangle", "normal"],
615
- ["triangle-open", "onormal"],
616
- ["vee", "vee"],
617
- ["tee", "tee"],
618
- ["diamond", "diamond"],
619
- ["diamond-open", "odiamond"],
620
- ["circle", "dot"],
621
- ["circle-open", "odot"],
622
- ["square", "box"],
623
- ["crow", "crow"],
624
- ["half", "lnormal"],
625
- ["inverted", "inv"]
626
- ]);
627
- const STROKES = /* @__PURE__ */ new Map([
628
- ["dashed", "dashed"],
629
- ["dotted", "dotted"]
630
- ]);
631
- function graphvizDefaults(target) {
632
- const t = toolDefaults("graphviz")?.[target];
633
- const out = /* @__PURE__ */ new Map();
634
- const add = (attribute, property, scale = 1) => {
635
- const v = t[property]?.value;
636
- if (typeof v === "number") {
637
- out.set(attribute, num6(v / scale));
638
- } else if (typeof v === "string") {
639
- out.set(attribute, v);
640
- }
641
- };
642
- add("fontcolor", "labelColor");
643
- add("fontsize", "labelSize");
644
- add("fontname", "labelFont");
645
- if (target === "node") {
646
- add("color", "borderColor");
647
- add("pencolor", "borderColor");
648
- add("penwidth", "borderWidth");
649
- add("shape", "shape");
650
- add("width", "width", DOT_POINTS_PER_INCH);
651
- add("height", "height", DOT_POINTS_PER_INCH);
652
- } else {
653
- add("color", "color");
654
- add("penwidth", "width");
655
- add("arrowsize", "arrowSize");
656
- }
657
- return out;
658
- }
659
- const DEFAULT_ATTRIBUTES = {
660
- node: graphvizDefaults("node"),
661
- edge: graphvizDefaults("edge")
662
- };
663
- function withoutDefaults(out, target) {
664
- for (const [attribute, value] of DEFAULT_ATTRIBUTES[target]) {
665
- if (out.get(attribute) === value) {
666
- out.delete(attribute);
667
- }
668
- }
669
- if (!out.has("width") && !out.has("height")) {
670
- out.delete("fixedsize");
671
- }
672
- return out;
673
- }
674
- function gvColor(color, opacity) {
675
- if (typeof opacity !== "number" || opacity >= 1) {
676
- return color;
677
- }
678
- const a = Math.max(0, Math.min(255, Math.round(opacity * 255)));
679
- return color + a.toString(16).padStart(2, "0");
680
- }
681
- function escapeLabel(text) {
682
- return text.replaceAll("\\", String.raw`\\`).replaceAll("\n", String.raw`\n`);
683
- }
684
- function spelled(table, value, nearest, property, approximate) {
685
- const exact = table.get(value);
686
- if (exact !== void 0) {
687
- return exact;
688
- }
689
- if (value.startsWith("other:")) {
690
- return value.slice("other:".length);
691
- }
692
- approximate(property, value);
693
- return nearest;
694
- }
695
- function writeCommon(get, out, tokens) {
696
- const color = get("labelColor");
697
- if (typeof color === "string") {
698
- out.set("fontcolor", color);
699
- }
700
- const size = get("labelSize");
701
- if (typeof size === "number") {
702
- out.set("fontsize", size);
703
- }
704
- const font = get("labelFont");
705
- if (typeof font === "string") {
706
- out.set("fontname", font);
707
- }
708
- const tip = get("tooltip");
709
- if (typeof tip === "string") {
710
- out.set("tooltip", escapeLabel(tip));
711
- }
712
- if (get("visible") === false) {
713
- tokens.push("invis");
714
- }
715
- }
716
- function nodeAttributes(get, cx, approximate, notes) {
717
- const out = /* @__PURE__ */ new Map();
718
- const tokens = [];
719
- writeCommon(get, out, tokens);
720
- writeNodeOutline(get, cx, approximate, out, tokens);
721
- const gvShape = writeNodeShape(get, cx, approximate, out, tokens);
722
- if (!cx.cluster) {
723
- writeNodeSize(get, out);
724
- }
725
- const label = get("label");
726
- const shown = defaultLabel(cx, gvShape, notes);
727
- if (typeof label === "string" && label !== shown) {
728
- out.set(LABEL_ATTRIBUTE, escapeLabel(label));
729
- } else if (label === null && shown !== null) {
730
- out.set(LABEL_ATTRIBUTE, "");
731
- }
732
- if (tokens.length > 0) {
733
- out.set("style", tokens.join(","));
734
- }
735
- return withoutDefaults(out, "node");
736
- }
737
- function writeNodeOutline(get, cx, approximate, out, tokens) {
738
- const fill = get("fill");
739
- const fillOpacity = get("fillOpacity");
740
- if (typeof fill === "string" && fillOpacity !== 0) {
741
- tokens.push("filled");
742
- out.set("fillcolor", gvColor(fill, fillOpacity));
743
- }
744
- const border = get("borderColor");
745
- if (typeof border === "string") {
746
- out.set(cx.cluster ? "pencolor" : "color", border);
747
- }
748
- const borderWidth = get("borderWidth");
749
- if (typeof borderWidth === "number") {
750
- out.set("penwidth", borderWidth);
751
- }
752
- const borderStyle = get("borderStyle");
753
- if (typeof borderStyle === "string" && borderStyle !== "solid") {
754
- const nearest = borderStyle.includes("dash") ? "dashed" : "solid";
755
- tokens.push(spelled(STROKES, borderStyle, nearest, "borderStyle", approximate));
756
- }
757
- }
758
- function writeNodeShape(get, cx, approximate, out, tokens) {
759
- const shape = get("shape");
760
- if (typeof shape !== "string") {
761
- return "";
762
- }
763
- if (shape === "round-rectangle") {
764
- tokens.push("rounded");
765
- }
766
- if (cx.cluster) {
767
- if (shape !== "rectangle" && shape !== "round-rectangle") {
768
- approximate("shape", shape);
769
- }
770
- return "";
771
- }
772
- const gvShape = spelled(SHAPES, shape, shape === "vee" ? "invtriangle" : "box", "shape", approximate);
773
- out.set("shape", gvShape);
774
- return gvShape;
775
- }
776
- function writeNodeSize(get, out) {
777
- const width = get("width");
778
- const height = get("height");
779
- if (typeof width === "number" || typeof height === "number") {
780
- out.set("fixedsize", "true");
781
- }
782
- if (typeof width === "number") {
783
- out.set("width", inchesOf(width));
784
- }
785
- if (typeof height === "number") {
786
- out.set("height", inchesOf(height));
787
- }
788
- }
789
- function edgeAttributes(get, directed, approximate) {
790
- const out = /* @__PURE__ */ new Map();
791
- const tokens = [];
792
- writeCommon(get, out, tokens);
793
- const color = get("color");
794
- if (typeof color === "string") {
795
- out.set("color", gvColor(color, get("opacity")));
796
- }
797
- const width = get("width");
798
- if (typeof width === "number") {
799
- out.set("penwidth", width);
800
- }
801
- const line = get("lineStyle");
802
- if (typeof line === "string" && line !== "solid") {
803
- tokens.push(spelled(STROKES, line, line.includes("dash") ? "dashed" : "solid", "lineStyle", approximate));
804
- }
805
- writeEdgeArrows(get, directed, approximate, out);
806
- const arrowSize = get("arrowSize");
807
- if (typeof arrowSize === "number") {
808
- out.set("arrowsize", arrowSize);
809
- }
810
- for (const [property, attribute] of [
811
- ["label", LABEL_ATTRIBUTE],
812
- ["targetLabel", "headlabel"],
813
- ["sourceLabel", "taillabel"]
814
- ]) {
815
- const v = get(property);
816
- if (typeof v === "string") {
817
- out.set(attribute, escapeLabel(v));
818
- }
819
- }
820
- if (tokens.length > 0) {
821
- out.set("style", tokens.join(","));
822
- }
823
- return withoutDefaults(out, "edge");
824
- }
825
- function writeEdgeArrows(get, directed, approximate, out) {
826
- const source = get("sourceArrow");
827
- const target = get("targetArrow");
828
- const tail = typeof source === "string" && source !== "none";
829
- const head = typeof target === "string" && target !== "none";
830
- const plain = directed ? head && !tail && target === "triangle" : !head && !tail;
831
- if (plain || source === null && target === null) {
832
- return;
833
- }
834
- let dir = "none";
835
- if (head && tail) {
836
- dir = "both";
837
- } else if (head) {
838
- dir = "forward";
839
- } else if (tail) {
840
- dir = "back";
841
- }
842
- out.set("dir", dir);
843
- if (head) {
844
- out.set("arrowhead", spelled(ARROWS, target, "normal", "targetArrow", approximate));
845
- }
846
- if (tail) {
847
- out.set("arrowtail", spelled(ARROWS, source, "normal", "sourceArrow", approximate));
848
- }
849
- }
850
- function getter(picture, target) {
851
- const columns = /* @__PURE__ */ new Map();
852
- for (const p of DOT_STYLE_CAPABILITIES[target]) {
853
- columns.set(p, picture(target, p));
854
- }
855
- return (i) => (property) => columns.get(property)?.[i] ?? null;
856
- }
857
- function exactFromBlock(snapshot, text, read, cx) {
858
- const parsed = parseStyleBlock(text, styleFingerprint(snapshot));
859
- const ex = parsed.ok ? blockStyles(parsed.block, snapshot, "dot") : null;
860
- if (ex === null) {
861
- return;
862
- }
863
- const notes = new StyleNotes();
864
- for (const target of ["node", "edge"]) {
865
- const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
866
- const get = getter((t, p) => resolveStyles(ex, t, p, snapshot), target);
867
- const values = read[target];
868
- for (let i = 0; i < n; i++) {
869
- const want = get(i);
870
- const back = writtenAndReadBack(target, i, want, cx, notes);
871
- for (const property of DOT_STYLE_CAPABILITIES[target]) {
872
- const native = values[property]?.[i] ?? null;
873
- const w = want(property);
874
- if (native !== w && native === (back.get(property) ?? null)) {
875
- values[property] ??= new Array(n).fill(null);
876
- values[property][i] = w;
877
- }
878
- }
879
- }
880
- }
881
- }
882
- function writtenAndReadBack(target, i, want, cx, notes) {
883
- const ignore = () => void 0;
884
- const back = /* @__PURE__ */ new Map();
885
- const put = (property, value) => {
886
- if (value !== null) {
887
- back.set(property, value);
888
- }
889
- };
890
- const at = (property) => ({ notes, target, property });
891
- if (target === "node") {
892
- const ncx = cx.node(i);
893
- const attrs = nodeAttributes(want, ncx, ignore, notes);
894
- readNode((name) => textOf(attrs.get(name)), ncx, put, at);
895
- } else {
896
- const ecx = cx.edge(i);
897
- const attrs = edgeAttributes(want, ecx.directed, ignore);
898
- readEdge((name) => textOf(attrs.get(name)), ecx, put, at);
899
- }
900
- return back;
901
- }
902
- function textOf(v) {
903
- return v === void 0 ? null : String(v);
904
- }
905
- function readsBack(col) {
906
- const vals = col.filter((v) => v !== null);
907
- if (vals.every((v) => typeof v === "number")) {
908
- return vals.every((v) => Number.isFinite(v));
909
- }
910
- if (vals.every((v) => typeof v === "boolean")) {
911
- return true;
912
- }
913
- if (vals.every((v) => typeof v === "string")) {
914
- return vals.some((v) => inferTextDtype(v) === "string") && vals.every((v) => isWritableDotText(v));
915
- }
916
- return false;
917
- }
918
- function dotSafeJson(json) {
919
- return json.replaceAll(/\\(["\\])/g, (_m, c) => c === '"' ? String.raw`\u0022` : String.raw`\u005c`);
920
- }
921
- function dotStyledExport(snapshot, input, onMixedDirection) {
922
- if (input === void 0) {
923
- return null;
924
- }
925
- return sharedInExportCall(
926
- input,
927
- [snapshot, onMixedDirection],
928
- () => styledExport(snapshot, input, onMixedDirection)
929
- );
930
- }
931
- function styledExport(snapshot, input, onMixedDirection) {
932
- const approximated = new StyleApproximations();
933
- const replaced = [];
934
- const out = snapshot.withColumns();
935
- const written = onMixedDirection === "directed" || onMixedDirection === "undirected";
936
- const cx = contexts(snapshot, written ? onMixedDirection === "directed" : null);
937
- const notes = new StyleNotes();
938
- for (const target of ["node", "edge"]) {
939
- const table = target === "node" ? out.nodes : out.edges;
940
- const read = dataRead(input.rules.styles.rules, target);
941
- const approximate = (property, value) => {
942
- approximated.add(target, property, value);
943
- };
944
- const columns = attributeColumns(snapshot, input, target, { cx, approximate, notes, read });
945
- replaced.push(...removeStyleAttributes(table, target, columns, read));
946
- setAttributeColumns(table, columns);
947
- }
948
- const { background } = input.rules.styles.graph;
949
- if (out.graph.has("bgcolor")) {
950
- out.graph.remove("bgcolor");
951
- }
952
- if (typeof background === "string" && background !== toolDefaults("graphviz")?.graph.background?.value) {
953
- out.graph.set("bgcolor", [background], { dtype: "string" });
954
- }
955
- const inline = [...input.tags.node.values(), ...input.tags.edge.values()].some((col) => !readsBack(col));
956
- if (!inline) {
957
- setTagColumns(out, input);
958
- }
959
- const block = inline ? writeStyleBlock(input.rules, { inlineColumns: true, snapshot }) : input.block;
960
- out.graph.set(STYLE_BLOCK_NAME, [dotSafeJson(block)], { dtype: "string" });
961
- const losses = approximated.notes("Graphviz");
962
- if (inline) {
963
- losses.push(...styleBlockLosses(block, input.rules.styles.rules.length, "size"));
964
- }
965
- return { snapshot: out, notes: [...replaced, ...losses] };
966
- }
967
- function attributeColumns(snapshot, input, target, w) {
968
- const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
969
- const get = getter((t, p) => input.picture(t, p), target);
970
- const columns = /* @__PURE__ */ new Map();
971
- for (let i = 0; i < n; i++) {
972
- const attrs = target === "node" ? nodeAttributes(get(i), w.cx.node(i), w.approximate, w.notes) : edgeAttributes(get(i), w.cx.edge(i).directed, w.approximate);
973
- if (w.read.has(LABEL_ATTRIBUTE) && attrs.get(LABEL_ATTRIBUTE) === "" && get(i)("label") === null) {
974
- w.approximate("label", "");
975
- }
976
- for (const [name, value] of attrs) {
977
- let col = columns.get(name);
978
- if (col === void 0) {
979
- col = new Array(n).fill(null);
980
- columns.set(name, col);
981
- }
982
- col[i] = value;
983
- }
984
- }
985
- return columns;
986
- }
987
- function removeStyleAttributes(table, target, columns, read) {
988
- const attributes = target === "node" ? NODE_ATTRIBUTES : EDGE_ATTRIBUTES;
989
- const replaced = [];
990
- for (const name of table.names()) {
991
- if (!attributes.includes(name) && name !== LABEL_ATTRIBUTE && !name.startsWith("graphty.style.")) {
992
- continue;
993
- }
994
- const differs = read.has(name) ? replacedRows(table, name, columns.get(name)) : 0;
995
- if (differs > 0) {
996
- replaced.push(
997
- Object.freeze({
998
- code: DOT_ATTRIBUTE_CLASH_CODE,
999
- message: `${target} column "${name}" is not written: the ${name} attribute holds what graphty draws (${String(differs)} ${target}${differs === 1 ? "" : "s"} differ)`,
1000
- column: name,
1001
- count: differs
1002
- })
1003
- );
1004
- }
1005
- table.remove(name);
1006
- }
1007
- return replaced;
1008
- }
1009
- function setAttributeColumns(table, columns) {
1010
- for (const [name, col] of columns) {
1011
- if (name === LABEL_ATTRIBUTE) {
1012
- table.set(name, col, { dtype: "string", role: "label" }, { replaceRole: true });
1013
- } else if (col.every((v) => v === null || typeof v === "number")) {
1014
- table.set(name, col, { dtype: "f64" });
1015
- } else {
1016
- table.set(
1017
- name,
1018
- col.map((v) => v === null ? null : String(v)),
1019
- { dtype: "string" }
1020
- );
1021
- }
1022
- }
1023
- }
1024
- function setTagColumns(out, input) {
1025
- for (const target of ["node", "edge"]) {
1026
- const table = target === "node" ? out.nodes : out.edges;
1027
- for (const [name, col] of input.tags[target]) {
1028
- const kinds = new Set(col.filter((v) => v !== null).map((v) => typeof v));
1029
- let dtype = "string";
1030
- if (kinds.has("number")) {
1031
- dtype = "f64";
1032
- } else if (kinds.has("boolean")) {
1033
- dtype = "bool";
1034
- }
1035
- table.set(name, col, { dtype });
1036
- }
1037
- }
1038
- }
1039
- function dataRead(rules, target) {
1040
- const out = /* @__PURE__ */ new Set();
1041
- for (const { ext: _ext, ...rule } of rules.filter((r) => r.target === target)) {
1042
- JSON.stringify(rule, (_k, v) => {
1043
- if (typeof v === "object" && v !== null && !Array.isArray(v) && Object.keys(v).length === 1) {
1044
- const { data } = v;
1045
- if (typeof data === "string") {
1046
- out.add(data);
1047
- }
1048
- }
1049
- return v;
1050
- });
1051
- }
1052
- return out;
1053
- }
1054
- const DOT_ATTRIBUTE_CLASH_CODE = "W_DOT_ATTRIBUTE_CLASH";
1055
- function replacedRows(table, name, written) {
1056
- const column = table.get(name);
1057
- let n = 0;
1058
- for (let i = 0; column !== null && i < column.length; i++) {
1059
- const cell = column.isSet(i) ? plainCell(column.value(i)) : null;
1060
- const w = written?.[i] ?? null;
1061
- const text = typeof cell === "string" ? cell : JSON.stringify(cell);
1062
- if (cell !== null && (w === null || String(w) !== text)) {
1063
- n++;
1064
- }
1065
- }
1066
- return n;
1067
- }
9
+ import { a as DOT_ATTRIBUTE_CLASH_CODE, b as DOT_FORMAT, d as dotStyledExport, D as DOT_STYLE_CAPABILITIES, C as CLUSTER_COLUMN, P as POS_ATTRIBUTE, K as KEY_ATTRIBUTE, L as LABEL_ATTRIBUTE, c as DOT_META_KEY, i as isHtmlString, e as PARENT_COLUMN, T as TARGET_PORT_COLUMN, S as SOURCE_PORT_COLUMN, f as dotStyles, g as DOT_ORIGIN, h as PIN_ATTRIBUTE, j as POSITION_COLUMN } from "./styles-Cm62yyQX.js";
10
+ import { i as importChosenGraph } from "./choose-CczZJaX_.js";
11
+ import { r as readText, b as throwIfAborted, c as canonicalEncoding } from "./input-CAxt_aV-.js";
12
+ import { m as median } from "./convert-Ct2zelbQ.js";
1068
13
  const DOT_LOSS = Object.freeze({
1069
14
  /**
1070
15
  * An id, name or text with a backslash before a quote or a line break, or at its end, cannot be written as a DOT
@@ -2535,6 +1480,24 @@ const CLUSTER_PREFIX = "cluster";
2535
1480
  const CLUSTER_ATTRIBUTE = "cluster";
2536
1481
  const STATEMENTS_PER_ABORT_CHECK = 64;
2537
1482
  const MAX_ANCESTOR_WALK = 4096;
1483
+ const INHERITED_GRAPH_ATTRIBUTES = /* @__PURE__ */ new Set([
1484
+ "bgcolor",
1485
+ "color",
1486
+ "colorscheme",
1487
+ "fillcolor",
1488
+ "fontcolor",
1489
+ "fontname",
1490
+ "fontsize",
1491
+ "gradientangle",
1492
+ "label",
1493
+ "labeljust",
1494
+ "labelloc",
1495
+ "pencolor",
1496
+ "penwidth",
1497
+ "peripheries",
1498
+ "style",
1499
+ "tooltip"
1500
+ ]);
2538
1501
  const DOT_HEADER = /^\s*(strict\s+)?(di)?graph(?=[\s{"/]|$)(?!\s*\[)/i;
2539
1502
  const TRUE_TEXTS = /* @__PURE__ */ new Set(["true", "yes", "1"]);
2540
1503
  const COMPASS_POINTS = /* @__PURE__ */ new Set(["n", "ne", "e", "se", "s", "sw", "w", "nw", "c", "_"]);
@@ -2824,6 +1787,8 @@ class DotParser {
2824
1787
  this.idOf = /* @__PURE__ */ new Map();
2825
1788
  this.containers = /* @__PURE__ */ new Set();
2826
1789
  this.parentOf = /* @__PURE__ */ new Map();
1790
+ this.inherited = /* @__PURE__ */ new Map();
1791
+ this.ownAttributes = /* @__PURE__ */ new Map();
2827
1792
  this.conflictWarned = /* @__PURE__ */ new Set();
2828
1793
  this.strictEdges = /* @__PURE__ */ new Map();
2829
1794
  this.keyedEdges = /* @__PURE__ */ new Map();
@@ -2892,6 +1857,7 @@ class DotParser {
2892
1857
  });
2893
1858
  const root = this.newScope(null, headerLine, true, null);
2894
1859
  this.statementList(root);
1860
+ this.applyInherited();
2895
1861
  return lexer.next();
2896
1862
  }
2897
1863
  /**
@@ -2913,6 +1879,7 @@ class DotParser {
2913
1879
  memberSet: /* @__PURE__ */ new Set(),
2914
1880
  containers: [],
2915
1881
  attributes: /* @__PURE__ */ new Map(),
1882
+ graphDefaults: new Map(parent?.graphDefaults),
2916
1883
  cluster: false,
2917
1884
  container: INVALID_INDEX
2918
1885
  };
@@ -3140,42 +2107,10 @@ class DotParser {
3140
2107
  */
3141
2108
  closeScope(scope, parent) {
3142
2109
  const { container } = scope;
3143
- if (container !== INVALID_INDEX) {
3144
- for (const attribute of scope.attributes.values()) {
3145
- if (attribute.name !== CLUSTER_ATTRIBUTE) {
3146
- this.setNodeAttribute(container, attribute.name, attribute.value, attribute.line);
3147
- }
3148
- }
3149
- for (const nested of scope.containers) {
3150
- if (nested !== container && !this.parentOf.has(nested)) {
3151
- this.setParent(nested, container);
3152
- }
3153
- }
3154
- for (const member of scope.members) {
3155
- if (member === container) {
3156
- continue;
3157
- }
3158
- const existing = this.parentOf.get(member);
3159
- if (existing === void 0) {
3160
- this.setParent(member, container);
3161
- } else if (existing !== container && !this.isAncestor(container, existing)) {
3162
- this.clusterConflict(member, existing, container, scope.line);
3163
- }
3164
- }
3165
- parent.containers.push(container);
2110
+ if (container === INVALID_INDEX) {
2111
+ this.closePlainSubgraph(scope, parent);
3166
2112
  } else {
3167
- if (scope.attributes.size > 0) {
3168
- const names = [...scope.attributes.keys()].join(", ");
3169
- this.report.warning(
3170
- "unsupported",
3171
- DOT_ISSUE.SUBGRAPH_ATTRIBUTES_DROPPED,
3172
- `subgraph ${scope.name === null ? "(anonymous)" : JSON.stringify(scope.name)} is not a cluster; its attributes (${names}) cannot be represented and were dropped`,
3173
- { line: scope.line, element: scope.name }
3174
- );
3175
- }
3176
- for (const nested of scope.containers) {
3177
- parent.containers.push(nested);
3178
- }
2113
+ this.closeCluster(scope, parent, container);
3179
2114
  }
3180
2115
  if (!parent.root) {
3181
2116
  for (const member of scope.members) {
@@ -3186,6 +2121,82 @@ class DotParser {
3186
2121
  }
3187
2122
  }
3188
2123
  }
2124
+ /**
2125
+ * Finish a cluster: apply its attributes to its container node, assign parents to its nested
2126
+ * containers and its members, and hand the container to the enclosing scope.
2127
+ * @param scope - the closed scope
2128
+ * @param parent - the enclosing scope
2129
+ * @param container - the cluster's container node
2130
+ */
2131
+ closeCluster(scope, parent, container) {
2132
+ const own = this.ownAttributes.get(container) ?? /* @__PURE__ */ new Set();
2133
+ this.ownAttributes.set(container, own);
2134
+ for (const attribute of scope.attributes.values()) {
2135
+ if (attribute.name !== CLUSTER_ATTRIBUTE) {
2136
+ own.add(attribute.name);
2137
+ this.setNodeAttribute(container, attribute.name, attribute.value, attribute.line);
2138
+ }
2139
+ }
2140
+ for (const nested of scope.containers) {
2141
+ if (nested !== container && !this.parentOf.has(nested)) {
2142
+ this.setParent(nested, container);
2143
+ }
2144
+ }
2145
+ for (const member of scope.members) {
2146
+ if (member !== container) {
2147
+ this.adoptMember(member, container, scope.line);
2148
+ }
2149
+ }
2150
+ parent.containers.push(container);
2151
+ }
2152
+ /**
2153
+ * Put a cluster's member in it, unless it is already in another cluster this one is not inside.
2154
+ * @param member - the member node
2155
+ * @param container - the cluster's container node
2156
+ * @param line - the cluster's line
2157
+ */
2158
+ adoptMember(member, container, line) {
2159
+ const existing = this.parentOf.get(member);
2160
+ if (existing === void 0) {
2161
+ this.setParent(member, container);
2162
+ } else if (existing !== container && !this.isAncestor(container, existing)) {
2163
+ this.clusterConflict(member, existing, container, line);
2164
+ }
2165
+ }
2166
+ /**
2167
+ * Finish a subgraph that is not a cluster: report its attributes dropped, and hand its nested
2168
+ * containers to the enclosing scope.
2169
+ * @param scope - the closed scope
2170
+ * @param parent - the enclosing scope
2171
+ */
2172
+ closePlainSubgraph(scope, parent) {
2173
+ if (scope.attributes.size > 0) {
2174
+ const names = [...scope.attributes.keys()].join(", ");
2175
+ this.report.warning(
2176
+ "unsupported",
2177
+ DOT_ISSUE.SUBGRAPH_ATTRIBUTES_DROPPED,
2178
+ `subgraph ${scope.name === null ? "(anonymous)" : JSON.stringify(scope.name)} is not a cluster; its attributes (${names}) cannot be represented and were dropped`,
2179
+ { line: scope.line, element: scope.name }
2180
+ );
2181
+ }
2182
+ for (const nested of scope.containers) {
2183
+ parent.containers.push(nested);
2184
+ }
2185
+ }
2186
+ /**
2187
+ * Give every cluster the drawing attributes it inherits and does not set itself (Graphviz's subgraph attribute
2188
+ * inheritance), once the whole graph is read: a cluster reopened later can still set its own.
2189
+ */
2190
+ applyInherited() {
2191
+ for (const [container, attributes] of this.inherited) {
2192
+ const own = this.ownAttributes.get(container);
2193
+ for (const attribute of attributes.values()) {
2194
+ if (own?.has(attribute.name) !== true) {
2195
+ this.setNodeAttribute(container, attribute.name, attribute.value, attribute.line);
2196
+ }
2197
+ }
2198
+ }
2199
+ }
3189
2200
  /**
3190
2201
  * Whether `candidate` is an ancestor of `node` through the parents assigned so far.
3191
2202
  * @param candidate - the possible ancestor
@@ -3267,6 +2278,7 @@ class DotParser {
3267
2278
  if (!this.containers.has(index)) {
3268
2279
  this.containers.add(index);
3269
2280
  this.sink.setNodeValue(this.clusterColumn(), index, true);
2281
+ this.inherited.set(index, new Map(scope.graphDefaults));
3270
2282
  }
3271
2283
  scope.container = index;
3272
2284
  } catch (err) {
@@ -3283,6 +2295,9 @@ class DotParser {
3283
2295
  * @param attribute - the attribute
3284
2296
  */
3285
2297
  scopeAttribute(scope, attribute) {
2298
+ if (INHERITED_GRAPH_ATTRIBUTES.has(attribute.name)) {
2299
+ scope.graphDefaults.set(attribute.name, attribute);
2300
+ }
3286
2301
  if (scope.root) {
3287
2302
  this.setGraphAttribute(attribute);
3288
2303
  return;
@@ -3989,8 +3004,7 @@ class DotParser {
3989
3004
  export {
3990
3005
  DOT_ISSUE as D,
3991
3006
  DOT_LOSS as a,
3992
- DOT_STYLE_CAPABILITIES as b,
3993
- dotImporter as c,
3007
+ dotImporter as b,
3994
3008
  dotExporter as d
3995
3009
  };
3996
- //# sourceMappingURL=importer-CB_zV5_L.js.map
3010
+ //# sourceMappingURL=importer-DaLTjbds.js.map