windmill-components 1.339.2 → 1.352.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/package/assets/app.css +0 -12
  2. package/package/ata/index.js +1 -0
  3. package/package/autosize.js +1 -1
  4. package/package/common.d.ts +6 -2
  5. package/package/common.js +2 -1
  6. package/package/components/AppConnectDrawer.svelte +1 -1
  7. package/package/components/AppConnectInner.svelte +9 -15
  8. package/package/components/ArgEnum.svelte +4 -1
  9. package/package/components/ArgEnum.svelte.d.ts +3 -1
  10. package/package/components/ArgInput.svelte +184 -141
  11. package/package/components/ArgInput.svelte.d.ts +7 -7
  12. package/package/components/ArrayTypeNarrowing.svelte +29 -27
  13. package/package/components/CenteredPage.svelte +2 -2
  14. package/package/components/DefaultTagsInner.svelte +1 -1
  15. package/package/components/Dev.svelte +2 -1
  16. package/package/components/DiffDrawer.svelte +1 -2
  17. package/package/components/DisplayResult.svelte +293 -233
  18. package/package/components/DurationMs.svelte +11 -3
  19. package/package/components/DurationMs.svelte.d.ts +2 -0
  20. package/package/components/EditableSchemaForm.svelte +447 -103
  21. package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
  22. package/package/components/Editor.svelte +3 -1
  23. package/package/components/EditorBar.svelte +2 -2
  24. package/package/components/FlowBuilder.svelte +14 -6
  25. package/package/components/FlowGraphViewer.svelte +1 -1
  26. package/package/components/FlowGraphViewerStep.svelte +37 -9
  27. package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
  28. package/package/components/FlowJobResult.svelte +1 -3
  29. package/package/components/FlowMetadata.svelte +1 -1
  30. package/package/components/FlowPreviewContent.svelte +5 -3
  31. package/package/components/FlowStatusViewer.svelte +4 -0
  32. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  33. package/package/components/FlowStatusViewerInner.svelte +50 -17
  34. package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
  35. package/package/components/FlowTimeline.svelte +13 -0
  36. package/package/components/FlowTimeline.svelte.d.ts +2 -0
  37. package/package/components/FlowViewer.svelte +0 -5
  38. package/package/components/FolderEditor.svelte +25 -0
  39. package/package/components/FolderEditor.svelte.d.ts +2 -0
  40. package/package/components/GroupEditor.svelte +36 -91
  41. package/package/components/GroupInfo.svelte +1 -1
  42. package/package/components/InputTransformForm.svelte +16 -1
  43. package/package/components/InputTransformForm.svelte.d.ts +2 -0
  44. package/package/components/InputTransformSchemaForm.svelte +6 -0
  45. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  46. package/package/components/InstanceSettings.svelte +36 -3
  47. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  48. package/package/components/JobStatus.svelte +2 -2
  49. package/package/components/LightweightArgInput.svelte +66 -14
  50. package/package/components/LightweightArgInput.svelte.d.ts +3 -2
  51. package/package/components/LightweightSchemaForm.svelte +24 -15
  52. package/package/components/ModulePreviewForm.svelte +1 -0
  53. package/package/components/NumberTypeNarrowing.svelte +71 -44
  54. package/package/components/ObjectResourceInput.svelte +2 -0
  55. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  56. package/package/components/ObjectTypeNarrowing.svelte +0 -1
  57. package/package/components/ParqetCsvTableRenderer.svelte +181 -0
  58. package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
  59. package/package/components/Path.svelte +2 -2
  60. package/package/components/PersistentScriptDrawer.svelte +6 -3
  61. package/package/components/Range.svelte +88 -286
  62. package/package/components/Range.svelte.d.ts +9 -23
  63. package/package/components/ResourceEditor.svelte +138 -141
  64. package/package/components/ResourceEditor.svelte.d.ts +9 -2
  65. package/package/components/ResourceEditorDrawer.svelte +45 -0
  66. package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
  67. package/package/components/ResourcePicker.svelte +5 -2
  68. package/package/components/ResourceTypePicker.svelte +88 -36
  69. package/package/components/RunChart.svelte +55 -5
  70. package/package/components/RunChart.svelte.d.ts +1 -0
  71. package/package/components/RunForm.svelte +1 -1
  72. package/package/components/S3FilePicker.svelte +20 -8
  73. package/package/components/S3FilePicker.svelte.d.ts +2 -0
  74. package/package/components/ScheduleEditorInner.svelte +40 -37
  75. package/package/components/SchemaForm.svelte +192 -103
  76. package/package/components/SchemaForm.svelte.d.ts +16 -2
  77. package/package/components/ScriptBuilder.svelte +13 -8
  78. package/package/components/ScriptSchedules.svelte +11 -8
  79. package/package/components/ScriptSchema.svelte +3 -21
  80. package/package/components/ScriptVersionHistory.svelte +1 -1
  81. package/package/components/StringTypeNarrowing.svelte +217 -174
  82. package/package/components/StringTypeNarrowing.svelte.d.ts +5 -1
  83. package/package/components/Toggle.svelte +6 -3
  84. package/package/components/Toggle.svelte.d.ts +1 -0
  85. package/package/components/UserSettings.svelte +24 -1
  86. package/package/components/WorkspaceGroup.svelte +11 -13
  87. package/package/components/apps/components/buttons/AppButton.svelte +2 -0
  88. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  89. package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
  90. package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
  91. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +21 -8
  92. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
  93. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +19 -7
  94. package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
  95. package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
  96. package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
  97. package/package/components/apps/components/display/charts/AppAgCharts.svelte +25 -15
  98. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +2 -0
  99. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +1 -1
  100. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
  101. package/package/components/apps/components/helpers/RunnableComponent.svelte +18 -8
  102. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
  103. package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -0
  104. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  105. package/package/components/apps/components/helpers/eval.js +1 -36
  106. package/package/components/apps/components/inputs/AppFileInput.svelte +3 -1
  107. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  108. package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
  109. package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
  110. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +3 -1
  111. package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
  112. package/package/components/apps/components/layout/AppStepper.svelte +5 -1
  113. package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
  114. package/package/components/apps/components/layout/AppTabs.svelte +3 -1
  115. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  116. package/package/components/apps/editor/AppEditorHeader.svelte +6 -7
  117. package/package/components/apps/editor/SettingsPanel.svelte +13 -3
  118. package/package/components/apps/editor/component/Component.svelte +8 -16
  119. package/package/components/apps/editor/component/components.d.ts +11 -2
  120. package/package/components/apps/editor/component/components.js +2 -1
  121. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
  122. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
  123. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -41
  124. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
  125. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
  126. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
  127. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
  128. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +21 -45
  129. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -23
  130. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +5 -1
  131. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
  132. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
  133. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +7 -1
  134. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
  135. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
  136. package/package/components/build_workers.js +13 -11
  137. package/package/components/common/button/ButtonDropdown.svelte +1 -0
  138. package/package/components/common/drawer/Disposable.svelte +3 -2
  139. package/package/components/common/drawer/Disposable.svelte.d.ts +1 -0
  140. package/package/components/common/drawer/Drawer.svelte +12 -2
  141. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  142. package/package/components/common/fileDownload/FileDownload.svelte +4 -2
  143. package/package/components/common/fileUpload/FileUpload.svelte +4 -3
  144. package/package/components/common/modal/Modal.svelte +4 -1
  145. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  146. package/package/components/common/popup/Popup.svelte +1 -1
  147. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
  148. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  149. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
  150. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
  151. package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
  152. package/package/components/flows/content/FlowInput.svelte +63 -53
  153. package/package/components/flows/content/FlowModuleComponent.svelte +26 -3
  154. package/package/components/flows/content/FlowModuleScript.svelte +40 -1
  155. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  156. package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
  157. package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
  158. package/package/components/flows/content/FlowSchedules.svelte +11 -8
  159. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -4
  160. package/package/components/flows/flowStateUtils.js +4 -1
  161. package/package/components/flows/map/FlowModuleSchemaItem.svelte +16 -1
  162. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
  163. package/package/components/flows/types.d.ts +4 -0
  164. package/package/components/flows/utils.d.ts +5 -1
  165. package/package/components/flows/utils.js +36 -0
  166. package/package/components/graph/FlowGraph.svelte +5 -2
  167. package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
  168. package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
  169. package/package/components/graph/svelvet/container/models/index.js +1 -1
  170. package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
  171. package/package/components/graph/util.d.ts +1 -37
  172. package/package/components/graph/util.js +0 -34
  173. package/package/components/instanceSettings.js +2 -1
  174. package/package/components/jobs/JobPreview.svelte +1 -1
  175. package/package/components/multiselect/MultiSelect.svelte +4 -3
  176. package/package/components/multiselect/MultiSelect.svelte.d.ts +1 -0
  177. package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
  178. package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
  179. package/package/components/propertyPicker/ObjectViewer.svelte +6 -2
  180. package/package/components/runs/JobPreview.svelte +5 -1
  181. package/package/components/runs/RunRow.svelte +22 -3
  182. package/package/components/runs/RunRow.svelte.d.ts +2 -1
  183. package/package/components/runs/RunsTable.svelte +22 -9
  184. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  185. package/package/components/schema/AddProperty.svelte +149 -0
  186. package/package/components/schema/AddProperty.svelte.d.ts +23 -0
  187. package/package/components/schema/AddPropertyForm.svelte +33 -0
  188. package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
  189. package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
  190. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
  191. package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
  192. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
  193. package/package/components/schema/FlowPropertyEditor.svelte +393 -0
  194. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
  195. package/package/components/schema/PropertyEditor.svelte +185 -0
  196. package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
  197. package/package/components/schema/SchemaFormDND.svelte +75 -0
  198. package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
  199. package/package/components/table/AutoDataTable.svelte +90 -104
  200. package/package/components/table/Cell.svelte +4 -1
  201. package/package/components/table/Cell.svelte.d.ts +1 -0
  202. package/package/components/table/DownloadCsv.svelte +30 -0
  203. package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
  204. package/package/components/table/tableUtils.d.ts +8 -0
  205. package/package/components/table/tableUtils.js +37 -0
  206. package/package/consts.js +3 -1
  207. package/package/deno_fetch.d.ts.txt +6 -0
  208. package/package/gen/core/OpenAPI.js +1 -1
  209. package/package/gen/schemas.gen.d.ts +76 -0
  210. package/package/gen/schemas.gen.js +76 -0
  211. package/package/gen/services.gen.d.ts +100 -5
  212. package/package/gen/services.gen.js +216 -16
  213. package/package/gen/types.gen.d.ts +378 -5
  214. package/package/inferArgSig.d.ts +10 -0
  215. package/package/inferArgSig.js +59 -2
  216. package/package/scripts.d.ts +2 -0
  217. package/package/scripts.js +6 -3
  218. package/package/utils.d.ts +4 -3
  219. package/package/utils.js +9 -4
  220. package/package/workspace_settings.d.ts +15 -0
  221. package/package/workspace_settings.js +81 -0
  222. package/package.json +17 -7
  223. package/package/components/ParqetTableRenderer.svelte +0 -117
  224. package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
  225. package/package/components/PropertyRow.svelte +0 -88
  226. package/package/components/PropertyRow.svelte.d.ts +0 -23
  227. package/package/components/SchemaEditor.svelte +0 -346
  228. package/package/components/SchemaEditor.svelte.d.ts +0 -25
  229. package/package/components/SchemaModal.svelte +0 -443
  230. package/package/components/SchemaModal.svelte.d.ts +0 -33
  231. package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
  232. package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
@@ -1,12 +1,13 @@
1
- <script>import { getContext } from 'svelte';
1
+ <script>import { getContext, onMount } from 'svelte';
2
2
  import FlowModuleWrapper from './FlowModuleWrapper.svelte';
3
3
  import FlowSettings from './FlowSettings.svelte';
4
4
  import FlowInput from './FlowInput.svelte';
5
5
  import FlowFailureModule from './FlowFailureModule.svelte';
6
6
  import FlowConstants from './FlowConstants.svelte';
7
+ import { initRequiredInputFilled } from '../utils';
7
8
  export let noEditor = false;
8
9
  export let enableAi = false;
9
- const { selectedId, flowStore } = getContext('FlowEditorContext');
10
+ const { selectedId, flowStore, flowStateStore, flowInputsStore } = getContext('FlowEditorContext');
10
11
  function checkDup(modules) {
11
12
  let seenModules = [];
12
13
  for (const m of modules) {
@@ -17,6 +18,19 @@ function checkDup(modules) {
17
18
  seenModules.push(m.id);
18
19
  }
19
20
  }
21
+ onMount(() => {
22
+ $flowStore?.value?.modules?.forEach((module) => {
23
+ if (!module) {
24
+ return;
25
+ }
26
+ if (!$flowStateStore) {
27
+ $flowInputsStore = {};
28
+ }
29
+ $flowInputsStore[module?.id] = {
30
+ requiredInputsFilled: initRequiredInputFilled(module.value, $flowStateStore?.[module?.id]?.schema ?? {})
31
+ };
32
+ });
33
+ });
20
34
  </script>
21
35
 
22
36
  {#if $selectedId?.startsWith('settings')}
@@ -1,5 +1,4 @@
1
1
  <script>import { Button, DrawerContent } from '../../common';
2
- import SchemaEditor from '../../SchemaEditor.svelte';
3
2
  import { getContext } from 'svelte';
4
3
  import FlowCard from '../common/FlowCard.svelte';
5
4
  import { copyFirstStepSchema } from '../flowStore';
@@ -10,12 +9,14 @@ import { convert } from '@redocly/json-to-json-schema';
10
9
  import { sendUserToast } from '../../../toast';
11
10
  import SavedInputs from '../../SavedInputs.svelte';
12
11
  import EditableSchemaForm from '../../EditableSchemaForm.svelte';
12
+ import AddProperty from '../../schema/AddProperty.svelte';
13
13
  export let noEditor;
14
14
  const { flowStore, flowStateStore, previewArgs, initialPath } = getContext('FlowEditorContext');
15
15
  let capturePayload;
16
16
  let inputLibraryDrawer;
17
17
  let jsonPayload;
18
18
  let pendingJson;
19
+ let addProperty = undefined;
19
20
  function importJson() {
20
21
  const parsed = JSON.parse(pendingJson);
21
22
  if (!parsed) {
@@ -25,64 +26,73 @@ function importJson() {
25
26
  $flowStore.schema = { required: [], properties: {}, ...convert(parsed) };
26
27
  jsonPayload.closeDrawer();
27
28
  }
29
+ const yOffset = 191;
28
30
  </script>
29
31
 
30
32
  <CapturePayload bind:this={capturePayload} />
33
+
31
34
  <FlowCard {noEditor} title="Flow Input">
32
- <div class="p-6">
33
- <div class="flex flex-row items-center gap-2 pb-2 border-b border-gray-400">
34
- <div>Copy input's schema from</div>
35
- <Button
36
- color="dark"
37
- size="xs"
38
- on:click={() => {
39
- capturePayload.openDrawer()
40
- }}
41
- >
42
- A request
43
- </Button>
44
- <Button
45
- color="dark"
46
- size="xs"
47
- on:click={() => {
48
- jsonPayload.openDrawer()
49
- }}
50
- >
51
- A JSON
52
- </Button>
53
- <Button
54
- color="dark"
55
- size="xs"
56
- on:click={() => {
57
- inputLibraryDrawer.openDrawer()
58
- }}
59
- >
60
- Past Runs/Input library
61
- </Button>
62
- <Button
63
- color="dark"
64
- size="xs"
65
- disabled={$flowStore.value.modules.length === 0 ||
66
- $flowStore.value.modules[0].value.type == 'identity'}
67
- on:click={() => copyFirstStepSchema($flowStateStore, flowStore)}
68
- >
69
- First step's inputs
70
- </Button>
71
- </div>
72
- <div class="pt-6">
73
- <SchemaEditor
74
- isFlowInput
75
- bind:schema={$flowStore.schema}
76
- on:change={() => {
77
- $flowStore = $flowStore
78
- }}
79
- />
80
- </div>
35
+ <div class="flex flex-row items-center gap-2 px-4 py-2 border-b">
36
+ <div>Copy input's schema from</div>
37
+ <Button
38
+ color="dark"
39
+ size="xs"
40
+ on:click={() => {
41
+ capturePayload.openDrawer()
42
+ }}
43
+ >
44
+ A request
45
+ </Button>
46
+ <Button
47
+ color="dark"
48
+ size="xs"
49
+ on:click={() => {
50
+ jsonPayload.openDrawer()
51
+ }}
52
+ >
53
+ A JSON
54
+ </Button>
55
+ <Button
56
+ color="dark"
57
+ size="xs"
58
+ on:click={() => {
59
+ inputLibraryDrawer.openDrawer()
60
+ }}
61
+ >
62
+ Past Runs/Input library
63
+ </Button>
64
+ <Button
65
+ color="dark"
66
+ size="xs"
67
+ disabled={$flowStore.value.modules.length === 0 ||
68
+ $flowStore.value.modules[0].value.type == 'identity'}
69
+ on:click={() => copyFirstStepSchema($flowStateStore, flowStore)}
70
+ >
71
+ First step's inputs
72
+ </Button>
81
73
  </div>
82
- <div class="p-6">
83
- <h2 class="mb-4">Customize Flow Inputs</h2>
84
- <EditableSchemaForm bind:schema={$flowStore.schema} />
74
+ <div class="p-4 border-b">
75
+ <AddProperty
76
+ bind:schema={$flowStore.schema}
77
+ bind:this={addProperty}
78
+ on:change={() => {
79
+ $flowStore = $flowStore
80
+ }}
81
+ />
85
82
  </div>
83
+
84
+ <EditableSchemaForm
85
+ bind:schema={$flowStore.schema}
86
+ isFlowInput
87
+ on:edit={(e) => {
88
+ addProperty?.openDrawer(e.detail)
89
+ }}
90
+ on:delete={(e) => {
91
+ addProperty?.handleDeleteArgument([e.detail])
92
+ }}
93
+ offset={yOffset}
94
+ displayWebhookWarning
95
+ />
86
96
  </FlowCard>
87
97
 
88
98
  <Drawer bind:this={jsonPayload} size="800px">
@@ -39,7 +39,8 @@ import Label from '../../Label.svelte';
39
39
  import { enterpriseLicense } from '../../../stores';
40
40
  import { isCloudHosted } from '../../../cloud';
41
41
  import { loadSchemaFromModule } from '../flowInfers';
42
- const { selectedId, previewArgs, flowStateStore, flowStore, pathStore, saveDraft } = getContext('FlowEditorContext');
42
+ import { initRequiredInputFilled, setRequiredInputFilled } from '../utils';
43
+ const { selectedId, previewArgs, flowStateStore, flowStore, pathStore, saveDraft, flowInputsStore } = getContext('FlowEditorContext');
43
44
  export let flowModule;
44
45
  export let failureModule = false;
45
46
  export let parentModule = undefined;
@@ -110,6 +111,11 @@ async function reload(flowModule) {
110
111
  validCode = true;
111
112
  if (inputTransformSchemaForm) {
112
113
  inputTransformSchemaForm.setArgs(input_transforms);
114
+ if (!deepEqual(schema, $flowStateStore[flowModule.id]?.schema)) {
115
+ $flowInputsStore[flowModule?.id] = {
116
+ requiredInputsFilled: initRequiredInputFilled(flowModule.value, schema ?? {})
117
+ };
118
+ }
113
119
  }
114
120
  else {
115
121
  if (flowModule.value.type == 'rawscript' ||
@@ -150,6 +156,15 @@ afterUpdate(() => {
150
156
  let forceReload = 0;
151
157
  let editorPanelSize = noEditor ? 0 : flowModule.value.type == 'script' ? 30 : 50;
152
158
  let editorSettingsPanelSize = 100 - editorPanelSize;
159
+ function setFlowInput(argName) {
160
+ if ($flowInputsStore && $flowInputsStore?.[flowModule.id] === undefined) {
161
+ $flowInputsStore[flowModule.id] = {};
162
+ }
163
+ if ($flowInputsStore) {
164
+ const requiredInputsFilled = setRequiredInputFilled(argName, flowModule.value, $flowInputsStore[flowModule.id].requiredInputsFilled ?? {}, $flowStateStore[$selectedId]?.schema);
165
+ $flowInputsStore[flowModule.id].requiredInputsFilled = requiredInputsFilled;
166
+ }
167
+ }
153
168
  </script>
154
169
 
155
170
  <svelte:window on:keydown={onKeyDown} />
@@ -234,7 +249,7 @@ let editorSettingsPanelSize = 100 - editorPanelSize;
234
249
  {#key flowModule.id}
235
250
  <Editor
236
251
  folding
237
- path={flowModule.value.path}
252
+ path={$pathStore + '/' + flowModule.id}
238
253
  bind:websocketAlive
239
254
  bind:this={editor}
240
255
  class="h-full relative"
@@ -283,7 +298,11 @@ let editorSettingsPanelSize = 100 - editorPanelSize;
283
298
  {#if !noEditor}
284
299
  <div class="border-t">
285
300
  {#key forceReload}
286
- <FlowModuleScript path={flowModule.value.path} hash={flowModule.value.hash} />
301
+ <FlowModuleScript
302
+ showAllCode={false}
303
+ path={flowModule.value.path}
304
+ hash={flowModule.value.hash}
305
+ />
287
306
  {/key}
288
307
  </div>
289
308
  {/if}
@@ -314,6 +333,10 @@ let editorSettingsPanelSize = 100 - editorPanelSize;
314
333
  bind:args={flowModule.value.input_transforms}
315
334
  extraLib={stepPropPicker.extraLib}
316
335
  {enableAi}
336
+ on:changeArg={(e) => {
337
+ const { argName } = e.detail
338
+ setFlowInput(argName)
339
+ }}
317
340
  />
318
341
  </PropPickerWrapper>
319
342
  </div>
@@ -1,11 +1,16 @@
1
1
  <script>import HighlightCode from '../../HighlightCode.svelte';
2
+ import TimeAgo from '../../TimeAgo.svelte';
2
3
  import { ScriptService } from '../../../gen';
3
4
  import { getScriptByPath } from '../../../scripts';
4
5
  import { workspaceStore } from '../../../stores';
5
6
  export let path;
6
7
  export let hash = undefined;
8
+ export let showDate = false;
9
+ export let showAllCode = true;
7
10
  let code;
8
11
  let language;
12
+ let lock = undefined;
13
+ let date = undefined;
9
14
  let notFound = false;
10
15
  async function loadCode(path, hash) {
11
16
  try {
@@ -15,6 +20,8 @@ async function loadCode(path, hash) {
15
20
  : await getScriptByPath(path);
16
21
  code = script.content;
17
22
  language = script.language;
23
+ lock = script.lock;
24
+ date = script.created_at;
18
25
  }
19
26
  catch (e) {
20
27
  notFound = true;
@@ -22,12 +29,44 @@ async function loadCode(path, hash) {
22
29
  }
23
30
  }
24
31
  $: path && loadCode(path, hash);
32
+ function toggleShowAll() {
33
+ showAllCode = !showAllCode;
34
+ }
25
35
  </script>
26
36
 
27
37
  <div class="flex flex-col flex-1 h-full overflow-auto p-2">
38
+ {#if showDate && date}
39
+ <span class="text-xs text-tertiary mb-4"><TimeAgo {date} /></span>
40
+ {/if}
28
41
  {#if notFound}
29
42
  <div class="text-red-400">script not found at {path} in workspace {$workspaceStore}</div>
30
- {:else}
43
+ {:else if showAllCode}
31
44
  <HighlightCode {language} {code} />
45
+ {:else}
46
+ <div class="code-container h-full">
47
+ <HighlightCode {language} code={code?.split('\n').slice(0, 10).join('\n')} />
48
+ </div>
49
+ <button on:click={toggleShowAll}>Show all</button>
50
+ {/if}
51
+
52
+ {#if lock}
53
+ <h3 class="mb-2 mt-6">Lock</h3>
54
+ <pre class="bg-surface-secondary text-xs p-2 overflow-auto w-full">{lock}</pre>
32
55
  {/if}
33
56
  </div>
57
+
58
+ <style>
59
+ .code-container {
60
+ position: relative;
61
+ overflow: hidden;
62
+ }
63
+ .code-container::after {
64
+ content: '';
65
+ position: absolute;
66
+ bottom: 0;
67
+ left: 0;
68
+ right: 0;
69
+ height: 100px;
70
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgb(var(--color-surface)));
71
+ pointer-events: none;
72
+ }</style>
@@ -3,6 +3,8 @@ declare const __propDef: {
3
3
  props: {
4
4
  path: string;
5
5
  hash?: string | undefined;
6
+ showDate?: boolean | undefined;
7
+ showAllCode?: boolean | undefined;
6
8
  };
7
9
  events: {
8
10
  [evt: string]: CustomEvent<any>;
@@ -1,8 +1,7 @@
1
- <script>import SchemaEditor from '../../SchemaEditor.svelte';
2
- import Toggle from '../../Toggle.svelte';
1
+ <script>import Toggle from '../../Toggle.svelte';
3
2
  import Tooltip from '../../Tooltip.svelte';
4
3
  import InputTransformForm from '../../InputTransformForm.svelte';
5
- import { getContext } from 'svelte';
4
+ import { getContext, tick } from 'svelte';
6
5
  import { Alert, Tab, Tabs } from '../../common';
7
6
  import { GroupService } from '../../../gen';
8
7
  import { emptySchema, emptyString } from '../../../utils';
@@ -12,6 +11,8 @@ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
12
11
  import Section from '../../Section.svelte';
13
12
  import Label from '../../Label.svelte';
14
13
  import SuspendDrawer from './SuspendDrawer.svelte';
14
+ import EditableSchemaDrawer from '../../schema/EditableSchemaDrawer.svelte';
15
+ import AddProperty from '../../schema/AddProperty.svelte';
15
16
  const { selectedId, flowStateStore } = getContext('FlowEditorContext');
16
17
  const result = $flowStateStore[$selectedId]?.previewResult ?? {};
17
18
  let editor = undefined;
@@ -36,39 +37,40 @@ $: {
36
37
  loadGroups();
37
38
  }
38
39
  }
40
+ let jsonView = false;
39
41
  </script>
40
42
 
41
43
  <Section label="Suspend/Approval/Prompt" class="w-full">
44
+ <svelte:fragment slot="action">
45
+ <SuspendDrawer text="Approval/Prompt helpers" />
46
+ </svelte:fragment>
42
47
  <svelte:fragment slot="header">
43
- <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_approval">
44
- If defined, at the end of the step, the flow will be suspended until it receives external
45
- requests to be resumed or canceled. This is most useful to implement approval steps but can be
46
- used flexibly for other purposes.
47
- </Tooltip>
48
- <div class="ml-4">
49
- <div class="flex">
50
- <SuspendDrawer text="Approval/Prompt helpers" />
51
- </div>
48
+ <div class="flex flex-row items-center gap-2">
49
+ <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_approval">
50
+ If defined, at the end of the step, the flow will be suspended until it receives external
51
+ requests to be resumed or canceled. This is most useful to implement approval steps but can
52
+ be used flexibly for other purposes.
53
+ </Tooltip>
54
+ <Toggle
55
+ size="xs"
56
+ checked={isSuspendEnabled}
57
+ on:change={() => {
58
+ if (isSuspendEnabled && flowModule.suspend != undefined) {
59
+ flowModule.suspend = undefined
60
+ } else {
61
+ flowModule.suspend = {
62
+ required_events: 1,
63
+ timeout: 1800
64
+ }
65
+ }
66
+ }}
67
+ options={{
68
+ right: 'Suspend flow execution until events/approvals received'
69
+ }}
70
+ />
52
71
  </div>
53
72
  </svelte:fragment>
54
73
 
55
- <Toggle
56
- checked={isSuspendEnabled}
57
- on:change={() => {
58
- if (isSuspendEnabled && flowModule.suspend != undefined) {
59
- flowModule.suspend = undefined
60
- } else {
61
- flowModule.suspend = {
62
- required_events: 1,
63
- timeout: 1800
64
- }
65
- }
66
- }}
67
- options={{
68
- right: 'Suspend flow execution until events/approvals received'
69
- }}
70
- />
71
-
72
74
  <div class="overflow-x-auto scrollbar-hidden">
73
75
  <Tabs bind:selected={suspendTabSelected}>
74
76
  <Tab size="xs" value="core" disabled={!isSuspendEnabled}>
@@ -179,46 +181,84 @@ $: {
179
181
  {/if}
180
182
  </div>
181
183
  {:else}
182
- <div class="flex flex-col mt-4 gap-4">
183
- {#if flowModule.suspend}
184
- {#if emptyString($enterpriseLicense)}
185
- <Alert type="warning" title="Adding a form to the approval page is an EE feature" />
186
- {/if}
184
+ <div class="grid grid-cols-4 mt-4 gap-8">
185
+ <div class="col-span-2">
186
+ {#if flowModule?.suspend?.resume_form}
187
+ <EditableSchemaDrawer
188
+ bind:schema={flowModule.suspend.resume_form.schema}
189
+ on:change={(e) => {
190
+ const schema = e.detail
187
191
 
188
- <div class="flex gap-4">
189
- <Toggle
190
- checked={Boolean(flowModule.suspend.resume_form)}
191
- options={{
192
- right: 'Add a form to the approval page'
192
+ // If the schema is empty, remove the form
193
+ if (Object.keys(schema?.properties ?? {}).length === 0) {
194
+ tick().then(() => {
195
+ if (!flowModule.suspend) return
196
+ flowModule.suspend.resume_form = undefined
197
+ })
198
+ }
193
199
  }}
194
- disabled={emptyString($enterpriseLicense)}
195
- on:change={(e) => {
196
- if (flowModule.suspend) {
197
- if (e.detail) {
200
+ {jsonView}
201
+ />
202
+ {:else if emptyString($enterpriseLicense)}
203
+ <Alert type="warning" title="Adding a form to the approval page is an EE feature" />
204
+ {:else}
205
+ <div class="flex flex-col items-end mb-2 w-full">
206
+ <Toggle
207
+ checked={false}
208
+ label="JSON View"
209
+ size="xs"
210
+ options={{
211
+ right: 'JSON Editor',
212
+ rightTooltip:
213
+ 'Arguments can be edited either using the wizard, or by editing their JSON Schema.'
214
+ }}
215
+ lightMode
216
+ on:change={() => {
217
+ if (flowModule.suspend) {
198
218
  flowModule.suspend.resume_form = {
199
219
  schema: emptySchema()
200
220
  }
201
- } else {
202
- flowModule.suspend.resume_form = undefined
221
+ }
222
+ jsonView = true
223
+ }}
224
+ />
225
+ </div>
226
+ <AddProperty
227
+ on:change={(e) => {
228
+ jsonView = false
229
+ if (flowModule.suspend) {
230
+ flowModule.suspend.resume_form = {
231
+ schema: e.detail
203
232
  }
204
233
  }
205
234
  }}
235
+ schema={{}}
206
236
  />
207
- <div class="flex">
208
- <SuspendDrawer text="Default args & Dynamic enums help" />
237
+ {/if}
238
+ </div>
239
+ <div class="col-span-2 flex flex-col gap-4">
240
+ {#if flowModule.suspend}
241
+ {#if emptyString($enterpriseLicense)}
242
+ <Alert type="warning" title="Adding a form to the approval page is an EE feature" />
243
+ {/if}
244
+
245
+ <div class="flex flex-col gap-2">
246
+ <div class="flex">
247
+ <SuspendDrawer text="Default args & Dynamic enums help" />
248
+ </div>
209
249
  </div>
210
- </div>
211
- {/if}
212
- {#if flowModule.suspend?.resume_form}
213
- <Toggle
214
- bind:checked={flowModule.suspend.hide_cancel}
215
- size="xs"
216
- options={{
217
- right: 'Hide cancel button on approval page'
218
- }}
219
- />
220
- <SchemaEditor bind:schema={flowModule.suspend.resume_form.schema} />
221
- {/if}
250
+ {/if}
251
+ {#if flowModule.suspend}
252
+ <Toggle
253
+ bind:checked={flowModule.suspend.hide_cancel}
254
+ size="xs"
255
+ options={{
256
+ right: 'Hide cancel button on approval page'
257
+ }}
258
+ disabled={!Boolean(flowModule?.suspend?.resume_form)}
259
+ />
260
+ {/if}
261
+ </div>
222
262
  </div>
223
263
  {/if}
224
264
  </Section>
@@ -11,10 +11,11 @@ import FlowInputsFlow from './FlowInputsFlow.svelte';
11
11
  import FlowBranchesAllWrapper from './FlowBranchesAllWrapper.svelte';
12
12
  import FlowBranchesOneWrapper from './FlowBranchesOneWrapper.svelte';
13
13
  import FlowWhileLoop from './FlowWhileLoop.svelte';
14
+ import { initRequiredInputFilled } from '../utils';
14
15
  export let flowModule;
15
16
  export let noEditor = false;
16
17
  export let enableAi = false;
17
- const { selectedId, schedule, flowStateStore } = getContext('FlowEditorContext');
18
+ const { selectedId, schedule, flowStateStore, flowInputsStore } = getContext('FlowEditorContext');
18
19
  let scriptKind = 'script';
19
20
  let scriptTemplate = 'script';
20
21
  // These pointers are used to easily access previewArgs of parent module, and previous module
@@ -39,6 +40,11 @@ async function createModuleFromScript(path, summary, kind, hash) {
39
40
  }
40
41
  flowModule = module;
41
42
  $flowStateStore[module.id] = state;
43
+ if ($flowInputsStore) {
44
+ $flowInputsStore[module?.id] = {
45
+ requiredInputsFilled: initRequiredInputFilled(module?.value, $flowStateStore[module?.id]?.schema)
46
+ };
47
+ }
42
48
  }
43
49
  </script>
44
50
 
@@ -112,6 +118,15 @@ async function createModuleFromScript(path, summary, kind, hash) {
112
118
 
113
119
  flowModule = module
114
120
  $flowStateStore[module.id] = state
121
+
122
+ if ($flowInputsStore) {
123
+ $flowInputsStore[module.id] = {
124
+ requiredInputsFilled: initRequiredInputFilled(
125
+ module.value,
126
+ $flowStateStore[module.id].schema
127
+ )
128
+ }
129
+ }
115
130
  }}
116
131
  failureModule={$selectedId === 'failure'}
117
132
  />
@@ -8,6 +8,7 @@ import ScheduleEditor from '../../ScheduleEditor.svelte';
8
8
  import { ScheduleService } from '../../../gen';
9
9
  import { workspaceStore } from '../../../stores';
10
10
  import { Calendar } from 'lucide-svelte';
11
+ import Label from '../../Label.svelte';
11
12
  const { schedule, flowStore, initialPath } = getContext('FlowEditorContext');
12
13
  let schedules = undefined;
13
14
  async function loadSchedules() {
@@ -26,15 +27,17 @@ let scheduleEditor;
26
27
  $: initialPath && loadSchedules();
27
28
  </script>
28
29
 
29
- <div class="w-full py-2">
30
+ <div class="w-full flex flex-col gap-4 mb-4">
30
31
  <!-- svelte-ignore a11y-autofocus -->
31
- <input
32
- autofocus
33
- type="text"
34
- placeholder="Schedule summary"
35
- class="text-sm w-full font-semibold mb-4"
36
- bind:value={$schedule.summary}
37
- />
32
+ <Label label="Summary">
33
+ <input
34
+ autofocus
35
+ type="text"
36
+ placeholder="Short summary to be displayed when listed"
37
+ class="text-sm w-full"
38
+ bind:value={$schedule.summary}
39
+ />
40
+ </Label>
38
41
  </div>
39
42
 
40
43
  <CronInput bind:schedule={$schedule.cron} bind:timezone={$schedule.timezone} />
@@ -7,7 +7,6 @@ import { inferArgs } from '../../../infer';
7
7
  import { workspaceStore } from '../../../stores';
8
8
  import { Loader2, Save, DiffIcon } from 'lucide-svelte';
9
9
  import { cleanValueProperties, emptySchema, orderedJsonStringify, sendUserToast } from '../../../utils';
10
- import { cloneDeep } from 'lodash';
11
10
  import { createEventDispatcher } from 'svelte';
12
11
  import { fade } from 'svelte/transition';
13
12
  let scriptEditorDrawer;
@@ -19,7 +18,7 @@ export async function openDrawer(hash, cb) {
19
18
  workspace: $workspaceStore,
20
19
  hash
21
20
  });
22
- savedScript = cloneDeep(script);
21
+ savedScript = structuredClone(script);
23
22
  callback = cb;
24
23
  }
25
24
  let callback = undefined;
@@ -48,7 +47,7 @@ async function saveScript() {
48
47
  lock: undefined
49
48
  }
50
49
  });
51
- savedScript = cloneDeep(script);
50
+ savedScript = structuredClone(script);
52
51
  callback?.();
53
52
  }
54
53
  catch (error) {
@@ -186,7 +185,7 @@ async function checkForUnsavedChanges() {
186
185
  button: {
187
186
  text: 'Restore to saved',
188
187
  onClick: () => {
189
- script = cloneDeep(savedScript)
188
+ script = structuredClone(savedScript)
190
189
  diffDrawer.closeDrawer()
191
190
  }
192
191
  }
@@ -16,7 +16,10 @@ export async function loadFlowModuleState(flowModule) {
16
16
  flowModule.value.type == 'flow') {
17
17
  flowModule.value.input_transforms = input_transforms;
18
18
  }
19
- return { schema, previewResult: NEVER_TESTED_THIS_FAR };
19
+ return {
20
+ schema,
21
+ previewResult: NEVER_TESTED_THIS_FAR
22
+ };
20
23
  }
21
24
  catch (e) {
22
25
  console.debug(e);