windmill-components 1.532.0 → 1.542.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +60 -27
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/Auth0Setting.svelte +8 -3
  8. package/package/components/ConcurrentJobsChart.svelte +36 -48
  9. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  10. package/package/components/CustomPopover.svelte.d.ts +1 -1
  11. package/package/components/Dev.svelte +5 -4
  12. package/package/components/DiffDrawer.svelte +2 -2
  13. package/package/components/DiffEditor.svelte +34 -37
  14. package/package/components/DiffEditor.svelte.d.ts +23 -39
  15. package/package/components/DropdownSelect.svelte +26 -0
  16. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  17. package/package/components/DropdownV2Inner.svelte +1 -1
  18. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  19. package/package/components/DynamicInput.svelte.d.ts +11 -0
  20. package/package/components/EditableSchemaForm.svelte +155 -140
  21. package/package/components/EditableSchemaForm.svelte.d.ts +6 -7
  22. package/package/components/Editor.svelte +101 -87
  23. package/package/components/Editor.svelte.d.ts +7 -1
  24. package/package/components/EditorBar.svelte +2 -5
  25. package/package/components/FlowBuilder.svelte +10 -7
  26. package/package/components/FlowLogRow.svelte +64 -0
  27. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  28. package/package/components/FlowLogViewer.svelte +406 -373
  29. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  30. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  31. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  32. package/package/components/FlowPreviewContent.svelte +3 -3
  33. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  34. package/package/components/FlowStatusViewer.svelte +28 -0
  35. package/package/components/FlowStatusViewerInner.svelte +106 -23
  36. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  37. package/package/components/FolderPicker.svelte +1 -1
  38. package/package/components/InputTransformForm.svelte +20 -10
  39. package/package/components/JobArgs.svelte +1 -1
  40. package/package/components/JobLoader.svelte.d.ts +1 -1
  41. package/package/components/JobStatus.svelte +2 -0
  42. package/package/components/LogSnippetViewer.svelte +3 -3
  43. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  44. package/package/components/LogViewer.svelte +87 -71
  45. package/package/components/LogViewer.svelte.d.ts +1 -0
  46. package/package/components/ModulePreview.svelte +2 -1
  47. package/package/components/ModulePreview.svelte.d.ts +1 -0
  48. package/package/components/ModulePreviewForm.svelte +72 -65
  49. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  50. package/package/components/ModuleTest.svelte +6 -5
  51. package/package/components/ModuleTest.svelte.d.ts +1 -0
  52. package/package/components/OktaSetting.svelte +8 -3
  53. package/package/components/Path.svelte +7 -1
  54. package/package/components/Path.svelte.d.ts +1 -1
  55. package/package/components/Portal.svelte +11 -7
  56. package/package/components/Portal.svelte.d.ts +19 -39
  57. package/package/components/PrefixedInput.svelte +120 -0
  58. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  59. package/package/components/QueuePosition.svelte +81 -0
  60. package/package/components/QueuePosition.svelte.d.ts +8 -0
  61. package/package/components/ResourceNarrowing.svelte +13 -0
  62. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  63. package/package/components/ResourceTypePicker.svelte +49 -74
  64. package/package/components/RunChart.svelte +74 -89
  65. package/package/components/RunChart.svelte.d.ts +10 -22
  66. package/package/components/RunForm.svelte +2 -2
  67. package/package/components/RunForm.svelte.d.ts +1 -1
  68. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  69. package/package/components/S3FilePicker.svelte +1 -1
  70. package/package/components/SchemaForm.svelte +1 -2
  71. package/package/components/SchemaForm.svelte.d.ts +2 -2
  72. package/package/components/ScriptBuilder.svelte +3 -2
  73. package/package/components/ScriptEditor.svelte +25 -10
  74. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  75. package/package/components/ServiceLogsInner.svelte +1 -1
  76. package/package/components/ShareModal.svelte.d.ts +1 -1
  77. package/package/components/SimpleEditor.svelte +4 -68
  78. package/package/components/StringTypeNarrowing.svelte +5 -10
  79. package/package/components/TemplateEditor.svelte +2 -16
  80. package/package/components/TimeAgo.svelte +1 -1
  81. package/package/components/TimeAgo.svelte.d.ts +1 -0
  82. package/package/components/Toggle.svelte +2 -1
  83. package/package/components/Toggle.svelte.d.ts +2 -1
  84. package/package/components/WorkerRepl.svelte +1 -1
  85. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  86. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  87. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  88. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  89. package/package/components/apps/components/display/table/utils.js +36 -5
  90. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  91. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  92. package/package/components/apps/editor/AppEditor.svelte +4 -3
  93. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  94. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  95. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  96. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  97. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  98. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  99. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  103. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +29 -4
  104. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  105. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  106. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  107. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  108. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  109. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  111. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  112. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  113. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  114. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  115. package/package/components/common/OnChange.svelte.d.ts +11 -4
  116. package/package/components/common/badge/Badge.svelte +9 -2
  117. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  118. package/package/components/common/button/model.d.ts +1 -1
  119. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  120. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  121. package/package/components/common/drawer/Disposable.svelte +45 -26
  122. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  123. package/package/components/common/drawer/Drawer.svelte +17 -14
  124. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  125. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  126. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  127. package/package/components/common/tabs/TabContent.svelte +2 -7
  128. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  129. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  130. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  131. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  132. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  133. package/package/components/copilot/MetadataGen.svelte +14 -3
  134. package/package/components/copilot/chat/AIChatInput.svelte +0 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +26 -104
  136. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  137. package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
  138. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
  139. package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
  140. package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
  141. package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
  142. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  143. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  144. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  145. package/package/components/copilot/chat/anthropic.js +208 -0
  146. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  147. package/package/components/copilot/chat/api/apiTools.js +10 -7
  148. package/package/components/copilot/chat/api/core.d.ts +1 -1
  149. package/package/components/copilot/chat/api/core.js +7 -2
  150. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  151. package/package/components/copilot/chat/ask/core.js +7 -2
  152. package/package/components/copilot/chat/context.d.ts +7 -2
  153. package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
  154. package/package/components/copilot/chat/flow/core.d.ts +12 -1
  155. package/package/components/copilot/chat/flow/core.js +133 -5
  156. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  157. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  158. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  159. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  160. package/package/components/copilot/chat/monaco-adapter.d.ts +23 -4
  161. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  162. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  163. package/package/components/copilot/chat/navigator/core.js +7 -2
  164. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  165. package/package/components/copilot/chat/script/core.d.ts +5 -4
  166. package/package/components/copilot/chat/script/core.js +134 -21
  167. package/package/components/copilot/chat/shared.d.ts +10 -9
  168. package/package/components/copilot/chat/shared.js +24 -12
  169. package/package/components/copilot/lib.d.ts +29 -8
  170. package/package/components/copilot/lib.js +211 -31
  171. package/package/components/copilot/shared.d.ts +1 -1
  172. package/package/components/copilot/shared.js +16 -10
  173. package/package/components/flows/FlowEditor.svelte +4 -2
  174. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  175. package/package/components/flows/FlowModuleIcon.svelte +8 -8
  176. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  177. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  178. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  179. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  180. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  181. package/package/components/flows/content/FlowInput.svelte +36 -39
  182. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  183. package/package/components/flows/content/FlowLoop.svelte +7 -0
  184. package/package/components/flows/content/FlowModuleComponent.svelte +42 -46
  185. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  186. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  187. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  188. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -18
  189. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  190. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  191. package/package/components/flows/content/FlowRetries.svelte +108 -3
  192. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  193. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  194. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  195. package/package/components/flows/dfs.d.ts +1 -1
  196. package/package/components/flows/dfs.js +6 -6
  197. package/package/components/flows/flowInfers.js +15 -42
  198. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  199. package/package/components/flows/flowStore.d.ts +45 -1
  200. package/package/components/flows/flowStore.js +1 -1
  201. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  202. package/package/components/flows/map/FlowModuleSchemaItem.svelte +73 -80
  203. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  204. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  205. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  206. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  207. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  208. package/package/components/flows/map/MapItem.svelte +8 -4
  209. package/package/components/flows/map/VirtualItem.svelte +1 -1
  210. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  211. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  212. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  213. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  214. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  215. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  216. package/package/components/flows/types.d.ts +16 -3
  217. package/package/components/flows/utils.js +3 -0
  218. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  219. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  220. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  221. package/package/components/graph/FlowGraphV2.svelte +1 -1
  222. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  223. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  224. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  225. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  226. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  227. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  228. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  229. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  230. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  231. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  232. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  233. package/package/components/home/ItemsList.svelte +17 -13
  234. package/package/components/home/TreeView.svelte +21 -27
  235. package/package/components/home/TreeView.svelte.d.ts +2 -29
  236. package/package/components/home/TreeViewRoot.svelte +11 -23
  237. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  238. package/package/components/icons/GitIcon.svelte +10 -2
  239. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  240. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  241. package/package/components/meltComponents/Popover.svelte +23 -3
  242. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  243. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  244. package/package/components/monacoLanguagesOptions.js +109 -0
  245. package/package/components/propertyPicker/ObjectViewer.svelte +18 -5
  246. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  247. package/package/components/propertyPicker/utils.js +14 -7
  248. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  249. package/package/components/runs/JobRunsPreview.svelte +212 -177
  250. package/package/components/runs/JobsLoader.svelte +2 -2
  251. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  252. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  253. package/package/components/runs/RunBadges.svelte +100 -0
  254. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  255. package/package/components/runs/RunLabels.svelte +86 -0
  256. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  257. package/package/components/runs/RunOption.svelte +20 -0
  258. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  259. package/package/components/runs/RunRow.svelte +239 -151
  260. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  261. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  262. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  263. package/package/components/runs/RunsFilter.svelte +369 -243
  264. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  265. package/package/components/runs/RunsQueue.svelte +96 -25
  266. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  267. package/package/components/runs/RunsTable.svelte +62 -71
  268. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  269. package/package/components/runs/runs-grid.css +95 -0
  270. package/package/components/schema/AddPropertyV2.svelte +2 -7
  271. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  272. package/package/components/schema/EditableSchemaDrawer.svelte +121 -127
  273. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  274. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  275. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  276. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  277. package/package/components/schema/FlowPropertyEditor.svelte +195 -236
  278. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  279. package/package/components/schema/PropertyEditor.svelte +33 -35
  280. package/package/components/schema/SchemaFormDND.svelte +11 -10
  281. package/package/components/schema/SchemaFormDND.svelte.d.ts +4 -3
  282. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  283. package/package/components/search/GlobalSearchModal.svelte +8 -1
  284. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  285. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  286. package/package/components/select/Select.svelte +2 -1
  287. package/package/components/select/Select.svelte.d.ts +25 -13
  288. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  289. package/package/components/settings/PremiumInfo.svelte +7 -2
  290. package/package/components/settings/TokenDisplay.svelte +1 -1
  291. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  292. package/package/components/sidebar/SidebarContent.svelte +48 -2
  293. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  294. package/package/components/toast.js +6 -3
  295. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  296. package/package/components/triggers/CaptureWrapper.svelte +21 -16
  297. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  298. package/package/components/triggers/TriggerLabel.svelte +8 -0
  299. package/package/components/triggers/TriggerTokens.svelte +1 -1
  300. package/package/components/triggers/TriggersEditor.svelte +9 -5
  301. package/package/components/triggers/TriggersTable.svelte +2 -2
  302. package/package/components/triggers/TriggersWrapper.svelte +17 -5
  303. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  304. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  305. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  306. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  307. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  308. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  309. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  310. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  311. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  312. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  313. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  314. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  315. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  316. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  317. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  318. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  319. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  320. package/package/components/triggers/email/utils.d.ts +4 -0
  321. package/package/components/triggers/email/utils.js +52 -0
  322. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  323. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  324. package/package/components/triggers/http/utils.js +1 -1
  325. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  326. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  327. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  328. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  329. package/package/components/triggers/triggers.svelte.js +24 -2
  330. package/package/components/triggers/utils.js +19 -5
  331. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  332. package/package/components/triggers.d.ts +1 -1
  333. package/package/components/triggers.js +2 -0
  334. package/package/components/wizards/AgGridWizard.svelte +85 -80
  335. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  336. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  337. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  338. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  339. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  340. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  341. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  342. package/package/gen/core/OpenAPI.js +1 -1
  343. package/package/gen/schemas.gen.d.ts +142 -3
  344. package/package/gen/schemas.gen.js +144 -3
  345. package/package/gen/services.gen.d.ts +129 -1
  346. package/package/gen/services.gen.js +267 -1
  347. package/package/gen/types.gen.d.ts +434 -8
  348. package/package/hubPaths.json +6 -2
  349. package/package/infer.js +1 -1
  350. package/package/keyboardChain.d.ts +5 -0
  351. package/package/keyboardChain.js +40 -0
  352. package/package/script_helpers.d.ts +2 -2
  353. package/package/script_helpers.js +2 -0
  354. package/package/services/JobManager.js +2 -2
  355. package/package/stores.d.ts +4 -1
  356. package/package/stores.js +16 -6
  357. package/package/utils/workspaceHierarchy.d.ts +27 -0
  358. package/package/utils/workspaceHierarchy.js +101 -0
  359. package/package/utils.d.ts +6 -3
  360. package/package/utils.js +30 -15
  361. package/package/workspace_settings.js +2 -3
  362. package/package.json +10 -12
  363. package/package/components/DynSelect.svelte.d.ts +0 -11
  364. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
  365. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  366. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  367. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  368. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  369. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  370. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  371. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -0,0 +1,335 @@
1
+ <script lang="ts">import { Button } from '../../common';
2
+ import Drawer from '../../common/drawer/Drawer.svelte';
3
+ import DrawerContent from '../../common/drawer/DrawerContent.svelte';
4
+ import Path from '../../Path.svelte';
5
+ import Required from '../../Required.svelte';
6
+ import ScriptPicker from '../../ScriptPicker.svelte';
7
+ import { EmailTriggerService } from '../../../gen';
8
+ import { usedTriggerKinds, userStore, workspaceStore } from '../../../stores';
9
+ import { canWrite, emptyString, sendUserToast } from '../../../utils';
10
+ import Section from '../../Section.svelte';
11
+ import { Loader2 } from 'lucide-svelte';
12
+ import Label from '../../Label.svelte';
13
+ import EmailTriggerEditorConfigSection from './EmailTriggerEditorConfigSection.svelte';
14
+ import TriggerEditorToolbar from '../TriggerEditorToolbar.svelte';
15
+ import { getHandlerType, handleConfigChange } from '../utils';
16
+ import { untrack } from 'svelte';
17
+ import Tabs from '../../common/tabs/Tabs.svelte';
18
+ import Tab from '../../common/tabs/Tab.svelte';
19
+ import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte';
20
+ import { saveEmailTriggerFromCfg } from './utils';
21
+ let { useDrawer = true, hideTarget = false, description = undefined, isEditor = false, customLabel = undefined, allowDraft = false, isDeployed = false, onConfigChange = undefined, onCaptureConfigChange = undefined, onUpdate = undefined, onDelete = undefined, onReset = undefined, trigger = undefined, customSaveBehavior = undefined } = $props();
22
+ // Form data state
23
+ let initialPath = $state('');
24
+ let edit = $state(true);
25
+ let itemKind = $state('script');
26
+ let is_flow = $state(false);
27
+ let script_path = $state('');
28
+ let initialScriptPath = $state('');
29
+ let fixedScriptPath = $state('');
30
+ let path = $state('');
31
+ let pathError = $state('');
32
+ let isValid = $state(false);
33
+ let dirtyLocalPart = $state(false);
34
+ let dirtyPath = $state(false);
35
+ let local_part = $state('');
36
+ let workspaced_local_part = $state(false);
37
+ let drawerLoading = $state(true);
38
+ let showLoader = $state(false);
39
+ let can_write = $state(true);
40
+ let extraPerms = $state(undefined);
41
+ let error_handler_path = $state();
42
+ let error_handler_args = $state({});
43
+ let retry = $state();
44
+ // Component references
45
+ let drawer = $state(undefined);
46
+ let initialConfig = undefined;
47
+ let deploymentLoading = $state(false);
48
+ let optionTabSelected = $state('error_handler');
49
+ let errorHandlerSelected = $state('slack');
50
+ const isAdmin = $derived($userStore?.is_admin || $userStore?.is_super_admin);
51
+ const routeConfig = $derived.by(getEmailTriggerConfig);
52
+ const captureConfig = $derived.by(isEditor ? getCaptureConfig : () => ({}));
53
+ const saveDisabled = $derived(drawerLoading || !can_write || pathError != '' || !isValid || emptyString(script_path));
54
+ $effect(() => {
55
+ is_flow = itemKind === 'flow';
56
+ });
57
+ export async function openEdit(ePath, isFlow, defaultConfig) {
58
+ drawerLoading = true;
59
+ let loader = setTimeout(() => {
60
+ showLoader = true;
61
+ }, 100); // if loading takes less than 100ms, we don't show the loader
62
+ try {
63
+ drawer?.openDrawer();
64
+ initialPath = ePath;
65
+ path = ePath;
66
+ itemKind = isFlow ? 'flow' : 'script';
67
+ edit = true;
68
+ dirtyPath = false;
69
+ dirtyLocalPart = false;
70
+ await loadTrigger(defaultConfig);
71
+ }
72
+ catch (err) {
73
+ sendUserToast(`Could not load email trigger: ${err}`, true);
74
+ }
75
+ finally {
76
+ if (!defaultConfig) {
77
+ // If the email trigger is loaded from the backend, we to set the initial config
78
+ initialConfig = structuredClone($state.snapshot(getEmailTriggerConfig()));
79
+ }
80
+ clearTimeout(loader);
81
+ drawerLoading = false;
82
+ showLoader = false;
83
+ }
84
+ }
85
+ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
86
+ drawerLoading = true;
87
+ let loader = setTimeout(() => {
88
+ showLoader = true;
89
+ }, 100); // if loading takes less than 100ms, we don't show the loader
90
+ try {
91
+ drawer?.openDrawer();
92
+ is_flow = defaultValues?.is_flow ?? nis_flow;
93
+ edit = false;
94
+ itemKind = nis_flow ? 'flow' : 'script';
95
+ local_part = defaultValues?.local_part ?? '';
96
+ dirtyLocalPart = false;
97
+ initialScriptPath = '';
98
+ fixedScriptPath = fixedScriptPath_ ?? '';
99
+ script_path = fixedScriptPath;
100
+ path = defaultValues?.path ?? '';
101
+ initialPath = '';
102
+ dirtyPath = false;
103
+ workspaced_local_part = defaultValues?.workspaced_local_part ?? false;
104
+ error_handler_path = defaultValues?.error_handler_path ?? undefined;
105
+ error_handler_args = defaultValues?.error_handler_args ?? {};
106
+ retry = defaultValues?.retry ?? undefined;
107
+ errorHandlerSelected = getHandlerType(error_handler_path ?? '');
108
+ }
109
+ finally {
110
+ clearTimeout(loader);
111
+ drawerLoading = false;
112
+ showLoader = false;
113
+ }
114
+ }
115
+ function loadTriggerConfig(cfg) {
116
+ script_path = cfg?.script_path ?? '';
117
+ initialScriptPath = cfg?.script_path ?? '';
118
+ is_flow = cfg?.is_flow ?? false;
119
+ path = cfg?.path ?? '';
120
+ local_part = cfg?.local_part ?? '';
121
+ workspaced_local_part = cfg?.workspaced_local_part ?? false;
122
+ extraPerms = cfg?.extra_perms ?? undefined;
123
+ can_write = canWrite(path, cfg?.extra_perms ?? {}, $userStore);
124
+ error_handler_path = cfg?.error_handler_path;
125
+ error_handler_args = cfg?.error_handler_args ?? {};
126
+ retry = cfg?.retry;
127
+ errorHandlerSelected = getHandlerType(error_handler_path ?? '');
128
+ }
129
+ async function loadTrigger(defaultConfig) {
130
+ if (defaultConfig) {
131
+ loadTriggerConfig(defaultConfig);
132
+ return;
133
+ }
134
+ else {
135
+ const s = await EmailTriggerService.getEmailTrigger({
136
+ workspace: $workspaceStore,
137
+ path: initialPath
138
+ });
139
+ loadTriggerConfig(s);
140
+ }
141
+ }
142
+ async function triggerScript() {
143
+ if (customSaveBehavior) {
144
+ customSaveBehavior(routeConfig);
145
+ drawer?.closeDrawer();
146
+ }
147
+ else {
148
+ deploymentLoading = true;
149
+ const saveCfg = routeConfig;
150
+ const isSaved = await saveEmailTriggerFromCfg(initialPath, saveCfg, edit, $workspaceStore, !!$userStore?.is_admin || !!$userStore?.is_super_admin, usedTriggerKinds);
151
+ if (isSaved) {
152
+ onUpdate(saveCfg.path);
153
+ drawer?.closeDrawer();
154
+ }
155
+ deploymentLoading = false;
156
+ }
157
+ }
158
+ function getEmailTriggerConfig() {
159
+ const nCfg = {
160
+ script_path,
161
+ is_flow,
162
+ path,
163
+ local_part,
164
+ workspaced_local_part,
165
+ extra_perms: extraPerms,
166
+ error_handler_path,
167
+ error_handler_args,
168
+ retry
169
+ };
170
+ return nCfg;
171
+ }
172
+ // Update config for captures
173
+ function getCaptureConfig() {
174
+ const newCaptureConfig = {
175
+ local_part: routeConfig.local_part,
176
+ path: routeConfig.path
177
+ };
178
+ //
179
+ return newCaptureConfig;
180
+ }
181
+ $effect(() => {
182
+ const args = [captureConfig, isValid];
183
+ untrack(() => onCaptureConfigChange?.(...args));
184
+ });
185
+ $effect(() => {
186
+ if (!drawerLoading) {
187
+ handleConfigChange(routeConfig, initialConfig, saveDisabled, edit, onConfigChange);
188
+ }
189
+ });
190
+ </script>
191
+
192
+ {#snippet config()}
193
+ {#if drawerLoading}
194
+ {#if showLoader}
195
+ <Loader2 class="animate-spin" />
196
+ {/if}
197
+ {:else}
198
+ <div class="flex flex-col gap-12">
199
+ <Section label="Metadata">
200
+ <div class="flex flex-col gap-2">
201
+ <Label label="Path">
202
+ <Path
203
+ bind:dirty={dirtyPath}
204
+ bind:error={pathError}
205
+ bind:path
206
+ {initialPath}
207
+ checkInitialPathExistence={!edit}
208
+ namePlaceholder="email_trigger"
209
+ kind="email_trigger"
210
+ hideUser
211
+ disableEditing={!can_write}
212
+ />
213
+ </Label>
214
+ </div>
215
+ </Section>
216
+
217
+ {#if !hideTarget}
218
+ <Section label="Target">
219
+ <p class="text-xs mt-3 mb-1 text-tertiary">
220
+ Pick a script or flow to be triggered<Required required={true} />
221
+ </p>
222
+ <div class="flex flex-col gap-2">
223
+ <div class="flex flex-row mb-2">
224
+ <ScriptPicker
225
+ disabled={fixedScriptPath != '' || !can_write}
226
+ initialPath={fixedScriptPath || initialScriptPath}
227
+ kinds={['script']}
228
+ allowFlow={true}
229
+ bind:itemKind
230
+ bind:scriptPath={script_path}
231
+ allowRefresh={can_write}
232
+ allowEdit={!$userStore?.operator}
233
+ clearable
234
+ />
235
+
236
+ {#if emptyString(script_path)}
237
+ <Button
238
+ btnClasses="ml-4 mt-2"
239
+ color="dark"
240
+ size="xs"
241
+ href={itemKind === 'flow' ? '/flows/add?hub=72' : '/scripts/add?hub=hub%2F19813'}
242
+ target="_blank">Create from template</Button
243
+ >
244
+ {/if}
245
+ </div>
246
+ </div>
247
+ </Section>
248
+ {/if}
249
+
250
+ <EmailTriggerEditorConfigSection
251
+ initialTriggerPath={initialPath}
252
+ bind:local_part
253
+ bind:isValid
254
+ bind:workspaced_local_part
255
+ bind:dirtyLocalPart
256
+ {can_write}
257
+ showTestingBadge={isEditor}
258
+ isDraftOnly={trigger ? trigger.isDraft : false}
259
+ />
260
+
261
+ <Section label="Advanced" collapsable>
262
+ <div class="flex flex-col gap-4">
263
+ <div class="min-h-96">
264
+ <Tabs bind:selected={optionTabSelected}>
265
+ <Tab value="error_handler">Error Handler</Tab>
266
+ <Tab value="retries">Retries</Tab>
267
+ </Tabs>
268
+ <div class="mt-4">
269
+ <TriggerRetriesAndErrorHandler
270
+ {optionTabSelected}
271
+ {itemKind}
272
+ {can_write}
273
+ bind:errorHandlerSelected
274
+ bind:error_handler_path
275
+ bind:error_handler_args
276
+ bind:retry
277
+ />
278
+ </div>
279
+ </div>
280
+ </div>
281
+ </Section>
282
+ </div>
283
+ {/if}
284
+ {/snippet}
285
+
286
+ {#snippet saveButton()}
287
+ {#if !drawerLoading}
288
+ <TriggerEditorToolbar
289
+ {trigger}
290
+ permissions={drawerLoading || !can_write ? 'none' : can_write && isAdmin ? 'create' : 'write'}
291
+ {saveDisabled}
292
+ enabled={undefined}
293
+ {allowDraft}
294
+ {edit}
295
+ isLoading={deploymentLoading}
296
+ onUpdate={triggerScript}
297
+ {onReset}
298
+ {onDelete}
299
+ {isDeployed}
300
+ />
301
+ {/if}
302
+ {/snippet}
303
+
304
+ {#if useDrawer}
305
+ <Drawer size="700px" bind:this={drawer}>
306
+ <DrawerContent
307
+ title={edit
308
+ ? can_write
309
+ ? `Edit email trigger ${initialPath}`
310
+ : `Email trigger ${initialPath}`
311
+ : 'New email trigger'}
312
+ on:close={() => drawer?.closeDrawer()}
313
+ >
314
+ {#snippet actions()}
315
+ {@render saveButton()}
316
+ {/snippet}
317
+ {@render config()}
318
+ </DrawerContent>
319
+ </Drawer>
320
+ {:else}
321
+ <Section label={!customLabel ? 'Email trigger' : ''} headerClass="grow min-w-0 h-[30px]">
322
+ {#snippet header()}
323
+ {#if customLabel}
324
+ {@render customLabel()}
325
+ {/if}
326
+ {/snippet}
327
+ {#snippet action()}
328
+ {@render saveButton()}
329
+ {/snippet}
330
+ {#if description}
331
+ {@render description()}
332
+ {/if}
333
+ {@render config()}
334
+ </Section>
335
+ {/if}
@@ -0,0 +1,22 @@
1
+ import { type EmailTrigger, type NewEmailTrigger } from '../../../gen';
2
+ declare const EmailTriggerEditorInner: import("svelte").Component<{
3
+ useDrawer?: boolean;
4
+ hideTarget?: boolean;
5
+ description?: any;
6
+ isEditor?: boolean;
7
+ customLabel?: any;
8
+ allowDraft?: boolean;
9
+ isDeployed?: boolean;
10
+ onConfigChange?: any;
11
+ onCaptureConfigChange?: any;
12
+ onUpdate?: any;
13
+ onDelete?: any;
14
+ onReset?: any;
15
+ trigger?: any;
16
+ customSaveBehavior?: any;
17
+ }, {
18
+ openEdit: (ePath: string, isFlow: boolean, defaultConfig?: Partial<NewEmailTrigger>) => Promise<void>;
19
+ openNew: (nis_flow: boolean, fixedScriptPath_?: string, defaultValues?: Partial<EmailTrigger>) => Promise<void>;
20
+ }, "">;
21
+ type EmailTriggerEditorInner = ReturnType<typeof EmailTriggerEditorInner>;
22
+ export default EmailTriggerEditorInner;
@@ -0,0 +1,61 @@
1
+ <script lang="ts">import EmailTriggerEditorInner from './EmailTriggerEditorInner.svelte';
2
+ import Description from '../../Description.svelte';
3
+ import { enterpriseLicense, userStore } from '../../../stores';
4
+ import { Alert } from '../../common';
5
+ import { onMount } from 'svelte';
6
+ import { getEmailDomain } from './utils';
7
+ let emailTriggerEditor = $state(null);
8
+ let { selectedTrigger, isFlow, path, defaultValues = undefined, isEditor = false, customLabel, onEmailDomain, ...restProps } = $props();
9
+ async function openEmailTriggerEditor(isFlow, isDraft) {
10
+ if (isDraft) {
11
+ emailTriggerEditor?.openNew(isFlow, path, defaultValues);
12
+ }
13
+ else {
14
+ emailTriggerEditor?.openEdit(selectedTrigger.path ?? '', isFlow, defaultValues);
15
+ }
16
+ }
17
+ onMount(() => {
18
+ if (emailTriggerEditor) {
19
+ openEmailTriggerEditor(isFlow, selectedTrigger.isDraft ?? false);
20
+ }
21
+ });
22
+ let emailDomain = $state(null);
23
+ getEmailDomain().then((domain) => {
24
+ emailDomain = domain;
25
+ });
26
+ $effect(() => {
27
+ if (emailDomain) {
28
+ onEmailDomain(emailDomain);
29
+ }
30
+ });
31
+ </script>
32
+
33
+ <EmailTriggerEditorInner
34
+ useDrawer={false}
35
+ bind:this={emailTriggerEditor}
36
+ hideTarget
37
+ {isEditor}
38
+ {customLabel}
39
+ trigger={selectedTrigger}
40
+ allowDraft
41
+ {...restProps}
42
+ >
43
+ {#snippet description()}
44
+ <div class="flex flex-col gap-2 pb-4">
45
+ <Description link="https://www.windmill.dev/docs/advanced/email_triggers">
46
+ Email triggers execute scripts and flows when emails are sent to specific addresses. Each
47
+ trigger can be configured with a specific local part.
48
+ </Description>
49
+
50
+ {#if !$userStore?.is_admin && !$userStore?.is_super_admin && selectedTrigger.isDraft}
51
+ <Alert title="Only workspace admins can create email triggers" type="info" size="xs" />
52
+ {/if}
53
+
54
+ {#if !$enterpriseLicense}
55
+ <Alert title="Community Edition limitations" type="warning" size="xs">
56
+ Email triggers on Windmill Community Edition are limited to 100 emails per day.
57
+ </Alert>
58
+ {/if}
59
+ </div>
60
+ {/snippet}
61
+ </EmailTriggerEditorInner>
@@ -0,0 +1,14 @@
1
+ import { type Snippet } from 'svelte';
2
+ import type { Trigger } from '../utils';
3
+ interface Props {
4
+ selectedTrigger: Trigger;
5
+ isFlow: boolean;
6
+ path: string;
7
+ defaultValues?: Record<string, any>;
8
+ isEditor?: boolean;
9
+ customLabel: Snippet;
10
+ onEmailDomain: (domain: string) => void;
11
+ }
12
+ declare const EmailTriggerPanel: import("svelte").Component<Props, {}, "">;
13
+ type EmailTriggerPanel = ReturnType<typeof EmailTriggerPanel>;
14
+ export default EmailTriggerPanel;
@@ -0,0 +1,4 @@
1
+ import type { Writable } from 'svelte/store';
2
+ export declare function getEmailAddress(local_part: string | undefined, workspaced_local_part: boolean, workspace_id: string, emailDomain: string): string;
3
+ export declare function saveEmailTriggerFromCfg(initialPath: string, routeCfg: Record<string, any>, edit: boolean, workspace: string, isAdmin: boolean, usedTriggerKinds: Writable<string[]>): Promise<boolean>;
4
+ export declare function getEmailDomain(): Promise<string>;
@@ -0,0 +1,52 @@
1
+ import { isCloudHosted } from '../../../cloud';
2
+ import { EmailTriggerService, SettingService } from '../../../gen';
3
+ import { sendUserToast } from '../../../toast';
4
+ import { get } from 'svelte/store';
5
+ export function getEmailAddress(local_part, workspaced_local_part, workspace_id, emailDomain) {
6
+ return `${isCloudHosted() || workspaced_local_part ? workspace_id + '-' : ''}${local_part ?? ''}@${emailDomain}`;
7
+ }
8
+ export async function saveEmailTriggerFromCfg(initialPath, routeCfg, edit, workspace, isAdmin, usedTriggerKinds) {
9
+ const requestBody = {
10
+ path: routeCfg.path,
11
+ script_path: routeCfg.script_path,
12
+ local_part: routeCfg.local_part,
13
+ is_flow: routeCfg.is_flow,
14
+ workspaced_local_part: routeCfg.workspaced_local_part,
15
+ error_handler_path: routeCfg.error_handler_path,
16
+ error_handler_args: routeCfg.error_handler_path ? routeCfg.error_handler_args : undefined,
17
+ retry: routeCfg.retry
18
+ };
19
+ try {
20
+ if (edit) {
21
+ await EmailTriggerService.updateEmailTrigger({
22
+ workspace: workspace,
23
+ path: initialPath,
24
+ requestBody: {
25
+ ...requestBody,
26
+ local_part: isAdmin || !edit ? routeCfg.local_part : undefined
27
+ }
28
+ });
29
+ sendUserToast(`Route ${routeCfg.path} updated`);
30
+ }
31
+ else {
32
+ await EmailTriggerService.createEmailTrigger({
33
+ workspace: workspace,
34
+ requestBody: requestBody
35
+ });
36
+ sendUserToast(`Route ${routeCfg.path} created`);
37
+ }
38
+ if (!get(usedTriggerKinds).includes('email')) {
39
+ usedTriggerKinds.update((t) => [...t, 'email']);
40
+ }
41
+ return true;
42
+ }
43
+ catch (error) {
44
+ sendUserToast(error.body || error.message, true);
45
+ return false;
46
+ }
47
+ }
48
+ export async function getEmailDomain() {
49
+ return ((await SettingService.getGlobal({
50
+ key: 'email_domain'
51
+ })) ?? 'mail.test.com');
52
+ }
@@ -126,7 +126,7 @@ let userCanEditConfig = $derived(userIsAdmin || isDraftOnly); // User can edit c
126
126
  <Toggle
127
127
  size="sm"
128
128
  checked={workspaced_route}
129
- disabled={!can_write}
129
+ disabled={!can_write || !userCanEditConfig}
130
130
  on:change={() => {
131
131
  workspaced_route = !workspaced_route
132
132
  dirtyRoutePath = true
@@ -527,7 +527,7 @@ $effect(() => {
527
527
  {can_write}
528
528
  bind:static_asset_config
529
529
  showTestingBadge={isEditor}
530
- isDraftOnly={trigger?.isDraft}
530
+ isDraftOnly={trigger ? trigger.isDraft : false}
531
531
  />
532
532
 
533
533
  {#if !is_static_website}
@@ -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) {
@@ -36,11 +36,11 @@ let drawerLoading = $state(true);
36
36
  let showLoading = $state(false);
37
37
  let defaultValues = $state(undefined);
38
38
  let natsResourcePath = $state('');
39
- let subjects = $state(['']);
40
- let useJetstream = $state(false);
41
- let streamName = $state('');
42
- let consumerName = $state('');
43
39
  let initialConfig = undefined;
40
+ let natsCfg = $state({
41
+ subjects: [],
42
+ use_jetstream: false
43
+ });
44
44
  let deploymentLoading = $state(false);
45
45
  let isValid = $state(false);
46
46
  let optionTabSelected = $state('error_handler');
@@ -90,10 +90,13 @@ export async function openNew(nis_flow, fixedScriptPath_, nDefaultValues) {
90
90
  edit = false;
91
91
  itemKind = nis_flow ? 'flow' : 'script';
92
92
  natsResourcePath = nDefaultValues?.nats_resource_path ?? '';
93
- subjects = nDefaultValues?.subjects ?? [''];
94
- useJetstream = nDefaultValues?.use_jetstream ?? false;
95
- streamName = useJetstream ? (nDefaultValues?.stream_name ?? '') : undefined;
96
- consumerName = useJetstream ? (nDefaultValues?.consumer_name ?? '') : undefined;
93
+ const useJetstream = nDefaultValues?.use_jetstream ?? false;
94
+ natsCfg = {
95
+ subjects: nDefaultValues?.subjects ?? [''],
96
+ use_jetstream: useJetstream,
97
+ stream_name: useJetstream ? (nDefaultValues?.stream_name ?? '') : undefined,
98
+ consumer_name: useJetstream ? (nDefaultValues?.consumer_name ?? '') : undefined
99
+ };
97
100
  initialScriptPath = '';
98
101
  fixedScriptPath = fixedScriptPath_ ?? '';
99
102
  script_path = fixedScriptPath;
@@ -119,10 +122,13 @@ async function loadTriggerConfig(cfg) {
119
122
  is_flow = cfg?.is_flow;
120
123
  path = cfg?.path;
121
124
  natsResourcePath = cfg?.nats_resource_path;
122
- streamName = cfg?.stream_name;
123
- consumerName = cfg?.consumer_name;
124
- subjects = cfg?.subjects || [''];
125
- useJetstream = cfg?.use_jetstream || false;
125
+ const useJetstream = cfg?.use_jetstream || false;
126
+ natsCfg = {
127
+ subjects: cfg?.subjects || [''],
128
+ use_jetstream: useJetstream,
129
+ stream_name: useJetstream ? cfg?.stream_name || '' : undefined,
130
+ consumer_name: useJetstream ? cfg?.consumer_name || '' : undefined
131
+ };
126
132
  enabled = cfg?.enabled;
127
133
  can_write = canWrite(cfg?.path, cfg?.extra_perms, $userStore);
128
134
  error_handler_path = cfg?.error_handler_path;
@@ -150,10 +156,10 @@ function getSaveCfg() {
150
156
  is_flow,
151
157
  enabled,
152
158
  nats_resource_path: natsResourcePath,
153
- stream_name: streamName,
154
- consumer_name: consumerName,
155
- subjects,
156
- use_jetstream: useJetstream,
159
+ stream_name: natsCfg.stream_name,
160
+ consumer_name: natsCfg.consumer_name,
161
+ subjects: natsCfg.subjects,
162
+ use_jetstream: natsCfg.use_jetstream,
157
163
  error_handler_path,
158
164
  error_handler_args,
159
165
  retry
@@ -325,10 +331,7 @@ $effect(() => {
325
331
  <NatsTriggersConfigSection
326
332
  {path}
327
333
  bind:natsResourcePath
328
- bind:subjects
329
- bind:useJetstream
330
- bind:streamName
331
- bind:consumerName
334
+ bind:natsCfg
332
335
  on:valid-config={({ detail }) => {
333
336
  isValid = detail
334
337
  }}
@@ -5,11 +5,11 @@ import ResourcePicker from '../../ResourcePicker.svelte';
5
5
  import SchemaForm from '../../SchemaForm.svelte';
6
6
  import TestTriggerConnection from '../TestTriggerConnection.svelte';
7
7
  import TestingBadge from '../testingBadge.svelte';
8
- import { createEventDispatcher } from 'svelte';
8
+ import { createEventDispatcher, untrack } from 'svelte';
9
9
  const dispatch = createEventDispatcher();
10
- let { defaultValues = undefined, headless = false, natsResourcePath = $bindable(), subjects = $bindable(), useJetstream = $bindable(), streamName = $bindable(), consumerName = $bindable(), path, can_write = true, showTestingBadge = false } = $props();
10
+ let { defaultValues = undefined, headless = false, natsResourcePath = $bindable(), natsCfg = $bindable(), path, can_write = true, showTestingBadge = false } = $props();
11
11
  let otherArgsValid = $state(false);
12
- let globalError = $derived(!useJetstream && subjects && subjects.length > 1
12
+ let globalError = $derived(!natsCfg.use_jetstream && natsCfg.subjects && natsCfg.subjects.length > 1
13
13
  ? 'Only one subject is supported if not using JetStream.'
14
14
  : '');
15
15
  let isConnectionValid = $derived(!!natsResourcePath);
@@ -55,37 +55,25 @@ const argsSchema = {
55
55
  $effect(() => {
56
56
  const valid = isConnectionValid &&
57
57
  otherArgsValid &&
58
- !!subjects &&
59
- subjects.length > 0 &&
60
- subjects.every((b) => /^[a-zA-Z0-9-_.*>]+$/.test(b)) &&
58
+ !!natsCfg.subjects &&
59
+ natsCfg.subjects.length > 0 &&
60
+ natsCfg.subjects.every((b) => /^[a-zA-Z0-9-_.*>]+$/.test(b)) &&
61
61
  globalError === '';
62
62
  dispatch('valid-config', valid);
63
63
  });
64
64
  function setStreamAndConsumerNames() {
65
- if (!streamName) {
66
- streamName = `windmill_stream-${$workspaceStore}-${path.replaceAll('/', '__')}`;
65
+ if (!natsCfg.stream_name) {
66
+ natsCfg.stream_name = `windmill_stream-${$workspaceStore}-${path.replaceAll('/', '__')}`;
67
67
  }
68
- if (!consumerName) {
69
- consumerName = `windmill_consumer-${$workspaceStore}-${path.replaceAll('/', '__')}`;
68
+ if (!natsCfg.consumer_name) {
69
+ natsCfg.consumer_name = `windmill_consumer-${$workspaceStore}-${path.replaceAll('/', '__')}`;
70
70
  }
71
71
  }
72
- function setNewArgs(args) {
73
- subjects = args.subjects;
74
- useJetstream = args.use_jetstream;
75
- streamName = args.stream_name;
76
- consumerName = args.consumer_name;
77
- if (args.use_jetstream) {
78
- setStreamAndConsumerNames();
72
+ $effect(() => {
73
+ if (natsCfg.use_jetstream) {
74
+ untrack(() => setStreamAndConsumerNames());
79
75
  }
80
- }
81
- function getNatsArgsCfg() {
82
- return {
83
- subjects,
84
- use_jetstream: useJetstream,
85
- stream_name: streamName,
86
- consumer_name: consumerName
87
- };
88
- }
76
+ });
89
77
  </script>
90
78
 
91
79
  <div>
@@ -121,7 +109,7 @@ function getNatsArgsCfg() {
121
109
  <Subsection headless={true}>
122
110
  <SchemaForm
123
111
  schema={argsSchema}
124
- bind:args={getNatsArgsCfg, (args) => setNewArgs(args)}
112
+ bind:args={natsCfg}
125
113
  bind:isValid={otherArgsValid}
126
114
  lightHeader={true}
127
115
  disabled={!can_write}