windmill-components 1.511.0 → 1.522.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 (236) hide show
  1. package/package/components/AppConnectInner.svelte.d.ts +1 -1
  2. package/package/components/ArgInput.svelte +56 -18
  3. package/package/components/ArgInput.svelte.d.ts +2 -10
  4. package/package/components/AssignableTagsInner.svelte +5 -0
  5. package/package/components/AuthSettings.svelte +4 -2
  6. package/package/components/AuthSettings.svelte.d.ts +1 -0
  7. package/package/components/DBManagerDrawer.svelte +154 -151
  8. package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
  9. package/package/components/DBTable.svelte +3 -3
  10. package/package/components/DBTable.svelte.d.ts +1 -0
  11. package/package/components/DBTableEditor.svelte +7 -7
  12. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  13. package/package/components/DeployWorkspace.svelte +1 -1
  14. package/package/components/DisplayResult.svelte +34 -8
  15. package/package/components/DisplayResult.svelte.d.ts +4 -1
  16. package/package/components/DynSelect.svelte +58 -34
  17. package/package/components/DynSelect.svelte.d.ts +3 -11
  18. package/package/components/EditableSchemaForm.svelte +126 -6
  19. package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
  20. package/package/components/Editor.svelte +1 -1
  21. package/package/components/EditorBar.svelte +82 -4
  22. package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
  23. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
  24. package/package/components/ExploreAssetButton.svelte +14 -4
  25. package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
  26. package/package/components/FlowJobResult.svelte +3 -3
  27. package/package/components/FlowJobResult.svelte.d.ts +1 -0
  28. package/package/components/FlowPreviewContent.svelte +9 -0
  29. package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
  30. package/package/components/FlowPreviewResult.svelte +4 -1
  31. package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
  32. package/package/components/FlowStatusViewer.svelte +2 -1
  33. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  34. package/package/components/FlowStatusViewerInner.svelte +23 -3
  35. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -1
  36. package/package/components/FolderEditor.svelte +1 -1
  37. package/package/components/GitDiffPreview.svelte +14 -18
  38. package/package/components/GitDiffPreview.svelte.d.ts +2 -8
  39. package/package/components/GitHubAppIntegration.svelte +3 -1
  40. package/package/components/IdEditorInput.svelte +25 -22
  41. package/package/components/IdEditorInput.svelte.d.ts +11 -23
  42. package/package/components/InstanceSetting.svelte +7 -2
  43. package/package/components/InstanceSettings.svelte +1 -0
  44. package/package/components/JobLoader.svelte +48 -5
  45. package/package/components/JobLoader.svelte.d.ts +7 -2
  46. package/package/components/Login.svelte +8 -2
  47. package/package/components/MemoryFootprintViewer.svelte +1 -1
  48. package/package/components/ModulePreviewResultViewer.svelte +2 -2
  49. package/package/components/MoveDrawer.svelte.d.ts +2 -2
  50. package/package/components/NextcloudSetting.svelte +84 -0
  51. package/package/components/NextcloudSetting.svelte.d.ts +7 -0
  52. package/package/components/ObjectResourceInput.svelte +3 -2
  53. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  54. package/package/components/ParqetCsvTableRenderer.svelte +1 -1
  55. package/package/components/ResourceEditor.svelte +1 -1
  56. package/package/components/ResourcePicker.svelte +8 -1
  57. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  58. package/package/components/ResultStreamDisplay.svelte +5 -0
  59. package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
  60. package/package/components/RunForm.svelte +9 -1
  61. package/package/components/SchemaForm.svelte +2 -2
  62. package/package/components/SchemaForm.svelte.d.ts +2 -10
  63. package/package/components/ScriptBuilder.svelte +13 -8
  64. package/package/components/ScriptBuilder.svelte.d.ts +1 -1
  65. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  66. package/package/components/ScriptWrapper.svelte +1 -1
  67. package/package/components/ShareModal.svelte.d.ts +1 -1
  68. package/package/components/SimpleAgTable.svelte +2 -0
  69. package/package/components/SimpleAgTable.svelte.d.ts +2 -0
  70. package/package/components/SqlRepl.svelte +21 -7
  71. package/package/components/SqlRepl.svelte.d.ts +2 -2
  72. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  73. package/package/components/WorkerTagSelect.svelte +70 -1
  74. package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
  75. package/package/components/apps/components/display/AppText.svelte +2 -2
  76. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
  77. package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
  78. package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
  79. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
  80. package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
  81. package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
  82. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
  83. package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
  84. package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
  85. package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
  86. package/package/components/apps/components/display/dbtable/utils.js +52 -28
  87. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
  88. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  89. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
  90. package/package/components/apps/components/display/table/AppAggridTable.svelte +5 -4
  91. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  92. package/package/components/apps/components/display/table/utils.js +7 -4
  93. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
  94. package/package/components/apps/components/helpers/RunnableComponent.svelte +4 -1
  95. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  96. package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
  97. package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
  98. package/package/components/apps/components/layout/AppStepper.svelte +1 -1
  99. package/package/components/apps/components/layout/AppTabs.svelte +1 -1
  100. package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
  101. package/package/components/apps/editor/GridViewer.svelte +1 -0
  102. package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
  103. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
  104. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
  105. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +8 -12
  106. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  107. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  108. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  109. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +3 -3
  110. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
  111. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  112. package/package/components/assets/JobAssetsViewer.svelte +2 -2
  113. package/package/components/assets/lib.js +4 -0
  114. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
  115. package/package/components/common/button/Button.svelte +4 -3
  116. package/package/components/common/button/Button.svelte.d.ts +1 -0
  117. package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
  118. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
  119. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
  120. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
  121. package/package/components/common/modal/Modal.svelte +2 -5
  122. package/package/components/common/tabs/TabsV2.svelte +2 -1
  123. package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
  124. package/package/components/copilot/chat/AIChatManager.svelte.js +61 -7
  125. package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
  126. package/package/components/copilot/chat/script/core.js +28 -29
  127. package/package/components/copilot/chat/shared.d.ts +1 -1
  128. package/package/components/copilot/chat/shared.js +8 -2
  129. package/package/components/custom_ui.d.ts +3 -0
  130. package/package/components/dbOps.d.ts +20 -8
  131. package/package/components/dbOps.js +85 -40
  132. package/package/components/details/DetailPageHeader.svelte +0 -2
  133. package/package/components/flows/content/FlowInput.svelte +5 -0
  134. package/package/components/flows/content/FlowModuleComponent.svelte +1 -0
  135. package/package/components/flows/content/FlowModuleScript.svelte +0 -1
  136. package/package/components/flows/idUtils.js +2 -1
  137. package/package/components/flows/map/FlowModuleSchemaItem.svelte +3 -3
  138. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -0
  139. package/package/components/flows/map/InsertModuleButton.svelte +4 -1
  140. package/package/components/flows/propPicker/OutputBadge.svelte +5 -1
  141. package/package/components/flows/propPicker/OutputPickerInner.svelte +9 -5
  142. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
  143. package/package/components/flows/propPicker/StepHistory.svelte +4 -1
  144. package/package/components/git_sync/DetectionFlow.svelte +202 -0
  145. package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
  146. package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
  147. package/package/components/git_sync/GitSyncContext.svelte.js +461 -0
  148. package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
  149. package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
  150. package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
  151. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
  152. package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
  153. package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
  154. package/package/components/git_sync/GitSyncSection.svelte +89 -0
  155. package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
  156. package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
  157. package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
  158. package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
  159. package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
  160. package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
  161. package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
  162. package/package/components/graph/FlowGraphV2.svelte +5 -1
  163. package/package/components/graph/graphBuilder.svelte.js +1 -1
  164. package/package/components/graph/renderers/nodes/AssetNode.svelte +4 -4
  165. package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
  166. package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
  167. package/package/components/icons/AssetGenericIcon.svelte +3 -0
  168. package/package/components/icons/DucklakeIcon.svelte +18 -0
  169. package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
  170. package/package/components/instanceSettings.js +11 -3
  171. package/package/components/runs/JobPreview.svelte +2 -2
  172. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  173. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  174. package/package/components/schema/FlowPropertyEditor.svelte +3 -2
  175. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  176. package/package/components/schema/PropertyEditor.svelte +0 -2
  177. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  178. package/package/components/schema/SchemaFormDND.svelte +2 -1
  179. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
  180. package/package/components/scriptEditor/LogPanel.svelte +5 -3
  181. package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
  182. package/package/components/select/Select.svelte +7 -4
  183. package/package/components/select/Select.svelte.d.ts +5 -0
  184. package/package/components/select/SelectDropdown.svelte +2 -1
  185. package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
  186. package/package/components/sidebar/changelogs.js +5 -0
  187. package/package/components/table/AutoDataTable.svelte +6 -4
  188. package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
  189. package/package/components/table/DataTable.svelte +12 -10
  190. package/package/components/table/DataTable.svelte.d.ts +1 -0
  191. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
  192. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  193. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  194. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
  195. package/package/components/triggers/gcp/utils.js +1 -0
  196. package/package/components/triggers/http/utils.js +1 -1
  197. package/package/components/triggers/kafka/utils.js +1 -1
  198. package/package/components/triggers/mqtt/utils.js +1 -1
  199. package/package/components/triggers/nats/utils.js +1 -1
  200. package/package/components/triggers/postgres/utils.js +1 -1
  201. package/package/components/triggers/sqs/utils.js +1 -1
  202. package/package/components/triggers/utils.js +2 -1
  203. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
  204. package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
  205. package/package/components/triggers/websocket/utils.js +1 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +52 -36
  207. package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
  208. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
  211. package/package/consts.js +2 -1
  212. package/package/gen/core/OpenAPI.js +1 -1
  213. package/package/gen/schemas.gen.d.ts +33 -24
  214. package/package/gen/schemas.gen.js +36 -27
  215. package/package/gen/services.gen.d.ts +19 -1
  216. package/package/gen/services.gen.js +38 -0
  217. package/package/gen/types.gen.d.ts +103 -9
  218. package/package/git-sync.d.ts +36 -0
  219. package/package/git-sync.js +1 -0
  220. package/package/hub.d.ts +1 -0
  221. package/package/hubPaths.json +5 -2
  222. package/package/infer.js +3 -2
  223. package/package/script_helpers.d.ts +2 -2
  224. package/package/script_helpers.js +29 -11
  225. package/package/services/JobManager.d.ts +28 -0
  226. package/package/services/JobManager.js +114 -0
  227. package/package/stores.d.ts +1 -1
  228. package/package/utils.d.ts +18 -1
  229. package/package/utils.js +55 -2
  230. package/package.json +13 -12
  231. package/package/components/InitGitRepoPopover.svelte +0 -410
  232. package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
  233. package/package/components/PullGitRepoPopover.svelte +0 -355
  234. package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
  235. package/package/inferArgSig.d.ts +0 -35
  236. package/package/inferArgSig.js +0 -191
@@ -49,6 +49,7 @@ let forceJson = $state(false);
49
49
  result={drawerContent.content}
50
50
  customUi={customUi?.displayResult}
51
51
  language={lang}
52
+ result_stream={previewJob?.result_stream}
52
53
  />
53
54
  {:else if drawerContent?.mode === 'plain'}
54
55
  <pre
@@ -60,7 +61,6 @@ let forceJson = $state(false);
60
61
  {/if}
61
62
  </DrawerContent>
62
63
  </Drawer>
63
-
64
64
  <div class="h-full flex flex-col">
65
65
  <Tabs bind:selected={selectedTab} class="pt-1" wrapperClass="flex-none">
66
66
  <Tab value="logs" size="xs">Logs & Result</Tab>
@@ -98,9 +98,9 @@ let forceJson = $state(false);
98
98
  </Pane>
99
99
  <Pane>
100
100
  {@render children?.()}
101
- {#if previewJob != undefined && 'result' in previewJob}
101
+ {#if previewJob != undefined && (previewJob.result_stream || previewJob.result)}
102
102
  <div class="relative w-full h-full p-2">
103
- <div class="relative">
103
+ <div class="relative h-full">
104
104
  <DisplayResult
105
105
  bind:forceJson
106
106
  workspaceId={previewJob?.workspace_id}
@@ -108,6 +108,8 @@ let forceJson = $state(false);
108
108
  result={previewJob.result}
109
109
  customUi={customUi?.displayResult}
110
110
  language={lang}
111
+ result_stream={previewJob?.result_stream}
112
+ fixTableSizingToParent
111
113
  >
112
114
  {#snippet copilot_fix()}
113
115
  {#if lang && editor && diffEditor && args && previewJob && !previewJob.success && getStringError(previewJob.result)}
@@ -5,7 +5,11 @@ import type { PreviewPanelUi } from '../custom_ui';
5
5
  interface Props {
6
6
  lang: Preview['language'] | undefined;
7
7
  previewIsLoading?: boolean;
8
- previewJob: Job | undefined;
8
+ previewJob: (Job & {
9
+ result_stream?: string;
10
+ result?: any;
11
+ success?: boolean;
12
+ }) | undefined;
9
13
  pastPreviews?: CompletedJob[];
10
14
  editor?: Editor | undefined;
11
15
  diffEditor?: DiffEditor | undefined;
@@ -6,8 +6,8 @@ import { untrack } from 'svelte';
6
6
  import { getLabel, processItems } from './utils.svelte';
7
7
  import SelectDropdown from './SelectDropdown.svelte';
8
8
  import { deepEqual } from 'fast-equals';
9
- let { items, placeholder = 'Please select', value = $bindable(), filterText = $bindable(''), class: className = '', clearable = false, listAutoWidth = true, disabled: _disabled = false, containerStyle = '', inputClass = '', disablePortal = false, loading = false, autofocus, RightIcon, createText, noItemsMsg, open = $bindable(false), groupBy, sortBy, onFocus, onBlur, onClear, onCreateItem } = $props();
10
- let disabled = $derived(_disabled || loading);
9
+ let { items, placeholder = 'Please select', value = $bindable(), filterText = $bindable(''), class: className = '', clearable = false, listAutoWidth = true, disabled: _disabled = false, containerStyle = '', inputClass = '', disablePortal = false, loading = false, autofocus, RightIcon, createText, noItemsMsg, open = $bindable(false), groupBy, sortBy, onFocus, onBlur, onClear, onCreateItem, startSnippet } = $props();
10
+ let disabled = $derived(_disabled || (loading && !value));
11
11
  let inputEl = $state();
12
12
  let processedItems = $derived.by(() => {
13
13
  let args = { items, createText, filterText, groupBy, onCreateItem, sortBy };
@@ -67,12 +67,14 @@ function clearValue() {
67
67
  {disabled}
68
68
  type="text"
69
69
  bind:value={() => filterText, (v) => (filterText = v)}
70
- placeholder={loading ? 'Loading...' : (valueEntry?.label ?? getLabel({ value }) ?? placeholder)}
70
+ placeholder={loading && !value
71
+ ? 'Loading...'
72
+ : (valueEntry?.label ?? getLabel({ value }) ?? placeholder)}
71
73
  style={containerStyle}
72
74
  class={twMerge(
73
75
  '!bg-surface text-ellipsis',
74
76
  open ? '' : 'cursor-pointer',
75
- value && !loading ? '!placeholder-primary' : '',
77
+ !loading && value ? '!placeholder-primary' : '',
76
78
  (clearable || RightIcon) && !disabled && value ? '!pr-8' : '',
77
79
  inputClass ?? ''
78
80
  )}
@@ -91,5 +93,6 @@ function clearValue() {
91
93
  getInputRect={inputEl && (() => inputEl!.getBoundingClientRect())}
92
94
  {listAutoWidth}
93
95
  {noItemsMsg}
96
+ {startSnippet}
94
97
  />
95
98
  </div>
@@ -1,3 +1,5 @@
1
+ import { type Snippet } from 'svelte';
2
+ import { type ProcessedItem } from './utils.svelte';
1
3
  declare class __sveltets_Render<Item extends {
2
4
  label?: string;
3
5
  value: any;
@@ -27,6 +29,9 @@ declare class __sveltets_Render<Item extends {
27
29
  onBlur?: (() => void) | undefined;
28
30
  onClear?: (() => void) | undefined;
29
31
  onCreateItem?: ((value: string) => void) | undefined;
32
+ startSnippet?: Snippet<[{
33
+ item: ProcessedItem<Item["value"]>;
34
+ }]> | undefined;
30
35
  };
31
36
  events(): {};
32
37
  slots(): {};
@@ -2,7 +2,7 @@
2
2
  import ConditionalPortal from '../common/drawer/ConditionalPortal.svelte';
3
3
  import { untrack } from 'svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
- let { processedItems: _processedItems, value, filterText, listAutoWidth = true, disabled, disablePortal = false, open, noItemsMsg = 'No items found', class: className = '', ulClass = '', header, getInputRect, onSelectValue } = $props();
5
+ let { processedItems: _processedItems, value, filterText, listAutoWidth = true, disabled, disablePortal = false, open, noItemsMsg = 'No items found', class: className = '', ulClass = '', header, getInputRect, onSelectValue, startSnippet } = $props();
6
6
  let processedItems = $derived(!filterText
7
7
  ? _processedItems
8
8
  : _processedItems?.filter((item) => item.__is_create || item?.label?.toLowerCase().includes(filterText?.toLowerCase())));
@@ -102,6 +102,7 @@ $effect(() => {
102
102
  onSelectValue(item)
103
103
  }}
104
104
  >
105
+ {@render startSnippet?.({ item })}
105
106
  {item.label || '\xa0'}
106
107
  {#if item.subtitle}
107
108
  <div class="text-xs text-tertiary">{item.subtitle}</div>
@@ -15,6 +15,9 @@ declare class __sveltets_Render<T> {
15
15
  header?: Snippet;
16
16
  getInputRect?: (() => DOMRect) | undefined;
17
17
  onSelectValue: (item: ProcessedItem<T>) => void;
18
+ startSnippet?: Snippet<[{
19
+ item: ProcessedItem<T>;
20
+ }]> | undefined;
18
21
  };
19
22
  events(): {};
20
23
  slots(): {};
@@ -1,4 +1,9 @@
1
1
  const changelogs = [
2
+ {
3
+ label: 'Dynamic select for flows',
4
+ href: 'https://www.windmill.dev/changelog/dynamic-select-flows',
5
+ date: '2025-08-08'
6
+ },
2
7
  {
3
8
  label: 'MQTT triggers',
4
9
  href: 'https://www.windmill.dev/changelog/mqtt-triggers',
@@ -11,7 +11,7 @@ import { computeStructuredObjectsAndHeaders, convertJsonToCsv, isEmail, isLink }
11
11
  import Popover from '../Popover.svelte';
12
12
  import DarkModeObserver from '../DarkModeObserver.svelte';
13
13
  import DownloadCsv from './DownloadCsv.svelte';
14
- let { objects = [] } = $props();
14
+ let { objects = [], class: className } = $props();
15
15
  let currentPage = $state(1);
16
16
  let perPage = $state(25);
17
17
  let search = $state('');
@@ -131,7 +131,7 @@ let slicedData = $derived(data.slice((currentPage - 1) * perPage, currentPage *
131
131
 
132
132
  <DarkModeObserver bind:darkMode />
133
133
 
134
- <div class="w-full" bind:clientWidth={wrapperWidth}>
134
+ <div class={className} bind:clientWidth={wrapperWidth}>
135
135
  <div class="flex flex-col gap-2 py-1 my-1" style={`max-width: ${wrapperWidth}px;`}>
136
136
  <div class="flex flex-row justify-between items-center gap-2">
137
137
  <div class="flex flex-row gap-2 items-center whitespace-nowrap w-full">
@@ -242,7 +242,9 @@ let slicedData = $derived(data.slice((currentPage - 1) * perPage, currentPage *
242
242
  on:change={(event) => {
243
243
  currentPage = event.detail
244
244
  }}
245
- showNext={currentPage * perPage < objects.length}
245
+ showNext={objects.length > perPage}
246
+ showPrev={objects.length > perPage}
247
+ hasMore={currentPage * perPage < objects.length}
246
248
  rowCount={data.length}
247
249
  >
248
250
  <Head>
@@ -294,7 +296,7 @@ let slicedData = $derived(data.slice((currentPage - 1) * perPage, currentPage *
294
296
  {/each}
295
297
  </tr>
296
298
  </Head>
297
- <tbody class="divide-y">
299
+ <tbody class="divide-y border-b">
298
300
  {#each slicedData.filter((x) => x) as { _id, rowData }, index (index)}
299
301
  <Row dividable selected={selection.includes(_id) && colSelection.length == 0}>
300
302
  <Cell first={true} last={false} class="w-6">
@@ -1,5 +1,6 @@
1
1
  interface Props {
2
2
  objects?: Array<Record<string, any>>;
3
+ class?: string;
3
4
  }
4
5
  declare const AutoDataTable: import("svelte").Component<Props, {}, "">;
5
6
  type AutoDataTable = ReturnType<typeof AutoDataTable>;
@@ -10,7 +10,7 @@ let footerHeight = $state(0);
10
10
  let tableHeight = $state(0);
11
11
  const dispatch = createEventDispatcher();
12
12
  let tableContainer = $state();
13
- let { paginated = false, currentPage = $bindable(1), showNext = true, loadMore = 0, shouldLoadMore = false, rounded = true, size = 'md', perPage = $bindable(undefined), shouldHidePagination = false, noBorder = false, rowCount = undefined, hasMore = true, contentHeight = $bindable(0), tableFixed = false, infiniteScroll = undefined, neverShowLoader = false, loading = false, loadingMore = false, children, emptyMessage } = $props();
13
+ let { paginated = false, currentPage = $bindable(1), showNext = true, showPrev = true, loadMore = 0, shouldLoadMore = false, rounded = true, size = 'md', perPage = $bindable(undefined), shouldHidePagination = false, noBorder = false, rowCount = undefined, hasMore = true, contentHeight = $bindable(0), tableFixed = false, infiniteScroll = undefined, neverShowLoader = false, loading = false, loadingMore = false, children, emptyMessage } = $props();
14
14
  setContext('datatable', {
15
15
  size
16
16
  });
@@ -98,15 +98,17 @@ $effect(() => {
98
98
  <option value={1000}>1000</option>
99
99
  </select>
100
100
  {/if}
101
- <Button
102
- color="light"
103
- size="xs2"
104
- on:click={() => dispatch('previous')}
105
- disabled={currentPage === 1}
106
- startIcon={{ icon: ArrowLeftIcon }}
107
- >
108
- Previous
109
- </Button>
101
+ {#if showPrev}
102
+ <Button
103
+ color="light"
104
+ size="xs2"
105
+ on:click={() => dispatch('previous')}
106
+ disabled={currentPage === 1}
107
+ startIcon={{ icon: ArrowLeftIcon }}
108
+ >
109
+ Previous
110
+ </Button>
111
+ {/if}
110
112
  {#if showNext}
111
113
  <Button
112
114
  color="light"
@@ -5,6 +5,7 @@ interface Props {
5
5
  paginated?: boolean;
6
6
  currentPage?: number;
7
7
  showNext?: boolean;
8
+ showPrev?: boolean;
8
9
  loadMore?: number;
9
10
  shouldLoadMore?: boolean;
10
11
  rounded?: boolean;
@@ -1,9 +1,9 @@
1
- import type { Retry } from '../../gen';
1
+ import type { ErrorHandler, Retry } from '../../gen';
2
2
  type $$ComponentProps = {
3
3
  optionTabSelected: 'error_handler' | 'retries' | string;
4
4
  itemKind: 'script' | 'flow';
5
5
  can_write: boolean;
6
- errorHandlerSelected: 'custom' | 'slack' | 'teams';
6
+ errorHandlerSelected: ErrorHandler;
7
7
  error_handler_path: string | undefined;
8
8
  error_handler_args: Record<string, any>;
9
9
  retry: Retry | undefined;
@@ -57,7 +57,7 @@ async function loadAllSubscriptionFromGooglePubSubTopic() {
57
57
  loadingSubscription = false;
58
58
  }
59
59
  }
60
- let { can_write = false, headless = false, isValid = $bindable(false), gcp_resource_path = $bindable(''), subscription_id = $bindable(''), topic_id = $bindable(''), delivery_type = $bindable('pull'), delivery_config = $bindable(), subscription_mode = $bindable('create_update'), base_endpoint = $bindable(getBaseUrl()), path = '', showTestingBadge = false, cloud_subscription_id = $bindable(''), create_update_subscription_id = $bindable('') } = $props();
60
+ let { can_write = false, headless = false, isValid = $bindable(false), gcp_resource_path = $bindable(''), subscription_id = $bindable(''), topic_id = $bindable(''), delivery_type = $bindable('pull'), delivery_config = $bindable(), subscription_mode = $bindable('create_update'), base_endpoint = $bindable(getBaseUrl()), auto_acknowledge_msg = $bindable(true), path = '', showTestingBadge = false, cloud_subscription_id = $bindable(''), create_update_subscription_id = $bindable('') } = $props();
61
61
  if (gcp_resource_path) {
62
62
  loadAllPubSubTopicsFromProject();
63
63
  }
@@ -14,7 +14,8 @@ interface Props {
14
14
  showTestingBadge?: boolean;
15
15
  cloud_subscription_id?: string;
16
16
  create_update_subscription_id?: string;
17
+ auto_acknowledge_msg: boolean;
17
18
  }
18
- declare const GcpTriggerEditorConfigSection: import("svelte").Component<Props, {}, "base_endpoint" | "gcp_resource_path" | "topic_id" | "subscription_id" | "delivery_type" | "subscription_mode" | "delivery_config" | "isValid" | "cloud_subscription_id" | "create_update_subscription_id">;
19
+ declare const GcpTriggerEditorConfigSection: import("svelte").Component<Props, {}, "base_endpoint" | "gcp_resource_path" | "topic_id" | "subscription_id" | "delivery_type" | "subscription_mode" | "delivery_config" | "auto_acknowledge_msg" | "isValid" | "cloud_subscription_id" | "create_update_subscription_id">;
19
20
  type GcpTriggerEditorConfigSection = ReturnType<typeof GcpTriggerEditorConfigSection>;
20
21
  export default GcpTriggerEditorConfigSection;
@@ -19,6 +19,8 @@ import { base } from '../../../base';
19
19
  import Tabs from '../../common/tabs/Tabs.svelte';
20
20
  import Tab from '../../common/tabs/Tab.svelte';
21
21
  import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte';
22
+ import Subsection from '../../Subsection.svelte';
23
+ import Toggle from '../../Toggle.svelte';
22
24
  let drawer = $state(undefined);
23
25
  let is_flow = $state(false);
24
26
  let initialPath = $state('');
@@ -43,6 +45,7 @@ let subscription_mode = $state('create_update');
43
45
  let initialConfig = undefined;
44
46
  let deploymentLoading = $state(false);
45
47
  let base_endpoint = $derived(`${window.location.origin}${base}`);
48
+ let auto_acknowledge_msg = $state(true);
46
49
  let optionTabSelected = $state('error_handler');
47
50
  let errorHandlerSelected = $state('slack');
48
51
  let error_handler_path = $state();
@@ -95,6 +98,7 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
95
98
  error_handler_path = defaultValues?.error_handler_path ?? undefined;
96
99
  error_handler_args = defaultValues?.error_handler_args ?? {};
97
100
  retry = defaultValues?.retry ?? undefined;
101
+ auto_acknowledge_msg = defaultValues?.auto_acknowledge_msg ?? true;
98
102
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
99
103
  }
100
104
  finally {
@@ -135,6 +139,7 @@ async function loadTriggerConfig(cfg) {
135
139
  error_handler_path = cfg?.error_handler_path;
136
140
  error_handler_args = cfg?.error_handler_args ?? {};
137
141
  retry = cfg?.retry;
142
+ auto_acknowledge_msg = cfg?.auto_acknowledge_msg ?? true;
138
143
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
139
144
  }
140
145
  async function updateTrigger() {
@@ -165,7 +170,8 @@ function getGcpConfig() {
165
170
  is_flow,
166
171
  error_handler_path,
167
172
  error_handler_args,
168
- retry
173
+ retry,
174
+ auto_acknowledge_msg
169
175
  };
170
176
  }
171
177
  function getGcpCaptureConfig() {
@@ -176,6 +182,7 @@ function getGcpCaptureConfig() {
176
182
  delivery_type,
177
183
  delivery_config,
178
184
  base_endpoint,
185
+ auto_acknowledge_msg,
179
186
  topic_id,
180
187
  path
181
188
  };
@@ -313,7 +320,7 @@ $effect(() => {
313
320
  color="dark"
314
321
  size="xs"
315
322
  disabled={!can_write}
316
- href={itemKind === 'flow' ? '/flows/add?hub=68' : '/scripts/add?hub=hub%2F19662'}
323
+ href={itemKind === 'flow' ? '/flows/add?hub=68' : '/scripts/add?hub=hub%2F19796'}
317
324
  target="_blank">Create from template</Button
318
325
  >
319
326
  {/if}
@@ -329,6 +336,7 @@ $effect(() => {
329
336
  bind:delivery_config
330
337
  bind:topic_id
331
338
  bind:subscription_mode
339
+ bind:auto_acknowledge_msg
332
340
  {path}
333
341
  cloud_subscription_id={subscription_id}
334
342
  create_update_subscription_id={subscription_id}
@@ -341,19 +349,50 @@ $effect(() => {
341
349
  <div class="flex flex-col gap-4">
342
350
  <div class="min-h-96">
343
351
  <Tabs bind:selected={optionTabSelected}>
352
+ <Tab value="settings">Settings</Tab>
344
353
  <Tab value="error_handler">Error Handler</Tab>
345
354
  <Tab value="retries">Retries</Tab>
346
355
  </Tabs>
347
356
  <div class="mt-4">
348
- <TriggerRetriesAndErrorHandler
349
- {optionTabSelected}
350
- {itemKind}
351
- {can_write}
352
- bind:errorHandlerSelected
353
- bind:error_handler_path
354
- bind:error_handler_args
355
- bind:retry
356
- />
357
+ {#if optionTabSelected === 'settings'}
358
+ <div class="flex flex-col gap-4">
359
+ {#if delivery_type === 'pull'}
360
+ <Subsection
361
+ label="Auto-acknowledge messages"
362
+ tooltip="When enabled (recommended), Windmill automatically acknowledges Pub/Sub messages after successful processing. When disabled, your script/flow must explicitly acknowledge each message."
363
+ >
364
+ <div class="mt-2">
365
+ <Toggle bind:checked={auto_acknowledge_msg} />
366
+ </div>
367
+ {#if !auto_acknowledge_msg}
368
+ <div class="mt-3">
369
+ <Alert size="xs" type="warning" title="Manual Acknowledgment Required">
370
+ You must acknowledge each message in your script/flow code using the
371
+ `ack_id` provided in the payload data. If messages are not acknowledged
372
+ within the acknowledgment deadline (by default 600 seconds), GCP will
373
+ automatically redeliver them in 600 seconds, causing Windmill to
374
+ reprocess the same messages repeatedly.
375
+ </Alert>
376
+ </div>
377
+ {/if}
378
+ </Subsection>
379
+ {:else}
380
+ <div class="flex items-center justify-center h-32 text-tertiary">
381
+ No settings available for push delivery type
382
+ </div>
383
+ {/if}
384
+ </div>
385
+ {:else}
386
+ <TriggerRetriesAndErrorHandler
387
+ {optionTabSelected}
388
+ {itemKind}
389
+ {can_write}
390
+ bind:errorHandlerSelected
391
+ bind:error_handler_path
392
+ bind:error_handler_args
393
+ bind:retry
394
+ />
395
+ {/if}
357
396
  </div>
358
397
  </div>
359
398
  </div>
@@ -22,6 +22,7 @@ export async function saveGcpTriggerFromCfg(initialPath, cfg, edit, workspace, u
22
22
  script_path: cfg.script_path,
23
23
  enabled: cfg.enabled,
24
24
  is_flow: cfg.is_flow,
25
+ auto_acknowledge_msg: cfg.auto_acknowledge_msg,
25
26
  ...errorHandlerAndRetries
26
27
  };
27
28
  if (edit) {
@@ -37,7 +37,7 @@ export async function saveHttpRouteFromCfg(initialPath, routeCfg, edit, workspac
37
37
  summary: routeCfg.summary,
38
38
  error_handler_path: routeCfg.error_handler_path,
39
39
  error_handler_args: routeCfg.error_handler_path ? routeCfg.error_handler_args : undefined,
40
- retry: routeCfg.retry
40
+ retry: routeCfg.retry,
41
41
  };
42
42
  try {
43
43
  if (edit) {
@@ -6,7 +6,7 @@ export async function saveKafkaTriggerFromCfg(initialPath, cfg, edit, workspace,
6
6
  ? {
7
7
  error_handler_path: cfg.error_handler_path,
8
8
  error_handler_args: cfg.error_handler_path ? cfg.error_handler_args : undefined,
9
- retry: cfg.retry
9
+ retry: cfg.retry,
10
10
  }
11
11
  : {};
12
12
  const requestBody = {
@@ -6,7 +6,7 @@ export async function saveMqttTriggerFromCfg(initialPath, cfg, edit, workspace,
6
6
  ? {
7
7
  error_handler_path: cfg.error_handler_path,
8
8
  error_handler_args: cfg.error_handler_path ? cfg.error_handler_args : undefined,
9
- retry: cfg.retry
9
+ retry: cfg.retry,
10
10
  }
11
11
  : {};
12
12
  const requestBody = {
@@ -6,7 +6,7 @@ export async function saveNatsTriggerFromCfg(initialPath, cfg, edit, workspace,
6
6
  ? {
7
7
  error_handler_path: cfg.error_handler_path,
8
8
  error_handler_args: cfg.error_handler_path ? cfg.error_handler_args : undefined,
9
- retry: cfg.retry
9
+ retry: cfg.retry,
10
10
  }
11
11
  : {};
12
12
  const requestBody = {
@@ -85,7 +85,7 @@ export async function savePostgresTriggerFromCfg(initialPath, config, edit, work
85
85
  ? {
86
86
  error_handler_path: config.error_handler_path,
87
87
  error_handler_args: config.error_handler_path ? config.error_handler_args : undefined,
88
- retry: config.retry
88
+ retry: config.retry,
89
89
  }
90
90
  : {};
91
91
  const requestBody = {
@@ -6,7 +6,7 @@ export async function saveSqsTriggerFromCfg(initialPath, cfg, edit, workspace, u
6
6
  ? {
7
7
  error_handler_path: cfg.error_handler_path,
8
8
  error_handler_args: cfg.error_handler_path ? cfg.error_handler_args : undefined,
9
- retry: cfg.retry
9
+ retry: cfg.retry,
10
10
  }
11
11
  : {};
12
12
  const requestBody = {
@@ -398,7 +398,8 @@ export function filterDraftTriggers(savedValue, triggersState) {
398
398
  export function getHandlerType(scriptPath) {
399
399
  const handlerMap = {
400
400
  teams: '/workspace-or-schedule-error-handler-teams',
401
- slack: '/workspace-or-schedule-error-handler-slack'
401
+ slack: '/workspace-or-schedule-error-handler-slack',
402
+ email: '/workspace-or-error-handler-email'
402
403
  };
403
404
  for (const [type, suffix] of Object.entries(handlerMap)) {
404
405
  if (scriptPath.startsWith('hub/') && scriptPath.endsWith(suffix)) {
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { run } from 'svelte/legacy';
2
- import Label from '../../Label.svelte';
1
+ <script lang="ts">import Label from '../../Label.svelte';
3
2
  import Tooltip from '../../Tooltip.svelte';
4
3
  import ToggleButtonGroup from '../../common/toggleButton-v2/ToggleButtonGroup.svelte';
5
4
  import ToggleButton from '../../common/toggleButton-v2/ToggleButton.svelte';
@@ -10,7 +9,7 @@ import { ArrowDownRight, ArrowUpRight, Clipboard } from 'lucide-svelte';
10
9
  import { Highlight } from 'svelte-highlight';
11
10
  import { typescript } from 'svelte-highlight/languages';
12
11
  import ClipboardPanel from '../../details/ClipboardPanel.svelte';
13
- import { copyToClipboard, isObject } from '../../../utils';
12
+ import { copyToClipboard, isObject, readFieldsRecursively } from '../../../utils';
14
13
  // import { page } from '$app/stores'
15
14
  import { base } from '../../../base';
16
15
  import TriggerTokens from '../TriggerTokens.svelte';
@@ -21,7 +20,28 @@ let { isFlow = false, path = '', hash = undefined, token = $bindable(''), runnab
21
20
  let webhooks = $derived(isFlow ? computeFlowWebhooks(path) : computeScriptWebhooks(hash, path));
22
21
  let selectedTab = $state('rest');
23
22
  let userSettings = $state();
24
- let url = $state('');
23
+ let webhookType = $state(DEFAULT_WEBHOOK_TYPE);
24
+ let requestType = $state(isFlow ? 'path' : 'path');
25
+ let tokenType = $state('headers');
26
+ $effect(() => {
27
+ if (webhookType === 'async' && requestType === 'get_path') {
28
+ requestType = hash ? 'hash' : 'path';
29
+ }
30
+ });
31
+ let cleanedRunnableArgs = $derived.by(() => {
32
+ readFieldsRecursively(runnableArgs);
33
+ return isObject(runnableArgs) && 'wm_trigger' in runnableArgs
34
+ ? Object.fromEntries(Object.entries(runnableArgs).filter(([key]) => key !== 'wm_trigger'))
35
+ : runnableArgs;
36
+ });
37
+ let url = $derived(webhooks[webhookType][requestType] +
38
+ (tokenType === 'query'
39
+ ? `?token=${token}${requestType === 'get_path'
40
+ ? `&payload=${encodeURIComponent(btoa(JSON.stringify(cleanedRunnableArgs ?? {})))}`
41
+ : ''}`
42
+ : `${requestType === 'get_path'
43
+ ? `?payload=${encodeURIComponent(btoa(JSON.stringify(cleanedRunnableArgs ?? {})))}`
44
+ : ''}`));
25
45
  function computeScriptWebhooks(hash, path) {
26
46
  let webhookBase = `${location.origin}${base}/api/w/${$workspaceStore}/jobs`;
27
47
  return {
@@ -50,9 +70,6 @@ function computeFlowWebhooks(path) {
50
70
  }
51
71
  };
52
72
  }
53
- let webhookType = $state(DEFAULT_WEBHOOK_TYPE);
54
- let requestType = $state(isFlow ? 'path' : 'path');
55
- let tokenType = $state('headers');
56
73
  function headers() {
57
74
  const headers = {};
58
75
  if (requestType != 'get_path') {
@@ -155,25 +172,6 @@ while true; do
155
172
  fi
156
173
  done`}`;
157
174
  }
158
- run(() => {
159
- if (webhookType === 'async' && requestType === 'get_path') {
160
- requestType = hash ? 'hash' : 'path';
161
- }
162
- });
163
- let cleanedRunnableArgs = $derived(isObject(runnableArgs) && 'wm_trigger' in runnableArgs
164
- ? Object.fromEntries(Object.entries(runnableArgs).filter(([key]) => key !== 'wm_trigger'))
165
- : runnableArgs);
166
- run(() => {
167
- url =
168
- webhooks[webhookType][requestType] +
169
- (tokenType === 'query'
170
- ? `?token=${token}${requestType === 'get_path'
171
- ? `&payload=${encodeURIComponent(btoa(JSON.stringify(cleanedRunnableArgs ?? {})))}`
172
- : ''}`
173
- : `${requestType === 'get_path'
174
- ? `?payload=${encodeURIComponent(btoa(JSON.stringify(cleanedRunnableArgs ?? {})))}`
175
- : ''}`);
176
- });
177
175
  </script>
178
176
 
179
177
  <UserSettings
@@ -4,12 +4,6 @@ import HighlightTheme from '../../HighlightTheme.svelte';
4
4
  import WebhooksConfigSection from './WebhooksConfigSection.svelte';
5
5
  import { Section } from '../../common';
6
6
  let { token, args = {}, scopes = [], isFlow = false, hash = undefined, path, newItem = false } = $props();
7
- let data = $derived({
8
- hash,
9
- token,
10
- scopes,
11
- args
12
- });
13
7
  </script>
14
8
 
15
9
  <HighlightTheme />
@@ -25,13 +19,5 @@ let data = $derived({
25
19
  {isFlow ? 'flow' : 'script'}.
26
20
  </Alert>
27
21
  {/if}
28
-
29
- <WebhooksConfigSection
30
- {isFlow}
31
- {path}
32
- hash={data?.hash}
33
- token={data?.token}
34
- runnableArgs={data?.args}
35
- scopes={data?.scopes}
36
- />
22
+ <WebhooksConfigSection {isFlow} {path} {hash} {token} runnableArgs={args} {scopes} />
37
23
  </Section>
@@ -8,7 +8,7 @@ export async function saveWebsocketTriggerFromCfg(initialPath, triggerCfg, edit,
8
8
  error_handler_args: triggerCfg.error_handler_path
9
9
  ? triggerCfg.error_handler_args
10
10
  : undefined,
11
- retry: triggerCfg.retry
11
+ retry: triggerCfg.retry,
12
12
  }
13
13
  : {};
14
14
  const requestBody = {