@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.
Files changed (158) hide show
  1. package/module/dist/css/style.css +43 -0
  2. package/module/dist/frontend/datarenderer/images.d.ts +12 -0
  3. package/module/dist/frontend/datarenderer/images.d.ts.map +1 -0
  4. package/module/dist/frontend/datarenderer/index.d.ts +17 -0
  5. package/module/dist/frontend/datarenderer/index.d.ts.map +1 -0
  6. package/module/dist/frontend/datarenderer/plotly.d.ts +15 -0
  7. package/module/dist/frontend/datarenderer/plotly.d.ts.map +1 -0
  8. package/module/dist/frontend/dialog.d.ts +18 -0
  9. package/module/dist/frontend/dialog.d.ts.map +1 -0
  10. package/module/dist/frontend/edge.d.ts +6 -0
  11. package/module/dist/frontend/edge.d.ts.map +1 -0
  12. package/module/dist/frontend/funcnodesreactflow/index.d.ts +7 -0
  13. package/module/dist/frontend/funcnodesreactflow/index.d.ts.map +1 -0
  14. package/module/dist/frontend/funcnodesreactflow/react_flow_layer.d.ts +6 -0
  15. package/module/dist/frontend/funcnodesreactflow/react_flow_layer.d.ts.map +1 -0
  16. package/module/dist/frontend/header/index.d.ts +5 -0
  17. package/module/dist/frontend/header/index.d.ts.map +1 -0
  18. package/module/dist/frontend/index.d.ts +4 -0
  19. package/module/dist/frontend/index.d.ts.map +1 -0
  20. package/module/dist/frontend/lib.d.ts +11 -0
  21. package/module/dist/frontend/lib.d.ts.map +1 -0
  22. package/module/{src/frontend/node/index.tsx → dist/frontend/node/index.d.ts} +3 -3
  23. package/module/dist/frontend/node/index.d.ts.map +1 -0
  24. package/module/dist/frontend/node/io/default_input_renderer.d.ts +12 -0
  25. package/module/dist/frontend/node/io/default_input_renderer.d.ts.map +1 -0
  26. package/module/dist/frontend/node/io/default_output_render.d.ts +7 -0
  27. package/module/dist/frontend/node/io/default_output_render.d.ts.map +1 -0
  28. package/module/dist/frontend/node/io/handle_renderer.d.ts +6 -0
  29. package/module/dist/frontend/node/io/handle_renderer.d.ts.map +1 -0
  30. package/module/{src/frontend/node/io/index.tsx → dist/frontend/node/io/index.d.ts} +4 -4
  31. package/module/dist/frontend/node/io/index.d.ts.map +1 -0
  32. package/module/dist/frontend/node/io/io.d.ts +17 -0
  33. package/module/dist/frontend/node/io/io.d.ts.map +1 -0
  34. package/module/dist/frontend/node/io/nodeinput.d.ts +7 -0
  35. package/module/dist/frontend/node/io/nodeinput.d.ts.map +1 -0
  36. package/module/dist/frontend/node/io/nodeoutput.d.ts +7 -0
  37. package/module/dist/frontend/node/io/nodeoutput.d.ts.map +1 -0
  38. package/module/dist/frontend/node/node.d.ts +21 -0
  39. package/module/dist/frontend/node/node.d.ts.map +1 -0
  40. package/module/dist/frontend/utils/colorpicker.d.ts +20 -0
  41. package/module/dist/frontend/utils/colorpicker.d.ts.map +1 -0
  42. package/module/dist/frontend/utils/jsondata.d.ts +7 -0
  43. package/module/dist/frontend/utils/jsondata.d.ts.map +1 -0
  44. package/module/dist/frontend/utils/table.d.ts +12 -0
  45. package/module/dist/frontend/utils/table.d.ts.map +1 -0
  46. package/module/dist/funcnodes/funcnodesworker.d.ts +73 -0
  47. package/module/dist/funcnodes/funcnodesworker.d.ts.map +1 -0
  48. package/module/{src/funcnodes/index.ts → dist/funcnodes/index.d.ts} +5 -4
  49. package/module/dist/funcnodes/index.d.ts.map +1 -0
  50. package/module/dist/funcnodes/websocketworker.d.ts +28 -0
  51. package/module/dist/funcnodes/websocketworker.d.ts.map +1 -0
  52. package/module/dist/funcnodes/workermanager.d.ts +33 -0
  53. package/module/dist/funcnodes/workermanager.d.ts.map +1 -0
  54. package/module/dist/index.d.ts +3 -0
  55. package/module/dist/index.d.ts.map +1 -0
  56. package/module/dist/index.js +4673 -0
  57. package/module/dist/states/edge.d.ts +8 -0
  58. package/module/dist/states/edge.d.ts.map +1 -0
  59. package/module/{src/states/edge.t.ts → dist/states/edge.t.d.ts} +17 -20
  60. package/module/dist/states/edge.t.d.ts.map +1 -0
  61. package/module/dist/states/fnrfzst.d.ts +11 -0
  62. package/module/dist/states/fnrfzst.d.ts.map +1 -0
  63. package/module/dist/states/fnrfzst.t.d.ts +101 -0
  64. package/module/dist/states/fnrfzst.t.d.ts.map +1 -0
  65. package/module/{src/states/index.ts → dist/states/index.d.ts} +8 -7
  66. package/module/dist/states/index.d.ts.map +1 -0
  67. package/module/dist/states/lib.d.ts +4 -0
  68. package/module/dist/states/lib.d.ts.map +1 -0
  69. package/module/dist/states/lib.t.d.ts +25 -0
  70. package/module/dist/states/lib.t.d.ts.map +1 -0
  71. package/module/dist/states/node.d.ts +5 -0
  72. package/module/dist/states/node.d.ts.map +1 -0
  73. package/module/{src/states/node.t.ts → dist/states/node.t.d.ts} +74 -98
  74. package/module/dist/states/node.t.d.ts.map +1 -0
  75. package/module/dist/states/nodeio.t.d.ts +68 -0
  76. package/module/dist/states/nodeio.t.d.ts.map +1 -0
  77. package/module/dist/states/nodespace.d.ts +4 -0
  78. package/module/dist/states/nodespace.d.ts.map +1 -0
  79. package/module/dist/states/nodespace.t.d.ts +17 -0
  80. package/module/dist/states/nodespace.t.d.ts.map +1 -0
  81. package/module/dist/states/reactflow.d.ts +9 -0
  82. package/module/dist/states/reactflow.d.ts.map +1 -0
  83. package/module/dist/states/reactflow.t.d.ts +12 -0
  84. package/module/dist/states/reactflow.t.d.ts.map +1 -0
  85. package/module/{src/types/rendering.t.ts → dist/types/rendering.t.d.ts} +11 -13
  86. package/module/dist/types/rendering.t.d.ts.map +1 -0
  87. package/module/{src/utils/index.ts → dist/utils/index.d.ts} +4 -4
  88. package/module/dist/utils/index.d.ts.map +1 -0
  89. package/module/dist/utils/objects.d.ts +20 -0
  90. package/module/dist/utils/objects.d.ts.map +1 -0
  91. package/package.json +32 -23
  92. package/app/public/favicon.ico +0 -0
  93. package/app/public/index.html +0 -43
  94. package/app/public/logo192.png +0 -0
  95. package/app/public/logo512.png +0 -0
  96. package/app/public/manifest.json +0 -25
  97. package/app/public/robots.txt +0 -3
  98. package/app/public/worker_manager +0 -1
  99. package/app/src/App.css +0 -38
  100. package/app/src/App.test.tsx +0 -9
  101. package/app/src/App.tsx +0 -22
  102. package/app/src/index.css +0 -13
  103. package/app/src/index.tsx +0 -19
  104. package/app/src/react-app-env.d.ts +0 -1
  105. package/app/src/reportWebVitals.ts +0 -15
  106. package/app/src/setupTests.ts +0 -5
  107. package/app/tsconfig.app.json +0 -10
  108. package/app/webpack.config.js +0 -143
  109. package/module/src/frontend/datarenderer/images.tsx +0 -28
  110. package/module/src/frontend/datarenderer/index.tsx +0 -54
  111. package/module/src/frontend/datarenderer/plotly.tsx +0 -82
  112. package/module/src/frontend/dialog.scss +0 -88
  113. package/module/src/frontend/dialog.tsx +0 -71
  114. package/module/src/frontend/edge.scss +0 -15
  115. package/module/src/frontend/edge.tsx +0 -32
  116. package/module/src/frontend/funcnodesreactflow/funcnodesreactflow.scss +0 -63
  117. package/module/src/frontend/funcnodesreactflow/index.tsx +0 -68
  118. package/module/src/frontend/funcnodesreactflow/react_flow_layer.tsx +0 -212
  119. package/module/src/frontend/header/header.scss +0 -48
  120. package/module/src/frontend/header/index.tsx +0 -269
  121. package/module/src/frontend/index.tsx +0 -4
  122. package/module/src/frontend/layout/htmlelements.scss +0 -63
  123. package/module/src/frontend/lib.scss +0 -157
  124. package/module/src/frontend/lib.tsx +0 -199
  125. package/module/src/frontend/node/io/default_input_renderer.tsx +0 -329
  126. package/module/src/frontend/node/io/default_output_render.tsx +0 -25
  127. package/module/src/frontend/node/io/handle_renderer.tsx +0 -94
  128. package/module/src/frontend/node/io/io.scss +0 -91
  129. package/module/src/frontend/node/io/io.tsx +0 -115
  130. package/module/src/frontend/node/io/nodeinput.tsx +0 -127
  131. package/module/src/frontend/node/io/nodeoutput.tsx +0 -43
  132. package/module/src/frontend/node/node.scss +0 -265
  133. package/module/src/frontend/node/node.tsx +0 -209
  134. package/module/src/frontend/utils/colorpicker.scss +0 -37
  135. package/module/src/frontend/utils/colorpicker.tsx +0 -342
  136. package/module/src/frontend/utils/jsondata.tsx +0 -19
  137. package/module/src/frontend/utils/table.scss +0 -22
  138. package/module/src/frontend/utils/table.tsx +0 -160
  139. package/module/src/funcnodes/funcnodesworker.ts +0 -456
  140. package/module/src/funcnodes/websocketworker.ts +0 -152
  141. package/module/src/funcnodes/workermanager.ts +0 -233
  142. package/module/src/index.tsx +0 -4
  143. package/module/src/states/edge.ts +0 -15
  144. package/module/src/states/fnrfzst.t.ts +0 -117
  145. package/module/src/states/fnrfzst.ts +0 -415
  146. package/module/src/states/lib.t.ts +0 -30
  147. package/module/src/states/lib.ts +0 -16
  148. package/module/src/states/node.ts +0 -46
  149. package/module/src/states/nodeio.t.ts +0 -103
  150. package/module/src/states/nodespace.t.ts +0 -57
  151. package/module/src/states/nodespace.ts +0 -90
  152. package/module/src/states/reactflow.t.ts +0 -27
  153. package/module/src/states/reactflow.ts +0 -49
  154. package/module/src/types/funcnodesreactflow.d.ts +0 -1
  155. package/module/src/utils/objects.ts +0 -131
  156. package/module/tsconfig.module.json +0 -15
  157. package/module/webpack.config.js +0 -140
  158. package/tsconfig.json +0 -18
@@ -1,269 +0,0 @@
1
- import { useContext, useState } from "react";
2
- import { FuncNodesReactFlowZustandInterface } from "../../states/fnrfzst.t";
3
- import { FuncNodesContext } from "../funcnodesreactflow";
4
-
5
- import "./header.scss";
6
- import CustomDialog from "../dialog";
7
- import React from "react";
8
-
9
- const NewWorkerDialog = ({ trigger }: { trigger: React.ReactNode }) => {
10
- const [name, setName] = useState<string>("");
11
- const [copyLib, setCopyLib] = useState<boolean>(false);
12
- const [copyNS, setCopyNS] = useState<boolean>(false);
13
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
14
- useContext(FuncNodesContext);
15
-
16
- const workersstate = fnrf_zst.workers();
17
-
18
- const [reference, setReference] = useState<{ name: string; uuid: string }>({
19
- name: "None",
20
- uuid: "",
21
- });
22
-
23
- return (
24
- <CustomDialog
25
- trigger={trigger}
26
- title="New Worker"
27
- description="Please provide a name and select a another worker as interpreter reference"
28
- >
29
- <div>
30
- Name:
31
- <br />
32
- <input
33
- className="styledinput"
34
- onChange={(e) => {
35
- setName(e.currentTarget.value);
36
- }}
37
- value={name}
38
- />
39
- </div>
40
- <div>
41
- Reference Worker:
42
- <br />
43
- <select
44
- className="styleddropdown"
45
- onChange={(e) => {
46
- const uuid = e.target.value;
47
- const name = e.target.selectedOptions[0].innerText;
48
- setReference({ name, uuid });
49
- }}
50
- value={reference.uuid}
51
- >
52
- <option value="">None</option>
53
- {Object.keys(workersstate).map((workerid) => (
54
- <option className={""} key={workerid} value={workerid}>
55
- {workersstate[workerid].name || workerid}
56
- </option>
57
- ))}
58
- </select>
59
- {reference.uuid && (
60
- <div>
61
- <div>
62
- Copy Lib:{" "}
63
- <input
64
- type="checkbox"
65
- className="styledcheckbox"
66
- checked={copyLib}
67
- onChange={(e) => {
68
- setCopyLib(e.currentTarget.checked);
69
- }}
70
- />
71
- </div>
72
- {copyLib && (
73
- <div>
74
- Copy Nodespace{" "}
75
- <input
76
- type="checkbox"
77
- className="styledcheckbox"
78
- checked={copyNS}
79
- onChange={(e) => {
80
- setCopyNS(e.currentTarget.checked);
81
- if (e.currentTarget.checked) {
82
- setCopyLib(true);
83
- }
84
- }}
85
- />
86
- </div>
87
- )}
88
- </div>
89
- )}
90
- {name && (
91
- <div>
92
- <button
93
- className="styledbtn"
94
- onClick={() => {
95
- fnrf_zst.workermanager?.new_worker({
96
- name,
97
- reference: reference.uuid,
98
- copyLib,
99
- copyNS,
100
- });
101
- }}
102
- >
103
- Create
104
- </button>
105
- </div>
106
- )}
107
- </div>
108
- </CustomDialog>
109
- );
110
- };
111
-
112
- const Statusbar = () => {
113
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
114
- useContext(FuncNodesContext);
115
- const progress = fnrf_zst.progress_state();
116
-
117
- return (
118
- <div className="statusbar">
119
- <span
120
- className="statusbar-progressbar"
121
- style={{ width: Math.min(100, 100 * progress.progress) + "%" }}
122
- ></span>
123
- <span className="statusbar-message">{progress.message}</span>
124
- </div>
125
- );
126
- };
127
-
128
- const FuncnodesHeader = () => {
129
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
130
- useContext(FuncNodesContext);
131
-
132
- const workersstate = fnrf_zst.workers();
133
- const onNew = () => {
134
- const alert = window.confirm("Are you sure you want to start a new flow?");
135
- if (alert) {
136
- fnrf_zst.worker?.clear();
137
- }
138
- };
139
-
140
- const onSave = async () => {
141
- const data = await fnrf_zst.worker?.save();
142
- if (!data) return;
143
- const blob = new Blob([JSON.stringify(data)], {
144
- type: "application/json",
145
- });
146
- const url = URL.createObjectURL(blob);
147
- const a = document.createElement("a");
148
- a.href = url;
149
- a.download = "flow.json";
150
- a.click();
151
- URL.revokeObjectURL(url);
152
- a.remove();
153
- };
154
-
155
- const onOpen = async () => {
156
- const input = document.createElement("input");
157
- input.type = "file";
158
- input.accept = ".json";
159
- input.onchange = async (e) => {
160
- const file = (e.target as HTMLInputElement).files?.[0];
161
- if (!file) return;
162
- const reader = new FileReader();
163
- reader.onload = async (e) => {
164
- const contents = e.target?.result;
165
- if (!contents) return;
166
- const data = JSON.parse(contents as string);
167
- await fnrf_zst.worker?.load(data);
168
- };
169
- reader.readAsText(file);
170
- };
171
- input.click();
172
- };
173
-
174
- const workerselectchange = (e: React.ChangeEvent<HTMLSelectElement>) => {
175
- const workerid = e.target.value;
176
- if (workerid === "__select__") return;
177
- if (!fnrf_zst.workers) return;
178
- if (!fnrf_zst.workermanager) return;
179
- if (!workersstate[workerid]) return;
180
- if (!workersstate[workerid].active) {
181
- //create popup
182
- const ans = window.confirm(
183
- "this is an inactive worker, selecting it will start it, continue?"
184
- );
185
- if (!ans) return;
186
- }
187
- fnrf_zst.workermanager.set_active(workerid);
188
- };
189
-
190
- return (
191
- <div className="funcnodesreactflowheader">
192
- <div className="headerelement">
193
- <Statusbar></Statusbar>
194
- </div>
195
- <div className="headerelement">
196
- <select
197
- className="workerselect styleddropdown"
198
- value={fnrf_zst.worker ? fnrf_zst.worker.uuid : "__select__"}
199
- onChange={workerselectchange}
200
- >
201
- <option disabled value="__select__">
202
- Select Worker
203
- </option>
204
- {Object.keys(workersstate).map((workerid) => (
205
- <option
206
- className={
207
- "workerselectoption" +
208
- (workersstate[workerid].active ? " active" : " inactive")
209
- }
210
- key={workerid}
211
- value={workerid}
212
- >
213
- {workersstate[workerid].name || workerid}
214
- </option>
215
- ))}
216
- </select>
217
- </div>
218
-
219
- {fnrf_zst.worker && (
220
- <>
221
- <div className="headerelement">
222
- <button
223
- className="styledbtn"
224
- onClick={() => {
225
- if (!fnrf_zst.worker) return;
226
- fnrf_zst.worker.stop();
227
- }}
228
- >
229
- stop worker
230
- </button>
231
- </div>
232
- <div className="headerelement">
233
- <button
234
- className="styledbtn"
235
- onClick={() => {
236
- if (!fnrf_zst.worker) return;
237
- fnrf_zst.workermanager?.restart_worker(fnrf_zst.worker.uuid);
238
- }}
239
- >
240
- restart worker
241
- </button>
242
- </div>
243
- </>
244
- )}
245
- <div className="headerelement">
246
- <NewWorkerDialog
247
- trigger={<button className="styledbtn">new worker</button>}
248
- ></NewWorkerDialog>
249
- </div>
250
- <div className="headerelement">
251
- <button className="styledbtn" onClick={onNew}>
252
- new nodespace
253
- </button>
254
- </div>
255
- <div className="headerelement">
256
- <button className="styledbtn" onClick={onOpen}>
257
- open
258
- </button>
259
- </div>
260
- <div className="headerelement">
261
- <button className="styledbtn" onClick={onSave}>
262
- save
263
- </button>
264
- </div>
265
- </div>
266
- );
267
- };
268
-
269
- export default FuncnodesHeader;
@@ -1,4 +0,0 @@
1
- import FuncnodesReactFlow,{ FuncNodesContext } from "./funcnodesreactflow";
2
-
3
- export default FuncnodesReactFlow;
4
- export { FuncNodesContext };
@@ -1,63 +0,0 @@
1
- .styleelement {
2
- &:hover {
3
- background-color: var(--funcnodesbackground_light);
4
- }
5
-
6
- &:active {
7
- background-color: var(--funheadercolor);
8
- color: var(--funcnodesbackground1);
9
- }
10
-
11
- &:focus {
12
- outline: 1px solid var(--funheadercolor);
13
- }
14
-
15
- height: 2rem;
16
- background-color: var(--funcnodesbackground1);
17
- color: var(--funcnodestextcolor1);
18
- border-radius: 0.75rem;
19
- border: 1px solid var(--funheadercolor);
20
- padding-left: 0.5rem;
21
- padding-right: 0.5rem;
22
- }
23
-
24
- .styleddropdown {
25
- @extend .styleelement;
26
- padding-right: 0.25rem;
27
- }
28
-
29
- .styledbtn {
30
- @extend .styleelement;
31
- cursor: pointer;
32
- }
33
-
34
- .styledinput {
35
- @extend .styleelement;
36
-
37
- :focus {
38
- outline: none;
39
- }
40
- }
41
-
42
- input[type="number"]::-webkit-inner-spin-button,
43
- input[type="number"]::-webkit-outer-spin-button {
44
- opacity: 0.5;
45
- background-color: tr;
46
- }
47
-
48
- .styledcheckbox {
49
- @extend .styleelement;
50
- height: auto;
51
- &:focus {
52
- outline: none;
53
- }
54
- &:after {
55
- content: "";
56
- background-color: var(--funheadercolor);
57
- }
58
- &.checked {
59
- background-color: var(--funheadercolor);
60
- color: var(--funcnodesbackground1);
61
- }
62
- accent-color: var(--funheadercolor);
63
- }
@@ -1,157 +0,0 @@
1
- :root {
2
- --expandtime: 0.3s;
3
- --libnodebgcolor: #48465f;
4
- --libnodebgcolor_hover: #6a6698;
5
- }
6
- .libcontainer {
7
- top: 0;
8
- left: 0;
9
-
10
- height: 100%;
11
- padding: 0.5rem;
12
- box-sizing: border-box;
13
- display: flex;
14
- flex-direction: column;
15
-
16
- border-radius: 0.5rem;
17
- }
18
-
19
- .library {
20
- display: flex;
21
- flex-direction: column;
22
- flex-grow: 1;
23
- overflow: hidden;
24
- width: 15rem;
25
- background-color: var(--funcnodesbackground2);
26
- border-radius: var(--containerboarderradius);
27
- padding: 0.5rem;
28
-
29
- & .libtitle {
30
- font-size: 1rem;
31
- font-weight: bold;
32
- color: var(--funheadercolor);
33
- }
34
-
35
- & hr {
36
- &.hr_prominent {
37
- border: 0.5px solid var(--funheadercolor);
38
- }
39
- width: 100%;
40
- }
41
- }
42
-
43
- .addlib {
44
- background-color: var(--funcnodesbackground2);
45
- border-radius: var(--containerboarderradius);
46
- padding: 0.5rem;
47
-
48
- & button {
49
- background-color: var(--funcnodesbackground1);
50
- color: var(--funheadercolor);
51
- border: 0;
52
- border-radius: 0.5rem;
53
- padding: 0.5rem;
54
- cursor: pointer;
55
- font-size: 1rem;
56
- width: 100%;
57
- &:hover {
58
- background-color: var(--funheadercolor);
59
- color: var(--funcnodesbackground1);
60
- }
61
- &:active {
62
- background-color: var(--funcnodesbackground1);
63
- color: var(--funcnodestextcolor1);
64
- }
65
- }
66
- & button[disabled] {
67
- background-color: var(--funcnodesbackground1);
68
- color: var(--funcnodestextcolor1);
69
- cursor: not-allowed;
70
- }
71
- }
72
- .libfilter {
73
- display: flex;
74
- width: 100%;
75
- flex-direction: row;
76
- background-color: rgba(0, 0, 0, 0.1);
77
- padding: 0.2rem;
78
- &:focus-within {
79
- border: 1px solid var(--funheadercolor);
80
- }
81
- & input {
82
- flex-grow: 1;
83
- background-color: transparent;
84
- color: var(--funcnodestextcolor1);
85
- border: 0;
86
-
87
- &:focus {
88
- outline: none;
89
- }
90
- }
91
- }
92
- .libnodecontainer {
93
- display: grid;
94
-
95
- transition: grid-template-rows var(--expandtime) ease-out;
96
- &.close {
97
- grid-template-rows: 0fr;
98
- }
99
- &.open {
100
- grid-template-rows: 1fr;
101
- }
102
-
103
- &_inner {
104
- transition: opacity var(--expandtime) ease-out;
105
- overflow: hidden;
106
- padding-left: 10px;
107
- }
108
- &.close &_inner {
109
- opacity: 0.2;
110
- }
111
- &.open &_inner {
112
- opacity: 1;
113
- }
114
- }
115
- .shelfcontainer {
116
- padding-top: 0.2rem;
117
- padding-bottom: 0.2rem;
118
- display: flex;
119
- flex-direction: column;
120
- & .shelftitle {
121
- font-size: 0.8rem;
122
-
123
- color: var(--funheadercolor);
124
- opacity: 0.8;
125
- display: flex;
126
-
127
- &_text {
128
- flex-grow: 1;
129
- }
130
- }
131
- }
132
-
133
- .libnodeentry {
134
- border-radius: 10px;
135
- box-sizing: border-box;
136
- background-color: var(--libnodebgcolor);
137
- margin-bottom: 0.2rem;
138
- // border-radius: 0.2rem;
139
- padding: 0.1rem;
140
- cursor: pointer;
141
- border: 1px solid var(--libnodebgcolor);
142
- transition: border 0.2s ease-in-out;
143
- font-size: 0.8rem;
144
- box-shadow: -0.2rem 0px rgba(0, 76, 255);
145
- &:hover {
146
- background-color: var(--libnodebgcolor_hover);
147
- border: 1px solid rgba(0, 76, 255);
148
- }
149
- }
150
-
151
- .expandicon {
152
- transform: rotate(0deg);
153
- &.close {
154
- transform: rotate(180deg);
155
- }
156
- transition: transform var(--expandtime) ease-out;
157
- }
@@ -1,199 +0,0 @@
1
- import React, { useState, useContext } from "react";
2
- import "./lib.scss";
3
-
4
- import { FuncNodesReactFlowZustandInterface } from "../states/fnrfzst.t";
5
- import { UseBoundStore } from "zustand";
6
- import { MouseEvent } from "react";
7
- import { FuncNodesContext } from "./index";
8
- import SearchIcon from "@mui/icons-material/Search";
9
- import CloseIcon from "@mui/icons-material/Close";
10
- import ExpandLessIcon from "@mui/icons-material/ExpandLess";
11
- import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
12
- import CustomDialog from "./dialog";
13
- import { LibNode, Shelf } from "../states/lib.t";
14
-
15
- const LibraryNode = ({ item }: { item: LibNode }) => {
16
- const zustand: FuncNodesReactFlowZustandInterface =
17
- useContext(FuncNodesContext);
18
-
19
- const add_to_flow = () => {
20
- zustand.worker?.add_node(item.node_id);
21
- };
22
-
23
- const nodeclick = (event: MouseEvent<HTMLDivElement>) => {
24
- // if double click, add node to graph
25
- if (event.detail === 2) {
26
- add_to_flow();
27
- }
28
- };
29
- return (
30
- <div className="libnodeentry" onClick={nodeclick} title={item.description}>
31
- {item.node_name || item.node_id}
32
- </div>
33
- );
34
- };
35
-
36
- const filterShelf = (shelf: Shelf, filter: string): boolean => {
37
- const hasFilteredNodes =
38
- shelf.nodes?.some((node) =>
39
- node.node_id.toLowerCase().includes(filter.toLowerCase())
40
- ) ?? false;
41
-
42
- const hasFilteredSubShelves =
43
- shelf.subshelves?.some((subShelf) => filterShelf(subShelf, filter)) ??
44
- false;
45
-
46
- return hasFilteredNodes || hasFilteredSubShelves;
47
- };
48
-
49
- const LibraryShelf = ({ item, filter }: { item: Shelf; filter: string }) => {
50
- const [isOpen, setIsOpen] = useState(false);
51
-
52
- const handleToggle = () => setIsOpen(!isOpen);
53
-
54
- const filterednodes = item.nodes?.filter((node) =>
55
- node.node_id.toLowerCase().includes(filter.toLowerCase())
56
- );
57
-
58
- const _isopen = isOpen || filter.length > 0;
59
- if (!filterShelf(item, filter)) {
60
- return <></>;
61
- }
62
-
63
- return (
64
- <div className="shelfcontainer">
65
- <div
66
- className="shelftitle"
67
- onClick={handleToggle}
68
- style={{ cursor: "pointer" }}
69
- title={item.description}
70
- >
71
- <div className="shelftitle_text">{item.name}</div>
72
- <div className={"expandicon " + (_isopen ? "open" : "close")}>
73
- <ExpandLessIcon />
74
- </div>
75
- </div>
76
- <div className={"libnodecontainer " + (_isopen ? "open" : "close")}>
77
- <div className="libnodecontainer_inner">
78
- {filterednodes && (
79
- <>
80
- {filterednodes.map((subItem, idx) => (
81
- <LibraryNode key={idx} item={subItem} />
82
- ))}
83
- </>
84
- )}
85
- {item.subshelves && (
86
- <>
87
- {item.subshelves.map((subItem, idx) => (
88
- <LibraryShelf key={idx} item={subItem} filter={filter} />
89
- ))}
90
- </>
91
- )}
92
- </div>
93
- </div>
94
- <hr />
95
- </div>
96
- );
97
- };
98
-
99
- const LibFilter = ({
100
- filter,
101
- setFilter,
102
- }: {
103
- filter: string;
104
- setFilter: (filter: string) => void;
105
- }) => {
106
- // input with left icon
107
-
108
- return (
109
- <div className="libfilter">
110
- <SearchIcon fontSize="inherit" />
111
- <input
112
- type="text"
113
- placeholder="Filter"
114
- value={filter}
115
- onChange={(e) => {
116
- setFilter(e.target.value);
117
- }}
118
- />
119
- {filter && (
120
- <CloseIcon
121
- fontSize="inherit"
122
- onClick={() => {
123
- setFilter("");
124
- }}
125
- />
126
- )}
127
- </div>
128
- );
129
- };
130
-
131
- const AddLibraryOverLay = ({ children }: { children: React.ReactNode }) => {
132
- const [newlib, setNewLib] = useState("");
133
- const zustand: FuncNodesReactFlowZustandInterface =
134
- useContext(FuncNodesContext);
135
- if (!zustand.worker) {
136
- return <></>;
137
- }
138
- const add_new_lib = () => {
139
- if (zustand.worker === undefined) {
140
- return;
141
- }
142
- zustand.worker.add_lib(newlib);
143
- setNewLib("");
144
- };
145
- return (
146
- <CustomDialog
147
- title="Add Library"
148
- trigger={children}
149
- description="Add a new library to the current worker."
150
- buttons={[
151
- {
152
- text: "add",
153
- onClick: add_new_lib,
154
- },
155
- ]}
156
- >
157
- <input
158
- className="styledinput"
159
- type="text"
160
- value={newlib}
161
- onChange={(e) => {
162
- setNewLib(e.target.value);
163
- }}
164
- />
165
- </CustomDialog>
166
- );
167
- };
168
-
169
- const Library = () => {
170
- const zustand: FuncNodesReactFlowZustandInterface =
171
- useContext(FuncNodesContext);
172
- const libstate = zustand.lib.libstate((state) => state.state);
173
-
174
- const [filter, setFilter] = useState("");
175
-
176
- return (
177
- <div className="libcontainer">
178
- <div className="library">
179
- <div className="libtitle">Lib</div>
180
- <hr className="hr_prominent" />
181
- <LibFilter filter={filter} setFilter={setFilter} />
182
- <div className="vscrollcontainer">
183
- {libstate.shelves.map((item, idx) => (
184
- <LibraryShelf key={idx} item={item} filter={filter} />
185
- ))}
186
- </div>
187
- <hr />
188
- </div>
189
- <div className="addlib">
190
- <AddLibraryOverLay>
191
- <button disabled={zustand.worker === undefined}>Add Library</button>
192
- </AddLibraryOverLay>
193
- </div>
194
- </div>
195
- );
196
- };
197
-
198
- export default Library;
199
- export { LibraryShelf as LibraryItem };