Added dependency graph viewer

This commit is contained in:
Stefan Zermatten
2023-05-29 10:38:38 +02:00
parent c6a3619178
commit 16d3ea9d53
5 changed files with 535 additions and 10 deletions

View File

@@ -55,6 +55,13 @@
</v-icon> Delete
</v-list-item-title>
</v-list-item>
<v-list-item @click="showDependencyGraph">
<v-list-item-title>
<v-icon left>
mdi-graph
</v-icon> Dependency Graph
</v-list-item-title>
</v-list-item>
<v-list-item @click="showCharacterForm">
<v-list-item-title>
<v-icon left>
@@ -237,6 +244,15 @@ export default {
}
});
},
showDependencyGraph() {
this.$store.commit('pushDialogStack', {
component: 'dependency-graph-dialog',
elementId: 'creature-menu',
data: {
creatureId: this.creatureId,
},
});
},
unshareWithMe() {
updateUserSharePermissions.call({
docRef: {

View File

@@ -0,0 +1,191 @@
<template lang="html">
<dialog-base class="dependency-graph">
<div slot="toolbar">
Dependency Graph
</div>
<div
id="dependency-graph-container"
slot="unwrapped-content"
ref="container"
class="graph-container"
/>
</dialog-base>
</template>
<script lang="js">
import buildCreatureComputation from '/imports/api/engine/computation/buildCreatureComputation.js';
import DialogBase from '/imports/client/ui/dialogStack/DialogBase.vue';
import computeCreatureComputation from '/imports/api/engine/computation/computeCreatureComputation.js';
import cytoscape from 'cytoscape';
import klay from 'cytoscape-klay';
import PROPERTIES from '/imports/constants/PROPERTIES.js';
cytoscape.use(klay);
function getNodeName(node) {
let model = node.data;
if (!model) return node.id;
if (model.name) return model.name;
if (model.type === '_calculation') {
return model._key;
}
let prop = PROPERTIES[model.type]
if (model.type === 'classLevel' && model.name && model.level) {
return model.name + ' ' + model.level
}
return prop?.name || prop?.type || node.id;
}
function getLoopNodes(computation) {
const loopNodes = [];
if (!computation.errors) return loopNodes;
computation.errors.forEach(err => {
if (err.type !== 'dependencyLoop') return;
err.details?.nodes?.forEach(nodeId => loopNodes.push(nodeId));
});
return loopNodes;
}
export default {
components: {
DialogBase,
},
props: {
creatureId: {
type: String,
required: true,
}
},
mounted() {
// Convert ngraph to cytoscape
// Convert Nodes
const nodes = [];
console.log(this.computation);
const loopNodes = getLoopNodes(this.computation);
this.computation.dependencyGraph.forEachNode(function (node) {
nodes.push({
data: {
id: node.id,
label: getNodeName(node) || node.id,
variable: !node.data,
inLoop: loopNodes.includes(node.id),
},
});
});
// Convert edges
const edges = [];
this.computation.dependencyGraph.forEachLink(function (link) {
edges.push({
data: {
target: link.fromId,
source: link.toId,
linkType: link.data,
inLoop: loopNodes.includes(link.fromId) && loopNodes.includes(link.toId)
},
scratch: {
},
})
//{ data: { source: 'n0', target: 'n1' } }
});
this.cytoscape = cytoscape({
container: this.$refs.container,
boxSelectionEnabled: false,
autounselectify: true,
layout: {
name: 'klay',
nodeDimensionsIncludeLabels: false,
klay: {
// direction: 'RIGHT',
edgeRouting: 'ORTHOGONAL', //'ORTHOGONAL',
feedbackEdges: true,
compactComponents: true,
layoutHierarchy: true,
mergeEdges: true,
// mergeHierarchyCrossingEdges: true,
nodePlacement: 'LINEAR_SEGMENTS', //default 'BRANDES_KOEPF'
spacing: 20,//20,
edgeSpacingFactor: 2.0, //0.5,
thoroughness: 12,//7,
separateConnectedComponents: false,
},
},
style: [
{
selector: 'node',
style: {
'content': 'data(label)',
//'text-opacity': 0.5,
'text-valign': 'bottom',
'text-halign': 'center',
'background-color': '#11479e',
//'text-outline-color': '#888',
//'text-outline-width': 3,
'text-background-opacity': 1,
'text-background-color': '#888',
'text-background-shape': 'roundrectangle',
'shape': 'round-rectangle'
}
}, {
selector: ele => ele.data().variable,
style: {
'background-color': '#B71C1C',
}
}, {
selector: 'edge',
style: {
'width': 4,
'target-arrow-shape': 'triangle-backcurve',
'line-color': '#9dbaea',
'target-arrow-color': '#9dbaea',
'curve-style': 'unbundled-bezier',
'label': 'data(linkType)',
'text-rotation': 'autorotate',
}
}, {
selector: ele => ele.data().inLoop,
style: {
'background-color': '#FF6D00',
'line-color': '#FF6D00',
'target-arrow-color': '#FF6D00',
}
},
],
elements: {
nodes,
edges,
},
});
this.cytoscape.on('tap', 'node', function(evt){
var node = evt.target;
console.log( 'tapped node', node.data() );
});
this.cytoscape.on('tap', 'edge', function(evt){
var edge = evt.target;
console.log( 'tapped edge', edge );
});
},
meteor: {
computation() {
const computation = buildCreatureComputation(this.creatureId);
computeCreatureComputation(computation);
return computation;
},
},
}
</script>
<style lang="css">
.graph-container {
width: 100%;
height: 100%;
}
.graph-container svg {
width: 100%;
height: 100%;
}
</style>

View File

@@ -8,9 +8,9 @@ import CreaturePropertyDialog from '/imports/client/ui/creature/creatureProperti
import CreaturePropertyFromLibraryDialog from '/imports/client/ui/creature/creatureProperties/CreaturePropertyFromLibraryDialog.vue';
import CreatureRootDialog from '/imports/client/ui/creature/character/CreatureRootDialog.vue';
import DeleteConfirmationDialog from '/imports/client/ui/dialogStack/DeleteConfirmationDialog.vue';
import ExperienceInsertDialog from '/imports/client/ui/creature/experiences/ExperienceInsertDialog.vue';
import ExperienceListDialog from '/imports/client/ui/creature/experiences/ExperienceListDialog.vue';
import HelpDialog from '/imports/client/ui/dialogStack/HelpDialog.vue';
import ExperienceInsertDialog from '/imports/client/ui/creature/experiences/ExperienceInsertDialog.vue';
import ExperienceListDialog from '/imports/client/ui/creature/experiences/ExperienceListDialog.vue';
import HelpDialog from '/imports/client/ui/dialogStack/HelpDialog.vue';
import LevelUpDialog from '/imports/client/ui/creature/slots/LevelUpDialog.vue';
import SelectLibraryNodeDialog from '/imports/client/ui/library/SelectLibraryNodeDialog.vue';
import SlotFillDialog from '/imports/client/ui/creature/slots/SlotFillDialog.vue';
@@ -20,6 +20,7 @@ import TransferOwnershipDialog from '/imports/client/ui/sharing/TransferOwnershi
// Lazily load less common dialogs
const ArchiveDialog = () => import('/imports/client/ui/creature/archive/ArchiveDialog.vue');
const DeleteUserAccountDialog = () => import('/imports/client/ui/user/DeleteUserAccountDialog.vue');
const DependencyGraphDialog = () => import('/imports/client/ui/creature/dependencyGraph/DependencyGraphDialog.vue');
const InviteDialog = () => import('/imports/client/ui/user/InviteDialog.vue');
const LibraryCollectionCreationDialog = () => import('/imports/client/ui/library/LibraryCollectionCreationDialog.vue');
const LibraryCollectionEditDialog = () => import('/imports/client/ui/library/LibraryCollectionEditDialog.vue');
@@ -44,6 +45,7 @@ export default {
CreatureRootDialog,
DeleteConfirmationDialog,
DeleteUserAccountDialog,
DependencyGraphDialog,
ExperienceInsertDialog,
ExperienceListDialog,
HelpDialog,

317
app/package-lock.json generated
View File

@@ -49,6 +49,12 @@
}
}
},
"@babel/parser": {
"version": "7.22.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.3.tgz",
"integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==",
"dev": true
},
"@babel/runtime": {
"version": "7.21.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz",
@@ -387,6 +393,64 @@
}
}
},
"@vue/compiler-core": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
"integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
"dev": true,
"requires": {
"@babel/parser": "^7.21.3",
"@vue/shared": "3.3.4",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
"@vue/compiler-dom": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
"integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
"dev": true,
"requires": {
"@vue/compiler-core": "3.3.4",
"@vue/shared": "3.3.4"
}
},
"@vue/reactivity": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
"integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
"dev": true,
"requires": {
"@vue/shared": "3.3.4"
}
},
"@vue/runtime-core": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
"integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
"dev": true,
"requires": {
"@vue/reactivity": "3.3.4",
"@vue/shared": "3.3.4"
}
},
"@vue/runtime-dom": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
"integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
"dev": true,
"requires": {
"@vue/runtime-core": "3.3.4",
"@vue/shared": "3.3.4",
"csstype": "^3.1.1"
}
},
"@vue/shared": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
"integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==",
"dev": true
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -412,6 +476,11 @@
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true
},
"add-event-listener": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/add-event-listener/-/add-event-listener-0.0.1.tgz",
"integrity": "sha512-hjRmkeDqFUWEFcDHP/Lp0Pa4MhIJk/oQX8B7lFiNrjBKHjf0q+ivCJrucY8d8UI5d0QkZgV2jGdAGXxEZcm3nA=="
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@@ -862,6 +931,46 @@
"resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz",
"integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg=="
},
"csstype": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
"dev": true
},
"cytoscape": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz",
"integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==",
"requires": {
"heap": "^0.2.6",
"lodash": "^4.17.21"
}
},
"cytoscape-dagre": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/cytoscape-dagre/-/cytoscape-dagre-2.5.0.tgz",
"integrity": "sha512-VG2Knemmshop4kh5fpLO27rYcyUaaDkRw+6PiX4bstpB+QFt0p2oauMrsjVbUamGWQ6YNavh7x2em2uZlzV44g==",
"requires": {
"dagre": "^0.8.5"
}
},
"cytoscape-klay": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/cytoscape-klay/-/cytoscape-klay-3.1.4.tgz",
"integrity": "sha512-VwPj0VR25GPfy6qXVQRi/MYlZM/zkdvRhHlgqbM//lSvstgM6fhp3ik/uM8Wr8nlhskfqz/M1fIDmR6UckbS2A==",
"requires": {
"klayjs": "^0.4.1"
}
},
"dagre": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz",
"integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
"requires": {
"graphlib": "^2.1.8",
"lodash": "^4.17.15"
}
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -1219,6 +1328,12 @@
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -1414,6 +1529,11 @@
"assert-plus": "^1.0.0"
}
},
"gintersect": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/gintersect/-/gintersect-0.1.0.tgz",
"integrity": "sha512-jps8Ckj6u8yLxOYzBVJbPqvRdeHOINQgRtufaLHkunwNQcSEdZU0ejPBapSimXJEQ9mdQW4hsEUN7DfJEcTvQQ=="
},
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@@ -1478,6 +1598,14 @@
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"dev": true
},
"graphlib": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
"integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
"requires": {
"lodash": "^4.17.15"
}
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -1537,6 +1665,11 @@
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
},
"heap": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
"integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg=="
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -1750,6 +1883,11 @@
"verror": "1.10.0"
}
},
"klayjs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/klayjs/-/klayjs-0.4.1.tgz",
"integrity": "sha512-WUNxuO7O79TEkxCj6OIaK5TJBkaWaR/IKNTakgV9PwDn+mrr63MLHed34AcE2yTaDntgO6l0zGFIzhcoTeroTA=="
},
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -2748,11 +2886,89 @@
"randexp": "0.4.6"
}
},
"ngraph.centrality": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/ngraph.centrality/-/ngraph.centrality-0.3.0.tgz",
"integrity": "sha512-Qmu9dDHJAx+GAW2AMqmhaub1rINS+fHZGZJ3zPI36ENAXmVNQ/Jkq79br1sg6NUHz/pRBT9MXMuwDyYKmMt8Mw=="
},
"ngraph.events": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.1.tgz",
"integrity": "sha512-D4C+nXH/RFxioGXQdHu8ELDtC6EaCiNsZtih0IvyGN81OZSUby4jXoJ5+RNWasfsd0FnKxxpAROyUMzw64QNsw=="
},
"ngraph.expose": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/ngraph.expose/-/ngraph.expose-0.0.0.tgz",
"integrity": "sha512-Hr88MuhgoSLVGf2aaaXcKl22Rn95duWsjRcoeJMP9PtFmYHGFw/3ctDqBf5phnIyktm0P/Quxs5EGg6xgJcZAQ=="
},
"ngraph.forcelayout": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/ngraph.forcelayout/-/ngraph.forcelayout-0.5.0.tgz",
"integrity": "sha512-qOd1S9unFLw313+l0M/Dk1MePLDUSl4h9RyOtAbo0CyeefnN4PICiRz0LOewR5WuFmQD0/RmZLpjTKu0H7LTKQ==",
"requires": {
"ngraph.events": "0.0.4",
"ngraph.physics.simulator": "^0.3.0"
},
"dependencies": {
"ngraph.events": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-0.0.4.tgz",
"integrity": "sha512-SY7MdNQoy5KyaVxg03PYCnGF6J7l4p8lEdmYm/5oIqFAmLhg0BmzZzlRqobJ0nEPT6xZlonUQbvCcXtarPZNrg=="
}
}
},
"ngraph.fromjson": {
"version": "0.1.9",
"resolved": "https://registry.npmjs.org/ngraph.fromjson/-/ngraph.fromjson-0.1.9.tgz",
"integrity": "sha512-f3GLjbUq239wx4s5A0fDptj9dcNeaEIJU3gm74hWvYK7onD7sFtedP7jVHZA7UJ2FwkKgEhzbPeltv92ycuKZQ==",
"requires": {
"ngraph.graph": "0.0.14"
},
"dependencies": {
"ngraph.events": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-0.0.3.tgz",
"integrity": "sha512-UrewofHOFk/05otBm9GD4DA3PTEY/yaElhCclmGC4IcmAYaSDRrC3lENQxJ00AzeBnz1GY2xH7Ct7AfIdhsdWA=="
},
"ngraph.graph": {
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-0.0.14.tgz",
"integrity": "sha512-ERTLng4KrsGbR7iLZFvg5H+zJ7V+SY8RDqZKYCnOZib5W8M5LCvcil9/8eiJcTRUIPPXW3j8hqPCdLnBvgsn/A==",
"requires": {
"ngraph.events": "0.0.3"
}
}
}
},
"ngraph.generators": {
"version": "0.0.19",
"resolved": "https://registry.npmjs.org/ngraph.generators/-/ngraph.generators-0.0.19.tgz",
"integrity": "sha512-P3XqB1sH4zrzM6bMGTtuT/6K76Rnhf1qE8Zu7PkAvhQVCQzdLYiL2/8DwhcPLsetRJHNJv0uwpW9TpntBAqKrw==",
"requires": {
"ngraph.graph": "0.0.14",
"ngraph.random": "0.1.0"
},
"dependencies": {
"ngraph.events": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-0.0.3.tgz",
"integrity": "sha512-UrewofHOFk/05otBm9GD4DA3PTEY/yaElhCclmGC4IcmAYaSDRrC3lENQxJ00AzeBnz1GY2xH7Ct7AfIdhsdWA=="
},
"ngraph.graph": {
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-0.0.14.tgz",
"integrity": "sha512-ERTLng4KrsGbR7iLZFvg5H+zJ7V+SY8RDqZKYCnOZib5W8M5LCvcil9/8eiJcTRUIPPXW3j8hqPCdLnBvgsn/A==",
"requires": {
"ngraph.events": "0.0.3"
}
},
"ngraph.random": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/ngraph.random/-/ngraph.random-0.1.0.tgz",
"integrity": "sha512-KXCfzk/ZB79BxQSWMvYPGayx3Mb+7n5GPnc8SW0rwysqRV/3QxEKrLU/UVC8eGjc2SYGofqX+uhUE6IXfqR5VA=="
}
}
},
"ngraph.graph": {
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-19.1.0.tgz",
@@ -2761,11 +2977,59 @@
"ngraph.events": "^1.2.1"
}
},
"ngraph.merge": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/ngraph.merge/-/ngraph.merge-0.0.1.tgz",
"integrity": "sha512-iXchI5xMjYzA96mee//O7I7gtd4cCakWaSTu11aMTxRDbvBK2qpDDytYg58jO3usAUkjFxBdy1gxYppKmBDuRQ=="
},
"ngraph.path": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ngraph.path/-/ngraph.path-1.4.0.tgz",
"integrity": "sha512-yJZay4tP0wcjqkkf8zlMQ/T+JOgU+EWfdE4w4TG8OS94B12J/+Z44UOYxVJErE8E6/wFunX1hMZEB1/GHsBYHg=="
},
"ngraph.physics.primitives": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ngraph.physics.primitives/-/ngraph.physics.primitives-0.0.7.tgz",
"integrity": "sha512-7jPm14fYcuJ9kytOVNOKxFy6r/Uu9Dnj++uT3iR9XkBcsBahn2xcYJkV6vF1bIb1fQ5XrDCRjRIOcMwEum6jwQ=="
},
"ngraph.physics.simulator": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/ngraph.physics.simulator/-/ngraph.physics.simulator-0.3.0.tgz",
"integrity": "sha512-ObW+HL+hQBIIdc6xG/+qrLe8qv+Sf0X3lq/l2hsjFrIwWtpRKLrSvUUoXiNIeFqRmY/C+PkGo3U+XY523lJ+Fw==",
"requires": {
"ngraph.events": "0.0.3",
"ngraph.expose": "0.0.0",
"ngraph.merge": "0.0.1",
"ngraph.physics.primitives": "0.0.7",
"ngraph.quadtreebh": "0.0.4",
"ngraph.random": "0.0.1"
},
"dependencies": {
"ngraph.events": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-0.0.3.tgz",
"integrity": "sha512-UrewofHOFk/05otBm9GD4DA3PTEY/yaElhCclmGC4IcmAYaSDRrC3lENQxJ00AzeBnz1GY2xH7Ct7AfIdhsdWA=="
}
}
},
"ngraph.quadtreebh": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/ngraph.quadtreebh/-/ngraph.quadtreebh-0.0.4.tgz",
"integrity": "sha512-xTIkWGXt5Ajnoq9VOr0xDOI9ZL+q4sPhD0Z7vxvn4MCa+l0wf43rg0C7qv0t+RIOgbQBAp0xDpn568hpXAckJA==",
"requires": {
"ngraph.random": "0.0.1"
}
},
"ngraph.random": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/ngraph.random/-/ngraph.random-0.0.1.tgz",
"integrity": "sha512-QPKU7ChXF/VrvMQxVo9aWcvXCXp98VfL4nKUteTW/olDqeUqQ61t7m+jvFb8Dj7kKvlKlnsbDA1aWLJGmm17XA=="
},
"ngraph.tojson": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/ngraph.tojson/-/ngraph.tojson-0.1.4.tgz",
"integrity": "sha512-Ii2BTqi8zBRMLH8vTc8pMUKQFJaqbgttG9DKUaazoPVpwC/ww4jyTOHe2ZKaGGZRepnGLqSZ27wZUm7n8MjIgA=="
},
"node-abi": {
"version": "3.26.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.26.0.tgz",
@@ -3199,6 +3463,14 @@
"is-arrayish": "^0.3.1"
}
},
"simplesvg": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/simplesvg/-/simplesvg-0.0.10.tgz",
"integrity": "sha512-iCVx1A/kI4U3cGPRMRQaGLbIFNDXuB8rsaAsO2mM5wYFDs/MrfmHhrSCqNbOylgt9MhhZU3uMsSQnZM853kwXQ==",
"requires": {
"add-event-listener": "0.0.1"
}
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -3258,6 +3530,12 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
"source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -3536,9 +3814,9 @@
"dev": true
},
"typescript": {
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
"dev": true
},
"uri-js": {
@@ -3603,6 +3881,39 @@
"extsprintf": "^1.2.0"
}
},
"vivagraphjs": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/vivagraphjs/-/vivagraphjs-0.12.0.tgz",
"integrity": "sha512-Air+vUHXAWj8NTWUnbU800yKC7SiHpCVwpKIPfDtr5436YoMd7cpg8blt6Fn9xarx+sz1osRxGHBHTaHvcsR6Q==",
"requires": {
"gintersect": "0.1.0",
"ngraph.centrality": "0.3.0",
"ngraph.events": "0.0.3",
"ngraph.forcelayout": "0.5.0",
"ngraph.fromjson": "0.1.9",
"ngraph.generators": "0.0.19",
"ngraph.graph": "0.0.14",
"ngraph.merge": "0.0.1",
"ngraph.random": "0.0.1",
"ngraph.tojson": "0.1.4",
"simplesvg": "0.0.10"
},
"dependencies": {
"ngraph.events": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-0.0.3.tgz",
"integrity": "sha512-UrewofHOFk/05otBm9GD4DA3PTEY/yaElhCclmGC4IcmAYaSDRrC3lENQxJ00AzeBnz1GY2xH7Ct7AfIdhsdWA=="
},
"ngraph.graph": {
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-0.0.14.tgz",
"integrity": "sha512-ERTLng4KrsGbR7iLZFvg5H+zJ7V+SY8RDqZKYCnOZib5W8M5LCvcil9/8eiJcTRUIPPXW3j8hqPCdLnBvgsn/A==",
"requires": {
"ngraph.events": "0.0.3"
}
}
}
},
"vue": {
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",

View File

@@ -27,6 +27,10 @@
"bcrypt": "^5.1.0",
"chroma-js": "^2.4.2",
"css-box-shadow": "^1.0.0-3",
"cytoscape": "^3.25.0",
"cytoscape-dagre": "^2.5.0",
"cytoscape-klay": "^3.1.4",
"dagre": "^0.8.5",
"date-fns": "^1.30.1",
"ddp-rate-limiter-mixin": "^1.1.10",
"discord.js": "^12.5.3",
@@ -48,6 +52,7 @@
"simpl-schema": "^1.13.1",
"source-map-support": "^0.5.21",
"speakingurl": "^14.0.1",
"vivagraphjs": "^0.12.0",
"vue": "2.6.14",
"vue-meteor-tracker": "^2.0.0",
"vue-reactive-provide": "^0.3.0",
@@ -61,13 +66,13 @@
"@types/mocha": "^10.0.1",
"@typescript-eslint/eslint-plugin": "^5.59.2",
"@typescript-eslint/parser": "^5.59.2",
"@vue/compiler-dom": "^2.6.10",
"@vue/runtime-dom": "^2.6.10",
"@vue/compiler-dom": "^3.3.4",
"@vue/runtime-dom": "^3.3.4",
"chai": "^4.3.7",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^7.20.0",
"eslint-plugin-vuetify": "^1.1.0",
"typescript": "^4.9.5"
"typescript": "^5.0"
},
"eslintConfig": {
"extends": [
@@ -120,4 +125,4 @@
]
}
}
}
}