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
@@ -15,6 +15,14 @@ let label = $derived.by(() => getTriggerLabel(trigger));
15
15
  {label}
16
16
  </span>
17
17
 
18
+ {#if trigger.type === 'default_email'}
19
+ <span
20
+ class="ml-2 bg-blue-50 dark:bg-blue-900/40 px-1.5 py-0.5 rounded text-xs text-blue-700 dark:text-blue-100 whitespace-nowrap"
21
+ >
22
+ Default
23
+ </span>
24
+ {/if}
25
+
18
26
  {#if trigger.isPrimary}
19
27
  <span
20
28
  class="ml-2 bg-blue-50 dark:bg-blue-900/40 px-1.5 py-0.5 rounded text-xs text-blue-700 dark:text-blue-100 whitespace-nowrap"
@@ -14,7 +14,7 @@ export async function listTokens() {
14
14
  ? await FlowService.listTokensOfFlow({ workspace: $workspaceStore, path })
15
15
  : await ScriptService.listTokensOfScript({ workspace: $workspaceStore, path })).filter((x) => x.label && x.label.startsWith(labelPrefix + '-'));
16
16
  if (labelPrefix == 'email') {
17
- $triggersCount = { ...($triggersCount ?? {}), email_count: tokens?.length };
17
+ $triggersCount = { ...($triggersCount ?? {}), default_email_count: tokens?.length };
18
18
  }
19
19
  else {
20
20
  $triggersCount = { ...($triggersCount ?? {}), webhook_count: tokens?.length };
@@ -13,7 +13,7 @@ import Button from '../common/button/Button.svelte';
13
13
  import TriggersWrapperV2 from './TriggersWrapper.svelte';
14
14
  import { triggerTypeToCaptureKind, CLOUD_DISABLED_TRIGGER_TYPES } from './utils';
15
15
  import { isCloudHosted } from '../../cloud';
16
- import { ScheduleService, WebsocketTriggerService, PostgresTriggerService, KafkaTriggerService, NatsTriggerService, MqttTriggerService, HttpTriggerService, GcpTriggerService, SqsTriggerService } from '../../gen';
16
+ import { ScheduleService, WebsocketTriggerService, PostgresTriggerService, KafkaTriggerService, NatsTriggerService, MqttTriggerService, HttpTriggerService, GcpTriggerService, SqsTriggerService, EmailTriggerService } from '../../gen';
17
17
  import { sendUserToast } from '../../toast';
18
18
  let { noEditor, newItem = false, currentPath, fakeInitialPath = '', hash = undefined, args = {}, initialPath, isFlow, canHavePreprocessor = false, hasPreprocessor = false, isDeployed = false, schema = undefined, noCapture = false, isEditor = true, onDeployTrigger } = $props();
19
19
  let config = $state({});
@@ -47,7 +47,8 @@ async function deleteDeployedTrigger(triggerIndex) {
47
47
  gcp: () => GcpTriggerService.deleteGcpTrigger,
48
48
  sqs: () => SqsTriggerService.deleteSqsTrigger,
49
49
  mqtt: () => MqttTriggerService.deleteMqttTrigger,
50
- http: () => HttpTriggerService.deleteHttpTrigger
50
+ http: () => HttpTriggerService.deleteHttpTrigger,
51
+ email: () => EmailTriggerService.deleteEmailTrigger
51
52
  };
52
53
  const deleteHandler = deleteHandlers[triggerType];
53
54
  if (deleteHandler && deletingTrigger !== triggerIndex) {
@@ -114,6 +115,9 @@ async function handleUpdate(trigger, path) {
114
115
  else if (triggerType === 'http') {
115
116
  await triggersState.fetchHttpTriggers(triggersCount, $workspaceStore, currentPath, isFlow, $userStore);
116
117
  }
118
+ else if (triggerType === 'email') {
119
+ await triggersState.fetchEmailTriggers(triggersCount, $workspaceStore, currentPath, isFlow, $userStore);
120
+ }
117
121
  triggersState.selectedTriggerIndex = triggersState.triggers.findIndex((t) => t.path === path && t.type === triggerType);
118
122
  loading = false;
119
123
  onDeployTrigger?.({ type: triggerType, id: triggerId, path: triggerPath });
@@ -155,7 +159,7 @@ const cloudDisabled = $derived(CLOUD_DISABLED_TRIGGER_TYPES.includes(triggersSta
155
159
  onDeleteDraft={deleteTrigger}
156
160
  onReset={handleResetDraft}
157
161
  webhookToken={$triggersCount?.webhook_count}
158
- emailToken={$triggersCount?.email_count}
162
+ emailToken={$triggersCount?.default_email_count}
159
163
  />
160
164
  </div>
161
165
  {:else}
@@ -229,8 +233,8 @@ const cloudDisabled = $derived(CLOUD_DISABLED_TRIGGER_TYPES.includes(triggersSta
229
233
  onReset={() => {
230
234
  handleResetDraft(triggersState.selectedTriggerIndex)
231
235
  }}
232
- on:email-domain={({ detail }) => {
233
- emailDomain = detail
236
+ onEmailDomain={(domain) => {
237
+ emailDomain = domain
234
238
  }}
235
239
  />
236
240
  </div>
@@ -66,7 +66,7 @@ let loading = false;
66
66
  >
67
67
  {`${webhookToken} token${webhookToken > 1 ? 's' : ''}`}
68
68
  </span>
69
- {:else if trigger.type === 'email' && emailToken}
69
+ {:else if trigger.type === 'default_email' && emailToken}
70
70
  <span
71
71
  class="ml-2 text-xs rounded-md bg-tertiary/50 group-hover:bg-primary text-primary-inverse px-1.5 py-0.5"
72
72
  >
@@ -75,7 +75,7 @@ let loading = false;
75
75
  {/if}
76
76
  </div>
77
77
 
78
- {#if !['email', 'webhook', 'cli'].includes(trigger.type)}
78
+ {#if !['default_email', 'webhook', 'cli'].includes(trigger.type)}
79
79
  {#if trigger.isDraft}
80
80
  <DeleteTriggerButton {trigger} onDelete={() => onDeleteDraft?.(index)} small />
81
81
  {:else if !!trigger.draftConfig && !trigger.isDraft}
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">import RoutesPanel from './http/RoutesPanel.svelte';
2
2
  import WebhooksPanel from './webhook/WebhooksPanel.svelte';
3
- import EmailTriggerPanel from '../details/EmailTriggerPanel.svelte';
3
+ import EmailTriggerPanel from './email/EmailTriggerPanel.svelte';
4
+ import DefaultEmailPanel from './email/DefaultEmailPanel.svelte';
4
5
  import SchedulePanel from '../SchedulePanel.svelte';
5
6
  import PostgresTriggersPanel from './postgres/PostgresTriggersPanel.svelte';
6
7
  import KafkaTriggerPanel from './kafka/KafkaTriggersPanel.svelte';
@@ -15,7 +16,7 @@ import ClipboardPanel from '../details/ClipboardPanel.svelte';
15
16
  import CliHelpBox from '../CliHelpBox.svelte';
16
17
  import TriggerLabel from './TriggerLabel.svelte';
17
18
  import { twMerge } from 'tailwind-merge';
18
- let { selectedTrigger, isFlow = false, initialPath, fakeInitialPath, currentPath, hash, small, args, newItem, schema, ...props } = $props();
19
+ let { selectedTrigger, isFlow = false, initialPath, fakeInitialPath, currentPath, hash, small, args, newItem, schema, onEmailDomain, ...props } = $props();
19
20
  </script>
20
21
 
21
22
  {#if selectedTrigger.type === 'http'}
@@ -37,13 +38,14 @@ let { selectedTrigger, isFlow = false, initialPath, fakeInitialPath, currentPath
37
38
  scopes={isFlow ? [`jobs:run:flows:${currentPath}`] : [`jobs:run:scripts:${currentPath}`]}
38
39
  {newItem}
39
40
  />
40
- {:else if selectedTrigger.type === 'email'}
41
- <EmailTriggerPanel
41
+ {:else if selectedTrigger.type === 'default_email'}
42
+ <DefaultEmailPanel
42
43
  token=""
43
44
  scopes={isFlow ? [`jobs:run:flows:${currentPath}`] : [`jobs:run:scripts:${currentPath}`]}
44
45
  path={initialPath || fakeInitialPath}
45
46
  {isFlow}
46
- on:email-domain
47
+ {hash}
48
+ {onEmailDomain}
47
49
  />
48
50
  {:else if selectedTrigger.type === 'schedule'}
49
51
  <SchedulePanel
@@ -118,6 +120,16 @@ let { selectedTrigger, isFlow = false, initialPath, fakeInitialPath, currentPath
118
120
  {customLabel}
119
121
  {...props}
120
122
  />
123
+ {:else if selectedTrigger.type === 'email'}
124
+ <EmailTriggerPanel
125
+ {isFlow}
126
+ path={initialPath || fakeInitialPath}
127
+ {selectedTrigger}
128
+ defaultValues={selectedTrigger.draftConfig ?? selectedTrigger.captureConfig ?? undefined}
129
+ {customLabel}
130
+ {onEmailDomain}
131
+ {...props}
132
+ />
121
133
  {:else if selectedTrigger.type === 'poll'}
122
134
  <ScheduledPollPanel />
123
135
  {:else if selectedTrigger.type === 'cli'}
@@ -17,24 +17,8 @@ interface Props {
17
17
  onUpdate?: (path: string) => void;
18
18
  onDelete?: () => void;
19
19
  onReset?: () => void;
20
+ onEmailDomain: (domain: string) => void;
20
21
  }
21
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
22
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
23
- $$bindings?: Bindings;
24
- } & Exports;
25
- (internal: unknown, props: Props & {
26
- $$events?: Events;
27
- $$slots?: Slots;
28
- }): Exports & {
29
- $set?: any;
30
- $on?: any;
31
- };
32
- z_$$bindings?: Bindings;
33
- }
34
- declare const TriggersWrapper: $$__sveltets_2_IsomorphicComponent<Props, {
35
- 'email-domain': CustomEvent<any>;
36
- } & {
37
- [evt: string]: CustomEvent<any>;
38
- }, {}, {}, "">;
39
- type TriggersWrapper = InstanceType<typeof TriggersWrapper>;
22
+ declare const TriggersWrapper: import("svelte").Component<Props, {}, "">;
23
+ type TriggersWrapper = ReturnType<typeof TriggersWrapper>;
40
24
  export default TriggersWrapper;
@@ -1,8 +1,8 @@
1
- <script lang="ts">import Label from '../Label.svelte';
2
- import { workspaceStore } from '../../stores';
1
+ <script lang="ts">import Label from '../../Label.svelte';
2
+ import { workspaceStore } from '../../../stores';
3
3
  import { base32 } from 'rfc4648';
4
- import ClipboardPanel from './ClipboardPanel.svelte';
5
- import CaptureSection, {} from '../triggers/CaptureSection.svelte';
4
+ import ClipboardPanel from '../../details/ClipboardPanel.svelte';
5
+ import CaptureSection, {} from '../CaptureSection.svelte';
6
6
  import { fade } from 'svelte/transition';
7
7
  let { isFlow = false, path, emailDomain = null, captureInfo = undefined, hasPreprocessor = false, captureLoading = false } = $props();
8
8
  function getCaptureEmail() {
@@ -20,7 +20,7 @@ let captureEmail = $derived(getCaptureEmail());
20
20
 
21
21
  {#if captureInfo}
22
22
  <CaptureSection
23
- captureType="email"
23
+ captureType="default_email"
24
24
  disabled={false}
25
25
  {captureInfo}
26
26
  {captureLoading}
@@ -1,4 +1,4 @@
1
- import { type CaptureInfo } from '../triggers/CaptureSection.svelte';
1
+ import { type CaptureInfo } from '../CaptureSection.svelte';
2
2
  interface Props {
3
3
  isFlow?: boolean;
4
4
  path: string;
@@ -20,7 +20,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
20
20
  };
21
21
  z_$$bindings?: Bindings;
22
22
  }
23
- declare const EmailTriggerCaptures: $$__sveltets_2_IsomorphicComponent<Props, {
23
+ declare const DefaultEmailCapture: $$__sveltets_2_IsomorphicComponent<Props, {
24
24
  captureToggle: CustomEvent<{
25
25
  disableOnly?: boolean;
26
26
  }>;
@@ -38,5 +38,5 @@ declare const EmailTriggerCaptures: $$__sveltets_2_IsomorphicComponent<Props, {
38
38
  } & {
39
39
  [evt: string]: CustomEvent<any>;
40
40
  }, {}, {}, "">;
41
- type EmailTriggerCaptures = InstanceType<typeof EmailTriggerCaptures>;
42
- export default EmailTriggerCaptures;
41
+ type DefaultEmailCapture = InstanceType<typeof DefaultEmailCapture>;
42
+ export default DefaultEmailCapture;
@@ -1,17 +1,18 @@
1
- <script lang="ts">import { run } from 'svelte/legacy';
2
- import Button from '../common/button/Button.svelte';
3
- import Label from '../Label.svelte';
4
- import Tooltip from '../Tooltip.svelte';
1
+ <script lang="ts">import Button from '../../common/button/Button.svelte';
2
+ import Label from '../../Label.svelte';
3
+ import Tooltip from '../../Tooltip.svelte';
5
4
  import { AlertTriangle } from 'lucide-svelte';
6
- import { workspaceStore } from '../../stores';
7
- import { SCRIPT_VIEW_SHOW_CREATE_TOKEN_BUTTON } from '../../consts';
8
- import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
9
- import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
10
- import ClipboardPanel from './ClipboardPanel.svelte';
11
- import Alert from '../common/alert/Alert.svelte';
5
+ import { workspaceStore } from '../../../stores';
6
+ import { SCRIPT_VIEW_SHOW_CREATE_TOKEN_BUTTON } from '../../../consts';
7
+ import ToggleButton from '../../common/toggleButton-v2/ToggleButton.svelte';
8
+ import ToggleButtonGroup from '../../common/toggleButton-v2/ToggleButtonGroup.svelte';
9
+ import ClipboardPanel from '../../details/ClipboardPanel.svelte';
10
+ import Alert from '../../common/alert/Alert.svelte';
12
11
  import { base32 } from 'rfc4648';
12
+ import { emptyString } from '../../../utils';
13
+ import UserSettings from '../../UserSettings.svelte';
13
14
  let requestType = $state('path');
14
- function emailAddress(requestType, path, hash, isFlow, token) {
15
+ function emailAddress() {
15
16
  const pathOrHash = requestType === 'hash' ? hash : path.replaceAll('/', '.');
16
17
  const plainPrefix = `${$workspaceStore}+${(requestType === 'hash' ? 'hash.' : isFlow ? 'flow.' : '') + pathOrHash}+${token}`;
17
18
  const encodedPrefix = base32
@@ -22,8 +23,8 @@ function emailAddress(requestType, path, hash, isFlow, token) {
22
23
  return `${pathOrHash}+${encodedPrefix}@${emailDomain}`;
23
24
  }
24
25
  let { token = $bindable(''), isFlow = false, hash = undefined, path, userSettings, emailDomain = null, email = $bindable('') } = $props();
25
- run(() => {
26
- email = emailAddress(requestType, path, hash, isFlow, token);
26
+ $effect(() => {
27
+ email = emailAddress();
27
28
  });
28
29
  </script>
29
30
 
@@ -76,7 +77,16 @@ run(() => {
76
77
  {#key requestType}
77
78
  {#key token}
78
79
  <Label label="Email address">
79
- <ClipboardPanel content={email} />
80
+ {#if !emptyString(token)}
81
+ <ClipboardPanel content={email} />
82
+ {:else}
83
+ <input
84
+ type="text"
85
+ disabled
86
+ value="Create a token first"
87
+ class="!text-xs !text-red-400"
88
+ />
89
+ {/if}
80
90
  </Label>
81
91
  {/key}
82
92
  {/key}
@@ -0,0 +1,13 @@
1
+ import UserSettings from '../../UserSettings.svelte';
2
+ interface Props {
3
+ token?: string;
4
+ isFlow?: boolean;
5
+ hash?: string | undefined;
6
+ path: string;
7
+ userSettings: UserSettings;
8
+ emailDomain?: string | null;
9
+ email?: string;
10
+ }
11
+ declare const DefaultEmailConfigSection: import("svelte").Component<Props, {}, "email" | "token">;
12
+ type DefaultEmailConfigSection = ReturnType<typeof DefaultEmailConfigSection>;
13
+ export default DefaultEmailConfigSection;
@@ -0,0 +1,71 @@
1
+ <script lang="ts">import { enterpriseLicense, userStore, workspaceStore } from '../../../stores';
2
+ import UserSettings from '../../UserSettings.svelte';
3
+ import { generateRandomString } from '../../../utils';
4
+ import HighlightTheme from '../../HighlightTheme.svelte';
5
+ import Alert from '../../common/alert/Alert.svelte';
6
+ import Skeleton from '../../common/skeleton/Skeleton.svelte';
7
+ import TriggerTokens from '../TriggerTokens.svelte';
8
+ import Description from '../../Description.svelte';
9
+ import Section from '../../Section.svelte';
10
+ import DefaultEmailConfigSection from './DefaultEmailConfigSection.svelte';
11
+ import { getEmailDomain } from './utils';
12
+ let userSettings = $state(undefined);
13
+ let { token = $bindable(), scopes = [], isFlow = false, hash = undefined, path, onEmailDomain } = $props();
14
+ let emailDomain = $state(null);
15
+ let triggerTokens = $state(undefined);
16
+ let loading = $state(true);
17
+ getEmailDomain().then((domain) => {
18
+ emailDomain = domain;
19
+ loading = false;
20
+ });
21
+ $effect(() => {
22
+ if (emailDomain) {
23
+ onEmailDomain(emailDomain);
24
+ }
25
+ });
26
+ </script>
27
+
28
+ <HighlightTheme />
29
+
30
+ <UserSettings
31
+ bind:this={userSettings}
32
+ on:tokenCreated={(e) => {
33
+ token = e.detail
34
+ triggerTokens?.listTokens()
35
+ }}
36
+ newTokenWorkspace={$workspaceStore}
37
+ newTokenLabel={`email-${$userStore?.username ?? 'superadmin'}-${generateRandomString(4)}`}
38
+ {scopes}
39
+ />
40
+
41
+ <Section label="Default email trigger" class="flex flex-col gap-4">
42
+ <Description link="https://www.windmill.dev/docs/advanced/email_triggers">
43
+ Default email trigger is a partially fixed email address that can be used to trigger a script or
44
+ flow. The email address is composed of the encoded workspace and script or flow path as well as
45
+ the token.
46
+ </Description>
47
+ {#if loading}
48
+ <Skeleton layout={[[18]]} />
49
+ {:else}
50
+ {#if emailDomain}
51
+ <DefaultEmailConfigSection {hash} {token} {path} {isFlow} {userSettings} {emailDomain} />
52
+ {:else}
53
+ <div>
54
+ <Alert title="Email triggers are disabled" size="xs" type="warning">
55
+ Ask an instance superadmin to setup the instance for email triggering (<a
56
+ target="_blank"
57
+ href="https://windmill.dev/docs/advanced/email_triggers">docs</a
58
+ >) and to set the email domain in the instance settings.
59
+ </Alert>
60
+ </div>
61
+ {/if}
62
+
63
+ {#if !$enterpriseLicense}
64
+ <Alert title="Community Edition limitations" type="warning" size="xs">
65
+ Email triggers on Windmill Community Edition are limited to 100 emails per day.
66
+ </Alert>
67
+ {/if}
68
+
69
+ <TriggerTokens bind:this={triggerTokens} {isFlow} {path} labelPrefix="email" />
70
+ {/if}
71
+ </Section>
@@ -0,0 +1,11 @@
1
+ interface Props {
2
+ token: string;
3
+ scopes?: string[];
4
+ isFlow?: boolean;
5
+ hash?: string | undefined;
6
+ path: string;
7
+ onEmailDomain: (domain: string) => void;
8
+ }
9
+ declare const DefaultEmailPanel: import("svelte").Component<Props, {}, "token">;
10
+ type DefaultEmailPanel = ReturnType<typeof DefaultEmailPanel>;
11
+ export default DefaultEmailPanel;
@@ -0,0 +1,39 @@
1
+ <script lang="ts">import { workspaceStore } from '../../../stores';
2
+ import Label from '../../Label.svelte';
3
+ import CaptureSection from '../CaptureSection.svelte';
4
+ import { fade } from 'svelte/transition';
5
+ import ClipboardPanel from '../../details/ClipboardPanel.svelte';
6
+ let { local_part, emailDomain = null, captureInfo = undefined, isValid = undefined, hasPreprocessor = false, isFlow = false, captureLoading = false } = $props();
7
+ let captureEmail = $derived(`capture+${$workspaceStore}-${local_part}@${emailDomain}`);
8
+ </script>
9
+
10
+ {#if captureInfo}
11
+ <CaptureSection
12
+ captureType="email"
13
+ disabled={isValid === false}
14
+ {captureInfo}
15
+ {captureLoading}
16
+ on:captureToggle
17
+ on:applyArgs
18
+ on:updateSchema
19
+ on:addPreprocessor
20
+ on:testWithArgs
21
+ {hasPreprocessor}
22
+ {isFlow}
23
+ >
24
+ {#snippet description()}
25
+ {#if captureInfo.active}
26
+ <p in:fade={{ duration: 100, delay: 50 }} out:fade={{ duration: 50 }}>
27
+ Send an email to the test address below to simulate an email trigger.
28
+ </p>
29
+ {:else}
30
+ <p in:fade={{ duration: 100, delay: 50 }} out:fade={{ duration: 50 }}>
31
+ Start capturing to listen to email events on this test address.
32
+ </p>
33
+ {/if}
34
+ {/snippet}
35
+ <Label label="Test email address" disabled={!captureInfo.active}>
36
+ <ClipboardPanel content={captureEmail} disabled={!captureInfo.active} />
37
+ </Label>
38
+ </CaptureSection>
39
+ {/if}
@@ -0,0 +1,43 @@
1
+ import type { CaptureInfo } from '../CaptureSection.svelte';
2
+ interface Props {
3
+ local_part: string | undefined;
4
+ emailDomain: string | null;
5
+ captureInfo?: CaptureInfo | undefined;
6
+ isValid?: boolean | undefined;
7
+ hasPreprocessor?: boolean;
8
+ isFlow?: boolean;
9
+ captureLoading?: boolean;
10
+ }
11
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
12
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
13
+ $$bindings?: Bindings;
14
+ } & Exports;
15
+ (internal: unknown, props: Props & {
16
+ $$events?: Events;
17
+ $$slots?: Slots;
18
+ }): Exports & {
19
+ $set?: any;
20
+ $on?: any;
21
+ };
22
+ z_$$bindings?: Bindings;
23
+ }
24
+ declare const EmailCapture: $$__sveltets_2_IsomorphicComponent<Props, {
25
+ captureToggle: CustomEvent<{
26
+ disableOnly?: boolean;
27
+ }>;
28
+ applyArgs: CustomEvent<{
29
+ kind: "main" | "preprocessor";
30
+ args: Record<string, any>;
31
+ }>;
32
+ updateSchema: CustomEvent<{
33
+ payloadData: Record<string, any>;
34
+ redirect: boolean;
35
+ args?: boolean;
36
+ }>;
37
+ addPreprocessor: CustomEvent<null>;
38
+ testWithArgs: CustomEvent<Record<string, any>>;
39
+ } & {
40
+ [evt: string]: CustomEvent<any>;
41
+ }, {}, {}, "">;
42
+ type EmailCapture = InstanceType<typeof EmailCapture>;
43
+ export default EmailCapture;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">import { tick } from 'svelte';
2
+ import EmailTriggerEditorInner from './EmailTriggerEditorInner.svelte';
3
+ let { onUpdate = undefined, customSaveBehavior } = $props();
4
+ let open = $state(false);
5
+ export async function openEdit(ePath, isFlow) {
6
+ open = true;
7
+ await tick();
8
+ drawer?.openEdit(ePath, isFlow);
9
+ }
10
+ export async function openNew(is_flow, initial_script_path, defaultValues) {
11
+ open = true;
12
+ await tick();
13
+ drawer?.openNew(is_flow, initial_script_path, defaultValues);
14
+ }
15
+ let drawer = $state();
16
+ </script>
17
+
18
+ {#if open}
19
+ <EmailTriggerEditorInner {customSaveBehavior} {onUpdate} bind:this={drawer} />
20
+ {/if}
@@ -0,0 +1,11 @@
1
+ import type { EditEmailTrigger, EmailTrigger } from '../../../gen';
2
+ interface Props {
3
+ onUpdate?: (cfg?: Record<string, any>) => void;
4
+ customSaveBehavior?: (cfg: EmailTrigger | EditEmailTrigger) => void;
5
+ }
6
+ declare const EmailTriggerEditor: import("svelte").Component<Props, {
7
+ openEdit: (ePath: string, isFlow: boolean) => Promise<void>;
8
+ openNew: (is_flow: boolean, initial_script_path?: string, defaultValues?: Record<string, any>) => Promise<void>;
9
+ }, "">;
10
+ type EmailTriggerEditor = ReturnType<typeof EmailTriggerEditor>;
11
+ export default EmailTriggerEditor;
@@ -0,0 +1,133 @@
1
+ <script lang="ts">import { Alert } from '../../common';
2
+ import Required from '../../Required.svelte';
3
+ import Section from '../../Section.svelte';
4
+ import { userStore, workspaceStore } from '../../../stores';
5
+ // import { page } from '$app/stores'
6
+ import { getEmailAddress, getEmailDomain } from './utils';
7
+ import { isCloudHosted } from '../../../cloud';
8
+ import Toggle from '../../Toggle.svelte';
9
+ import TestingBadge from '../testingBadge.svelte';
10
+ import { untrack } from 'svelte';
11
+ import { EmailTriggerService } from '../../../gen';
12
+ import ClipboardPanel from '../../details/ClipboardPanel.svelte';
13
+ let { initialTriggerPath = undefined, dirtyLocalPart = $bindable(false), local_part = $bindable(), can_write = false, headless = false, workspaced_local_part = $bindable(false), isValid = $bindable(false), isDraftOnly = true, showTestingBadge = false } = $props();
14
+ let validateTimeout = undefined;
15
+ let addressError = $state('');
16
+ async function validateEmailAddress(localPart, workspaced_local_part) {
17
+ if (validateTimeout) {
18
+ clearTimeout(validateTimeout);
19
+ }
20
+ validateTimeout = setTimeout(async () => {
21
+ if (!localPart || !/^[a-z0-9._]{1,64}$/.test(localPart)) {
22
+ addressError =
23
+ 'Local part not valid, only accepts lowercase alphanumeric characters, dots and underscores, and must be between 1 and 64 characters';
24
+ }
25
+ else if (await emailTriggerExists(localPart, workspaced_local_part)) {
26
+ addressError = 'Email address already taken';
27
+ }
28
+ else {
29
+ addressError = '';
30
+ }
31
+ validateTimeout = undefined;
32
+ }, 500);
33
+ }
34
+ async function emailTriggerExists(local_part, workspaced_local_part) {
35
+ return await EmailTriggerService.existsEmailLocalPart({
36
+ workspace: $workspaceStore,
37
+ requestBody: {
38
+ local_part,
39
+ trigger_path: initialTriggerPath,
40
+ workspaced_local_part: workspaced_local_part
41
+ }
42
+ });
43
+ }
44
+ $effect.pre(() => {
45
+ ;
46
+ [local_part, workspaced_local_part];
47
+ untrack(() => {
48
+ validateEmailAddress(local_part, workspaced_local_part);
49
+ });
50
+ });
51
+ $effect.pre(() => {
52
+ isValid = addressError === '';
53
+ });
54
+ let emailDomain = $state(null);
55
+ getEmailDomain().then((domain) => {
56
+ emailDomain = domain;
57
+ });
58
+ let fullEmailAddress = $derived(getEmailAddress(local_part, workspaced_local_part, $workspaceStore ?? '', emailDomain ?? ''));
59
+ $effect.pre(() => {
60
+ local_part === undefined && (local_part = '');
61
+ });
62
+ let userIsAdmin = $derived($userStore?.is_admin || $userStore?.is_super_admin);
63
+ let userCanEditConfig = $derived(userIsAdmin || isDraftOnly); // User can edit config if they are admin or if the trigger is a draft which will not be saved
64
+ </script>
65
+
66
+ <div>
67
+ <Section label="Email" {headless}>
68
+ {#snippet header()}
69
+ {#if showTestingBadge}
70
+ <TestingBadge />
71
+ {/if}
72
+ {/snippet}
73
+ {#if !userCanEditConfig && isDraftOnly}
74
+ <Alert type="info" title="Admin only" collapsible size="xs">
75
+ Email triggers can only be edited by workspace admins
76
+ </Alert>
77
+ <div class="my-2"></div>
78
+ {/if}
79
+ <div class="flex flex-col w-full gap-4">
80
+ <label class="block grow w-full">
81
+ <div class="flex flex-col gap-1">
82
+ <div class="text-secondary text-sm flex items-center gap-1 w-full justify-between">
83
+ <div>
84
+ Local part
85
+ <Required required={true} />
86
+ </div>
87
+ </div>
88
+ <!-- svelte-ignore a11y_autofocus -->
89
+ <input
90
+ type="text"
91
+ autocomplete="off"
92
+ bind:value={local_part}
93
+ disabled={!userCanEditConfig || !can_write}
94
+ class={addressError === ''
95
+ ? ''
96
+ : 'border border-red-700 bg-red-100 border-opacity-30 focus:border-red-700 focus:border-opacity-30 focus-visible:ring-red-700 focus-visible:ring-opacity-25 focus-visible:border-red-700'}
97
+ oninput={() => {
98
+ dirtyLocalPart = true
99
+ }}
100
+ />
101
+ </div>
102
+ </label>
103
+
104
+ <div class="flex flex-col w-full">
105
+ <ClipboardPanel content={fullEmailAddress} />
106
+
107
+ <div class="text-red-600 dark:text-red-400 text-2xs mt-1.5"
108
+ >{dirtyLocalPart ? addressError : ''}</div
109
+ >
110
+ {#if !isCloudHosted()}
111
+ <div class="mt-1">
112
+ <Toggle
113
+ size="sm"
114
+ checked={workspaced_local_part}
115
+ disabled={!can_write || !userCanEditConfig}
116
+ on:change={() => {
117
+ workspaced_local_part = !workspaced_local_part
118
+ dirtyLocalPart = true
119
+ }}
120
+ options={{
121
+ right: 'Prefix with workspace',
122
+ rightTooltip:
123
+ 'Prefixes the email address with the workspace ID (e.g., ${workspace_id}-${local_part}@). Note: deploying the email trigger to another workspace updates the email address workspace prefix accordingly.',
124
+ rightDocumentationLink:
125
+ 'https://www.windmill.dev/docs/advanced/email_triggers#workspace-prefix'
126
+ }}
127
+ />
128
+ </div>
129
+ {/if}
130
+ </div>
131
+ </div>
132
+ </Section>
133
+ </div>
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ initialTriggerPath?: string | undefined;
3
+ dirtyLocalPart?: boolean;
4
+ local_part: string | undefined;
5
+ can_write?: boolean;
6
+ headless?: boolean;
7
+ workspaced_local_part?: boolean;
8
+ isValid?: boolean;
9
+ isDraftOnly?: boolean;
10
+ showTestingBadge?: boolean;
11
+ }
12
+ declare const EmailTriggerEditorConfigSection: import("svelte").Component<Props, {}, "local_part" | "workspaced_local_part" | "isValid" | "dirtyLocalPart">;
13
+ type EmailTriggerEditorConfigSection = ReturnType<typeof EmailTriggerEditorConfigSection>;
14
+ export default EmailTriggerEditorConfigSection;