windmill-components 1.379.3 → 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 (175) 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/home/Item.svelte +1 -1
  98. package/package/components/runs/RunsFilter.svelte +15 -17
  99. package/package/forLater.js +8 -4
  100. package/package/gen/core/OpenAPI.js +1 -1
  101. package/package/gen/schemas.gen.d.ts +3 -0
  102. package/package/gen/schemas.gen.js +3 -0
  103. package/package/gen/services.gen.d.ts +22 -3
  104. package/package/gen/services.gen.js +38 -2
  105. package/package/gen/types.gen.d.ts +69 -6
  106. package/package/hub.d.ts +11 -0
  107. package/package/hub.js +2 -0
  108. package/package/hubPaths.json +9 -0
  109. package/package/init_scripts/python_failure_module.d.ts +1 -1
  110. package/package/init_scripts/python_failure_module.js +4 -3
  111. package/package/script_helpers.d.ts +2 -2
  112. package/package/script_helpers.js +11 -9
  113. package/package.json +2 -1
  114. package/package/components/graph/FlowGraph.svelte +0 -614
  115. package/package/components/graph/svelvet/LICENSE +0 -21
  116. package/package/components/graph/svelvet/container/README.md +0 -7
  117. package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
  118. package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
  119. package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
  120. package/package/components/graph/svelvet/container/models/index.js +0 -1
  121. package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
  122. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
  123. package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
  124. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
  125. package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
  126. package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
  127. package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
  128. package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
  129. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
  130. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
  131. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
  132. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
  133. package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
  134. package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
  135. package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
  136. package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
  137. package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
  138. package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
  139. package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
  140. package/package/components/graph/svelvet/edges/types/types.js +0 -1
  141. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
  142. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
  143. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
  144. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
  145. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
  146. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
  147. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
  148. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
  149. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
  150. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
  151. package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
  152. package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
  153. package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
  154. package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
  155. package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
  156. package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
  157. package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
  158. package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
  159. package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
  160. package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
  161. package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
  162. package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
  163. package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
  164. package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
  165. package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
  166. package/package/components/graph/svelvet/store/controllers/util.js +0 -148
  167. package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
  168. package/package/components/graph/svelvet/store/models/store.js +0 -12
  169. package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
  170. package/package/components/graph/svelvet/store/types/types.js +0 -1
  171. package/package/components/graph/svelvet/types/README.md +0 -3
  172. package/package/components/graph/svelvet/types/index.d.ts +0 -2
  173. package/package/components/graph/svelvet/types/index.js +0 -1
  174. package/package/components/graph/svelvet/types/types.d.ts +0 -50
  175. package/package/components/graph/svelvet/types/types.js +0 -18
@@ -1,26 +1,20 @@
1
1
  <script>import { Button } from '../../common';
2
2
  import LanguageIcon from '../../common/languageIcons/LanguageIcon.svelte';
3
3
  import IconedResourceType from '../../IconedResourceType.svelte';
4
- import { Building, ClipboardCopy, GitBranchPlus, Repeat, Square, ArrowDown, GitBranch } from 'lucide-svelte';
4
+ import { Building, Repeat, Square, ArrowDown, GitBranch } from 'lucide-svelte';
5
5
  import { createEventDispatcher, getContext } from 'svelte';
6
6
  import FlowModuleSchemaItem from './FlowModuleSchemaItem.svelte';
7
- import InsertModuleButton from './InsertModuleButton.svelte';
8
7
  import { prettyLanguage } from '../../../common';
9
8
  import { msToSec } from '../../../utils';
10
9
  import BarsStaggered from '../../icons/BarsStaggered.svelte';
11
10
  import FlowJobsMenu from './FlowJobsMenu.svelte';
12
11
  export let mod;
13
- export let trigger;
14
12
  export let insertable;
15
- export let insertableEnd = false;
16
13
  export let annotation = undefined;
17
- export let branchable = false;
18
14
  export let bgColor = '';
19
15
  export let modules;
20
16
  export let moving = undefined;
21
17
  export let duration_ms = undefined;
22
- export let disableAi = false;
23
- export let wrapperId = undefined;
24
18
  export let retries = undefined;
25
19
  export let flowJobs;
26
20
  $: idx = modules.findIndex((m) => m.id === mod.id);
@@ -39,46 +33,9 @@ $: itemProps = {
39
33
  function onDelete(event) {
40
34
  dispatch('delete', event);
41
35
  }
42
- let openMenu = undefined;
43
- let openMenu2 = undefined;
44
36
  </script>
45
37
 
46
38
  {#if mod}
47
- {#if insertable}
48
- <div
49
- class="{openMenu
50
- ? 'z-20'
51
- : ''} w-[27px] absolute -top-[35px] left-[50%] right-[50%] -translate-x-1/2"
52
- >
53
- {#if moving}
54
- <button
55
- title="Add branch"
56
- on:click={() => {
57
- dispatch('insert', { modules, index: idx, detail: 'move' })
58
- }}
59
- type="button"
60
- disabled={wrapperId === moving}
61
- class=" text-primary bg-surface border mx-[1px] border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
62
- >
63
- <ClipboardCopy class="m-[5px]" size={15} />
64
- </button>
65
- {:else}
66
- <InsertModuleButton
67
- {disableAi}
68
- bind:open={openMenu}
69
- {trigger}
70
- on:insert={(e) => {
71
- dispatch('insert', { modules, index: idx + 1, detail: 'script', script: e.detail })
72
- }}
73
- on:new={(e) => {
74
- dispatch('insert', { modules, index: idx, detail: e.detail })
75
- }}
76
- index={idx}
77
- {modules}
78
- />
79
- {/if}
80
- </div>
81
- {/if}
82
39
  <div class="relative">
83
40
  {#if moving == mod.id}
84
41
  <div class="absolute z-10 right-20 top-0.5 center-center">
@@ -98,8 +55,8 @@ let openMenu2 = undefined;
98
55
  {annotation}
99
56
  </div>
100
57
  {/if}
101
- {#if flowJobs && !insertable}
102
- <div class="absolute z-10 right-8 -top-5">
58
+ {#if flowJobs && !insertable && (mod.value.type === 'forloopflow' || mod.value.type === 'whileloopflow')}
59
+ <div class="absolute right-8 z-50 -top-5">
103
60
  <FlowJobsMenu
104
61
  on:selectedIteration={(e) => {
105
62
  dispatch('selectedIteration', e.detail)
@@ -212,55 +169,4 @@ let openMenu2 = undefined;
212
169
  {/if}
213
170
  </div>
214
171
  </div>
215
- {#if insertable && insertableEnd}
216
- <div
217
- class="{openMenu2
218
- ? 'z-20'
219
- : ''} w-[27px] absolute top-[49px] left-[50%] right-[50%] -translate-x-1/2"
220
- >
221
- {#if moving}
222
- <button
223
- title="Add branch"
224
- on:click={() => {
225
- dispatch('insert', { modules, index: idx + 1, detail: 'move' })
226
- }}
227
- type="button"
228
- disabled={wrapperId === moving}
229
- class=" text-primary bg-surface border mx-[1px] border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
230
- >
231
- <ClipboardCopy class="m-[5px]" size={15} />
232
- </button>
233
- {:else}
234
- <InsertModuleButton
235
- {disableAi}
236
- bind:open={openMenu2}
237
- {trigger}
238
- on:insert={(e) => {
239
- dispatch('insert', { modules, index: idx + 1, detail: 'script', script: e.detail })
240
- }}
241
- on:new={(e) => {
242
- dispatch('insert', { modules, index: idx + 1, detail: e.detail })
243
- }}
244
- index={idx + 1}
245
- {modules}
246
- />
247
- {/if}
248
- </div>
249
- {/if}
250
-
251
- {#if insertable && branchable}
252
- <div class="w-[27px] absolute top-[45px] left-[60%] right-[40%] -translate-x-1/2">
253
- <button
254
- title="Add branch"
255
- on:click={() => {
256
- dispatch('newBranch', { module: mod })
257
- }}
258
- type="button"
259
- id="add-branch-button"
260
- class=" text-primary bg-surface border mx-[1px] rotate-180 dark:border-gray-500 border-gray-300 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
261
- >
262
- <GitBranchPlus class="m-[5px]" size={15} />
263
- </button>
264
- </div>
265
- {/if}
266
172
  {/if}
@@ -3,17 +3,12 @@ import type { FlowModule } from '../../../gen';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  mod: FlowModule;
6
- trigger: boolean;
7
6
  insertable: boolean;
8
- insertableEnd?: boolean | undefined;
9
7
  annotation?: string | undefined;
10
- branchable?: boolean | undefined;
11
8
  bgColor?: string | undefined;
12
9
  modules: FlowModule[];
13
10
  moving?: string | undefined;
14
11
  duration_ms?: number | undefined;
15
- disableAi?: boolean | undefined;
16
- wrapperId?: string | undefined;
17
12
  retries?: number | undefined;
18
13
  flowJobs: {
19
14
  flowJobs: string[];
@@ -1,50 +1,18 @@
1
- <script>import { base } from '../../../base';
2
- import { Badge } from '../../common';
1
+ <script>import { Badge } from '../../common';
3
2
  import { classNames } from '../../../utils';
4
- import { ClipboardCopy, ExternalLink, Wand2, X } from 'lucide-svelte';
5
3
  import { createEventDispatcher, getContext } from 'svelte';
6
- import InsertModuleButton from './InsertModuleButton.svelte';
7
- import { copilotInfo } from '../../../stores';
8
- import Menu from '../../common/menu/Menu.svelte';
9
- import InsertTriggerButton from './InsertTriggerButton.svelte';
10
4
  export let label;
11
- export let modules;
12
- export let index;
13
- export let insertable;
14
5
  export let bgColor = '';
15
6
  export let selected;
16
7
  export let selectable;
17
- export let deleteBranch = undefined;
18
8
  export let id = undefined;
19
- export let moving = undefined;
20
9
  export let center = true;
21
- export let disableAi = false;
22
- export let wrapperNode = undefined;
23
10
  export let borderColor = undefined;
24
11
  export let hideId = false;
25
12
  const dispatch = createEventDispatcher();
26
- let openMenu = false;
27
- let triggerOpenMenu = false;
28
- let openNoCopilot = false;
29
- const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext') || {};
13
+ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext') || {};
30
14
  </script>
31
15
 
32
- {#if insertable && deleteBranch}
33
- <div class="w-[27px] absolute -top-[40px] left-[50%] right-[50%] -translate-x-1/2">
34
- <button
35
- title="Delete branch"
36
- on:click|stopPropagation={() => {
37
- if (deleteBranch) {
38
- dispatch('deleteBranch', deleteBranch)
39
- }
40
- }}
41
- type="button"
42
- class="text-primary bg-surface border mx-[1px] 'border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
43
- >
44
- <X class="m-[5px]" size={15} />
45
- </button>
46
- </div>
47
- {/if}
48
16
  <!-- svelte-ignore a11y-click-events-have-key-events -->
49
17
  <!-- svelte-ignore a11y-no-static-element-interactions -->
50
18
  <div
@@ -52,9 +20,10 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
52
20
  'w-full flex relative overflow-hidden rounded-sm',
53
21
  selectable ? 'cursor-pointer' : '',
54
22
  selected ? 'outline outline-offset-1 outline-2 outline-gray-600' : '',
55
- label === 'Input' && $copilotCurrentStepStore === 'Input' ? 'z-[901]' : ''
23
+ label === 'Input' && $copilotCurrentStepStore === 'Input' ? 'z-[901]' : '',
24
+ 'bg-surface'
56
25
  )}
57
- style="min-width: 275px; max-height: 80px; background-color: {bgColor};"
26
+ style="width: 275px; max-height: 34px; background-color: {bgColor} !important;"
58
27
  on:click={() => {
59
28
  if (selectable) {
60
29
  if (id) {
@@ -77,7 +46,7 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
77
46
  <span class="mr-2" />
78
47
  {/if}
79
48
  <div />
80
- <div class="flex-1 truncate"><pre>{label}</pre></div>
49
+ <div class="truncate"><pre>{label}</pre></div>
81
50
  <div class="flex items-center space-x-2">
82
51
  {#if id && !hideId}
83
52
  <Badge color="indigo">{id}</Badge>
@@ -85,125 +54,3 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
85
54
  </div>
86
55
  </div>
87
56
  </div>
88
-
89
- {#if insertable && modules && (label != 'Input' || modules.length == 0)}
90
- <div
91
- class="{openMenu
92
- ? 'z-20'
93
- : ''} w-[27px] absolute top-[49px] left-[50%] right-[50%] -translate-x-1/2"
94
- >
95
- {#if moving}
96
- <button
97
- title="Add branch"
98
- on:click={() => {
99
- if (modules) {
100
- dispatch('insert', {
101
- modules,
102
- index,
103
- detail: 'move'
104
- })
105
- }
106
- }}
107
- type="button"
108
- disabled={wrapperNode?.id === moving}
109
- class="text-primary bg-surface border mx-[1px] border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
110
- >
111
- <ClipboardCopy size={12} />
112
- </button>
113
- {:else}
114
- <InsertModuleButton
115
- {disableAi}
116
- bind:open={openMenu}
117
- trigger={label == 'Input'}
118
- on:insert={(e) => {
119
- if (modules) {
120
- dispatch('insert', {
121
- modules,
122
- index,
123
- detail: 'script',
124
- script: e.detail
125
- })
126
- }
127
- }}
128
- on:new={(e) => {
129
- if (modules) {
130
- dispatch('insert', {
131
- modules,
132
- index: index,
133
- detail: e.detail
134
- })
135
- }
136
- }}
137
- {index}
138
- modules={modules ?? []}
139
- />
140
- {/if}
141
- </div>
142
- {/if}
143
-
144
- {#if insertable && modules && label == 'Input'}
145
- {#if !disableAi}
146
- <div
147
- class="{openNoCopilot
148
- ? 'z-10'
149
- : ''} w-9 absolute -top-10 left-[50%] right-[50%] -translate-x-1/2"
150
- >
151
- <Menu pointerDown noMinW placement="bottom-center" let:close bind:show={openNoCopilot}>
152
- <button
153
- title="AI Flow Builder"
154
- on:pointerdown={$copilotInfo.exists_openai_resource_path
155
- ? (ev) => {
156
- ev.preventDefault()
157
- ev.stopPropagation()
158
- $copilotDrawerStore?.openDrawer()
159
- }
160
- : undefined}
161
- slot="trigger"
162
- type="button"
163
- class=" bg-surface text-violet-800 dark:text-violet-400 border mx-0.5 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-8 h-8 flex items-center justify-center"
164
- >
165
- <Wand2 size={16} />
166
- </button>
167
- {#if !$copilotInfo.exists_openai_resource_path}
168
- <div class="text-primary p-4">
169
- <p class="text-sm w-80">
170
- Enable Windmill AI in the
171
- <a
172
- href="{base}/workspace_settings?tab=openai"
173
- target="_blank"
174
- class="inline-flex flex-row items-center gap-1"
175
- on:click={() => {
176
- close()
177
- }}
178
- >
179
- workspace settings
180
- <ExternalLink size={16} />
181
- </a>
182
- </p>
183
- </div>
184
- {/if}
185
- </Menu>
186
- </div>
187
- {/if}
188
- <div
189
- class="{triggerOpenMenu
190
- ? 'z-10'
191
- : ''} w-[27px] absolute top-[50px] left-[65%] right-[35%] -translate-x-1/2"
192
- >
193
- <InsertTriggerButton
194
- {disableAi}
195
- bind:open={triggerOpenMenu}
196
- on:new={(e) => {
197
- if (modules) {
198
- dispatch('insert', {
199
- modules,
200
- index: 0,
201
- detail: e.detail
202
- })
203
- }
204
- }}
205
- index={0}
206
- modules={modules ?? []}
207
- />
208
- </div>
209
- {/if}
@@ -1,24 +1,13 @@
1
- /// <reference types="node" />
2
1
  import { SvelteComponent } from "svelte";
3
2
  import type { FlowModule } from '../../../gen';
4
3
  declare const __propDef: {
5
4
  props: {
6
5
  label: string;
7
- modules: FlowModule[] | undefined;
8
- index: number;
9
- insertable: boolean;
10
6
  bgColor?: string | undefined;
11
7
  selected: boolean;
12
8
  selectable: boolean;
13
- deleteBranch?: {
14
- module: FlowModule;
15
- index: number;
16
- } | undefined;
17
9
  id?: string | undefined;
18
- moving?: string | undefined;
19
10
  center?: boolean | undefined;
20
- disableAi?: boolean | undefined;
21
- wrapperNode?: FlowModule | undefined;
22
11
  borderColor?: string | undefined;
23
12
  hideId?: boolean | undefined;
24
13
  };
@@ -34,10 +23,6 @@ declare const __propDef: {
34
23
  index: number;
35
24
  }>;
36
25
  select: CustomEvent<string>;
37
- deleteBranch: CustomEvent<{
38
- module: FlowModule;
39
- index: number;
40
- }>;
41
26
  } & {
42
27
  [evt: string]: CustomEvent<any>;
43
28
  };
@@ -0,0 +1,256 @@
1
+ <script>import {} from '../../gen';
2
+ import { NODE } from '.';
3
+ import { createEventDispatcher, onMount, setContext } from 'svelte';
4
+ import { writable } from 'svelte/store';
5
+ import '@xyflow/svelte/dist/style.css';
6
+ import { SvelteFlow, ConnectionLineType, Controls, ControlButton } from '@xyflow/svelte';
7
+ import graphBuilder from './graphBuilder';
8
+ import ModuleNode from './renderers/nodes/ModuleNode.svelte';
9
+ import InputNode from './renderers/nodes/InputNode.svelte';
10
+ import BranchAllStart from './renderers/nodes/BranchAllStart.svelte';
11
+ import BranchAllEndNode from './renderers/nodes/branchAllEndNode.svelte';
12
+ import ForLoopEndNode from './renderers/nodes/ForLoopEndNode.svelte';
13
+ import ForLoopStartNode from './renderers/nodes/ForLoopStartNode.svelte';
14
+ import ResultNode from './renderers/nodes/ResultNode.svelte';
15
+ import BaseEdge from './renderers/edges/BaseEdge.svelte';
16
+ import EmptyEdge from './renderers/edges/EmptyEdge.svelte';
17
+ import { sugiyama, dagStratify, decrossOpt, coordCenter } from 'd3-dag';
18
+ import { Expand } from 'lucide-svelte';
19
+ import Toggle from '../Toggle.svelte';
20
+ import DataflowEdge from './renderers/edges/DataflowEdge.svelte';
21
+ import { encodeState } from '../../utils';
22
+ import BranchOneStart from './renderers/nodes/BranchOneStart.svelte';
23
+ import NoBranchNode from './renderers/nodes/NoBranchNode.svelte';
24
+ export let success = undefined;
25
+ export let modules = [];
26
+ export let failureModule = undefined;
27
+ export let minHeight = 0;
28
+ export let maxHeight = undefined;
29
+ export let notSelectable = false;
30
+ export let flowModuleStates = undefined;
31
+ export let selectedId = writable(undefined);
32
+ export let insertable = false;
33
+ export let moving = undefined;
34
+ export let scroll = false;
35
+ // Download: display a top level button to open the graph in a new tab
36
+ export let download = false;
37
+ export let fullSize = false;
38
+ export let disableAi = false;
39
+ export let flowInputsStore = writable(undefined);
40
+ let useDataflow = writable(false);
41
+ setContext('FlowGraphContext', { selectedId, flowInputsStore, useDataflow });
42
+ const dispatch = createEventDispatcher();
43
+ let fullWidth = 0;
44
+ let width = 0;
45
+ function layoutNodes(nodes) {
46
+ let seenId = [];
47
+ for (const n of nodes) {
48
+ if (seenId.includes(n.id)) {
49
+ n.id = n.id + '_dup';
50
+ }
51
+ seenId.push(n.id);
52
+ }
53
+ const flattenParentIds = nodes.map((n) => ({
54
+ ...n,
55
+ parentIds: n.data?.parentIds ?? []
56
+ }));
57
+ const stratify = dagStratify().id(({ id }) => id);
58
+ const dag = stratify(flattenParentIds);
59
+ let boxSize;
60
+ try {
61
+ const layout = sugiyama()
62
+ .decross(decrossOpt())
63
+ .coord(coordCenter())
64
+ .nodeSize(() => [NODE.width + NODE.gap.horizontal, NODE.height + NODE.gap.vertical]);
65
+ boxSize = layout(dag);
66
+ }
67
+ catch {
68
+ const layout = sugiyama()
69
+ .coord(coordCenter())
70
+ .nodeSize(() => [NODE.width + NODE.gap.horizontal, NODE.height + NODE.gap.vertical]);
71
+ boxSize = layout(dag);
72
+ }
73
+ const newNodes = dag.descendants().map((des) => ({
74
+ ...des.data,
75
+ id: des.data.id,
76
+ position: {
77
+ x: des.x
78
+ ? // @ts-ignore
79
+ (des.data.data.offset ?? 0) +
80
+ // @ts-ignore
81
+ des.x +
82
+ (fullSize ? fullWidth : width) / 2 -
83
+ boxSize.width / 2 -
84
+ NODE.width / 2 -
85
+ (width - fullWidth) / 2
86
+ : 0,
87
+ y: des.y || 0
88
+ }
89
+ }));
90
+ return newNodes;
91
+ }
92
+ $: graph = graphBuilder(modules, {
93
+ disableAi,
94
+ insertable,
95
+ flowModuleStates,
96
+ selectedId: $selectedId
97
+ }, failureModule, {
98
+ deleteBranch: (detail, label) => {
99
+ $selectedId = label;
100
+ dispatch('deleteBranch', detail);
101
+ },
102
+ insert: (detail) => {
103
+ dispatch('insert', detail);
104
+ },
105
+ select: (modId) => {
106
+ if (!notSelectable) {
107
+ if ($selectedId != modId) {
108
+ $selectedId = modId;
109
+ }
110
+ dispatch('select', modId);
111
+ }
112
+ },
113
+ delete: (detail, label) => {
114
+ $selectedId = label;
115
+ dispatch('delete', detail);
116
+ },
117
+ newBranch: (module) => {
118
+ dispatch('newBranch', { module });
119
+ },
120
+ move: (module, modules) => {
121
+ dispatch('move', { module, modules });
122
+ },
123
+ selectedIteration: (detail, moduleId) => {
124
+ dispatch('selectedIteration', { ...detail, moduleId: moduleId });
125
+ }
126
+ }, success, $useDataflow, $selectedId, moving);
127
+ const nodes = writable([]);
128
+ const edges = writable([]);
129
+ let height = 0;
130
+ function updateStores() {
131
+ $nodes = layoutNodes(graph?.nodes);
132
+ $edges = graph.edges;
133
+ height = Math.max(...$nodes.map((n) => n.position.y + NODE.height + 40), minHeight);
134
+ }
135
+ $: graph && updateStores();
136
+ const nodeTypes = {
137
+ input2: InputNode,
138
+ module: ModuleNode,
139
+ branchAllStart: BranchAllStart,
140
+ branchAllEnd: BranchAllEndNode,
141
+ forLoopEnd: ForLoopEndNode,
142
+ forLoopStart: ForLoopStartNode,
143
+ result: ResultNode,
144
+ whileLoopStart: ForLoopStartNode,
145
+ whileLoopEnd: ForLoopEndNode,
146
+ branchOneStart: BranchOneStart,
147
+ branchOneEnd: BranchAllEndNode,
148
+ noBranch: NoBranchNode
149
+ };
150
+ const edgeTypes = {
151
+ edge: BaseEdge,
152
+ empty: EmptyEdge,
153
+ dataflowedge: DataflowEdge
154
+ };
155
+ const proOptions = { hideAttribution: true };
156
+ $: showDataflow =
157
+ $selectedId != undefined &&
158
+ !$selectedId.startsWith('constants') &&
159
+ !$selectedId.startsWith('settings') &&
160
+ $selectedId !== 'failure' &&
161
+ $selectedId !== 'Result';
162
+ const viewport = writable({
163
+ x: 0,
164
+ y: 5,
165
+ zoom: 1
166
+ });
167
+ function centerViewport(width) {
168
+ viewport.update((vp) => ({
169
+ ...vp,
170
+ x: (width - fullWidth) / 2,
171
+ y: vp.y
172
+ }));
173
+ }
174
+ $: width && centerViewport(width);
175
+ onMount(() => {
176
+ centerViewport(width);
177
+ });
178
+ </script>
179
+
180
+ <div style={`height: ${height}px; max-height: ${maxHeight}px;`} bind:clientWidth={width}>
181
+ <SvelteFlow
182
+ {nodes}
183
+ {edges}
184
+ {edgeTypes}
185
+ {nodeTypes}
186
+ {viewport}
187
+ {height}
188
+ minZoom={0.5}
189
+ connectionLineType={ConnectionLineType.SmoothStep}
190
+ defaultEdgeOptions={{ type: 'smoothstep' }}
191
+ preventScrolling={scroll}
192
+ zoomOnDoubleClick={false}
193
+ elementsSelectable={false}
194
+ {proOptions}
195
+ nodesDraggable={false}
196
+ >
197
+ <div class="absolute inset-0 !bg-surface-secondary" />
198
+ <Controls position="top-right" orientation="horizontal" showLock={false}>
199
+ {#if download}
200
+ <ControlButton
201
+ on:click={() => {
202
+ try {
203
+ localStorage.setItem('svelvet', encodeState({ modules, failureModule }))
204
+ } catch (e) {
205
+ console.error('error interacting with local storage', e)
206
+ }
207
+ window.open('/view_graph', '_blank')
208
+ }}
209
+ class="!bg-surface"
210
+ >
211
+ <Expand size="14" />
212
+ </ControlButton>
213
+ {/if}
214
+ </Controls>
215
+
216
+ <Controls
217
+ position="top-left"
218
+ orientation="horizontal"
219
+ showLock={false}
220
+ showZoom={false}
221
+ showFitView={false}
222
+ >
223
+ {#if showDataflow}
224
+ <Toggle
225
+ value={$useDataflow}
226
+ on:change={() => {
227
+ $useDataflow = !$useDataflow
228
+ }}
229
+ size="xs"
230
+ options={{
231
+ right: 'Dataflow'
232
+ }}
233
+ />
234
+ {/if}
235
+ </Controls>
236
+ </SvelteFlow>
237
+ </div>
238
+
239
+ <style>
240
+ :global(.svelte-flow__handle) {
241
+ opacity: 0;
242
+ }
243
+
244
+ :global(.svelte-flow__controls-button) {
245
+ border-width: 0px;
246
+ --tw-bg-opacity: 1;
247
+ background-color: rgb(var(--color-surface) / var(--tw-bg-opacity));
248
+ }
249
+ :global(.svelte-flow__controls-button:hover) {
250
+ --tw-bg-opacity: 1;
251
+ background-color: rgb(var(--color-surface-hover) / var(--tw-bg-opacity));
252
+ }
253
+
254
+ :global(.svelte-flow__edgelabel-renderer) {
255
+ z-index: 50;
256
+ }</style>
@@ -2,6 +2,7 @@ import { SvelteComponent } from "svelte";
2
2
  import { type FlowModule } from '../../gen';
3
3
  import { type GraphModuleState } from '.';
4
4
  import { type Writable } from 'svelte/store';
5
+ import '@xyflow/svelte/dist/style.css';
5
6
  import type { FlowInput } from '../flows/types';
6
7
  declare const __propDef: {
7
8
  props: {
@@ -12,7 +13,6 @@ declare const __propDef: {
12
13
  maxHeight?: number | undefined;
13
14
  notSelectable?: boolean | undefined;
14
15
  flowModuleStates?: Record<string, GraphModuleState> | undefined;
15
- rebuildOnChange?: any;
16
16
  selectedId?: Writable<string | undefined> | undefined;
17
17
  insertable?: boolean | undefined;
18
18
  moving?: string | undefined;
@@ -23,21 +23,21 @@ declare const __propDef: {
23
23
  flowInputsStore?: Writable<FlowInput | undefined> | undefined;
24
24
  };
25
25
  events: {
26
- delete: CustomEvent<any>;
27
- select: CustomEvent<any>;
26
+ deleteBranch: CustomEvent<any>;
28
27
  insert: CustomEvent<any>;
28
+ select: CustomEvent<any>;
29
+ delete: CustomEvent<any>;
29
30
  newBranch: CustomEvent<any>;
30
31
  move: CustomEvent<any>;
31
32
  selectedIteration: CustomEvent<any>;
32
- deleteBranch: CustomEvent<any>;
33
33
  } & {
34
34
  [evt: string]: CustomEvent<any>;
35
35
  };
36
36
  slots: {};
37
37
  };
38
- export type FlowGraphProps = typeof __propDef.props;
39
- export type FlowGraphEvents = typeof __propDef.events;
40
- export type FlowGraphSlots = typeof __propDef.slots;
41
- export default class FlowGraph extends SvelteComponent<FlowGraphProps, FlowGraphEvents, FlowGraphSlots> {
38
+ export type FlowGraphV2Props = typeof __propDef.props;
39
+ export type FlowGraphV2Events = typeof __propDef.events;
40
+ export type FlowGraphV2Slots = typeof __propDef.slots;
41
+ export default class FlowGraphV2 extends SvelteComponent<FlowGraphV2Props, FlowGraphV2Events, FlowGraphV2Slots> {
42
42
  }
43
43
  export {};