@graphty/graph-io 0.3.43 → 0.3.44
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-3Q4TsdTh.js +40 -0
- package/dist/chunks/approximations-3Q4TsdTh.js.map +1 -0
- package/dist/chunks/block-JQiwViEt.js +2777 -0
- package/dist/chunks/block-JQiwViEt.js.map +1 -0
- package/dist/chunks/{choose-DvpbdRuz.js → choose-BemygfH8.js} +3 -2
- package/dist/chunks/{choose-DvpbdRuz.js.map → choose-BemygfH8.js.map} +1 -1
- package/dist/chunks/{constants-fT3E8JYY.js → constants-BFUR_CtU.js} +6 -2
- package/dist/chunks/constants-BFUR_CtU.js.map +1 -0
- package/dist/chunks/convert-BcQ8_jMo.js +59 -0
- package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
- package/dist/chunks/emit-DCwFLts5.js +3456 -0
- package/dist/chunks/emit-DCwFLts5.js.map +1 -0
- package/dist/chunks/{escape-B62ZGM_a.js → escape-B1rMftd9.js} +43 -20
- package/dist/chunks/escape-B1rMftd9.js.map +1 -0
- package/dist/chunks/{export-rKLeGQMo.js → export-D7IGzTG4.js} +196 -792
- package/dist/chunks/export-D7IGzTG4.js.map +1 -0
- package/dist/chunks/{exporter-BWwEuOPT.js → exporter-BtnqYuuj.js} +22 -12
- package/dist/chunks/exporter-BtnqYuuj.js.map +1 -0
- package/dist/chunks/{exporter-yLxKBvLE.js → exporter-ChPyhBOv.js} +4 -3
- package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter-ChPyhBOv.js.map} +1 -1
- package/dist/chunks/{exporter-8hLNemFk.js → exporter-KEPxYUXD.js} +133 -74
- package/dist/chunks/exporter-KEPxYUXD.js.map +1 -0
- package/dist/chunks/{exporter-RVtXVetw.js → exporter-quPUCBiC.js} +1805 -287
- package/dist/chunks/exporter-quPUCBiC.js.map +1 -0
- package/dist/chunks/format-GDmO6m6Q.js +676 -0
- package/dist/chunks/format-GDmO6m6Q.js.map +1 -0
- package/dist/chunks/generic-BL06jrJf.js +1347 -0
- package/dist/chunks/generic-BL06jrJf.js.map +1 -0
- package/dist/chunks/{importer-WrGRZb0N.js → importer-B7r2owVf.js} +449 -102
- package/dist/chunks/importer-B7r2owVf.js.map +1 -0
- package/dist/chunks/{importer-Ht7LNg8L.js → importer-BFmOP96W.js} +116 -296
- package/dist/chunks/importer-BFmOP96W.js.map +1 -0
- package/dist/chunks/{importer-BbNb7eNg.js → importer-C2nzGhdV.js} +1390 -129
- package/dist/chunks/importer-C2nzGhdV.js.map +1 -0
- package/dist/chunks/{importer-Dz7tI8Sa.js → importer-CbX2_rNF.js} +617 -115
- package/dist/chunks/importer-CbX2_rNF.js.map +1 -0
- package/dist/chunks/{importer-D794XUTe.js → importer-CdzeN6X4.js} +31 -8
- package/dist/chunks/importer-CdzeN6X4.js.map +1 -0
- package/dist/chunks/{importer-xZ-3suY1.js → importer-ChKNC_GN.js} +791 -135
- package/dist/chunks/importer-ChKNC_GN.js.map +1 -0
- package/dist/chunks/{importer-C98dpSH4.js → importer-dwoYpSqb.js} +141 -82
- package/dist/chunks/importer-dwoYpSqb.js.map +1 -0
- package/dist/chunks/index-B9fdNpTA.js +4310 -0
- package/dist/chunks/index-B9fdNpTA.js.map +1 -0
- package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-C4FwgnH5.js} +123 -32
- package/dist/chunks/json-elements-C4FwgnH5.js.map +1 -0
- package/dist/chunks/lexicon-B-knUi-l.js +508 -0
- package/dist/chunks/lexicon-B-knUi-l.js.map +1 -0
- package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-BSpbY5FL.js} +3 -2
- package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-BSpbY5FL.js.map} +1 -1
- package/dist/chunks/{records-Cu4bxYOm.js → records-Nwz_rbNt.js} +2 -2
- package/dist/chunks/{records-Cu4bxYOm.js.map → records-Nwz_rbNt.js.map} +1 -1
- package/dist/chunks/styles-Brt9JMfs.js +690 -0
- package/dist/chunks/styles-Brt9JMfs.js.map +1 -0
- package/dist/chunks/styles-_N-C8S-U.js +2102 -0
- package/dist/chunks/styles-_N-C8S-U.js.map +1 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js +842 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js.map +1 -0
- package/dist/chunks/{text-DHOJXnED.js → text-CgzMqHQb.js} +2 -2
- package/dist/chunks/{text-DHOJXnED.js.map → text-CgzMqHQb.js.map} +1 -1
- package/dist/chunks/units-XMZFIFe1.js +19 -0
- package/dist/chunks/units-XMZFIFe1.js.map +1 -0
- package/dist/csv.js +5 -4
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +1 -1
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +5 -2
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +292 -412
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +8 -3031
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +354 -240
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +4 -2
- package/dist/graphml.js.map +1 -1
- package/dist/json.js +1 -1
- package/dist/neo4j.js +4 -3
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +1 -1
- package/dist/pajek.js +4 -2
- package/dist/positions.d.ts +1 -0
- package/dist/positions.js +427 -0
- package/dist/positions.js.map +1 -0
- package/dist/src/common/codes.d.ts +6 -0
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +6 -0
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/escape.d.ts.map +1 -1
- package/dist/src/common/escape.js +4 -2
- package/dist/src/common/escape.js.map +1 -1
- package/dist/src/common/export.d.ts +10 -0
- package/dist/src/common/export.d.ts.map +1 -1
- package/dist/src/common/export.js +123 -100
- package/dist/src/common/export.js.map +1 -1
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +8 -1
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/json-elements.d.ts +12 -9
- package/dist/src/common/json-elements.d.ts.map +1 -1
- package/dist/src/common/json-elements.js +160 -37
- package/dist/src/common/json-elements.js.map +1 -1
- package/dist/src/common/notes.d.ts +42 -0
- package/dist/src/common/notes.d.ts.map +1 -0
- package/dist/src/common/notes.js +72 -0
- package/dist/src/common/notes.js.map +1 -0
- package/dist/src/common/report.d.ts +18 -0
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +36 -1
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/common/units.d.ts +24 -0
- package/dist/src/common/units.d.ts.map +1 -0
- package/dist/src/common/units.js +26 -0
- package/dist/src/common/units.js.map +1 -0
- package/dist/src/common/xml.d.ts +18 -0
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +42 -5
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/formats/cx/exporter.d.ts +6 -0
- package/dist/src/formats/cx/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx/exporter.js +71 -8
- package/dist/src/formats/cx/exporter.js.map +1 -1
- package/dist/src/formats/cx/importer.d.ts +5 -2
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +102 -72
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +102 -0
- package/dist/src/formats/cx/styles.d.ts.map +1 -0
- package/dist/src/formats/cx/styles.js +225 -0
- package/dist/src/formats/cx/styles.js.map +1 -0
- package/dist/src/formats/cx2/exporter.d.ts +5 -0
- package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx2/exporter.js +181 -71
- package/dist/src/formats/cx2/exporter.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts +4 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +19 -1
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts +18 -0
- package/dist/src/formats/cx2/styles.d.ts.map +1 -0
- package/dist/src/formats/cx2/styles.js +24 -0
- package/dist/src/formats/cx2/styles.js.map +1 -0
- package/dist/src/formats/cys/constants.d.ts +2 -0
- package/dist/src/formats/cys/constants.d.ts.map +1 -1
- package/dist/src/formats/cys/constants.js +2 -0
- package/dist/src/formats/cys/constants.js.map +1 -1
- package/dist/src/formats/cys/exporter.d.ts +6 -2
- package/dist/src/formats/cys/exporter.d.ts.map +1 -1
- package/dist/src/formats/cys/exporter.js +215 -53
- package/dist/src/formats/cys/exporter.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts +2 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +119 -6
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/session.d.ts +2 -0
- package/dist/src/formats/cys/session.d.ts.map +1 -1
- package/dist/src/formats/cys/session.js +5 -0
- package/dist/src/formats/cys/session.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +38 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -0
- package/dist/src/formats/cys/styles.js +213 -0
- package/dist/src/formats/cys/styles.js.map +1 -0
- package/dist/src/formats/cys/tables.d.ts +8 -3
- package/dist/src/formats/cys/tables.d.ts.map +1 -1
- package/dist/src/formats/cys/tables.js +88 -34
- package/dist/src/formats/cys/tables.js.map +1 -1
- package/dist/src/formats/dot/exporter.d.ts +2 -0
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +195 -81
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +100 -20
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +1 -0
- package/dist/src/formats/dot/index.d.ts.map +1 -1
- package/dist/src/formats/dot/index.js +1 -0
- package/dist/src/formats/dot/index.js.map +1 -1
- package/dist/src/formats/dot/positions.d.ts +14 -0
- package/dist/src/formats/dot/positions.d.ts.map +1 -0
- package/dist/src/formats/dot/positions.js +70 -0
- package/dist/src/formats/dot/positions.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +82 -0
- package/dist/src/formats/dot/styles.d.ts.map +1 -0
- package/dist/src/formats/dot/styles.js +1484 -0
- package/dist/src/formats/dot/styles.js.map +1 -0
- package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
- package/dist/src/formats/gexf/exporter.js +20 -5
- package/dist/src/formats/gexf/exporter.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +8 -1
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +251 -131
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/index.d.ts +8 -0
- package/dist/src/formats/gexf/index.d.ts.map +1 -1
- package/dist/src/formats/gexf/index.js +10 -2
- package/dist/src/formats/gexf/index.js.map +1 -1
- package/dist/src/formats/gexf/schema.d.ts +5 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +5 -0
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +74 -0
- package/dist/src/formats/gexf/styles.d.ts.map +1 -0
- package/dist/src/formats/gexf/styles.js +604 -0
- package/dist/src/formats/gexf/styles.js.map +1 -0
- package/dist/src/formats/gml/exporter.d.ts +1 -5
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +19 -8
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +4 -0
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +2 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +2 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +14 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -0
- package/dist/src/formats/gml/positions.js +46 -0
- package/dist/src/formats/gml/positions.js.map +1 -0
- package/dist/src/formats/gml/styles.d.ts +59 -0
- package/dist/src/formats/gml/styles.d.ts.map +1 -0
- package/dist/src/formats/gml/styles.js +1056 -0
- package/dist/src/formats/gml/styles.js.map +1 -0
- package/dist/src/formats/gml/syntax.d.ts +11 -0
- package/dist/src/formats/gml/syntax.d.ts.map +1 -1
- package/dist/src/formats/gml/syntax.js +151 -62
- package/dist/src/formats/gml/syntax.js.map +1 -1
- package/dist/src/formats/graphml/constants.d.ts +4 -0
- package/dist/src/formats/graphml/constants.d.ts.map +1 -1
- package/dist/src/formats/graphml/constants.js +5 -1
- package/dist/src/formats/graphml/constants.js.map +1 -1
- package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
- package/dist/src/formats/graphml/exporter.js +133 -65
- package/dist/src/formats/graphml/exporter.js.map +1 -1
- package/dist/src/formats/graphml/importer.d.ts +4 -1
- package/dist/src/formats/graphml/importer.d.ts.map +1 -1
- package/dist/src/formats/graphml/importer.js +100 -44
- package/dist/src/formats/graphml/importer.js.map +1 -1
- package/dist/src/formats/graphml/index.d.ts +1 -0
- package/dist/src/formats/graphml/index.d.ts.map +1 -1
- package/dist/src/formats/graphml/index.js +1 -0
- package/dist/src/formats/graphml/index.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-plain.js +187 -0
- package/dist/src/formats/graphml/styles-plain.js.map +1 -0
- package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yed.js +1086 -0
- package/dist/src/formats/graphml/styles-yed.js.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
- package/dist/src/formats/graphml/tree.d.ts.map +1 -1
- package/dist/src/formats/graphml/tree.js +34 -19
- package/dist/src/formats/graphml/tree.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +16 -2
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +83 -12
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts +5 -0
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +68 -25
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +22 -3
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +439 -264
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +16 -0
- package/dist/src/formats/json/positions.d.ts.map +1 -0
- package/dist/src/formats/json/positions.js +44 -0
- package/dist/src/formats/json/positions.js.map +1 -0
- package/dist/src/formats/json/styles.d.ts +102 -0
- package/dist/src/formats/json/styles.d.ts.map +1 -0
- package/dist/src/formats/json/styles.js +1753 -0
- package/dist/src/formats/json/styles.js.map +1 -0
- package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
- package/dist/src/formats/neo4j/exporter.js +2 -1
- package/dist/src/formats/neo4j/exporter.js.map +1 -1
- package/dist/src/formats/pajek/exporter.d.ts +2 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +142 -76
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +4 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +60 -6
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +2 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js +2 -0
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +50 -0
- package/dist/src/formats/pajek/styles.d.ts.map +1 -0
- package/dist/src/formats/pajek/styles.js +569 -0
- package/dist/src/formats/pajek/styles.js.map +1 -0
- package/dist/src/formats/pajek/syntax.d.ts +6 -0
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +6 -0
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
- package/dist/src/formats/xgmml/columns.js +34 -9
- package/dist/src/formats/xgmml/columns.js.map +1 -1
- package/dist/src/formats/xgmml/constants.d.ts +2 -0
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
- package/dist/src/formats/xgmml/constants.js +3 -1
- package/dist/src/formats/xgmml/constants.js.map +1 -1
- package/dist/src/formats/xgmml/document.d.ts +12 -8
- package/dist/src/formats/xgmml/document.d.ts.map +1 -1
- package/dist/src/formats/xgmml/document.js +56 -13
- package/dist/src/formats/xgmml/document.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +12 -6
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/exporter.d.ts +3 -1
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
- package/dist/src/formats/xgmml/exporter.js +22 -9
- package/dist/src/formats/xgmml/exporter.js.map +1 -1
- package/dist/src/formats/xgmml/importer.d.ts +2 -1
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
- package/dist/src/formats/xgmml/importer.js +31 -24
- package/dist/src/formats/xgmml/importer.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +104 -0
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
- package/dist/src/formats/xgmml/styles.js +310 -0
- package/dist/src/formats/xgmml/styles.js.map +1 -0
- package/dist/src/index.d.ts +9 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/codes.d.ts +31 -0
- package/dist/src/positions/codes.d.ts.map +1 -0
- package/dist/src/positions/codes.js +26 -0
- package/dist/src/positions/codes.js.map +1 -0
- package/dist/src/positions/convert.d.ts +58 -0
- package/dist/src/positions/convert.d.ts.map +1 -0
- package/dist/src/positions/convert.js +107 -0
- package/dist/src/positions/convert.js.map +1 -0
- package/dist/src/positions/extract.d.ts +27 -0
- package/dist/src/positions/extract.d.ts.map +1 -0
- package/dist/src/positions/extract.js +526 -0
- package/dist/src/positions/extract.js.map +1 -0
- package/dist/src/positions/index.d.ts +10 -0
- package/dist/src/positions/index.d.ts.map +1 -0
- package/dist/src/positions/index.js +9 -0
- package/dist/src/positions/index.js.map +1 -0
- package/dist/src/positions/types.d.ts +208 -0
- package/dist/src/positions/types.d.ts.map +1 -0
- package/dist/src/positions/types.js +10 -0
- package/dist/src/positions/types.js.map +1 -0
- package/dist/src/registry.d.ts +30 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +130 -9
- package/dist/src/registry.js.map +1 -1
- package/dist/src/styles/annotations.d.ts +132 -0
- package/dist/src/styles/annotations.d.ts.map +1 -0
- package/dist/src/styles/annotations.js +320 -0
- package/dist/src/styles/annotations.js.map +1 -0
- package/dist/src/styles/budget.d.ts +45 -0
- package/dist/src/styles/budget.d.ts.map +1 -0
- package/dist/src/styles/budget.js +58 -0
- package/dist/src/styles/budget.js.map +1 -0
- package/dist/src/styles/canon/bends.d.ts +32 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -0
- package/dist/src/styles/canon/bends.js +74 -0
- package/dist/src/styles/canon/bends.js.map +1 -0
- package/dist/src/styles/canon/color-tables.d.ts +22 -0
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
- package/dist/src/styles/canon/color-tables.js +369 -0
- package/dist/src/styles/canon/color-tables.js.map +1 -0
- package/dist/src/styles/canon/color.d.ts +66 -0
- package/dist/src/styles/canon/color.d.ts.map +1 -0
- package/dist/src/styles/canon/color.js +548 -0
- package/dist/src/styles/canon/color.js.map +1 -0
- package/dist/src/styles/canon/enums.d.ts +25 -0
- package/dist/src/styles/canon/enums.d.ts.map +1 -0
- package/dist/src/styles/canon/enums.js +187 -0
- package/dist/src/styles/canon/enums.js.map +1 -0
- package/dist/src/styles/canon/graphviz.d.ts +48 -0
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
- package/dist/src/styles/canon/graphviz.js +160 -0
- package/dist/src/styles/canon/graphviz.js.map +1 -0
- package/dist/src/styles/canon/index.d.ts +13 -0
- package/dist/src/styles/canon/index.d.ts.map +1 -0
- package/dist/src/styles/canon/index.js +13 -0
- package/dist/src/styles/canon/index.js.map +1 -0
- package/dist/src/styles/canon/number.d.ts +59 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -0
- package/dist/src/styles/canon/number.js +142 -0
- package/dist/src/styles/canon/number.js.map +1 -0
- package/dist/src/styles/canon/site.d.ts +51 -0
- package/dist/src/styles/canon/site.d.ts.map +1 -0
- package/dist/src/styles/canon/site.js +63 -0
- package/dist/src/styles/canon/site.js.map +1 -0
- package/dist/src/styles/canon/text.d.ts +61 -0
- package/dist/src/styles/canon/text.d.ts.map +1 -0
- package/dist/src/styles/canon/text.js +199 -0
- package/dist/src/styles/canon/text.js.map +1 -0
- package/dist/src/styles/codes.d.ts +95 -0
- package/dist/src/styles/codes.d.ts.map +1 -0
- package/dist/src/styles/codes.js +97 -0
- package/dist/src/styles/codes.js.map +1 -0
- package/dist/src/styles/cyjs/cascade.d.ts +134 -0
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
- package/dist/src/styles/cyjs/cascade.js +2252 -0
- package/dist/src/styles/cyjs/cascade.js.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.js +76 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
- package/dist/src/styles/cyjs/emit.d.ts +82 -0
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
- package/dist/src/styles/cyjs/emit.js +790 -0
- package/dist/src/styles/cyjs/emit.js.map +1 -0
- package/dist/src/styles/cyjs/index.d.ts +13 -0
- package/dist/src/styles/cyjs/index.d.ts.map +1 -0
- package/dist/src/styles/cyjs/index.js +13 -0
- package/dist/src/styles/cyjs/index.js.map +1 -0
- package/dist/src/styles/cyjs/live.d.ts +46 -0
- package/dist/src/styles/cyjs/live.d.ts.map +1 -0
- package/dist/src/styles/cyjs/live.js +108 -0
- package/dist/src/styles/cyjs/live.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +147 -0
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
- package/dist/src/styles/cyjs/mappers.js +744 -0
- package/dist/src/styles/cyjs/mappers.js.map +1 -0
- package/dist/src/styles/cyjs/selector.d.ts +113 -0
- package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
- package/dist/src/styles/cyjs/selector.js +611 -0
- package/dist/src/styles/cyjs/selector.js.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
- package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts +125 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/emit.js +1025 -0
- package/dist/src/styles/cytoscape/emit.js.map +1 -0
- package/dist/src/styles/cytoscape/index.d.ts +10 -0
- package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/index.js +10 -0
- package/dist/src/styles/cytoscape/index.js.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.js +603 -0
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
- package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/mappings.js +460 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -0
- package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/resolve.js +381 -0
- package/dist/src/styles/cytoscape/resolve.js.map +1 -0
- package/dist/src/styles/cytoscape/translate.d.ts +50 -0
- package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/translate.js +156 -0
- package/dist/src/styles/cytoscape/translate.js.map +1 -0
- package/dist/src/styles/defaults.d.ts +90 -0
- package/dist/src/styles/defaults.d.ts.map +1 -0
- package/dist/src/styles/defaults.js +414 -0
- package/dist/src/styles/defaults.js.map +1 -0
- package/dist/src/styles/index.d.ts +15 -0
- package/dist/src/styles/index.d.ts.map +1 -0
- package/dist/src/styles/index.js +14 -0
- package/dist/src/styles/index.js.map +1 -0
- package/dist/src/styles/internal.d.ts +17 -0
- package/dist/src/styles/internal.d.ts.map +1 -0
- package/dist/src/styles/internal.js +16 -0
- package/dist/src/styles/internal.js.map +1 -0
- package/dist/src/styles/io/approximations.d.ts +24 -0
- package/dist/src/styles/io/approximations.d.ts.map +1 -0
- package/dist/src/styles/io/approximations.js +51 -0
- package/dist/src/styles/io/approximations.js.map +1 -0
- package/dist/src/styles/io/block.d.ts +166 -0
- package/dist/src/styles/io/block.d.ts.map +1 -0
- package/dist/src/styles/io/block.js +930 -0
- package/dist/src/styles/io/block.js.map +1 -0
- package/dist/src/styles/io/generic.d.ts +88 -0
- package/dist/src/styles/io/generic.d.ts.map +1 -0
- package/dist/src/styles/io/generic.js +516 -0
- package/dist/src/styles/io/generic.js.map +1 -0
- package/dist/src/styles/io/index.d.ts +8 -0
- package/dist/src/styles/io/index.d.ts.map +1 -0
- package/dist/src/styles/io/index.js +7 -0
- package/dist/src/styles/io/index.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts +80 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -0
- package/dist/src/styles/io/writer.js +596 -0
- package/dist/src/styles/io/writer.js.map +1 -0
- package/dist/src/styles/notes.d.ts +47 -0
- package/dist/src/styles/notes.d.ts.map +1 -0
- package/dist/src/styles/notes.js +140 -0
- package/dist/src/styles/notes.js.map +1 -0
- package/dist/src/styles/plan/classes.d.ts +31 -0
- package/dist/src/styles/plan/classes.d.ts.map +1 -0
- package/dist/src/styles/plan/classes.js +139 -0
- package/dist/src/styles/plan/classes.js.map +1 -0
- package/dist/src/styles/plan/continuous.d.ts +32 -0
- package/dist/src/styles/plan/continuous.d.ts.map +1 -0
- package/dist/src/styles/plan/continuous.js +165 -0
- package/dist/src/styles/plan/continuous.js.map +1 -0
- package/dist/src/styles/plan/discrete.d.ts +39 -0
- package/dist/src/styles/plan/discrete.d.ts.map +1 -0
- package/dist/src/styles/plan/discrete.js +127 -0
- package/dist/src/styles/plan/discrete.js.map +1 -0
- package/dist/src/styles/plan/families.d.ts +31 -0
- package/dist/src/styles/plan/families.d.ts.map +1 -0
- package/dist/src/styles/plan/families.js +95 -0
- package/dist/src/styles/plan/families.js.map +1 -0
- package/dist/src/styles/plan/features.d.ts +58 -0
- package/dist/src/styles/plan/features.d.ts.map +1 -0
- package/dist/src/styles/plan/features.js +185 -0
- package/dist/src/styles/plan/features.js.map +1 -0
- package/dist/src/styles/plan/index.d.ts +7 -0
- package/dist/src/styles/plan/index.d.ts.map +1 -0
- package/dist/src/styles/plan/index.js +7 -0
- package/dist/src/styles/plan/index.js.map +1 -0
- package/dist/src/styles/plan/plan.d.ts +71 -0
- package/dist/src/styles/plan/plan.d.ts.map +1 -0
- package/dist/src/styles/plan/plan.js +893 -0
- package/dist/src/styles/plan/plan.js.map +1 -0
- package/dist/src/styles/plan/resolve.d.ts +137 -0
- package/dist/src/styles/plan/resolve.d.ts.map +1 -0
- package/dist/src/styles/plan/resolve.js +587 -0
- package/dist/src/styles/plan/resolve.js.map +1 -0
- package/dist/src/styles/types.d.ts +702 -0
- package/dist/src/styles/types.d.ts.map +1 -0
- package/dist/src/styles/types.js +10 -0
- package/dist/src/styles/types.js.map +1 -0
- package/dist/src/styles/vocabulary.d.ts +41 -0
- package/dist/src/styles/vocabulary.d.ts.map +1 -0
- package/dist/src/styles/vocabulary.js +140 -0
- package/dist/src/styles/vocabulary.js.map +1 -0
- package/dist/src/types.d.ts +64 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/styles.d.ts +1 -0
- package/dist/styles.js +322 -0
- package/dist/styles.js.map +1 -0
- package/dist/xgmml.js +5 -4
- package/dist/xgmml.js.map +1 -1
- package/package.json +13 -2
- package/src/common/codes.ts +7 -0
- package/src/common/escape.ts +5 -2
- package/src/common/export.ts +179 -140
- package/src/common/input.ts +8 -4
- package/src/common/json-elements.ts +169 -38
- package/src/common/notes.ts +94 -0
- package/src/common/report.ts +41 -1
- package/src/common/units.ts +42 -0
- package/src/common/xml.ts +45 -5
- package/src/formats/cx/exporter.ts +95 -11
- package/src/formats/cx/importer.ts +126 -90
- package/src/formats/cx/styles.ts +304 -0
- package/src/formats/cx2/exporter.ts +234 -77
- package/src/formats/cx2/importer.ts +19 -1
- package/src/formats/cx2/styles.ts +29 -0
- package/src/formats/cys/constants.ts +3 -0
- package/src/formats/cys/exporter.ts +246 -60
- package/src/formats/cys/importer.ts +125 -9
- package/src/formats/cys/session.ts +6 -0
- package/src/formats/cys/styles.ts +254 -0
- package/src/formats/cys/tables.ts +117 -48
- package/src/formats/dot/exporter.ts +262 -126
- package/src/formats/dot/importer.ts +111 -20
- package/src/formats/dot/index.ts +1 -0
- package/src/formats/dot/positions.ts +77 -0
- package/src/formats/dot/styles.ts +1741 -0
- package/src/formats/gexf/exporter.ts +27 -11
- package/src/formats/gexf/importer.ts +308 -158
- package/src/formats/gexf/index.ts +10 -0
- package/src/formats/gexf/schema.ts +5 -0
- package/src/formats/gexf/styles.ts +719 -0
- package/src/formats/gml/exporter.ts +33 -14
- package/src/formats/gml/importer.ts +4 -0
- package/src/formats/gml/index.ts +2 -1
- package/src/formats/gml/positions.ts +52 -0
- package/src/formats/gml/styles.ts +1248 -0
- package/src/formats/gml/syntax.ts +173 -62
- package/src/formats/graphml/constants.ts +5 -0
- package/src/formats/graphml/exporter.ts +163 -71
- package/src/formats/graphml/importer.ts +119 -45
- package/src/formats/graphml/index.ts +1 -0
- package/src/formats/graphml/styles-plain.ts +236 -0
- package/src/formats/graphml/styles-yed.ts +1221 -0
- package/src/formats/graphml/styles-yfiles3.ts +573 -0
- package/src/formats/graphml/tree.ts +36 -20
- package/src/formats/graphml/yfiles.ts +89 -13
- package/src/formats/json/exporter.ts +76 -26
- package/src/formats/json/importer.ts +541 -322
- package/src/formats/json/positions.ts +50 -0
- package/src/formats/json/styles.ts +2082 -0
- package/src/formats/neo4j/exporter.ts +2 -1
- package/src/formats/pajek/exporter.ts +195 -106
- package/src/formats/pajek/importer.ts +78 -9
- package/src/formats/pajek/index.ts +2 -0
- package/src/formats/pajek/styles.ts +685 -0
- package/src/formats/pajek/syntax.ts +7 -0
- package/src/formats/xgmml/columns.ts +39 -9
- package/src/formats/xgmml/constants.ts +3 -0
- package/src/formats/xgmml/document.ts +54 -12
- package/src/formats/xgmml/emit.ts +11 -6
- package/src/formats/xgmml/exporter.ts +32 -13
- package/src/formats/xgmml/importer.ts +43 -29
- package/src/formats/xgmml/styles.ts +400 -0
- package/src/index.ts +16 -0
- package/src/positions/codes.ts +32 -0
- package/src/positions/convert.ts +123 -0
- package/src/positions/extract.ts +619 -0
- package/src/positions/index.ts +23 -0
- package/src/positions/types.ts +221 -0
- package/src/registry.ts +179 -8
- package/src/styles/annotations.ts +478 -0
- package/src/styles/budget.ts +60 -0
- package/src/styles/canon/bends.ts +84 -0
- package/src/styles/canon/color-tables.ts +386 -0
- package/src/styles/canon/color.ts +624 -0
- package/src/styles/canon/enums.ts +211 -0
- package/src/styles/canon/graphviz.ts +189 -0
- package/src/styles/canon/index.ts +13 -0
- package/src/styles/canon/number.ts +152 -0
- package/src/styles/canon/site.ts +87 -0
- package/src/styles/canon/text.ts +221 -0
- package/src/styles/codes.ts +104 -0
- package/src/styles/cyjs/cascade.ts +2670 -0
- package/src/styles/cyjs/defaults-table.ts +82 -0
- package/src/styles/cyjs/emit.ts +951 -0
- package/src/styles/cyjs/index.ts +37 -0
- package/src/styles/cyjs/live.ts +147 -0
- package/src/styles/cyjs/mappers.ts +879 -0
- package/src/styles/cyjs/selector.ts +778 -0
- package/src/styles/cyjs/stylesheet-text.ts +214 -0
- package/src/styles/cytoscape/emit.ts +1264 -0
- package/src/styles/cytoscape/index.ts +40 -0
- package/src/styles/cytoscape/lexicon.ts +656 -0
- package/src/styles/cytoscape/mappings.ts +603 -0
- package/src/styles/cytoscape/resolve.ts +521 -0
- package/src/styles/cytoscape/translate.ts +237 -0
- package/src/styles/defaults.ts +504 -0
- package/src/styles/index.ts +57 -0
- package/src/styles/internal.ts +17 -0
- package/src/styles/io/approximations.ts +47 -0
- package/src/styles/io/block.ts +1138 -0
- package/src/styles/io/generic.ts +687 -0
- package/src/styles/io/index.ts +18 -0
- package/src/styles/io/writer.ts +745 -0
- package/src/styles/notes.ts +165 -0
- package/src/styles/plan/classes.ts +166 -0
- package/src/styles/plan/continuous.ts +218 -0
- package/src/styles/plan/discrete.ts +165 -0
- package/src/styles/plan/families.ts +115 -0
- package/src/styles/plan/features.ts +234 -0
- package/src/styles/plan/index.ts +7 -0
- package/src/styles/plan/plan.ts +1129 -0
- package/src/styles/plan/resolve.ts +685 -0
- package/src/styles/types.ts +814 -0
- package/src/styles/vocabulary.ts +172 -0
- package/src/types.ts +76 -1
- package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
- package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
- package/dist/chunks/export-rKLeGQMo.js.map +0 -1
- package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
- package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
- package/dist/chunks/exporter-RVtXVetw.js.map +0 -1
- package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
- package/dist/chunks/importer-C98dpSH4.js.map +0 -1
- package/dist/chunks/importer-D794XUTe.js.map +0 -1
- package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
- package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
- package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
- package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
- package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A discrete mapping on one categorical feature: the feature's values fall inside the family's blocks, up to 20% of
|
|
3
|
+
* the styled elements excepted, and the elements missing the feature may form their own group.
|
|
4
|
+
*/
|
|
5
|
+
import { valueKey } from "./families.js";
|
|
6
|
+
/** Below this many styled elements anything explains anything: no mapping is tried. */
|
|
7
|
+
export const MIN_MAPPED = 8;
|
|
8
|
+
/** The most keys a discrete table may hold. */
|
|
9
|
+
const MAX_KEYS = 256;
|
|
10
|
+
/** The share of styled elements a mapping may get wrong; the replay moves them into the exceptions. */
|
|
11
|
+
const MAX_EXCEPTION_SHARE = 0.2;
|
|
12
|
+
/**
|
|
13
|
+
* Tests a discrete mapping on one feature.
|
|
14
|
+
* @param fam - the family
|
|
15
|
+
* @param info - the feature
|
|
16
|
+
* @param n - the element count
|
|
17
|
+
* @param spend - spends work from the budget
|
|
18
|
+
* @returns the candidate, or null when the feature does not explain the family
|
|
19
|
+
*/
|
|
20
|
+
export function discreteCandidate(fam, info, n, spend) {
|
|
21
|
+
const nF = fam.styled.length;
|
|
22
|
+
if (!info.categorical || info.raw || nF < MIN_MAPPED) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (info.distinct < 2 || info.distinct > Math.min(MAX_KEYS, nF / 2) || info.distinct >= 0.9 * n) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
spend(n);
|
|
29
|
+
const { values } = info.feature;
|
|
30
|
+
const { votes, nullBlocks } = votesOf(fam, values);
|
|
31
|
+
const { table, exceptions: wrong } = tableOf(votes);
|
|
32
|
+
let exceptions = wrong;
|
|
33
|
+
// never paint an element the file left unstyled
|
|
34
|
+
const unstyledMissing = unstyledOf(fam, values, table, n);
|
|
35
|
+
if (unstyledMissing === null) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
// the elements missing the key form one group when they share one style (Gephi's "null" partition)
|
|
39
|
+
let bucket = null;
|
|
40
|
+
if (nullBlocks.size === 1 && !unstyledMissing) {
|
|
41
|
+
bucket = nullBlocks.keys().next().value ?? null;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
for (const c of nullBlocks.values()) {
|
|
45
|
+
exceptions += c;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (exceptions > Math.max(2, MAX_EXCEPTION_SHARE * nF)) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const cost = 50 + table.size * fam.props.length + (exceptions > 0 ? 50 + exceptions : 0) + (bucket === null ? 0 : 50);
|
|
52
|
+
return { type: "discrete", info, table, bucket, cost };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Counts, per key of the feature, the styled elements in each block; and per block, those missing the feature.
|
|
56
|
+
* @param fam - the family
|
|
57
|
+
* @param values - the feature's values
|
|
58
|
+
* @returns the votes, and the blocks of the elements missing the feature
|
|
59
|
+
*/
|
|
60
|
+
function votesOf(fam, values) {
|
|
61
|
+
const votes = new Map();
|
|
62
|
+
const nullBlocks = new Map();
|
|
63
|
+
for (const i of fam.styled) {
|
|
64
|
+
const b = fam.blocks[i];
|
|
65
|
+
const kv = values[i];
|
|
66
|
+
if (kv === null) {
|
|
67
|
+
nullBlocks.set(b, (nullBlocks.get(b) ?? 0) + 1);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const key = valueKey(kv);
|
|
71
|
+
let vote = votes.get(key);
|
|
72
|
+
if (vote === undefined) {
|
|
73
|
+
vote = { raw: kv, counts: new Map() };
|
|
74
|
+
votes.set(key, vote);
|
|
75
|
+
}
|
|
76
|
+
vote.counts.set(b, (vote.counts.get(b) ?? 0) + 1);
|
|
77
|
+
}
|
|
78
|
+
return { votes, nullBlocks };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The table: each key maps to the block most of its elements are in; the others are exceptions.
|
|
82
|
+
* @param votes - the votes
|
|
83
|
+
* @returns the table and how many elements it gets wrong
|
|
84
|
+
*/
|
|
85
|
+
function tableOf(votes) {
|
|
86
|
+
const table = new Map();
|
|
87
|
+
let exceptions = 0;
|
|
88
|
+
for (const [key, { raw, counts }] of votes) {
|
|
89
|
+
let best = -1;
|
|
90
|
+
let bestCount = -1;
|
|
91
|
+
let total = 0;
|
|
92
|
+
for (const [b, c] of counts) {
|
|
93
|
+
total += c;
|
|
94
|
+
if (c > bestCount) {
|
|
95
|
+
bestCount = c;
|
|
96
|
+
best = b;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
table.set(key, { raw, block: best });
|
|
100
|
+
exceptions += total - bestCount;
|
|
101
|
+
}
|
|
102
|
+
return { table, exceptions };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether an element the file left unstyled misses the feature (or holds false, which a missing-key group's "not has"
|
|
106
|
+
* also matches).
|
|
107
|
+
* @param fam - the family
|
|
108
|
+
* @param values - the feature's values
|
|
109
|
+
* @param table - the table
|
|
110
|
+
* @param n - the element count
|
|
111
|
+
* @returns the answer, or null when the table would paint an unstyled element
|
|
112
|
+
*/
|
|
113
|
+
function unstyledOf(fam, values, table, n) {
|
|
114
|
+
let missing = false;
|
|
115
|
+
for (let i = 0; i < n; i++) {
|
|
116
|
+
const v = values[i];
|
|
117
|
+
if (fam.blocks[i] !== 0) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (v !== null && table.has(valueKey(v))) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
missing || (missing = v === null || v === false);
|
|
124
|
+
}
|
|
125
|
+
return missing;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=discrete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discrete.js","sourceRoot":"","sources":["../../../../src/styles/plan/discrete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact equivalence classes: every property's values partition the elements (null is a block of its own), and
|
|
3
|
+
* properties with identical partitions form one family, explained once.
|
|
4
|
+
*/
|
|
5
|
+
import type { StyleValue } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* A group of properties that partition the elements the same way.
|
|
8
|
+
*/
|
|
9
|
+
export interface Family {
|
|
10
|
+
/** The properties, in the order they were given. */
|
|
11
|
+
readonly props: string[];
|
|
12
|
+
/** Each element's block: 0 for null, 1.. by first appearance. */
|
|
13
|
+
readonly blocks: Int32Array;
|
|
14
|
+
/** The number of non-null blocks. */
|
|
15
|
+
readonly k: number;
|
|
16
|
+
/** The elements with a value (block above 0), ascending. */
|
|
17
|
+
readonly styled: number[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The text a value is compared by.
|
|
21
|
+
* @param v - the value
|
|
22
|
+
* @returns a key unique per value and type
|
|
23
|
+
*/
|
|
24
|
+
export declare function valueKey(v: string | number | boolean | null | undefined): string;
|
|
25
|
+
/**
|
|
26
|
+
* Groups properties by identical partitions.
|
|
27
|
+
* @param props - the properties, each with its values
|
|
28
|
+
* @returns the families, in the order of their first property
|
|
29
|
+
*/
|
|
30
|
+
export declare function familiesOf(props: readonly (readonly [string, readonly (StyleValue | null)[]])[]): Family[];
|
|
31
|
+
//# sourceMappingURL=families.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"families.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/families.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEhF;AAyDD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAwB1G"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact equivalence classes: every property's values partition the elements (null is a block of its own), and
|
|
3
|
+
* properties with identical partitions form one family, explained once.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The text a value is compared by.
|
|
7
|
+
* @param v - the value
|
|
8
|
+
* @returns a key unique per value and type
|
|
9
|
+
*/
|
|
10
|
+
export function valueKey(v) {
|
|
11
|
+
return v === null || v === undefined ? "\u0000null" : `${typeof v}:${String(v)}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The partition of the elements by a property's values.
|
|
15
|
+
* @param values - the values by element
|
|
16
|
+
* @returns each element's block (0 for null, then by first appearance) and the number of non-null blocks
|
|
17
|
+
*/
|
|
18
|
+
function partition(values) {
|
|
19
|
+
const ids = new Map();
|
|
20
|
+
const blocks = new Int32Array(values.length);
|
|
21
|
+
for (let i = 0; i < values.length; i++) {
|
|
22
|
+
const v = values[i];
|
|
23
|
+
if (v === null) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const key = valueKey(v);
|
|
27
|
+
let id = ids.get(key);
|
|
28
|
+
if (id === undefined) {
|
|
29
|
+
id = ids.size + 1;
|
|
30
|
+
ids.set(key, id);
|
|
31
|
+
}
|
|
32
|
+
blocks[i] = id;
|
|
33
|
+
}
|
|
34
|
+
return { blocks, k: ids.size };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A hash of a block array.
|
|
38
|
+
* @param blocks - the blocks
|
|
39
|
+
* @returns its hash
|
|
40
|
+
*/
|
|
41
|
+
function hashBlocks(blocks) {
|
|
42
|
+
let h = 0x811c9dc5;
|
|
43
|
+
for (const b of blocks) {
|
|
44
|
+
h = Math.imul(h ^ b, 0x01000193);
|
|
45
|
+
}
|
|
46
|
+
return h >>> 0;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Whether two block arrays are equal.
|
|
50
|
+
* @param a - one
|
|
51
|
+
* @param b - the other
|
|
52
|
+
* @returns true when equal
|
|
53
|
+
*/
|
|
54
|
+
function sameBlocks(a, b) {
|
|
55
|
+
if (a.length !== b.length) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
for (let i = 0; i < a.length; i++) {
|
|
59
|
+
if (a[i] !== b[i]) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Groups properties by identical partitions.
|
|
67
|
+
* @param props - the properties, each with its values
|
|
68
|
+
* @returns the families, in the order of their first property
|
|
69
|
+
*/
|
|
70
|
+
export function familiesOf(props) {
|
|
71
|
+
const byHash = new Map();
|
|
72
|
+
const out = [];
|
|
73
|
+
for (const [p, values] of props) {
|
|
74
|
+
const { blocks, k } = partition(values);
|
|
75
|
+
const h = hashBlocks(blocks);
|
|
76
|
+
const list = byHash.get(h) ?? [];
|
|
77
|
+
const hit = list.find((f) => sameBlocks(f.blocks, blocks));
|
|
78
|
+
if (hit !== undefined) {
|
|
79
|
+
hit.props.push(p);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const styled = [];
|
|
83
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
84
|
+
if (blocks[i] !== 0) {
|
|
85
|
+
styled.push(i);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const fam = { props: [p], blocks, k, styled };
|
|
89
|
+
list.push(fam);
|
|
90
|
+
byHash.set(h, list);
|
|
91
|
+
out.push(fam);
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=families.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"families.js","sourceRoot":"","sources":["../../../../src/styles/plan/families.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate explaining columns: the snapshot's attributes and the graph's degrees, which the planner tests as
|
|
3
|
+
* explanations of a file's per-element style values, and the fingerprint that ties styles to their graph.
|
|
4
|
+
*/
|
|
5
|
+
import type { GraphSnapshot } from "@graphty/graph-format";
|
|
6
|
+
import type { StyleFeature, StyleFingerprint, StyleTarget } from "../types.js";
|
|
7
|
+
/**
|
|
8
|
+
* The candidate explaining columns of one target: every scalar attribute (the reserved `graphty.*` columns,
|
|
9
|
+
* coordinates and Cytoscape's selection state excepted), the group a node sits in as the style column `group`, and
|
|
10
|
+
* for nodes the degree (and the in- and out-degree of a directed graph) as `{ computed }` references, which follow
|
|
11
|
+
* later edits of the graph.
|
|
12
|
+
* @param snapshot - the graph
|
|
13
|
+
* @param target - nodes or edges
|
|
14
|
+
* @returns the features, in column order with the degrees last
|
|
15
|
+
* @category Styles
|
|
16
|
+
*/
|
|
17
|
+
export declare function featuresOf(snapshot: GraphSnapshot, target: StyleTarget): StyleFeature[];
|
|
18
|
+
/**
|
|
19
|
+
* The fingerprint of a graph: its node and edge counts and a hash of its node ids' text, whatever their order (a
|
|
20
|
+
* format may read nodes back in another order). The id 7 and the id "7" hash alike, so a graph written to a format
|
|
21
|
+
* that reads its ids back as text (or as numbers) keeps its fingerprint.
|
|
22
|
+
* @param snapshot - the graph
|
|
23
|
+
* @returns the fingerprint
|
|
24
|
+
* @category Styles
|
|
25
|
+
*/
|
|
26
|
+
export declare function styleFingerprint(snapshot: GraphSnapshot): StyleFingerprint;
|
|
27
|
+
/**
|
|
28
|
+
* The edge rows a file holds, in order: every row but the second half of an undirected edge in a directed graph,
|
|
29
|
+
* which every format writes once.
|
|
30
|
+
* @param snapshot - the graph
|
|
31
|
+
* @returns the rows
|
|
32
|
+
*/
|
|
33
|
+
export declare function heldEdgeRows(snapshot: GraphSnapshot): number[];
|
|
34
|
+
/**
|
|
35
|
+
* What the planner knows about a feature.
|
|
36
|
+
*/
|
|
37
|
+
export interface FeatureInfo {
|
|
38
|
+
/** The feature. */
|
|
39
|
+
readonly feature: StyleFeature;
|
|
40
|
+
/** Its name in rule ids. */
|
|
41
|
+
readonly name: string;
|
|
42
|
+
/** Distinct non-null values. */
|
|
43
|
+
readonly distinct: number;
|
|
44
|
+
/** Whether a table on it may explain styles (strings, booleans, integers). */
|
|
45
|
+
readonly categorical: boolean;
|
|
46
|
+
/** Whether a ramp on it may explain styles (finite numbers that are not an index). */
|
|
47
|
+
readonly numeric: boolean;
|
|
48
|
+
/** Whether it is the file's own raw style column, which explains nothing. */
|
|
49
|
+
readonly raw: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Describes a feature for the planner.
|
|
53
|
+
* @param feature - the feature
|
|
54
|
+
* @param raw - whether it is the raw style column a reader read
|
|
55
|
+
* @returns what the planner knows about it
|
|
56
|
+
*/
|
|
57
|
+
export declare function describeFeature(feature: StyleFeature, raw: boolean): FeatureInfo;
|
|
58
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/features.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAqB,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAYlG;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CA4BvF;AAmBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,CAuB1E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAS9D;AAsED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,mBAAmB;IACnB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,CAehF"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate explaining columns: the snapshot's attributes and the graph's degrees, which the planner tests as
|
|
3
|
+
* explanations of a file's per-element style values, and the fingerprint that ties styles to their graph.
|
|
4
|
+
*/
|
|
5
|
+
import { dataCell, degreeValues } from "./resolve.js";
|
|
6
|
+
/** Column types whose values can be features: one scalar per element. */
|
|
7
|
+
const SCALAR_DTYPES = new Set(["string", "dict", "bool", "i32", "u32", "u8", "f32", "f64"]);
|
|
8
|
+
/** Coordinates say where the writer put a node, not what it is. */
|
|
9
|
+
const COORDINATE = /^(?:x|y|z|_pos)$/i;
|
|
10
|
+
/** The column holding the group a node sits in. */
|
|
11
|
+
const PARENT_COLUMN = "graphty.parent";
|
|
12
|
+
/** An integer column of at least this many values that fills a whole range is an index, not a quantity. */
|
|
13
|
+
const MIN_INDEX = 8;
|
|
14
|
+
/**
|
|
15
|
+
* The candidate explaining columns of one target: every scalar attribute (the reserved `graphty.*` columns,
|
|
16
|
+
* coordinates and Cytoscape's selection state excepted), the group a node sits in as the style column `group`, and
|
|
17
|
+
* for nodes the degree (and the in- and out-degree of a directed graph) as `{ computed }` references, which follow
|
|
18
|
+
* later edits of the graph.
|
|
19
|
+
* @param snapshot - the graph
|
|
20
|
+
* @param target - nodes or edges
|
|
21
|
+
* @returns the features, in column order with the degrees last
|
|
22
|
+
* @category Styles
|
|
23
|
+
*/
|
|
24
|
+
export function featuresOf(snapshot, target) {
|
|
25
|
+
const table = target === "node" ? snapshot.nodes : snapshot.edges;
|
|
26
|
+
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const name of table.names().filter((c) => isFeatureColumn(table, c))) {
|
|
29
|
+
const values = Array.from({ length: n }, (_, i) => {
|
|
30
|
+
const v = dataCell(table, name, i);
|
|
31
|
+
return typeof v === "string" || typeof v === "number" || typeof v === "boolean" ? v : null;
|
|
32
|
+
});
|
|
33
|
+
if (name !== PARENT_COLUMN) {
|
|
34
|
+
out.push({ ref: { data: name }, values });
|
|
35
|
+
}
|
|
36
|
+
else if (target === "node") {
|
|
37
|
+
// the group a node sits in, by the group's id: graphty-element keeps no graphty.* column in its records
|
|
38
|
+
const group = values.map((v) => typeof v === "number" && v >= 0 && v < snapshot.nodeCount ? String(snapshot.ids.idOf(v)) : null);
|
|
39
|
+
out.push({ ref: { style: "group" }, values: group });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (target === "node" && n > 0) {
|
|
43
|
+
const kinds = snapshot.directed
|
|
44
|
+
? ["degree", "indegree", "outdegree"]
|
|
45
|
+
: ["degree"];
|
|
46
|
+
for (const k of kinds) {
|
|
47
|
+
out.push({ ref: { computed: k }, values: degreeValues(snapshot, k) });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Whether a column may explain styles: one scalar component, neither a position nor a coordinate, nor graphty's own
|
|
54
|
+
* columns (the parent excepted) or Cytoscape's selection state.
|
|
55
|
+
* @param table - the node or edge table
|
|
56
|
+
* @param name - the column
|
|
57
|
+
* @returns true for a candidate
|
|
58
|
+
*/
|
|
59
|
+
function isFeatureColumn(table, name) {
|
|
60
|
+
if ((name.startsWith("graphty.") && name !== PARENT_COLUMN) || name === "selected" || COORDINATE.test(name)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
const col = table.get(name);
|
|
64
|
+
return (col !== null && col.meta.role !== "position" && SCALAR_DTYPES.has(col.meta.dtype) && col.meta.components === 1);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The fingerprint of a graph: its node and edge counts and a hash of its node ids' text, whatever their order (a
|
|
68
|
+
* format may read nodes back in another order). The id 7 and the id "7" hash alike, so a graph written to a format
|
|
69
|
+
* that reads its ids back as text (or as numbers) keeps its fingerprint.
|
|
70
|
+
* @param snapshot - the graph
|
|
71
|
+
* @returns the fingerprint
|
|
72
|
+
* @category Styles
|
|
73
|
+
*/
|
|
74
|
+
export function styleFingerprint(snapshot) {
|
|
75
|
+
// two FNV-1a hashes with different seeds over each id's text, summed: the sum does not depend on the order
|
|
76
|
+
let h1 = 0;
|
|
77
|
+
let h2 = 0;
|
|
78
|
+
for (let i = 0; i < snapshot.nodeCount; i++) {
|
|
79
|
+
const text = String(snapshot.ids.idOf(i));
|
|
80
|
+
let a = 0x811c9dc5;
|
|
81
|
+
let b = 0x01000193 ^ 0x5bd1e995;
|
|
82
|
+
for (let c = 0; c < text.length; c++) {
|
|
83
|
+
const code = text.charCodeAt(c); // NOSONAR(S7758): hashes UTF-16 code units; code points would change every fingerprint
|
|
84
|
+
a = Math.imul(a ^ code, 0x01000193);
|
|
85
|
+
b = Math.imul(b ^ code, 0x01000193) ^ (b >>> 13);
|
|
86
|
+
}
|
|
87
|
+
h1 = (h1 + (a >>> 0)) >>> 0;
|
|
88
|
+
h2 = (h2 + (b >>> 0)) >>> 0;
|
|
89
|
+
}
|
|
90
|
+
const hex = (h) => (h >>> 0).toString(16).padStart(8, "0");
|
|
91
|
+
return {
|
|
92
|
+
nodes: snapshot.nodeCount,
|
|
93
|
+
edges: snapshot.edgeCount,
|
|
94
|
+
heldEdges: heldEdgeRows(snapshot).length,
|
|
95
|
+
ids: hex(h1) + hex(h2),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The edge rows a file holds, in order: every row but the second half of an undirected edge in a directed graph,
|
|
100
|
+
* which every format writes once.
|
|
101
|
+
* @param snapshot - the graph
|
|
102
|
+
* @returns the rows
|
|
103
|
+
*/
|
|
104
|
+
export function heldEdgeRows(snapshot) {
|
|
105
|
+
const pair = snapshot.edges.byRole("pair");
|
|
106
|
+
const rows = [];
|
|
107
|
+
for (let e = 0; e < snapshot.edgeCount; e++) {
|
|
108
|
+
if (!(pair?.isSet(e) === true && pair.value(e) < e)) {
|
|
109
|
+
rows.push(e);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return rows;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The statistics of a feature's values.
|
|
116
|
+
* @param values - the values
|
|
117
|
+
* @returns the statistics
|
|
118
|
+
*/
|
|
119
|
+
function valueStats(values) {
|
|
120
|
+
const seen = new Set();
|
|
121
|
+
let categorical = true;
|
|
122
|
+
let numeric = true;
|
|
123
|
+
let integers = true;
|
|
124
|
+
let lo = Infinity;
|
|
125
|
+
let hi = -Infinity;
|
|
126
|
+
let count = 0;
|
|
127
|
+
for (const v of values) {
|
|
128
|
+
if (v === null) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
count++;
|
|
132
|
+
seen.add(`${typeof v}:${String(v)}`);
|
|
133
|
+
if (typeof v !== "number") {
|
|
134
|
+
numeric = false;
|
|
135
|
+
integers = false;
|
|
136
|
+
}
|
|
137
|
+
else if (Number.isFinite(v)) {
|
|
138
|
+
integers && (integers = Number.isInteger(v));
|
|
139
|
+
categorical && (categorical = Number.isInteger(v));
|
|
140
|
+
lo = Math.min(lo, v);
|
|
141
|
+
hi = Math.max(hi, v);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
numeric = false;
|
|
145
|
+
categorical = false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return { seen, categorical, numeric, integers, lo, hi, count };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* A feature's name in rule ids: the column's name, the generated key or the degree's name.
|
|
152
|
+
* @param ref - the column
|
|
153
|
+
* @returns its name
|
|
154
|
+
*/
|
|
155
|
+
function featureName(ref) {
|
|
156
|
+
if ("style" in ref) {
|
|
157
|
+
return ref.style;
|
|
158
|
+
}
|
|
159
|
+
if ("computed" in ref) {
|
|
160
|
+
return ref.computed;
|
|
161
|
+
}
|
|
162
|
+
return ref.data;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Describes a feature for the planner.
|
|
166
|
+
* @param feature - the feature
|
|
167
|
+
* @param raw - whether it is the raw style column a reader read
|
|
168
|
+
* @returns what the planner knows about it
|
|
169
|
+
*/
|
|
170
|
+
export function describeFeature(feature, raw) {
|
|
171
|
+
const { seen, categorical, numeric, integers, lo, hi, count } = valueStats(feature.values);
|
|
172
|
+
const computed = "computed" in feature.ref;
|
|
173
|
+
// an integer column whose values are all different and fill a whole range (0..n-1, a z order) is an index:
|
|
174
|
+
// a ramp on it would only replay the order the writer stored the elements in
|
|
175
|
+
const index = !computed && numeric && integers && count >= MIN_INDEX && seen.size === count && hi - lo + 1 === count;
|
|
176
|
+
return {
|
|
177
|
+
feature,
|
|
178
|
+
name: featureName(feature.ref),
|
|
179
|
+
distinct: seen.size,
|
|
180
|
+
categorical: count > 0 && categorical,
|
|
181
|
+
numeric: count > 0 && numeric && !index,
|
|
182
|
+
raw,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../src/styles/plan/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The planner, the candidate features and the reference resolver of a file's styles.
|
|
3
|
+
*/
|
|
4
|
+
export { featuresOf, styleFingerprint } from "./features.js";
|
|
5
|
+
export { MAX_STYLE_RULES, type PlanOptions, planStyles, type StyleValues } from "./plan.js";
|
|
6
|
+
export { resolveStyles } from "./resolve.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The planner, the candidate features and the reference resolver of a file's styles.
|
|
3
|
+
*/
|
|
4
|
+
export { featuresOf, styleFingerprint } from "./features.js";
|
|
5
|
+
export { MAX_STYLE_RULES, planStyles } from "./plan.js";
|
|
6
|
+
export { resolveStyles } from "./resolve.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/styles/plan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAoB,UAAU,EAAoB,MAAM,WAAW,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The planner: turns a file's per-element style values into a few readable rules that reproduce them exactly. It
|
|
3
|
+
* groups properties into families, explains each family by a discrete or continuous mapping on one feature, a
|
|
4
|
+
* passthrough on an existing column, style classes or a copy, orders the rules, caps them at 15 per target and
|
|
5
|
+
* replays them: every element whose resolved value differs from the file's goes into one sparse exceptions column
|
|
6
|
+
* per property on top. One counted budget bounds the work; when it runs out the rest is copied.
|
|
7
|
+
*/
|
|
8
|
+
import { StyleNotes } from "../notes.js";
|
|
9
|
+
import type { ExtractedStyles, GraphStyle, ReaderOutput, StyleDialect, StyleFeatures, StyleFingerprint, StyleTool, StyleWorkBudget } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* The most rules per target: the planner keeps at most 15 plus the exceptions rule.
|
|
12
|
+
* @category Styles
|
|
13
|
+
*/
|
|
14
|
+
export declare const MAX_STYLE_RULES = 16;
|
|
15
|
+
/**
|
|
16
|
+
* What the planner is given: the canonical per-element values a style reader produced, the rules the file declares,
|
|
17
|
+
* and the graph they belong to.
|
|
18
|
+
* @category Styles
|
|
19
|
+
*/
|
|
20
|
+
export interface StyleValues {
|
|
21
|
+
/** The graph-io format id. */
|
|
22
|
+
readonly format: string;
|
|
23
|
+
/** How the file spelled its values. */
|
|
24
|
+
readonly dialect?: StyleDialect | null;
|
|
25
|
+
/** The program that wrote the file, whose defaults fill in what the file leaves unset; null when unknown. */
|
|
26
|
+
readonly tool?: StyleTool | null;
|
|
27
|
+
/** The unit of every length; defaults to pixels. */
|
|
28
|
+
readonly units?: "px" | "relative";
|
|
29
|
+
/** The graph's own style. */
|
|
30
|
+
readonly graph?: GraphStyle;
|
|
31
|
+
/** Node values, declared rules, reader columns and extra features. */
|
|
32
|
+
readonly node?: ReaderOutput;
|
|
33
|
+
/** Edge values, declared rules, reader columns and extra features. */
|
|
34
|
+
readonly edge?: ReaderOutput;
|
|
35
|
+
/** The graph the values belong to; its counts give the number of elements. */
|
|
36
|
+
readonly fingerprint: StyleFingerprint;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options of `planStyles()`.
|
|
40
|
+
* @category Styles
|
|
41
|
+
*/
|
|
42
|
+
export interface PlanOptions {
|
|
43
|
+
/** Whether to add the writing tool's defaults as a rule at the bottom; defaults to true. */
|
|
44
|
+
readonly toolDefaults?: boolean;
|
|
45
|
+
/** The counted work budget; defaults to a fresh `StyleBudget`. */
|
|
46
|
+
readonly budget?: StyleWorkBudget;
|
|
47
|
+
/**
|
|
48
|
+
* Where notes are collected; the reader's notes, when it used the same collector, are kept.
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
readonly notes?: StyleNotes;
|
|
52
|
+
/** Data columns the reader read the values from: they are never offered as explanations of themselves. */
|
|
53
|
+
readonly rawColumns?: {
|
|
54
|
+
/** Node columns. */
|
|
55
|
+
readonly node?: readonly string[];
|
|
56
|
+
/** Edge columns. */
|
|
57
|
+
readonly edge?: readonly string[];
|
|
58
|
+
};
|
|
59
|
+
/** Cancels the planning. */
|
|
60
|
+
readonly signal?: AbortSignal;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Plans a file's styles: the rules that reproduce its per-element values, with the columns they read.
|
|
64
|
+
* @param values - the canonical values, the declared rules and the graph they belong to
|
|
65
|
+
* @param features - the candidate explaining columns per target (`featuresOf()` of the snapshot)
|
|
66
|
+
* @param options - tool defaults, the budget, the notes collector, the raw columns and a cancel signal
|
|
67
|
+
* @returns the styles, exact for every element
|
|
68
|
+
* @category Styles
|
|
69
|
+
*/
|
|
70
|
+
export declare function planStyles(values: StyleValues, features: StyleFeatures, options?: PlanOptions): ExtractedStyles;
|
|
71
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/plan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EACR,eAAe,EACf,UAAU,EAEV,YAAY,EAEZ,YAAY,EAEZ,aAAa,EACb,gBAAgB,EAIhB,SAAS,EAET,eAAe,EAClB,MAAM,aAAa,CAAC;AAkBrB;;;GAGG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAMlC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,6GAA6G;IAC7G,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC;IACnC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,0GAA0G;IAC1G,QAAQ,CAAC,UAAU,CAAC,EAAE;QAClB,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACrC,CAAC;IACF,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CACjC;AA0BD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,WAAgB,GAAG,eAAe,CA4DnH"}
|