windmill-components 1.35.42 → 1.36.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 (245) hide show
  1. package/components/AppConnect.svelte +85 -59
  2. package/components/ArgInput.svelte +50 -33
  3. package/components/ArgInput.svelte.d.ts +1 -1
  4. package/components/Button.svelte +15 -48
  5. package/components/Button.svelte.d.ts +1 -1
  6. package/components/CronInput.svelte +1 -1
  7. package/components/DisplayResult.svelte +75 -67
  8. package/components/Dropdown.svelte +9 -7
  9. package/components/Editor.svelte +187 -178
  10. package/components/Editor.svelte.d.ts +4 -2
  11. package/components/EditorBar.svelte +135 -98
  12. package/components/EditorBar.svelte.d.ts +2 -1
  13. package/components/FlowBuilder.svelte +115 -134
  14. package/components/FlowJobResult.svelte +4 -5
  15. package/components/FlowModulesViewer.svelte +89 -7
  16. package/components/FlowModulesViewer.svelte.d.ts +1 -0
  17. package/components/FlowPreviewContent.svelte +88 -27
  18. package/components/FlowPreviewContent.svelte.d.ts +1 -1
  19. package/components/FlowStatusViewer.svelte +39 -24
  20. package/components/FlowStatusViewer.svelte.d.ts +0 -1
  21. package/components/FlowViewer.svelte +17 -11
  22. package/components/GroupModal.svelte +10 -1
  23. package/components/HighlightCode.svelte +22 -0
  24. package/components/HighlightCode.svelte.d.ts +17 -0
  25. package/components/IconedPath.svelte +9 -7
  26. package/components/InputTransformForm.svelte +97 -115
  27. package/components/InputTransformForm.svelte.d.ts +0 -1
  28. package/components/InputTransformsViewer.svelte +1 -1
  29. package/components/InviteGlobalUser.svelte +8 -8
  30. package/components/InviteUser.svelte +9 -9
  31. package/components/ItemPicker.svelte +37 -30
  32. package/components/ItemPicker.svelte.d.ts +2 -1
  33. package/components/JobStatus.svelte +2 -1
  34. package/components/LogViewer.svelte +23 -0
  35. package/components/LogViewer.svelte.d.ts +19 -0
  36. package/components/ModulePreview.svelte +107 -0
  37. package/components/ModulePreview.svelte.d.ts +24 -0
  38. package/components/Path.svelte +1 -1
  39. package/components/RadioButton.svelte +3 -2
  40. package/components/ResourceEditor.svelte +22 -34
  41. package/components/ResourceTypePicker.svelte +23 -34
  42. package/components/RunForm.svelte +34 -31
  43. package/components/RunForm.svelte.d.ts +6 -2
  44. package/components/SchemaEditor.svelte +19 -11
  45. package/components/SchemaForm.svelte +3 -3
  46. package/components/SchemaForm.svelte.d.ts +1 -1
  47. package/components/SchemaModal.svelte +18 -7
  48. package/components/ScriptBuilder.svelte +99 -83
  49. package/components/ScriptBuilder.svelte.d.ts +2 -4
  50. package/components/ScriptEditor.svelte +71 -143
  51. package/components/ScriptEditor.svelte.d.ts +0 -5
  52. package/components/ScriptPicker.svelte +24 -14
  53. package/components/ScriptPicker.svelte.d.ts +2 -1
  54. package/components/ScriptSchema.svelte +8 -11
  55. package/components/ScriptSchema.svelte.d.ts +0 -1
  56. package/components/ShareModal.svelte +6 -6
  57. package/components/SharedBadge.svelte +5 -13
  58. package/components/SimpleEditor.svelte +14 -10
  59. package/components/StringTypeNarrowing.svelte +24 -30
  60. package/components/TestJobLoader.svelte +106 -0
  61. package/components/TestJobLoader.svelte.d.ts +26 -0
  62. package/components/Tooltip.svelte +3 -2
  63. package/components/VariableEditor.svelte +15 -24
  64. package/components/common/actionRow/ActionRow.svelte +31 -0
  65. package/components/common/actionRow/ActionRow.svelte.d.ts +22 -0
  66. package/components/common/alert/Alert.svelte +53 -0
  67. package/components/common/alert/Alert.svelte.d.ts +20 -0
  68. package/components/common/alert/model.d.ts +1 -0
  69. package/components/common/alert/model.js +1 -0
  70. package/components/common/badge/Badge.svelte +76 -0
  71. package/components/common/badge/Badge.svelte.d.ts +28 -0
  72. package/components/common/badge/model.d.ts +8 -0
  73. package/components/common/badge/model.js +1 -0
  74. package/components/common/button/Button.svelte +110 -0
  75. package/components/common/button/Button.svelte.d.ts +39 -0
  76. package/components/common/button/model.d.ts +6 -0
  77. package/components/common/button/model.js +1 -0
  78. package/components/common/confirmationModal/ConfirmationModal.svelte +72 -0
  79. package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +23 -0
  80. package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +41 -0
  81. package/components/common/confirmationModal/UnsavedConfirmationModal.svelte.d.ts +14 -0
  82. package/components/common/confirmationModal/dirtyStore.d.ts +1 -0
  83. package/components/common/confirmationModal/dirtyStore.js +2 -0
  84. package/components/common/drawer/Drawer.svelte +3 -0
  85. package/components/common/drawer/Drawer.svelte.d.ts +2 -0
  86. package/components/common/index.d.ts +14 -0
  87. package/components/common/index.js +14 -0
  88. package/components/common/tabs/TabContent.svelte +3 -2
  89. package/components/common/tabs/TabContent.svelte.d.ts +1 -0
  90. package/components/common/tabs/Tabs.svelte +8 -1
  91. package/components/common/tabs/Tabs.svelte.d.ts +2 -0
  92. package/components/common/toggleButton/ToggleButton.svelte +20 -0
  93. package/components/common/toggleButton/ToggleButton.svelte.d.ts +19 -0
  94. package/components/common/toggleButton/ToggleButtonGroup.svelte +33 -0
  95. package/components/common/toggleButton/ToggleButtonGroup.svelte.d.ts +24 -0
  96. package/components/flows/FlowEditor.svelte +30 -0
  97. package/components/{FlowEditor.svelte.d.ts → flows/FlowEditor.svelte.d.ts} +1 -6
  98. package/components/flows/common/FlowCard.svelte +9 -0
  99. package/components/flows/common/FlowCard.svelte.d.ts +21 -0
  100. package/components/flows/common/FlowCardHeader.svelte +39 -0
  101. package/components/flows/common/FlowCardHeader.svelte.d.ts +20 -0
  102. package/components/flows/content/CopyFirstStepSchema.svelte +13 -0
  103. package/components/flows/{CopyFirstStepSchema.svelte.d.ts → content/CopyFirstStepSchema.svelte.d.ts} +0 -0
  104. package/components/flows/{DynamicInputHelpBox.svelte → content/DynamicInputHelpBox.svelte} +0 -0
  105. package/components/flows/{DynamicInputHelpBox.svelte.d.ts → content/DynamicInputHelpBox.svelte.d.ts} +0 -0
  106. package/components/flows/content/FlowEditorPanel.svelte +25 -0
  107. package/components/flows/content/FlowEditorPanel.svelte.d.ts +16 -0
  108. package/components/flows/content/FlowFailureModule.svelte +15 -0
  109. package/components/flows/content/FlowFailureModule.svelte.d.ts +14 -0
  110. package/components/flows/content/FlowInput.svelte +26 -0
  111. package/components/flows/{FlowInput.svelte.d.ts → content/FlowInput.svelte.d.ts} +0 -0
  112. package/components/flows/content/FlowInputs.svelte +91 -0
  113. package/components/flows/{FlowInputs.svelte.d.ts → content/FlowInputs.svelte.d.ts} +1 -0
  114. package/components/flows/content/FlowLoop.svelte +168 -0
  115. package/components/flows/content/FlowLoop.svelte.d.ts +18 -0
  116. package/components/flows/content/FlowLoopWrapper.svelte +9 -0
  117. package/components/flows/content/FlowLoopWrapper.svelte.d.ts +14 -0
  118. package/components/flows/content/FlowModule.svelte +211 -0
  119. package/components/flows/content/FlowModule.svelte.d.ts +29 -0
  120. package/components/flows/content/FlowModuleEarlyStop.svelte +76 -0
  121. package/components/flows/content/FlowModuleEarlyStop.svelte.d.ts +17 -0
  122. package/components/flows/content/FlowModuleHeader.svelte +157 -0
  123. package/components/flows/{FlowModuleHeader.svelte.d.ts → content/FlowModuleHeader.svelte.d.ts} +5 -3
  124. package/components/flows/content/FlowModuleScript.svelte +21 -0
  125. package/components/flows/content/FlowModuleScript.svelte.d.ts +17 -0
  126. package/components/flows/content/FlowModuleSuspend.svelte +27 -0
  127. package/components/flows/content/FlowModuleSuspend.svelte.d.ts +17 -0
  128. package/components/flows/content/FlowModuleWrapper.svelte +45 -0
  129. package/components/flows/content/FlowModuleWrapper.svelte.d.ts +14 -0
  130. package/components/flows/content/FlowRetries.svelte +80 -0
  131. package/components/flows/content/FlowRetries.svelte.d.ts +17 -0
  132. package/components/flows/content/FlowSchedules.svelte +18 -0
  133. package/components/flows/content/FlowSchedules.svelte.d.ts +14 -0
  134. package/components/flows/content/FlowSettings.svelte +78 -0
  135. package/components/flows/{FlowSettings.svelte.d.ts → content/FlowSettings.svelte.d.ts} +2 -6
  136. package/components/flows/content/RemoveStepConfirmationModal.svelte +32 -0
  137. package/components/flows/content/RemoveStepConfirmationModal.svelte.d.ts +19 -0
  138. package/components/flows/flowState.d.ts +8 -7
  139. package/components/flows/flowState.js +25 -46
  140. package/components/flows/flowStateUtils.d.ts +16 -14
  141. package/components/flows/flowStateUtils.js +81 -73
  142. package/components/flows/flowStore.js +7 -4
  143. package/components/flows/header/FlowImportExportMenu.svelte +55 -0
  144. package/components/flows/header/FlowImportExportMenu.svelte.d.ts +14 -0
  145. package/components/flows/header/FlowPreviewButtons.svelte +57 -0
  146. package/components/flows/header/FlowPreviewButtons.svelte.d.ts +14 -0
  147. package/components/flows/map/FlowErrorHandlerItem.svelte +60 -0
  148. package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +14 -0
  149. package/components/flows/map/FlowModuleSchemaItem.svelte +80 -0
  150. package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +32 -0
  151. package/components/flows/map/FlowModuleSchemaMap.svelte +241 -0
  152. package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +20 -0
  153. package/components/flows/pickers/PickHubScript.svelte +5 -3
  154. package/components/flows/pickers/PickHubScript.svelte.d.ts +2 -1
  155. package/components/flows/pickers/PickScript.svelte +4 -12
  156. package/components/flows/pickers/PickScript.svelte.d.ts +1 -1
  157. package/components/flows/propPicker/PropPickerWrapper.svelte +44 -0
  158. package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +33 -0
  159. package/components/flows/scheduleUtils.d.ts +0 -1
  160. package/components/flows/scheduleUtils.js +0 -1
  161. package/components/flows/types.d.ts +8 -0
  162. package/components/flows/types.js +1 -0
  163. package/components/flows/utils.d.ts +3 -1
  164. package/components/flows/utils.js +26 -10
  165. package/components/icons/AirtableIcon.svelte +1 -1
  166. package/components/icons/DiscordIcon.svelte +1 -1
  167. package/components/icons/GCloudIcon.svelte +1 -1
  168. package/components/icons/GItlabIcon.svelte +1 -1
  169. package/components/icons/GSheetsIcon.svelte +1 -1
  170. package/components/icons/GcalIcon.svelte +1 -1
  171. package/components/icons/GdriveIcon.svelte +1 -1
  172. package/components/icons/GithubIcon.svelte +1 -1
  173. package/components/icons/GmailIcon.svelte +1 -1
  174. package/components/icons/HatIcon.svelte +19 -0
  175. package/components/icons/HatIcon.svelte.d.ts +16 -0
  176. package/components/icons/MastodonIcon.svelte +1 -1
  177. package/components/icons/MatrixIcon.svelte +1 -1
  178. package/components/icons/PostgresIcon.svelte +1 -1
  179. package/components/icons/S3Icon.svelte +1 -1
  180. package/components/icons/Slack.svelte +1 -1
  181. package/components/icons/TogglIcon.svelte +8 -46
  182. package/components/jobs/JobDetail.svelte +1 -1
  183. package/components/landing/FlowGettingStarted.svelte +22 -68
  184. package/components/landing/FlowLandingBox.svelte +1 -1
  185. package/components/landing/RessourceGettingStarted.svelte +7 -37
  186. package/components/landing/ScriptBox.svelte +33 -60
  187. package/components/landing/ScriptGettingStarted.svelte +23 -69
  188. package/components/propertyPicker/ObjectViewer.svelte +18 -12
  189. package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
  190. package/components/propertyPicker/PropPicker.svelte +108 -11
  191. package/components/propertyPicker/WarningMessage.svelte +2 -15
  192. package/components/script_editor/LogPanel.svelte +108 -119
  193. package/components/script_editor/LogPanel.svelte.d.ts +2 -0
  194. package/components/sidebar/SidebarContent.svelte +2 -2
  195. package/editorUtils.d.ts +3 -0
  196. package/editorUtils.js +1 -0
  197. package/gen/core/OpenAPI.js +1 -1
  198. package/gen/index.d.ts +1 -0
  199. package/gen/models/CompletedJob.d.ts +2 -1
  200. package/gen/models/CompletedJob.js +1 -0
  201. package/gen/models/FlowModule.d.ts +3 -0
  202. package/gen/models/FlowStatus.d.ts +3 -0
  203. package/gen/models/FlowStatusModule.d.ts +1 -1
  204. package/gen/models/Preview.d.ts +2 -1
  205. package/gen/models/Preview.js +1 -0
  206. package/gen/models/QueuedJob.d.ts +2 -1
  207. package/gen/models/QueuedJob.js +1 -0
  208. package/gen/models/RawScript.d.ts +2 -1
  209. package/gen/models/RawScript.js +1 -0
  210. package/gen/models/Retry.d.ts +11 -0
  211. package/gen/models/Retry.js +4 -0
  212. package/gen/models/Script.d.ts +9 -2
  213. package/gen/models/Script.js +8 -0
  214. package/gen/services/JobService.d.ts +40 -0
  215. package/gen/services/JobService.js +70 -0
  216. package/gen/services/ScriptService.d.ts +14 -3
  217. package/gen/services/ScriptService.js +13 -0
  218. package/infer.d.ts +1 -1
  219. package/infer.js +6 -1
  220. package/package.json +71 -38
  221. package/script_helpers.d.ts +8 -2
  222. package/script_helpers.js +88 -16
  223. package/stores.d.ts +1 -1
  224. package/utils.d.ts +8 -6
  225. package/utils.js +57 -21
  226. package/components/FlowEditor.svelte +0 -55
  227. package/components/FlowPreview.svelte +0 -107
  228. package/components/FlowPreview.svelte.d.ts +0 -23
  229. package/components/ModuleStep.svelte +0 -131
  230. package/components/ModuleStep.svelte.d.ts +0 -25
  231. package/components/flows/CopyFirstStepSchema.svelte +0 -13
  232. package/components/flows/FlowBox.svelte +0 -16
  233. package/components/flows/FlowBox.svelte.d.ts +0 -23
  234. package/components/flows/FlowBoxHeader.svelte +0 -16
  235. package/components/flows/FlowBoxHeader.svelte.d.ts +0 -21
  236. package/components/flows/FlowInput.svelte +0 -22
  237. package/components/flows/FlowInputs.svelte +0 -65
  238. package/components/flows/FlowModuleHeader.svelte +0 -109
  239. package/components/flows/FlowSettings.svelte +0 -165
  240. package/components/flows/FlowTimeline.svelte +0 -169
  241. package/components/flows/FlowTimeline.svelte.d.ts +0 -21
  242. package/components/flows/stepOpenedStore.d.ts +0 -1
  243. package/components/flows/stepOpenedStore.js +0 -6
  244. package/components/propertyPicker/OverlayPropertyPicker.svelte +0 -69
  245. package/components/propertyPicker/OverlayPropertyPicker.svelte.d.ts +0 -24
@@ -0,0 +1,211 @@
1
+ <script context="module">export {};
2
+ </script>
3
+
4
+ <script>import { VSplitPane } from 'svelte-split-pane';
5
+ import Tab from '../../common/tabs/Tab.svelte';
6
+ import TabContent from '../../common/tabs/TabContent.svelte';
7
+ import Tabs from '../../common/tabs/Tabs.svelte';
8
+ import Editor from '../../Editor.svelte';
9
+ import EditorBar from '../../EditorBar.svelte';
10
+ import ModulePreview from '../../ModulePreview.svelte';
11
+ import FlowInputs from './FlowInputs.svelte';
12
+ import { createInlineScriptModule, createLoop, createScriptFromInlineScript, fork, getStepPropPicker, isEmptyFlowModule, pickScript } from '../flowStateUtils';
13
+ import { flowStore } from '../flowStore';
14
+ import SchemaForm from '../../SchemaForm.svelte';
15
+ import { RawScript } from '../../../gen';
16
+ import FlowCard from '../common/FlowCard.svelte';
17
+ import FlowModuleHeader from './FlowModuleHeader.svelte';
18
+ import { flowStateStore } from '../flowState';
19
+ import { scriptLangToEditorLang } from '../../../utils';
20
+ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
21
+ import { getContext, setContext } from 'svelte';
22
+ import { loadSchemaFromModule, selectedIdToIndexes } from '../utils';
23
+ import { writable } from 'svelte/store';
24
+ import FlowModuleScript from './FlowModuleScript.svelte';
25
+ import FlowModuleEarlyStop from './FlowModuleEarlyStop.svelte';
26
+ import FlowModuleSuspend from './FlowModuleSuspend.svelte';
27
+ import FlowRetries from './FlowRetries.svelte';
28
+ const { selectedId, select, previewArgs } = getContext('FlowEditorContext');
29
+ export let flowModule;
30
+ export let flowModuleState;
31
+ export let failureModule;
32
+ $: [parentIndex, childIndex] = selectedIdToIndexes($selectedId);
33
+ let editor;
34
+ let modulePreview;
35
+ let websocketAlive = { pyright: false, black: false, deno: false };
36
+ let selected = 'inputs';
37
+ $: shouldPick = isEmptyFlowModule(flowModule);
38
+ $: stepPropPicker = failureModule
39
+ ? { pickableProperties: { previous_result: { error: 'the error message' } }, extraLib: '' }
40
+ : getStepPropPicker([parentIndex, childIndex], $flowStore.schema, $flowStateStore, $previewArgs);
41
+ function onKeyDown(event) {
42
+ if ((event.ctrlKey || event.metaKey) && event.key == 'Enter') {
43
+ event.preventDefault();
44
+ selected = 'test';
45
+ modulePreview?.runTestWithStepArgs();
46
+ }
47
+ }
48
+ async function apply(fn, arg) {
49
+ const [module, moduleState] = await fn(arg);
50
+ if (JSON.stringify(flowModule) != JSON.stringify(module) ||
51
+ JSON.stringify(flowModuleState) != JSON.stringify(moduleState)) {
52
+ flowModule = module;
53
+ flowModuleState = moduleState;
54
+ }
55
+ }
56
+ async function reload(flowModule) {
57
+ const { input_transforms, schema } = await loadSchemaFromModule(flowModule);
58
+ flowModuleState.schema = schema;
59
+ flowModule.input_transforms = input_transforms;
60
+ }
61
+ async function applyCreateLoop() {
62
+ await apply(createLoop, null);
63
+ }
64
+ export const FLOW_MODULE_WIDTH_THRESHOLD = 768;
65
+ const width = writable(0);
66
+ setContext('FlowModuleWidth', {
67
+ width,
68
+ threshold: FLOW_MODULE_WIDTH_THRESHOLD
69
+ });
70
+ </script>
71
+
72
+ <svelte:window on:keydown={onKeyDown} />
73
+
74
+ <div class="flex flex-col h-full" bind:clientWidth={$width}>
75
+ <FlowCard bind:flowModule>
76
+ <svelte:fragment slot="header">
77
+ <FlowModuleHeader
78
+ bind:module={flowModule}
79
+ on:delete
80
+ on:toggleRetry={() => (selected = 'retries')}
81
+ on:toggleStopAfterIf={() => (selected = 'early-stop')}
82
+ on:fork={() => apply(fork, flowModule)}
83
+ on:createScriptFromInlineScript={() => {
84
+ apply(createScriptFromInlineScript, {
85
+ flowModule: flowModule,
86
+ suffix: $selectedId,
87
+ schema: flowModuleState.schema
88
+ })
89
+ }}
90
+ />
91
+ </svelte:fragment>
92
+ {#if shouldPick}
93
+ <FlowInputs
94
+ shouldDisableTriggerScripts={parentIndex != 0}
95
+ shouldDisableLoopCreation={childIndex !== undefined ||
96
+ parentIndex === 0 ||
97
+ $selectedId.includes('failure')}
98
+ on:loop={() => {
99
+ applyCreateLoop()
100
+ select(['loop', $selectedId].join('-'))
101
+ }}
102
+ on:pick={(e) => apply(pickScript, e.detail.path)}
103
+ on:new={(e) =>
104
+ apply(createInlineScriptModule, {
105
+ language: e.detail.language,
106
+ kind: e.detail.kind,
107
+ subkind: e.detail.subkind
108
+ })}
109
+ {failureModule}
110
+ />
111
+ {:else}
112
+ {#if flowModule.value.type === 'rawscript'}
113
+ <div class="flex-shrink-0 border-b p-1">
114
+ <EditorBar
115
+ {editor}
116
+ lang={flowModule.value['language'] ?? 'deno'}
117
+ {websocketAlive}
118
+ iconOnly={$width < FLOW_MODULE_WIDTH_THRESHOLD}
119
+ />
120
+ </div>
121
+ {/if}
122
+
123
+ <div class="overflow-hidden flex-grow">
124
+ <VSplitPane
125
+ topPanelSize={flowModule.value.type === 'rawscript' ? '50%' : '0%'}
126
+ downPanelSize={flowModule.value.type === 'rawscript' ? '50%' : '100%'}
127
+ minTopPaneSize="20%"
128
+ minDownPaneSize="20%"
129
+ >
130
+ <top slot="top">
131
+ {#if flowModule.value.type === 'rawscript'}
132
+ <div on:mouseleave={() => reload(flowModule)} class="h-full overflow-auto">
133
+ <Editor
134
+ bind:websocketAlive
135
+ bind:this={editor}
136
+ class="h-full px-2"
137
+ bind:code={flowModule.value.content}
138
+ deno={flowModule.value.language === RawScript.language.DENO}
139
+ lang={scriptLangToEditorLang(flowModule.value.language)}
140
+ automaticLayout={true}
141
+ cmdEnterAction={() => {
142
+ selected = 'test'
143
+ modulePreview?.runTestWithStepArgs()
144
+ }}
145
+ formatAction={() => reload(flowModule)}
146
+ />
147
+ </div>
148
+ {:else if flowModule.value.type === 'script'}
149
+ <FlowModuleScript {flowModule} />
150
+ {/if}
151
+ </top>
152
+
153
+ <down slot="down" class="flex flex-col flex-1 h-full">
154
+ <Tabs bind:selected>
155
+ <Tab value="inputs">Inputs</Tab>
156
+ <Tab value="test">Test</Tab>
157
+ <Tab value="retries">Retries</Tab>
158
+ {#if !$selectedId.includes('failure')}
159
+ <Tab value="early-stop">Early Stop</Tab>
160
+ <Tab value="suspend">Suspend</Tab>
161
+ {/if}
162
+
163
+ <svelte:fragment slot="content">
164
+ <div class="overflow-hidden bg-white" style="height:calc(100% - 32px);">
165
+ <TabContent value="inputs" class="flex flex-col flex-1 h-full">
166
+ <PropPickerWrapper pickableProperties={stepPropPicker.pickableProperties}>
167
+ <!-- <pre class="text-xs">{JSON.stringify($flowStateStore, null, 4)}</pre> -->
168
+ <SchemaForm
169
+ schema={flowModuleState.schema}
170
+ inputTransform={true}
171
+ importPath={$selectedId}
172
+ bind:args={flowModule.input_transforms}
173
+ bind:extraLib={stepPropPicker.extraLib}
174
+ />
175
+ </PropPickerWrapper>
176
+ </TabContent>
177
+ <TabContent value="test" class="flex flex-col flex-1 h-full" alwaysMounted={true}>
178
+ <ModulePreview
179
+ bind:this={modulePreview}
180
+ mod={flowModule}
181
+ schema={flowModuleState.schema}
182
+ indices={[parentIndex, childIndex]}
183
+ />
184
+ </TabContent>
185
+
186
+ <TabContent value="retries" class="flex flex-col flex-1 h-full">
187
+ <div class="p-4 overflow-y-auto">
188
+ <FlowRetries bind:flowModule />
189
+ </div>
190
+ </TabContent>
191
+
192
+ <TabContent value="early-stop" class="flex flex-col flex-1 h-full">
193
+ <div class="p-4 overflow-y-auto">
194
+ <FlowModuleEarlyStop bind:flowModule />
195
+ </div>
196
+ </TabContent>
197
+
198
+ <TabContent value="suspend" class="flex flex-col flex-1 h-full">
199
+ <div class="p-4 overflow-y-auto">
200
+ <FlowModuleSuspend bind:flowModule />
201
+ </div>
202
+ </TabContent>
203
+ </div>
204
+ </svelte:fragment>
205
+ </Tabs>
206
+ </down>
207
+ </VSplitPane>
208
+ </div>
209
+ {/if}
210
+ </FlowCard>
211
+ </div>
@@ -0,0 +1,29 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ export declare type FlowModuleWidthContext = {
3
+ width: Writable<number>;
4
+ threshold: number;
5
+ };
6
+ import { type FlowModule } from '../../../gen';
7
+ import { type FlowModuleState } from '../flowState';
8
+ import { type Writable } from 'svelte/store';
9
+ declare const __propDef: {
10
+ props: {
11
+ flowModule: FlowModule;
12
+ flowModuleState: FlowModuleState;
13
+ failureModule: boolean;
14
+ FLOW_MODULE_WIDTH_THRESHOLD?: 768 | undefined;
15
+ };
16
+ events: {
17
+ delete: CustomEvent<any>;
18
+ } & {
19
+ [evt: string]: CustomEvent<any>;
20
+ };
21
+ slots: {};
22
+ };
23
+ export declare type FlowModuleProps = typeof __propDef.props;
24
+ export declare type FlowModuleEvents = typeof __propDef.events;
25
+ export declare type FlowModuleSlots = typeof __propDef.slots;
26
+ export default class FlowModule extends SvelteComponentTyped<FlowModuleProps, FlowModuleEvents, FlowModuleSlots> {
27
+ get FLOW_MODULE_WIDTH_THRESHOLD(): number;
28
+ }
29
+ export {};
@@ -0,0 +1,76 @@
1
+ <script>import SimpleEditor from '../../SimpleEditor.svelte';
2
+ import Toggle from '../../Toggle.svelte';
3
+ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
4
+ import { getStepPropPicker } from '../flowStateUtils';
5
+ import { flowStore } from '../flowStore';
6
+ import { flowStateStore } from '../flowState';
7
+ import { getContext } from 'svelte';
8
+ import { selectedIdToIndexes } from '../utils';
9
+ const { selectedId, previewArgs } = getContext('FlowEditorContext');
10
+ export let flowModule;
11
+ let editor = undefined;
12
+ $: isStopAfterIfEnabled = Boolean(flowModule.stop_after_if);
13
+ let pickableProperties = {};
14
+ $: {
15
+ let indices = selectedIdToIndexes($selectedId);
16
+ if (indices[1]) {
17
+ indices[1] += 1;
18
+ }
19
+ else {
20
+ indices[0] += 1;
21
+ }
22
+ const props = getStepPropPicker(indices, $flowStore.schema, $flowStateStore, $previewArgs).pickableProperties;
23
+ props['result'] = props['previous_result'];
24
+ delete props['previous_result'];
25
+ props.step = props.step?.slice(0, props.step.length - 1);
26
+ pickableProperties = props;
27
+ }
28
+ </script>
29
+
30
+ <div class="flex flex-col items-start space-y-2">
31
+ <Toggle
32
+ checked={isStopAfterIfEnabled}
33
+ on:change={() => {
34
+ if (isStopAfterIfEnabled && flowModule.stop_after_if) {
35
+ flowModule.stop_after_if = undefined
36
+ } else {
37
+ flowModule.stop_after_if = {
38
+ expr: 'result == undefined',
39
+ skip_if_stopped: false
40
+ }
41
+ }
42
+ }}
43
+ options={{
44
+ right: 'Early stop if condition met'
45
+ }}
46
+ />
47
+
48
+ {#if flowModule.stop_after_if}
49
+ <span class="text-xs font-bold">Should skip if stopped</span>
50
+
51
+ <input type="checkbox" bind:checked={flowModule.stop_after_if.skip_if_stopped} />
52
+
53
+ <span class="text-xs font-bold">Stop condition expression</span>
54
+
55
+ <div class="border w-full">
56
+ <PropPickerWrapper
57
+ {pickableProperties}
58
+ on:select={({ detail }) => {
59
+ editor?.insertAtCursor(detail)
60
+ }}
61
+ >
62
+ <SimpleEditor
63
+ bind:this={editor}
64
+ lang="javascript"
65
+ bind:code={flowModule.stop_after_if.expr}
66
+ class="small-editor"
67
+ />
68
+ </PropPickerWrapper>
69
+ </div>
70
+ {:else}
71
+ <span class="text-xs font-bold">Should skip if stopped</span>
72
+ <input type="checkbox" disabled />
73
+ <span class="text-xs font-bold">Stop condition expression</span>
74
+ <textarea disabled rows="3" />
75
+ {/if}
76
+ </div>
@@ -0,0 +1,17 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { FlowModule } from '../../../gen';
3
+ declare const __propDef: {
4
+ props: {
5
+ flowModule: FlowModule;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export declare type FlowModuleEarlyStopProps = typeof __propDef.props;
13
+ export declare type FlowModuleEarlyStopEvents = typeof __propDef.events;
14
+ export declare type FlowModuleEarlyStopSlots = typeof __propDef.slots;
15
+ export default class FlowModuleEarlyStop extends SvelteComponentTyped<FlowModuleEarlyStopProps, FlowModuleEarlyStopEvents, FlowModuleEarlyStopSlots> {
16
+ }
17
+ export {};
@@ -0,0 +1,157 @@
1
+ <script>import Button from '../../common/button/Button.svelte';
2
+ import { isEmptyFlowModule } from '../flowStateUtils';
3
+ import { classNames } from '../../../utils';
4
+ import { faArrowRotateBack, faArrowRotateForward, faBed, faCodeBranch, faSave, faStop, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
5
+ import { createEventDispatcher, getContext } from 'svelte';
6
+ import Icon from 'svelte-awesome';
7
+ import RemoveStepConfirmationModal from './RemoveStepConfirmationModal.svelte';
8
+ export let module;
9
+ let confirmationModalOpen = false;
10
+ $: shouldPick = isEmptyFlowModule(module);
11
+ const dispatch = createEventDispatcher();
12
+ const { selectedId, select } = getContext('FlowEditorContext');
13
+ const { width, threshold } = getContext('FlowModuleWidth');
14
+ $: iconOnly = $width < threshold;
15
+ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
16
+ </script>
17
+
18
+ <div class="flex flex-row space-x-2">
19
+ {#if !shouldPick}
20
+ <span
21
+ class={classNames('badge', module.stop_after_if ? 'badge-on' : 'badge-off')}
22
+ on:click={() => dispatch('toggleStopAfterIf')}
23
+ >
24
+ <Icon data={faStop} scale={0.8} />
25
+ </span>
26
+ <span
27
+ class={classNames('badge', moduleRetry ? 'badge-on' : 'badge-off')}
28
+ on:click={() => dispatch('toggleRetry')}
29
+ >
30
+ <Icon data={faArrowRotateForward} scale={0.8} />
31
+ </span>
32
+ <span
33
+ class={classNames('badge', Boolean(module.suspend) ? 'badge-on' : 'badge-off')}
34
+ on:click={() => dispatch('toggleSuspend')}
35
+ >
36
+ <Icon data={faBed} scale={0.8} />
37
+ </span>
38
+ {/if}
39
+ {#if module.value.type === 'script' && !shouldPick}
40
+ <Button
41
+ size="xs"
42
+ color="light"
43
+ variant="border"
44
+ on:click={() => dispatch('fork')}
45
+ startIcon={{ icon: faCodeBranch }}
46
+ {iconOnly}
47
+ >
48
+ Fork
49
+ </Button>
50
+ {/if}
51
+
52
+ {#if module.value.type === 'rawscript' && !shouldPick}
53
+ <Button
54
+ size="xs"
55
+ color="light"
56
+ variant="border"
57
+ startIcon={{ icon: faSave }}
58
+ on:click={() => dispatch('createScriptFromInlineScript')}
59
+ {iconOnly}
60
+ >
61
+ Save to workspace
62
+ </Button>
63
+ {/if}
64
+ <Button
65
+ size="xs"
66
+ color="light"
67
+ variant="border"
68
+ startIcon={{ icon: faTrashAlt }}
69
+ {iconOnly}
70
+ on:click={(event) => {
71
+ if (event.shiftKey || shouldPick) {
72
+ dispatch('delete')
73
+ select('settings')
74
+ } else {
75
+ confirmationModalOpen = true
76
+ }
77
+ }}
78
+ >
79
+ {$selectedId.includes('failure') ? 'Delete error handler' : 'Remove step'}
80
+ </Button>
81
+ </div>
82
+
83
+ <RemoveStepConfirmationModal
84
+ bind:open={confirmationModalOpen}
85
+ on:confirmed={() => {
86
+ dispatch('delete')
87
+ setTimeout(() => {
88
+ select('settings')
89
+ })
90
+ }}
91
+ />
92
+
93
+ <style>
94
+ .badge {
95
+
96
+ display: flex;
97
+
98
+ cursor: pointer;
99
+
100
+ align-items: center;
101
+
102
+ white-space: nowrap;
103
+
104
+ border-radius: 0.25rem;
105
+
106
+ border-width: 1px;
107
+
108
+ padding-left: 0.625rem;
109
+
110
+ padding-right: 0.625rem;
111
+
112
+ padding-top: 0.125rem;
113
+
114
+ padding-bottom: 0.125rem;
115
+
116
+ font-size: 0.875rem;
117
+
118
+ line-height: 1.25rem;
119
+
120
+ font-weight: 500
121
+ }
122
+
123
+ .badge-on {
124
+
125
+ --tw-bg-opacity: 1;
126
+
127
+ background-color: rgb(225 239 254 / var(--tw-bg-opacity));
128
+
129
+ --tw-text-opacity: 1;
130
+
131
+ color: rgb(30 66 159 / var(--tw-text-opacity))
132
+ }
133
+
134
+ .badge-on:hover {
135
+
136
+ --tw-bg-opacity: 1;
137
+
138
+ background-color: rgb(195 221 253 / var(--tw-bg-opacity))
139
+ }
140
+
141
+ .badge-off {
142
+
143
+ --tw-bg-opacity: 1;
144
+
145
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
146
+
147
+ --tw-text-opacity: 1;
148
+
149
+ color: rgb(31 41 55 / var(--tw-text-opacity))
150
+ }
151
+
152
+ .badge-off:hover {
153
+
154
+ --tw-bg-opacity: 1;
155
+
156
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity))
157
+ }</style>
@@ -1,11 +1,13 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { FlowModule } from '../../gen';
2
+ import type { FlowModule } from '../../../gen';
3
3
  declare const __propDef: {
4
4
  props: {
5
- indexes: number[];
6
- mod: FlowModule;
5
+ module: FlowModule;
7
6
  };
8
7
  events: {
8
+ toggleStopAfterIf: CustomEvent<any>;
9
+ toggleRetry: CustomEvent<any>;
10
+ toggleSuspend: CustomEvent<any>;
9
11
  fork: CustomEvent<any>;
10
12
  createScriptFromInlineScript: CustomEvent<any>;
11
13
  delete: CustomEvent<any>;
@@ -0,0 +1,21 @@
1
+ <script>import HighlightCode from '../../HighlightCode.svelte';
2
+ import { getScriptByPath } from '../../../utils';
3
+ export let flowModule;
4
+ let code;
5
+ let language;
6
+ async function loadCode(module) {
7
+ if (module.value.type == 'script') {
8
+ const script = await getScriptByPath(module.value.path);
9
+ code = script.content;
10
+ language = script.language;
11
+ }
12
+ else {
13
+ throw Error('Not a script');
14
+ }
15
+ }
16
+ $: flowModule && loadCode(flowModule);
17
+ </script>
18
+
19
+ <div class="flex flex-col flex-1 h-full overflow-auto">
20
+ <HighlightCode {language} {code} />
21
+ </div>
@@ -0,0 +1,17 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { FlowModule } from '../../../gen';
3
+ declare const __propDef: {
4
+ props: {
5
+ flowModule: FlowModule;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export declare type FlowModuleScriptProps = typeof __propDef.props;
13
+ export declare type FlowModuleScriptEvents = typeof __propDef.events;
14
+ export declare type FlowModuleScriptSlots = typeof __propDef.slots;
15
+ export default class FlowModuleScript extends SvelteComponentTyped<FlowModuleScriptProps, FlowModuleScriptEvents, FlowModuleScriptSlots> {
16
+ }
17
+ export {};
@@ -0,0 +1,27 @@
1
+ <script>import Toggle from '../../Toggle.svelte';
2
+ export let flowModule;
3
+ $: isSuspendEnabled = Boolean(flowModule.suspend);
4
+ </script>
5
+
6
+ <Toggle
7
+ checked={isSuspendEnabled}
8
+ on:change={() => {
9
+ if (isSuspendEnabled && flowModule.suspend != undefined) {
10
+ flowModule.suspend = undefined
11
+ } else {
12
+ flowModule.suspend = 1
13
+ }
14
+ }}
15
+ options={{
16
+ right: 'Suspend flow execution until events received'
17
+ }}
18
+ />
19
+ <div>
20
+ <span class="text-xs font-bold">Number of events to wait for</span>
21
+
22
+ {#if flowModule.suspend}
23
+ <input bind:value={flowModule.suspend} type="number" min="1" placeholder="1" />
24
+ {:else}
25
+ <input type="number" disabled />
26
+ {/if}
27
+ </div>
@@ -0,0 +1,17 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { FlowModule } from '../../../gen';
3
+ declare const __propDef: {
4
+ props: {
5
+ flowModule: FlowModule;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export declare type FlowModuleSuspendProps = typeof __propDef.props;
13
+ export declare type FlowModuleSuspendEvents = typeof __propDef.events;
14
+ export declare type FlowModuleSuspendSlots = typeof __propDef.slots;
15
+ export default class FlowModuleSuspend extends SvelteComponentTyped<FlowModuleSuspendProps, FlowModuleSuspendEvents, FlowModuleSuspendSlots> {
16
+ }
17
+ export {};
@@ -0,0 +1,45 @@
1
+ <script>import { getContext } from 'svelte';
2
+ import { flowStateStore } from '../flowState';
3
+ import { flowStore } from '../flowStore';
4
+ import { selectedIdToIndexes } from '../utils';
5
+ import FlowModule from './FlowModule.svelte';
6
+ const { selectedId } = getContext('FlowEditorContext');
7
+ $: [parentIndex, childIndex] = selectedIdToIndexes($selectedId);
8
+ </script>
9
+
10
+ {#if childIndex != undefined}
11
+ {#each [$flowStore.value.modules[parentIndex].value] as mod, index (index)}
12
+ {#each [$flowStateStore.modules[parentIndex].childFlowModules] as state}
13
+ {#if mod.type == 'forloopflow' && state != undefined}
14
+ <FlowModule
15
+ failureModule={false}
16
+ bind:flowModule={mod.modules[childIndex]}
17
+ bind:flowModuleState={state[childIndex]}
18
+ on:delete={() => {
19
+ $flowStateStore.modules[parentIndex].childFlowModules?.splice(childIndex, 1)
20
+ let mod = $flowStore.value.modules[parentIndex].value
21
+ if (mod.type === 'forloopflow') {
22
+ mod.modules.splice(childIndex, 1)
23
+ } else {
24
+ throw new Error('Expected forloop')
25
+ }
26
+ }}
27
+ />
28
+ {:else}
29
+ <span>Incorrect state</span>
30
+ {/if}
31
+ {/each}
32
+ {/each}
33
+ {:else if $flowStore.value.modules[parentIndex]}
34
+ <FlowModule
35
+ failureModule={false}
36
+ bind:flowModule={$flowStore.value.modules[parentIndex]}
37
+ bind:flowModuleState={$flowStateStore.modules[parentIndex]}
38
+ on:delete={() => {
39
+ $flowStateStore.modules.splice(parentIndex, 1)
40
+ $flowStateStore = $flowStateStore
41
+ $flowStore.value.modules.splice(parentIndex, 1)
42
+ $flowStore = $flowStore
43
+ }}
44
+ />
45
+ {/if}
@@ -0,0 +1,14 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {};
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export declare type FlowModuleWrapperProps = typeof __propDef.props;
10
+ export declare type FlowModuleWrapperEvents = typeof __propDef.events;
11
+ export declare type FlowModuleWrapperSlots = typeof __propDef.slots;
12
+ export default class FlowModuleWrapper extends SvelteComponentTyped<FlowModuleWrapperProps, FlowModuleWrapperEvents, FlowModuleWrapperSlots> {
13
+ }
14
+ export {};