windmill-components 1.444.2 → 1.447.4

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 (229) hide show
  1. package/package/autosize.js +1 -1
  2. package/package/components/AppConnectInner.svelte +2 -1
  3. package/package/components/ArgInput.svelte +37 -24
  4. package/package/components/CapturesInputs.svelte +16 -0
  5. package/package/components/CapturesInputs.svelte.d.ts +21 -0
  6. package/package/components/Dev.svelte +7 -1
  7. package/package/components/EditableSchemaForm.svelte +369 -290
  8. package/package/components/EditableSchemaForm.svelte.d.ts +12 -2
  9. package/package/components/Editor.svelte +5 -7
  10. package/package/components/FirstStepInputs.svelte +111 -0
  11. package/package/components/FirstStepInputs.svelte.d.ts +17 -0
  12. package/package/components/FlowBuilder.svelte +28 -7
  13. package/package/components/FlowPreviewContent.svelte +72 -1
  14. package/package/components/FlowPreviewContent.svelte.d.ts +1 -0
  15. package/package/components/GfmMarkdown.svelte +93 -2
  16. package/package/components/HighlightCode.svelte +2 -0
  17. package/package/components/HistoricInputs.svelte +193 -0
  18. package/package/components/HistoricInputs.svelte.d.ts +20 -0
  19. package/package/components/InfiniteList.svelte +161 -0
  20. package/package/components/InfiniteList.svelte.d.ts +40 -0
  21. package/package/components/LightweightArgInput.svelte +19 -15
  22. package/package/components/MoveDrawer.svelte +2 -1
  23. package/package/components/Path.svelte +7 -1
  24. package/package/components/Path.svelte.d.ts +1 -1
  25. package/package/components/ResourcePicker.svelte +2 -1
  26. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  27. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  28. package/package/components/SaveInputsButton.svelte +53 -0
  29. package/package/components/SaveInputsButton.svelte.d.ts +24 -0
  30. package/package/components/SavedInputs.svelte +33 -61
  31. package/package/components/SavedInputsPicker.svelte +264 -0
  32. package/package/components/SavedInputsPicker.svelte.d.ts +20 -0
  33. package/package/components/ScheduleEditorInner.svelte +0 -1
  34. package/package/components/SchemaForm.svelte +22 -3
  35. package/package/components/ScriptBuilder.svelte +595 -562
  36. package/package/components/ScriptEditor.svelte +10 -3
  37. package/package/components/ScriptEditor.svelte.d.ts +5 -2
  38. package/package/components/ScriptSchema.svelte +1 -2
  39. package/package/components/Section.svelte +6 -4
  40. package/package/components/ShareModal.svelte.d.ts +2 -2
  41. package/package/components/SimpleEditor.svelte +39 -7
  42. package/package/components/SimpleEditor.svelte.d.ts +1 -4
  43. package/package/components/StringTypeNarrowing.svelte +3 -1
  44. package/package/components/TestConnection.svelte +5 -0
  45. package/package/components/TestJobLoader.svelte.d.ts +1 -1
  46. package/package/components/WorkerGroup.svelte +2 -1
  47. package/package/components/apps/components/inputs/AppS3FileInput.svelte +1 -0
  48. package/package/components/apps/editor/component/components.d.ts +79 -79
  49. package/package/components/apps/editor/component/default-codes.d.ts +1 -1
  50. package/package/components/apps/editor/component/default-codes.js +10 -10
  51. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +2 -1
  52. package/package/components/apps/inputType.d.ts +2 -2
  53. package/package/components/common/button/Button.svelte +10 -52
  54. package/package/components/common/button/PulseButton.svelte +81 -0
  55. package/package/components/common/button/PulseButton.svelte.d.ts +34 -0
  56. package/package/components/common/button/RoundIconButton.svelte +11 -0
  57. package/package/components/common/button/RoundIconButton.svelte.d.ts +19 -0
  58. package/package/components/common/button/model.d.ts +1 -0
  59. package/package/components/common/button/model.js +47 -0
  60. package/package/components/common/fileUpload/FileUpload.svelte +3 -1
  61. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +1 -0
  62. package/package/components/common/languageIcons/LanguageIcon.svelte +3 -0
  63. package/package/components/common/layout/List.svelte +10 -4
  64. package/package/components/common/layout/List.svelte.d.ts +1 -0
  65. package/package/components/common/tabs/Tab.svelte +14 -1
  66. package/package/components/common/tabs/Tab.svelte.d.ts +1 -0
  67. package/package/components/copilot/ScriptGen.svelte +1 -1
  68. package/package/components/copilot/lib.js +1 -1
  69. package/package/components/copilot/prompts/edit.yaml +1 -1
  70. package/package/components/copilot/prompts/editPrompt.js +1 -1
  71. package/package/components/copilot/prompts/fix.yaml +1 -1
  72. package/package/components/copilot/prompts/fixPrompt.js +1 -1
  73. package/package/components/copilot/prompts/gen.yaml +1 -1
  74. package/package/components/copilot/prompts/genPrompt.js +1 -1
  75. package/package/components/custom_ui.d.ts +1 -0
  76. package/package/components/details/DetailPageDetailPanel.svelte +20 -19
  77. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +4 -1
  78. package/package/components/details/DetailPageLayout.svelte +4 -1
  79. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  80. package/package/components/details/DetailPageTriggerPanel.svelte +84 -63
  81. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +3 -1
  82. package/package/components/details/EmailTriggerConfigSection.svelte +1 -1
  83. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +2 -1
  84. package/package/components/details/EmailTriggerPanel.svelte +2 -0
  85. package/package/components/details/EmailTriggerPanel.svelte.d.ts +2 -0
  86. package/package/components/flows/FlowEditor.svelte +8 -2
  87. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  88. package/package/components/flows/common/FlowCard.svelte +12 -6
  89. package/package/components/flows/content/DynamicInputHelpBox.svelte +1 -0
  90. package/package/components/flows/content/FlowEditorPanel.svelte +15 -9
  91. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  92. package/package/components/flows/content/FlowInput.svelte +449 -98
  93. package/package/components/flows/content/FlowInput.svelte.d.ts +2 -0
  94. package/package/components/flows/content/FlowInputEditor.svelte +46 -0
  95. package/package/components/flows/content/FlowInputEditor.svelte.d.ts +25 -0
  96. package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
  97. package/package/components/flows/content/FlowLoop.svelte +192 -194
  98. package/package/components/flows/content/FlowModuleComponent.svelte +372 -382
  99. package/package/components/flows/content/FlowModuleMock.svelte +6 -7
  100. package/package/components/flows/content/FlowPathViewer.svelte +2 -1
  101. package/package/components/flows/content/FlowSettings.svelte +25 -3
  102. package/package/components/flows/content/FlowWhileLoop.svelte +97 -99
  103. package/package/components/flows/flowStore.d.ts +13 -0
  104. package/package/components/flows/flowStore.js +41 -0
  105. package/package/components/flows/header/FlowPreviewButtons.svelte +10 -4
  106. package/package/components/flows/header/FlowPreviewButtons.svelte.d.ts +4 -2
  107. package/package/components/flows/header/FlowYamlEditor.svelte +3 -0
  108. package/package/components/flows/map/FlowModuleSchemaItem.svelte +8 -58
  109. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +67 -0
  110. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte.d.ts +24 -0
  111. package/package/components/flows/map/FlowModuleSchemaMap.svelte +2 -2
  112. package/package/components/flows/pickers/FlowScriptPicker.svelte +1 -1
  113. package/package/components/flows/previousResults.d.ts +1 -1
  114. package/package/components/flows/previousResults.js +7 -2
  115. package/package/components/flows/types.d.ts +7 -0
  116. package/package/components/flows/utils.d.ts +1 -0
  117. package/package/components/flows/utils.js +3 -0
  118. package/package/components/graph/graphBuilder.js +1 -1
  119. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +22 -8
  120. package/package/components/graph/renderers/triggers/TriggersBadge.svelte.d.ts +1 -1
  121. package/package/components/icons/NatsIcon.svelte +19 -0
  122. package/package/components/icons/NatsIcon.svelte.d.ts +18 -0
  123. package/package/components/icons/OracleDBIcon.svelte +15 -0
  124. package/package/components/icons/OracleDBIcon.svelte.d.ts +25 -0
  125. package/package/components/icons/index.d.ts +7 -1
  126. package/package/components/icons/index.js +8 -2
  127. package/package/components/meltComponents/ButtonDropDown.svelte +32 -0
  128. package/package/components/meltComponents/ButtonDropDown.svelte.d.ts +27 -0
  129. package/package/components/meltComponents/Popover.svelte +7 -4
  130. package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
  131. package/package/components/runs/RunsFilter.svelte +2 -2
  132. package/package/components/schema/AddPropertyFormV2.svelte +46 -0
  133. package/package/components/schema/AddPropertyFormV2.svelte.d.ts +18 -0
  134. package/package/components/schema/AddPropertyV2.svelte +151 -0
  135. package/package/components/schema/AddPropertyV2.svelte.d.ts +25 -0
  136. package/package/components/schema/EditableSchemaDrawer.svelte +17 -8
  137. package/package/components/schema/EditableSchemaWrapper.svelte +58 -14
  138. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +0 -1
  139. package/package/components/schema/FlowPropertyEditor.svelte +8 -3
  140. package/package/components/schema/JobSchemaPicker.svelte +32 -0
  141. package/package/components/schema/JobSchemaPicker.svelte.d.ts +19 -0
  142. package/package/components/schema/PropertyEditor.svelte +9 -1
  143. package/package/components/schema/RunningJobSchemaPicker.svelte +67 -0
  144. package/package/components/schema/RunningJobSchemaPicker.svelte.d.ts +21 -0
  145. package/package/components/schema/SchemaFormDND.svelte +1 -1
  146. package/package/components/schema/SchemaPicker.svelte +92 -0
  147. package/package/components/schema/SchemaPicker.svelte.d.ts +23 -0
  148. package/package/components/schema/SchemaPickerRow.svelte +95 -0
  149. package/package/components/schema/SchemaPickerRow.svelte.d.ts +22 -0
  150. package/package/components/scriptEditor/LogPanel.svelte +1 -1
  151. package/package/components/settings/ChangeWorkspaceColor.svelte +103 -0
  152. package/package/components/settings/ChangeWorkspaceColor.svelte.d.ts +16 -0
  153. package/package/components/settings/ChangeWorkspaceId.svelte +1 -0
  154. package/package/components/settings/ChangeWorkspaceName.svelte +4 -0
  155. package/package/components/sidebar/MenuButton.svelte +5 -2
  156. package/package/components/sidebar/MenuButton.svelte.d.ts +1 -0
  157. package/package/components/sidebar/SidebarContent.svelte +8 -0
  158. package/package/components/sidebar/WorkspaceMenu.svelte +40 -21
  159. package/package/components/table/DataTable.svelte +43 -3
  160. package/package/components/table/DataTable.svelte.d.ts +2 -0
  161. package/package/components/table/Head.svelte +1 -1
  162. package/package/components/table/Row.svelte +11 -1
  163. package/package/components/table/Row.svelte.d.ts +3 -0
  164. package/package/components/table/index.d.ts +3 -0
  165. package/package/components/table/index.js +3 -0
  166. package/package/components/triggers/CaptureButton.svelte +38 -4
  167. package/package/components/triggers/CaptureButton.svelte.d.ts +3 -1
  168. package/package/components/triggers/CaptureIcon.svelte +7 -4
  169. package/package/components/triggers/CaptureIcon.svelte.d.ts +7 -13
  170. package/package/components/triggers/CaptureSection.svelte +50 -17
  171. package/package/components/triggers/CaptureSection.svelte.d.ts +5 -3
  172. package/package/components/triggers/CaptureTable.svelte +239 -186
  173. package/package/components/triggers/CaptureTable.svelte.d.ts +9 -11
  174. package/package/components/triggers/CaptureWrapper.svelte +126 -109
  175. package/package/components/triggers/CaptureWrapper.svelte.d.ts +3 -1
  176. package/package/components/triggers/KafkaTriggerEditorInner.svelte +1 -0
  177. package/package/components/triggers/KafkaTriggersConfigSection.svelte +16 -4
  178. package/package/components/triggers/KafkaTriggersConfigSection.svelte.d.ts +3 -1
  179. package/package/components/triggers/KafkaTriggersPanel.svelte +2 -0
  180. package/package/components/triggers/KafkaTriggersPanel.svelte.d.ts +2 -0
  181. package/package/components/triggers/NatsTriggerEditor.svelte +19 -0
  182. package/package/components/triggers/NatsTriggerEditor.svelte.d.ts +21 -0
  183. package/package/components/triggers/NatsTriggerEditorInner.svelte +239 -0
  184. package/package/components/triggers/NatsTriggerEditorInner.svelte.d.ts +21 -0
  185. package/package/components/triggers/NatsTriggersConfigSection.svelte +276 -0
  186. package/package/components/triggers/NatsTriggersConfigSection.svelte.d.ts +37 -0
  187. package/package/components/triggers/NatsTriggersPanel.svelte +126 -0
  188. package/package/components/triggers/NatsTriggersPanel.svelte.d.ts +26 -0
  189. package/package/components/triggers/RouteEditorConfigSection.svelte +12 -2
  190. package/package/components/triggers/RouteEditorConfigSection.svelte.d.ts +5 -1
  191. package/package/components/triggers/RouteEditorInner.svelte +5 -0
  192. package/package/components/triggers/RoutesPanel.svelte +4 -0
  193. package/package/components/triggers/RoutesPanel.svelte.d.ts +3 -0
  194. package/package/components/triggers/TriggersEditor.svelte +146 -97
  195. package/package/components/triggers/TriggersEditor.svelte.d.ts +2 -0
  196. package/package/components/triggers/TriggersEditorSection.svelte +19 -13
  197. package/package/components/triggers/TriggersEditorSection.svelte.d.ts +3 -0
  198. package/package/components/triggers/TriggersWrapper.svelte +7 -3
  199. package/package/components/triggers/TriggersWrapper.svelte.d.ts +2 -1
  200. package/package/components/triggers/WebhooksConfigSection.svelte +1 -0
  201. package/package/components/triggers/WebhooksConfigSection.svelte.d.ts +2 -1
  202. package/package/components/triggers/WebhooksPanel.svelte +2 -0
  203. package/package/components/triggers/WebhooksPanel.svelte.d.ts +2 -0
  204. package/package/components/triggers/WebsocketEditorConfigSection.svelte +3 -1
  205. package/package/components/triggers/WebsocketEditorConfigSection.svelte.d.ts +2 -1
  206. package/package/components/triggers/WebsocketTriggersPanel.svelte +2 -0
  207. package/package/components/triggers/WebsocketTriggersPanel.svelte.d.ts +2 -0
  208. package/package/components/triggers.d.ts +2 -1
  209. package/package/components/triggers.js +2 -0
  210. package/package/components/vscode.js +12 -8
  211. package/package/consts.d.ts +1 -0
  212. package/package/consts.js +18 -0
  213. package/package/gen/core/OpenAPI.js +1 -1
  214. package/package/gen/schemas.gen.d.ts +207 -13
  215. package/package/gen/schemas.gen.js +207 -13
  216. package/package/gen/services.gen.d.ts +118 -10
  217. package/package/gen/services.gen.js +237 -17
  218. package/package/gen/types.gen.d.ts +400 -40
  219. package/package/hubPaths.json +2 -1
  220. package/package/infer.js +11 -2
  221. package/package/monaco_workers/build_workers.js +39 -37
  222. package/package/monaco_workers/graphql.worker.bundle.js +18371 -36513
  223. package/package/script_helpers.d.ts +5 -2
  224. package/package/script_helpers.js +46 -8
  225. package/package/scripts.js +4 -0
  226. package/package/stores.d.ts +2 -1
  227. package/package/stores.js +2 -1
  228. package/package.json +14 -16
  229. package/package/monaco_workers/graphql.worker.bundle.d.ts +0 -0
@@ -39,15 +39,14 @@ $: isMockEnabled = Boolean(flowModule.mock?.enabled);
39
39
  />
40
40
  <div>
41
41
  <span class="text-xs font-bold">Mocked Return value</span>
42
- {#if flowModule?.mock?.return_value != undefined}
42
+ {#if flowModule?.mock?.enabled}
43
43
  <JsonEditor {code} bind:value={flowModule.mock.return_value} />
44
44
  {:else}
45
- <input
46
- type="text"
47
- disabled
48
- value={flowModule.mock?.return_value ? code : ''}
49
- class="w-full p-2 border rounded-md"
50
- />
45
+ <pre class="text-xs border rounded p-2 bg-surface-disabled"
46
+ >{flowModule.mock?.return_value
47
+ ? JSON.stringify(flowModule.mock?.return_value, null, 2)
48
+ : ''}</pre
49
+ >
51
50
  {/if}
52
51
  </div>
53
52
  </Section>
@@ -16,7 +16,8 @@ setContext('TriggerContext', {
16
16
  triggersCount: triggersCount,
17
17
  simplifiedPoll: writable(false),
18
18
  defaultValues: writable(undefined),
19
- captureOn: writable(undefined)
19
+ captureOn: writable(undefined),
20
+ showCaptureHint: writable(undefined)
20
21
  });
21
22
  async function loadFlow(path) {
22
23
  flow = await FlowService.getFlowByPath({ workspace: $workspaceStore, path });
@@ -3,7 +3,7 @@ import FlowCard from '../common/FlowCard.svelte';
3
3
  import Toggle from '../../Toggle.svelte';
4
4
  import { Alert, Button, SecondsInput } from '../../common';
5
5
  import { getContext } from 'svelte';
6
- import { enterpriseLicense, workspaceStore } from '../../../stores';
6
+ import { enterpriseLicense, userStore, workspaceStore } from '../../../stores';
7
7
  import { isCloudHosted } from '../../../cloud';
8
8
  import Tooltip from '../../Tooltip.svelte';
9
9
  import SimpleEditor from '../../SimpleEditor.svelte';
@@ -37,6 +37,7 @@ $: activeAdvancedOptions = [
37
37
  { name: 'Early Return', active: Boolean($flowStore.value.early_return) },
38
38
  { name: 'Dedicated Worker', active: Boolean($flowStore.dedicated_worker) },
39
39
  { name: 'Concurrent Limit', active: Boolean($flowStore.value.concurrent_limit) },
40
+ { name: 'Run on Behalf of Last Editor', active: Boolean($flowStore.on_behalf_of_email) },
40
41
  { name: 'Worker Tag', active: displayWorkerTagPicker }
41
42
  ];
42
43
  $: numberOfAdvancedOptionsOn = activeAdvancedOptions.filter((option) => option.active).length;
@@ -338,6 +339,27 @@ $: activeAdvancedOptionNames = activeAdvancedOptions
338
339
  class="py-1"
339
340
  />
340
341
 
342
+ <!-- On behalf of last editor section -->
343
+ <Toggle
344
+ textClass="font-normal text-sm"
345
+ color="nord"
346
+ size="xs"
347
+ checked={Boolean($flowStore.on_behalf_of_email)}
348
+ on:change={() => {
349
+ if ($flowStore.on_behalf_of_email) {
350
+ $flowStore.on_behalf_of_email = undefined
351
+ } else {
352
+ $flowStore.on_behalf_of_email = $userStore?.email
353
+ }
354
+ }}
355
+ options={{
356
+ right: 'Run on behalf of last editor',
357
+ rightTooltip:
358
+ 'When this option is enabled, the flow will be run with the permissions of the last editor.'
359
+ }}
360
+ class="py-1"
361
+ />
362
+
341
363
  <!-- Error Handler Section -->
342
364
  <div class="flex flex-row items-center py-1">
343
365
  <ErrorHandlerToggleButtonV2
@@ -348,7 +370,7 @@ $: activeAdvancedOptionNames = activeAdvancedOptions
348
370
  />
349
371
  {#if !$enterpriseLicense}
350
372
  <span
351
- class="inline-flex text-xs text-primary items-center gap-1 !text-yellow-500 whitespace-nowrap ml-8"
373
+ class="inline-flex text-xs items-center gap-1 !text-yellow-500 whitespace-nowrap ml-8"
352
374
  >
353
375
  <AlertTriangle size={16} />
354
376
  EE only <Tooltip>Enterprise Edition only feature</Tooltip>
@@ -469,7 +491,7 @@ $: activeAdvancedOptionNames = activeAdvancedOptions
469
491
  />
470
492
  {#if !$enterpriseLicense || isCloudHosted()}
471
493
  <span
472
- class="inline-flex absolute top-0 left-72 text-xs text-primary items-center gap-1 !text-yellow-500 whitespace-nowrap ml-8"
494
+ class="inline-flex absolute top-0 left-72 text-xs items-center gap-1 !text-yellow-500 whitespace-nowrap ml-8"
473
495
  >
474
496
  <AlertTriangle size={16} />
475
497
  EE only <Tooltip>Enterprise Edition only feature</Tooltip>
@@ -39,115 +39,113 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
39
39
  />
40
40
  </Drawer>
41
41
 
42
- <div class="h-full flex flex-col">
43
- <FlowCard {noEditor} title="While loop">
44
- <div slot="header" class="grow">
45
- <input bind:value={mod.summary} placeholder={'Summary'} />
46
- </div>
42
+ <FlowCard {noEditor} title="While loop">
43
+ <div slot="header" class="grow">
44
+ <input bind:value={mod.summary} placeholder={'Summary'} />
45
+ </div>
47
46
 
48
- <Splitpanes horizontal class="!max-h-[calc(100%-48px)]">
49
- <Pane size={60} minSize={20} class="p-4">
50
- {#if !noEditor}
51
- <Alert
52
- type="info"
53
- title="While loops"
54
- class="mb-4"
55
- size="xs"
56
- documentationLink="https://www.windmill.dev/docs/flows/while_loops"
57
- >
58
- Add steps inside the while loop but have one of them use early stop/break in their
59
- Advanced settings (or do it at the loop level that will watch the last step) to break
60
- out of the while loop (otherwise it will loop forever and you will have to cancel the
61
- flow manually).
62
- </Alert>
63
- {/if}
47
+ <Splitpanes horizontal class="h-full">
48
+ <Pane size={50} minSize={20} class="p-4">
49
+ {#if !noEditor}
50
+ <Alert
51
+ type="info"
52
+ title="While loops"
53
+ class="mb-4"
54
+ size="xs"
55
+ documentationLink="https://www.windmill.dev/docs/flows/while_loops"
56
+ >
57
+ Add steps inside the while loop but have one of them use early stop/break in their
58
+ Advanced settings (or do it at the loop level that will watch the last step) to break out
59
+ of the while loop (otherwise it will loop forever and you will have to cancel the flow
60
+ manually).
61
+ </Alert>
62
+ {/if}
64
63
 
65
- {#if mod.value.type === 'whileloopflow'}
66
- <div class="flex flex-row gap-8 mt-2 mb-6">
67
- <div>
68
- <div class="mb-2 text-sm font-bold"
69
- >Skip failures <Tooltip
70
- documentationLink="https://www.windmill.dev/docs/flows/while_loops"
71
- >If disabled, the flow will fail as soon as one of the iteration fail. Otherwise,
72
- the error will be collected as the result of the iteration. Regardless of this
73
- setting, if an error handler is defined, it will process the error.</Tooltip
74
- ></div
75
- >
76
- <Toggle
77
- bind:checked={mod.value.skip_failures}
78
- options={{
79
- right: 'Skip failures'
80
- }}
81
- />
82
- </div>
64
+ {#if mod.value.type === 'whileloopflow'}
65
+ <div class="flex flex-row gap-8 mt-2 mb-6">
66
+ <div>
67
+ <div class="mb-2 text-sm font-bold"
68
+ >Skip failures <Tooltip
69
+ documentationLink="https://www.windmill.dev/docs/flows/while_loops"
70
+ >If disabled, the flow will fail as soon as one of the iteration fail. Otherwise,
71
+ the error will be collected as the result of the iteration. Regardless of this
72
+ setting, if an error handler is defined, it will process the error.</Tooltip
73
+ ></div
74
+ >
75
+ <Toggle
76
+ bind:checked={mod.value.skip_failures}
77
+ options={{
78
+ right: 'Skip failures'
79
+ }}
80
+ />
83
81
  </div>
82
+ </div>
84
83
 
85
- <div class="my-2 flex flex-row gap-2 items-center">
86
- <div class="flex w-full justify-end">
87
- <Button
88
- on:click={() => (previewOpen = true)}
89
- startIcon={{ icon: Play }}
90
- color="dark"
91
- size="sm">Test an iteration</Button
92
- >
93
- </div>
84
+ <div class="my-2 flex flex-row gap-2 items-center">
85
+ <div class="flex w-full justify-end">
86
+ <Button
87
+ on:click={() => (previewOpen = true)}
88
+ startIcon={{ icon: Play }}
89
+ color="dark"
90
+ size="sm">Test an iteration</Button
91
+ >
94
92
  </div>
95
- {/if}
96
- </Pane>
97
- <Pane size={40} minSize={20} class="flex flex-col flex-1">
98
- <Tabs bind:selected>
99
- <!-- <Tab value="retries">Retries</Tab> -->
100
- <Tab value="early-stop">Early Stop/Break</Tab>
101
- <Tab value="skip">Skip</Tab>
102
- <Tab value="suspend">Suspend/Approval/Prompt</Tab>
103
- <Tab value="sleep">Sleep</Tab>
104
- <Tab value="mock">Mock</Tab>
105
- <Tab value="lifetime">Lifetime</Tab>
93
+ </div>
94
+ {/if}
95
+ </Pane>
96
+ <Pane size={40} minSize={20} class="flex flex-col flex-1">
97
+ <Tabs bind:selected>
98
+ <!-- <Tab value="retries">Retries</Tab> -->
99
+ <Tab value="early-stop">Early Stop/Break</Tab>
100
+ <Tab value="skip">Skip</Tab>
101
+ <Tab value="suspend">Suspend/Approval/Prompt</Tab>
102
+ <Tab value="sleep">Sleep</Tab>
103
+ <Tab value="mock">Mock</Tab>
104
+ <Tab value="lifetime">Lifetime</Tab>
106
105
 
107
- <svelte:fragment slot="content">
108
- <div class="overflow-hidden bg-surface" style="height:calc(100% - 32px);">
109
- <!-- <TabContent value="retries" class="flex flex-col flex-1 h-full">
106
+ <svelte:fragment slot="content">
107
+ <div class="overflow-hidden bg-surface" style="height:calc(100% - 32px);">
108
+ <!-- <TabContent value="retries" class="flex flex-col flex-1 h-full">
110
109
  <div class="p-4 overflow-y-auto">
111
110
  <FlowRetries bind:flowModule={mod} />
112
111
  </div>
113
112
  </TabContent> -->
114
113
 
115
- <TabContent value="early-stop" class="flex flex-col flex-1 h-full">
116
- <div class="p-4 overflow-y-auto">
117
- <FlowModuleEarlyStop bind:flowModule={mod} />
118
- </div>
119
- </TabContent>
114
+ <TabContent value="early-stop" class="flex flex-col flex-1 h-full">
115
+ <div class="p-4 overflow-y-auto">
116
+ <FlowModuleEarlyStop bind:flowModule={mod} />
117
+ </div>
118
+ </TabContent>
120
119
 
121
- <TabContent value="skip" class="flex flex-col flex-1 h-full">
122
- <div class="p-4 overflow-y-auto">
123
- <FlowModuleSkip bind:flowModule={mod} {parentModule} {previousModule} />
124
- </div>
125
- </TabContent>
120
+ <TabContent value="skip" class="flex flex-col flex-1 h-full">
121
+ <div class="p-4 overflow-y-auto">
122
+ <FlowModuleSkip bind:flowModule={mod} {parentModule} {previousModule} />
123
+ </div>
124
+ </TabContent>
126
125
 
127
- <TabContent value="suspend" class="flex flex-col flex-1 h-full">
128
- <div class="p-4 overflow-y-auto">
129
- <FlowModuleSuspend previousModuleId={previousModule?.id} bind:flowModule={mod} />
130
- </div>
131
- </TabContent>
132
- <TabContent value="sleep" class="flex flex-col flex-1 h-full">
133
- <div class="p-4 overflow-y-auto">
134
- <FlowModuleSleep previousModuleId={previousModule?.id} bind:flowModule={mod} />
135
- </div>
136
- </TabContent>
137
- <TabContent value="mock" class="flex flex-col flex-1 h-full">
138
- <div class="p-4 overflow-y-auto">
139
- <FlowModuleMock bind:flowModule={mod} />
140
- </div>
141
- </TabContent>
142
- <TabContent value="lifetime" class="flex flex-col flex-1 h-full">
143
- <div class="p-4 overflow-y-auto">
144
- <FlowModuleDeleteAfterUse bind:flowModule={mod} disabled={!$enterpriseLicense} />
145
- </div>
146
- </TabContent>
147
- </div>
148
- </svelte:fragment>
149
- </Tabs>
150
- </Pane>
151
- </Splitpanes>
152
- </FlowCard>
153
- </div>
126
+ <TabContent value="suspend" class="flex flex-col flex-1 h-full">
127
+ <div class="p-4 overflow-y-auto">
128
+ <FlowModuleSuspend previousModuleId={previousModule?.id} bind:flowModule={mod} />
129
+ </div>
130
+ </TabContent>
131
+ <TabContent value="sleep" class="flex flex-col flex-1 h-full">
132
+ <div class="p-4 overflow-y-auto">
133
+ <FlowModuleSleep previousModuleId={previousModule?.id} bind:flowModule={mod} />
134
+ </div>
135
+ </TabContent>
136
+ <TabContent value="mock" class="flex flex-col flex-1 h-full">
137
+ <div class="p-4 overflow-y-auto">
138
+ <FlowModuleMock bind:flowModule={mod} />
139
+ </div>
140
+ </TabContent>
141
+ <TabContent value="lifetime" class="flex flex-col flex-1 h-full">
142
+ <div class="p-4 overflow-y-auto">
143
+ <FlowModuleDeleteAfterUse bind:flowModule={mod} disabled={!$enterpriseLicense} />
144
+ </div>
145
+ </TabContent>
146
+ </div>
147
+ </svelte:fragment>
148
+ </Tabs>
149
+ </Pane>
150
+ </Splitpanes>
151
+ </FlowCard>
@@ -6,4 +6,17 @@ export type FlowMode = 'push' | 'pull';
6
6
  export declare const importFlowStore: Writable<Flow | undefined>;
7
7
  export declare function initFlow(flow: Flow, flowStore: Writable<Flow>, flowStateStore: Writable<FlowState>): Promise<void>;
8
8
  export declare function copyFirstStepSchema(flowState: FlowState, flowStore: Writable<OpenFlow>): Promise<void>;
9
+ export declare function getFirstStepSchema(flowState: FlowState, flowStore: Writable<OpenFlow>): Promise<{
10
+ schema: import("../../common").Schema | undefined;
11
+ mod: {
12
+ id: string;
13
+ summary: string | undefined;
14
+ value: {
15
+ language?: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | undefined;
16
+ path?: string | undefined;
17
+ type: "script" | "flow" | "identity" | "rawscript" | "forloopflow" | "branchone" | "branchall" | "whileloopflow";
18
+ };
19
+ };
20
+ connectFirstNode: () => void;
21
+ }>;
9
22
  export declare function replaceId(expr: string, id: string, newId: string): string;
@@ -1,5 +1,7 @@
1
1
  import { writable } from 'svelte/store';
2
2
  import { initFlowState } from './flowState';
3
+ import { sendUserToast } from '../../toast';
4
+ import { get } from 'svelte/store';
3
5
  export const importFlowStore = writable(undefined);
4
6
  export async function initFlow(flow, flowStore, flowStateStore) {
5
7
  await initFlowState(flow, flowStateStore);
@@ -18,11 +20,50 @@ export async function copyFirstStepSchema(flowState, flowStore) {
18
20
  expr: `flow_input.${key}`
19
21
  };
20
22
  });
23
+ return flow;
21
24
  }
25
+ sendUserToast('Only scripts can be used as a input schema', true);
26
+ return flow;
22
27
  }
28
+ sendUserToast('No first step found', true);
23
29
  return flow;
24
30
  });
25
31
  }
32
+ export async function getFirstStepSchema(flowState, flowStore) {
33
+ const flow = get(flowStore);
34
+ const firstModuleId = flow.value.modules[0]?.id;
35
+ if (!firstModuleId || !flowState[firstModuleId]) {
36
+ throw new Error('no first step found');
37
+ }
38
+ const schema = structuredClone(flowState[firstModuleId].schema);
39
+ const v = flow.value.modules[0].value;
40
+ if (v.type !== 'rawscript' && v.type !== 'script') {
41
+ throw new Error('only scripts can be used as a input schema');
42
+ }
43
+ const simplifiedModule = {
44
+ id: flow.value.modules[0].id,
45
+ summary: flow.value.modules[0].summary,
46
+ value: {
47
+ type: flow.value.modules[0].value.type,
48
+ ...('path' in flow.value.modules[0].value ? { path: flow.value.modules[0].value.path } : {}),
49
+ ...('language' in flow.value.modules[0].value
50
+ ? { language: flow.value.modules[0].value.language }
51
+ : {})
52
+ }
53
+ };
54
+ return {
55
+ schema,
56
+ mod: simplifiedModule,
57
+ connectFirstNode: () => {
58
+ Object.keys(v.input_transforms ?? {}).forEach((key) => {
59
+ v.input_transforms[key] = {
60
+ type: 'javascript',
61
+ expr: `flow_input.${key}`
62
+ };
63
+ });
64
+ }
65
+ };
66
+ }
26
67
  export function replaceId(expr, id, newId) {
27
68
  return expr
28
69
  .replaceAll(`results.${id}`, `results.${newId}`)
@@ -2,19 +2,21 @@
2
2
  import Button from '../../common/button/Button.svelte';
3
3
  import Drawer from '../../common/drawer/Drawer.svelte';
4
4
  import FlowPreviewContent from '../../FlowPreviewContent.svelte';
5
+ import { createEventDispatcher } from 'svelte';
5
6
  import { getContext } from 'svelte';
6
7
  import { Play } from 'lucide-svelte';
7
8
  const { selectedId } = getContext('FlowEditorContext');
8
9
  let previewOpen = false;
9
10
  let previewMode = 'whole';
10
- export async function openPreview() {
11
+ export async function openPreview(test = false) {
11
12
  if (!previewOpen) {
12
13
  previewOpen = true;
14
+ if (!test)
15
+ return;
13
16
  }
14
- else {
15
- flowPreviewContent?.test();
16
- }
17
+ flowPreviewContent?.test();
17
18
  }
19
+ const dispatch = createEventDispatcher();
18
20
  let flowPreviewContent;
19
21
  let jobId = undefined;
20
22
  let job = undefined;
@@ -86,5 +88,9 @@ $: upToDisabled =
86
88
  on:close={() => {
87
89
  previewOpen = false
88
90
  }}
91
+ on:openTriggers={(e) => {
92
+ previewOpen = false
93
+ dispatch('openTriggers', e.detail)
94
+ }}
89
95
  />
90
96
  </Drawer>
@@ -1,9 +1,11 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
- openPreview?: (() => Promise<void>) | undefined;
4
+ openPreview?: ((test?: boolean) => Promise<void>) | undefined;
5
5
  };
6
6
  events: {
7
+ openTriggers: CustomEvent<any>;
8
+ } & {
7
9
  [evt: string]: CustomEvent<any>;
8
10
  };
9
11
  slots: {};
@@ -12,6 +14,6 @@ export type FlowPreviewButtonsProps = typeof __propDef.props;
12
14
  export type FlowPreviewButtonsEvents = typeof __propDef.events;
13
15
  export type FlowPreviewButtonsSlots = typeof __propDef.slots;
14
16
  export default class FlowPreviewButtons extends SvelteComponent<FlowPreviewButtonsProps, FlowPreviewButtonsEvents, FlowPreviewButtonsSlots> {
15
- get openPreview(): () => Promise<void>;
17
+ get openPreview(): (test?: boolean) => Promise<void>;
16
18
  }
17
19
  export {};
@@ -30,6 +30,9 @@ function apply() {
30
30
  if (parsed['visible_to_runner_only'] !== undefined) {
31
31
  $flowStore.visible_to_runner_only = parsed['visible_to_runner_only'];
32
32
  }
33
+ if (parsed['on_behalf_of_email'] !== undefined) {
34
+ $flowStore.on_behalf_of_email = parsed['on_behalf_of_email'];
35
+ }
33
36
  $flowStore.value = parsed.value;
34
37
  $flowStore.schema = parsed.schema;
35
38
  $flowStore.tag = parsed.tag;
@@ -1,7 +1,6 @@
1
- <script>import Badge from '../../common/badge/Badge.svelte';
2
- import Popover from '../../Popover.svelte';
1
+ <script>import Popover from '../../Popover.svelte';
3
2
  import { classNames } from '../../../utils';
4
- import { AlertTriangle, Bed, Database, Gauge, Move, Pencil, PhoneIncoming, Repeat, Square, SkipForward, Voicemail, X } from 'lucide-svelte';
3
+ import { AlertTriangle, Bed, Database, Gauge, Move, PhoneIncoming, Repeat, Square, SkipForward, Voicemail, X } from 'lucide-svelte';
5
4
  import { createEventDispatcher, getContext } from 'svelte';
6
5
  import { fade } from 'svelte/transition';
7
6
  import { get } from 'svelte/store';
@@ -12,6 +11,7 @@ import { Drawer } from '../../common';
12
11
  import DrawerContent from '../../common/drawer/DrawerContent.svelte';
13
12
  import { getDependeeAndDependentComponents } from '../flowExplorer';
14
13
  import { replaceId } from '../flowStore';
14
+ import FlowModuleSchemaItemViewer from './FlowModuleSchemaItemViewer.svelte';
15
15
  import FlowPropPicker from '../propPicker/FlowPropPicker.svelte';
16
16
  export let selected = false;
17
17
  export let deletable = false;
@@ -44,9 +44,6 @@ $: pickableIds = $pickablePropertiesFiltered?.priorIds;
44
44
  let editId = false;
45
45
  let newId = id ?? '';
46
46
  let hover = false;
47
- let idBadgeWidth = undefined;
48
- let iconWidth = undefined;
49
- $: marginLeft = Math.max(iconWidth ?? 0, idBadgeWidth ?? 0) * 2 + 32;
50
47
  </script>
51
48
 
52
49
  {#if deletable && id && editId}
@@ -218,58 +215,11 @@ $: marginLeft = Math.max(iconWidth ?? 0, idBadgeWidth ?? 0) * 2 + 32;
218
215
  {/if}
219
216
  </div>
220
217
 
221
- <div
222
- class="relative flex gap-1 justify-between items-center w-full overflow-hidden rounded-sm
223
- p-2 text-2xs module text-primary"
224
- >
225
- {#if $$slots.icon}
226
- <div class="flex-none" bind:clientWidth={iconWidth}>
227
- <slot name="icon" />
228
- </div>
229
- {/if}
230
-
231
- <Popover
232
- class="absolute left-1/2 transform -translate-x-1/2 center-center"
233
- style="max-width: calc(100% - {marginLeft}px)"
234
- >
235
- <div class="text-center truncate {bold ? '!font-bold' : 'font-normal'}">
236
- {label}
237
- </div>
238
- <svelte:fragment slot="text">
239
- <div>
240
- <div>{label}</div>
241
- {#if path != ''}<div>{path}</div>{/if}
242
- </div>
243
- </svelte:fragment>
244
- </Popover>
245
-
246
- <div class="flex items-center space-x-2 relative max-w-[25%]" bind:clientWidth={idBadgeWidth}>
247
- {#if id && id !== 'preprocessor' && !id.startsWith('failure') && !id.startsWith('subflow:')}
248
- <Badge
249
- color="indigo"
250
- wrapperClass="max-w-full"
251
- baseClass="max-w-full truncate !px-1"
252
- title={id}
253
- >
254
- <span class="max-w-full text-2xs truncate">{id}</span></Badge
255
- >
256
- {#if deletable}
257
- <button
258
- class="absolute -left-[28px] z-10 h-[20px] rounded-l rounded-t rounded-s w-[20px] trash center-center text-secondary bg-surface duration-150 hover:bg-blue-400 {editId
259
- ? '!bg-blue-400'
260
- : ''} hover:text-white
261
- hover:border-blue-700 hover:!visible {hover ? '' : '!hidden'}"
262
- on:click|preventDefault|stopPropagation={(event) => (editId = !editId)}
263
- title="Edit Id"><Pencil size={14} /></button
264
- >
265
- {/if}
266
- {:else if id?.startsWith('subflow:')}
267
- <Badge color="blue" wrapperClass="max-w-full" baseClass="!px-1" title={id}>
268
- <span class="max-w-full text-2xs truncate">{id.substring('subflow:'.length)}</span></Badge
269
- >
270
- {/if}
271
- </div>
272
- </div>
218
+ <FlowModuleSchemaItemViewer {label} {path} {id} {deletable} {bold} bind:editId {hover}>
219
+ <svelte:fragment slot="icon">
220
+ <slot name="icon" />
221
+ </svelte:fragment>
222
+ </FlowModuleSchemaItemViewer>
273
223
 
274
224
  {#if id && $flowPropPickerConfig && pickableIds && Object.keys(pickableIds).includes(id)}
275
225
  <div class="absolute -bottom-[14px] right-[21px] translate-x-[50%] center-center">
@@ -0,0 +1,67 @@
1
+ <script>import Popover from '../../Popover.svelte';
2
+ import Badge from '../../common/badge/Badge.svelte';
3
+ import { Pencil } from 'lucide-svelte';
4
+ let iconWidth = 0;
5
+ let idBadgeWidth = undefined;
6
+ export let label = '';
7
+ export let path = '';
8
+ export let id = '';
9
+ export let deletable = false;
10
+ export let bold = false;
11
+ export let editId = false;
12
+ export let hover = false;
13
+ $: marginLeft = Math.max(iconWidth ?? 0, idBadgeWidth ?? 0) * 2 + 32;
14
+ </script>
15
+
16
+ <div
17
+ class="relative flex gap-1 justify-between items-center w-full overflow-hidden rounded-sm
18
+ p-2 text-2xs module text-primary"
19
+ >
20
+ {#if $$slots.icon && true}
21
+ <div class="flex-none" bind:clientWidth={iconWidth}>
22
+ <slot name="icon" />
23
+ </div>
24
+ {/if}
25
+
26
+ <Popover
27
+ class="absolute left-1/2 transform -translate-x-1/2 center-center"
28
+ style="max-width: calc(100% - {marginLeft}px)"
29
+ >
30
+ <div class="text-center truncate {bold ? '!font-bold' : 'font-normal'}">
31
+ {label}
32
+ </div>
33
+ <svelte:fragment slot="text">
34
+ <div>
35
+ <div>{label}</div>
36
+ {#if path != ''}<div>{path}</div>{/if}
37
+ </div>
38
+ </svelte:fragment>
39
+ </Popover>
40
+
41
+ <div class="flex items-center space-x-2 relative max-w-[25%]" bind:clientWidth={idBadgeWidth}>
42
+ {#if id && id !== 'preprocessor' && !id.startsWith('failure') && !id.startsWith('subflow:')}
43
+ <Badge
44
+ color="indigo"
45
+ wrapperClass="max-w-full"
46
+ baseClass="max-w-full truncate !px-1"
47
+ title={id}
48
+ >
49
+ <span class="max-w-full text-2xs truncate">{id}</span></Badge
50
+ >
51
+ {#if deletable}
52
+ <button
53
+ class="absolute -left-[28px] z-10 h-[20px] rounded-l rounded-t rounded-s w-[20px] trash center-center text-secondary bg-surface duration-150 hover:bg-blue-400 {editId
54
+ ? '!bg-blue-400'
55
+ : ''} hover:text-white
56
+ hover:border-blue-700 hover:!visible {hover ? '' : '!hidden'}"
57
+ on:click|preventDefault|stopPropagation={(event) => (editId = !editId)}
58
+ title="Edit Id"><Pencil size={14} /></button
59
+ >
60
+ {/if}
61
+ {:else if id?.startsWith('subflow:')}
62
+ <Badge color="blue" wrapperClass="max-w-full" baseClass="!px-1" title={id}>
63
+ <span class="max-w-full text-2xs truncate">{id.substring('subflow:'.length)}</span></Badge
64
+ >
65
+ {/if}
66
+ </div>
67
+ </div>
@@ -0,0 +1,24 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ label?: string | undefined;
5
+ path?: string | undefined;
6
+ id?: string | undefined;
7
+ deletable?: boolean | undefined;
8
+ bold?: boolean | undefined;
9
+ editId?: boolean | undefined;
10
+ hover?: boolean | undefined;
11
+ };
12
+ events: {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {
16
+ icon: {};
17
+ };
18
+ };
19
+ export type FlowModuleSchemaItemViewerProps = typeof __propDef.props;
20
+ export type FlowModuleSchemaItemViewerEvents = typeof __propDef.events;
21
+ export type FlowModuleSchemaItemViewerSlots = typeof __propDef.slots;
22
+ export default class FlowModuleSchemaItemViewer extends SvelteComponent<FlowModuleSchemaItemViewerProps, FlowModuleSchemaItemViewerEvents, FlowModuleSchemaItemViewerSlots> {
23
+ }
24
+ export {};