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
@@ -1,13 +1,16 @@
1
- <script>import HighlightCode from '../../HighlightCode.svelte';
1
+ <script>import DiffEditor from '../../DiffEditor.svelte';
2
+ import HighlightCode from '../../HighlightCode.svelte';
2
3
  import TimeAgo from '../../TimeAgo.svelte';
3
4
  import { ScriptService } from '../../../gen';
4
- import { getScriptByPath } from '../../../scripts';
5
+ import { getScriptByPath, scriptLangToEditorLang } from '../../../scripts';
5
6
  import { workspaceStore } from '../../../stores';
6
7
  export let path;
7
8
  export let hash = undefined;
9
+ export let previousHash = undefined;
8
10
  export let showDate = false;
9
11
  export let showAllCode = true;
10
12
  let code;
13
+ let previousCode;
11
14
  let language;
12
15
  let lock = undefined;
13
16
  let date = undefined;
@@ -28,10 +31,24 @@ async function loadCode(path, hash) {
28
31
  console.error(e);
29
32
  }
30
33
  }
34
+ async function loadPreviousCode(previousHash) {
35
+ try {
36
+ const previousScript = await ScriptService.getScriptByHash({
37
+ workspace: $workspaceStore,
38
+ hash: previousHash
39
+ });
40
+ previousCode = previousScript.content;
41
+ }
42
+ catch (e) {
43
+ console.error(e);
44
+ }
45
+ }
31
46
  $: path && loadCode(path, hash);
47
+ $: path && previousHash && loadPreviousCode(previousHash);
32
48
  function toggleShowAll() {
33
49
  showAllCode = !showAllCode;
34
50
  }
51
+ export let showDiff = false;
35
52
  </script>
36
53
 
37
54
  <div class="flex flex-col flex-1 h-full overflow-auto p-2">
@@ -41,7 +58,20 @@ function toggleShowAll() {
41
58
  {#if notFound}
42
59
  <div class="text-red-400">script not found at {path} in workspace {$workspaceStore}</div>
43
60
  {:else if showAllCode}
44
- <HighlightCode {language} {code} />
61
+ {#if showDiff}
62
+ {#key previousCode + code}
63
+ <DiffEditor
64
+ class="h-screen"
65
+ readOnly
66
+ automaticLayout
67
+ defaultLang={scriptLangToEditorLang(language)}
68
+ defaultOriginal={previousCode}
69
+ defaultModified={code}
70
+ />
71
+ {/key}
72
+ {:else}
73
+ <HighlightCode {language} {code} />
74
+ {/if}
45
75
  {:else}
46
76
  <div class="code-container h-full">
47
77
  <HighlightCode {language} code={code?.split('\n').slice(0, 10).join('\n')} />
@@ -3,8 +3,10 @@ declare const __propDef: {
3
3
  props: {
4
4
  path: string;
5
5
  hash?: string | undefined;
6
+ previousHash?: string | undefined;
6
7
  showDate?: boolean | undefined;
7
8
  showAllCode?: boolean | undefined;
9
+ showDiff?: boolean | undefined;
8
10
  };
9
11
  events: {
10
12
  [evt: string]: CustomEvent<any>;
@@ -106,6 +106,21 @@ let jsonView = false;
106
106
  <SecondsInput disabled />
107
107
  {/if}
108
108
  </Label>
109
+
110
+ <Toggle
111
+ options={{
112
+ right: 'Continue on disapproval/timeout',
113
+ rightTooltip:
114
+ 'Instead of failing the flow and bubbling up the error, continue to the next step which would allow to put a branchone right after to handle both cases separately. If any disapproval/timeout event is received, the resume payload will be similar to every error result in Winmdill, an object containing an `error` field which you can use to distinguish between approvals and disapproval/timeouts'
115
+ }}
116
+ checked={Boolean(flowModule.suspend?.continue_on_disapprove_timeout)}
117
+ disabled={!Boolean(flowModule.suspend)}
118
+ on:change={(e) => {
119
+ if (flowModule.suspend) {
120
+ flowModule.suspend.continue_on_disapprove_timeout = e.detail
121
+ }
122
+ }}
123
+ />
109
124
  </div>
110
125
  {:else if suspendTabSelected === 'permissions'}
111
126
  <div class="flex flex-col mt-4 gap-4">
@@ -23,7 +23,7 @@ import ErrorHandlerToggleButton from '../../details/ErrorHandlerToggleButton.sve
23
23
  import WorkerTagPicker from '../../WorkerTagPicker.svelte';
24
24
  import MetadataGen from '../../copilot/MetadataGen.svelte';
25
25
  export let noEditor;
26
- const { selectedId, flowStore, initialPath, previewArgs, pathStore, schedule } = getContext('FlowEditorContext');
26
+ const { selectedId, flowStore, initialPath, previewArgs, pathStore, schedule, customUi } = getContext('FlowEditorContext');
27
27
  let hostname = BROWSER ? window.location.protocol + '//' + window.location.host : 'SSR';
28
28
  $: url = `${hostname}/api/w/${$workspaceStore}/jobs/run/f/${$pathStore}`;
29
29
  $: syncedUrl = `${hostname}/api/w/${$workspaceStore}/jobs/run_wait_result/f/${$pathStore}`;
@@ -42,22 +42,33 @@ let dirtyPath = false;
42
42
  <div class="h-full flex-1">
43
43
  <Tabs bind:selected={$selectedId}>
44
44
  <Tab value="settings-metadata">Metadata</Tab>
45
- {#if !noEditor}
45
+ {#if !noEditor && customUi?.settingsTabs?.schedule != false}
46
46
  <Tab value="settings-schedule" active={$schedule.enabled}>Schedule</Tab>
47
47
  {/if}
48
- <Tab value="settings-same-worker" active={$flowStore.value.same_worker}>
49
- Shared Directory
50
- </Tab>
51
- <Tab value="settings-early-stop" active={Boolean($flowStore.value.skip_expr)}>
52
- Early Stop
53
- </Tab>
54
- <Tab value="settings-early-return" active={Boolean($flowStore.value.early_return)}>
55
- Early Return
56
- </Tab>
57
- <Tab value="settings-worker-group">Worker Group</Tab>
58
- <Tab value="settings-concurrency">Concurrency</Tab>
59
- <Tab value="settings-cache" active={Boolean($flowStore.value.cache_ttl)}>Cache</Tab>
60
-
48
+ {#if customUi?.settingsTabs?.sharedDiretory != false}
49
+ <Tab value="settings-same-worker" active={$flowStore.value.same_worker}>
50
+ Shared Directory
51
+ </Tab>
52
+ {/if}
53
+ {#if customUi?.settingsTabs?.earlyStop != false}
54
+ <Tab value="settings-early-stop" active={Boolean($flowStore.value.skip_expr)}>
55
+ Early Stop
56
+ </Tab>
57
+ {/if}
58
+ {#if customUi?.settingsTabs?.earlyReturn != false}
59
+ <Tab value="settings-early-return" active={Boolean($flowStore.value.early_return)}>
60
+ Early Return
61
+ </Tab>
62
+ {/if}
63
+ {#if customUi?.settingsTabs?.workerGroup != false}
64
+ <Tab value="settings-worker-group">Worker Group</Tab>
65
+ {/if}
66
+ {#if customUi?.settingsTabs?.concurrency != false}
67
+ <Tab value="settings-concurrency">Concurrency</Tab>
68
+ {/if}
69
+ {#if customUi?.settingsTabs?.cache != false}
70
+ <Tab value="settings-cache" active={Boolean($flowStore.value.cache_ttl)}>Cache</Tab>
71
+ {/if}
61
72
  <svelte:fragment slot="content">
62
73
  <TabContent value="settings-metadata" class="p-4 h-full overflow-auto">
63
74
  <Section label="Metadata">
@@ -72,6 +72,9 @@ function getModuleExprs(x) {
72
72
  if (x.stop_after_if?.expr) {
73
73
  exprs.push(x.stop_after_if.expr);
74
74
  }
75
+ if (x.stop_after_all_iters_if?.expr) {
76
+ exprs.push(x.stop_after_all_iters_if.expr);
77
+ }
75
78
  exprs.push(...getExpr(x.sleep));
76
79
  }
77
80
  return exprs;
@@ -26,7 +26,7 @@ export async function loadSchemaFromModule(module) {
26
26
  if (JSON.stringify(keys.sort()) !== JSON.stringify(Object.keys(input_transforms).sort())) {
27
27
  input_transforms = keys.reduce((accu, key) => {
28
28
  let nv = input_transforms[key] ??
29
- (module.id == 'failure' && ['message', 'name'].includes(key)
29
+ (module.id == 'failure' && ['message', 'name', 'step_id'].includes(key)
30
30
  ? { type: 'javascript', expr: `error.${key}` }
31
31
  : {
32
32
  type: 'static',
@@ -1,6 +1,7 @@
1
- <script>import { Menu } from '../../common';
1
+ <script>import Menu from '../../common/menu/MenuV2.svelte';
2
2
  import { createEventDispatcher } from 'svelte';
3
3
  import { ListFilter } from 'lucide-svelte';
4
+ import { MenuItem } from '@rgossiaux/svelte-headlessui';
4
5
  const dispatch = createEventDispatcher();
5
6
  export let open = undefined;
6
7
  export let index;
@@ -20,50 +21,44 @@ function onKeydown(event) {
20
21
  }
21
22
  </script>
22
23
 
23
- <Menu
24
- transitionDuration={0}
25
- pointerDown
26
- bind:show={open}
27
- noMinW
28
- placement="bottom-center"
29
- let:close
30
- >
31
- <button
32
- title="Pick an iteration"
33
- slot="trigger"
34
- id={`flow-editor-iteration picker-${index}`}
35
- type="button"
36
- class=" text-xs bg-surface border-[1px] border-gray-300 dark:border-gray-500 focus:outline-none
24
+ <Menu>
25
+ <div slot="trigger">
26
+ <button
27
+ title="Pick an iteration"
28
+ id={`flow-editor-iteration picker-${index}`}
29
+ type="button"
30
+ class=" text-xs bg-surface border-[1px] border-gray-300 dark:border-gray-500 focus:outline-none
37
31
  hover:bg-surface-hover focus:ring-4 focus:ring-surface-selected font-medium rounded-sm w-[40px] gap-1 h-[20px]
38
32
  flex items-center justify-center {flowJobsSuccess?.[selected] == false
39
- ? 'text-red-400'
40
- : 'text-secondary'}"
41
- >
42
- #{selected == -1 ? '?' : selected + 1}
43
- <ListFilter size={15} />
44
- </button>
45
- <div id="flow-editor-insert-module">
46
- <div class="font-mono divide-y text-xs w-full text-secondary max-h-[200px] overflow-auto">
47
- <input autofocus type="number" bind:value={filter} on:keydown={onKeydown} />
48
- {#each flowJobs ?? [] as id, idx (id)}
49
- {#if filter == undefined || (idx + 1).toString().includes(filter.toString())}
50
- <button
51
- class="w-full text-left py-1 pl-2 min-w-20 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center {flowJobsSuccess?.[
52
- idx
53
- ] == false
54
- ? 'text-red-400'
55
- : ''}"
56
- on:pointerdown={() => {
57
- close()
58
- dispatch('selectedIteration', { index: idx, id })
59
- }}
60
- role="menuitem"
61
- tabindex="-1"
62
- >
63
- #{idx + 1}
64
- </button>
65
- {/if}
66
- {/each}
67
- </div>
33
+ ? 'text-red-400'
34
+ : 'text-secondary'}"
35
+ >
36
+ #{selected == -1 ? '?' : selected + 1}
37
+ <ListFilter size={15} />
38
+ </button>
68
39
  </div>
40
+ <MenuItem disabled>
41
+ <input type="number" bind:value={filter} on:keydown={onKeydown} />
42
+ </MenuItem>
43
+ {#each flowJobs ?? [] as id, idx (id)}
44
+ {#if filter == undefined || (idx + 1).toString().includes(filter.toString())}
45
+ <MenuItem>
46
+ <button
47
+ class="text-primary text-xs w-full text-left py-1 pl-2 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center {flowJobsSuccess?.[
48
+ idx
49
+ ] == false
50
+ ? 'text-red-400'
51
+ : ''}"
52
+ on:pointerdown={() => {
53
+ //close()
54
+ dispatch('selectedIteration', { index: idx, id })
55
+ }}
56
+ role="menuitem"
57
+ tabindex="-1"
58
+ >
59
+ #{idx + 1}
60
+ </button>
61
+ </MenuItem>
62
+ {/if}
63
+ {/each}
69
64
  </Menu>
@@ -126,9 +126,8 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
126
126
  >
127
127
  {#if $$slots.icon}
128
128
  <slot name="icon" />
129
- <span class="mr-2" />
130
129
  {/if}
131
- <div class="flex-1 truncate" class:font-bold={bold}>{label}</div>
130
+ <div class="truncate" class:font-bold={bold}>{label}</div>
132
131
  <div class="flex items-center space-x-2">
133
132
  {#if id}
134
133
  <Badge color="indigo">{id}</Badge>
@@ -4,7 +4,6 @@ import { emptyFlowModuleState, initFlowStepWarnings } from '../utils';
4
4
  import FlowSettingsItem from './FlowSettingsItem.svelte';
5
5
  import FlowConstantsItem from './FlowConstantsItem.svelte';
6
6
  import { dfs } from '../dfs';
7
- import { FlowGraph } from '../../graph';
8
7
  import FlowErrorHandlerItem from './FlowErrorHandlerItem.svelte';
9
8
  import { push } from '../../../history';
10
9
  import ConfirmationModal from '../../common/confirmationModal/ConfirmationModal.svelte';
@@ -15,6 +14,7 @@ import { copilotInfo, tutorialsToDo } from '../../../stores';
15
14
  import FlowTutorials from '../../FlowTutorials.svelte';
16
15
  import { ignoredTutorials } from '../../tutorials/ignoredTutorials';
17
16
  import { tutorialInProgress } from '../../../tutorialUtils';
17
+ import FlowGraphV2 from '../../graph/FlowGraphV2.svelte';
18
18
  export let modules;
19
19
  export let sidebarSize = undefined;
20
20
  export let disableStaticInputs = false;
@@ -203,13 +203,12 @@ async function updateFlowInputsStore() {
203
203
  </div>
204
204
 
205
205
  <div class="z-10 flex-auto grow" bind:clientHeight={minHeight}>
206
- <FlowGraph
206
+ <FlowGraphV2
207
207
  {disableAi}
208
208
  insertable
209
209
  scroll
210
210
  {minHeight}
211
211
  moving={$moving?.module.id}
212
- rebuildOnChange={$flowStore}
213
212
  maxHeight={minHeight}
214
213
  modules={$flowStore.value?.modules}
215
214
  {selectedId}
@@ -219,7 +218,9 @@ async function updateFlowInputsStore() {
219
218
  dependents = getDependentComponents(e.id, $flowStore)
220
219
  const cb = () => {
221
220
  push(history, $flowStore)
221
+
222
222
  selectNextId(e.id)
223
+
223
224
  removeAtId($flowStore.value.modules, e.id)
224
225
 
225
226
  if ($flowInputsStore) {
@@ -3,6 +3,7 @@ import { createEventDispatcher, getContext } from 'svelte';
3
3
  import { CheckCircle2, Code, Cross, GitBranch, Repeat, Square, Zap } from 'lucide-svelte';
4
4
  import StepGen from '../../copilot/StepGen.svelte';
5
5
  import BarsStaggered from '../../icons/BarsStaggered.svelte';
6
+ import { twMerge } from 'tailwind-merge';
6
7
  const dispatch = createEventDispatcher();
7
8
  export let trigger = false;
8
9
  export let stop = false;
@@ -23,15 +24,21 @@ let customUi = getContext('customUi');
23
24
  placement="bottom-center"
24
25
  let:close
25
26
  >
26
- <button
27
- title="Add step"
28
- slot="trigger"
29
- id={`flow-editor-add-step-${index}`}
30
- type="button"
31
- class="text-primary bg-surface border-[1px] mx-[1px] border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-surface-selected font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
32
- >
33
- <Cross class="mx-[5px]" size={15} />
34
- </button>
27
+ <svelte:fragment slot="trigger">
28
+ <button
29
+ title="Add step"
30
+ id={`flow-editor-add-step-${index}`}
31
+ type="button"
32
+ class={twMerge(
33
+ 'w-6 h-6 flex items-center justify-center',
34
+ 'border border-gray-300 dark:border-gray-500',
35
+ 'text-primary text-sm',
36
+ 'bg-surface focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-surface-selected rounded-full '
37
+ )}
38
+ >
39
+ <Cross size={14} />
40
+ </button>
41
+ </svelte:fragment>
35
42
  <div id="flow-editor-insert-module">
36
43
  <StepGen on:insert {index} bind:funcDesc bind:open {close} {modules} {disableAi} />
37
44
 
@@ -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);
@@ -29,7 +23,7 @@ const dispatch = createEventDispatcher();
29
23
  $: itemProps = {
30
24
  selected: $selectedId === mod.id,
31
25
  retry: mod.retry?.constant != undefined || mod.retry?.exponential != undefined,
32
- earlyStop: mod.stop_after_if != undefined,
26
+ earlyStop: mod.stop_after_if != undefined || mod.stop_after_all_iters_if != undefined,
33
27
  suspend: Boolean(mod.suspend),
34
28
  sleep: Boolean(mod.sleep),
35
29
  cache: Boolean(mod.cache_ttl),
@@ -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[];