windmill-components 1.394.8 → 1.405.0

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 (219) hide show
  1. package/package/ata/edgeCases.d.ts +0 -1
  2. package/package/ata/edgeCases.js +2 -8
  3. package/package/ata/index.js +4 -3
  4. package/package/common.d.ts +1 -1
  5. package/package/common.js +2 -2
  6. package/package/components/ApiConnectForm.svelte +33 -7
  7. package/package/components/ArgInput.svelte +4 -2
  8. package/package/components/CenteredModal.svelte +4 -1
  9. package/package/components/CenteredModal.svelte.d.ts +1 -0
  10. package/package/components/DateInput.svelte +2 -0
  11. package/package/components/DateInput.svelte.d.ts +1 -0
  12. package/package/components/DefaultScripts.svelte +8 -3
  13. package/package/components/DefaultScripts.svelte.d.ts +5 -1
  14. package/package/components/DefaultScriptsInner.svelte +16 -7
  15. package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
  16. package/package/components/Dev.svelte +68 -11
  17. package/package/components/DropdownV2.svelte.d.ts +3 -3
  18. package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
  19. package/package/components/EditableSchemaForm.svelte +1 -0
  20. package/package/components/Editor.svelte +3 -2
  21. package/package/components/Editor.svelte.d.ts +1 -1
  22. package/package/components/ExecutionDuration.svelte +44 -0
  23. package/package/components/ExecutionDuration.svelte.d.ts +24 -0
  24. package/package/components/FlowBuilder.svelte +20 -12
  25. package/package/components/FlowGraphViewer.svelte +9 -2
  26. package/package/components/FlowGraphViewerStep.svelte +23 -10
  27. package/package/components/FlowJobResult.svelte +0 -1
  28. package/package/components/FlowStatusViewerInner.svelte +17 -4
  29. package/package/components/FlowTimeline.svelte +3 -3
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/IconedResourceType.svelte +17 -10
  32. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  33. package/package/components/IdEditorInput.svelte +0 -1
  34. package/package/components/InstanceSettings.svelte +247 -129
  35. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  36. package/package/components/JobArgs.svelte +3 -1
  37. package/package/components/LightweightArgInput.svelte +35 -10
  38. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  39. package/package/components/LightweightObjectResourceInput.svelte +2 -0
  40. package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
  41. package/package/components/LightweightSchemaForm.svelte +2 -0
  42. package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
  43. package/package/components/Login.svelte +10 -5
  44. package/package/components/Login.svelte.d.ts +1 -0
  45. package/package/components/ModulePreview.svelte +21 -2
  46. package/package/components/ModuleStatus.svelte +3 -0
  47. package/package/components/ModuleStatus.svelte.d.ts +1 -0
  48. package/package/components/OAuthSetting.svelte +40 -15
  49. package/package/components/ObjectStoreConfigSettings.svelte +78 -76
  50. package/package/components/ParqetCsvTableRenderer.svelte +25 -3
  51. package/package/components/Password.svelte.d.ts +1 -1
  52. package/package/components/Path.svelte +74 -54
  53. package/package/components/Path.svelte.d.ts +2 -1
  54. package/package/components/ResourceEditor.svelte +38 -9
  55. package/package/components/ResultJobLoader.svelte +6 -3
  56. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  57. package/package/components/ScheduleEditorInner.svelte +2 -2
  58. package/package/components/SchemaForm.svelte +6 -1
  59. package/package/components/ScriptBuilder.svelte +12 -5
  60. package/package/components/ScriptEditor.svelte +33 -3
  61. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  62. package/package/components/Scrollable.svelte +47 -0
  63. package/package/components/Scrollable.svelte.d.ts +21 -0
  64. package/package/components/ShareModal.svelte.d.ts +2 -2
  65. package/package/components/SuperadminSettings.svelte +5 -7
  66. package/package/components/TestJobLoader.svelte +46 -5
  67. package/package/components/TestJobLoader.svelte.d.ts +2 -1
  68. package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
  69. package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
  70. package/package/components/WorkspaceGroup.svelte +3 -2
  71. package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
  72. package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
  73. package/package/components/apps/editor/component/components.d.ts +79 -79
  74. package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
  75. package/package/components/common/fileUpload/FileUpload.svelte +1 -1
  76. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  77. package/package/components/common/menu/Menu.svelte +2 -1
  78. package/package/components/common/menu/MenuV2.svelte +3 -1
  79. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  80. package/package/components/common/popup/Popup.svelte +22 -12
  81. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  82. package/package/components/common/popup/PopupV2.svelte +58 -0
  83. package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
  84. package/package/components/copilot/CronGen.svelte +1 -1
  85. package/package/components/copilot/RegexGen.svelte +4 -4
  86. package/package/components/copilot/StepGen.svelte +6 -6
  87. package/package/components/copilot/StepGenQuick.svelte +57 -0
  88. package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
  89. package/package/components/copilot/flow.d.ts +2 -0
  90. package/package/components/copilot/flow.js +55 -0
  91. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  92. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  93. package/package/components/details/DetailPageLayout.svelte +2 -0
  94. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  95. package/package/components/details/utils.d.ts +0 -1
  96. package/package/components/details/utils.js +1 -12
  97. package/package/components/flows/FlowEditor.svelte +2 -1
  98. package/package/components/flows/FlowProgressBar.svelte +16 -1
  99. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
  100. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
  101. package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
  102. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
  103. package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
  104. package/package/components/flows/content/FlowConstants.svelte +1 -1
  105. package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
  106. package/package/components/flows/content/FlowInputs.svelte +7 -6
  107. package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  108. package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
  109. package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
  110. package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
  111. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
  112. package/package/components/flows/content/FlowLoop.svelte +7 -1
  113. package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
  114. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  115. package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
  116. package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
  117. package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
  118. package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
  119. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
  120. package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
  121. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
  122. package/package/components/flows/content/GenAiQuick.svelte +30 -0
  123. package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
  124. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
  125. package/package/components/flows/flowInfers.js +1 -1
  126. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  127. package/package/components/flows/idUtils.js +3 -1
  128. package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
  129. package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
  130. package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
  131. package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
  132. package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
  133. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  134. package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
  135. package/package/components/flows/map/InsertModuleButton.svelte +161 -138
  136. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
  137. package/package/components/flows/map/MapItem.svelte +11 -0
  138. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  139. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
  140. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
  141. package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
  142. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
  143. package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
  144. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
  145. package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
  146. package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
  147. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
  148. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
  149. package/package/components/flows/types.d.ts +1 -0
  150. package/package/components/graph/FlowGraphV2.svelte +93 -58
  151. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
  152. package/package/components/graph/graphBuilder.d.ts +2 -1
  153. package/package/components/graph/graphBuilder.js +345 -280
  154. package/package/components/graph/model.d.ts +1 -0
  155. package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
  156. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  157. package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
  158. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
  159. package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
  160. package/package/components/graph/util.d.ts +1 -1
  161. package/package/components/graph/util.js +7 -2
  162. package/package/components/home/ListFiltersQuick.svelte +51 -0
  163. package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
  164. package/package/components/icons/AnsibleIcon.svelte +42 -0
  165. package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
  166. package/package/components/icons/WindmillIcon2.svelte +141 -0
  167. package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
  168. package/package/components/icons/index.d.ts +2 -1
  169. package/package/components/icons/index.js +2 -1
  170. package/package/components/instanceSettings.d.ts +2 -2
  171. package/package/components/instanceSettings.js +25 -58
  172. package/package/components/jobs/JobProgressBar.svelte +52 -0
  173. package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
  174. package/package/components/progressBar/ProgressBar.svelte +18 -1
  175. package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
  176. package/package/components/runs/JobPreview.svelte +1 -0
  177. package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
  178. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
  179. package/package/components/schema/AddProperty.svelte +1 -0
  180. package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
  181. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
  182. package/package/components/schema/FlowPropertyEditor.svelte +12 -0
  183. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
  184. package/package/components/scriptEditor/LogPanel.svelte +1 -0
  185. package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
  186. package/package/components/search/GlobalSearchModal.svelte +2 -1
  187. package/package/components/sidebar/SidebarContent.svelte +69 -8
  188. package/package/components/sidebar/changelogs.js +10 -0
  189. package/package/components/triggers/RouteEditor.svelte +19 -0
  190. package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
  191. package/package/components/triggers/RouteEditorInner.svelte +327 -0
  192. package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
  193. package/package/components/triggers/RoutesPanel.svelte +74 -0
  194. package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
  195. package/package/editorUtils.js +2 -0
  196. package/package/gen/core/OpenAPI.js +1 -1
  197. package/package/gen/schemas.gen.d.ts +159 -8
  198. package/package/gen/schemas.gen.js +161 -8
  199. package/package/gen/services.gen.d.ts +139 -1
  200. package/package/gen/services.gen.js +282 -1
  201. package/package/gen/types.gen.d.ts +455 -12
  202. package/package/hubPaths.json +6 -8
  203. package/package/infer.d.ts +4 -2
  204. package/package/infer.js +25 -23
  205. package/package/inferArgSig.js +8 -2
  206. package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
  207. package/package/relative_imports.d.ts +3 -0
  208. package/package/relative_imports.js +25 -0
  209. package/package/script_helpers.d.ts +7 -2
  210. package/package/script_helpers.js +151 -3
  211. package/package/scripts.d.ts +1 -1
  212. package/package/scripts.js +5 -1
  213. package/package/stores.d.ts +1 -0
  214. package/package/stores.js +1 -0
  215. package/package/utils.d.ts +1 -0
  216. package/package/utils.js +4 -0
  217. package/package.json +16 -7
  218. package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
  219. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
@@ -1,5 +1,5 @@
1
1
  <script>import { createEventDispatcher, getContext, tick } from 'svelte';
2
- import { createBranchAll, createBranches, createLoop, createWhileLoop, deleteFlowStateById, emptyModule, pickScript } from '../flowStateUtils';
2
+ import { createInlineScriptModule, createBranchAll, createBranches, createLoop, createWhileLoop, deleteFlowStateById, emptyModule, pickScript, pickFlow } from '../flowStateUtils';
3
3
  import { emptyFlowModuleState, initFlowStepWarnings } from '../utils';
4
4
  import FlowSettingsItem from './FlowSettingsItem.svelte';
5
5
  import FlowConstantsItem from './FlowConstantsItem.svelte';
@@ -25,11 +25,15 @@ export let disableSettings = false;
25
25
  export let smallErrorHandler = false;
26
26
  let flowTutorials = undefined;
27
27
  const { selectedId, moving, history, flowStateStore, flowStore, flowInputsStore } = getContext('FlowEditorContext');
28
- async function insertNewModuleAtIndex(modules, index, kind, wsScript) {
28
+ async function insertNewModuleAtIndex(modules, index, kind, wsScript, wsFlow, inlineScript) {
29
29
  push(history, $flowStore);
30
30
  var module = emptyModule($flowStateStore, $flowStore, kind == 'flow');
31
31
  var state = emptyFlowModuleState();
32
- if (wsScript) {
32
+ if (wsFlow) {
33
+ ;
34
+ [module, state] = await pickFlow(wsFlow.path, wsFlow.summary, module.id);
35
+ }
36
+ else if (wsScript) {
33
37
  ;
34
38
  [module, state] = await pickScript(wsScript.path, wsScript.summary, module.id, wsScript.hash);
35
39
  }
@@ -60,11 +64,32 @@ async function insertNewModuleAtIndex(modules, index, kind, wsScript) {
60
64
  module.summary = 'Terminate flow';
61
65
  module.stop_after_if = { skip_if_stopped: false, expr: 'true' };
62
66
  }
67
+ if (inlineScript) {
68
+ const { language, kind, subkind } = inlineScript;
69
+ [module, state] = await createInlineScriptModule(language, kind, subkind, module.id, module.summary);
70
+ }
63
71
  if (!modules)
64
72
  return [module];
65
73
  modules.splice(index, 0, module);
66
74
  return modules;
67
75
  }
76
+ async function insertNewPreprocessorModule(inlineScript, wsScript) {
77
+ var module = {
78
+ id: 'preprocessor',
79
+ value: { type: 'identity' }
80
+ };
81
+ var state = emptyFlowModuleState();
82
+ if (inlineScript) {
83
+ ;
84
+ [module, state] = await createInlineScriptModule(inlineScript.language, 'script', inlineScript.subkind, 'preprocessor');
85
+ }
86
+ else if (wsScript) {
87
+ ;
88
+ [module, state] = await pickScript(wsScript.path, wsScript.summary, module.id, wsScript.hash);
89
+ }
90
+ $flowStore.value.preprocessor_module = module;
91
+ $flowStateStore[module.id] = state;
92
+ }
68
93
  function removeAtId(modules, id) {
69
94
  const index = modules.findIndex((mod) => mod.id == id);
70
95
  if (index != -1) {
@@ -203,7 +228,7 @@ async function updateFlowInputsStore() {
203
228
  {/if}
204
229
  </div>
205
230
 
206
- <div class="z-10 flex-auto grow" bind:clientHeight={minHeight}>
231
+ <div class="z-10 flex-auto grow bg-surface-secondary" bind:clientHeight={minHeight}>
207
232
  <FlowGraphV2
208
233
  {disableAi}
209
234
  insertable
@@ -212,6 +237,7 @@ async function updateFlowInputsStore() {
212
237
  moving={$moving?.module.id}
213
238
  maxHeight={minHeight}
214
239
  modules={$flowStore.value?.modules}
240
+ preprocessorModule={$flowStore.value?.preprocessor_module}
215
241
  {selectedId}
216
242
  {flowInputsStore}
217
243
  on:delete={({ detail }) => {
@@ -219,13 +245,15 @@ async function updateFlowInputsStore() {
219
245
  dependents = getDependentComponents(e.id, $flowStore)
220
246
  const cb = () => {
221
247
  push(history, $flowStore)
222
-
223
- selectNextId(e.id)
224
-
225
- removeAtId($flowStore.value.modules, e.id)
226
-
227
- if ($flowInputsStore) {
228
- delete $flowInputsStore[e.id]
248
+ if (e.id === 'preprocessor') {
249
+ $selectedId = 'Input'
250
+ $flowStore.value.preprocessor_module = undefined
251
+ } else {
252
+ selectNextId(e.id)
253
+ removeAtId($flowStore.value.modules, e.id)
254
+ if ($flowInputsStore) {
255
+ delete $flowInputsStore[e.id]
256
+ }
229
257
  }
230
258
  $flowStore = $flowStore
231
259
 
@@ -256,13 +284,20 @@ async function updateFlowInputsStore() {
256
284
  $selectedId = $moving.module.id
257
285
  $moving = undefined
258
286
  } else {
259
- await insertNewModuleAtIndex(
260
- detail.modules,
261
- detail.index ?? 0,
262
- detail.detail,
263
- detail.script
264
- )
265
- $selectedId = detail.modules[detail.index ?? 0].id
287
+ if (detail.detail === 'preprocessor') {
288
+ insertNewPreprocessorModule(detail.inlineScript, detail.script)
289
+ $selectedId = 'preprocessor'
290
+ } else {
291
+ await insertNewModuleAtIndex(
292
+ detail.modules,
293
+ detail.index ?? 0,
294
+ detail.kind,
295
+ detail.script,
296
+ detail.flow,
297
+ detail.inlineScript
298
+ )
299
+ $selectedId = detail.modules[detail.index ?? 0].id
300
+ }
266
301
  }
267
302
 
268
303
  if (['branchone', 'branchall'].includes(detail.detail)) {
@@ -299,6 +334,14 @@ async function updateFlowInputsStore() {
299
334
  }
300
335
  })
301
336
  )
337
+ } else if (mod?.value?.type === 'forloopflow') {
338
+ if (mod.value.iterator.type === 'javascript') {
339
+ mod.value.iterator.expr = replaceId(mod.value.iterator.expr, id, newId)
340
+ }
341
+ } else if (mod?.value?.type === 'branchone') {
342
+ mod.value.branches.forEach((branch) => {
343
+ branch.expr = replaceId(branch.expr, id, newId)
344
+ })
302
345
  }
303
346
  })
304
347
  }
@@ -1,164 +1,187 @@
1
- <script>import { Menu } from '../../common';
2
- import { createEventDispatcher, getContext } from 'svelte';
3
- import { CheckCircle2, Code, Cross, GitBranch, Repeat, Square, Zap } from 'lucide-svelte';
4
- import StepGen from '../../copilot/StepGen.svelte';
5
- import BarsStaggered from '../../icons/BarsStaggered.svelte';
1
+ <script>import { createEventDispatcher, getContext } from 'svelte';
2
+ import { Cross, Zap } from 'lucide-svelte';
3
+ import StepGenQuick from '../../copilot/StepGenQuick.svelte';
4
+ import FlowInputsQuick from '../content/FlowInputsQuick.svelte';
5
+ import ToggleHubWorkspaceQuick from '../../ToggleHubWorkspaceQuick.svelte';
6
6
  import { twMerge } from 'tailwind-merge';
7
+ import TopLevelNode from '../pickers/TopLevelNode.svelte';
8
+ import PopupV2 from '../../common/popup/PopupV2.svelte';
9
+ import { flip, offset } from 'svelte-floating-ui/dom';
10
+ // import type { Writable } from 'svelte/store'
7
11
  const dispatch = createEventDispatcher();
8
- export let trigger = false;
9
12
  export let stop = false;
10
- export let open = undefined;
11
- export let index;
13
+ export let index = 0;
12
14
  export let funcDesc = '';
13
- export let modules;
15
+ export let modules = [];
14
16
  export let disableAi = false;
17
+ export let kind = 'script';
18
+ export let allowTrigger = true;
19
+ export let placement = 'bottom-center';
20
+ let floatingConfig = {
21
+ strategy: 'fixed',
22
+ // @ts-ignore
23
+ placement,
24
+ middleware: [offset(8), flip()],
25
+ autoUpdate: true
26
+ };
15
27
  $: !open && (funcDesc = '');
16
28
  let customUi = getContext('customUi');
29
+ let selectedKind = kind;
30
+ let preFilter = 'all';
31
+ let loading = false;
32
+ let small = false;
33
+ let open = false;
34
+ $: small = kind === 'preprocessor' || kind === 'failure';
17
35
  </script>
18
36
 
19
- <Menu
20
- transitionDuration={0}
21
- pointerDown
22
- bind:show={open}
23
- noMinW
24
- placement="bottom-center"
25
- let:close
26
- >
27
- <svelte:fragment slot="trigger">
37
+ <!-- <Menu transitionDuration={0} pointerDown bind:show={open} noMinW {placement} let:close> -->
38
+
39
+ <!-- {floatingConfig}
40
+ floatingClasses="mt-2"
41
+ containerClasses="border rounded-lg shadow-lg bg-surface"
42
+ noTransition
43
+ shouldUsePortal={true} -->
44
+
45
+ <PopupV2 {floatingConfig} bind:open let:close target="#flow-editor">
46
+ <svelte:fragment let:pointerdown let:pointerup slot="button">
28
47
  <button
29
- title="Add step"
48
+ title={`Add ${
49
+ kind === 'failure'
50
+ ? ' failure module '
51
+ : kind === 'preprocessor'
52
+ ? 'preprocessor step'
53
+ : kind === 'trigger'
54
+ ? 'trigger'
55
+ : 'step'
56
+ }`}
30
57
  id={`flow-editor-add-step-${index}`}
31
58
  type="button"
32
59
  class={twMerge(
33
60
  'w-5 h-5 flex items-center justify-center',
34
61
  'outline-[1px] outline dark:outline-gray-500 outline-gray-300',
35
62
  'text-secondary',
36
- 'bg-surface focus:outline-none hover:bg-surface-hover rounded '
63
+ 'bg-surface focus:outline-none hover:bg-surface-hover rounded '
37
64
  )}
65
+ on:pointerdown|preventDefault|stopPropagation={pointerdown}
66
+ on:pointerup={pointerup}
38
67
  >
39
- <Cross size={12} />
68
+ {#if kind === 'trigger'}
69
+ <Zap size={12} />
70
+ {:else}
71
+ <Cross size={12} />
72
+ {/if}
40
73
  </button>
41
74
  </svelte:fragment>
42
- <div id="flow-editor-insert-module">
43
- <StepGen on:insert {index} bind:funcDesc bind:open {close} {modules} {disableAi} />
75
+ <!-- FOO -->
76
+ <div
77
+ id="flow-editor-insert-module"
78
+ class="flex flex-col h-[400px] {small ? 'w-[450px]' : 'w-[650px]'} pt-1 pr-1 pl-1 gap-1.5"
79
+ on:wheel={(e) => {
80
+ e.stopPropagation()
81
+ }}
82
+ role="none"
83
+ >
84
+ <div class="flex flex-row items-center gap-2">
85
+ <StepGenQuick on:insert bind:funcDesc {preFilter} {loading} />
86
+ {#if selectedKind != 'preprocessor' && selectedKind != 'flow'}
87
+ <ToggleHubWorkspaceQuick bind:selected={preFilter} />
88
+ {/if}
89
+ </div>
44
90
 
45
- {#if funcDesc.length === 0}
46
- <div class="font-mono divide-y text-xs w-full text-secondary">
47
- <button
48
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
49
- on:pointerdown={() => {
50
- close()
51
- dispatch('new', 'script')
52
- }}
53
- role="menuitem"
54
- tabindex="-1"
55
- >
56
- <Code size={14} />
57
- Action
58
- </button>
59
- {#if customUi?.triggers != false && trigger}
60
- <button
61
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
62
- on:pointerdown={() => {
63
- close()
64
- dispatch('new', 'trigger')
91
+ <div class="flex flex-row grow min-h-0">
92
+ {#if kind === 'script' || kind == 'trigger'}
93
+ <div class="flex-none flex flex-col text-xs text-primary">
94
+ <TopLevelNode
95
+ label="Action"
96
+ selected={selectedKind === 'script'}
97
+ on:select={() => {
98
+ selectedKind = 'script'
65
99
  }}
66
- role="menuitem"
67
- tabindex="-1"
68
- >
69
- <Zap size={14} />
70
- Trigger
71
- </button>
72
- {/if}
73
- <button
74
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
75
- on:pointerdown={() => {
76
- close()
77
- dispatch('new', 'approval')
78
- }}
79
- role="menuitem"
80
- tabindex="-1"
81
- >
82
- <CheckCircle2 size={14} />
83
- Approval/Prompt
84
- </button>
85
- <button
86
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
87
- on:pointerdown={() => {
88
- close()
89
- dispatch('new', 'forloop')
90
- }}
91
- role="menuitem"
92
- >
93
- <Repeat size={14} />
94
-
95
- For Loop
96
- </button>
97
- <button
98
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
99
- on:pointerdown={() => {
100
- close()
101
- dispatch('new', 'whileloop')
102
- }}
103
- role="menuitem"
104
- >
105
- <Repeat size={14} />
106
-
107
- While Loop
108
- </button>
109
-
110
- <button
111
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
112
- on:pointerdown={() => {
113
- close()
114
- dispatch('new', 'branchone')
115
- }}
116
- role="menuitem"
117
- >
118
- <GitBranch size={14} />
119
- Branch to one
120
- </button>
121
-
122
- <button
123
- class="w-full text-left py-2 px-3 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center"
124
- on:pointerdown={() => {
125
- close()
126
- dispatch('new', 'branchall')
127
- }}
128
- role="menuitem"
129
- >
130
- <GitBranch size={14} />
131
-
132
- Branch to all
133
- </button>
100
+ />
101
+ {#if customUi?.triggers != false && allowTrigger}
102
+ <TopLevelNode
103
+ label="Trigger"
104
+ selected={selectedKind === 'trigger'}
105
+ on:select={() => {
106
+ selectedKind = 'trigger'
107
+ }}
108
+ />
109
+ {/if}
110
+ <TopLevelNode
111
+ label="Approval/Prompt"
112
+ selected={selectedKind === 'approval'}
113
+ on:select={() => {
114
+ selectedKind = 'approval'
115
+ }}
116
+ />
117
+ {#if customUi?.flowNode != false}
118
+ <TopLevelNode
119
+ label="Flow"
120
+ selected={selectedKind === 'flow'}
121
+ on:select={() => {
122
+ selectedKind = 'flow'
123
+ }}
124
+ />
125
+ {/if}
126
+ {#if stop}
127
+ <TopLevelNode
128
+ label="End Flow"
129
+ selected={selectedKind === 'script'}
130
+ on:select={() => {
131
+ selectedKind = 'script'
132
+ }}
133
+ />
134
+ {/if}
134
135
 
135
- {#if customUi?.flowNode != false}
136
- <button
137
- class="w-full text-left py-2 px-3 hover:bg-surface-hover rounded-none whitespace-nowrap flex flex-row gap-2 items-center"
138
- on:pointerdown={() => {
139
- close()
140
- dispatch('new', 'flow')
136
+ <TopLevelNode
137
+ label="For Loop"
138
+ on:select={() => {
139
+ close(null)
140
+ dispatch('new', { kind: 'forloop' })
141
+ }}
142
+ />
143
+ <TopLevelNode
144
+ label="While Loop"
145
+ on:select={() => {
146
+ close(null)
147
+ dispatch('new', { kind: 'whileloop' })
141
148
  }}
142
- role="menuitem"
143
- >
144
- <BarsStaggered size={14} />
145
- Flow
146
- </button>
147
- {/if}
148
- {#if stop}
149
- <button
150
- class="w-full text-left py-2 px-3 hover:bg-surface-hover inline-flex gap-2.5"
151
- on:pointerdown={() => {
152
- close()
153
- dispatch('new', 'end')
149
+ />
150
+ <TopLevelNode
151
+ label="Branch to one"
152
+ on:select={() => {
153
+ close(null)
154
+ dispatch('new', { kind: 'branchone' })
154
155
  }}
155
- role="menuitem"
156
- >
157
- <Square size={14} />
158
- End Flow
159
- </button>
160
- {/if}
161
- </div>
162
- {/if}
156
+ />
157
+ <TopLevelNode
158
+ label="Branch to all"
159
+ on:select={() => {
160
+ close(null)
161
+ dispatch('new', { kind: 'branchall' })
162
+ }}
163
+ />
164
+ </div>
165
+ {/if}
166
+
167
+ <FlowInputsQuick
168
+ {selectedKind}
169
+ bind:loading
170
+ filter={funcDesc}
171
+ {modules}
172
+ {index}
173
+ {disableAi}
174
+ {funcDesc}
175
+ {kind}
176
+ on:close={() => {
177
+ close(null)
178
+ }}
179
+ on:new
180
+ on:pickScript
181
+ on:pickFlow
182
+ {preFilter}
183
+ {small}
184
+ />
185
+ </div>
163
186
  </div>
164
- </Menu>
187
+ </PopupV2>
@@ -2,17 +2,20 @@ import { SvelteComponent } from "svelte";
2
2
  import type { FlowModule } from '../../../gen';
3
3
  declare const __propDef: {
4
4
  props: {
5
- trigger?: boolean | undefined;
6
5
  stop?: boolean | undefined;
7
- open?: boolean | undefined;
8
- index: number;
6
+ index?: number | undefined;
9
7
  funcDesc?: string | undefined;
10
- modules: FlowModule[];
8
+ modules?: FlowModule[] | undefined;
11
9
  disableAi?: boolean | undefined;
10
+ kind?: "script" | "failure" | "trigger" | "preprocessor" | undefined;
11
+ allowTrigger?: boolean | undefined;
12
+ placement?: "top-start" | "top-end" | "bottom-start" | "bottom-end" | "top-center" | "bottom-center" | undefined;
12
13
  };
13
14
  events: {
14
15
  insert: CustomEvent<any>;
15
16
  new: CustomEvent<any>;
17
+ pickScript: CustomEvent<any>;
18
+ pickFlow: CustomEvent<any>;
16
19
  } & {
17
20
  [evt: string]: CustomEvent<any>;
18
21
  };
@@ -8,8 +8,10 @@ import { prettyLanguage } from '../../../common';
8
8
  import { msToSec } from '../../../utils';
9
9
  import BarsStaggered from '../../icons/BarsStaggered.svelte';
10
10
  import FlowJobsMenu from './FlowJobsMenu.svelte';
11
+ import FlowCopilotButton from './FlowCopilotButton.svelte';
11
12
  export let mod;
12
13
  export let insertable;
14
+ export let disableAi;
13
15
  export let annotation = undefined;
14
16
  export let bgColor = '';
15
17
  export let modules;
@@ -24,6 +26,7 @@ $: itemProps = {
24
26
  selected: $selectedId === mod.id,
25
27
  retry: mod.retry?.constant != undefined || mod.retry?.exponential != undefined,
26
28
  earlyStop: mod.stop_after_if != undefined || mod.stop_after_all_iters_if != undefined,
29
+ skip: Boolean(mod.skip_if),
27
30
  suspend: Boolean(mod.suspend),
28
31
  sleep: Boolean(mod.sleep),
29
32
  cache: Boolean(mod.cache_ttl),
@@ -37,6 +40,9 @@ function onDelete(event) {
37
40
 
38
41
  {#if mod}
39
42
  <div class="relative">
43
+ {#if insertable && !disableAi && mod.id === 'preprocessor'}
44
+ <FlowCopilotButton className="-top-10" />
45
+ {/if}
40
46
  {#if moving == mod.id}
41
47
  <div class="absolute z-10 right-20 top-0.5 center-center">
42
48
  <Button color="dark" on:click={() => dispatch('move')} size="xs" variant="border">
@@ -140,6 +146,11 @@ function onDelete(event) {
140
146
  modType={mod.value.type}
141
147
  {bgColor}
142
148
  label={mod.summary ||
149
+ (mod.id === 'preprocessor'
150
+ ? 'Preprocessor'
151
+ : mod.id.startsWith('failure')
152
+ ? 'Error Handler'
153
+ : undefined) ||
143
154
  (`path` in mod.value ? mod.value.path : undefined) ||
144
155
  (mod.value.type === 'rawscript'
145
156
  ? `Inline ${prettyLanguage(mod.value.language)}`
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  props: {
5
5
  mod: FlowModule;
6
6
  insertable: boolean;
7
+ disableAi: boolean;
7
8
  annotation?: string | undefined;
8
9
  bgColor?: string | undefined;
9
10
  modules: FlowModule[];
@@ -0,0 +1,48 @@
1
+ <script>import LanguageIcon from '../../common/languageIcons/LanguageIcon.svelte';
2
+ import { sendUserToast } from '../../../toast';
3
+ import { createEventDispatcher } from 'svelte';
4
+ import { twMerge } from 'tailwind-merge';
5
+ export let label;
6
+ export let lang = undefined;
7
+ export let selected = false;
8
+ export let eeRestricted;
9
+ export let enterpriseLangs = [];
10
+ const dispatch = createEventDispatcher();
11
+ function handleKeydown(event) {
12
+ if (selected && event.key === 'Enter') {
13
+ click();
14
+ }
15
+ }
16
+ function click() {
17
+ if (eeRestricted) {
18
+ sendUserToast(`The languages ${enterpriseLangs.join(', ')} are only available on the enterprise edition`, true);
19
+ return;
20
+ }
21
+ dispatch('click');
22
+ }
23
+ </script>
24
+
25
+ <svelte:window on:keydown={handleKeydown} />
26
+
27
+ <button
28
+ class={twMerge(
29
+ 'px-3 py-2 gap-2 w-full text-left hover:bg-surface-hover flex flex-row items-center transition-all rounded-md',
30
+ selected ? 'bg-surface-hover' : ''
31
+ )}
32
+ on:click={click}
33
+ role="menuitem"
34
+ >
35
+ {#if lang}
36
+ <LanguageIcon {lang} width={14} height={14} />
37
+ {/if}
38
+ <span
39
+ class="grow truncate text-left text-2xs font-normal {eeRestricted
40
+ ? 'text-secondary'
41
+ : 'text-primary'}"
42
+ >
43
+ {label}{#if eeRestricted}&nbsp;(EE){/if}
44
+ </span>
45
+ {#if selected}
46
+ <kbd class="!text-xs">&crarr;</kbd>
47
+ {/if}
48
+ </button>
@@ -0,0 +1,23 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { SupportedLanguage } from '../../../common';
3
+ declare const __propDef: {
4
+ props: {
5
+ label: string;
6
+ lang?: SupportedLanguage | 'docker' | 'javascript' | undefined;
7
+ selected?: boolean | undefined;
8
+ eeRestricted: boolean;
9
+ enterpriseLangs?: string[] | undefined;
10
+ };
11
+ events: {
12
+ click: CustomEvent<any>;
13
+ } & {
14
+ [evt: string]: CustomEvent<any>;
15
+ };
16
+ slots: {};
17
+ };
18
+ export type FlowScriptPickerQuickProps = typeof __propDef.props;
19
+ export type FlowScriptPickerQuickEvents = typeof __propDef.events;
20
+ export type FlowScriptPickerQuickSlots = typeof __propDef.slots;
21
+ export default class FlowScriptPickerQuick extends SvelteComponent<FlowScriptPickerQuickProps, FlowScriptPickerQuickEvents, FlowScriptPickerQuickSlots> {
22
+ }
23
+ export {};
@@ -0,0 +1,19 @@
1
+ <script>import { createEventDispatcher } from 'svelte';
2
+ import TopLevelNode from './TopLevelNode.svelte';
3
+ export let label;
4
+ export let selected = false;
5
+ const dispatch = createEventDispatcher();
6
+ function handleKeydown(event) {
7
+ if (selected && event.key === 'Enter') {
8
+ event.preventDefault();
9
+ click();
10
+ }
11
+ }
12
+ function click() {
13
+ dispatch('click');
14
+ }
15
+ </script>
16
+
17
+ <svelte:window on:keydown={handleKeydown} />
18
+
19
+ <TopLevelNode class="px-3" {label} {selected} returnIcon on:select={click} />
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ label: string;
5
+ selected?: boolean | undefined;
6
+ };
7
+ events: {
8
+ click: CustomEvent<any>;
9
+ } & {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export type FlowToplevelNodeProps = typeof __propDef.props;
15
+ export type FlowToplevelNodeEvents = typeof __propDef.events;
16
+ export type FlowToplevelNodeSlots = typeof __propDef.slots;
17
+ export default class FlowToplevelNode extends SvelteComponent<FlowToplevelNodeProps, FlowToplevelNodeEvents, FlowToplevelNodeSlots> {
18
+ }
19
+ export {};