@receptron/graphai_vue_cytoscape 0.0.8 → 0.0.10

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.
@@ -0,0 +1,292 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var graphai = require('graphai');
5
+ var cytoscape = require('cytoscape');
6
+ var klay = require('cytoscape-klay');
7
+
8
+ cytoscape.use(klay);
9
+ const layout = "klay";
10
+ const colorPriority = "#f80";
11
+ const colorStatic = "#88f";
12
+ const calcNodeWidth = (label) => {
13
+ if (label === null || label === undefined) {
14
+ return "50px";
15
+ }
16
+ return Math.max(50, label.length * 8) + "px";
17
+ };
18
+ const cyStyle = [
19
+ {
20
+ selector: "node",
21
+ style: {
22
+ "background-color": "data(color)",
23
+ label: "data(id)",
24
+ shape: (ele) => (ele.data("isStatic") ? "rectangle" : "roundrectangle"),
25
+ width: (ele) => calcNodeWidth(ele.data("id")),
26
+ color: "#fff",
27
+ height: "30px",
28
+ "text-valign": "center",
29
+ "text-halign": "center",
30
+ "font-size": "12px",
31
+ },
32
+ },
33
+ {
34
+ selector: "edge",
35
+ style: {
36
+ width: 3,
37
+ "line-color": "#888",
38
+ "target-arrow-color": "#888",
39
+ "target-arrow-shape": "triangle",
40
+ "curve-style": "straight",
41
+ "text-background-color": "#ffffff",
42
+ "text-background-opacity": 0.8,
43
+ "text-background-shape": "rectangle",
44
+ "font-size": "10px",
45
+ },
46
+ },
47
+ {
48
+ selector: "edge[label]",
49
+ style: {
50
+ label: "data(label)",
51
+ },
52
+ },
53
+ {
54
+ selector: "edge[isUpdate]",
55
+ style: {
56
+ color: "#ddd",
57
+ "line-color": "#ddd",
58
+ "line-style": "dashed",
59
+ "curve-style": "unbundled-bezier",
60
+ "target-arrow-color": "#ddd",
61
+ },
62
+ },
63
+ ];
64
+ const colorMap = {
65
+ [graphai.NodeState.Waiting]: "#888",
66
+ [graphai.NodeState.Completed]: "#000",
67
+ [graphai.NodeState.Executing]: "#0f0",
68
+ ["executing-server"]: "#FFC0CB",
69
+ [graphai.NodeState.Queued]: "#ff0",
70
+ [graphai.NodeState.Injected]: "#00f",
71
+ [graphai.NodeState.TimedOut]: "#f0f",
72
+ [graphai.NodeState.Failed]: "#f00",
73
+ [graphai.NodeState.Skipped]: "#0ff",
74
+ };
75
+ const parseInput = (input) => {
76
+ // WARNING: Assuming the first character is always ":"
77
+ const ids = input.slice(1).split(".");
78
+ const source = ids.shift() || "";
79
+ const label = ids.length ? ids.join(".") : undefined;
80
+ return { source, label };
81
+ };
82
+ const inputs2dataSources = (inputs) => {
83
+ if (Array.isArray(inputs)) {
84
+ return inputs.map((inp) => inputs2dataSources(inp)).flat();
85
+ }
86
+ if (graphai.isObject(inputs)) {
87
+ return Object.values(inputs)
88
+ .map((input) => inputs2dataSources(input))
89
+ .flat();
90
+ }
91
+ if (typeof inputs === "string") {
92
+ const templateMatch = Array.from(inputs.matchAll(/\${(:[^}]+)}/g)).map((m) => m[1]);
93
+ if (templateMatch.length > 0) {
94
+ return inputs2dataSources(templateMatch);
95
+ }
96
+ }
97
+ return inputs;
98
+ };
99
+ const dataSourceNodeIds = (sources) => {
100
+ return sources.filter((source) => source.nodeId).map((source) => source.nodeId);
101
+ };
102
+ const cytoscapeFromGraph = (graph_data) => {
103
+ const elements = Object.keys(graph_data.nodes || {}).reduce((tmp, nodeId) => {
104
+ const node = graph_data.nodes[nodeId];
105
+ const isStatic = "value" in node;
106
+ const cyNode = {
107
+ data: {
108
+ id: nodeId,
109
+ color: isStatic ? colorStatic : colorMap[graphai.NodeState.Waiting],
110
+ isStatic,
111
+ },
112
+ };
113
+ tmp.nodes.push(cyNode);
114
+ tmp.map[nodeId] = cyNode;
115
+ if ("inputs" in node) {
116
+ // computed node
117
+ inputs2dataSources(node.inputs).forEach((input) => {
118
+ if (input[0] === ":") {
119
+ const { source, label } = parseInput(input);
120
+ tmp.edges.push({
121
+ data: {
122
+ source,
123
+ target: nodeId,
124
+ label,
125
+ },
126
+ });
127
+ }
128
+ });
129
+ }
130
+ if ("update" in node && node.update) {
131
+ // static node
132
+ const { source, label } = parseInput(node.update);
133
+ tmp.edges.push({
134
+ data: {
135
+ source,
136
+ target: nodeId,
137
+ isUpdate: true,
138
+ label,
139
+ },
140
+ });
141
+ }
142
+ return tmp;
143
+ }, { nodes: [], edges: [], map: {} });
144
+ return { elements };
145
+ };
146
+ const useCytoscape = (selectedGraph) => {
147
+ let cy = null;
148
+ const cytoscapeData = vue.ref(cytoscapeFromGraph(selectedGraph.value ?? { nodes: {} }));
149
+ const cytoscapeRef = vue.ref();
150
+ const zoomingEnabled = vue.ref(true);
151
+ const updateCytoscape = async (nodeId, state) => {
152
+ if ([graphai.NodeState.Completed, graphai.NodeState.Waiting].includes(state)) {
153
+ await graphai.sleep(100);
154
+ }
155
+ const elements = cytoscapeData.value.elements;
156
+ elements.map[nodeId].data.color = colorMap[state];
157
+ const graph = selectedGraph.value;
158
+ const nodeData = (graph?.nodes ?? {})[nodeId] ?? [];
159
+ if ("agent" in nodeData && state === graphai.NodeState.Queued && (nodeData.priority ?? 0) > 0) {
160
+ // computed node
161
+ elements.map[nodeId].data.color = colorPriority;
162
+ }
163
+ else if ("value" in nodeData && state === graphai.NodeState.Waiting) {
164
+ // static node
165
+ elements.map[nodeId].data.color = colorStatic;
166
+ }
167
+ cytoscapeData.value = { elements };
168
+ if (state === graphai.NodeState.Injected) {
169
+ await graphai.sleep(100);
170
+ elements.map[nodeId].data.color = colorStatic;
171
+ cytoscapeData.value = { elements };
172
+ }
173
+ };
174
+ const createCytoscape = () => {
175
+ try {
176
+ cy = cytoscape({
177
+ container: cytoscapeRef.value,
178
+ style: cyStyle,
179
+ layout: {
180
+ name: layout,
181
+ // fit: true,
182
+ // padding: 30,
183
+ // avoidOverlap: true,
184
+ },
185
+ });
186
+ cy.on("mouseup", storePositions);
187
+ cy.on("touchend", storePositions);
188
+ // cy.on("select", "node", callback);
189
+ // cy.on("select", "edge", callback);
190
+ //store.commit("setCytoscape", cy);
191
+ }
192
+ catch (error) {
193
+ console.error(error);
194
+ // store.commit("setCytoscape", null);
195
+ // error_msg.value = `${error}`;
196
+ }
197
+ };
198
+ const updateGraphData = async () => {
199
+ if (cy) {
200
+ cy.elements().remove();
201
+ cy.add(cytoscapeData.value.elements);
202
+ const name = cytoscapeData.value.elements.nodes.reduce((prevName, node) => {
203
+ if (node.position) {
204
+ return "preset";
205
+ }
206
+ return prevName;
207
+ }, layout);
208
+ console.log("layout", name);
209
+ cy.layout({ name }).run();
210
+ cy.fit();
211
+ if (name === layout) {
212
+ await graphai.sleep(400);
213
+ storePositions();
214
+ }
215
+ }
216
+ };
217
+ const storePositions = () => {
218
+ console.log("storePositions");
219
+ if (cy) {
220
+ cy.nodes().forEach((cynode) => {
221
+ const id = cynode.id();
222
+ const pos = cynode.position();
223
+ const node = cytoscapeData.value.elements.map[id];
224
+ node.position = pos;
225
+ });
226
+ }
227
+ };
228
+ const resetCytoscape = () => {
229
+ const elements = cytoscapeData.value.elements;
230
+ Object.keys(elements.map).forEach((nodeId) => {
231
+ const graph = selectedGraph.value;
232
+ const nodeData = graph.nodes[nodeId];
233
+ elements.map[nodeId].data.color = "value" in nodeData ? colorStatic : colorMap[graphai.NodeState.Waiting];
234
+ });
235
+ cytoscapeData.value = { elements };
236
+ };
237
+ vue.watch(cytoscapeData, () => {
238
+ console.log("updated");
239
+ updateGraphData();
240
+ });
241
+ vue.watch(selectedGraph, () => {
242
+ cytoscapeData.value = cytoscapeFromGraph(selectedGraph.value);
243
+ });
244
+ vue.onMounted(() => {
245
+ createCytoscape();
246
+ updateGraphData();
247
+ });
248
+ const layoutCytoscape = (key) => {
249
+ if (cy) {
250
+ const positions = cy.nodes().map((node) => {
251
+ return {
252
+ id: node.id(),
253
+ position: node.position(),
254
+ };
255
+ });
256
+ console.log(JSON.stringify(positions));
257
+ localStorage.setItem("layoutData-" + key, JSON.stringify(positions));
258
+ }
259
+ };
260
+ const loadLayout = (key) => {
261
+ const savedLayoutData = localStorage.getItem("layoutData-" + key);
262
+ if (savedLayoutData) {
263
+ const positions = JSON.parse(savedLayoutData);
264
+ positions.forEach((data) => {
265
+ if (cy) {
266
+ const node = cy.getElementById(data.id);
267
+ if (node) {
268
+ node.position(data.position);
269
+ }
270
+ }
271
+ });
272
+ }
273
+ };
274
+ vue.watch(zoomingEnabled, (value) => {
275
+ if (cy) {
276
+ cy.zoomingEnabled(value);
277
+ }
278
+ });
279
+ return {
280
+ cytoscapeRef,
281
+ updateCytoscape,
282
+ resetCytoscape,
283
+ layoutCytoscape,
284
+ loadLayout,
285
+ zoomingEnabled,
286
+ };
287
+ };
288
+
289
+ exports.dataSourceNodeIds = dataSourceNodeIds;
290
+ exports.inputs2dataSources = inputs2dataSources;
291
+ exports.useCytoscape = useCytoscape;
292
+ //# sourceMappingURL=bundle.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.cjs.js","sources":["../src/composables/cytoscape.ts"],"sourcesContent":[null],"names":["NodeState","isObject","ref","sleep","watch","onMounted"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("vue"),t=require("graphai"),a=require("cytoscape"),o=require("cytoscape-klay");a.use(o);const l="klay",s="#88f",n=[{selector:"node",style:{"background-color":"data(color)",label:"data(id)",shape:e=>e.data("isStatic")?"rectangle":"roundrectangle",width:e=>{return null==(t=e.data("id"))?"50px":Math.max(50,8*t.length)+"px";var t},color:"#fff",height:"30px","text-valign":"center","text-halign":"center","font-size":"12px"}},{selector:"edge",style:{width:3,"line-color":"#888","target-arrow-color":"#888","target-arrow-shape":"triangle","curve-style":"straight","text-background-color":"#ffffff","text-background-opacity":.8,"text-background-shape":"rectangle","font-size":"10px"}},{selector:"edge[label]",style:{label:"data(label)"}},{selector:"edge[isUpdate]",style:{color:"#ddd","line-color":"#ddd","line-style":"dashed","curve-style":"unbundled-bezier","target-arrow-color":"#ddd"}}],r={[t.NodeState.Waiting]:"#888",[t.NodeState.Completed]:"#000",[t.NodeState.Executing]:"#0f0","executing-server":"#FFC0CB",[t.NodeState.Queued]:"#ff0",[t.NodeState.Injected]:"#00f",[t.NodeState.TimedOut]:"#f0f",[t.NodeState.Failed]:"#f00",[t.NodeState.Skipped]:"#0ff"},d=e=>{const t=e.slice(1).split(".");return{source:t.shift()||"",label:t.length?t.join("."):void 0}},i=e=>{if(Array.isArray(e))return e.map((e=>i(e))).flat();if(t.isObject(e))return Object.values(e).map((e=>i(e))).flat();if("string"==typeof e){const t=Array.from(e.matchAll(/\${(:[^}]+)}/g)).map((e=>e[1]));if(t.length>0)return i(t)}return e},c=e=>({elements:Object.keys(e.nodes||{}).reduce(((a,o)=>{const l=e.nodes[o],n="value"in l,c={data:{id:o,color:n?s:r[t.NodeState.Waiting],isStatic:n}};if(a.nodes.push(c),a.map[o]=c,"inputs"in l&&i(l.inputs).forEach((e=>{if(":"===e[0]){const{source:t,label:l}=d(e);a.edges.push({data:{source:t,target:o,label:l}})}})),"update"in l&&l.update){const{source:e,label:t}=d(l.update);a.edges.push({data:{source:e,target:o,isUpdate:!0,label:t}})}return a}),{nodes:[],edges:[],map:{}})});exports.dataSourceNodeIds=e=>e.filter((e=>e.nodeId)).map((e=>e.nodeId)),exports.inputs2dataSources=i,exports.useCytoscape=o=>{let d=null;const i=e.ref(c(o.value??{nodes:{}})),u=e.ref(),p=e.ref(!0),f=async()=>{if(d){d.elements().remove(),d.add(i.value.elements);const e=i.value.elements.nodes.reduce(((e,t)=>t.position?"preset":e),l);console.log("layout",e),d.layout({name:e}).run(),d.fit(),e===l&&(await t.sleep(400),g())}},g=()=>{console.log("storePositions"),d&&d.nodes().forEach((e=>{const t=e.id(),a=e.position();i.value.elements.map[t].position=a}))};e.watch(i,(()=>{console.log("updated"),f()})),e.watch(o,(()=>{i.value=c(o.value)})),e.onMounted((()=>{(()=>{try{d=a({container:u.value,style:n,layout:{name:l}}),d.on("mouseup",g),d.on("touchend",g)}catch(e){console.error(e)}})(),f()}));return e.watch(p,(e=>{d&&d.zoomingEnabled(e)})),{cytoscapeRef:u,updateCytoscape:async(e,a)=>{[t.NodeState.Completed,t.NodeState.Waiting].includes(a)&&await t.sleep(100);const l=i.value.elements;l.map[e].data.color=r[a];const n=o.value,d=(n?.nodes??{})[e]??[];"agent"in d&&a===t.NodeState.Queued&&(d.priority??0)>0?l.map[e].data.color="#f80":"value"in d&&a===t.NodeState.Waiting&&(l.map[e].data.color=s),i.value={elements:l},a===t.NodeState.Injected&&(await t.sleep(100),l.map[e].data.color=s,i.value={elements:l})},resetCytoscape:()=>{const e=i.value.elements;Object.keys(e.map).forEach((a=>{const l=o.value.nodes[a];e.map[a].data.color="value"in l?s:r[t.NodeState.Waiting]})),i.value={elements:e}},layoutCytoscape:e=>{if(d){const t=d.nodes().map((e=>({id:e.id(),position:e.position()})));console.log(JSON.stringify(t)),localStorage.setItem("layoutData-"+e,JSON.stringify(t))}},loadLayout:e=>{const t=localStorage.getItem("layoutData-"+e);if(t){JSON.parse(t).forEach((e=>{if(d){const t=d.getElementById(e.id);t&&t.position(e.position)}}))}},zoomingEnabled:p}};
2
+ //# sourceMappingURL=bundle.cjs.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.cjs.min.js","sources":["../src/composables/cytoscape.ts"],"sourcesContent":[null],"names":["cytoscape","use","klay","layout","colorStatic","cyStyle","selector","style","label","shape","ele","data","width","calcNodeWidth","Math","max","length","color","height","colorMap","NodeState","Waiting","Completed","Executing","Queued","Injected","TimedOut","Failed","Skipped","parseInput","input","ids","slice","split","source","shift","join","undefined","inputs2dataSources","inputs","Array","isArray","map","inp","flat","isObject","Object","values","templateMatch","from","matchAll","m","cytoscapeFromGraph","graph_data","elements","keys","nodes","reduce","tmp","nodeId","node","isStatic","cyNode","id","push","forEach","edges","target","update","isUpdate","sources","filter","selectedGraph","cy","cytoscapeData","ref","value","cytoscapeRef","zoomingEnabled","updateGraphData","async","remove","add","name","prevName","position","console","log","run","fit","sleep","storePositions","cynode","pos","watch","onMounted","container","on","error","createCytoscape","updateCytoscape","state","includes","graph","nodeData","priority","resetCytoscape","layoutCytoscape","key","positions","JSON","stringify","localStorage","setItem","loadLayout","savedLayoutData","getItem","parse","getElementById"],"mappings":"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"}
@@ -0,0 +1,288 @@
1
+ import { ref, watch, onMounted } from 'vue';
2
+ import { NodeState, isObject, sleep } from 'graphai';
3
+ import cytoscape from 'cytoscape';
4
+ import klay from 'cytoscape-klay';
5
+
6
+ cytoscape.use(klay);
7
+ const layout = "klay";
8
+ const colorPriority = "#f80";
9
+ const colorStatic = "#88f";
10
+ const calcNodeWidth = (label) => {
11
+ if (label === null || label === undefined) {
12
+ return "50px";
13
+ }
14
+ return Math.max(50, label.length * 8) + "px";
15
+ };
16
+ const cyStyle = [
17
+ {
18
+ selector: "node",
19
+ style: {
20
+ "background-color": "data(color)",
21
+ label: "data(id)",
22
+ shape: (ele) => (ele.data("isStatic") ? "rectangle" : "roundrectangle"),
23
+ width: (ele) => calcNodeWidth(ele.data("id")),
24
+ color: "#fff",
25
+ height: "30px",
26
+ "text-valign": "center",
27
+ "text-halign": "center",
28
+ "font-size": "12px",
29
+ },
30
+ },
31
+ {
32
+ selector: "edge",
33
+ style: {
34
+ width: 3,
35
+ "line-color": "#888",
36
+ "target-arrow-color": "#888",
37
+ "target-arrow-shape": "triangle",
38
+ "curve-style": "straight",
39
+ "text-background-color": "#ffffff",
40
+ "text-background-opacity": 0.8,
41
+ "text-background-shape": "rectangle",
42
+ "font-size": "10px",
43
+ },
44
+ },
45
+ {
46
+ selector: "edge[label]",
47
+ style: {
48
+ label: "data(label)",
49
+ },
50
+ },
51
+ {
52
+ selector: "edge[isUpdate]",
53
+ style: {
54
+ color: "#ddd",
55
+ "line-color": "#ddd",
56
+ "line-style": "dashed",
57
+ "curve-style": "unbundled-bezier",
58
+ "target-arrow-color": "#ddd",
59
+ },
60
+ },
61
+ ];
62
+ const colorMap = {
63
+ [NodeState.Waiting]: "#888",
64
+ [NodeState.Completed]: "#000",
65
+ [NodeState.Executing]: "#0f0",
66
+ ["executing-server"]: "#FFC0CB",
67
+ [NodeState.Queued]: "#ff0",
68
+ [NodeState.Injected]: "#00f",
69
+ [NodeState.TimedOut]: "#f0f",
70
+ [NodeState.Failed]: "#f00",
71
+ [NodeState.Skipped]: "#0ff",
72
+ };
73
+ const parseInput = (input) => {
74
+ // WARNING: Assuming the first character is always ":"
75
+ const ids = input.slice(1).split(".");
76
+ const source = ids.shift() || "";
77
+ const label = ids.length ? ids.join(".") : undefined;
78
+ return { source, label };
79
+ };
80
+ const inputs2dataSources = (inputs) => {
81
+ if (Array.isArray(inputs)) {
82
+ return inputs.map((inp) => inputs2dataSources(inp)).flat();
83
+ }
84
+ if (isObject(inputs)) {
85
+ return Object.values(inputs)
86
+ .map((input) => inputs2dataSources(input))
87
+ .flat();
88
+ }
89
+ if (typeof inputs === "string") {
90
+ const templateMatch = Array.from(inputs.matchAll(/\${(:[^}]+)}/g)).map((m) => m[1]);
91
+ if (templateMatch.length > 0) {
92
+ return inputs2dataSources(templateMatch);
93
+ }
94
+ }
95
+ return inputs;
96
+ };
97
+ const dataSourceNodeIds = (sources) => {
98
+ return sources.filter((source) => source.nodeId).map((source) => source.nodeId);
99
+ };
100
+ const cytoscapeFromGraph = (graph_data) => {
101
+ const elements = Object.keys(graph_data.nodes || {}).reduce((tmp, nodeId) => {
102
+ const node = graph_data.nodes[nodeId];
103
+ const isStatic = "value" in node;
104
+ const cyNode = {
105
+ data: {
106
+ id: nodeId,
107
+ color: isStatic ? colorStatic : colorMap[NodeState.Waiting],
108
+ isStatic,
109
+ },
110
+ };
111
+ tmp.nodes.push(cyNode);
112
+ tmp.map[nodeId] = cyNode;
113
+ if ("inputs" in node) {
114
+ // computed node
115
+ inputs2dataSources(node.inputs).forEach((input) => {
116
+ if (input[0] === ":") {
117
+ const { source, label } = parseInput(input);
118
+ tmp.edges.push({
119
+ data: {
120
+ source,
121
+ target: nodeId,
122
+ label,
123
+ },
124
+ });
125
+ }
126
+ });
127
+ }
128
+ if ("update" in node && node.update) {
129
+ // static node
130
+ const { source, label } = parseInput(node.update);
131
+ tmp.edges.push({
132
+ data: {
133
+ source,
134
+ target: nodeId,
135
+ isUpdate: true,
136
+ label,
137
+ },
138
+ });
139
+ }
140
+ return tmp;
141
+ }, { nodes: [], edges: [], map: {} });
142
+ return { elements };
143
+ };
144
+ const useCytoscape = (selectedGraph) => {
145
+ let cy = null;
146
+ const cytoscapeData = ref(cytoscapeFromGraph(selectedGraph.value ?? { nodes: {} }));
147
+ const cytoscapeRef = ref();
148
+ const zoomingEnabled = ref(true);
149
+ const updateCytoscape = async (nodeId, state) => {
150
+ if ([NodeState.Completed, NodeState.Waiting].includes(state)) {
151
+ await sleep(100);
152
+ }
153
+ const elements = cytoscapeData.value.elements;
154
+ elements.map[nodeId].data.color = colorMap[state];
155
+ const graph = selectedGraph.value;
156
+ const nodeData = (graph?.nodes ?? {})[nodeId] ?? [];
157
+ if ("agent" in nodeData && state === NodeState.Queued && (nodeData.priority ?? 0) > 0) {
158
+ // computed node
159
+ elements.map[nodeId].data.color = colorPriority;
160
+ }
161
+ else if ("value" in nodeData && state === NodeState.Waiting) {
162
+ // static node
163
+ elements.map[nodeId].data.color = colorStatic;
164
+ }
165
+ cytoscapeData.value = { elements };
166
+ if (state === NodeState.Injected) {
167
+ await sleep(100);
168
+ elements.map[nodeId].data.color = colorStatic;
169
+ cytoscapeData.value = { elements };
170
+ }
171
+ };
172
+ const createCytoscape = () => {
173
+ try {
174
+ cy = cytoscape({
175
+ container: cytoscapeRef.value,
176
+ style: cyStyle,
177
+ layout: {
178
+ name: layout,
179
+ // fit: true,
180
+ // padding: 30,
181
+ // avoidOverlap: true,
182
+ },
183
+ });
184
+ cy.on("mouseup", storePositions);
185
+ cy.on("touchend", storePositions);
186
+ // cy.on("select", "node", callback);
187
+ // cy.on("select", "edge", callback);
188
+ //store.commit("setCytoscape", cy);
189
+ }
190
+ catch (error) {
191
+ console.error(error);
192
+ // store.commit("setCytoscape", null);
193
+ // error_msg.value = `${error}`;
194
+ }
195
+ };
196
+ const updateGraphData = async () => {
197
+ if (cy) {
198
+ cy.elements().remove();
199
+ cy.add(cytoscapeData.value.elements);
200
+ const name = cytoscapeData.value.elements.nodes.reduce((prevName, node) => {
201
+ if (node.position) {
202
+ return "preset";
203
+ }
204
+ return prevName;
205
+ }, layout);
206
+ console.log("layout", name);
207
+ cy.layout({ name }).run();
208
+ cy.fit();
209
+ if (name === layout) {
210
+ await sleep(400);
211
+ storePositions();
212
+ }
213
+ }
214
+ };
215
+ const storePositions = () => {
216
+ console.log("storePositions");
217
+ if (cy) {
218
+ cy.nodes().forEach((cynode) => {
219
+ const id = cynode.id();
220
+ const pos = cynode.position();
221
+ const node = cytoscapeData.value.elements.map[id];
222
+ node.position = pos;
223
+ });
224
+ }
225
+ };
226
+ const resetCytoscape = () => {
227
+ const elements = cytoscapeData.value.elements;
228
+ Object.keys(elements.map).forEach((nodeId) => {
229
+ const graph = selectedGraph.value;
230
+ const nodeData = graph.nodes[nodeId];
231
+ elements.map[nodeId].data.color = "value" in nodeData ? colorStatic : colorMap[NodeState.Waiting];
232
+ });
233
+ cytoscapeData.value = { elements };
234
+ };
235
+ watch(cytoscapeData, () => {
236
+ console.log("updated");
237
+ updateGraphData();
238
+ });
239
+ watch(selectedGraph, () => {
240
+ cytoscapeData.value = cytoscapeFromGraph(selectedGraph.value);
241
+ });
242
+ onMounted(() => {
243
+ createCytoscape();
244
+ updateGraphData();
245
+ });
246
+ const layoutCytoscape = (key) => {
247
+ if (cy) {
248
+ const positions = cy.nodes().map((node) => {
249
+ return {
250
+ id: node.id(),
251
+ position: node.position(),
252
+ };
253
+ });
254
+ console.log(JSON.stringify(positions));
255
+ localStorage.setItem("layoutData-" + key, JSON.stringify(positions));
256
+ }
257
+ };
258
+ const loadLayout = (key) => {
259
+ const savedLayoutData = localStorage.getItem("layoutData-" + key);
260
+ if (savedLayoutData) {
261
+ const positions = JSON.parse(savedLayoutData);
262
+ positions.forEach((data) => {
263
+ if (cy) {
264
+ const node = cy.getElementById(data.id);
265
+ if (node) {
266
+ node.position(data.position);
267
+ }
268
+ }
269
+ });
270
+ }
271
+ };
272
+ watch(zoomingEnabled, (value) => {
273
+ if (cy) {
274
+ cy.zoomingEnabled(value);
275
+ }
276
+ });
277
+ return {
278
+ cytoscapeRef,
279
+ updateCytoscape,
280
+ resetCytoscape,
281
+ layoutCytoscape,
282
+ loadLayout,
283
+ zoomingEnabled,
284
+ };
285
+ };
286
+
287
+ export { dataSourceNodeIds, inputs2dataSources, useCytoscape };
288
+ //# sourceMappingURL=bundle.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.esm.js","sources":["../src/composables/cytoscape.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{ref as e,watch as t,onMounted as a}from"vue";import{NodeState as o,isObject as l,sleep as n}from"graphai";import s from"cytoscape";import r from"cytoscape-klay";s.use(r);const i="klay",c="#88f",d=[{selector:"node",style:{"background-color":"data(color)",label:"data(id)",shape:e=>e.data("isStatic")?"rectangle":"roundrectangle",width:e=>{return null==(t=e.data("id"))?"50px":Math.max(50,8*t.length)+"px";var t},color:"#fff",height:"30px","text-valign":"center","text-halign":"center","font-size":"12px"}},{selector:"edge",style:{width:3,"line-color":"#888","target-arrow-color":"#888","target-arrow-shape":"triangle","curve-style":"straight","text-background-color":"#ffffff","text-background-opacity":.8,"text-background-shape":"rectangle","font-size":"10px"}},{selector:"edge[label]",style:{label:"data(label)"}},{selector:"edge[isUpdate]",style:{color:"#ddd","line-color":"#ddd","line-style":"dashed","curve-style":"unbundled-bezier","target-arrow-color":"#ddd"}}],u={[o.Waiting]:"#888",[o.Completed]:"#000",[o.Executing]:"#0f0","executing-server":"#FFC0CB",[o.Queued]:"#ff0",[o.Injected]:"#00f",[o.TimedOut]:"#f0f",[o.Failed]:"#f00",[o.Skipped]:"#0ff"},p=e=>{const t=e.slice(1).split(".");return{source:t.shift()||"",label:t.length?t.join("."):void 0}},f=e=>{if(Array.isArray(e))return e.map((e=>f(e))).flat();if(l(e))return Object.values(e).map((e=>f(e))).flat();if("string"==typeof e){const t=Array.from(e.matchAll(/\${(:[^}]+)}/g)).map((e=>e[1]));if(t.length>0)return f(t)}return e},g=e=>e.filter((e=>e.nodeId)).map((e=>e.nodeId)),m=e=>({elements:Object.keys(e.nodes||{}).reduce(((t,a)=>{const l=e.nodes[a],n="value"in l,s={data:{id:a,color:n?c:u[o.Waiting],isStatic:n}};if(t.nodes.push(s),t.map[a]=s,"inputs"in l&&f(l.inputs).forEach((e=>{if(":"===e[0]){const{source:o,label:l}=p(e);t.edges.push({data:{source:o,target:a,label:l}})}})),"update"in l&&l.update){const{source:e,label:o}=p(l.update);t.edges.push({data:{source:e,target:a,isUpdate:!0,label:o}})}return t}),{nodes:[],edges:[],map:{}})}),y=l=>{let r=null;const p=e(m(l.value??{nodes:{}})),f=e(),g=e(!0),y=async()=>{if(r){r.elements().remove(),r.add(p.value.elements);const e=p.value.elements.nodes.reduce(((e,t)=>t.position?"preset":e),i);console.log("layout",e),r.layout({name:e}).run(),r.fit(),e===i&&(await n(400),h())}},h=()=>{console.log("storePositions"),r&&r.nodes().forEach((e=>{const t=e.id(),a=e.position();p.value.elements.map[t].position=a}))};t(p,(()=>{console.log("updated"),y()})),t(l,(()=>{p.value=m(l.value)})),a((()=>{(()=>{try{r=s({container:f.value,style:d,layout:{name:i}}),r.on("mouseup",h),r.on("touchend",h)}catch(e){console.error(e)}})(),y()}));return t(g,(e=>{r&&r.zoomingEnabled(e)})),{cytoscapeRef:f,updateCytoscape:async(e,t)=>{[o.Completed,o.Waiting].includes(t)&&await n(100);const a=p.value.elements;a.map[e].data.color=u[t];const s=l.value,r=(s?.nodes??{})[e]??[];"agent"in r&&t===o.Queued&&(r.priority??0)>0?a.map[e].data.color="#f80":"value"in r&&t===o.Waiting&&(a.map[e].data.color=c),p.value={elements:a},t===o.Injected&&(await n(100),a.map[e].data.color=c,p.value={elements:a})},resetCytoscape:()=>{const e=p.value.elements;Object.keys(e.map).forEach((t=>{const a=l.value.nodes[t];e.map[t].data.color="value"in a?c:u[o.Waiting]})),p.value={elements:e}},layoutCytoscape:e=>{if(r){const t=r.nodes().map((e=>({id:e.id(),position:e.position()})));console.log(JSON.stringify(t)),localStorage.setItem("layoutData-"+e,JSON.stringify(t))}},loadLayout:e=>{const t=localStorage.getItem("layoutData-"+e);if(t){JSON.parse(t).forEach((e=>{if(r){const t=r.getElementById(e.id);t&&t.position(e.position)}}))}},zoomingEnabled:g}};export{g as dataSourceNodeIds,f as inputs2dataSources,y as useCytoscape};
2
+ //# sourceMappingURL=bundle.esm.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.esm.min.js","sources":["../src/composables/cytoscape.ts"],"sourcesContent":[null],"names":["cytoscape","use","klay","layout","colorStatic","cyStyle","selector","style","label","shape","ele","data","width","calcNodeWidth","Math","max","length","color","height","colorMap","NodeState","Waiting","Completed","Executing","Queued","Injected","TimedOut","Failed","Skipped","parseInput","input","ids","slice","split","source","shift","join","undefined","inputs2dataSources","inputs","Array","isArray","map","inp","flat","isObject","Object","values","templateMatch","from","matchAll","m","dataSourceNodeIds","sources","filter","nodeId","cytoscapeFromGraph","graph_data","elements","keys","nodes","reduce","tmp","node","isStatic","cyNode","id","push","forEach","edges","target","update","isUpdate","useCytoscape","selectedGraph","cy","cytoscapeData","ref","value","cytoscapeRef","zoomingEnabled","updateGraphData","async","remove","add","name","prevName","position","console","log","run","fit","sleep","storePositions","cynode","pos","watch","onMounted","container","on","error","createCytoscape","updateCytoscape","state","includes","graph","nodeData","priority","resetCytoscape","layoutCytoscape","key","positions","JSON","stringify","localStorage","setItem","loadLayout","savedLayoutData","getItem","parse","getElementById"],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue'), require('graphai'), require('cytoscape'), require('cytoscape-klay')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'vue', 'graphai', 'cytoscape', 'cytoscape-klay'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vue_cytoscape = {}, global.vue, global.graphai, global.cytoscape, global.klay));
5
+ })(this, (function (exports, vue, graphai, cytoscape, klay) { 'use strict';
6
+
7
+ cytoscape.use(klay);
8
+ const layout = "klay";
9
+ const colorPriority = "#f80";
10
+ const colorStatic = "#88f";
11
+ const calcNodeWidth = (label) => {
12
+ if (label === null || label === undefined) {
13
+ return "50px";
14
+ }
15
+ return Math.max(50, label.length * 8) + "px";
16
+ };
17
+ const cyStyle = [
18
+ {
19
+ selector: "node",
20
+ style: {
21
+ "background-color": "data(color)",
22
+ label: "data(id)",
23
+ shape: (ele) => (ele.data("isStatic") ? "rectangle" : "roundrectangle"),
24
+ width: (ele) => calcNodeWidth(ele.data("id")),
25
+ color: "#fff",
26
+ height: "30px",
27
+ "text-valign": "center",
28
+ "text-halign": "center",
29
+ "font-size": "12px",
30
+ },
31
+ },
32
+ {
33
+ selector: "edge",
34
+ style: {
35
+ width: 3,
36
+ "line-color": "#888",
37
+ "target-arrow-color": "#888",
38
+ "target-arrow-shape": "triangle",
39
+ "curve-style": "straight",
40
+ "text-background-color": "#ffffff",
41
+ "text-background-opacity": 0.8,
42
+ "text-background-shape": "rectangle",
43
+ "font-size": "10px",
44
+ },
45
+ },
46
+ {
47
+ selector: "edge[label]",
48
+ style: {
49
+ label: "data(label)",
50
+ },
51
+ },
52
+ {
53
+ selector: "edge[isUpdate]",
54
+ style: {
55
+ color: "#ddd",
56
+ "line-color": "#ddd",
57
+ "line-style": "dashed",
58
+ "curve-style": "unbundled-bezier",
59
+ "target-arrow-color": "#ddd",
60
+ },
61
+ },
62
+ ];
63
+ const colorMap = {
64
+ [graphai.NodeState.Waiting]: "#888",
65
+ [graphai.NodeState.Completed]: "#000",
66
+ [graphai.NodeState.Executing]: "#0f0",
67
+ ["executing-server"]: "#FFC0CB",
68
+ [graphai.NodeState.Queued]: "#ff0",
69
+ [graphai.NodeState.Injected]: "#00f",
70
+ [graphai.NodeState.TimedOut]: "#f0f",
71
+ [graphai.NodeState.Failed]: "#f00",
72
+ [graphai.NodeState.Skipped]: "#0ff",
73
+ };
74
+ const parseInput = (input) => {
75
+ // WARNING: Assuming the first character is always ":"
76
+ const ids = input.slice(1).split(".");
77
+ const source = ids.shift() || "";
78
+ const label = ids.length ? ids.join(".") : undefined;
79
+ return { source, label };
80
+ };
81
+ const inputs2dataSources = (inputs) => {
82
+ if (Array.isArray(inputs)) {
83
+ return inputs.map((inp) => inputs2dataSources(inp)).flat();
84
+ }
85
+ if (graphai.isObject(inputs)) {
86
+ return Object.values(inputs)
87
+ .map((input) => inputs2dataSources(input))
88
+ .flat();
89
+ }
90
+ if (typeof inputs === "string") {
91
+ const templateMatch = Array.from(inputs.matchAll(/\${(:[^}]+)}/g)).map((m) => m[1]);
92
+ if (templateMatch.length > 0) {
93
+ return inputs2dataSources(templateMatch);
94
+ }
95
+ }
96
+ return inputs;
97
+ };
98
+ const dataSourceNodeIds = (sources) => {
99
+ return sources.filter((source) => source.nodeId).map((source) => source.nodeId);
100
+ };
101
+ const cytoscapeFromGraph = (graph_data) => {
102
+ const elements = Object.keys(graph_data.nodes || {}).reduce((tmp, nodeId) => {
103
+ const node = graph_data.nodes[nodeId];
104
+ const isStatic = "value" in node;
105
+ const cyNode = {
106
+ data: {
107
+ id: nodeId,
108
+ color: isStatic ? colorStatic : colorMap[graphai.NodeState.Waiting],
109
+ isStatic,
110
+ },
111
+ };
112
+ tmp.nodes.push(cyNode);
113
+ tmp.map[nodeId] = cyNode;
114
+ if ("inputs" in node) {
115
+ // computed node
116
+ inputs2dataSources(node.inputs).forEach((input) => {
117
+ if (input[0] === ":") {
118
+ const { source, label } = parseInput(input);
119
+ tmp.edges.push({
120
+ data: {
121
+ source,
122
+ target: nodeId,
123
+ label,
124
+ },
125
+ });
126
+ }
127
+ });
128
+ }
129
+ if ("update" in node && node.update) {
130
+ // static node
131
+ const { source, label } = parseInput(node.update);
132
+ tmp.edges.push({
133
+ data: {
134
+ source,
135
+ target: nodeId,
136
+ isUpdate: true,
137
+ label,
138
+ },
139
+ });
140
+ }
141
+ return tmp;
142
+ }, { nodes: [], edges: [], map: {} });
143
+ return { elements };
144
+ };
145
+ const useCytoscape = (selectedGraph) => {
146
+ let cy = null;
147
+ const cytoscapeData = vue.ref(cytoscapeFromGraph(selectedGraph.value ?? { nodes: {} }));
148
+ const cytoscapeRef = vue.ref();
149
+ const zoomingEnabled = vue.ref(true);
150
+ const updateCytoscape = async (nodeId, state) => {
151
+ if ([graphai.NodeState.Completed, graphai.NodeState.Waiting].includes(state)) {
152
+ await graphai.sleep(100);
153
+ }
154
+ const elements = cytoscapeData.value.elements;
155
+ elements.map[nodeId].data.color = colorMap[state];
156
+ const graph = selectedGraph.value;
157
+ const nodeData = (graph?.nodes ?? {})[nodeId] ?? [];
158
+ if ("agent" in nodeData && state === graphai.NodeState.Queued && (nodeData.priority ?? 0) > 0) {
159
+ // computed node
160
+ elements.map[nodeId].data.color = colorPriority;
161
+ }
162
+ else if ("value" in nodeData && state === graphai.NodeState.Waiting) {
163
+ // static node
164
+ elements.map[nodeId].data.color = colorStatic;
165
+ }
166
+ cytoscapeData.value = { elements };
167
+ if (state === graphai.NodeState.Injected) {
168
+ await graphai.sleep(100);
169
+ elements.map[nodeId].data.color = colorStatic;
170
+ cytoscapeData.value = { elements };
171
+ }
172
+ };
173
+ const createCytoscape = () => {
174
+ try {
175
+ cy = cytoscape({
176
+ container: cytoscapeRef.value,
177
+ style: cyStyle,
178
+ layout: {
179
+ name: layout,
180
+ // fit: true,
181
+ // padding: 30,
182
+ // avoidOverlap: true,
183
+ },
184
+ });
185
+ cy.on("mouseup", storePositions);
186
+ cy.on("touchend", storePositions);
187
+ // cy.on("select", "node", callback);
188
+ // cy.on("select", "edge", callback);
189
+ //store.commit("setCytoscape", cy);
190
+ }
191
+ catch (error) {
192
+ console.error(error);
193
+ // store.commit("setCytoscape", null);
194
+ // error_msg.value = `${error}`;
195
+ }
196
+ };
197
+ const updateGraphData = async () => {
198
+ if (cy) {
199
+ cy.elements().remove();
200
+ cy.add(cytoscapeData.value.elements);
201
+ const name = cytoscapeData.value.elements.nodes.reduce((prevName, node) => {
202
+ if (node.position) {
203
+ return "preset";
204
+ }
205
+ return prevName;
206
+ }, layout);
207
+ console.log("layout", name);
208
+ cy.layout({ name }).run();
209
+ cy.fit();
210
+ if (name === layout) {
211
+ await graphai.sleep(400);
212
+ storePositions();
213
+ }
214
+ }
215
+ };
216
+ const storePositions = () => {
217
+ console.log("storePositions");
218
+ if (cy) {
219
+ cy.nodes().forEach((cynode) => {
220
+ const id = cynode.id();
221
+ const pos = cynode.position();
222
+ const node = cytoscapeData.value.elements.map[id];
223
+ node.position = pos;
224
+ });
225
+ }
226
+ };
227
+ const resetCytoscape = () => {
228
+ const elements = cytoscapeData.value.elements;
229
+ Object.keys(elements.map).forEach((nodeId) => {
230
+ const graph = selectedGraph.value;
231
+ const nodeData = graph.nodes[nodeId];
232
+ elements.map[nodeId].data.color = "value" in nodeData ? colorStatic : colorMap[graphai.NodeState.Waiting];
233
+ });
234
+ cytoscapeData.value = { elements };
235
+ };
236
+ vue.watch(cytoscapeData, () => {
237
+ console.log("updated");
238
+ updateGraphData();
239
+ });
240
+ vue.watch(selectedGraph, () => {
241
+ cytoscapeData.value = cytoscapeFromGraph(selectedGraph.value);
242
+ });
243
+ vue.onMounted(() => {
244
+ createCytoscape();
245
+ updateGraphData();
246
+ });
247
+ const layoutCytoscape = (key) => {
248
+ if (cy) {
249
+ const positions = cy.nodes().map((node) => {
250
+ return {
251
+ id: node.id(),
252
+ position: node.position(),
253
+ };
254
+ });
255
+ console.log(JSON.stringify(positions));
256
+ localStorage.setItem("layoutData-" + key, JSON.stringify(positions));
257
+ }
258
+ };
259
+ const loadLayout = (key) => {
260
+ const savedLayoutData = localStorage.getItem("layoutData-" + key);
261
+ if (savedLayoutData) {
262
+ const positions = JSON.parse(savedLayoutData);
263
+ positions.forEach((data) => {
264
+ if (cy) {
265
+ const node = cy.getElementById(data.id);
266
+ if (node) {
267
+ node.position(data.position);
268
+ }
269
+ }
270
+ });
271
+ }
272
+ };
273
+ vue.watch(zoomingEnabled, (value) => {
274
+ if (cy) {
275
+ cy.zoomingEnabled(value);
276
+ }
277
+ });
278
+ return {
279
+ cytoscapeRef,
280
+ updateCytoscape,
281
+ resetCytoscape,
282
+ layoutCytoscape,
283
+ loadLayout,
284
+ zoomingEnabled,
285
+ };
286
+ };
287
+
288
+ exports.dataSourceNodeIds = dataSourceNodeIds;
289
+ exports.inputs2dataSources = inputs2dataSources;
290
+ exports.useCytoscape = useCytoscape;
291
+
292
+ }));
293
+ //# sourceMappingURL=bundle.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.umd.js","sources":["../src/composables/cytoscape.ts"],"sourcesContent":[null],"names":["NodeState","isObject","ref","sleep","watch","onMounted"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "name": "@receptron/graphai_vue_cytoscape",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "main": "lib/cytoscape.js",
5
+ "module": "lib/bundle.esm.js",
6
+ "browser": "lib/bundle.umd.js",
5
7
  "files": [
6
8
  "./lib"
7
9
  ],
@@ -11,6 +13,7 @@
11
13
  "build_old": "run-p type-check \"build-only {@}\" --",
12
14
  "preview": "vite preview",
13
15
  "build-only": "vite build",
16
+ "rollup": " npx rollup -c",
14
17
  "type-check": "vue-tsc --build --force",
15
18
  "test": "echo nothing",
16
19
  "eslint": "eslint src",
@@ -34,6 +37,7 @@
34
37
  "@babel/types": "^7.26.0",
35
38
  "@rushstack/eslint-patch": "^1.8.0",
36
39
  "@tsconfig/node20": "^20.1.4",
40
+ "@types/cytoscape-klay": "^3.1.4",
37
41
  "@vitejs/plugin-vue": "^5.1.4",
38
42
  "@vue/tsconfig": "^0.5.1",
39
43
  "autoprefixer": "^10.4.19",