windmill-components 1.379.4 → 1.382.1

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 (173) hide show
  1. package/package/components/ArgInput.svelte +33 -3
  2. package/package/components/DisplayResult.svelte +17 -5
  3. package/package/components/ErrorOrRecoveryHandler.svelte +3 -2
  4. package/package/components/FlowBuilder.svelte +3 -0
  5. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  6. package/package/components/FlowGraphViewer.svelte +6 -5
  7. package/package/components/FlowJobResult.svelte +4 -2
  8. package/package/components/FlowJobResult.svelte.d.ts +2 -0
  9. package/package/components/FlowStatusViewerInner.svelte +17 -6
  10. package/package/components/FlowViewer.svelte +1 -0
  11. package/package/components/HighlightCode.svelte +2 -2
  12. package/package/components/ModulePreviewForm.svelte +1 -1
  13. package/package/components/ObjectResourceInput.svelte +7 -2
  14. package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
  15. package/package/components/ResourcePicker.svelte +60 -48
  16. package/package/components/ScriptVersionHistory.svelte +63 -7
  17. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +3 -2
  18. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +22 -5
  19. package/package/components/apps/components/display/table/AppAggridTable.svelte +14 -5
  20. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +23 -8
  21. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +5 -3
  22. package/package/components/apps/components/display/table/utils.js +8 -7
  23. package/package/components/apps/components/helpers/RunnableComponent.svelte +13 -1
  24. package/package/components/apps/components/helpers/eval.js +31 -25
  25. package/package/components/apps/editor/AppEditorHeader.svelte +1 -0
  26. package/package/components/apps/editor/AppReportsDrawer.svelte +4 -3
  27. package/package/components/apps/editor/component/components.d.ts +1 -1
  28. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
  29. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte +55 -45
  30. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte.d.ts +7 -9
  31. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +66 -59
  32. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +9 -11
  33. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +213 -254
  34. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte.d.ts +0 -1
  35. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.d.ts +1 -1
  36. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.js +2 -6
  37. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  38. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  39. package/package/components/details/DetailPageLayout.svelte +2 -0
  40. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  41. package/package/components/details/EmailTriggerPanel.svelte +128 -0
  42. package/package/components/details/EmailTriggerPanel.svelte.d.ts +20 -0
  43. package/package/components/details/WebhooksPanel.svelte +7 -68
  44. package/package/components/flows/FlowHistory.svelte +1 -0
  45. package/package/components/flows/content/FlowInputs.svelte +0 -1
  46. package/package/components/flows/content/FlowModuleScript.svelte +33 -3
  47. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  48. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -0
  49. package/package/components/flows/flowInfers.js +1 -1
  50. package/package/components/flows/map/FlowJobsMenu.svelte +39 -44
  51. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -2
  52. package/package/components/flows/map/FlowModuleSchemaMap.svelte +4 -3
  53. package/package/components/flows/map/InsertModuleButton.svelte +16 -9
  54. package/package/components/flows/map/MapItem.svelte +3 -97
  55. package/package/components/flows/map/MapItem.svelte.d.ts +0 -5
  56. package/package/components/flows/map/VirtualItem.svelte +6 -159
  57. package/package/components/flows/map/VirtualItem.svelte.d.ts +0 -15
  58. package/package/components/graph/FlowGraphV2.svelte +256 -0
  59. package/package/components/graph/{FlowGraph.svelte.d.ts → FlowGraphV2.svelte.d.ts} +8 -8
  60. package/package/components/graph/graphBuilder.d.ts +15 -0
  61. package/package/components/graph/graphBuilder.js +337 -0
  62. package/package/components/graph/index.d.ts +0 -1
  63. package/package/components/graph/index.js +0 -1
  64. package/package/components/graph/model.d.ts +1 -8
  65. package/package/components/graph/renderers/edges/BaseEdge.svelte +109 -0
  66. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +35 -0
  67. package/package/components/graph/renderers/edges/DataflowEdge.svelte +37 -0
  68. package/package/components/graph/renderers/edges/DataflowEdge.svelte.d.ts +29 -0
  69. package/package/components/graph/renderers/edges/EmptyEdge.svelte +22 -0
  70. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +23 -0
  71. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +44 -0
  72. package/package/components/graph/renderers/nodes/BranchAllStart.svelte.d.ts +29 -0
  73. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +41 -0
  74. package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +29 -0
  75. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +19 -0
  76. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte.d.ts +24 -0
  77. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +20 -0
  78. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte.d.ts +25 -0
  79. package/package/components/graph/renderers/nodes/InputNode.svelte +74 -0
  80. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +23 -0
  81. package/package/components/graph/renderers/nodes/ModuleNode.svelte +71 -0
  82. package/package/components/graph/renderers/nodes/ModuleNode.svelte.d.ts +41 -0
  83. package/package/components/graph/renderers/nodes/NoBranchNode.svelte +20 -0
  84. package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +27 -0
  85. package/package/components/graph/renderers/nodes/NodeWrapper.svelte +21 -0
  86. package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +22 -0
  87. package/package/components/graph/renderers/nodes/ResultNode.svelte +24 -0
  88. package/package/components/graph/renderers/nodes/ResultNode.svelte.d.ts +22 -0
  89. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte +19 -0
  90. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte.d.ts +26 -0
  91. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +19 -0
  92. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte.d.ts +24 -0
  93. package/package/components/graph/renderers/utils.d.ts +8 -0
  94. package/package/components/graph/renderers/utils.js +26 -0
  95. package/package/components/graph/util.d.ts +1 -2
  96. package/package/components/graph/util.js +2 -8
  97. package/package/components/runs/RunsFilter.svelte +15 -17
  98. package/package/gen/core/OpenAPI.js +1 -1
  99. package/package/gen/schemas.gen.d.ts +3 -0
  100. package/package/gen/schemas.gen.js +3 -0
  101. package/package/gen/services.gen.d.ts +22 -3
  102. package/package/gen/services.gen.js +38 -2
  103. package/package/gen/types.gen.d.ts +69 -6
  104. package/package/hub.d.ts +11 -0
  105. package/package/hub.js +2 -0
  106. package/package/hubPaths.json +9 -0
  107. package/package/init_scripts/python_failure_module.d.ts +1 -1
  108. package/package/init_scripts/python_failure_module.js +4 -3
  109. package/package/script_helpers.d.ts +2 -2
  110. package/package/script_helpers.js +11 -9
  111. package/package.json +2 -1
  112. package/package/components/graph/FlowGraph.svelte +0 -614
  113. package/package/components/graph/svelvet/LICENSE +0 -21
  114. package/package/components/graph/svelvet/container/README.md +0 -7
  115. package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
  116. package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
  117. package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
  118. package/package/components/graph/svelvet/container/models/index.js +0 -1
  119. package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
  120. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
  121. package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
  122. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
  123. package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
  124. package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
  125. package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
  126. package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
  127. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
  128. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
  129. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
  130. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
  131. package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
  132. package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
  133. package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
  134. package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
  135. package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
  136. package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
  137. package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
  138. package/package/components/graph/svelvet/edges/types/types.js +0 -1
  139. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
  140. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
  141. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
  142. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
  143. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
  144. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
  145. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
  146. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
  147. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
  148. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
  149. package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
  150. package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
  151. package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
  152. package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
  153. package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
  154. package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
  155. package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
  156. package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
  157. package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
  158. package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
  159. package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
  160. package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
  161. package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
  162. package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
  163. package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
  164. package/package/components/graph/svelvet/store/controllers/util.js +0 -148
  165. package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
  166. package/package/components/graph/svelvet/store/models/store.js +0 -12
  167. package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
  168. package/package/components/graph/svelvet/store/types/types.js +0 -1
  169. package/package/components/graph/svelvet/types/README.md +0 -3
  170. package/package/components/graph/svelvet/types/index.d.ts +0 -2
  171. package/package/components/graph/svelvet/types/index.js +0 -1
  172. package/package/components/graph/svelvet/types/types.d.ts +0 -50
  173. package/package/components/graph/svelvet/types/types.js +0 -18
@@ -0,0 +1,15 @@
1
+ import type { FlowModule } from '../../gen';
2
+ import { type Node, type Edge } from '@xyflow/svelte';
3
+ export type GraphEventHandlers = {
4
+ insert: (detail: any) => void;
5
+ deleteBranch: (detail: any, label: string) => void;
6
+ select: (modId: string) => void;
7
+ delete: (detail: any, label: string) => void;
8
+ newBranch: (module: FlowModule) => void;
9
+ move: (module: FlowModule, modules: FlowModule[]) => void;
10
+ selectedIteration: (detail: any, moduleId: string) => void;
11
+ };
12
+ export default function graphBuilder(modules: FlowModule[] | undefined, extra: Record<string, any>, failureModule: FlowModule | undefined, eventHandlers: GraphEventHandlers, success: boolean | undefined, useDataflow: boolean | undefined, selectedId: string | undefined, moving: string | undefined): {
13
+ nodes: Node[];
14
+ edges: Edge[];
15
+ };
@@ -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;
@@ -50,6 +42,7 @@ export type GraphModuleState = {
50
42
  flow_jobs_results?: any;
51
43
  branchChosen?: number;
52
44
  result?: any;
45
+ tag?: string;
53
46
  scheduled_for?: Date;
54
47
  job_id?: string;
55
48
  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 {};