windmill-components 1.537.1 → 1.542.5

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 (275) 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 +35 -9
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/ConcurrentJobsChart.svelte +36 -48
  8. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  9. package/package/components/CustomPopover.svelte.d.ts +1 -1
  10. package/package/components/DropdownSelect.svelte +26 -0
  11. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  12. package/package/components/DropdownV2Inner.svelte +1 -1
  13. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  14. package/package/components/DynamicInput.svelte.d.ts +11 -0
  15. package/package/components/EditableSchemaForm.svelte +119 -95
  16. package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
  17. package/package/components/Editor.svelte +86 -93
  18. package/package/components/Editor.svelte.d.ts +4 -3
  19. package/package/components/EditorBar.svelte +2 -5
  20. package/package/components/EditorSettings.svelte +11 -9
  21. package/package/components/FlowBuilder.svelte +3 -3
  22. package/package/components/FlowLogRow.svelte +64 -0
  23. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  24. package/package/components/FlowLogViewer.svelte +406 -373
  25. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  26. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  27. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  28. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  29. package/package/components/FlowStatusViewerInner.svelte +34 -3
  30. package/package/components/FolderPicker.svelte +1 -1
  31. package/package/components/InputTransformForm.svelte +20 -10
  32. package/package/components/JobArgs.svelte +1 -1
  33. package/package/components/JobLoader.svelte.d.ts +1 -1
  34. package/package/components/JobStatus.svelte +2 -0
  35. package/package/components/LogSnippetViewer.svelte +3 -3
  36. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  37. package/package/components/LogViewer.svelte +87 -71
  38. package/package/components/LogViewer.svelte.d.ts +1 -0
  39. package/package/components/Path.svelte +7 -1
  40. package/package/components/Path.svelte.d.ts +1 -1
  41. package/package/components/PrefixedInput.svelte +120 -0
  42. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  43. package/package/components/QueuePosition.svelte +81 -0
  44. package/package/components/QueuePosition.svelte.d.ts +8 -0
  45. package/package/components/ResourceNarrowing.svelte +13 -0
  46. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  47. package/package/components/ResourceTypePicker.svelte +49 -74
  48. package/package/components/RunChart.svelte +74 -89
  49. package/package/components/RunChart.svelte.d.ts +10 -22
  50. package/package/components/S3FilePicker.svelte +1 -1
  51. package/package/components/SchemaForm.svelte.d.ts +2 -2
  52. package/package/components/ScriptBuilder.svelte +2 -1
  53. package/package/components/ScriptEditor.svelte +4 -3
  54. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  55. package/package/components/ServiceLogsInner.svelte +1 -1
  56. package/package/components/ShareModal.svelte.d.ts +1 -1
  57. package/package/components/SimpleEditor.svelte +4 -67
  58. package/package/components/StringTypeNarrowing.svelte +5 -10
  59. package/package/components/TemplateEditor.svelte +2 -16
  60. package/package/components/TimeAgo.svelte +1 -1
  61. package/package/components/TimeAgo.svelte.d.ts +1 -0
  62. package/package/components/Toggle.svelte +2 -1
  63. package/package/components/Toggle.svelte.d.ts +2 -1
  64. package/package/components/WorkerRepl.svelte +1 -1
  65. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  66. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  67. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  68. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  69. package/package/components/apps/components/display/table/utils.js +36 -5
  70. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  71. package/package/components/apps/editor/AppEditor.svelte +4 -3
  72. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  73. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  74. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  75. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  76. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  77. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  78. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  79. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
  80. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  81. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  82. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  83. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  84. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  85. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  86. package/package/components/common/OnChange.svelte.d.ts +11 -4
  87. package/package/components/common/badge/Badge.svelte +9 -2
  88. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  89. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  90. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  91. package/package/components/common/drawer/Disposable.svelte +9 -11
  92. package/package/components/common/drawer/Drawer.svelte +3 -4
  93. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  94. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  95. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  96. package/package/components/common/tabs/TabContent.svelte +2 -7
  97. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  98. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  99. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  100. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  101. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  102. package/package/components/copilot/MetadataGen.svelte +1 -1
  103. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
  104. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  105. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  106. package/package/components/copilot/chat/anthropic.js +208 -0
  107. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  108. package/package/components/copilot/chat/api/apiTools.js +10 -7
  109. package/package/components/copilot/chat/api/core.d.ts +1 -1
  110. package/package/components/copilot/chat/api/core.js +7 -2
  111. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  112. package/package/components/copilot/chat/ask/core.js +7 -2
  113. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  114. package/package/components/copilot/chat/flow/core.js +14 -4
  115. package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
  116. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  117. package/package/components/copilot/chat/navigator/core.js +7 -2
  118. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  119. package/package/components/copilot/chat/script/core.d.ts +5 -4
  120. package/package/components/copilot/chat/script/core.js +131 -19
  121. package/package/components/copilot/chat/shared.d.ts +7 -7
  122. package/package/components/copilot/lib.d.ts +29 -8
  123. package/package/components/copilot/lib.js +199 -24
  124. package/package/components/custom_ui.d.ts +1 -0
  125. package/package/components/flows/content/FlowInput.svelte +5 -5
  126. package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
  127. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  128. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  129. package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
  130. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  131. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  132. package/package/components/flows/content/FlowRetries.svelte +108 -3
  133. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  134. package/package/components/flows/flowInfers.js +8 -35
  135. package/package/components/flows/flowStore.d.ts +45 -1
  136. package/package/components/flows/flowStore.js +1 -1
  137. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  138. package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
  139. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  140. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  141. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  142. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  143. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  144. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  145. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  146. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  147. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  148. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  149. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  150. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  151. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  152. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  153. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  154. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  155. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  156. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  157. package/package/components/home/ItemsList.svelte +17 -13
  158. package/package/components/home/TreeView.svelte +21 -27
  159. package/package/components/home/TreeView.svelte.d.ts +2 -29
  160. package/package/components/home/TreeViewRoot.svelte +11 -23
  161. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  162. package/package/components/icons/GitIcon.svelte +10 -2
  163. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  164. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  165. package/package/components/meltComponents/Popover.svelte +23 -3
  166. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  167. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  168. package/package/components/monacoLanguagesOptions.js +109 -0
  169. package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
  170. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  171. package/package/components/propertyPicker/utils.js +14 -7
  172. package/package/components/runs/JobRunsPreview.svelte +212 -177
  173. package/package/components/runs/JobsLoader.svelte +2 -2
  174. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  175. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  176. package/package/components/runs/RunBadges.svelte +100 -0
  177. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  178. package/package/components/runs/RunLabels.svelte +86 -0
  179. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  180. package/package/components/runs/RunOption.svelte +20 -0
  181. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  182. package/package/components/runs/RunRow.svelte +239 -151
  183. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  184. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  185. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  186. package/package/components/runs/RunsFilter.svelte +369 -243
  187. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  188. package/package/components/runs/RunsQueue.svelte +96 -25
  189. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  190. package/package/components/runs/RunsTable.svelte +62 -71
  191. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  192. package/package/components/runs/runs-grid.css +95 -0
  193. package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
  194. package/package/components/schema/FlowPropertyEditor.svelte +197 -206
  195. package/package/components/schema/PropertyEditor.svelte +33 -35
  196. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
  197. package/package/components/search/GlobalSearchModal.svelte +8 -1
  198. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  199. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  200. package/package/components/select/Select.svelte +2 -1
  201. package/package/components/select/Select.svelte.d.ts +25 -13
  202. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  203. package/package/components/settings/TokenDisplay.svelte +1 -1
  204. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  205. package/package/components/sidebar/SidebarContent.svelte +48 -2
  206. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  207. package/package/components/toast.js +6 -3
  208. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  209. package/package/components/triggers/CaptureWrapper.svelte +19 -3
  210. package/package/components/triggers/TriggerLabel.svelte +8 -0
  211. package/package/components/triggers/TriggerTokens.svelte +1 -1
  212. package/package/components/triggers/TriggersEditor.svelte +9 -5
  213. package/package/components/triggers/TriggersTable.svelte +2 -2
  214. package/package/components/triggers/TriggersWrapper.svelte +16 -5
  215. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  216. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  217. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  218. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  219. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  220. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  221. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  222. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  223. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  224. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  225. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  226. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  227. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  228. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  229. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  230. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  231. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  232. package/package/components/triggers/email/utils.d.ts +4 -0
  233. package/package/components/triggers/email/utils.js +52 -0
  234. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  235. package/package/components/triggers/http/utils.js +1 -1
  236. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  237. package/package/components/triggers/triggers.svelte.js +24 -2
  238. package/package/components/triggers/utils.js +19 -5
  239. package/package/components/triggers.d.ts +1 -1
  240. package/package/components/triggers.js +2 -0
  241. package/package/components/wizards/AgGridWizard.svelte +85 -80
  242. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  243. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  244. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  245. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  246. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  247. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  248. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  249. package/package/gen/core/OpenAPI.js +1 -1
  250. package/package/gen/schemas.gen.d.ts +142 -3
  251. package/package/gen/schemas.gen.js +144 -3
  252. package/package/gen/services.gen.d.ts +129 -1
  253. package/package/gen/services.gen.js +267 -1
  254. package/package/gen/types.gen.d.ts +434 -8
  255. package/package/hubPaths.json +4 -2
  256. package/package/infer.js +1 -1
  257. package/package/keyboardChain.d.ts +5 -0
  258. package/package/keyboardChain.js +40 -0
  259. package/package/services/JobManager.js +2 -2
  260. package/package/stores.d.ts +3 -1
  261. package/package/stores.js +8 -5
  262. package/package/utils/workspaceHierarchy.d.ts +27 -0
  263. package/package/utils/workspaceHierarchy.js +101 -0
  264. package/package/utils.d.ts +6 -3
  265. package/package/utils.js +30 -15
  266. package/package/workspace_settings.js +2 -3
  267. package/package.json +9 -11
  268. package/package/components/DynSelect.svelte.d.ts +0 -11
  269. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  270. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  271. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  272. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  273. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  274. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  275. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -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;