windmill-components 1.379.4 → 1.382.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 (199) hide show
  1. package/package/base.d.ts +1 -1
  2. package/package/base.js +1 -1
  3. package/package/components/ArgInput.svelte +33 -3
  4. package/package/components/DisplayResult.svelte +17 -5
  5. package/package/components/EditorBar.svelte +48 -38
  6. package/package/components/EditorBar.svelte.d.ts +2 -0
  7. package/package/components/ErrorOrRecoveryHandler.svelte +3 -2
  8. package/package/components/FlowBuilder.svelte +18 -12
  9. package/package/components/FlowBuilder.svelte.d.ts +3 -2
  10. package/package/components/FlowGraphViewer.svelte +6 -5
  11. package/package/components/FlowJobResult.svelte +4 -2
  12. package/package/components/FlowJobResult.svelte.d.ts +2 -0
  13. package/package/components/FlowStatusViewer.svelte +7 -1
  14. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  15. package/package/components/FlowStatusViewerInner.svelte +29 -11
  16. package/package/components/FlowViewer.svelte +3 -1
  17. package/package/components/FlowViewer.svelte.d.ts +1 -0
  18. package/package/components/HighlightCode.svelte +2 -2
  19. package/package/components/ModulePreviewForm.svelte +1 -1
  20. package/package/components/ObjectResourceInput.svelte +7 -2
  21. package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
  22. package/package/components/ResourcePicker.svelte +60 -48
  23. package/package/components/ScriptBuilder.svelte +42 -36
  24. package/package/components/ScriptBuilder.svelte.d.ts +2 -0
  25. package/package/components/ScriptEditor.svelte +3 -1
  26. package/package/components/ScriptEditor.svelte.d.ts +2 -0
  27. package/package/components/ScriptVersionHistory.svelte +63 -7
  28. package/package/components/apps/components/display/AppText.svelte +8 -3
  29. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +3 -2
  30. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +22 -5
  31. package/package/components/apps/components/display/table/AppAggridTable.svelte +14 -5
  32. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +23 -8
  33. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +5 -3
  34. package/package/components/apps/components/display/table/utils.js +8 -7
  35. package/package/components/apps/components/helpers/RunnableComponent.svelte +13 -1
  36. package/package/components/apps/components/helpers/eval.js +31 -25
  37. package/package/components/apps/components/inputs/AppSelect.svelte +45 -29
  38. package/package/components/apps/editor/AppEditorHeader.svelte +1 -0
  39. package/package/components/apps/editor/AppReportsDrawer.svelte +4 -3
  40. package/package/components/apps/editor/component/components.d.ts +7 -1
  41. package/package/components/apps/editor/component/components.js +6 -0
  42. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
  43. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte +55 -45
  44. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte.d.ts +7 -9
  45. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +66 -59
  46. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +9 -11
  47. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +213 -254
  48. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte.d.ts +0 -1
  49. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.d.ts +1 -1
  50. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.js +2 -6
  51. package/package/components/custom_ui.d.ts +35 -1
  52. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  53. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  54. package/package/components/details/DetailPageLayout.svelte +2 -0
  55. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  56. package/package/components/details/EmailTriggerPanel.svelte +128 -0
  57. package/package/components/details/EmailTriggerPanel.svelte.d.ts +20 -0
  58. package/package/components/details/WebhooksPanel.svelte +10 -71
  59. package/package/components/flows/FlowHistory.svelte +1 -0
  60. package/package/components/flows/content/FlowInputs.svelte +0 -1
  61. package/package/components/flows/content/FlowModuleComponent.svelte +8 -2
  62. package/package/components/flows/content/FlowModuleEarlyStop.svelte +193 -66
  63. package/package/components/flows/content/FlowModuleHeader.svelte +1 -1
  64. package/package/components/flows/content/FlowModuleScript.svelte +33 -3
  65. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  66. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -0
  67. package/package/components/flows/content/FlowSettings.svelte +26 -15
  68. package/package/components/flows/flowExplorer.js +3 -0
  69. package/package/components/flows/flowInfers.js +1 -1
  70. package/package/components/flows/map/FlowJobsMenu.svelte +39 -44
  71. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -2
  72. package/package/components/flows/map/FlowModuleSchemaMap.svelte +4 -3
  73. package/package/components/flows/map/InsertModuleButton.svelte +16 -9
  74. package/package/components/flows/map/MapItem.svelte +4 -98
  75. package/package/components/flows/map/MapItem.svelte.d.ts +0 -5
  76. package/package/components/flows/map/VirtualItem.svelte +6 -159
  77. package/package/components/flows/map/VirtualItem.svelte.d.ts +0 -15
  78. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  79. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  80. package/package/components/flows/types.d.ts +2 -0
  81. package/package/components/graph/FlowGraphV2.svelte +256 -0
  82. package/package/components/graph/{FlowGraph.svelte.d.ts → FlowGraphV2.svelte.d.ts} +8 -8
  83. package/package/components/graph/graphBuilder.d.ts +15 -0
  84. package/package/components/graph/graphBuilder.js +337 -0
  85. package/package/components/graph/index.d.ts +0 -1
  86. package/package/components/graph/index.js +0 -1
  87. package/package/components/graph/model.d.ts +4 -8
  88. package/package/components/graph/renderers/edges/BaseEdge.svelte +109 -0
  89. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +35 -0
  90. package/package/components/graph/renderers/edges/DataflowEdge.svelte +37 -0
  91. package/package/components/graph/renderers/edges/DataflowEdge.svelte.d.ts +29 -0
  92. package/package/components/graph/renderers/edges/EmptyEdge.svelte +22 -0
  93. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +23 -0
  94. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +44 -0
  95. package/package/components/graph/renderers/nodes/BranchAllStart.svelte.d.ts +29 -0
  96. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +41 -0
  97. package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +29 -0
  98. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +19 -0
  99. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte.d.ts +24 -0
  100. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +20 -0
  101. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte.d.ts +25 -0
  102. package/package/components/graph/renderers/nodes/InputNode.svelte +74 -0
  103. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +23 -0
  104. package/package/components/graph/renderers/nodes/ModuleNode.svelte +71 -0
  105. package/package/components/graph/renderers/nodes/ModuleNode.svelte.d.ts +41 -0
  106. package/package/components/graph/renderers/nodes/NoBranchNode.svelte +20 -0
  107. package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +27 -0
  108. package/package/components/graph/renderers/nodes/NodeWrapper.svelte +21 -0
  109. package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +22 -0
  110. package/package/components/graph/renderers/nodes/ResultNode.svelte +24 -0
  111. package/package/components/graph/renderers/nodes/ResultNode.svelte.d.ts +22 -0
  112. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte +19 -0
  113. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte.d.ts +26 -0
  114. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +19 -0
  115. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte.d.ts +24 -0
  116. package/package/components/graph/renderers/utils.d.ts +8 -0
  117. package/package/components/graph/renderers/utils.js +26 -0
  118. package/package/components/graph/util.d.ts +1 -2
  119. package/package/components/graph/util.js +2 -8
  120. package/package/components/propertyPicker/PropPickerResult.svelte +6 -1
  121. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  122. package/package/components/runs/RunsFilter.svelte +15 -17
  123. package/package/components/sidebar/changelogs.js +5 -0
  124. package/package/gen/core/OpenAPI.js +1 -1
  125. package/package/gen/schemas.gen.d.ts +3 -0
  126. package/package/gen/schemas.gen.js +3 -0
  127. package/package/gen/services.gen.d.ts +22 -3
  128. package/package/gen/services.gen.js +38 -2
  129. package/package/gen/types.gen.d.ts +69 -6
  130. package/package/hub.d.ts +11 -0
  131. package/package/hub.js +2 -0
  132. package/package/hubPaths.json +9 -0
  133. package/package/init_scripts/python_failure_module.d.ts +1 -1
  134. package/package/init_scripts/python_failure_module.js +4 -3
  135. package/package/script_helpers.d.ts +2 -2
  136. package/package/script_helpers.js +11 -9
  137. package/package.json +2 -1
  138. package/package/components/graph/FlowGraph.svelte +0 -614
  139. package/package/components/graph/svelvet/LICENSE +0 -21
  140. package/package/components/graph/svelvet/container/README.md +0 -7
  141. package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
  142. package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
  143. package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
  144. package/package/components/graph/svelvet/container/models/index.js +0 -1
  145. package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
  146. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
  147. package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
  148. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
  149. package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
  150. package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
  151. package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
  152. package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
  153. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
  154. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
  155. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
  156. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
  157. package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
  158. package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
  159. package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
  160. package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
  161. package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
  162. package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
  163. package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
  164. package/package/components/graph/svelvet/edges/types/types.js +0 -1
  165. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
  166. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
  167. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
  168. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
  169. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
  170. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
  171. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
  172. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
  173. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
  174. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
  175. package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
  176. package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
  177. package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
  178. package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
  179. package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
  180. package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
  181. package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
  182. package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
  183. package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
  184. package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
  185. package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
  186. package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
  187. package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
  188. package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
  189. package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
  190. package/package/components/graph/svelvet/store/controllers/util.js +0 -148
  191. package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
  192. package/package/components/graph/svelvet/store/models/store.js +0 -12
  193. package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
  194. package/package/components/graph/svelvet/store/types/types.js +0 -1
  195. package/package/components/graph/svelvet/types/README.md +0 -3
  196. package/package/components/graph/svelvet/types/index.d.ts +0 -2
  197. package/package/components/graph/svelvet/types/index.js +0 -1
  198. package/package/components/graph/svelvet/types/types.d.ts +0 -50
  199. package/package/components/graph/svelvet/types/types.js +0 -18
@@ -0,0 +1,337 @@
1
+ import {} from '@xyflow/svelte';
2
+ import { getDependeeAndDependentComponents } from '../flows/flowExplorer';
3
+ import { dfsByModule } from '../flows/previousResults';
4
+ import { defaultIfEmptyString } from '../../utils';
5
+ export default function graphBuilder(modules, extra, failureModule, eventHandlers, success, useDataflow, selectedId, moving) {
6
+ const nodes = [];
7
+ const edges = [];
8
+ if (!modules) {
9
+ return { nodes, edges };
10
+ }
11
+ function addNode(module, offset, type, subModules) {
12
+ nodes.push({
13
+ id: module.id,
14
+ data: {
15
+ value: module.value,
16
+ offset: offset,
17
+ module: module,
18
+ modules: subModules ?? modules,
19
+ parentIds: [],
20
+ eventHandlers: eventHandlers,
21
+ moving: moving,
22
+ ...extra
23
+ },
24
+ position: { x: -1, y: -1 },
25
+ type: type
26
+ });
27
+ return module.id;
28
+ }
29
+ const parents = {};
30
+ function addEdge(sourceId, targetId, options) {
31
+ parents[targetId] = [...(parents[targetId] ?? []), sourceId];
32
+ // Find the index of the target module in the modules array
33
+ const mods = options?.subModules ?? modules;
34
+ // Index of the target module in the modules array
35
+ let index = mods?.findIndex((m) => m.id === targetId) ?? -1;
36
+ edges.push({
37
+ id: options?.customId || `edge:${sourceId}->${targetId}`,
38
+ source: sourceId,
39
+ target: targetId,
40
+ type: options?.type ?? 'edge',
41
+ data: {
42
+ insertable: extra.insertable,
43
+ modules: options?.subModules ?? modules,
44
+ sourceId,
45
+ targetId,
46
+ moving,
47
+ eventHandlers,
48
+ disableMoveIds: options?.disableMoveIds,
49
+ enableTrigger: sourceId === 'Input',
50
+ // If the index is -1, it means that the target module is not in the modules array, so we set it to the length of the array
51
+ index: index >= 0 ? index : mods?.length ?? 0,
52
+ ...extra
53
+ }
54
+ });
55
+ }
56
+ const inputNode = {
57
+ id: 'Input',
58
+ position: { x: -1, y: -1 },
59
+ type: 'input2',
60
+ data: {
61
+ eventHandlers: eventHandlers,
62
+ modules: modules,
63
+ ...extra
64
+ }
65
+ };
66
+ const resultNode = {
67
+ id: 'result',
68
+ data: {
69
+ eventHandlers: eventHandlers,
70
+ modules: modules,
71
+ success: success,
72
+ ...extra
73
+ },
74
+ position: { x: -1, y: -1 },
75
+ type: 'result'
76
+ };
77
+ nodes.push(inputNode);
78
+ nodes.push(resultNode);
79
+ function processModules(modules, beforeNode, nextNode, currentOffset = 0, disableMoveIds = []) {
80
+ let previousId = undefined;
81
+ if (modules.length === 0) {
82
+ addEdge(beforeNode.id, nextNode.id, {
83
+ subModules: modules,
84
+ disableMoveIds
85
+ });
86
+ }
87
+ else {
88
+ modules.forEach((module, index) => {
89
+ const localDisableMoveIds = [...disableMoveIds, module.id];
90
+ // Add the edge between the previous node and the current one
91
+ if (index > 0 && previousId) {
92
+ addEdge(previousId, module.id, {
93
+ subModules: modules,
94
+ disableMoveIds
95
+ });
96
+ }
97
+ if (module.value.type === 'branchall') {
98
+ // Start
99
+ addNode(module, currentOffset, 'module', modules);
100
+ // "Collect result of each branch" node
101
+ const endNode = {
102
+ id: `${module.id}-end`,
103
+ data: {
104
+ offset: currentOffset,
105
+ id: module.id,
106
+ module: module,
107
+ modules: modules,
108
+ ...extra
109
+ },
110
+ position: { x: -1, y: -1 },
111
+ type: 'branchAllEnd'
112
+ };
113
+ nodes.push(endNode);
114
+ if (module.value.branches.length === 0) {
115
+ // Add a "No branches" node
116
+ const startNode = {
117
+ id: `${module.id}-branch-0`,
118
+ data: {
119
+ offset: currentOffset,
120
+ id: module.id,
121
+ branchIndex: -1,
122
+ modules: modules,
123
+ eventHandlers: eventHandlers,
124
+ ...extra
125
+ },
126
+ position: { x: -1, y: -1 },
127
+ type: 'noBranch'
128
+ };
129
+ nodes.push(startNode);
130
+ addEdge(module.id, startNode.id, {
131
+ type: 'empty'
132
+ });
133
+ addEdge(startNode.id, endNode.id, {
134
+ type: 'empty'
135
+ });
136
+ }
137
+ else {
138
+ module.value.branches.forEach((branch, branchIndex) => {
139
+ // Start node by branch
140
+ const startNode = {
141
+ id: `${module.id}-branch-${branchIndex}`,
142
+ data: {
143
+ offset: currentOffset,
144
+ label: defaultIfEmptyString(branch.summary, `Branch ${branchIndex + 1}`),
145
+ id: module.id,
146
+ branchIndex: branchIndex,
147
+ modules: modules,
148
+ eventHandlers: eventHandlers,
149
+ ...extra
150
+ },
151
+ position: { x: -1, y: -1 },
152
+ type: 'branchAllStart'
153
+ };
154
+ nodes.push(startNode);
155
+ addEdge(module.id, startNode.id, {
156
+ type: 'empty'
157
+ });
158
+ processModules(branch.modules, startNode, endNode, currentOffset, localDisableMoveIds);
159
+ });
160
+ }
161
+ previousId = endNode.id;
162
+ }
163
+ else if (module.value.type === 'forloopflow') {
164
+ addNode(module, currentOffset, 'module', modules);
165
+ const startNode = {
166
+ id: `${module.id}-start`,
167
+ data: {
168
+ offset: currentOffset + 25,
169
+ id: module.id,
170
+ module: module,
171
+ modules: modules,
172
+ eventHandlers: eventHandlers,
173
+ ...extra
174
+ },
175
+ position: { x: -1, y: -1 },
176
+ type: 'forLoopStart'
177
+ };
178
+ addEdge(module.id, startNode.id, {
179
+ type: 'empty'
180
+ });
181
+ const endNode = {
182
+ id: `${module.id}-end`,
183
+ data: {
184
+ offset: currentOffset,
185
+ id: module.id,
186
+ module: module,
187
+ modules: modules,
188
+ eventHandlers: eventHandlers,
189
+ ...extra
190
+ },
191
+ position: { x: -1, y: -1 },
192
+ type: 'forLoopEnd'
193
+ };
194
+ nodes.push(startNode);
195
+ nodes.push(endNode);
196
+ processModules(module.value.modules, startNode, endNode, currentOffset + 25, localDisableMoveIds);
197
+ previousId = endNode.id;
198
+ }
199
+ else if (module.value.type === 'whileloopflow') {
200
+ addNode(module, currentOffset, 'module', modules);
201
+ const startNode = {
202
+ id: `${module.id}-start`,
203
+ data: {
204
+ offset: currentOffset + 25,
205
+ module: module,
206
+ modules: modules,
207
+ eventHandlers: eventHandlers,
208
+ ...extra
209
+ },
210
+ position: { x: -1, y: -1 },
211
+ type: 'whileLoopStart'
212
+ };
213
+ addEdge(module.id, startNode.id, {
214
+ type: 'empty'
215
+ });
216
+ const endNode = {
217
+ id: `${module.id}-end`,
218
+ data: { offset: currentOffset, module: module, modules: modules, ...extra },
219
+ position: { x: -1, y: -1 },
220
+ type: 'whileLoopEnd'
221
+ };
222
+ nodes.push(startNode);
223
+ nodes.push(endNode);
224
+ processModules(module.value.modules, startNode, endNode, currentOffset + 25, localDisableMoveIds);
225
+ previousId = endNode.id;
226
+ }
227
+ else if (module.value.type === 'branchone') {
228
+ addNode(module, currentOffset, 'module', modules);
229
+ const endNode = {
230
+ id: `${module.id}-end`,
231
+ data: { offset: currentOffset, eventHandlers: eventHandlers },
232
+ position: { x: -1, y: -1 },
233
+ type: 'branchOneEnd'
234
+ };
235
+ nodes.push(endNode);
236
+ // Add default branch
237
+ const defaultBranch = {
238
+ id: `${module.id}-default`,
239
+ data: {
240
+ offset: currentOffset,
241
+ label: 'Default',
242
+ id: module.id,
243
+ branchIndex: -1,
244
+ modules: module.value.default,
245
+ eventHandlers: eventHandlers,
246
+ ...extra
247
+ },
248
+ position: { x: -1, y: -1 },
249
+ type: 'noBranch'
250
+ };
251
+ nodes.push(defaultBranch);
252
+ addEdge(module.id, defaultBranch.id, { type: 'empty' });
253
+ processModules(module.value.default, defaultBranch, endNode, currentOffset, localDisableMoveIds);
254
+ module.value.branches.forEach((branch, branchIndex) => {
255
+ // Start node by branch
256
+ const startNode = {
257
+ id: `${module.id}-branch-${branchIndex}`,
258
+ data: {
259
+ offset: currentOffset,
260
+ label: defaultIfEmptyString(branch.summary, 'Branch ' + (branchIndex + 1)) +
261
+ '\n`' +
262
+ branch.expr +
263
+ '`',
264
+ id: module.id,
265
+ branchIndex: branchIndex,
266
+ modules: modules,
267
+ eventHandlers: eventHandlers,
268
+ ...extra
269
+ },
270
+ position: { x: -1, y: -1 },
271
+ type: 'branchOneStart'
272
+ };
273
+ nodes.push(startNode);
274
+ addEdge(module.id, startNode.id, { type: 'empty' });
275
+ processModules(branch.modules, startNode, endNode, currentOffset, localDisableMoveIds);
276
+ });
277
+ previousId = endNode.id;
278
+ }
279
+ else {
280
+ addNode(module, currentOffset, 'module', modules);
281
+ previousId = module.id;
282
+ }
283
+ if (index === 0) {
284
+ addEdge(beforeNode.id, module.id, {
285
+ subModules: modules,
286
+ disableMoveIds
287
+ });
288
+ }
289
+ if (index === modules.length - 1 && previousId) {
290
+ addEdge(previousId, nextNode.id, {
291
+ subModules: modules,
292
+ disableMoveIds
293
+ });
294
+ }
295
+ });
296
+ }
297
+ }
298
+ processModules(modules, inputNode, resultNode);
299
+ if (failureModule) {
300
+ addNode(failureModule, 0, 'module');
301
+ }
302
+ Object.keys(parents).forEach((key) => {
303
+ const node = nodes.find((n) => n.id === key);
304
+ if (node) {
305
+ node.data.parentIds = parents[key];
306
+ }
307
+ });
308
+ if (useDataflow && selectedId) {
309
+ let deps = getDependeeAndDependentComponents(selectedId, modules ?? [], failureModule);
310
+ if (deps) {
311
+ Object.entries(deps.dependees).forEach((x, i) => {
312
+ const inputs = x[1];
313
+ inputs?.forEach((input, index) => {
314
+ let pid = x[0];
315
+ if (input?.startsWith('flow_input.iter')) {
316
+ const parent = dfsByModule(selectedId, modules ?? [])?.pop();
317
+ if (parent?.id) {
318
+ pid = parent.id;
319
+ }
320
+ }
321
+ addEdge(pid, selectedId, {
322
+ customId: `dep-${pid}-${selectedId}-${input}-${index}`,
323
+ type: 'dataflowedge'
324
+ });
325
+ });
326
+ });
327
+ Object.entries(deps.dependents).forEach((x, i) => {
328
+ let pid = x[0];
329
+ addEdge(selectedId, pid, {
330
+ customId: `dep-${selectedId}-${pid}-${i}`,
331
+ type: 'dataflowedge'
332
+ });
333
+ });
334
+ }
335
+ }
336
+ return { nodes, edges };
337
+ }
@@ -1,3 +1,2 @@
1
- export { default as FlowGraph } from './FlowGraph.svelte';
2
1
  export * from './model';
3
2
  export * from './util';
@@ -1,3 +1,2 @@
1
- export { default as FlowGraph } from './FlowGraph.svelte';
2
1
  export * from './model';
3
2
  export * from './util';
@@ -1,16 +1,8 @@
1
1
  /// <reference types="svelte" />
2
2
  import type { FlowStatusModule, Job } from '../../gen';
3
3
  import type { Writable } from 'svelte/store';
4
- import type { UserNodeType } from './svelvet/types';
5
4
  import type { FlowState } from '../flows/flowState';
6
5
  export type ModuleHost = 'workspace' | 'inline' | 'hub';
7
- export type Node = UserNodeType & {
8
- parentIds: string[];
9
- edgeLabel?: string;
10
- host?: ModuleHost;
11
- type: 'node';
12
- loopDepth: number;
13
- };
14
6
  export type Loop = {
15
7
  type: 'loop';
16
8
  items: NestedNodes;
@@ -42,6 +34,9 @@ export type FlowStatusViewerContext = {
42
34
  nb: number;
43
35
  job: Job;
44
36
  }>>;
37
+ hideDownloadInGraph?: boolean;
38
+ hideTimeline?: boolean;
39
+ hideNodeDefinition?: boolean;
45
40
  };
46
41
  export type GraphModuleState = {
47
42
  type: FlowStatusModule['type'];
@@ -50,6 +45,7 @@ export type GraphModuleState = {
50
45
  flow_jobs_results?: any;
51
46
  branchChosen?: number;
52
47
  result?: any;
48
+ tag?: string;
53
49
  scheduled_for?: Date;
54
50
  job_id?: string;
55
51
  parent_module?: string;
@@ -0,0 +1,109 @@
1
+ <script>import InsertModuleButton from '../../../flows/map/InsertModuleButton.svelte';
2
+ import { getBezierPath, BaseEdge, EdgeLabelRenderer } from '@xyflow/svelte';
3
+ import { ClipboardCopy } from 'lucide-svelte';
4
+ import { getContext } from 'svelte';
5
+ import { getStraightLinePath } from '../utils';
6
+ import InsertTriggerButton from '../../../flows/map/InsertTriggerButton.svelte';
7
+ import { twMerge } from 'tailwind-merge';
8
+ export let sourceX;
9
+ export let sourceY;
10
+ export let sourcePosition;
11
+ export let targetX;
12
+ export let targetY;
13
+ export let targetPosition;
14
+ export let markerEnd = undefined;
15
+ export let data;
16
+ $: [edgePath] = getBezierPath({
17
+ sourceX,
18
+ sourceY: targetY - sourceY > 100 ? targetY - 100 : sourceY,
19
+ sourcePosition,
20
+ targetX,
21
+ targetY,
22
+ targetPosition,
23
+ curvature: 0.25
24
+ });
25
+ $: completeEdge =
26
+ targetY - sourceY > 100
27
+ ? `${edgePath} ${getStraightLinePath({ sourceX, sourceY, targetY })}`
28
+ : edgePath;
29
+ const { useDataflow } = getContext('FlowGraphContext');
30
+ let menuOpen = false;
31
+ </script>
32
+
33
+ <EdgeLabelRenderer>
34
+ {#if data?.insertable && !$useDataflow && !data?.moving}
35
+ <div
36
+ class={twMerge('edgeButtonContainer nodrag nopan top-0', menuOpen ? 'z-50' : '')}
37
+ style:transform="translate(-50%, 50%) translate({sourceX}px,{sourceY}px)"
38
+ >
39
+ <InsertModuleButton
40
+ disableAi={data.disableAi}
41
+ index={data.index ?? 0}
42
+ trigger={data.enableTrigger}
43
+ modules={data?.modules ?? []}
44
+ on:new={(e) => {
45
+ data?.eventHandlers.insert({ modules: data.modules, index: data.index, detail: e.detail })
46
+ }}
47
+ bind:open={menuOpen}
48
+ />
49
+ </div>
50
+ {#if data.enableTrigger}
51
+ <div
52
+ class="edgeButtonContainer nodrag nopan"
53
+ style:transform="translate(100%, 50%) translate({sourceX}px,{sourceY}px)"
54
+ >
55
+ <InsertTriggerButton
56
+ disableAi={data.disableAi}
57
+ on:new={(e) => {
58
+ data?.eventHandlers.insert({
59
+ modules: data.modules,
60
+ index: data.index,
61
+ detail: e.detail
62
+ })
63
+ }}
64
+ index={data?.index ?? 0}
65
+ modules={data?.modules ?? []}
66
+ />
67
+ </div>
68
+ {/if}
69
+ {/if}
70
+
71
+ {#if data?.moving}
72
+ <div
73
+ class="edgeButtonContainer nodrag nopan"
74
+ style:transform="translate(-50%, 50%) translate({sourceX}px,{sourceY}px)"
75
+ >
76
+ {#if data.moving && !data.disableMoveIds?.includes(data.moving)}
77
+ <button
78
+ title="Paste module"
79
+ on:click={() => {
80
+ data.eventHandlers.insert({
81
+ modules: data.modules,
82
+ index: data.index
83
+ })
84
+ }}
85
+ type="button"
86
+ class={twMerge(
87
+ 'w-6 h-6 flex items-center justify-center',
88
+ 'border border-gray-300 dark:border-gray-500',
89
+ 'text-primary text-sm',
90
+ 'bg-surface focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-surface-selected rounded-full '
91
+ )}
92
+ >
93
+ <ClipboardCopy size={14} />
94
+ </button>
95
+ {/if}
96
+ </div>
97
+ {/if}
98
+ </EdgeLabelRenderer>
99
+
100
+ <BaseEdge path={completeEdge} {markerEnd} class={$useDataflow ? 'hidden' : ''} />
101
+
102
+ <style>
103
+ .edgeButtonContainer {
104
+ position: absolute;
105
+ font-size: 12pt;
106
+ /* everything inside EdgeLabelRenderer has no pointer events by default */
107
+ /* if you have an interactive element, set pointer-events: all */
108
+ pointer-events: all;
109
+ }</style>
@@ -0,0 +1,35 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { FlowModule } from '../../../../gen';
3
+ import { type Position } from '@xyflow/svelte';
4
+ import type { GraphEventHandlers } from '../../graphBuilder';
5
+ declare const __propDef: {
6
+ props: {
7
+ sourceX: number;
8
+ sourceY: number;
9
+ sourcePosition: Position;
10
+ targetX: number;
11
+ targetY: number;
12
+ targetPosition: Position;
13
+ markerEnd?: string | undefined;
14
+ data: {
15
+ insertable: boolean;
16
+ modules: FlowModule[];
17
+ moving: string | undefined;
18
+ eventHandlers: GraphEventHandlers;
19
+ index: number;
20
+ enableTrigger: boolean;
21
+ disableAi: boolean;
22
+ disableMoveIds: string[];
23
+ };
24
+ };
25
+ events: {
26
+ [evt: string]: CustomEvent<any>;
27
+ };
28
+ slots: {};
29
+ };
30
+ export type BaseEdgeProps = typeof __propDef.props;
31
+ export type BaseEdgeEvents = typeof __propDef.events;
32
+ export type BaseEdgeSlots = typeof __propDef.slots;
33
+ export default class BaseEdge extends SvelteComponent<BaseEdgeProps, BaseEdgeEvents, BaseEdgeSlots> {
34
+ }
35
+ export {};
@@ -0,0 +1,37 @@
1
+ <script>import { getBezierPath, BaseEdge, EdgeLabelRenderer } from '@xyflow/svelte';
2
+ import { getStraightLinePath } from '../utils';
3
+ export let sourceX;
4
+ export let sourceY;
5
+ export let sourcePosition;
6
+ export let targetX;
7
+ export let targetY;
8
+ export let targetPosition;
9
+ export let markerEnd = undefined;
10
+ export let data;
11
+ $: [edgePath, labelX, labelY] = getBezierPath({
12
+ sourceX,
13
+ sourceY: targetY - sourceY > 100 ? targetY - 100 : sourceY,
14
+ sourcePosition,
15
+ targetX,
16
+ targetY,
17
+ targetPosition,
18
+ curvature: 0.25
19
+ });
20
+ </script>
21
+
22
+ <EdgeLabelRenderer>
23
+ <div
24
+ class="absolute cursor-pointer nodrag nopan bg-surface-selected p-1 border text-xs"
25
+ style:transform="translate(-50%, -50%) translate({labelX}px,{labelY}px)"
26
+ >
27
+ {data.sourceId} -> {data.targetId}
28
+ </div>
29
+ </EdgeLabelRenderer>
30
+
31
+ <BaseEdge
32
+ path={targetY - sourceY > 100
33
+ ? `${edgePath} ${getStraightLinePath({ sourceX, sourceY, targetY })}`
34
+ : edgePath}
35
+ {markerEnd}
36
+ style={`animation:dashdraw 0.5s linear infinite; stroke-dasharray: 5px;`}
37
+ />
@@ -0,0 +1,29 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { FlowModule } from '../../../../gen';
3
+ import { type Position } from '@xyflow/svelte';
4
+ declare const __propDef: {
5
+ props: {
6
+ sourceX: number;
7
+ sourceY: number;
8
+ sourcePosition: Position;
9
+ targetX: number;
10
+ targetY: number;
11
+ targetPosition: Position;
12
+ markerEnd?: string | undefined;
13
+ data: {
14
+ modules: FlowModule[];
15
+ sourceId: string;
16
+ targetId: string;
17
+ };
18
+ };
19
+ events: {
20
+ [evt: string]: CustomEvent<any>;
21
+ };
22
+ slots: {};
23
+ };
24
+ export type DataflowEdgeProps = typeof __propDef.props;
25
+ export type DataflowEdgeEvents = typeof __propDef.events;
26
+ export type DataflowEdgeSlots = typeof __propDef.slots;
27
+ export default class DataflowEdge extends SvelteComponent<DataflowEdgeProps, DataflowEdgeEvents, DataflowEdgeSlots> {
28
+ }
29
+ export {};
@@ -0,0 +1,22 @@
1
+ <script>import { getBezierPath, BaseEdge } from '@xyflow/svelte';
2
+ import { getContext } from 'svelte';
3
+ export let sourceX;
4
+ export let sourceY;
5
+ export let sourcePosition;
6
+ export let targetX;
7
+ export let targetY;
8
+ export let targetPosition;
9
+ export let markerEnd = undefined;
10
+ const { useDataflow } = getContext('FlowGraphContext');
11
+ $: [edgePath] = getBezierPath({
12
+ sourceX,
13
+ sourceY,
14
+ sourcePosition,
15
+ targetX,
16
+ targetY,
17
+ targetPosition,
18
+ curvature: 0.25
19
+ });
20
+ </script>
21
+
22
+ <BaseEdge path={edgePath} {markerEnd} class={$useDataflow ? 'hidden' : ''} />
@@ -0,0 +1,23 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { type Position } from '@xyflow/svelte';
3
+ declare const __propDef: {
4
+ props: {
5
+ sourceX: number;
6
+ sourceY: number;
7
+ sourcePosition: Position;
8
+ targetX: number;
9
+ targetY: number;
10
+ targetPosition: Position;
11
+ markerEnd?: string | undefined;
12
+ };
13
+ events: {
14
+ [evt: string]: CustomEvent<any>;
15
+ };
16
+ slots: {};
17
+ };
18
+ export type EmptyEdgeProps = typeof __propDef.props;
19
+ export type EmptyEdgeEvents = typeof __propDef.events;
20
+ export type EmptyEdgeSlots = typeof __propDef.slots;
21
+ export default class EmptyEdge extends SvelteComponent<EmptyEdgeProps, EmptyEdgeEvents, EmptyEdgeSlots> {
22
+ }
23
+ export {};
@@ -0,0 +1,44 @@
1
+ <script>import VirtualItem from '../../../flows/map/VirtualItem.svelte';
2
+ import NodeWrapper from './NodeWrapper.svelte';
3
+ import { X } from 'lucide-svelte';
4
+ import { getStateColor } from '../../util';
5
+ import { computeBorderStatus } from '../utils';
6
+ export let data;
7
+ $: borderStatus = computeBorderStatus(data.branchIndex, 'branchall', data.flowModuleStates?.[data.id]);
8
+ </script>
9
+
10
+ <NodeWrapper let:darkMode offset={data.offset}>
11
+ <VirtualItem
12
+ label={data.label}
13
+ selectable
14
+ selected={data.selected}
15
+ bgColor={getStateColor(undefined, darkMode)}
16
+ borderColor={borderStatus
17
+ ? getStateColor(borderStatus, darkMode) + (!darkMode ? '; border-width: 3px' : '')
18
+ : undefined}
19
+ on:select={() => {
20
+ data.eventHandlers.select(data.id)
21
+ }}
22
+ on:insert={(e) => {
23
+ data.eventHandlers.insert(e.detail)
24
+ }}
25
+ />
26
+ {#if data.insertable}
27
+ <button
28
+ class="z-50 absolute -top-[10px] -right-[10px] rounded-full h-[20px] w-[20px] center-center text-primary
29
+ border-[1.5px] border-gray-700 bg-surface duration-150 hover:bg-red-400 hover:text-white
30
+ hover:border-red-700"
31
+ on:click|preventDefault|stopPropagation={() => {
32
+ data.eventHandlers.deleteBranch(
33
+ {
34
+ module: data.modules.find((m) => m.id === data.id),
35
+ index: data.branchIndex
36
+ },
37
+ data.label
38
+ )
39
+ }}
40
+ >
41
+ <X size={12} />
42
+ </button>
43
+ {/if}
44
+ </NodeWrapper>