windmill-components 1.352.9 → 1.362.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 (208) hide show
  1. package/package/assets/app.css +8 -45
  2. package/package/components/ApiConnectForm.svelte +1 -0
  3. package/package/components/ArgInput.svelte +5 -1
  4. package/package/components/ChangeInstanceUsername.svelte +20 -12
  5. package/package/components/ContentSearchInner.svelte +359 -0
  6. package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
  7. package/package/components/CustomPopover.svelte +73 -0
  8. package/package/components/CustomPopover.svelte.d.ts +29 -0
  9. package/package/components/DateTimeInput.svelte +29 -3
  10. package/package/components/DateTimeInput.svelte.d.ts +4 -0
  11. package/package/components/Dev.svelte +8 -3
  12. package/package/components/DurationMs.svelte +2 -2
  13. package/package/components/FlowBuilder.svelte +122 -24
  14. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  15. package/package/components/FlowGraphViewerStep.svelte +2 -2
  16. package/package/components/FlowJobResult.svelte +5 -3
  17. package/package/components/FlowStatusViewer.svelte +4 -3
  18. package/package/components/FlowStatusViewerInner.svelte +265 -160
  19. package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
  20. package/package/components/HighlightTheme.svelte +75 -77
  21. package/package/components/InputTransformForm.svelte +2 -0
  22. package/package/components/JobArgs.svelte +59 -44
  23. package/package/components/JobArgs.svelte.d.ts +2 -0
  24. package/package/components/LightweightArgInput.svelte +27 -2
  25. package/package/components/Path.svelte +3 -8
  26. package/package/components/Popover.svelte +1 -1
  27. package/package/components/ResourceEditor.svelte +3 -2
  28. package/package/components/ResourceEditorDrawer.svelte +4 -1
  29. package/package/components/ResourcePicker.svelte +1 -0
  30. package/package/components/RunChart.svelte +6 -3
  31. package/package/components/RunChart.svelte.d.ts +1 -0
  32. package/package/components/RunForm.svelte +24 -23
  33. package/package/components/RunForm.svelte.d.ts +0 -2
  34. package/package/components/SavedInputs.svelte +50 -39
  35. package/package/components/ScheduleEditorInner.svelte +26 -4
  36. package/package/components/ScriptBuilder.svelte +47 -22
  37. package/package/components/ScriptBuilder.svelte.d.ts +1 -0
  38. package/package/components/SearchItems.svelte +5 -4
  39. package/package/components/Summary.svelte +74 -0
  40. package/package/components/Summary.svelte.d.ts +16 -0
  41. package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
  42. package/package/components/apps/components/display/AppMenu.svelte +2 -2
  43. package/package/components/apps/components/display/AppNavbar.svelte +94 -0
  44. package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
  45. package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
  46. package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
  47. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
  48. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
  49. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
  50. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
  51. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
  53. package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
  54. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
  55. package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
  56. package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
  57. package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
  58. package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
  59. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  60. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  61. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
  62. package/package/components/apps/components/layout/AppModal.svelte +17 -6
  63. package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
  64. package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
  65. package/package/components/apps/editor/AppEditor.svelte +9 -2
  66. package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
  67. package/package/components/apps/editor/AppPreview.svelte +12 -3
  68. package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
  69. package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
  70. package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
  71. package/package/components/apps/editor/appUtils.d.ts +1 -0
  72. package/package/components/apps/editor/appUtils.js +17 -0
  73. package/package/components/apps/editor/component/Component.svelte +23 -0
  74. package/package/components/apps/editor/component/components.d.ts +205 -3
  75. package/package/components/apps/editor/component/components.js +160 -1
  76. package/package/components/apps/editor/component/default-codes.js +13 -13
  77. package/package/components/apps/editor/component/sets.js +4 -2
  78. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
  79. package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
  80. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  81. package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
  82. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
  83. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
  84. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
  85. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
  86. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
  87. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
  88. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
  90. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
  93. package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
  94. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
  95. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
  96. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  97. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
  98. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
  99. package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
  100. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
  101. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
  102. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
  103. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
  104. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
  105. package/package/components/apps/inputType.d.ts +2 -2
  106. package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
  107. package/package/components/apps/types.d.ts +3 -0
  108. package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
  109. package/package/components/common/CloseButton.svelte +10 -10
  110. package/package/components/common/CloseButton.svelte.d.ts +6 -14
  111. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
  112. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
  113. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
  114. package/package/components/common/fileInput/FileInput.svelte +2 -0
  115. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  116. package/package/components/common/popup/Popup.svelte +4 -3
  117. package/package/components/common/popup/Popup.svelte.d.ts +1 -0
  118. package/package/components/common/table/AppRow.svelte +3 -10
  119. package/package/components/common/table/FlowRow.svelte +12 -1
  120. package/package/components/copilot/IteratorGen.svelte +1 -1
  121. package/package/components/copilot/PredicateGen.svelte +1 -1
  122. package/package/components/copilot/StepInputGen.svelte +8 -3
  123. package/package/components/copilot/StepInputsGen.svelte +5 -2
  124. package/package/components/details/WebhooksPanel.svelte +32 -1
  125. package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
  126. package/package/components/flows/FlowHistory.svelte +208 -0
  127. package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
  128. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  129. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
  130. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  131. package/package/components/flows/content/FlowLoop.svelte +23 -26
  132. package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
  133. package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
  134. package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
  135. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  136. package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  138. package/package/components/flows/content/SuspendDrawer.svelte +7 -7
  139. package/package/components/flows/flowStateUtils.js +2 -1
  140. package/package/components/flows/flowStore.js +1 -1
  141. package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
  142. package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
  143. package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
  144. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
  145. package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
  146. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  147. package/package/components/flows/map/MapItem.svelte +20 -0
  148. package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
  149. package/package/components/flows/map/VirtualItem.svelte +4 -2
  150. package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
  151. package/package/components/flows/previousResults.d.ts +9 -0
  152. package/package/components/flows/previousResults.js +42 -8
  153. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  154. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  155. package/package/components/flows/types.d.ts +1 -1
  156. package/package/components/graph/FlowGraph.svelte +80 -42
  157. package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
  158. package/package/components/graph/model.d.ts +6 -1
  159. package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
  160. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  161. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
  162. package/package/components/graph/util.d.ts +1 -1
  163. package/package/components/graph/util.js +1 -2
  164. package/package/components/home/ItemsList.svelte +22 -19
  165. package/package/components/jobs/JobPreview.svelte +11 -2
  166. package/package/components/propertyPicker/PropPicker.svelte +30 -0
  167. package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
  168. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  169. package/package/components/runs/JobLoader.svelte +21 -8
  170. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  171. package/package/components/runs/JobPreview.svelte +5 -1
  172. package/package/components/runs/RunRow.svelte +12 -8
  173. package/package/components/runs/RunsFilter.svelte +2 -4
  174. package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
  175. package/package/components/runs/RunsTable.svelte +63 -29
  176. package/package/components/runs/RunsTable.svelte.d.ts +1 -0
  177. package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
  178. package/package/components/schema/PropertyEditor.svelte +1 -1
  179. package/package/components/search/GlobalSearchModal.svelte +559 -0
  180. package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
  181. package/package/components/search/QuickMenuItem.svelte +76 -0
  182. package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
  183. package/package/components/sidebar/MenuButton.svelte +11 -0
  184. package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
  185. package/package/components/sidebar/changelogs.js +35 -0
  186. package/package/components/wizards/AppPicker.svelte +68 -0
  187. package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
  188. package/package/components/wizards/NavbarWizard.svelte +131 -0
  189. package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
  190. package/package/defaults.d.ts +1 -1
  191. package/package/defaults.js +1 -1
  192. package/package/es6.d.ts.txt +370 -1
  193. package/package/gen/core/OpenAPI.js +1 -1
  194. package/package/gen/schemas.gen.d.ts +42 -3
  195. package/package/gen/schemas.gen.js +42 -3
  196. package/package/gen/services.gen.d.ts +80 -5
  197. package/package/gen/services.gen.js +149 -8
  198. package/package/gen/types.gen.d.ts +265 -11
  199. package/package/inferArgSig.js +4 -0
  200. package/package/script_helpers.d.ts +3 -3
  201. package/package/script_helpers.js +46 -22
  202. package/package/stores.d.ts +1 -1
  203. package/package/stores.js +1 -1
  204. package/package/utils.d.ts +7 -23
  205. package/package/utils.js +54 -33
  206. package/package/windmill_fetch.d.ts.txt +6 -6
  207. package/package.json +3 -11
  208. package/package/components/ContentSearch.svelte +0 -355
@@ -0,0 +1,208 @@
1
+ <script>import { Pane, Splitpanes } from 'svelte-splitpanes';
2
+ import PanelSection from '../apps/editor/settingsPanel/common/PanelSection.svelte';
3
+ import { classNames, displayDate, emptyString, sendUserToast } from '../../utils';
4
+ import { FlowService } from '../../gen';
5
+ import { workspaceStore } from '../../stores';
6
+ import { Skeleton } from '../common';
7
+ import FlowViewer from '../FlowViewer.svelte';
8
+ import Drawer from '../common/drawer/Drawer.svelte';
9
+ import DrawerContent from '../common/drawer/DrawerContent.svelte';
10
+ import Button from '../common/button/Button.svelte';
11
+ import { ArrowRight, Pencil, X } from 'lucide-svelte';
12
+ import { createEventDispatcher } from 'svelte';
13
+ import { goto } from '$app/navigation';
14
+ export let path;
15
+ let drawer;
16
+ let loading = false;
17
+ let versions = [];
18
+ let selectedVersion = undefined;
19
+ let selected = undefined;
20
+ let deploymentMsgUpdateMode = false;
21
+ let deploymentMsgUpdate = undefined;
22
+ export function open() {
23
+ loadVersions();
24
+ drawer.openDrawer();
25
+ }
26
+ async function loadFlow(version) {
27
+ selected = await FlowService.getFlowVersion({
28
+ workspace: $workspaceStore,
29
+ version,
30
+ path
31
+ });
32
+ }
33
+ async function loadVersions() {
34
+ loading = true;
35
+ versions = await FlowService.getFlowHistory({
36
+ workspace: $workspaceStore,
37
+ path: path
38
+ });
39
+ loading = false;
40
+ }
41
+ async function updateDeploymentMsg(version) {
42
+ if (selectedVersion === undefined ||
43
+ version === undefined ||
44
+ emptyString(deploymentMsgUpdate)) {
45
+ return;
46
+ }
47
+ await FlowService.updateFlowHistory({
48
+ workspace: $workspaceStore,
49
+ version,
50
+ path,
51
+ requestBody: {
52
+ deployment_msg: deploymentMsgUpdate
53
+ }
54
+ });
55
+ selectedVersion.deployment_msg = deploymentMsgUpdate;
56
+ deploymentMsgUpdateMode = false;
57
+ loadVersions();
58
+ }
59
+ const dispatch = createEventDispatcher();
60
+ async function restoreVersion(flow) {
61
+ if (!flow)
62
+ return;
63
+ await FlowService.updateFlow({
64
+ workspace: $workspaceStore,
65
+ requestBody: {
66
+ ...flow,
67
+ path
68
+ },
69
+ path
70
+ });
71
+ dispatch('historyRestore');
72
+ drawer?.closeDrawer();
73
+ sendUserToast('Flow restored from previous deployment');
74
+ }
75
+ $: selectedVersion !== undefined && loadFlow(selectedVersion.id);
76
+ </script>
77
+
78
+ <Drawer bind:this={drawer} size="1200px">
79
+ <DrawerContent
80
+ on:close={() => {
81
+ drawer?.closeDrawer()
82
+ }}
83
+ >
84
+ <Splitpanes class="!overflow-visible">
85
+ <Pane size={20}>
86
+ <PanelSection title="Past Deployments">
87
+ <div class="flex flex-col gap-2 w-full">
88
+ {#if !loading}
89
+ {#if versions.length > 0}
90
+ <div class="flex gap-2 flex-col">
91
+ {#each versions ?? [] as version}
92
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
93
+ <div
94
+ class={classNames(
95
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
96
+ selectedVersion?.id == version.id ? 'bg-blue-100 text-blue-600' : ''
97
+ )}
98
+ role="button"
99
+ tabindex="0"
100
+ on:click={() => {
101
+ selectedVersion = version
102
+ }}
103
+ >
104
+ <span class="text-xs truncate">
105
+ {#if emptyString(version.deployment_msg)}Version {version.id}{:else}{version.deployment_msg}{/if}
106
+ </span>
107
+ </div>
108
+ {/each}
109
+ </div>
110
+ {:else}
111
+ <div class="text-sm text-tertiary">No items</div>
112
+ {/if}
113
+ {:else}
114
+ <Skeleton layout={[[40], [40], [40], [40], [40]]} />
115
+ {/if}
116
+ </div>
117
+ </PanelSection>
118
+ </Pane>
119
+ <Pane size={80}>
120
+ <div class="h-full w-full overflow-auto">
121
+ {#if selectedVersion}
122
+ {#if selected}
123
+ <div class="px-2 flex flex-col gap-2">
124
+ <span class="flex flex-row text-sm p-1 text-tertiary">
125
+ {#if deploymentMsgUpdateMode}
126
+ <div class="flex w-full">
127
+ <input
128
+ type="text"
129
+ bind:value={deploymentMsgUpdate}
130
+ class="!w-auto grow"
131
+ on:click|stopPropagation={() => {}}
132
+ on:keydown|stopPropagation
133
+ on:keypress|stopPropagation={({ key }) => {
134
+ if (key === 'Enter') updateDeploymentMsg(selectedVersion?.id)
135
+ }}
136
+ />
137
+ <Button
138
+ size="xs"
139
+ color="blue"
140
+ buttonType="button"
141
+ btnClasses="!p-1 !w-[34px] !ml-1"
142
+ aria-label="Save Deployment Message"
143
+ on:click={() => {
144
+ updateDeploymentMsg(selectedVersion?.id)
145
+ }}
146
+ >
147
+ <ArrowRight size={14} />
148
+ </Button>
149
+ <Button
150
+ size="xs"
151
+ color="light"
152
+ buttonType="button"
153
+ btnClasses="!p-1 !w-[34px] !ml-1"
154
+ aria-label="Abort"
155
+ on:click={() => {
156
+ deploymentMsgUpdateMode = false
157
+ deploymentMsgUpdate = undefined
158
+ }}
159
+ >
160
+ <X size={14} />
161
+ </Button>
162
+ </div>
163
+ {:else}
164
+ {#if selectedVersion.deployment_msg}
165
+ {selectedVersion.deployment_msg}
166
+ {:else}
167
+ Deployed {displayDate(selected.edited_at)} by {selected.edited_by}
168
+ {/if}
169
+ <button
170
+ on:click={() => {
171
+ deploymentMsgUpdate = selectedVersion?.deployment_msg
172
+ deploymentMsgUpdateMode = true
173
+ }}
174
+ title="Update commit message"
175
+ class="flex items-center px-1 rounded-sm hover:text-primary text-secondary h-5"
176
+ aria-label="Update commit message"
177
+ >
178
+ <Pencil size={14} />
179
+ </button>
180
+ {/if}
181
+ </span>
182
+ <div class="flex p-1 gap-2">
183
+ <Button
184
+ size="xs"
185
+ on:click={() =>
186
+ goto(`/flows/add?template_id=${selectedVersion?.id}&template=${path}`)}
187
+ >
188
+ Restore as fork
189
+ </Button>
190
+ <Button size="xs" on:click={() => restoreVersion(selected)}
191
+ >Redeploy with that version
192
+ </Button>
193
+ </div>
194
+ <FlowViewer flow={selected} />
195
+ </div>
196
+ {:else}
197
+ <Skeleton layout={[[40]]} />
198
+ {/if}
199
+ {:else}
200
+ <div class="text-sm p-2 text-tertiary"
201
+ >Select a deployment version to see its details</div
202
+ >
203
+ {/if}
204
+ </div>
205
+ </Pane>
206
+ </Splitpanes>
207
+ </DrawerContent>
208
+ </Drawer>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ path: string;
5
+ open?: (() => void) | undefined;
6
+ };
7
+ events: {
8
+ keydown: KeyboardEvent;
9
+ historyRestore: CustomEvent<any>;
10
+ } & {
11
+ [evt: string]: CustomEvent<any>;
12
+ };
13
+ slots: {};
14
+ };
15
+ export type FlowHistoryProps = typeof __propDef.props;
16
+ export type FlowHistoryEvents = typeof __propDef.events;
17
+ export type FlowHistorySlots = typeof __propDef.slots;
18
+ export default class FlowHistory extends SvelteComponent<FlowHistoryProps, FlowHistoryEvents, FlowHistorySlots> {
19
+ get open(): () => void;
20
+ }
21
+ export {};
@@ -39,7 +39,6 @@ let selected = 'early-stop';
39
39
  <h3 class="mb-4"
40
40
  >{value.branches.length} branch{value.branches.length > 1 ? 'es' : ''}</h3
41
41
  >
42
- <p>Add branches and steps directly on the graph.</p>
43
42
  <div class="flex flex-col gap-y-4 py-2 w-full">
44
43
  {#each value.branches as branch, i}
45
44
  <div class="flex flex-row gap-x-4 w-full items-center">
@@ -58,6 +57,7 @@ let selected = 'early-stop';
58
57
  </div>
59
58
  {/each}
60
59
  </div>
60
+ <p class="text-sm">Add branches and steps directly on the graph.</p>
61
61
  <div class="mt-6 mb-2 text-sm font-bold">Run in parallel</div>
62
62
  <Toggle
63
63
  bind:checked={value.parallel}
@@ -41,7 +41,6 @@ let selected = 'early-stop';
41
41
  <h3 class="my-4">
42
42
  {value.branches.length + 1} branch{value.branches.length + 1 > 1 ? 'es' : ''}
43
43
  </h3>
44
- <p>Add branches and steps directly on the graph.</p>
45
44
  <div class="py-2">
46
45
  <div class="flex flex-row gap-2 text-sm p-2">
47
46
  <Badge large={true} color="blue">Default branch</Badge>
@@ -77,6 +76,7 @@ let selected = 'early-stop';
77
76
  </div>
78
77
  {/each}
79
78
  </div>
79
+ <p class="text-sm">Add branches and steps directly on the graph.</p>
80
80
  </div>
81
81
  </Pane>
82
82
  {#if flowModule}
@@ -23,7 +23,7 @@ onMount(() => {
23
23
  if (!module) {
24
24
  return;
25
25
  }
26
- if (!$flowStateStore) {
26
+ if (!$flowInputsStore) {
27
27
  $flowInputsStore = {};
28
28
  }
29
29
  $flowInputsStore[module?.id] = {
@@ -7,7 +7,7 @@ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
7
7
  import FlowModuleEarlyStop from './FlowModuleEarlyStop.svelte';
8
8
  import FlowModuleSuspend from './FlowModuleSuspend.svelte';
9
9
  // import FlowRetries from './FlowRetries.svelte'
10
- import { Button, Drawer, Tab, TabContent, Tabs, Alert } from '../../common';
10
+ import { Button, Drawer, Tab, TabContent, Tabs } from '../../common';
11
11
  import { Pane, Splitpanes } from 'svelte-splitpanes';
12
12
  import { getStepPropPicker } from '../previousResults';
13
13
  import { enterpriseLicense } from '../../../stores';
@@ -50,24 +50,29 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
50
50
  <div class="h-full flex flex-col">
51
51
  <FlowCard {noEditor} title="For loop">
52
52
  <div slot="header" class="grow">
53
- <input bind:value={mod.summary} placeholder={'Summary'} />
54
- </div>
55
-
56
- <Splitpanes horizontal class="!max-h-[calc(100%-48px)]">
57
- <Pane size={60} minSize={20} class="p-4">
58
- {#if !noEditor}
59
- <Alert
60
- type="info"
61
- title="For loops"
62
- documentationLink="https://www.windmill.dev/docs/flows/flow_loops"
63
- class="mb-4"
64
- size="xs"
65
- >
53
+ <div class="my-2 flex flex-row gap-2 items-center">
54
+ <div>
55
+ <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_loops">
66
56
  Add steps inside the loop and specify an iterator expression that defines the sequence
67
57
  over which your subsequent steps will iterate.
68
- </Alert>
69
- {/if}
58
+ </Tooltip>
59
+ </div>
60
+ <div class="grow">
61
+ <input bind:value={mod.summary} placeholder={'Summary'} />
62
+ </div>
63
+ <div class="justify-end">
64
+ <Button
65
+ on:click={() => (previewOpen = true)}
66
+ startIcon={{ icon: Play }}
67
+ color="dark"
68
+ size="sm">Test an iteration</Button
69
+ >
70
+ </div>
71
+ </div>
72
+ </div>
70
73
 
74
+ <Splitpanes horizontal class="!max-h-[calc(100%-30px)]">
75
+ <Pane size={60} minSize={20} class="p-4">
71
76
  {#if mod.value.type === 'forloopflow'}
72
77
  <div class="flex flex-row gap-8 mt-2 mb-6">
73
78
  <div>
@@ -108,12 +113,12 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
108
113
  />
109
114
  </div>
110
115
  </div>
111
-
112
116
  <div class="my-2 flex flex-row gap-2 items-center">
113
117
  <div class="text-sm font-bold whitespace-nowrap">
114
118
  Iterator expression
115
119
  <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_loops">
116
- List to iterate over.
120
+ The JavaScript expression that will be evaluated to get the list of items to iterate
121
+ over. Example : ["banana", "apple", flow_input.my_fruit].
117
122
  </Tooltip>
118
123
  </div>
119
124
  {#if enableAi}
@@ -137,14 +142,6 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
137
142
  pickableProperties={stepPropPicker.pickableProperties}
138
143
  />
139
144
  {/if}
140
- <div class="flex w-full justify-end">
141
- <Button
142
- on:click={() => (previewOpen = true)}
143
- startIcon={{ icon: Play }}
144
- color="dark"
145
- size="sm">Test an iteration</Button
146
- >
147
- </div>
148
145
  </div>
149
146
 
150
147
  {#if mod.value.iterator.type == 'javascript'}
@@ -17,7 +17,7 @@ import FlowModuleSuspend from './FlowModuleSuspend.svelte';
17
17
  import FlowModuleCache from './FlowModuleCache.svelte';
18
18
  import FlowModuleDeleteAfterUse from './FlowModuleDeleteAfterUse.svelte';
19
19
  import FlowRetries from './FlowRetries.svelte';
20
- import { getStepPropPicker } from '../previousResults';
20
+ import { getFailureStepPropPicker, getStepPropPicker } from '../previousResults';
21
21
  import { deepEqual } from 'fast-equals';
22
22
  import Section from '../../Section.svelte';
23
23
  import Button from '../../common/button/Button.svelte';
@@ -25,7 +25,6 @@ import Alert from '../../common/alert/Alert.svelte';
25
25
  import FlowModuleSleep from './FlowModuleSleep.svelte';
26
26
  import FlowPathViewer from './FlowPathViewer.svelte';
27
27
  import InputTransformSchemaForm from '../../InputTransformSchemaForm.svelte';
28
- import { schemaToObject } from '../../../schema';
29
28
  import FlowModuleMock from './FlowModuleMock.svelte';
30
29
  import Tooltip from '../../Tooltip.svelte';
31
30
  import { SecondsInput } from '../../common';
@@ -80,22 +79,7 @@ function setCopilotModuleEditor() {
80
79
  }
81
80
  $: editor !== undefined && setCopilotModuleEditor();
82
81
  $: stepPropPicker = failureModule
83
- ? {
84
- pickableProperties: {
85
- flow_input: schemaToObject($flowStore.schema, $previewArgs),
86
- priorIds: {},
87
- previousId: undefined,
88
- hasResume: false
89
- },
90
- extraLib: `
91
- declare const error: {
92
- message: string
93
- name: string
94
- stack: string
95
- }
96
-
97
- `
98
- }
82
+ ? getFailureStepPropPicker($flowStateStore, $flowStore, $previewArgs)
99
83
  : getStepPropPicker($flowStateStore, parentModule, previousModule, flowModule.id, $flowStore, $previewArgs, false);
100
84
  function onKeyDown(event) {
101
85
  if ((event.ctrlKey || event.metaKey) && event.key == 'Enter') {
@@ -5,9 +5,11 @@ import Tooltip from '../../Tooltip.svelte';
5
5
  import { getContext } from 'svelte';
6
6
  import { NEVER_TESTED_THIS_FAR } from '../models';
7
7
  import Section from '../../Section.svelte';
8
- const { flowStateStore } = getContext('FlowEditorContext');
8
+ import { getStepPropPicker } from '../previousResults';
9
+ const { flowStateStore, flowStore, previewArgs } = getContext('FlowEditorContext');
9
10
  export let flowModule;
10
11
  let editor = undefined;
12
+ $: stepPropPicker = getStepPropPicker($flowStateStore, undefined, undefined, flowModule.id, $flowStore, $previewArgs, false);
11
13
  $: isStopAfterIfEnabled = Boolean(flowModule.stop_after_if);
12
14
  $: result = $flowStateStore[flowModule.id]?.previewResult ?? NEVER_TESTED_THIS_FAR;
13
15
  </script>
@@ -45,16 +47,19 @@ $: result = $flowStateStore[flowModule.id]?.previewResult ?? NEVER_TESTED_THIS_F
45
47
  >
46
48
  {#if flowModule.stop_after_if}
47
49
  <Toggle
50
+ size="xs"
48
51
  bind:checked={flowModule.stop_after_if.skip_if_stopped}
49
52
  options={{
50
53
  right: 'Label flow as "skipped" if stopped'
51
54
  }}
52
55
  />
53
- <span class="text-xs font-bold">Stop condition expression</span>
56
+ <span class="mt-2 text-xs font-bold">Stop condition expression</span>
54
57
  <div class="border w-full">
55
58
  <PropPickerWrapper
56
- {result}
59
+ notSelectable
60
+ flow_input={stepPropPicker.pickableProperties.flow_input}
57
61
  pickableProperties={undefined}
62
+ {result}
58
63
  on:select={({ detail }) => {
59
64
  editor?.insertAtCursor(detail)
60
65
  editor?.focus()
@@ -72,10 +77,11 @@ $: result = $flowStateStore[flowModule.id]?.previewResult ?? NEVER_TESTED_THIS_F
72
77
  {:else}
73
78
  <Toggle
74
79
  disabled
80
+ size="xs"
75
81
  options={{
76
82
  right: 'Label flow as "skipped" if stopped'
77
83
  }}
78
- /> <span class="text-xs font-bold">Stop condition expression</span>
84
+ /> <span class="mt-2 text-xs font-bold">Stop condition expression</span>
79
85
  <textarea disabled rows="3" class="min-h-[80px]" />
80
86
  {/if}
81
87
  </div>
@@ -43,7 +43,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
43
43
  {#if module.cache_ttl != undefined}
44
44
  <Popover
45
45
  placement="bottom"
46
- class="center-center rounded p-2 'bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200 dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600"
46
+ class="center-center rounded p-2 bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200 dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600"
47
47
  on:click={() => dispatch('toggleCache')}
48
48
  >
49
49
  <Database size={14} />
@@ -73,8 +73,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
73
73
  {#if module.sleep}
74
74
  <Popover
75
75
  placement="bottom"
76
- class="center-center rounded p-2bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200
77
- dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600"
76
+ class="center-center rounded p-2 bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200 dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600"
78
77
  on:click={() => dispatch('toggleSleep')}
79
78
  >
80
79
  <Bed size={14} />
@@ -84,7 +83,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
84
83
  {#if module.mock?.enabled}
85
84
  <Popover
86
85
  placement="bottom"
87
- class="center-center rounded p-2 bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200"
86
+ class="center-center rounded p-2 bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200 dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600"
88
87
  on:click={() => dispatch('toggleMock')}
89
88
  >
90
89
  <Voicemail size={14} />
@@ -36,7 +36,7 @@ function toggleShowAll() {
36
36
 
37
37
  <div class="flex flex-col flex-1 h-full overflow-auto p-2">
38
38
  {#if showDate && date}
39
- <span class="text-xs text-tertiary mb-4"><TimeAgo {date} /></span>
39
+ <span class="text-xs text-tertiary mb-4"><TimeAgo agoOnlyIfRecent withDate {date} /></span>
40
40
  {/if}
41
41
  {#if notFound}
42
42
  <div class="text-red-400">script not found at {path} in workspace {$workspaceStore}</div>
@@ -67,6 +67,7 @@ $: isSleepEnabled = Boolean(flowModule.sleep);
67
67
  </div>
68
68
  {:else}
69
69
  <SecondsInput disabled />
70
+ <div class="text-secondary">OR use a dynamic expression</div>
70
71
  {/if}
71
72
  </Label>
72
73
  </Section>
@@ -28,7 +28,7 @@ async function loadGroups() {
28
28
  type: 'array',
29
29
  items: {
30
30
  type: 'string',
31
- multiselect: allUserGroups
31
+ enum: allUserGroups
32
32
  }
33
33
  };
34
34
  }
@@ -42,10 +42,10 @@ export let text = 'Approval Help';
42
42
  code={`import * as wmill from "npm:windmill-client@^1.158.2"
43
43
 
44
44
  export async function main() {
45
- const resumeUrls = await wmill.getResumeUrls("approver1")
45
+ const urls = await wmill.getResumeUrls("approver1")
46
46
 
47
47
  return {
48
- resume: resumeUrls['resume'],
48
+ resume: urls['resume'],
49
49
  default_args: {}, // optional, see below
50
50
  enums: {} // optional, see below
51
51
  }
@@ -58,10 +58,10 @@ export async function main() {
58
58
  code={`import * as wmill from "windmill-client"
59
59
 
60
60
  export async function main() {
61
- const resumeUrls = await wmill.getResumeUrls("approver1")
61
+ const urls = await wmill.getResumeUrls("approver1")
62
62
 
63
63
  return {
64
- resume: resumeUrls['resume'],
64
+ resume: urls['resume'],
65
65
  default_args: {}, // optional, see below
66
66
  enums: {} // optional, see below
67
67
  }
@@ -97,7 +97,7 @@ import * as wmill from "npm:windmill-client@^1.158.2"
97
97
 
98
98
  export async function main() {
99
99
  // if no argument is passed, if user is logged in, it will use the user's username
100
- const resumeUrls = await wmill.getResumeUrls("approver1")
100
+ const urls = await wmill.getResumeUrls("approver1")
101
101
 
102
102
  // send the resumeUrls to the recipient or see Prompt section above
103
103
 
@@ -112,7 +112,7 @@ export async function main() {
112
112
  </Section>
113
113
  <Section label="Dynamics enums">
114
114
  As one of the return key of this step, return an object `enums` that contains the default
115
- arguments of the form arguments. e.g:
115
+ options of the form arguments. e.g:
116
116
  <HighlightCode
117
117
  language={'deno'}
118
118
  code={`
@@ -123,7 +123,7 @@ import * as wmill from "npm:windmill-client@^1.158.2"
123
123
 
124
124
  export async function main() {
125
125
  // if no argument is passed, if user is logged in, it will use the user's username
126
- const resumeUrls = await wmill.getResumeUrls("approver1")
126
+ const url = await wmill.getResumeUrls("approver1")
127
127
 
128
128
  // send the resumeUrls to the recipient or see Prompt section above
129
129
 
@@ -94,7 +94,8 @@ export async function createBranchAll(id) {
94
94
  id,
95
95
  value: {
96
96
  type: 'branchall',
97
- branches: [{ modules: [] }]
97
+ branches: [{ modules: [] }],
98
+ parallel: true
98
99
  },
99
100
  summary: ''
100
101
  };
@@ -9,7 +9,7 @@ export async function copyFirstStepSchema(flowState, flowStore) {
9
9
  flowStore.update((flow) => {
10
10
  const firstModuleId = flow.value.modules[0]?.id;
11
11
  if (flowState[firstModuleId] && firstModuleId) {
12
- flow.schema = flowState[firstModuleId].schema;
12
+ flow.schema = structuredClone(flowState[firstModuleId].schema);
13
13
  const v = flow.value.modules[0].value;
14
14
  if (v.type == 'rawscript' || v.type == 'script') {
15
15
  Object.keys(v.input_transforms ?? {}).forEach((key) => {
@@ -2,26 +2,13 @@
2
2
  import DrawerContent from '../../common/drawer/DrawerContent.svelte';
3
3
  import FlowViewer from '../../FlowViewer.svelte';
4
4
  import { getContext } from 'svelte';
5
- import { Button } from '../../common';
6
5
  import { cleanInputs } from '../utils';
7
- import { FileJson } from 'lucide-svelte';
8
6
  const { flowStore } = getContext('FlowEditorContext');
9
- let jsonViewerDrawer;
7
+ export let drawer;
10
8
  </script>
11
9
 
12
- <Button
13
- btnClasses="mr-2"
14
- size="xs"
15
- variant="border"
16
- color="light"
17
- on:click={() => jsonViewerDrawer.toggleDrawer()}
18
- startIcon={{ icon: FileJson }}
19
- >
20
- Export
21
- </Button>
22
-
23
- <Drawer bind:this={jsonViewerDrawer} size="800px">
24
- <DrawerContent title="OpenFlow" on:close={() => jsonViewerDrawer.toggleDrawer()}>
10
+ <Drawer bind:this={drawer} size="800px">
11
+ <DrawerContent title="OpenFlow" on:close={() => drawer?.toggleDrawer()}>
25
12
  {#if $flowStore}
26
13
  <FlowViewer flow={cleanInputs($flowStore)} tab="raw" />
27
14
  {/if}
@@ -1,6 +1,9 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import Drawer from '../../common/drawer/Drawer.svelte';
2
3
  declare const __propDef: {
3
- props: Record<string, never>;
4
+ props: {
5
+ drawer: Drawer | undefined;
6
+ };
4
7
  events: {
5
8
  [evt: string]: CustomEvent<any>;
6
9
  };