diff --git a/report-viewer/package-lock.json b/report-viewer/package-lock.json
index 967d660b0..cc483a0c7 100644
--- a/report-viewer/package-lock.json
+++ b/report-viewer/package-lock.json
@@ -13,6 +13,7 @@
"@fortawesome/free-solid-svg-icons": "^6.5.0",
"@fortawesome/vue-fontawesome": "^3.0.5",
"chart.js": "^4.4.1",
+ "chartjs-chart-graph": "^4.2.5",
"chartjs-plugin-datalabels": "^2.2.0",
"highlight.js": "^11.9.0",
"jszip": "^3.10.0",
@@ -916,6 +917,16 @@
"node": ">= 10"
}
},
+ "node_modules/@types/d3-force": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.6.tgz",
+ "integrity": "sha512-G9wbOvCxkNlLrppoHLZ6oFpbm3z7ibfkXwLD8g5/4Aa7iTEV0Z7TQ0OL8UxAtvdOhCa2VZcSuqn1NQqyCEqmiw=="
+ },
+ "node_modules/@types/d3-hierarchy": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.4.tgz",
+ "integrity": "sha512-wrvjpRFdmEu6yAqgjGy8MSud9ggxJj+I9XLuztLeSf/E0j0j6RQYtxH2J8U0Cfbgiw9ZDHyhpmaVuWhxscYaAQ=="
+ },
"node_modules/@types/jsdom": {
"version": "21.1.6",
"resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz",
@@ -1957,6 +1968,23 @@
"pnpm": ">=7"
}
},
+ "node_modules/chartjs-chart-graph": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/chartjs-chart-graph/-/chartjs-chart-graph-4.2.5.tgz",
+ "integrity": "sha512-peZFFOYBLMn8cCvtT9xNapwOA8enfPQ3DO7bTBSNCTw0GjurnwxW3BF6H3lGjn+9VURVaVN/NHF2nSvUaCsxnw==",
+ "dependencies": {
+ "@types/d3-force": "^3.0.5",
+ "@types/d3-hierarchy": "^3.1.3",
+ "d3-dispatch": "^3.0.1",
+ "d3-force": "^3.0.0",
+ "d3-hierarchy": "^3.1.2",
+ "d3-quadtree": "^3.0.1",
+ "d3-timer": "^3.0.1"
+ },
+ "peerDependencies": {
+ "chart.js": "^4.1.0"
+ }
+ },
"node_modules/chartjs-plugin-datalabels": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.2.0.tgz",
@@ -2162,6 +2190,51 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
+ "node_modules/d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/data-urls": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz",
diff --git a/report-viewer/package.json b/report-viewer/package.json
index 274caba45..9ec30994a 100644
--- a/report-viewer/package.json
+++ b/report-viewer/package.json
@@ -22,6 +22,7 @@
"@fortawesome/free-solid-svg-icons": "^6.5.0",
"@fortawesome/vue-fontawesome": "^3.0.5",
"chart.js": "^4.4.1",
+ "chartjs-chart-graph": "^4.2.5",
"chartjs-plugin-datalabels": "^2.2.0",
"highlight.js": "^11.9.0",
"jszip": "^3.10.0",
diff --git a/report-viewer/src/components/ClusterGraph.vue b/report-viewer/src/components/ClusterGraph.vue
new file mode 100644
index 000000000..8d7f73c7b
--- /dev/null
+++ b/report-viewer/src/components/ClusterGraph.vue
@@ -0,0 +1,381 @@
+
+ Hover over an edge to highlight it in the table.
+ Not all comparisons of this cluster are present. These comparisons are indicated by the
+ dashed lines.
+ To include more comparisons, increase the number of increased comparisons in the CLI.
+