@linkdlab/funcnodes_react_flow 0.1.1 → 0.1.2

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 (198) hide show
  1. package/dist/frontend/datarenderer/images.d.ts +11 -0
  2. package/dist/frontend/datarenderer/images.js +13 -0
  3. package/dist/frontend/datarenderer/images.js.map +1 -0
  4. package/dist/frontend/datarenderer/index.d.ts +16 -0
  5. package/dist/frontend/datarenderer/index.js +26 -0
  6. package/dist/frontend/datarenderer/index.js.map +1 -0
  7. package/dist/frontend/datarenderer/plotly.d.ts +14 -0
  8. package/dist/frontend/datarenderer/plotly.js +53 -0
  9. package/dist/frontend/datarenderer/plotly.js.map +1 -0
  10. package/dist/frontend/dialog.d.ts +17 -0
  11. package/dist/frontend/dialog.js +26 -0
  12. package/dist/frontend/dialog.js.map +1 -0
  13. package/dist/frontend/edge.d.ts +5 -0
  14. package/dist/frontend/edge.js +40 -0
  15. package/dist/frontend/edge.js.map +1 -0
  16. package/dist/frontend/funcnodesreactflow/index.d.ts +6 -0
  17. package/dist/frontend/funcnodesreactflow/index.js +94 -0
  18. package/dist/frontend/funcnodesreactflow/index.js.map +1 -0
  19. package/dist/frontend/funcnodesreactflow/react_flow_layer.d.ts +5 -0
  20. package/dist/frontend/funcnodesreactflow/react_flow_layer.js +149 -0
  21. package/dist/frontend/funcnodesreactflow/react_flow_layer.js.map +1 -0
  22. package/dist/frontend/header/index.d.ts +4 -0
  23. package/dist/frontend/header/index.js +227 -0
  24. package/dist/frontend/header/index.js.map +1 -0
  25. package/{module/src/frontend/index.tsx → dist/frontend/index.d.ts} +1 -2
  26. package/dist/frontend/index.js +4 -0
  27. package/dist/frontend/index.js.map +1 -0
  28. package/dist/frontend/lib.d.ts +10 -0
  29. package/dist/frontend/lib.js +107 -0
  30. package/dist/frontend/lib.js.map +1 -0
  31. package/{module/src/frontend/node/index.tsx → dist/frontend/node/index.d.ts} +0 -1
  32. package/dist/frontend/node/index.js +3 -0
  33. package/dist/frontend/node/index.js.map +1 -0
  34. package/dist/frontend/node/io/default_input_renderer.d.ts +11 -0
  35. package/dist/frontend/node/io/default_input_renderer.js +235 -0
  36. package/dist/frontend/node/io/default_input_renderer.js.map +1 -0
  37. package/dist/frontend/node/io/default_output_render.d.ts +6 -0
  38. package/dist/frontend/node/io/default_output_render.js +23 -0
  39. package/dist/frontend/node/io/default_output_render.js.map +1 -0
  40. package/dist/frontend/node/io/handle_renderer.d.ts +6 -0
  41. package/dist/frontend/node/io/handle_renderer.js +70 -0
  42. package/dist/frontend/node/io/handle_renderer.js.map +1 -0
  43. package/{module/src/frontend/node/io/index.tsx → dist/frontend/node/io/index.d.ts} +0 -1
  44. package/dist/frontend/node/io/index.js +4 -0
  45. package/dist/frontend/node/io/index.js.map +1 -0
  46. package/dist/frontend/node/io/io.d.ts +16 -0
  47. package/dist/frontend/node/io/io.js +98 -0
  48. package/dist/frontend/node/io/io.js.map +1 -0
  49. package/dist/frontend/node/io/nodeinput.d.ts +6 -0
  50. package/dist/frontend/node/io/nodeinput.js +74 -0
  51. package/dist/frontend/node/io/nodeinput.js.map +1 -0
  52. package/dist/frontend/node/io/nodeoutput.d.ts +6 -0
  53. package/dist/frontend/node/io/nodeoutput.js +19 -0
  54. package/dist/frontend/node/io/nodeoutput.js.map +1 -0
  55. package/dist/frontend/node/node.d.ts +20 -0
  56. package/dist/frontend/node/node.js +118 -0
  57. package/dist/frontend/node/node.js.map +1 -0
  58. package/dist/frontend/utils/colorpicker.d.ts +19 -0
  59. package/dist/frontend/utils/colorpicker.js +209 -0
  60. package/dist/frontend/utils/colorpicker.js.map +1 -0
  61. package/dist/frontend/utils/jsondata.d.ts +6 -0
  62. package/dist/frontend/utils/jsondata.js +8 -0
  63. package/dist/frontend/utils/jsondata.js.map +1 -0
  64. package/dist/frontend/utils/table.d.ts +11 -0
  65. package/dist/frontend/utils/table.js +108 -0
  66. package/dist/frontend/utils/table.js.map +1 -0
  67. package/dist/funcnodes/funcnodesworker.d.ts +72 -0
  68. package/dist/funcnodes/funcnodesworker.js +532 -0
  69. package/dist/funcnodes/funcnodesworker.js.map +1 -0
  70. package/dist/funcnodes/index.js +5 -0
  71. package/dist/funcnodes/index.js.map +1 -0
  72. package/dist/funcnodes/websocketworker.d.ts +27 -0
  73. package/dist/funcnodes/websocketworker.js +224 -0
  74. package/dist/funcnodes/websocketworker.js.map +1 -0
  75. package/dist/funcnodes/workermanager.d.ts +32 -0
  76. package/dist/funcnodes/workermanager.js +241 -0
  77. package/dist/funcnodes/workermanager.js.map +1 -0
  78. package/dist/index.d.ts +2 -0
  79. package/dist/index.js +3 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/states/edge.d.ts +7 -0
  82. package/dist/states/edge.js +6 -0
  83. package/dist/states/edge.js.map +1 -0
  84. package/{module/src/states/edge.t.ts → dist/states/edge.t.d.ts} +8 -12
  85. package/dist/states/edge.t.js +2 -0
  86. package/dist/states/edge.t.js.map +1 -0
  87. package/dist/states/fnrfzst.d.ts +10 -0
  88. package/dist/states/fnrfzst.js +378 -0
  89. package/dist/states/fnrfzst.js.map +1 -0
  90. package/dist/states/fnrfzst.t.d.ts +100 -0
  91. package/dist/states/fnrfzst.t.js +2 -0
  92. package/dist/states/fnrfzst.t.js.map +1 -0
  93. package/dist/states/index.js +6 -0
  94. package/dist/states/index.js.map +1 -0
  95. package/dist/states/lib.d.ts +3 -0
  96. package/dist/states/lib.js +14 -0
  97. package/dist/states/lib.js.map +1 -0
  98. package/dist/states/lib.t.d.ts +24 -0
  99. package/dist/states/lib.t.js +2 -0
  100. package/dist/states/lib.t.js.map +1 -0
  101. package/dist/states/node.d.ts +4 -0
  102. package/dist/states/node.js +43 -0
  103. package/dist/states/node.js.map +1 -0
  104. package/{module/src/states/node.t.ts → dist/states/node.t.d.ts} +33 -58
  105. package/dist/states/node.t.js +2 -0
  106. package/dist/states/node.t.js.map +1 -0
  107. package/dist/states/nodeio.t.d.ts +67 -0
  108. package/dist/states/nodeio.t.js +2 -0
  109. package/dist/states/nodeio.t.js.map +1 -0
  110. package/dist/states/nodespace.d.ts +3 -0
  111. package/{module/src/states/nodespace.ts → dist/states/nodespace.js} +17 -30
  112. package/dist/states/nodespace.js.map +1 -0
  113. package/dist/states/nodespace.t.d.ts +16 -0
  114. package/dist/states/nodespace.t.js +2 -0
  115. package/dist/states/nodespace.t.js.map +1 -0
  116. package/dist/states/reactflow.d.ts +8 -0
  117. package/dist/states/reactflow.js +33 -0
  118. package/dist/states/reactflow.js.map +1 -0
  119. package/dist/states/reactflow.t.d.ts +11 -0
  120. package/dist/states/reactflow.t.js +2 -0
  121. package/dist/states/reactflow.t.js.map +1 -0
  122. package/{module/src/types/rendering.t.ts → dist/types/rendering.t.d.ts} +4 -7
  123. package/dist/types/rendering.t.js +2 -0
  124. package/dist/types/rendering.t.js.map +1 -0
  125. package/{module/src/utils/index.ts → dist/utils/index.d.ts} +0 -1
  126. package/dist/utils/index.js +3 -0
  127. package/dist/utils/index.js.map +1 -0
  128. package/dist/utils/objects.d.ts +19 -0
  129. package/dist/utils/objects.js +118 -0
  130. package/dist/utils/objects.js.map +1 -0
  131. package/package.json +32 -23
  132. package/app/public/favicon.ico +0 -0
  133. package/app/public/index.html +0 -43
  134. package/app/public/logo192.png +0 -0
  135. package/app/public/logo512.png +0 -0
  136. package/app/public/manifest.json +0 -25
  137. package/app/public/robots.txt +0 -3
  138. package/app/public/worker_manager +0 -1
  139. package/app/src/App.css +0 -38
  140. package/app/src/App.test.tsx +0 -9
  141. package/app/src/App.tsx +0 -22
  142. package/app/src/index.css +0 -13
  143. package/app/src/index.tsx +0 -19
  144. package/app/src/react-app-env.d.ts +0 -1
  145. package/app/src/reportWebVitals.ts +0 -15
  146. package/app/src/setupTests.ts +0 -5
  147. package/app/tsconfig.app.json +0 -10
  148. package/app/webpack.config.js +0 -143
  149. package/module/src/frontend/datarenderer/images.tsx +0 -28
  150. package/module/src/frontend/datarenderer/index.tsx +0 -54
  151. package/module/src/frontend/datarenderer/plotly.tsx +0 -82
  152. package/module/src/frontend/dialog.scss +0 -88
  153. package/module/src/frontend/dialog.tsx +0 -71
  154. package/module/src/frontend/edge.scss +0 -15
  155. package/module/src/frontend/edge.tsx +0 -32
  156. package/module/src/frontend/funcnodesreactflow/funcnodesreactflow.scss +0 -63
  157. package/module/src/frontend/funcnodesreactflow/index.tsx +0 -68
  158. package/module/src/frontend/funcnodesreactflow/react_flow_layer.tsx +0 -212
  159. package/module/src/frontend/header/header.scss +0 -48
  160. package/module/src/frontend/header/index.tsx +0 -269
  161. package/module/src/frontend/layout/htmlelements.scss +0 -63
  162. package/module/src/frontend/lib.scss +0 -157
  163. package/module/src/frontend/lib.tsx +0 -199
  164. package/module/src/frontend/node/io/default_input_renderer.tsx +0 -329
  165. package/module/src/frontend/node/io/default_output_render.tsx +0 -25
  166. package/module/src/frontend/node/io/handle_renderer.tsx +0 -94
  167. package/module/src/frontend/node/io/io.scss +0 -91
  168. package/module/src/frontend/node/io/io.tsx +0 -115
  169. package/module/src/frontend/node/io/nodeinput.tsx +0 -127
  170. package/module/src/frontend/node/io/nodeoutput.tsx +0 -43
  171. package/module/src/frontend/node/node.scss +0 -265
  172. package/module/src/frontend/node/node.tsx +0 -209
  173. package/module/src/frontend/utils/colorpicker.scss +0 -37
  174. package/module/src/frontend/utils/colorpicker.tsx +0 -342
  175. package/module/src/frontend/utils/jsondata.tsx +0 -19
  176. package/module/src/frontend/utils/table.scss +0 -22
  177. package/module/src/frontend/utils/table.tsx +0 -160
  178. package/module/src/funcnodes/funcnodesworker.ts +0 -456
  179. package/module/src/funcnodes/websocketworker.ts +0 -152
  180. package/module/src/funcnodes/workermanager.ts +0 -233
  181. package/module/src/index.tsx +0 -4
  182. package/module/src/states/edge.ts +0 -15
  183. package/module/src/states/fnrfzst.t.ts +0 -117
  184. package/module/src/states/fnrfzst.ts +0 -415
  185. package/module/src/states/lib.t.ts +0 -30
  186. package/module/src/states/lib.ts +0 -16
  187. package/module/src/states/node.ts +0 -46
  188. package/module/src/states/nodeio.t.ts +0 -103
  189. package/module/src/states/nodespace.t.ts +0 -57
  190. package/module/src/states/reactflow.t.ts +0 -27
  191. package/module/src/states/reactflow.ts +0 -49
  192. package/module/src/types/funcnodesreactflow.d.ts +0 -1
  193. package/module/src/utils/objects.ts +0 -131
  194. package/module/tsconfig.module.json +0 -15
  195. package/module/webpack.config.js +0 -140
  196. package/tsconfig.json +0 -18
  197. /package/{module/src/funcnodes/index.ts → dist/funcnodes/index.d.ts} +0 -0
  198. /package/{module/src/states/index.ts → dist/states/index.d.ts} +0 -0
@@ -1,127 +0,0 @@
1
- import { useContext, useEffect, useRef, useState } from "react";
2
- import { FuncNodesContext } from "../..";
3
- import * as Tooltip from "@radix-ui/react-tooltip";
4
- import { Handle, Position } from "reactflow";
5
- import { FuncNodesReactFlowZustandInterface, RenderOptions } from "../../../states/fnrfzst.t";
6
- import { HandleWithPreview, pick_best_io_type } from "./io";
7
- import {
8
- BooleanInput,
9
- FloatInput,
10
- IntegerInput,
11
- StringInput,
12
- SelectionInput,
13
- ColorInput,
14
- } from "./default_input_renderer";
15
- import { IOType, InputRendererType } from "../../../states/nodeio.t";
16
- import React from "react";
17
-
18
- const Inputrenderer: {
19
- [key: string]: InputRendererType;
20
- } = {};
21
-
22
- const register_input_renderer = (type: string, renderer: InputRendererType) => {
23
- Inputrenderer[type] = renderer;
24
- };
25
-
26
- register_input_renderer("float", FloatInput);
27
- register_input_renderer("int", IntegerInput);
28
- register_input_renderer("bool", BooleanInput);
29
- register_input_renderer("string", StringInput);
30
- register_input_renderer("str", StringInput);
31
- register_input_renderer("color", ColorInput);
32
- register_input_renderer("select", SelectionInput);
33
- register_input_renderer("enum", SelectionInput);
34
-
35
- const INPUTCONVERTER: {
36
- [key: string]: (v: any) => any;
37
- } = {
38
- "": (v: any) => v,
39
- str_to_json: (v: any) => {
40
- return JSON.parse(v);
41
- },
42
- str_to_list: (v: any) => {
43
- try {
44
- const a = JSON.parse(v);
45
- if (Array.isArray(a)) return a;
46
- return [a];
47
- } catch (e) {
48
- try {
49
- return JSON.parse("[" + v + "]");
50
- } catch (e) {}
51
- }
52
-
53
- throw new Error("Invalid list");
54
- },
55
- };
56
-
57
- const NodeInput = ({ io }: { io: IOType }) => {
58
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
59
- useContext(FuncNodesContext);
60
- const render: RenderOptions = fnrf_zst.render_options();
61
-
62
- if (io.render_options === undefined) {
63
- io.render_options = {};
64
- }
65
- if (io.render_options.set_default === undefined) {
66
- io.render_options.set_default = true;
67
- }
68
-
69
- const [typestring, otypestring] = pick_best_io_type(
70
- io.type,
71
- render.typemap || {}
72
- );
73
-
74
- const Input = typestring
75
- ? io.value_options?.options
76
- ? SelectionInput
77
- : Inputrenderer[typestring]
78
- : undefined;
79
- const inputconverterf: (v: any) => any =
80
- INPUTCONVERTER[(otypestring && render.inputconverter?.[otypestring]) ?? ""];
81
- return (
82
- <div className="nodeinput">
83
- <HandleWithPreview
84
- io={io}
85
- typestring={typestring}
86
- position={Position.Left}
87
- type="target"
88
- />
89
-
90
- {Input && (
91
- <div className="iovaluefield nodrag">
92
- <Input io={io} inputconverter={inputconverterf} />
93
- </div>
94
- )}
95
- <div className="ioname">{io.name}</div>
96
- </div>
97
- );
98
- };
99
-
100
- export default NodeInput;
101
-
102
- type Renderotion = ({ text }: { text: string }) => JSX.Element;
103
-
104
- const renderoptions: { [key: string]: Renderotion } = {};
105
-
106
- const Renderer = () => {
107
- const [text, setText] = useState("");
108
- const [render, setRender] = useState<Renderotion | undefined>(undefined);
109
-
110
- return (
111
- <div>
112
- <input
113
- type="text"
114
- value={text}
115
- onChange={(e) => setText(e.target.value)}
116
- />
117
- <select onChange={(e) => setRender(renderoptions[e.target.value])}>
118
- {Object.keys(renderoptions).map((key) => (
119
- <option key={key} value={key}>
120
- {key}
121
- </option>
122
- ))}
123
- </select>
124
- {render && render({ text })}
125
- </div>
126
- );
127
- };
@@ -1,43 +0,0 @@
1
- import { useContext, useEffect, useRef, useState } from "react";
2
-
3
- import { Handle, Position } from "reactflow";
4
- import { FuncNodesContext } from "../..";
5
-
6
- import { HandleWithPreview, pick_best_io_type } from "./io";
7
- import { InLineOutput } from "./default_output_render";
8
- import {
9
- RenderOptions,
10
- FuncNodesReactFlowZustandInterface,
11
- } from "../../../states/fnrfzst.t";
12
- import { IOType } from "../../../states/nodeio.t";
13
- import React from "react";
14
-
15
- const NodeOutput = ({ io }: { io: IOType }) => {
16
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
17
- useContext(FuncNodesContext);
18
- const render: RenderOptions = fnrf_zst.render_options();
19
-
20
- const [typestring, otypestring] = pick_best_io_type(
21
- io.type,
22
- render.typemap || {}
23
- );
24
-
25
- return (
26
- <div className="nodeoutput">
27
- <HandleWithPreview
28
- io={io}
29
- typestring={typestring}
30
- position={Position.Right}
31
- type="source"
32
- />
33
-
34
- <div className="ioname">{io.name}</div>
35
-
36
- <div className="iovaluefield">
37
- <InLineOutput io={io} />
38
- </div>
39
- </div>
40
- );
41
- };
42
-
43
- export default NodeOutput;
@@ -1,265 +0,0 @@
1
- :root {
2
- --node_border_radius: 5px;
3
- --handle_outer_radius: 4px;
4
- --handle_inner_radius: 2px;
5
- --handle_width: 10;
6
- --handle_width_hover: 15;
7
- --handle_overlap: 3;
8
- --nodeinput_margin: 2;
9
- --nodeio_shift: calc(var(--handle_overlap) - var(--nodeinput_margin));
10
- --handle_source_color: hsl(190, 98%, 49%);
11
- --handle_target_color: hsl(204, 98%, 51%);
12
- --node_background: hsl(245, 51%, 42%);
13
- --node_header_color: hsl(245, 51%, 22%);
14
- }
15
-
16
- .react-flow {
17
- &__node {
18
- padding: 0;
19
- border-radius: var(--node_border_radius);
20
- background-color: var(--node_background);
21
- display: flex;
22
- flex-direction: column;
23
- color: aliceblue;
24
- box-sizing: content-box;
25
- transform: (-50%, -50%);
26
- border: 2px solid #ffffff00;
27
- font-size: 0.5rem;
28
- width: auto;
29
- max-width: 200px;
30
- min-width: 100px;
31
- &.selected {
32
- border-color: #ffffff99;
33
- }
34
- background-clip: content-box;
35
-
36
- & * {
37
- box-sizing: border-box;
38
- }
39
- }
40
-
41
- &__handle {
42
- height: calc(100% - 4px);
43
- border-radius: 0;
44
- width: calc(var(--handle_width) * 1px);
45
-
46
- transition: left 0.2s ease-in-out, right 0.2s ease-in-out,
47
- width 0.2s ease-in-out;
48
- &:hover {
49
- width: calc(var(--handle_width_hover) * 1px);
50
- }
51
-
52
- &.source {
53
- background-color: var(--handle_source_color);
54
- }
55
- &.target {
56
- background-color: var(--handle_target_color);
57
- }
58
- &-left {
59
- border-radius: var(--handle_outer_radius) var(--handle_inner_radius)
60
- var(--handle_inner_radius) var(--handle_outer_radius);
61
- left: calc((var(--nodeio_shift) - var(--handle_width)) * 1px);
62
- &:hover {
63
- left: calc((var(--nodeio_shift) - var(--handle_width_hover)) * 1px);
64
- }
65
- }
66
- &-right {
67
- border-radius: var(--handle_inner_radius) var(--handle_outer_radius)
68
- var(--handle_outer_radius) var(--handle_inner_radius);
69
- right: calc((var(--nodeio_shift) - var(--handle_width)) * 1px);
70
- &:hover {
71
- right: calc((var(--nodeio_shift) - var(--handle_width_hover)) * 1px);
72
- }
73
- }
74
- &-top {
75
- border-radius: var(--handle_outer_radius) var(--handle_outer_radius)
76
- var(--handle_inner_radius) var(--handle_inner_radius);
77
- }
78
- &-bottom {
79
- border-radius: var(--handle_inner_radius) var(--handle_inner_radius)
80
- var(--handle_outer_radius) var(--handle_outer_radius);
81
- }
82
- }
83
- }
84
-
85
- .innernode {
86
- width: 100%;
87
- height: 100%;
88
- flex-direction: column;
89
- display: flex;
90
- // padding: 2px;
91
- box-sizing: border-box;
92
-
93
- &.intrigger {
94
- & .nodeheader {
95
- background-color: #abb408;
96
- }
97
- }
98
-
99
- &.error {
100
- & .nodeheader {
101
- background-color: #ff0000;
102
- }
103
- }
104
- }
105
- .nodeheader {
106
- box-sizing: border-box;
107
- background-color: var(--node_header_color);
108
- width: 100%;
109
- padding: 0.1rem;
110
- border-radius: var(--node_border_radius) var(--node_border_radius) 0 0;
111
- display: flex; /* Use flex layout */
112
- align-items: center; /* Align items vertically in the center */
113
- justify-content: space-between; /* Distribute space between items */
114
-
115
- &_element {
116
- display: flex; /* Enable flex within each child to center content */
117
- align-items: center; /* Align items vertically in the center */
118
- }
119
- &_title {
120
- flex-grow: 1; /* Allow the text div to grow and fill available space */
121
- margin: 0 10px; /* Add some space around the text for aesthetics */
122
- white-space: nowrap; /* Prevent wrapping */
123
- overflow: hidden; /* Hide overflow */
124
- text-overflow: ellipsis; /* Add ellipsis to overflow */
125
- justify-content: center; /* Center the text horizontally */
126
- &_text {
127
- overflow: hidden;
128
- text-overflow: ellipsis;
129
- white-space: nowrap;
130
- max-width: 100%; /* Ensure it does not overflow the parent */
131
- }
132
- }
133
-
134
- & .triggerbutton {
135
- cursor: pointer;
136
-
137
- &:hover {
138
- color: #0cc3f5;
139
- }
140
- &:active {
141
- color: #075d74;
142
- }
143
- }
144
- }
145
-
146
- .nodename_input {
147
- // remove the default
148
- border: 1px solid #000000;
149
- border-radius: 2px;
150
- background: none;
151
- color: white;
152
- text-align: center;
153
-
154
- font-size: inherit;
155
- margin: 2px;
156
- box-sizing: border-box;
157
- }
158
-
159
- .nodefooter {
160
- background-color: #4e0ba5;
161
- width: 100%;
162
- padding: 0.1rem;
163
- border-radius: 0 0 var(--node_border_radius) var(--node_border_radius);
164
- &:empty {
165
- display: none;
166
- }
167
- & .nodeerror {
168
- border: 1px solid #ff0000;
169
- border-radius: 2px;
170
- padding: 0.25rem;
171
- background-color: #ff000075;
172
- }
173
- }
174
-
175
- .nodebody {
176
- flex-grow: 1;
177
- }
178
-
179
- .nodedatabody {
180
- overflow: hidden;
181
- }
182
-
183
- .noderesizecontrol {
184
- background: transparent !important;
185
- border: none !important;
186
- font-size: 0.5rem;
187
- }
188
- .noderesizeicon {
189
- position: absolute;
190
- bottom: 4px;
191
- right: 4px;
192
- font-size: 0.5rem;
193
- }
194
-
195
- .nodeio {
196
- width: auto;
197
- background-color: inherit;
198
- padding: 0.1rem;
199
- margin-top: 0.1rem;
200
- margin-bottom: 0.1rem;
201
- position: relative;
202
- display: flex;
203
- flex-direction: row;
204
-
205
- border: 1px solid #ffffff88;
206
- border-radius: 3px;
207
- box-sizing: border-box;
208
- margin-left: calc(var(--nodeinput_margin) * 1px);
209
- margin-right: calc(var(--nodeinput_margin) * 1px);
210
- }
211
-
212
- .nodeinput {
213
- @extend .nodeio;
214
- }
215
-
216
- .nodeoutput {
217
- @extend .nodeio;
218
- }
219
-
220
- .iovaluefield {
221
- flex-grow: 1;
222
- flex-shrink: 1;
223
- overflow: hidden;
224
- align-items: start;
225
- justify-content: start;
226
- display: flex;
227
- margin: 0.2rem;
228
- line-break: anywhere;
229
- & > input {
230
- width: 100%;
231
- }
232
- }
233
- .ioname {
234
- flex-grow: 1;
235
- flex-shrink: 1;
236
- color: inherit;
237
- margin: 0.2rem;
238
- overflow: hidden;
239
- min-width: 2rem;
240
-
241
- .nodeinput & {
242
- text-align: left;
243
- }
244
- .nodeoutput & {
245
- text-align: right;
246
- }
247
- }
248
-
249
- input.nodedatainput {
250
- &:focus {
251
- outline: none;
252
- }
253
- }
254
-
255
- .nodedatastyledelement {
256
- background-color: var(--node_header_color);
257
-
258
- font-size: 0.5rem;
259
- height: 1.5rem;
260
- }
261
-
262
- input.nodedatainput.styledinput,
263
- select.nodedatainput.styleddropdown {
264
- @extend .nodedatastyledelement;
265
- }
@@ -1,209 +0,0 @@
1
- import React, {
2
- RefObject,
3
- useContext,
4
- useEffect,
5
- useMemo,
6
- useRef,
7
- useState,
8
- } from "react";
9
-
10
- import { NodeStore, NodeType } from "../../states/node.t";
11
- import ExpandLessIcon from "@mui/icons-material/ExpandLess";
12
- import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
13
- import ExpandIcon from "@mui/icons-material/Expand";
14
- import LanIcon from "@mui/icons-material/Lan";
15
- import PlayCircleFilledIcon from "@mui/icons-material/PlayCircleFilled";
16
- import "./node.scss";
17
- import { FuncNodesReactFlowZustandInterface } from "../../states/fnrfzst.t";
18
- import { FuncNodesContext } from "..";
19
- import get_rendertype from "../datarenderer";
20
- import CustomColorPicker, { HSLColorPicker } from "../utils/colorpicker";
21
- import { NodeInput, NodeOutput } from "./io";
22
- import { PreviewHandleDataRendererForIo } from "./io/handle_renderer";
23
- import CustomDialog from "../dialog";
24
- import { IOType } from "../../states/nodeio.t";
25
- interface NodeHeaderProps {
26
- node_data: NodeType;
27
- }
28
-
29
- const NodeHeader = ({ node_data }: NodeHeaderProps) => {
30
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
31
- useContext(FuncNodesContext);
32
-
33
- const clicktrigger = () => {
34
- fnrf_zst.on_node_action({
35
- type: "trigger",
36
- from_remote: false,
37
- id: node_data.id,
38
- });
39
- };
40
-
41
- return (
42
- <div className="nodeheader">
43
- <div className="nodeheader_element">
44
- <PlayCircleFilledIcon
45
- fontSize="inherit"
46
- className="triggerbutton"
47
- onClick={clicktrigger}
48
- />
49
- <LanIcon fontSize="inherit" />
50
- </div>
51
- <div className="nodeheader_element nodeheader_title">
52
- <div className="nodeheader_title_text">{node_data.node_name}</div>
53
- </div>
54
- <div className="nodeheader_element">
55
- <ExpandLessIcon fontSize="inherit" />
56
- </div>
57
- </div>
58
- );
59
- };
60
-
61
- interface NodeBodyProps {
62
- node_data: NodeType;
63
- }
64
-
65
- const NodeDataRenderer = ({ node_data }: { node_data: NodeType }) => {
66
- const src = node_data.render_options?.data?.src;
67
-
68
- const io: IOType | undefined = node_data.render_options?.data?.src
69
- ? node_data.io[node_data.render_options?.data?.src]
70
- : undefined;
71
-
72
- const pvhandle = io && PreviewHandleDataRendererForIo(io);
73
-
74
- return (
75
- <div className="nodrag">
76
- {pvhandle && (
77
- <CustomDialog
78
- trigger={<div>{pvhandle({ io })}</div>}
79
- onOpenChange={(open: boolean) => {
80
- if (open) {
81
- io?.try_get_full_value();
82
- }
83
- }}
84
- >
85
- {pvhandle({ io })}
86
- </CustomDialog>
87
- )}
88
- </div>
89
- );
90
- };
91
-
92
- const NodeBody = ({ node_data }: NodeBodyProps) => {
93
- const inputs = Object.values(node_data.io).filter((io) => io.is_input);
94
- const outputs = Object.values(node_data.io).filter((io) => !io.is_input);
95
-
96
- if (node_data.render_options?.data?.src) {
97
- }
98
-
99
- return (
100
- <div className="nodebody">
101
- {outputs.map((io) => (
102
- <NodeOutput key={io.id} io={io} />
103
- ))}
104
- <NodeDataRenderer node_data={node_data} />
105
- {inputs.map((io) => (
106
- <NodeInput key={io.id} io={io} />
107
- ))}
108
- </div>
109
- );
110
- };
111
-
112
- const NodeName = ({ node_data }: { node_data: NodeType }) => {
113
- const [name, setName] = useState(node_data.name);
114
-
115
- useEffect(() => {
116
- setName(node_data.name);
117
- }, [node_data]);
118
-
119
- const fnrf_zst: FuncNodesReactFlowZustandInterface =
120
- useContext(FuncNodesContext);
121
-
122
- const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
123
- setName(event.target.value);
124
- };
125
-
126
- const finalSetName = (e: React.ChangeEvent<HTMLInputElement>) => {
127
- const new_name = e.target.value;
128
- fnrf_zst.on_node_action({
129
- type: "update",
130
- from_remote: false,
131
- id: node_data.id,
132
- node: { name: new_name },
133
- });
134
- };
135
- return (
136
- <input
137
- className="nodename_input"
138
- value={name}
139
- onChange={handleChange}
140
- onBlur={finalSetName}
141
- />
142
- );
143
- };
144
-
145
- const NodeFooter = ({ node_data }: { node_data: NodeType }) => {
146
- return (
147
- <div className="nodefooter">
148
- {node_data.error && <div className="nodeerror">{node_data.error}</div>}
149
- </div>
150
- );
151
- };
152
- /**
153
- * A generic function to deeply merge two objects of type T.
154
- *
155
- * @param {T} target - The target object to be merged.
156
- * @param {DeepPartial<T>} source - The source object to merge into the target. All properties of this object are optional.
157
- *
158
- * @returns {Object} An object containing the merged object (new_obj) and a boolean indicating if there was a change (change).
159
- *
160
- * @throws {Type 'string' cannot be used to index type 'T'} This error is ignored using the @ts-ignore directive because we are dynamically accessing properties of a generic type T.
161
- */
162
- const DefaultNode = ({ data }: { data: { UseNodeStore: NodeStore } }) => {
163
- // Use the NodeStore to get the data for the node.
164
- const storedata = data.UseNodeStore();
165
-
166
- const collapsed = storedata.frontend.collapsed || true;
167
-
168
- const [visualTrigger, setVisualTrigger] = useState(false);
169
-
170
- useEffect(() => {
171
- let timeoutId: NodeJS.Timeout;
172
- // When in_trigger becomes true, set visualTrigger to true immediately
173
- if (storedata.in_trigger) {
174
- setVisualTrigger(true);
175
- } else if (visualTrigger) {
176
- // When in_trigger becomes false, wait for a minimum duration before setting visualTrigger to false
177
- timeoutId = setTimeout(() => setVisualTrigger(false), 200); // 50ms or any other duration you see fit
178
- }
179
-
180
- return () => clearTimeout(timeoutId); // Cleanup timeout on component unmount or state changes
181
- }, [storedata.in_trigger, visualTrigger]);
182
-
183
- return (
184
- <>
185
- {/* <NodeResizeControl
186
- minWidth={100}
187
- minHeight={100}
188
- className="noderesizecontrol"
189
- >
190
- <ExpandIcon fontSize="inherit" className="noderesizeicon" />
191
- </NodeResizeControl> */}
192
- <div
193
- className={
194
- "innernode" +
195
- (visualTrigger ? " intrigger" : "") +
196
- (storedata.error ? " error" : "")
197
- }
198
- >
199
- <NodeHeader node_data={storedata} />
200
- <NodeName node_data={storedata} />
201
- <NodeBody node_data={storedata} />
202
- <NodeFooter node_data={storedata} />
203
- </div>
204
- </>
205
- );
206
- };
207
-
208
- export default DefaultNode;
209
- export {};
@@ -1,37 +0,0 @@
1
- .colorspace {
2
- margin: 0.2rem;
3
- &_title {
4
- font-size: 0.7em;
5
- font-weight: bold;
6
- }
7
-
8
- display: grid;
9
- grid-template-columns: auto minmax(0, 1fr);
10
-
11
- & label {
12
- font-size: 0.7rem;
13
- }
14
- & input {
15
- font-size: 0.7rem;
16
- max-height: 0.7rem;
17
- }
18
- & input[type="range"] {
19
- width: 100%;
20
- margin: 0;
21
- padding: 0;
22
- -webkit-appearance: none;
23
- background-color: #666;
24
- height: 0.7rem;
25
- border-radius: 5px;
26
-
27
- &::-webkit-slider-thumb,
28
- &::-webkit-range-thumb,
29
- &::-moz-range-thumb {
30
- width: 0.7rem;
31
- height: 0.7rem;
32
- background-color: #cc1c1c;
33
- border-radius: 50%;
34
- cursor: pointer;
35
- }
36
- }
37
- }