@linkdlab/funcnodes_react_flow 0.1.1 → 0.1.3
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/module/dist/css/style.css +43 -0
- package/module/dist/frontend/datarenderer/images.d.ts +12 -0
- package/module/dist/frontend/datarenderer/images.d.ts.map +1 -0
- package/module/dist/frontend/datarenderer/index.d.ts +17 -0
- package/module/dist/frontend/datarenderer/index.d.ts.map +1 -0
- package/module/dist/frontend/datarenderer/plotly.d.ts +15 -0
- package/module/dist/frontend/datarenderer/plotly.d.ts.map +1 -0
- package/module/dist/frontend/dialog.d.ts +18 -0
- package/module/dist/frontend/dialog.d.ts.map +1 -0
- package/module/dist/frontend/edge.d.ts +6 -0
- package/module/dist/frontend/edge.d.ts.map +1 -0
- package/module/dist/frontend/funcnodesreactflow/index.d.ts +7 -0
- package/module/dist/frontend/funcnodesreactflow/index.d.ts.map +1 -0
- package/module/dist/frontend/funcnodesreactflow/react_flow_layer.d.ts +6 -0
- package/module/dist/frontend/funcnodesreactflow/react_flow_layer.d.ts.map +1 -0
- package/module/dist/frontend/header/index.d.ts +5 -0
- package/module/dist/frontend/header/index.d.ts.map +1 -0
- package/module/dist/frontend/index.d.ts +4 -0
- package/module/dist/frontend/index.d.ts.map +1 -0
- package/module/dist/frontend/lib.d.ts +11 -0
- package/module/dist/frontend/lib.d.ts.map +1 -0
- package/module/{src/frontend/node/index.tsx → dist/frontend/node/index.d.ts} +3 -3
- package/module/dist/frontend/node/index.d.ts.map +1 -0
- package/module/dist/frontend/node/io/default_input_renderer.d.ts +12 -0
- package/module/dist/frontend/node/io/default_input_renderer.d.ts.map +1 -0
- package/module/dist/frontend/node/io/default_output_render.d.ts +7 -0
- package/module/dist/frontend/node/io/default_output_render.d.ts.map +1 -0
- package/module/dist/frontend/node/io/handle_renderer.d.ts +6 -0
- package/module/dist/frontend/node/io/handle_renderer.d.ts.map +1 -0
- package/module/{src/frontend/node/io/index.tsx → dist/frontend/node/io/index.d.ts} +4 -4
- package/module/dist/frontend/node/io/index.d.ts.map +1 -0
- package/module/dist/frontend/node/io/io.d.ts +17 -0
- package/module/dist/frontend/node/io/io.d.ts.map +1 -0
- package/module/dist/frontend/node/io/nodeinput.d.ts +7 -0
- package/module/dist/frontend/node/io/nodeinput.d.ts.map +1 -0
- package/module/dist/frontend/node/io/nodeoutput.d.ts +7 -0
- package/module/dist/frontend/node/io/nodeoutput.d.ts.map +1 -0
- package/module/dist/frontend/node/node.d.ts +21 -0
- package/module/dist/frontend/node/node.d.ts.map +1 -0
- package/module/dist/frontend/utils/colorpicker.d.ts +20 -0
- package/module/dist/frontend/utils/colorpicker.d.ts.map +1 -0
- package/module/dist/frontend/utils/jsondata.d.ts +7 -0
- package/module/dist/frontend/utils/jsondata.d.ts.map +1 -0
- package/module/dist/frontend/utils/table.d.ts +12 -0
- package/module/dist/frontend/utils/table.d.ts.map +1 -0
- package/module/dist/funcnodes/funcnodesworker.d.ts +73 -0
- package/module/dist/funcnodes/funcnodesworker.d.ts.map +1 -0
- package/module/{src/funcnodes/index.ts → dist/funcnodes/index.d.ts} +5 -4
- package/module/dist/funcnodes/index.d.ts.map +1 -0
- package/module/dist/funcnodes/websocketworker.d.ts +28 -0
- package/module/dist/funcnodes/websocketworker.d.ts.map +1 -0
- package/module/dist/funcnodes/workermanager.d.ts +33 -0
- package/module/dist/funcnodes/workermanager.d.ts.map +1 -0
- package/module/dist/index.d.ts +3 -0
- package/module/dist/index.d.ts.map +1 -0
- package/module/dist/index.js +4673 -0
- package/module/dist/states/edge.d.ts +8 -0
- package/module/dist/states/edge.d.ts.map +1 -0
- package/module/{src/states/edge.t.ts → dist/states/edge.t.d.ts} +17 -20
- package/module/dist/states/edge.t.d.ts.map +1 -0
- package/module/dist/states/fnrfzst.d.ts +11 -0
- package/module/dist/states/fnrfzst.d.ts.map +1 -0
- package/module/dist/states/fnrfzst.t.d.ts +101 -0
- package/module/dist/states/fnrfzst.t.d.ts.map +1 -0
- package/module/{src/states/index.ts → dist/states/index.d.ts} +8 -7
- package/module/dist/states/index.d.ts.map +1 -0
- package/module/dist/states/lib.d.ts +4 -0
- package/module/dist/states/lib.d.ts.map +1 -0
- package/module/dist/states/lib.t.d.ts +25 -0
- package/module/dist/states/lib.t.d.ts.map +1 -0
- package/module/dist/states/node.d.ts +5 -0
- package/module/dist/states/node.d.ts.map +1 -0
- package/module/{src/states/node.t.ts → dist/states/node.t.d.ts} +74 -98
- package/module/dist/states/node.t.d.ts.map +1 -0
- package/module/dist/states/nodeio.t.d.ts +68 -0
- package/module/dist/states/nodeio.t.d.ts.map +1 -0
- package/module/dist/states/nodespace.d.ts +4 -0
- package/module/dist/states/nodespace.d.ts.map +1 -0
- package/module/dist/states/nodespace.t.d.ts +17 -0
- package/module/dist/states/nodespace.t.d.ts.map +1 -0
- package/module/dist/states/reactflow.d.ts +9 -0
- package/module/dist/states/reactflow.d.ts.map +1 -0
- package/module/dist/states/reactflow.t.d.ts +12 -0
- package/module/dist/states/reactflow.t.d.ts.map +1 -0
- package/module/{src/types/rendering.t.ts → dist/types/rendering.t.d.ts} +11 -13
- package/module/dist/types/rendering.t.d.ts.map +1 -0
- package/module/{src/utils/index.ts → dist/utils/index.d.ts} +4 -4
- package/module/dist/utils/index.d.ts.map +1 -0
- package/module/dist/utils/objects.d.ts +20 -0
- package/module/dist/utils/objects.d.ts.map +1 -0
- package/package.json +32 -23
- package/app/public/favicon.ico +0 -0
- package/app/public/index.html +0 -43
- package/app/public/logo192.png +0 -0
- package/app/public/logo512.png +0 -0
- package/app/public/manifest.json +0 -25
- package/app/public/robots.txt +0 -3
- package/app/public/worker_manager +0 -1
- package/app/src/App.css +0 -38
- package/app/src/App.test.tsx +0 -9
- package/app/src/App.tsx +0 -22
- package/app/src/index.css +0 -13
- package/app/src/index.tsx +0 -19
- package/app/src/react-app-env.d.ts +0 -1
- package/app/src/reportWebVitals.ts +0 -15
- package/app/src/setupTests.ts +0 -5
- package/app/tsconfig.app.json +0 -10
- package/app/webpack.config.js +0 -143
- package/module/src/frontend/datarenderer/images.tsx +0 -28
- package/module/src/frontend/datarenderer/index.tsx +0 -54
- package/module/src/frontend/datarenderer/plotly.tsx +0 -82
- package/module/src/frontend/dialog.scss +0 -88
- package/module/src/frontend/dialog.tsx +0 -71
- package/module/src/frontend/edge.scss +0 -15
- package/module/src/frontend/edge.tsx +0 -32
- package/module/src/frontend/funcnodesreactflow/funcnodesreactflow.scss +0 -63
- package/module/src/frontend/funcnodesreactflow/index.tsx +0 -68
- package/module/src/frontend/funcnodesreactflow/react_flow_layer.tsx +0 -212
- package/module/src/frontend/header/header.scss +0 -48
- package/module/src/frontend/header/index.tsx +0 -269
- package/module/src/frontend/index.tsx +0 -4
- package/module/src/frontend/layout/htmlelements.scss +0 -63
- package/module/src/frontend/lib.scss +0 -157
- package/module/src/frontend/lib.tsx +0 -199
- package/module/src/frontend/node/io/default_input_renderer.tsx +0 -329
- package/module/src/frontend/node/io/default_output_render.tsx +0 -25
- package/module/src/frontend/node/io/handle_renderer.tsx +0 -94
- package/module/src/frontend/node/io/io.scss +0 -91
- package/module/src/frontend/node/io/io.tsx +0 -115
- package/module/src/frontend/node/io/nodeinput.tsx +0 -127
- package/module/src/frontend/node/io/nodeoutput.tsx +0 -43
- package/module/src/frontend/node/node.scss +0 -265
- package/module/src/frontend/node/node.tsx +0 -209
- package/module/src/frontend/utils/colorpicker.scss +0 -37
- package/module/src/frontend/utils/colorpicker.tsx +0 -342
- package/module/src/frontend/utils/jsondata.tsx +0 -19
- package/module/src/frontend/utils/table.scss +0 -22
- package/module/src/frontend/utils/table.tsx +0 -160
- package/module/src/funcnodes/funcnodesworker.ts +0 -456
- package/module/src/funcnodes/websocketworker.ts +0 -152
- package/module/src/funcnodes/workermanager.ts +0 -233
- package/module/src/index.tsx +0 -4
- package/module/src/states/edge.ts +0 -15
- package/module/src/states/fnrfzst.t.ts +0 -117
- package/module/src/states/fnrfzst.ts +0 -415
- package/module/src/states/lib.t.ts +0 -30
- package/module/src/states/lib.ts +0 -16
- package/module/src/states/node.ts +0 -46
- package/module/src/states/nodeio.t.ts +0 -103
- package/module/src/states/nodespace.t.ts +0 -57
- package/module/src/states/nodespace.ts +0 -90
- package/module/src/states/reactflow.t.ts +0 -27
- package/module/src/states/reactflow.ts +0 -49
- package/module/src/types/funcnodesreactflow.d.ts +0 -1
- package/module/src/utils/objects.ts +0 -131
- package/module/tsconfig.module.json +0 -15
- package/module/webpack.config.js +0 -140
- package/tsconfig.json +0 -18
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
import LibZustand from "./lib";
|
|
2
|
-
import NodeSpaceZustand from "./nodespace";
|
|
3
|
-
import { createNodeStore } from "./node";
|
|
4
|
-
import { PartialIOType } from "./nodeio.t";
|
|
5
|
-
import reactflowstore from "./reactflow";
|
|
6
|
-
import {
|
|
7
|
-
Node as RFNode,
|
|
8
|
-
NodeChange,
|
|
9
|
-
EdgeChange,
|
|
10
|
-
Edge as RFEdge,
|
|
11
|
-
Connection as RFConnection,
|
|
12
|
-
} from "reactflow";
|
|
13
|
-
import { NodeAction, NodeStore } from "./node.t";
|
|
14
|
-
import { deep_merge } from "../utils";
|
|
15
|
-
import { generate_edge_id } from "./edge";
|
|
16
|
-
import { EdgeAction } from "./edge.t";
|
|
17
|
-
import { create } from "zustand";
|
|
18
|
-
|
|
19
|
-
import type {
|
|
20
|
-
FuncNodesReactFlowZustandInterface,
|
|
21
|
-
ProgressState,
|
|
22
|
-
RenderOptions,
|
|
23
|
-
WorkersState,
|
|
24
|
-
} from "./fnrfzst.t";
|
|
25
|
-
import type { NodeType } from "./node.t";
|
|
26
|
-
|
|
27
|
-
const _fill_node_frontend = (
|
|
28
|
-
node: NodeType,
|
|
29
|
-
fnrf_instance?: FuncNodesReactFlowZustandInterface
|
|
30
|
-
) => {
|
|
31
|
-
const frontend = node.frontend || {};
|
|
32
|
-
if (!frontend.pos) {
|
|
33
|
-
if (
|
|
34
|
-
!fnrf_instance ||
|
|
35
|
-
!fnrf_instance.rf_instance ||
|
|
36
|
-
fnrf_instance.reactflowRef === null
|
|
37
|
-
) {
|
|
38
|
-
frontend.pos = [0, 0];
|
|
39
|
-
} else {
|
|
40
|
-
const ref = fnrf_instance.reactflowRef;
|
|
41
|
-
const rect = ref.getBoundingClientRect(); // Step 2: Get bounding rectangle
|
|
42
|
-
const centerX = rect.left + rect.width / 2; // Calculate center X
|
|
43
|
-
const centerY = rect.top + rect.height / 2; // Calculate center Y
|
|
44
|
-
const calcpos = fnrf_instance.rf_instance.screenToFlowPosition({
|
|
45
|
-
x: centerX,
|
|
46
|
-
y: centerY,
|
|
47
|
-
});
|
|
48
|
-
frontend.pos = [calcpos.x, calcpos.y];
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
if (!frontend.size) {
|
|
52
|
-
frontend.size = [200, 100];
|
|
53
|
-
}
|
|
54
|
-
if (!frontend.collapsed) {
|
|
55
|
-
frontend.collapsed = false;
|
|
56
|
-
}
|
|
57
|
-
node.frontend = frontend;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
const assert_react_flow_io = (
|
|
61
|
-
io: PartialIOType,
|
|
62
|
-
fnrf_instance?: FuncNodesReactFlowZustandInterface
|
|
63
|
-
): PartialIOType => {
|
|
64
|
-
if (io.value === "<NoValue>") {
|
|
65
|
-
io.value = undefined;
|
|
66
|
-
}
|
|
67
|
-
if (io.fullvalue === "<NoValue>") {
|
|
68
|
-
io.fullvalue = undefined;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (io.try_get_full_value === undefined) {
|
|
72
|
-
io.try_get_full_value = () => {
|
|
73
|
-
if (!fnrf_instance) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (io.node === undefined || io.id === undefined) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
fnrf_instance.worker?.get_io_full_value({ nid: io.node, ioid: io.id });
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return io;
|
|
84
|
-
};
|
|
85
|
-
const assert_reactflow_node = (
|
|
86
|
-
node: NodeType,
|
|
87
|
-
store: NodeStore,
|
|
88
|
-
fnrf_instance?: FuncNodesReactFlowZustandInterface
|
|
89
|
-
): NodeType & RFNode => {
|
|
90
|
-
_fill_node_frontend(node, fnrf_instance);
|
|
91
|
-
|
|
92
|
-
if (node.id === undefined) {
|
|
93
|
-
throw new Error("Node must have an id");
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
for (const io in node.io) {
|
|
97
|
-
node.io[io].node = node.id;
|
|
98
|
-
assert_react_flow_io(node.io[io], fnrf_instance);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const extendedNode: NodeType & RFNode = {
|
|
102
|
-
position: {
|
|
103
|
-
x: node.frontend.pos[0],
|
|
104
|
-
y: node.frontend.pos[1],
|
|
105
|
-
},
|
|
106
|
-
data: {
|
|
107
|
-
UseNodeStore: store,
|
|
108
|
-
},
|
|
109
|
-
type: "default",
|
|
110
|
-
...node,
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
return extendedNode;
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
const FuncNodesReactFlowZustand = (): FuncNodesReactFlowZustandInterface => {
|
|
117
|
-
/*
|
|
118
|
-
function that should be called when the remote node, e.g. in the python worker is performing an action
|
|
119
|
-
*/
|
|
120
|
-
const on_node_action = (action: NodeAction) => {
|
|
121
|
-
const rfstate = rfstore.getState();
|
|
122
|
-
|
|
123
|
-
switch (action.type) {
|
|
124
|
-
case "add":
|
|
125
|
-
if (action.from_remote) {
|
|
126
|
-
let store = ns.get_node(action.node.id, false);
|
|
127
|
-
|
|
128
|
-
if (!store) {
|
|
129
|
-
try {
|
|
130
|
-
store = createNodeStore(action.node);
|
|
131
|
-
ns.nodesstates.set(action.node.id, store);
|
|
132
|
-
} catch (e) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const new_ndoes = [
|
|
138
|
-
...rfstate.nodes,
|
|
139
|
-
assert_reactflow_node(action.node, store, iterf),
|
|
140
|
-
];
|
|
141
|
-
rfstore.setState({ nodes: new_ndoes });
|
|
142
|
-
}
|
|
143
|
-
break;
|
|
144
|
-
case "update":
|
|
145
|
-
// some action reset the error, so far trigger does, so errors should remove the in_trigger flag
|
|
146
|
-
if (action.node.in_trigger) {
|
|
147
|
-
action.node.error = undefined;
|
|
148
|
-
}
|
|
149
|
-
if (action.from_remote) {
|
|
150
|
-
const store = ns.get_node(action.id) as NodeStore;
|
|
151
|
-
|
|
152
|
-
if (action.node.io) {
|
|
153
|
-
for (const io in action.node.io) {
|
|
154
|
-
const ioobj = action.node.io[io] as PartialIOType;
|
|
155
|
-
// check if value in io, undefined is a valid value
|
|
156
|
-
if (ioobj.hasOwnProperty("value")) {
|
|
157
|
-
if (ioobj.value === undefined) {
|
|
158
|
-
ioobj.value = null;
|
|
159
|
-
} else if (ioobj.value === "<NoValue>") {
|
|
160
|
-
ioobj.value = undefined;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const state = store.getState();
|
|
167
|
-
const { new_obj, change } = deep_merge(state, action.node);
|
|
168
|
-
|
|
169
|
-
if (change) {
|
|
170
|
-
if (action.node.io) {
|
|
171
|
-
for (const io in action.node.io) {
|
|
172
|
-
// if fullvalue is in the update data, set to fullvalue otherwise set to undefined
|
|
173
|
-
new_obj.io[io].fullvalue = action.node.io[io]?.fullvalue;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
assert_reactflow_node(new_obj, store, iterf);
|
|
178
|
-
|
|
179
|
-
store.setState(new_obj);
|
|
180
|
-
}
|
|
181
|
-
} else {
|
|
182
|
-
if (iterf.worker) {
|
|
183
|
-
iterf.worker.update_node(action);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
break;
|
|
187
|
-
case "delete":
|
|
188
|
-
if (action.from_remote) {
|
|
189
|
-
rfstore.getState().onNodesChange([
|
|
190
|
-
{
|
|
191
|
-
type: "remove",
|
|
192
|
-
id: action.id,
|
|
193
|
-
},
|
|
194
|
-
]);
|
|
195
|
-
} else {
|
|
196
|
-
iterf.worker?.remove_node(action.id);
|
|
197
|
-
}
|
|
198
|
-
break;
|
|
199
|
-
case "error":
|
|
200
|
-
console.error("Error", action);
|
|
201
|
-
on_node_action({
|
|
202
|
-
type: "update",
|
|
203
|
-
id: action.id,
|
|
204
|
-
node: {
|
|
205
|
-
in_trigger: false,
|
|
206
|
-
error: action.error,
|
|
207
|
-
},
|
|
208
|
-
from_remote: true,
|
|
209
|
-
});
|
|
210
|
-
break;
|
|
211
|
-
|
|
212
|
-
case "trigger":
|
|
213
|
-
if (action.from_remote) {
|
|
214
|
-
on_node_action({
|
|
215
|
-
type: "update",
|
|
216
|
-
id: action.id,
|
|
217
|
-
node: {
|
|
218
|
-
in_trigger: true,
|
|
219
|
-
error: undefined,
|
|
220
|
-
},
|
|
221
|
-
from_remote: true,
|
|
222
|
-
});
|
|
223
|
-
} else {
|
|
224
|
-
iterf.worker?.trigger_node(action.id);
|
|
225
|
-
}
|
|
226
|
-
break;
|
|
227
|
-
default:
|
|
228
|
-
console.error("Unknown node action", action);
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
const on_edge_action = (action: EdgeAction) => {
|
|
233
|
-
const rfstate = rfstore.getState();
|
|
234
|
-
|
|
235
|
-
switch (action.type) {
|
|
236
|
-
case "add":
|
|
237
|
-
if (action.from_remote) {
|
|
238
|
-
const edges = rfstate.edges;
|
|
239
|
-
const new_edge_id = generate_edge_id(action);
|
|
240
|
-
|
|
241
|
-
//cehck if edge already exists including reversed
|
|
242
|
-
if (edges.some((e) => e.id === new_edge_id)) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
const new_edge: RFEdge = {
|
|
246
|
-
id: new_edge_id,
|
|
247
|
-
source: action.src_nid,
|
|
248
|
-
target: action.trg_nid,
|
|
249
|
-
sourceHandle: action.src_ioid,
|
|
250
|
-
targetHandle: action.trg_ioid,
|
|
251
|
-
className: "funcnodes-edge animated",
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
rfstore.setState({ edges: [...edges, new_edge] });
|
|
255
|
-
} else {
|
|
256
|
-
}
|
|
257
|
-
break;
|
|
258
|
-
|
|
259
|
-
case "delete":
|
|
260
|
-
if (action.from_remote) {
|
|
261
|
-
const edges = rfstate.edges;
|
|
262
|
-
const del_edge_id = generate_edge_id(action);
|
|
263
|
-
const new_edges = edges.filter((edge) => edge.id !== del_edge_id);
|
|
264
|
-
rfstore.setState({ edges: new_edges });
|
|
265
|
-
} else {
|
|
266
|
-
}
|
|
267
|
-
break;
|
|
268
|
-
default:
|
|
269
|
-
console.error("Unknown edge action", action);
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
/*
|
|
273
|
-
on_node_cahnge is called by react flow when a note change event is fired
|
|
274
|
-
should update the local state if something changed
|
|
275
|
-
*/
|
|
276
|
-
const on_node_change = (nodechange: NodeChange[]) => {
|
|
277
|
-
for (const change of nodechange) {
|
|
278
|
-
switch (change.type) {
|
|
279
|
-
case "position":
|
|
280
|
-
if (change.position) {
|
|
281
|
-
on_node_action({
|
|
282
|
-
type: "update",
|
|
283
|
-
id: change.id,
|
|
284
|
-
node: {
|
|
285
|
-
frontend: { pos: [change.position.x, change.position.y] },
|
|
286
|
-
},
|
|
287
|
-
from_remote: false,
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
break;
|
|
291
|
-
case "dimensions":
|
|
292
|
-
if (change.dimensions) {
|
|
293
|
-
on_node_action({
|
|
294
|
-
type: "update",
|
|
295
|
-
id: change.id,
|
|
296
|
-
node: {
|
|
297
|
-
frontend: {
|
|
298
|
-
size: [change.dimensions.width, change.dimensions.height],
|
|
299
|
-
},
|
|
300
|
-
},
|
|
301
|
-
from_remote: false,
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
};
|
|
308
|
-
|
|
309
|
-
const on_edge_change = (edgechange: EdgeChange[]) => {};
|
|
310
|
-
|
|
311
|
-
const on_connect = (connection: RFConnection) => {
|
|
312
|
-
if (
|
|
313
|
-
connection.source === null ||
|
|
314
|
-
connection.target === null ||
|
|
315
|
-
connection.sourceHandle === null ||
|
|
316
|
-
connection.targetHandle === null ||
|
|
317
|
-
!iterf.worker
|
|
318
|
-
) {
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
iterf.worker.add_edge({
|
|
322
|
-
src_nid: connection.source,
|
|
323
|
-
src_ioid: connection.sourceHandle,
|
|
324
|
-
trg_nid: connection.target,
|
|
325
|
-
trg_ioid: connection.targetHandle,
|
|
326
|
-
replace: true,
|
|
327
|
-
});
|
|
328
|
-
};
|
|
329
|
-
|
|
330
|
-
const rfstore = reactflowstore({
|
|
331
|
-
on_node_change,
|
|
332
|
-
on_edge_change,
|
|
333
|
-
on_connect,
|
|
334
|
-
});
|
|
335
|
-
const ns = NodeSpaceZustand({});
|
|
336
|
-
const lib = LibZustand();
|
|
337
|
-
|
|
338
|
-
const clear_all = () => {
|
|
339
|
-
iterf.worker?.disconnect();
|
|
340
|
-
iterf.worker = undefined;
|
|
341
|
-
iterf.workermanager?.setWorker(undefined);
|
|
342
|
-
iterf.lib.libstate.getState().set({ shelves: [] });
|
|
343
|
-
iterf.nodespace.nodesstates.clear();
|
|
344
|
-
iterf.useReactFlowStore.setState({ nodes: [], edges: [] });
|
|
345
|
-
iterf.auto_progress();
|
|
346
|
-
};
|
|
347
|
-
const iterf: FuncNodesReactFlowZustandInterface = {
|
|
348
|
-
lib: lib,
|
|
349
|
-
workermanager: undefined,
|
|
350
|
-
workers: create<WorkersState>((set, get) => ({})),
|
|
351
|
-
render_options: create<RenderOptions>((set, get) => ({})),
|
|
352
|
-
progress_state: create<ProgressState>((set, get) => ({
|
|
353
|
-
message: "please select worker",
|
|
354
|
-
status: "info",
|
|
355
|
-
progress: 0,
|
|
356
|
-
blocking: false,
|
|
357
|
-
})),
|
|
358
|
-
update_render_options: (options: RenderOptions) => {
|
|
359
|
-
const current = iterf.render_options.getState();
|
|
360
|
-
const { new_obj, change } = deep_merge(current, options);
|
|
361
|
-
if (change) {
|
|
362
|
-
iterf.render_options.setState(new_obj);
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
worker: undefined,
|
|
366
|
-
nodespace: ns,
|
|
367
|
-
useReactFlowStore: rfstore,
|
|
368
|
-
on_node_action: on_node_action,
|
|
369
|
-
on_edge_action: on_edge_action,
|
|
370
|
-
reactflowRef: null,
|
|
371
|
-
clear_all: clear_all,
|
|
372
|
-
set_progress: (progress: ProgressState) => {
|
|
373
|
-
if (progress.message === "") {
|
|
374
|
-
return iterf.auto_progress();
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
const prev_state = iterf.progress_state.getState();
|
|
378
|
-
const { new_obj, change } = deep_merge<ProgressState>(
|
|
379
|
-
prev_state,
|
|
380
|
-
progress
|
|
381
|
-
);
|
|
382
|
-
if (change) {
|
|
383
|
-
iterf.progress_state.setState(new_obj);
|
|
384
|
-
}
|
|
385
|
-
},
|
|
386
|
-
auto_progress: () => {
|
|
387
|
-
if (iterf.worker === undefined) {
|
|
388
|
-
return iterf.set_progress({
|
|
389
|
-
progress: 0,
|
|
390
|
-
message: "please select worker",
|
|
391
|
-
status: "error",
|
|
392
|
-
blocking: false,
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
if (!iterf.worker.is_open) {
|
|
396
|
-
return iterf.set_progress({
|
|
397
|
-
progress: 0,
|
|
398
|
-
message: "connecting to worker",
|
|
399
|
-
status: "info",
|
|
400
|
-
blocking: true,
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
iterf.set_progress({
|
|
404
|
-
progress: 1,
|
|
405
|
-
message: "running",
|
|
406
|
-
status: "info",
|
|
407
|
-
blocking: false,
|
|
408
|
-
});
|
|
409
|
-
},
|
|
410
|
-
};
|
|
411
|
-
return iterf;
|
|
412
|
-
};
|
|
413
|
-
|
|
414
|
-
export default FuncNodesReactFlowZustand;
|
|
415
|
-
export { LibZustand, NodeSpaceZustand, assert_reactflow_node };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { useStore, create, UseBoundStore, StoreApi } from "zustand";
|
|
2
|
-
|
|
3
|
-
type LibNode = {
|
|
4
|
-
node_id: string;
|
|
5
|
-
description?: string;
|
|
6
|
-
node_name?: string;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
type Shelf = {
|
|
10
|
-
name: string;
|
|
11
|
-
description?: string;
|
|
12
|
-
nodes: LibNode[];
|
|
13
|
-
subshelves: Shelf[];
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
type LibType = {
|
|
17
|
-
shelves: Shelf[];
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
interface LibState {
|
|
21
|
-
state: LibType;
|
|
22
|
-
set: (state: LibType) => void;
|
|
23
|
-
get: () => LibType;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
interface LibZustandInterface {
|
|
27
|
-
libstate: UseBoundStore<StoreApi<LibState>>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export type { LibZustandInterface, LibState, LibType, Shelf, LibNode };
|
package/module/src/states/lib.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { create } from "zustand";
|
|
2
|
-
import { LibType, LibZustandInterface, LibState } from "./lib.t";
|
|
3
|
-
|
|
4
|
-
const LibZustand = (): LibZustandInterface => {
|
|
5
|
-
return {
|
|
6
|
-
libstate: create<LibState>((set, get) => ({
|
|
7
|
-
state: {
|
|
8
|
-
shelves: [],
|
|
9
|
-
},
|
|
10
|
-
set: (state: LibType) => set({ state: state }),
|
|
11
|
-
get: () => get().state,
|
|
12
|
-
})),
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export default LibZustand;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { useStore, create, UseBoundStore, StoreApi } from "zustand";
|
|
2
|
-
import { deep_merge } from "../utils";
|
|
3
|
-
import { NodeType, PartialNodeType, NodeStore } from "./node.t";
|
|
4
|
-
import { IOType } from "./nodeio.t";
|
|
5
|
-
const dummy_node: NodeType = {
|
|
6
|
-
id: "dummy",
|
|
7
|
-
node_name: "dummy",
|
|
8
|
-
frontend: {
|
|
9
|
-
pos: [0, 0],
|
|
10
|
-
size: [200, 100],
|
|
11
|
-
collapsed: false,
|
|
12
|
-
},
|
|
13
|
-
io: {},
|
|
14
|
-
name: "dummy",
|
|
15
|
-
in_trigger: false,
|
|
16
|
-
io_order: [],
|
|
17
|
-
};
|
|
18
|
-
const assert_full_node = (node: PartialNodeType): NodeType => {
|
|
19
|
-
if (!node.id) {
|
|
20
|
-
throw new Error("Node must have an id");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const { new_obj } = deep_merge(dummy_node, node);
|
|
24
|
-
return new_obj;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const createNodeStore = (node: NodeType): NodeStore => {
|
|
28
|
-
// check if node is Object
|
|
29
|
-
|
|
30
|
-
if (node.io === undefined) {
|
|
31
|
-
node.io = {};
|
|
32
|
-
}
|
|
33
|
-
if (Array.isArray(node.io)) {
|
|
34
|
-
node.io_order = node.io.map((io) => io.id);
|
|
35
|
-
const new_io: { [key: string]: IOType } = {};
|
|
36
|
-
for (const io of node.io) {
|
|
37
|
-
new_io[io.id] = io;
|
|
38
|
-
}
|
|
39
|
-
node.io = new_io;
|
|
40
|
-
} else {
|
|
41
|
-
node.io_order = Object.keys(node.io);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return create<NodeType>((set, get) => node);
|
|
45
|
-
};
|
|
46
|
-
export { createNodeStore, assert_full_node };
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { BaseRenderOptions } from "../types/rendering.t";
|
|
2
|
-
import { DeepPartial } from "../utils";
|
|
3
|
-
interface AllOf {
|
|
4
|
-
allOf: SerializedType[];
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
interface AnyOf {
|
|
8
|
-
anyOf: SerializedType[];
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
interface ArrayOf {
|
|
12
|
-
type: "array";
|
|
13
|
-
items: SerializedType;
|
|
14
|
-
uniqueItems: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface DictOf {
|
|
18
|
-
type: "object";
|
|
19
|
-
keys: SerializedType;
|
|
20
|
-
values: SerializedType;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
interface EnumOf {
|
|
24
|
-
type: "enum";
|
|
25
|
-
values: (number | string | boolean | null)[];
|
|
26
|
-
keys: string[];
|
|
27
|
-
nullable: boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
interface TypeOf {
|
|
31
|
-
type: "type";
|
|
32
|
-
value: SerializedType;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// SerializedType represents a union of different possible types.
|
|
36
|
-
type SerializedType =
|
|
37
|
-
| string
|
|
38
|
-
| AllOf
|
|
39
|
-
| AnyOf
|
|
40
|
-
| ArrayOf
|
|
41
|
-
| DictOf
|
|
42
|
-
| EnumOf
|
|
43
|
-
| TypeOf;
|
|
44
|
-
|
|
45
|
-
interface IORenderOptions extends BaseRenderOptions {
|
|
46
|
-
step?: number;
|
|
47
|
-
set_default?: boolean;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
interface IOValueOptions {
|
|
51
|
-
min?: number;
|
|
52
|
-
max?: number;
|
|
53
|
-
step?: number;
|
|
54
|
-
options?: (string | number)[] | EnumOf;
|
|
55
|
-
colorspace?: string;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
interface IOType {
|
|
59
|
-
connected: boolean;
|
|
60
|
-
does_trigger: boolean;
|
|
61
|
-
full_id: string;
|
|
62
|
-
id: string;
|
|
63
|
-
is_input: boolean;
|
|
64
|
-
name: string;
|
|
65
|
-
node: string;
|
|
66
|
-
type: SerializedType;
|
|
67
|
-
value: any;
|
|
68
|
-
fullvalue?: any;
|
|
69
|
-
render_options?: IORenderOptions;
|
|
70
|
-
value_options?: IOValueOptions;
|
|
71
|
-
valuepreview_type?: string;
|
|
72
|
-
try_get_full_value: () => void;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
type OutputRendererType = ({ io }: { io: IOType }) => JSX.Element;
|
|
76
|
-
|
|
77
|
-
interface InputRendererProps {
|
|
78
|
-
io: IOType;
|
|
79
|
-
inputconverter: (v: any) => any;
|
|
80
|
-
}
|
|
81
|
-
type InputRendererType = ({
|
|
82
|
-
io,
|
|
83
|
-
inputconverter,
|
|
84
|
-
}: InputRendererProps) => JSX.Element;
|
|
85
|
-
|
|
86
|
-
type PartialIOType = DeepPartial<IOType>;
|
|
87
|
-
|
|
88
|
-
export type {
|
|
89
|
-
AllOf,
|
|
90
|
-
AnyOf,
|
|
91
|
-
ArrayOf,
|
|
92
|
-
DictOf,
|
|
93
|
-
EnumOf,
|
|
94
|
-
TypeOf,
|
|
95
|
-
SerializedType,
|
|
96
|
-
IORenderOptions,
|
|
97
|
-
IOValueOptions,
|
|
98
|
-
IOType,
|
|
99
|
-
OutputRendererType,
|
|
100
|
-
InputRendererProps,
|
|
101
|
-
InputRendererType,
|
|
102
|
-
PartialIOType,
|
|
103
|
-
};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { NodeStore } from "./node.t";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Interface for the NodeSpaceZustand state management.
|
|
5
|
-
* This interface is used to define the shape of the state and the actions that can be performed on it.
|
|
6
|
-
*/
|
|
7
|
-
interface NodeSpaceZustandInterface {
|
|
8
|
-
// A Map object that holds NodeStore objects. The key is a string (node id), and the value is a NodeStore.
|
|
9
|
-
nodesstates: Map<string, NodeStore>;
|
|
10
|
-
|
|
11
|
-
get_node: (nid: string, raise?: boolean) => NodeStore | undefined;
|
|
12
|
-
|
|
13
|
-
// A function to add a new node to the nodesstates Map. It takes a NodeType object as a parameter.
|
|
14
|
-
// add_node: ({
|
|
15
|
-
// node,
|
|
16
|
-
// from_remote,
|
|
17
|
-
// }: {
|
|
18
|
-
// node: NodeType;
|
|
19
|
-
// from_remote: boolean;
|
|
20
|
-
// }) => void;
|
|
21
|
-
|
|
22
|
-
// // A function to update an existing node in the nodesstates Map.
|
|
23
|
-
// // It takes a node id (string) and a PartialNodeType object (which contains the properties to be updated) as parameters.
|
|
24
|
-
// update_node: ({
|
|
25
|
-
// nid,
|
|
26
|
-
// node,
|
|
27
|
-
// from_remote,
|
|
28
|
-
// }: {
|
|
29
|
-
// nid: string;
|
|
30
|
-
// node: PartialNodeType;
|
|
31
|
-
// from_remote: boolean;
|
|
32
|
-
// }) => void;
|
|
33
|
-
|
|
34
|
-
// set_value: ({
|
|
35
|
-
// node,
|
|
36
|
-
// io,
|
|
37
|
-
// value,
|
|
38
|
-
// set_default,
|
|
39
|
-
// }: {
|
|
40
|
-
// node: string;
|
|
41
|
-
// io: string;
|
|
42
|
-
// value: any;
|
|
43
|
-
// set_default?: boolean | undefined;
|
|
44
|
-
// }) => void;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Interface for the NodeSpaceZustandProps.
|
|
49
|
-
* This interface is used to define the properties that can be passed to the NodeSpaceZustand component.
|
|
50
|
-
*/
|
|
51
|
-
interface NodeSpaceZustandProps {
|
|
52
|
-
// Optional callback function that is invoked when a node action occurs.
|
|
53
|
-
// The function takes a NodeAction object as a parameter.
|
|
54
|
-
// on_node_action?: (action: NodeAction) => void;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export type { NodeSpaceZustandProps, NodeSpaceZustandInterface };
|