@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.
- package/dist/chunks/{approximations-C2riR4NT.js → approximations-Bzn3L-je.js} +2 -2
- package/dist/chunks/{approximations-C2riR4NT.js.map → approximations-Bzn3L-je.js.map} +1 -1
- package/dist/chunks/bends-BGXjv_U4.js +129 -0
- package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
- package/dist/chunks/{block-Cu22ewuS.js → block-iptrlMBb.js} +906 -164
- package/dist/chunks/block-iptrlMBb.js.map +1 -0
- package/dist/chunks/choose-CczZJaX_.js +717 -0
- package/dist/chunks/choose-CczZJaX_.js.map +1 -0
- package/dist/chunks/{codes-CV_Bhcyi.js → codes-BE2xir2k.js} +6 -2
- package/dist/chunks/codes-BE2xir2k.js.map +1 -0
- package/dist/chunks/{constants-D0LqcsLJ.js → constants-CKkYLPtt.js} +2 -2
- package/dist/chunks/{constants-D0LqcsLJ.js.map → constants-CKkYLPtt.js.map} +1 -1
- package/dist/chunks/{context-cgmmOxZ2.js → context-C3p0RQxR.js} +5 -4
- package/dist/chunks/{context-cgmmOxZ2.js.map → context-C3p0RQxR.js.map} +1 -1
- package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
- package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
- package/dist/chunks/{credentials-BiQsnMTb.js → credentials-DXHx7nwR.js} +16 -14
- package/dist/chunks/credentials-DXHx7nwR.js.map +1 -0
- package/dist/chunks/{cx-export-BEeF6ymo.js → cx-export-Bt6NoqTQ.js} +3 -3
- package/dist/chunks/{cx-export-BEeF6ymo.js.map → cx-export-Bt6NoqTQ.js.map} +1 -1
- package/dist/chunks/descriptor-B28U25x4.js +60 -0
- package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
- package/dist/chunks/{descriptor-BJ-W0Jd-.js → descriptor-DLA5kINx.js} +7 -2
- package/dist/chunks/descriptor-DLA5kINx.js.map +1 -0
- package/dist/chunks/{emit-CD8xnY8s.js → emit-BwHQkZle.js} +1660 -133
- package/dist/chunks/emit-BwHQkZle.js.map +1 -0
- package/dist/chunks/{escape-DH2Egt-l.js → escape-CuCIzNMB.js} +8 -8
- package/dist/chunks/{escape-DH2Egt-l.js.map → escape-CuCIzNMB.js.map} +1 -1
- package/dist/chunks/{export-CZ7VRm4I.js → export-Cha4dRFz.js} +45 -387
- package/dist/chunks/export-Cha4dRFz.js.map +1 -0
- package/dist/chunks/{exporter-Dcw7Ldtq.js → exporter-BP6otMO6.js} +6 -6
- package/dist/chunks/{exporter-Dcw7Ldtq.js.map → exporter-BP6otMO6.js.map} +1 -1
- package/dist/chunks/{exporter-bxxjOrDZ.js → exporter-D2CETOMK.js} +1222 -156
- package/dist/chunks/exporter-D2CETOMK.js.map +1 -0
- package/dist/chunks/{exporter-BIdaoIgh.js → exporter-D9yMtocA.js} +7 -7
- package/dist/chunks/{exporter-BIdaoIgh.js.map → exporter-D9yMtocA.js.map} +1 -1
- package/dist/chunks/{exporter-DtVU80Fa.js → exporter-_jrBTnos.js} +9 -8
- package/dist/chunks/{exporter-DtVU80Fa.js.map → exporter-_jrBTnos.js.map} +1 -1
- package/dist/chunks/{exporter-ChjL5fmP.js → exporter-nDfxIK5D.js} +9 -8
- package/dist/chunks/{exporter-ChjL5fmP.js.map → exporter-nDfxIK5D.js.map} +1 -1
- package/dist/chunks/format-BXiAb-1h.js +408 -0
- package/dist/chunks/format-BXiAb-1h.js.map +1 -0
- package/dist/chunks/{generic-CP6YD34u.js → generic-ymWCETAJ.js} +387 -31
- package/dist/chunks/generic-ymWCETAJ.js.map +1 -0
- package/dist/chunks/{importer-e3huMZbm.js → importer-B92x1xY5.js} +14 -10
- package/dist/chunks/importer-B92x1xY5.js.map +1 -0
- package/dist/chunks/{importer-B87_fmVx.js → importer-CT9mJ1nn.js} +326 -84
- package/dist/chunks/importer-CT9mJ1nn.js.map +1 -0
- package/dist/chunks/{importer-CB_zV5_L.js → importer-DaLTjbds.js} +116 -1102
- package/dist/chunks/importer-DaLTjbds.js.map +1 -0
- package/dist/chunks/{importer-DPZDN40-.js → importer-GREKMdIf.js} +25 -17
- package/dist/chunks/importer-GREKMdIf.js.map +1 -0
- package/dist/chunks/{importer-Bji2MeWr.js → importer-PqaaKKnY.js} +13 -10
- package/dist/chunks/{importer-Bji2MeWr.js.map → importer-PqaaKKnY.js.map} +1 -1
- package/dist/chunks/{importer-Cyy6UseH.js → importer-Vn5QvmmJ.js} +66 -13
- package/dist/chunks/importer-Vn5QvmmJ.js.map +1 -0
- package/dist/chunks/{importer-CVT-JyDE.js → importer-vRq4h3j5.js} +1469 -356
- package/dist/chunks/importer-vRq4h3j5.js.map +1 -0
- package/dist/chunks/{input-Ccg9I22A.js → input-CAxt_aV-.js} +4 -4
- package/dist/chunks/{input-Ccg9I22A.js.map → input-CAxt_aV-.js.map} +1 -1
- package/dist/chunks/{json-elements-By172SVq.js → json-elements-Cq76WjnZ.js} +4 -4
- package/dist/chunks/{json-elements-By172SVq.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
- package/dist/chunks/{lexicon-u2SI5xcx.js → lexicon-Clf4QIyl.js} +282 -74
- package/dist/chunks/lexicon-Clf4QIyl.js.map +1 -0
- package/dist/chunks/{ontology-export-BwgMyuF0.js → ontology-export-OMo91mb0.js} +4 -4
- package/dist/chunks/{ontology-export-BwgMyuF0.js.map → ontology-export-OMo91mb0.js.map} +1 -1
- package/dist/chunks/{records-Cgvxz-Vx.js → records-NJiYvekn.js} +2 -2
- package/dist/chunks/{records-Cgvxz-Vx.js.map → records-NJiYvekn.js.map} +1 -1
- package/dist/chunks/{report-CgdsL9Hb.js → report-CwMfYa9J.js} +23 -23
- package/dist/chunks/{report-CgdsL9Hb.js.map → report-CwMfYa9J.js.map} +1 -1
- package/dist/chunks/round-trip-Zm3_ivgq.js +79 -0
- package/dist/chunks/round-trip-Zm3_ivgq.js.map +1 -0
- package/dist/chunks/{sigv4-LkAzsLAu.js → sigv4-EokFic1V.js} +5 -5
- package/dist/chunks/sigv4-EokFic1V.js.map +1 -0
- package/dist/chunks/{styles-CaABMoO1.js → styles-CCs214_3.js} +1237 -138
- package/dist/chunks/styles-CCs214_3.js.map +1 -0
- package/dist/chunks/styles-Cm62yyQX.js +2812 -0
- package/dist/chunks/styles-Cm62yyQX.js.map +1 -0
- package/dist/chunks/styles-DPQQIig4.js +1928 -0
- package/dist/chunks/styles-DPQQIig4.js.map +1 -0
- package/dist/chunks/{styles-yed-Cs1nmrjn.js → styles-yed-UMFdNqze.js} +503 -172
- package/dist/chunks/styles-yed-UMFdNqze.js.map +1 -0
- package/dist/chunks/{text-BuKQVMz2.js → text-ystE2bYi.js} +2 -2
- package/dist/chunks/{text-BuKQVMz2.js.map → text-ystE2bYi.js.map} +1 -1
- package/dist/csv.js +7 -7
- package/dist/cx.js +2 -2
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +5 -4
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +42 -12
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +847 -193
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +232 -220
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +3 -3
- package/dist/json.js +3 -2
- package/dist/neo4j.js +6 -6
- package/dist/obo.js +1 -1
- package/dist/pajek.js +1 -1
- package/dist/positions.js +45 -3
- package/dist/positions.js.map +1 -1
- package/dist/sources-cypher.js +138 -23
- package/dist/sources-cypher.js.map +1 -1
- package/dist/sources-ndex.js +2 -2
- package/dist/sources-rest.js +16 -6
- package/dist/sources-rest.js.map +1 -1
- package/dist/sources-sparql.d.ts +1 -0
- package/dist/sources-sparql.js +405 -0
- package/dist/sources-sparql.js.map +1 -0
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +5 -1
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +24 -1
- package/dist/src/formats/cx/styles.d.ts.map +1 -1
- package/dist/src/formats/cx/styles.js +117 -11
- package/dist/src/formats/cx/styles.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +1 -0
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts.map +1 -1
- package/dist/src/formats/cx2/styles.js +3 -1
- package/dist/src/formats/cx2/styles.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +1 -0
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +2 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -1
- package/dist/src/formats/cys/styles.js +15 -7
- package/dist/src/formats/cys/styles.js.map +1 -1
- package/dist/src/formats/dot/drawing.d.ts +98 -0
- package/dist/src/formats/dot/drawing.d.ts.map +1 -0
- package/dist/src/formats/dot/drawing.js +734 -0
- package/dist/src/formats/dot/drawing.js.map +1 -0
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +108 -31
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/label-places.d.ts +34 -0
- package/dist/src/formats/dot/label-places.d.ts.map +1 -0
- package/dist/src/formats/dot/label-places.js +179 -0
- package/dist/src/formats/dot/label-places.js.map +1 -0
- package/dist/src/formats/dot/record.d.ts +50 -0
- package/dist/src/formats/dot/record.d.ts.map +1 -0
- package/dist/src/formats/dot/record.js +275 -0
- package/dist/src/formats/dot/record.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +62 -2
- package/dist/src/formats/dot/styles.d.ts.map +1 -1
- package/dist/src/formats/dot/styles.js +1454 -119
- package/dist/src/formats/dot/styles.js.map +1 -1
- package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
- package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
- package/dist/src/formats/gexf/dialog-metrics.js +59 -0
- package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
- package/dist/src/formats/gexf/importer.d.ts +7 -0
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +41 -5
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/preview.d.ts +77 -0
- package/dist/src/formats/gexf/preview.d.ts.map +1 -0
- package/dist/src/formats/gexf/preview.js +191 -0
- package/dist/src/formats/gexf/preview.js.map +1 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +2 -1
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +58 -31
- package/dist/src/formats/gexf/styles.d.ts.map +1 -1
- package/dist/src/formats/gexf/styles.js +848 -225
- package/dist/src/formats/gexf/styles.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts +5 -2
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +258 -71
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +1 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +1 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +7 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -1
- package/dist/src/formats/gml/positions.js +29 -7
- package/dist/src/formats/gml/positions.js.map +1 -1
- package/dist/src/formats/gml/styles.d.ts.map +1 -1
- package/dist/src/formats/gml/styles.js +753 -101
- package/dist/src/formats/gml/styles.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-plain.js +6 -10
- package/dist/src/formats/graphml/styles-plain.js.map +1 -1
- package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yed.js +692 -161
- package/dist/src/formats/graphml/styles-yed.js.map +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.js +429 -64
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +3 -3
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +16 -6
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/dialect.d.ts +3 -2
- package/dist/src/formats/json/dialect.d.ts.map +1 -1
- package/dist/src/formats/json/dialect.js +39 -5
- package/dist/src/formats/json/dialect.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +13 -2
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +42 -6
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/index.d.ts +1 -1
- package/dist/src/formats/json/index.d.ts.map +1 -1
- package/dist/src/formats/json/index.js +1 -1
- package/dist/src/formats/json/index.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +5 -2
- package/dist/src/formats/json/positions.d.ts.map +1 -1
- package/dist/src/formats/json/positions.js +20 -4
- package/dist/src/formats/json/positions.js.map +1 -1
- package/dist/src/formats/json/styles.d.ts +12 -1
- package/dist/src/formats/json/styles.d.ts.map +1 -1
- package/dist/src/formats/json/styles.js +1755 -136
- package/dist/src/formats/json/styles.js.map +1 -1
- package/dist/src/formats/pajek/draw.d.ts +96 -0
- package/dist/src/formats/pajek/draw.d.ts.map +1 -0
- package/dist/src/formats/pajek/draw.js +372 -0
- package/dist/src/formats/pajek/draw.js.map +1 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +70 -51
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +9 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +233 -102
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +1 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +15 -7
- package/dist/src/formats/pajek/styles.d.ts.map +1 -1
- package/dist/src/formats/pajek/styles.js +1278 -114
- package/dist/src/formats/pajek/styles.js.map +1 -1
- package/dist/src/formats/pajek/syntax.d.ts +10 -1
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +26 -2
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts +1 -0
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +65 -5
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +23 -3
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
- package/dist/src/formats/xgmml/styles.js +277 -60
- package/dist/src/formats/xgmml/styles.js.map +1 -1
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/convert.d.ts.map +1 -1
- package/dist/src/positions/convert.js +11 -1
- package/dist/src/positions/convert.js.map +1 -1
- package/dist/src/positions/extract.d.ts.map +1 -1
- package/dist/src/positions/extract.js +53 -1
- package/dist/src/positions/extract.js.map +1 -1
- package/dist/src/positions/index.d.ts +1 -1
- package/dist/src/positions/index.d.ts.map +1 -1
- package/dist/src/positions/types.d.ts +59 -0
- package/dist/src/positions/types.d.ts.map +1 -1
- package/dist/src/sources/builtins.d.ts +1 -1
- package/dist/src/sources/builtins.d.ts.map +1 -1
- package/dist/src/sources/builtins.js +8 -2
- package/dist/src/sources/builtins.js.map +1 -1
- package/dist/src/sources/context.d.ts.map +1 -1
- package/dist/src/sources/context.js +1 -0
- package/dist/src/sources/context.js.map +1 -1
- package/dist/src/sources/cypher/descriptor.d.ts.map +1 -1
- package/dist/src/sources/cypher/descriptor.js +5 -0
- package/dist/src/sources/cypher/descriptor.js.map +1 -1
- package/dist/src/sources/cypher/index.d.ts.map +1 -1
- package/dist/src/sources/cypher/index.js +124 -18
- package/dist/src/sources/cypher/index.js.map +1 -1
- package/dist/src/sources/cypher/params.d.ts +1 -1
- package/dist/src/sources/cypher/params.d.ts.map +1 -1
- package/dist/src/sources/cypher/query-builder.d.ts +17 -0
- package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
- package/dist/src/sources/cypher/query-builder.js +31 -0
- package/dist/src/sources/cypher/query-builder.js.map +1 -1
- package/dist/src/sources/ids.d.ts +5 -0
- package/dist/src/sources/ids.d.ts.map +1 -1
- package/dist/src/sources/ids.js +5 -0
- package/dist/src/sources/ids.js.map +1 -1
- package/dist/src/sources/params.d.ts +3 -0
- package/dist/src/sources/params.d.ts.map +1 -1
- package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
- package/dist/src/sources/rest/descriptor.js +5 -0
- package/dist/src/sources/rest/descriptor.js.map +1 -1
- package/dist/src/sources/rest/source.d.ts.map +1 -1
- package/dist/src/sources/rest/source.js +15 -0
- package/dist/src/sources/rest/source.js.map +1 -1
- package/dist/src/sources/sigv4.d.ts +5 -3
- package/dist/src/sources/sigv4.d.ts.map +1 -1
- package/dist/src/sources/sigv4.js +6 -4
- package/dist/src/sources/sigv4.js.map +1 -1
- package/dist/src/sources/sparql/descriptor.d.ts +10 -0
- package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
- package/dist/src/sources/sparql/descriptor.js +64 -0
- package/dist/src/sources/sparql/descriptor.js.map +1 -0
- package/dist/src/sources/sparql/index.d.ts +28 -0
- package/dist/src/sources/sparql/index.d.ts.map +1 -0
- package/dist/src/sources/sparql/index.js +314 -0
- package/dist/src/sources/sparql/index.js.map +1 -0
- package/dist/src/sources/sparql/ntriples.d.ts +69 -0
- package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
- package/dist/src/sources/sparql/ntriples.js +180 -0
- package/dist/src/sources/sparql/ntriples.js.map +1 -0
- package/dist/src/sources/sparql/params.d.ts +27 -0
- package/dist/src/sources/sparql/params.d.ts.map +1 -0
- package/dist/src/sources/sparql/params.js +5 -0
- package/dist/src/sources/sparql/params.js.map +1 -0
- package/dist/src/sources/sparql/query.d.ts +72 -0
- package/dist/src/sources/sparql/query.d.ts.map +1 -0
- package/dist/src/sources/sparql/query.js +113 -0
- package/dist/src/sources/sparql/query.js.map +1 -0
- package/dist/src/sources/types.d.ts +31 -0
- package/dist/src/sources/types.d.ts.map +1 -1
- package/dist/src/styles/annotations.d.ts +61 -5
- package/dist/src/styles/annotations.d.ts.map +1 -1
- package/dist/src/styles/annotations.js +130 -22
- package/dist/src/styles/annotations.js.map +1 -1
- package/dist/src/styles/canon/bends.d.ts +46 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -1
- package/dist/src/styles/canon/bends.js +123 -0
- package/dist/src/styles/canon/bends.js.map +1 -1
- package/dist/src/styles/canon/color-tables.d.ts +6 -1
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
- package/dist/src/styles/canon/color-tables.js +10 -4
- package/dist/src/styles/canon/color-tables.js.map +1 -1
- package/dist/src/styles/canon/color.d.ts +3 -1
- package/dist/src/styles/canon/color.d.ts.map +1 -1
- package/dist/src/styles/canon/color.js +103 -3
- package/dist/src/styles/canon/color.js.map +1 -1
- package/dist/src/styles/canon/enums.d.ts +2 -2
- package/dist/src/styles/canon/enums.d.ts.map +1 -1
- package/dist/src/styles/canon/enums.js +81 -7
- package/dist/src/styles/canon/enums.js.map +1 -1
- package/dist/src/styles/canon/graphviz.d.ts +12 -3
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
- package/dist/src/styles/canon/graphviz.js +57 -9
- package/dist/src/styles/canon/graphviz.js.map +1 -1
- package/dist/src/styles/canon/number.d.ts +8 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -1
- package/dist/src/styles/canon/number.js +18 -0
- package/dist/src/styles/canon/number.js.map +1 -1
- package/dist/src/styles/canon/text.d.ts +29 -2
- package/dist/src/styles/canon/text.d.ts.map +1 -1
- package/dist/src/styles/canon/text.js +156 -16
- package/dist/src/styles/canon/text.js.map +1 -1
- package/dist/src/styles/codes.d.ts +2 -0
- package/dist/src/styles/codes.d.ts.map +1 -1
- package/dist/src/styles/codes.js +2 -0
- package/dist/src/styles/codes.js.map +1 -1
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
- package/dist/src/styles/cyjs/cascade.js +1015 -79
- package/dist/src/styles/cyjs/cascade.js.map +1 -1
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
- package/dist/src/styles/cyjs/defaults-table.js +3 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
- package/dist/src/styles/cyjs/emit.js +202 -9
- package/dist/src/styles/cyjs/emit.js.map +1 -1
- package/dist/src/styles/cyjs/face.d.ts +20 -0
- package/dist/src/styles/cyjs/face.d.ts.map +1 -0
- package/dist/src/styles/cyjs/face.js +332 -0
- package/dist/src/styles/cyjs/face.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +44 -1
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
- package/dist/src/styles/cyjs/mappers.js +461 -26
- package/dist/src/styles/cyjs/mappers.js.map +1 -1
- package/dist/src/styles/cyjs/routes.d.ts +53 -0
- package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
- package/dist/src/styles/cyjs/routes.js +360 -0
- package/dist/src/styles/cyjs/routes.js.map +1 -0
- package/dist/src/styles/cytoscape/charts.d.ts +23 -0
- package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/charts.js +560 -0
- package/dist/src/styles/cytoscape/charts.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/emit.js +156 -48
- package/dist/src/styles/cytoscape/emit.js.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.d.ts +91 -3
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.js +387 -77
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
- package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/mappings.js +92 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -1
- package/dist/src/styles/cytoscape/resolve.d.ts +42 -2
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/resolve.js +623 -17
- package/dist/src/styles/cytoscape/resolve.js.map +1 -1
- package/dist/src/styles/defaults.d.ts +46 -26
- package/dist/src/styles/defaults.d.ts.map +1 -1
- package/dist/src/styles/defaults.js +308 -71
- package/dist/src/styles/defaults.js.map +1 -1
- package/dist/src/styles/index.d.ts +4 -3
- package/dist/src/styles/index.d.ts.map +1 -1
- package/dist/src/styles/index.js +3 -2
- package/dist/src/styles/index.js.map +1 -1
- package/dist/src/styles/internal.d.ts +1 -0
- package/dist/src/styles/internal.d.ts.map +1 -1
- package/dist/src/styles/internal.js +1 -0
- package/dist/src/styles/internal.js.map +1 -1
- package/dist/src/styles/io/generic.d.ts.map +1 -1
- package/dist/src/styles/io/generic.js +56 -16
- package/dist/src/styles/io/generic.js.map +1 -1
- package/dist/src/styles/io/round-trip.d.ts +56 -0
- package/dist/src/styles/io/round-trip.d.ts.map +1 -0
- package/dist/src/styles/io/round-trip.js +138 -0
- package/dist/src/styles/io/round-trip.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -1
- package/dist/src/styles/io/writer.js +6 -1
- package/dist/src/styles/io/writer.js.map +1 -1
- package/dist/src/styles/notes.d.ts.map +1 -1
- package/dist/src/styles/notes.js +1 -0
- package/dist/src/styles/notes.js.map +1 -1
- package/dist/src/styles/plan/features.d.ts +1 -1
- package/dist/src/styles/plan/features.d.ts.map +1 -1
- package/dist/src/styles/plan/features.js +22 -2
- package/dist/src/styles/plan/features.js.map +1 -1
- package/dist/src/styles/plan/index.d.ts +1 -1
- package/dist/src/styles/plan/index.d.ts.map +1 -1
- package/dist/src/styles/plan/index.js +1 -1
- package/dist/src/styles/plan/index.js.map +1 -1
- package/dist/src/styles/plan/plan.d.ts.map +1 -1
- package/dist/src/styles/plan/plan.js +61 -4
- package/dist/src/styles/plan/plan.js.map +1 -1
- package/dist/src/styles/plan/resolve.d.ts +11 -0
- package/dist/src/styles/plan/resolve.d.ts.map +1 -1
- package/dist/src/styles/plan/resolve.js +40 -4
- package/dist/src/styles/plan/resolve.js.map +1 -1
- package/dist/src/styles/slots.d.ts +14 -0
- package/dist/src/styles/slots.d.ts.map +1 -0
- package/dist/src/styles/slots.js +20 -0
- package/dist/src/styles/slots.js.map +1 -0
- package/dist/src/styles/types.d.ts +622 -6
- package/dist/src/styles/types.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.d.ts +3 -2
- package/dist/src/styles/vocabulary.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.js +203 -0
- package/dist/src/styles/vocabulary.js.map +1 -1
- package/dist/styles.js +30 -239
- package/dist/styles.js.map +1 -1
- package/dist/xgmml.js +3 -3
- package/package.json +27 -7
- package/src/formats/cx/importer.ts +6 -1
- package/src/formats/cx/styles.ts +143 -9
- package/src/formats/cx2/importer.ts +1 -0
- package/src/formats/cx2/styles.ts +3 -1
- package/src/formats/cys/importer.ts +1 -0
- package/src/formats/cys/styles.ts +27 -5
- package/src/formats/dot/drawing.ts +799 -0
- package/src/formats/dot/importer.ts +120 -35
- package/src/formats/dot/label-places.ts +228 -0
- package/src/formats/dot/record.ts +336 -0
- package/src/formats/dot/styles.ts +1654 -153
- package/src/formats/gexf/dialog-metrics.ts +61 -0
- package/src/formats/gexf/importer.ts +50 -5
- package/src/formats/gexf/preview.ts +217 -0
- package/src/formats/gexf/schema.ts +2 -1
- package/src/formats/gexf/styles.ts +1099 -245
- package/src/formats/gml/importer.ts +291 -76
- package/src/formats/gml/index.ts +1 -1
- package/src/formats/gml/positions.ts +29 -7
- package/src/formats/gml/styles.ts +851 -109
- package/src/formats/graphml/styles-plain.ts +6 -15
- package/src/formats/graphml/styles-yed.ts +762 -173
- package/src/formats/graphml/styles-yfiles3.ts +485 -63
- package/src/formats/graphml/yfiles.ts +19 -6
- package/src/formats/json/dialect.ts +41 -5
- package/src/formats/json/importer.ts +59 -7
- package/src/formats/json/index.ts +1 -0
- package/src/formats/json/positions.ts +22 -5
- package/src/formats/json/styles.ts +2041 -185
- package/src/formats/pajek/draw.ts +458 -0
- package/src/formats/pajek/exporter.ts +81 -49
- package/src/formats/pajek/importer.ts +278 -103
- package/src/formats/pajek/index.ts +1 -0
- package/src/formats/pajek/styles.ts +1381 -133
- package/src/formats/pajek/syntax.ts +27 -2
- package/src/formats/xgmml/emit.ts +73 -5
- package/src/formats/xgmml/styles.ts +330 -71
- package/src/index.ts +5 -1
- package/src/positions/convert.ts +12 -1
- package/src/positions/extract.ts +55 -1
- package/src/positions/index.ts +1 -0
- package/src/positions/types.ts +60 -0
- package/src/sources/builtins.ts +8 -1
- package/src/sources/context.ts +1 -0
- package/src/sources/cypher/descriptor.ts +7 -1
- package/src/sources/cypher/index.ts +148 -18
- package/src/sources/cypher/params.ts +1 -1
- package/src/sources/cypher/query-builder.ts +33 -0
- package/src/sources/ids.ts +6 -0
- package/src/sources/params.ts +3 -0
- package/src/sources/rest/descriptor.ts +5 -0
- package/src/sources/rest/source.ts +16 -0
- package/src/sources/sigv4.ts +6 -4
- package/src/sources/sparql/descriptor.ts +67 -0
- package/src/sources/sparql/index.ts +356 -0
- package/src/sources/sparql/ntriples.ts +219 -0
- package/src/sources/sparql/params.ts +28 -0
- package/src/sources/sparql/query.ts +162 -0
- package/src/sources/types.ts +35 -0
- package/src/styles/annotations.ts +201 -27
- package/src/styles/canon/bends.ts +137 -0
- package/src/styles/canon/color-tables.ts +10 -4
- package/src/styles/canon/color.ts +105 -3
- package/src/styles/canon/enums.ts +98 -8
- package/src/styles/canon/graphviz.ts +71 -10
- package/src/styles/canon/number.ts +19 -0
- package/src/styles/canon/text.ts +187 -16
- package/src/styles/codes.ts +2 -0
- package/src/styles/cyjs/cascade.ts +1160 -84
- package/src/styles/cyjs/defaults-table.ts +3 -0
- package/src/styles/cyjs/emit.ts +233 -13
- package/src/styles/cyjs/face.ts +372 -0
- package/src/styles/cyjs/mappers.ts +492 -27
- package/src/styles/cyjs/routes.ts +432 -0
- package/src/styles/cytoscape/charts.ts +684 -0
- package/src/styles/cytoscape/emit.ts +170 -48
- package/src/styles/cytoscape/lexicon.ts +431 -78
- package/src/styles/cytoscape/mappings.ts +108 -0
- package/src/styles/cytoscape/resolve.ts +741 -17
- package/src/styles/defaults.ts +417 -108
- package/src/styles/index.ts +5 -0
- package/src/styles/internal.ts +1 -0
- package/src/styles/io/generic.ts +79 -23
- package/src/styles/io/round-trip.ts +202 -0
- package/src/styles/io/writer.ts +6 -1
- package/src/styles/notes.ts +1 -0
- package/src/styles/plan/features.ts +23 -2
- package/src/styles/plan/index.ts +1 -1
- package/src/styles/plan/plan.ts +69 -5
- package/src/styles/plan/resolve.ts +47 -4
- package/src/styles/slots.ts +25 -0
- package/src/styles/types.ts +633 -5
- package/src/styles/vocabulary.ts +211 -2
- package/dist/chunks/block-Cu22ewuS.js.map +0 -1
- package/dist/chunks/choose-Cdx6Enl2.js +0 -57
- package/dist/chunks/choose-Cdx6Enl2.js.map +0 -1
- package/dist/chunks/codes-CV_Bhcyi.js.map +0 -1
- package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
- package/dist/chunks/credentials-BiQsnMTb.js.map +0 -1
- package/dist/chunks/descriptor-BJ-W0Jd-.js.map +0 -1
- package/dist/chunks/emit-CD8xnY8s.js.map +0 -1
- package/dist/chunks/export-CZ7VRm4I.js.map +0 -1
- package/dist/chunks/exporter-bxxjOrDZ.js.map +0 -1
- package/dist/chunks/format-BMS-1Nxb.js +0 -64
- package/dist/chunks/format-BMS-1Nxb.js.map +0 -1
- package/dist/chunks/generic-CP6YD34u.js.map +0 -1
- package/dist/chunks/importer-B87_fmVx.js.map +0 -1
- package/dist/chunks/importer-CB_zV5_L.js.map +0 -1
- package/dist/chunks/importer-CVT-JyDE.js.map +0 -1
- package/dist/chunks/importer-Cyy6UseH.js.map +0 -1
- package/dist/chunks/importer-DPZDN40-.js.map +0 -1
- package/dist/chunks/importer-e3huMZbm.js.map +0 -1
- package/dist/chunks/lexicon-u2SI5xcx.js.map +0 -1
- package/dist/chunks/sigv4-LkAzsLAu.js.map +0 -1
- package/dist/chunks/styles-CaABMoO1.js.map +0 -1
- package/dist/chunks/styles-P_gmFAOi.js +0 -770
- package/dist/chunks/styles-P_gmFAOi.js.map +0 -1
- package/dist/chunks/styles-yed-Cs1nmrjn.js.map +0 -1
- package/dist/chunks/writer-DvHTl36J.js +0 -449
- package/dist/chunks/writer-DvHTl36J.js.map +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* yFiles 3 styles (yFiles for HTML, yEd Live): the per-element style objects of the `NodeStyle`, `EdgeStyle`,
|
|
3
|
-
* `NodeLabels`, `EdgeLabels` and `
|
|
3
|
+
* `NodeLabels`, `EdgeLabels`, `NodeGeometry` and `EdgeGeometry` keys, inline or by reference to the graph's `SharedData`, read into
|
|
4
4
|
* the neutral style vocabulary. References are resolved by value with a depth limit; a reference that is circular
|
|
5
5
|
* or deeper than the limit is one `W_STYLE_REFERENCE_CYCLE` note, never a hang.
|
|
6
6
|
*/
|
|
7
|
+
import { canonBends, canonNodeOffsets } from "../../styles/canon/bends.js";
|
|
7
8
|
import { canonColor, colorOpacity } from "../../styles/canon/color.js";
|
|
8
9
|
import { canonEnum } from "../../styles/canon/enums.js";
|
|
9
10
|
import { canonNumber } from "../../styles/canon/number.js";
|
|
@@ -11,7 +12,7 @@ import { MAX_STYLE_VALUE_LENGTH, noteAt } from "../../styles/canon/site.js";
|
|
|
11
12
|
import { canonText } from "../../styles/canon/text.js";
|
|
12
13
|
import { STYLE_ISSUE } from "../../styles/codes.js";
|
|
13
14
|
import { plainCell } from "../../styles/plan/resolve.js";
|
|
14
|
-
import { isTree, localOf, treeAttr, treeChild, treeChildren, treeText, valueColumns, } from "./styles-yed.js";
|
|
15
|
+
import { configurationOutline, isTree, localOf, treeAttr, treeChild, treeChildren, treeText, valueColumns, } from "./styles-yed.js";
|
|
15
16
|
/** How deep a chain of shared references is followed. */
|
|
16
17
|
const MAX_REFERENCE_DEPTH = 16;
|
|
17
18
|
/** `{x:Null}`: a property explicitly set to nothing. */
|
|
@@ -20,7 +21,14 @@ const NULL = Symbol("x:Null");
|
|
|
20
21
|
const REFERENCE = /^\{\s*[\w.-]*:?GraphMLReference\s+([^\s}]+)\s*\}$/;
|
|
21
22
|
/** A `{x:Null}` markup extension. */
|
|
22
23
|
const NULL_MARKUP = /^\{\s*[\w.-]*:?Null\s*\}$/;
|
|
23
|
-
const KINDS = new Set([
|
|
24
|
+
const KINDS = new Set([
|
|
25
|
+
"NodeStyle",
|
|
26
|
+
"EdgeStyle",
|
|
27
|
+
"NodeLabels",
|
|
28
|
+
"EdgeLabels",
|
|
29
|
+
"NodeGeometry",
|
|
30
|
+
"EdgeGeometry",
|
|
31
|
+
]);
|
|
24
32
|
/**
|
|
25
33
|
* The kind of a yFiles 3 column, from the `attr.uri` the importer keeps as its origin type.
|
|
26
34
|
* @param type - the origin type
|
|
@@ -291,14 +299,136 @@ function putPaint(pt, property, opacity, put, at) {
|
|
|
291
299
|
put(opacity, alpha);
|
|
292
300
|
}
|
|
293
301
|
}
|
|
302
|
+
/** yFiles' black, the documented default color of the 2.6 Bevel, ShinyPlate and Panel styles. */
|
|
303
|
+
const BLACK = "#FF000000";
|
|
304
|
+
/** The demos' FlowchartNodeStyle defaults (yfiles-for-html-demos v2.6, FlowchartStyle.ts): fill rgb(183, 201, 227). */
|
|
305
|
+
const FLOWCHART_FILL = "#FFB7C9E3";
|
|
306
|
+
/**
|
|
307
|
+
* yFiles for HTML 2.6 ShapeNodeShape names the neutral shapes do not spell, as the shape yFiles documents them as:
|
|
308
|
+
* SHEARED_RECTANGLE sheared to the right and SHEARED_RECTANGLE2 to the left, TRAPEZ smaller at the bottom and TRAPEZ2
|
|
309
|
+
* at the top, TRIANGLE2 pointing to the bottom, FAT_ARROW an arrow pointing to the right and FAT_ARROW2 to the left
|
|
310
|
+
* (ShapeNodeShape API docs). A mirrored or turned shape is the polygon of its corners (`x,y` fractions of the half
|
|
311
|
+
* sizes, y up). STAR5_UP is a star; PILL, a stadium, is a rectangle with half-circle ends.
|
|
312
|
+
*/
|
|
313
|
+
const SHAPES_26 = new Map([
|
|
314
|
+
["sheared-rectangle", { shape: "parallelogram" }],
|
|
315
|
+
["sheared-rectangle2", { shape: "polygon", points: "-0.5,-1 1,-1 0.5,1 -1,1" }],
|
|
316
|
+
["trapez", { shape: "polygon", points: "-0.5,-1 0.5,-1 1,1 -1,1" }],
|
|
317
|
+
["trapez2", { shape: "trapezoid" }],
|
|
318
|
+
["star5-up", { shape: "star" }],
|
|
319
|
+
["triangle2", { shape: "polygon", points: "-1,1 0,-1 1,1" }],
|
|
320
|
+
["fat-arrow", { shape: "polygon", points: "-1,-1 0.6,-1 1,0 0.6,1 -1,1 -0.6,0" }],
|
|
321
|
+
["fat-arrow2", { shape: "polygon", points: "-0.6,-1 1,-1 0.6,0 1,1 -0.6,1 -1,0" }],
|
|
322
|
+
["pill", { shape: "round-rectangle" }],
|
|
323
|
+
]);
|
|
324
|
+
/** ShapeNodeStyle's ROUND_RECTANGLE corner size (ShapeNodeShape API docs: "The corner size is 10"). */
|
|
325
|
+
const ROUND_RECTANGLE_CORNER = 10;
|
|
326
|
+
/**
|
|
327
|
+
* A rounded box's corner: a radius of 0 is a plain box.
|
|
328
|
+
* @param radius - the style's `radius` attribute
|
|
329
|
+
* @param fallback - the style's documented default radius
|
|
330
|
+
* @param put - receives the values
|
|
331
|
+
* @param at - the sites
|
|
332
|
+
*/
|
|
333
|
+
function putRounded(radius, fallback, put, at) {
|
|
334
|
+
const r = radius === undefined ? fallback : canonNumber(radius, at("cornerRadius"));
|
|
335
|
+
if (r === 0) {
|
|
336
|
+
put("shape", "rectangle");
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
put("shape", "round-rectangle");
|
|
340
|
+
put("cornerRadius", r);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Reads the yFiles for HTML 2.6 node styles yEd Live wrote before yFiles 3, and the demos' FlowchartNodeStyle:
|
|
344
|
+
* BevelNodeStyle and PanelNodeStyle (a `color` fill, no outline), ShinyPlateNodeStyle (an outline only where `stroke`
|
|
345
|
+
* is set) and FlowchartNodeStyle (its `type`'s outline, drawn as yEd's flowchart palette draws the same type).
|
|
346
|
+
* @param refs - the references
|
|
347
|
+
* @param style - the style
|
|
348
|
+
* @param put - receives the values
|
|
349
|
+
* @param at - the sites
|
|
350
|
+
* @returns true when the style is one of these
|
|
351
|
+
*/
|
|
352
|
+
function readStyle26(refs, style, put, at) {
|
|
353
|
+
const fill = (v) => {
|
|
354
|
+
const gradient = () => {
|
|
355
|
+
noteAt(at("fill"), STYLE_ISSUE.GRADIENT, style.tag);
|
|
356
|
+
};
|
|
357
|
+
putPaint(paintOf(refs, v, gradient), "fill", "fillOpacity", put, at);
|
|
358
|
+
};
|
|
359
|
+
switch (style.tag) {
|
|
360
|
+
case "BevelNodeStyle":
|
|
361
|
+
fill(prop(style, "color") ?? BLACK);
|
|
362
|
+
put("borderWidth", 0);
|
|
363
|
+
putRounded(treeAttr(style.e, "radius"), 10, put, at);
|
|
364
|
+
return true;
|
|
365
|
+
case "PanelNodeStyle":
|
|
366
|
+
fill(prop(style, "color") ?? BLACK);
|
|
367
|
+
put("borderWidth", 0);
|
|
368
|
+
put("shape", "rectangle");
|
|
369
|
+
return true;
|
|
370
|
+
case "ShinyPlateNodeStyle": {
|
|
371
|
+
fill(prop(style, "fill") ?? BLACK);
|
|
372
|
+
const stroke = prop(style, "stroke");
|
|
373
|
+
if (stroke === undefined) {
|
|
374
|
+
put("borderWidth", 0);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
putStroke(strokeOf(refs, stroke), put, at);
|
|
378
|
+
}
|
|
379
|
+
putRounded(treeAttr(style.e, "radius"), 5, put, at);
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
case "FlowchartNodeStyle": {
|
|
383
|
+
fill(prop(style, "fill") ?? FLOWCHART_FILL);
|
|
384
|
+
const type = treeAttr(style.e, "type") ?? "";
|
|
385
|
+
// an annotation's box has no outline (its bracket is not drawn); a style without a type draws the same
|
|
386
|
+
// box, outlined
|
|
387
|
+
if (type === "annotation") {
|
|
388
|
+
put("borderWidth", 0);
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
putStroke(strokeOf(refs, prop(style, "stroke") ?? BLACK), put, at);
|
|
392
|
+
}
|
|
393
|
+
const outline = type === "" || type === "annotation" ? null : configurationOutline(`flowchart.${type}`);
|
|
394
|
+
if (outline === null && type !== "" && type !== "annotation") {
|
|
395
|
+
noteAt(at("shape"), STYLE_ISSUE.UNKNOWN_VALUE, type.slice(0, MAX_STYLE_VALUE_LENGTH));
|
|
396
|
+
}
|
|
397
|
+
put("shape", outline?.shape ?? "rectangle");
|
|
398
|
+
if (outline?.points !== undefined) {
|
|
399
|
+
put("shapePoints", outline.points);
|
|
400
|
+
}
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
default:
|
|
404
|
+
return false;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Writes a stroke's color, width and line style, or no outline for `{x:Null}`.
|
|
409
|
+
* @param stroke - the stroke
|
|
410
|
+
* @param put - receives the values
|
|
411
|
+
* @param at - the sites
|
|
412
|
+
*/
|
|
413
|
+
function putStroke(stroke, put, at) {
|
|
414
|
+
if (stroke === NULL) {
|
|
415
|
+
put("borderWidth", 0);
|
|
416
|
+
}
|
|
417
|
+
else if (stroke !== null) {
|
|
418
|
+
putPaint(stroke.color, "borderColor", "borderOpacity", put, at);
|
|
419
|
+
put("borderWidth", canonNumber(stroke.width, at("borderWidth")));
|
|
420
|
+
put("borderStyle", canonEnum("borderStyle", stroke.line, "yfiles3", at("borderStyle")));
|
|
421
|
+
}
|
|
422
|
+
}
|
|
294
423
|
/**
|
|
295
424
|
* Reads a node style.
|
|
296
425
|
* @param refs - the references
|
|
297
426
|
* @param data - the `<data>` content of the NodeStyle key
|
|
298
427
|
* @param put - receives the values
|
|
299
428
|
* @param at - the sites
|
|
429
|
+
* @param size - the node's size, for a PILL's half-circle ends
|
|
300
430
|
*/
|
|
301
|
-
function readNodeStyle(refs, data, put, at) {
|
|
431
|
+
function readNodeStyle(refs, data, put, at, size) {
|
|
302
432
|
const st = unwrapped(refs, refs.first(data));
|
|
303
433
|
if (st === null || typeof st !== "object") {
|
|
304
434
|
if (data !== null && data !== undefined && data !== "") {
|
|
@@ -307,23 +437,39 @@ function readNodeStyle(refs, data, put, at) {
|
|
|
307
437
|
return;
|
|
308
438
|
}
|
|
309
439
|
const style = st;
|
|
440
|
+
if (readStyle26(refs, style, put, at)) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
310
443
|
putPaint(paintOf(refs, prop(style, "fill"), () => {
|
|
311
444
|
noteAt(at("fill"), STYLE_ISSUE.GRADIENT, style.tag);
|
|
312
445
|
}), "fill", "fillOpacity", put, at);
|
|
313
|
-
|
|
314
|
-
if (stroke === NULL) {
|
|
315
|
-
put("borderWidth", 0);
|
|
316
|
-
}
|
|
317
|
-
else if (stroke !== null) {
|
|
318
|
-
putPaint(stroke.color, "borderColor", null, put, at);
|
|
319
|
-
put("borderWidth", canonNumber(stroke.width, at("borderWidth")));
|
|
320
|
-
put("borderStyle", canonEnum("borderStyle", stroke.line, "yfiles3", at("borderStyle")));
|
|
321
|
-
}
|
|
446
|
+
putStroke(strokeOf(refs, prop(style, "stroke")), put, at);
|
|
322
447
|
put("shape", nodeShapeOf(style, at));
|
|
448
|
+
const points = SHAPES_26.get(shapeKey(treeAttr(style.e, "shape")) ?? "")?.points;
|
|
449
|
+
if (points !== undefined) {
|
|
450
|
+
put("shapePoints", points);
|
|
451
|
+
}
|
|
323
452
|
const cornerSize = style.tag === "RectangleNodeStyle" ? treeAttr(style.e, "cornerSize") : undefined;
|
|
324
453
|
if (cornerSize !== undefined) {
|
|
325
454
|
put("cornerRadius", canonNumber(cornerSize, at("cornerRadius")));
|
|
326
455
|
}
|
|
456
|
+
const shape = style.tag === "ShapeNodeStyle" ? shapeKey(treeAttr(style.e, "shape")) : null;
|
|
457
|
+
if (shape === "round-rectangle") {
|
|
458
|
+
put("cornerRadius", ROUND_RECTANGLE_CORNER);
|
|
459
|
+
}
|
|
460
|
+
else if (shape === "pill" && size !== null) {
|
|
461
|
+
put("cornerRadius", Math.min(size.width, size.height) / 2);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* A ShapeNodeStyle `shape` as a lookup key: lowercase, underscores as hyphens.
|
|
466
|
+
* @param shape - the attribute
|
|
467
|
+
* @returns the key, or null
|
|
468
|
+
*/
|
|
469
|
+
function shapeKey(shape) {
|
|
470
|
+
return shape === undefined
|
|
471
|
+
? null
|
|
472
|
+
: shape.slice(0, MAX_STYLE_VALUE_LENGTH).trim().toLowerCase().replaceAll("_", "-");
|
|
327
473
|
}
|
|
328
474
|
/**
|
|
329
475
|
* The style a collapsible group's decorators wrap; a decorator that wraps itself is a cycle.
|
|
@@ -353,7 +499,7 @@ function unwrapped(refs, first) {
|
|
|
353
499
|
function nodeShapeOf(style, at) {
|
|
354
500
|
const shape = treeAttr(style.e, "shape");
|
|
355
501
|
if (shape !== undefined) {
|
|
356
|
-
return canonEnum("shape", shape, "yfiles3", at("shape"));
|
|
502
|
+
return SHAPES_26.get(shapeKey(shape) ?? "")?.shape ?? canonEnum("shape", shape, "yfiles3", at("shape"));
|
|
357
503
|
}
|
|
358
504
|
if (style.tag === "RectangleNodeStyle") {
|
|
359
505
|
return treeAttr(style.e, "cornerSize") === undefined ? "rectangle" : "round-rectangle";
|
|
@@ -386,20 +532,187 @@ function readEdgeStyle(refs, data, put, at) {
|
|
|
386
532
|
put("lineStyle", canonEnum("lineStyle", stroke.line, "yfiles3", at("lineStyle")));
|
|
387
533
|
}
|
|
388
534
|
for (const end of ["source", "target"]) {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
535
|
+
readEdgeArrow(refs, refs.deref(prop(st, `${end}Arrow`)), end, put, at);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Reads one end's arrow of an edge style: its type, and for an arrow element its color, drawn hollow in its
|
|
540
|
+
* stroke's color when its fill is `{x:Null}`.
|
|
541
|
+
* @param refs - the references
|
|
542
|
+
* @param a - the dereferenced `sourceArrow` or `targetArrow` value
|
|
543
|
+
* @param end - which end
|
|
544
|
+
* @param put - receives the values
|
|
545
|
+
* @param at - the sites
|
|
546
|
+
*/
|
|
547
|
+
function readEdgeArrow(refs, a, end, put, at) {
|
|
548
|
+
const property = `${end}Arrow`;
|
|
549
|
+
let type = null;
|
|
550
|
+
let hollow = false;
|
|
551
|
+
if (a !== null && a !== NULL && typeof a === "object") {
|
|
552
|
+
type = treeAttr(a.e, "type") ?? "DEFAULT";
|
|
553
|
+
const fill = paintOf(refs, prop(a, "fill"), null);
|
|
554
|
+
// a `{x:Null}` fill draws the arrow's outline alone, in its stroke's color
|
|
555
|
+
const open = fill === NULL ? strokeOf(refs, prop(a, "stroke")) : null;
|
|
556
|
+
hollow = open !== null && open !== NULL;
|
|
557
|
+
putPaint(open !== null && open !== NULL ? open.color : fill, `${end}ArrowColor`, null, put, at);
|
|
558
|
+
}
|
|
559
|
+
else if (typeof a === "string") {
|
|
560
|
+
type = a;
|
|
561
|
+
}
|
|
562
|
+
if (type !== null) {
|
|
563
|
+
const arrow = canonEnum("arrow", RENAMED_ARROWS.get(type.toUpperCase()) ?? type, "yfiles3", at(property));
|
|
564
|
+
put(property, hollow ? (HOLLOW_ARROWS.get(arrow ?? "") ?? arrow) : arrow);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* yFiles 3.0 renamed 2.6's DEFAULT arrow to STEALTH and CIRCLE to ELLIPSE
|
|
569
|
+
* (https://docs.yfiles.com/yfiles-html/api/ArrowType/); each is read as its 2.6 name is.
|
|
570
|
+
*/
|
|
571
|
+
const RENAMED_ARROWS = new Map([
|
|
572
|
+
["DEFAULT", "triangle"],
|
|
573
|
+
["STEALTH", "triangle"],
|
|
574
|
+
["ELLIPSE", "circle"],
|
|
575
|
+
]);
|
|
576
|
+
/** The filled arrows whose `{x:Null}` fill draws them as their open outline. */
|
|
577
|
+
const HOLLOW_ARROWS = new Map([
|
|
578
|
+
["triangle", "triangle-open"],
|
|
579
|
+
["diamond", "diamond-open"],
|
|
580
|
+
["circle", "circle-open"],
|
|
581
|
+
]);
|
|
582
|
+
/**
|
|
583
|
+
* Reads an edge's route from its EdgeGeometry: the `y:Bend` locations, relative to its two nodes' centers (a
|
|
584
|
+
* self-loop's to its node's size), and, for a PolylineEdgeStyle with a `smoothingLength` above 0, its rounded bends.
|
|
585
|
+
* @param refs - the references
|
|
586
|
+
* @param geometry - the `<data>` content of the EdgeGeometry key
|
|
587
|
+
* @param style - the `<data>` content of the EdgeStyle key
|
|
588
|
+
* @param ends - the source and target nodes' boxes (center x, y, width, height)
|
|
589
|
+
* @param put - receives the values
|
|
590
|
+
*/
|
|
591
|
+
function readEdgeGeometry(refs, geometry, style, ends, put) {
|
|
592
|
+
const points = treeChildren(treeChild(geometry, "List"), "Bend").map((b) => {
|
|
593
|
+
const [x, y] = (treeAttr(b, "Location") ?? "").split(",").map(Number);
|
|
594
|
+
return [x, y];
|
|
595
|
+
});
|
|
596
|
+
const [s, t, loop] = ends;
|
|
597
|
+
const bends = loop
|
|
598
|
+
? canonNodeOffsets([s[0], s[1]], [s[2], s[3]], points, true)
|
|
599
|
+
: canonBends([s[0], s[1]], [t[0], t[1]], points, true);
|
|
600
|
+
put("bends", bends);
|
|
601
|
+
const st = refs.first(style);
|
|
602
|
+
const smoothing = st === null ? undefined : treeAttr(st.e, "smoothingLength");
|
|
603
|
+
if (bends !== null && st?.tag === "PolylineEdgeStyle" && Number(smoothing) > 0) {
|
|
604
|
+
put("curved", true);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/** yFiles' label positions (2.6 compass names and yFiles 3 side names, lowercase without `_`) as neutral sides. */
|
|
608
|
+
const SIDES = new Map([
|
|
609
|
+
["north", "top"],
|
|
610
|
+
["south", "bottom"],
|
|
611
|
+
["east", "right"],
|
|
612
|
+
["west", "left"],
|
|
613
|
+
["northeast", "top-right"],
|
|
614
|
+
["northwest", "top-left"],
|
|
615
|
+
["southeast", "bottom-right"],
|
|
616
|
+
["southwest", "bottom-left"],
|
|
617
|
+
["top", "top"],
|
|
618
|
+
["bottom", "bottom"],
|
|
619
|
+
["right", "right"],
|
|
620
|
+
["left", "left"],
|
|
621
|
+
["topright", "top-right"],
|
|
622
|
+
["topleft", "top-left"],
|
|
623
|
+
["bottomright", "bottom-right"],
|
|
624
|
+
["bottomleft", "bottom-left"],
|
|
625
|
+
]);
|
|
626
|
+
/**
|
|
627
|
+
* The node label models by their parameter's local name: whether the label lies outside the node (exterior,
|
|
628
|
+
* sandwich) or inside it (interior, stretch).
|
|
629
|
+
*/
|
|
630
|
+
const NODE_LABEL_MODELS = new Map([
|
|
631
|
+
["ExteriorLabelModelParameter", "outside"],
|
|
632
|
+
["ExteriorNodeLabelModelParameter", "outside"],
|
|
633
|
+
["SandwichParameter", "outside"],
|
|
634
|
+
["SandwichLabelModelParameter", "outside"],
|
|
635
|
+
["InteriorLabelModelParameter", "inside"],
|
|
636
|
+
["InteriorNodeLabelModelParameter", "inside"],
|
|
637
|
+
["InteriorStretchLabelModelParameter", "inside"],
|
|
638
|
+
["StretchNodeLabelModelParameter", "inside"],
|
|
639
|
+
]);
|
|
640
|
+
/** A `{x:Static y:SomeLabelModel.Position}` markup extension: the model's local name and the member. */
|
|
641
|
+
const STATIC_PARAMETER = /^\{\s*[\w.-]*:?Static\s+(?:[\w.-]+:)?(\w+)\.(\w+)\s*\}$/;
|
|
642
|
+
/**
|
|
643
|
+
* A label's layout parameter, as a parameter element's local name and the element: the `Label.LayoutParameter`
|
|
644
|
+
* child, a `LayoutParameter` attribute naming a shared one, or a model's constant (`{x:Static
|
|
645
|
+
* y:InteriorStretchLabelModel.North}`), read as that model's parameter with that `Position`.
|
|
646
|
+
* @param refs - the references
|
|
647
|
+
* @param label - the `y:Label` element
|
|
648
|
+
* @returns the parameter, or null
|
|
649
|
+
*/
|
|
650
|
+
function layoutParameter(refs, label) {
|
|
651
|
+
const attr = treeAttr(label, "LayoutParameter");
|
|
652
|
+
if (attr !== undefined) {
|
|
653
|
+
const m = STATIC_PARAMETER.exec(attr.slice(0, MAX_STYLE_VALUE_LENGTH).trim());
|
|
654
|
+
if (m !== null) {
|
|
655
|
+
return { tag: `${m[1]}Parameter`, e: { "@_Position": m[2] } };
|
|
401
656
|
}
|
|
402
657
|
}
|
|
658
|
+
const p = refs.deref(attr ?? treeChild(label, "Label.LayoutParameter"));
|
|
659
|
+
return p === null || p === NULL || typeof p !== "object" ? null : p;
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Where yFiles draws a node label, from its layout parameter's model and `Position`: outside the node for the
|
|
663
|
+
* exterior and sandwich models, inside it (`inside-*`) for the interior and stretch models, and the center for a
|
|
664
|
+
* centered position or any other model (the free and ratio-anchored models' offsets have no neutral property).
|
|
665
|
+
* @param refs - the references
|
|
666
|
+
* @param label - the `y:Label` element
|
|
667
|
+
* @returns the position
|
|
668
|
+
*/
|
|
669
|
+
function labelPositionOf(refs, label) {
|
|
670
|
+
const parameter = layoutParameter(refs, label);
|
|
671
|
+
const model = parameter === null ? undefined : NODE_LABEL_MODELS.get(parameter.tag);
|
|
672
|
+
if (parameter === null || model === undefined) {
|
|
673
|
+
return "center";
|
|
674
|
+
}
|
|
675
|
+
const raw = treeAttr(parameter.e, "Position") ?? "";
|
|
676
|
+
const side = SIDES.get(raw.slice(0, MAX_STYLE_VALUE_LENGTH).toLowerCase().replaceAll("_", ""));
|
|
677
|
+
if (side === undefined) {
|
|
678
|
+
return "center";
|
|
679
|
+
}
|
|
680
|
+
return model === "inside" ? `inside-${side}` : side;
|
|
681
|
+
}
|
|
682
|
+
/** yFiles' edge label sides (`SideOfEdge`, and the nine-position model's middle row), as neutral positions. */
|
|
683
|
+
const EDGE_SIDES = new Map([
|
|
684
|
+
["aboveedge", "top"],
|
|
685
|
+
["belowedge", "bottom"],
|
|
686
|
+
["onedge", "center"],
|
|
687
|
+
["centerabove", "top"],
|
|
688
|
+
["centerbelow", "bottom"],
|
|
689
|
+
["centercentered", "center"],
|
|
690
|
+
]);
|
|
691
|
+
/** The edge label models that place a label above, on or below the line, and the attribute that says which. */
|
|
692
|
+
const EDGE_SIDE_ATTRIBUTES = new Map([
|
|
693
|
+
["NinePositionsEdgeLabelModelParameter", "Position"],
|
|
694
|
+
["EdgePathLabelModelParameter", "SideOfEdge"],
|
|
695
|
+
]);
|
|
696
|
+
/**
|
|
697
|
+
* Where yFiles draws an edge label at the middle of its edge, above, on or below the line: the path model's
|
|
698
|
+
* `SideOfEdge` at a ratio of 0.5, and the nine-position model's center row. Other places (the ends, a
|
|
699
|
+
* segment's middle, left or right of the edge's direction, a free offset) give none.
|
|
700
|
+
* @param refs - the references
|
|
701
|
+
* @param label - the `y:Label` element
|
|
702
|
+
* @returns the position, or null
|
|
703
|
+
*/
|
|
704
|
+
function edgeLabelPositionOf(refs, label) {
|
|
705
|
+
const parameter = layoutParameter(refs, label);
|
|
706
|
+
if (parameter === null) {
|
|
707
|
+
return null;
|
|
708
|
+
}
|
|
709
|
+
const ratio = treeAttr(parameter.e, "Ratio");
|
|
710
|
+
if (ratio !== undefined && Number(ratio) !== 0.5) {
|
|
711
|
+
return null;
|
|
712
|
+
}
|
|
713
|
+
const attribute = EDGE_SIDE_ATTRIBUTES.get(parameter.tag);
|
|
714
|
+
const raw = attribute === undefined ? undefined : treeAttr(parameter.e, attribute);
|
|
715
|
+
return raw === undefined ? null : (EDGE_SIDES.get(raw.slice(0, MAX_STYLE_VALUE_LENGTH).toLowerCase()) ?? null);
|
|
403
716
|
}
|
|
404
717
|
/**
|
|
405
718
|
* Reads an element's labels: the first one with text; further ones are noted for the element.
|
|
@@ -432,23 +745,102 @@ function readLabels(refs, data, put, at) {
|
|
|
432
745
|
noteAt(at("label"), STYLE_ISSUE.EXTRA_LABELS, `${String(extra + 1)} labels`);
|
|
433
746
|
}
|
|
434
747
|
put("label", canonText(text, at("label")));
|
|
748
|
+
put("labelPosition", at("label").target === "node" ? labelPositionOf(refs, label) : edgeLabelPositionOf(refs, label));
|
|
435
749
|
const ls = refs.deref(treeAttr(label, "Style") ?? treeChild(label, "Label.Style"));
|
|
436
750
|
if (ls === null || ls === NULL || typeof ls !== "object" || !ls.tag.endsWith("LabelStyle")) {
|
|
437
751
|
return;
|
|
438
752
|
}
|
|
439
753
|
putPaint(paintOf(refs, prop(ls, "textFill"), null), "labelColor", null, put, at);
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
754
|
+
readLabelFont(refs.deref(prop(ls, "font")), put, at);
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
* Reads a label style's `Font`: its size, family and weight.
|
|
758
|
+
* @param f - the dereferenced `font` property
|
|
759
|
+
* @param put - receives the values
|
|
760
|
+
* @param at - the sites
|
|
761
|
+
*/
|
|
762
|
+
function readLabelFont(f, put, at) {
|
|
763
|
+
if (f === null || f === NULL || typeof f !== "object" || f.tag !== "Font") {
|
|
764
|
+
return;
|
|
765
|
+
}
|
|
766
|
+
put("labelSize", canonNumber(treeAttr(f.e, "fontSize"), at("labelSize")));
|
|
767
|
+
const family = treeAttr(f.e, "fontFamily");
|
|
768
|
+
if (family !== undefined) {
|
|
769
|
+
put("labelFont", canonText(family.replaceAll(/(^['"])|(['"]$)/g, ""), at("labelFont")));
|
|
770
|
+
}
|
|
771
|
+
const weight = treeAttr(f.e, "fontWeight");
|
|
772
|
+
if (weight !== undefined) {
|
|
773
|
+
put("labelWeight", canonEnum("weight", weight, "yfiles3", at("labelWeight")));
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
/** The style, labels and geometry key kinds of nodes and of edges. */
|
|
777
|
+
const YFILES3_KINDS = {
|
|
778
|
+
node: ["NodeStyle", "NodeLabels", "NodeGeometry"],
|
|
779
|
+
edge: ["EdgeStyle", "EdgeLabels", "EdgeGeometry"],
|
|
780
|
+
};
|
|
781
|
+
/**
|
|
782
|
+
* Reads the yFiles 3 styles of every node or every edge.
|
|
783
|
+
* @param ctx - the shared state
|
|
784
|
+
* @param target - nodes or edges
|
|
785
|
+
* @param kinds - the table's columns by key kind
|
|
786
|
+
* @returns the values
|
|
787
|
+
*/
|
|
788
|
+
function readYfiles3Target(ctx, target, kinds) {
|
|
789
|
+
const { snapshot, notes, budget, refs, boxes } = ctx;
|
|
790
|
+
const isNode = target === "node";
|
|
791
|
+
const table = isNode ? snapshot.nodes : snapshot.edges;
|
|
792
|
+
const n = isNode ? snapshot.nodeCount : snapshot.edgeCount;
|
|
793
|
+
const out = valueColumns(n);
|
|
794
|
+
const [style, labels, geometry] = YFILES3_KINDS[target].map((kind) => kinds.get(kind));
|
|
795
|
+
const cell = (name, i) => name === undefined ? undefined : plainCell(table.value(name, i));
|
|
796
|
+
for (let i = 0; i < n; i++) {
|
|
797
|
+
budget.spend(target, 1);
|
|
798
|
+
const at = (property) => ({ notes, target, property, element: i, budget });
|
|
799
|
+
const put = (property, value) => {
|
|
800
|
+
out.put(i, property, value);
|
|
801
|
+
};
|
|
802
|
+
let size = null;
|
|
803
|
+
if (geometry !== undefined && !isNode) {
|
|
804
|
+
const box = (k) => boxes.subarray(4 * k, 4 * k + 4);
|
|
805
|
+
const [s, t] = [snapshot.edgeSource(i), snapshot.edgeTarget(i)];
|
|
806
|
+
readEdgeGeometry(refs, cell(geometry, i), cell(style, i), [box(s), box(t), s === t], put);
|
|
807
|
+
}
|
|
808
|
+
else if (geometry !== undefined) {
|
|
809
|
+
size = readNodeGeometry(cell(geometry, i), i, boxes, put, at);
|
|
810
|
+
}
|
|
811
|
+
if (style !== undefined && isNode) {
|
|
812
|
+
readNodeStyle(refs, cell(style, i), put, at, size);
|
|
813
|
+
}
|
|
814
|
+
else if (style !== undefined) {
|
|
815
|
+
readEdgeStyle(refs, cell(style, i), put, at);
|
|
446
816
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
put("labelWeight", canonEnum("weight", weight, "yfiles3", at("labelWeight")));
|
|
817
|
+
if (labels !== undefined) {
|
|
818
|
+
readLabels(refs, cell(labels, i), put, at);
|
|
450
819
|
}
|
|
451
820
|
}
|
|
821
|
+
return out.values;
|
|
822
|
+
}
|
|
823
|
+
/**
|
|
824
|
+
* Reads a node's NodeGeometry: its width and height, and its box for its edges' bends.
|
|
825
|
+
* @param geometry - the `<data>` content of the NodeGeometry key
|
|
826
|
+
* @param i - the node's index
|
|
827
|
+
* @param boxes - receives the node's center x and y, width and height
|
|
828
|
+
* @param put - receives the values
|
|
829
|
+
* @param at - the sites
|
|
830
|
+
* @returns the node's size, or null when its width or height is not a number
|
|
831
|
+
*/
|
|
832
|
+
function readNodeGeometry(geometry, i, boxes, put, at) {
|
|
833
|
+
const rect = treeChild(geometry, "RectD");
|
|
834
|
+
const width = canonNumber(treeAttr(rect, "Width"), at("width"));
|
|
835
|
+
const height = canonNumber(treeAttr(rect, "Height"), at("height"));
|
|
836
|
+
put("width", width);
|
|
837
|
+
put("height", height);
|
|
838
|
+
if (width === null || height === null) {
|
|
839
|
+
return null;
|
|
840
|
+
}
|
|
841
|
+
const [x, y] = [Number(treeAttr(rect, "X")), Number(treeAttr(rect, "Y"))];
|
|
842
|
+
boxes.set([x + width / 2, y + height / 2, width, height], 4 * i);
|
|
843
|
+
return { width, height };
|
|
452
844
|
}
|
|
453
845
|
/**
|
|
454
846
|
* The yFiles 3 styles of a graph.
|
|
@@ -467,35 +859,8 @@ export function readYfiles3Styles(snapshot, notes, budget) {
|
|
|
467
859
|
const graphKinds = columnsByKind(snapshot.graph);
|
|
468
860
|
const sharedName = graphKinds.get("SharedData");
|
|
469
861
|
const refs = new References(sharedName === undefined ? null : plainCell(snapshot.graph.value(sharedName, 0)));
|
|
470
|
-
const
|
|
471
|
-
|
|
472
|
-
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
473
|
-
const out = valueColumns(n);
|
|
474
|
-
const style = kinds.get(target === "node" ? "NodeStyle" : "EdgeStyle");
|
|
475
|
-
const labels = kinds.get(target === "node" ? "NodeLabels" : "EdgeLabels");
|
|
476
|
-
const geometry = target === "node" ? kinds.get("NodeGeometry") : undefined;
|
|
477
|
-
const readStyle = target === "node" ? readNodeStyle : readEdgeStyle;
|
|
478
|
-
const cell = (name, i) => name === undefined ? undefined : plainCell(table.value(name, i));
|
|
479
|
-
for (let i = 0; i < n; i++) {
|
|
480
|
-
budget.spend(target, 1);
|
|
481
|
-
const at = (property) => ({ notes, target, property, element: i, budget });
|
|
482
|
-
const put = (property, value) => {
|
|
483
|
-
out.put(i, property, value);
|
|
484
|
-
};
|
|
485
|
-
if (style !== undefined) {
|
|
486
|
-
readStyle(refs, cell(style, i), put, at);
|
|
487
|
-
}
|
|
488
|
-
if (labels !== undefined) {
|
|
489
|
-
readLabels(refs, cell(labels, i), put, at);
|
|
490
|
-
}
|
|
491
|
-
if (geometry !== undefined) {
|
|
492
|
-
const rect = treeChild(cell(geometry, i), "RectD");
|
|
493
|
-
put("width", canonNumber(treeAttr(rect, "Width"), at("width")));
|
|
494
|
-
put("height", canonNumber(treeAttr(rect, "Height"), at("height")));
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
return out.values;
|
|
498
|
-
};
|
|
862
|
+
const boxes = new Float64Array(4 * snapshot.nodeCount).fill(Number.NaN);
|
|
863
|
+
const read = (target, kinds) => readYfiles3Target({ snapshot, notes, budget, refs, boxes }, target, kinds);
|
|
499
864
|
const node = read("node", nodeKinds);
|
|
500
865
|
const edge = read("edge", edgeKinds);
|
|
501
866
|
if (refs.cycles > 0) {
|