windmill-components 1.550.0 → 1.555.1

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 (268) hide show
  1. package/package/aiStore.d.ts +13 -0
  2. package/package/aiStore.js +70 -0
  3. package/package/common.d.ts +2 -1
  4. package/package/components/AIProviderPicker.svelte +25 -8
  5. package/package/components/ArgEnum.svelte +3 -2
  6. package/package/components/ArgEnum.svelte.d.ts +1 -0
  7. package/package/components/ArgInput.svelte +235 -174
  8. package/package/components/ArgInput.svelte.d.ts +4 -1
  9. package/package/components/ArrayTypeNarrowing.svelte +38 -32
  10. package/package/components/AutoscalingEvents.svelte +21 -5
  11. package/package/components/AutoscalingEvents.svelte.d.ts +4 -18
  12. package/package/components/DateTimeInput.svelte +8 -6
  13. package/package/components/DeployButton.svelte +1 -1
  14. package/package/components/Dev.svelte +6 -4
  15. package/package/components/EditableSchemaForm.svelte +7 -6
  16. package/package/components/Editor.svelte +2 -1
  17. package/package/components/EditorSettings.svelte +5 -5
  18. package/package/components/EditorSettings.svelte.d.ts +4 -18
  19. package/package/components/FakeMonacoPlaceHolder.svelte +4 -2
  20. package/package/components/FakeMonacoPlaceHolder.svelte.d.ts +1 -0
  21. package/package/components/FieldHeader.svelte +5 -7
  22. package/package/components/FirstStepInputs.svelte +1 -1
  23. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  24. package/package/components/FlowPlugConnect.svelte +8 -2
  25. package/package/components/FlowPlugConnect.svelte.d.ts +1 -0
  26. package/package/components/FlowPreviewContent.svelte +113 -92
  27. package/package/components/FlowPreviewContent.svelte.d.ts +3 -3
  28. package/package/components/FlowStatusViewer.svelte +3 -2
  29. package/package/components/FlowStatusViewerInner.svelte +1 -1
  30. package/package/components/FolderEditor.svelte +6 -7
  31. package/package/components/GroupEditor.svelte +148 -141
  32. package/package/components/GroupEditor.svelte.d.ts +5 -4
  33. package/package/components/InputTransformForm.svelte +88 -82
  34. package/package/components/InputTransformSchemaForm.svelte +5 -4
  35. package/package/components/InstanceSetting.svelte +17 -9
  36. package/package/components/JsonEditor.svelte +18 -9
  37. package/package/components/JsonEditor.svelte.d.ts +1 -1
  38. package/package/components/JsonInputs.svelte +1 -1
  39. package/package/components/ModulePreviewForm.svelte +23 -19
  40. package/package/components/NumberTypeNarrowing.svelte +32 -16
  41. package/package/components/ObjectStoreConfigSettings.svelte +27 -19
  42. package/package/components/Path.svelte +2 -8
  43. package/package/components/Path.svelte.d.ts +1 -1
  44. package/package/components/ResourceEditor.svelte +3 -10
  45. package/package/components/ResourcePicker.svelte +85 -72
  46. package/package/components/ResourcePicker.svelte.d.ts +2 -0
  47. package/package/components/RunChart.svelte +1 -1
  48. package/package/components/RunForm.svelte +11 -7
  49. package/package/components/S3ArrayHelperButton.svelte +12 -6
  50. package/package/components/S3ArrayHelperButton.svelte.d.ts +1 -0
  51. package/package/components/S3FilePicker.svelte +1 -1
  52. package/package/components/SchemaForm.svelte +18 -10
  53. package/package/components/SchemaForm.svelte.d.ts +7 -1
  54. package/package/components/SchemaFormWithArgPicker.svelte +1 -1
  55. package/package/components/ScriptBuilder.svelte +2 -2
  56. package/package/components/ScriptEditor.svelte +4 -3
  57. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  58. package/package/components/ShareModal.svelte +4 -4
  59. package/package/components/SimpleEditor.svelte +6 -2
  60. package/package/components/SimpleEditor.svelte.d.ts +3 -0
  61. package/package/components/StringTypeNarrowing.svelte +5 -1
  62. package/package/components/SuperadminSettingsInner.svelte +3 -3
  63. package/package/components/TemplateEditor.svelte +18 -9
  64. package/package/components/Toast.svelte +2 -7
  65. package/package/components/Toast.svelte.d.ts +4 -18
  66. package/package/components/Toggle.svelte +17 -7
  67. package/package/components/ToggleHubWorkspaceQuick.svelte +3 -3
  68. package/package/components/WorkerGroup.svelte +2 -14
  69. package/package/components/apps/components/buttons/AppButton.svelte +57 -39
  70. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -2
  71. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -1
  72. package/package/components/apps/components/display/dbtable/utils.d.ts +8 -8
  73. package/package/components/apps/components/display/table/utils.js +13 -3
  74. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -3
  75. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -1
  76. package/package/components/apps/editor/AppEditorHeader.svelte +33 -271
  77. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +233 -0
  78. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +18 -0
  79. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +47 -0
  80. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +8 -0
  81. package/package/components/apps/editor/GridEditor.svelte +7 -2
  82. package/package/components/apps/editor/appDeploy.svelte.d.ts +1 -0
  83. package/package/components/apps/editor/appDeploy.svelte.js +6 -0
  84. package/package/components/apps/editor/appUtils.d.ts +1 -0
  85. package/package/components/apps/editor/appUtils.js +30 -1
  86. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -1
  87. package/package/components/apps/editor/component/components.d.ts +3 -3
  88. package/package/components/apps/editor/component/components.js +1 -1
  89. package/package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
  90. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -4
  91. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  92. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  93. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  94. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +58 -8
  95. package/package/components/auditLogs/AuditLogsFilters.svelte +1 -1
  96. package/package/components/common/ResizeTransitionWrapper.svelte +39 -0
  97. package/package/components/common/ResizeTransitionWrapper.svelte.d.ts +12 -0
  98. package/package/components/common/badge/CountBadge.svelte +29 -0
  99. package/package/components/common/badge/CountBadge.svelte.d.ts +8 -0
  100. package/package/components/common/button/Button.svelte +1 -0
  101. package/package/components/common/button/ConnectionButton.svelte +6 -1
  102. package/package/components/common/button/ConnectionButton.svelte.d.ts +2 -0
  103. package/package/components/common/button/RefreshButton.svelte +8 -4
  104. package/package/components/common/button/RefreshButton.svelte.d.ts +3 -0
  105. package/package/components/common/calendarPicker/CalendarPicker.svelte +1 -1
  106. package/package/components/common/fileInput/FileInput.svelte +7 -6
  107. package/package/components/common/fileUpload/S3ArgInput.svelte +11 -9
  108. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +1 -0
  109. package/package/components/common/popup/PopupV2.svelte +6 -0
  110. package/package/components/common/toggleButton-v2/ToggleButton.svelte +17 -26
  111. package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +16 -30
  112. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
  113. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +3 -3
  114. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  115. package/package/components/copilot/CodeCompletionStatus.svelte +2 -1
  116. package/package/components/copilot/CronGen.svelte +1 -1
  117. package/package/components/copilot/FlowInlineScriptAIButton.svelte +2 -2
  118. package/package/components/copilot/IteratorGen.svelte +30 -25
  119. package/package/components/copilot/IteratorGen.svelte.d.ts +8 -7
  120. package/package/components/copilot/MetadataGen.svelte +4 -3
  121. package/package/components/copilot/PredicateGen.svelte +15 -12
  122. package/package/components/copilot/PredicateGen.svelte.d.ts +5 -4
  123. package/package/components/copilot/RegexGen.svelte +1 -1
  124. package/package/components/copilot/ScriptFix.svelte +1 -1
  125. package/package/components/copilot/ScriptGen.svelte +2 -1
  126. package/package/components/copilot/StepGenQuick.svelte +15 -16
  127. package/package/components/copilot/StepGenQuick.svelte.d.ts +14 -13
  128. package/package/components/copilot/StepInputGen.svelte +50 -36
  129. package/package/components/copilot/StepInputGen.svelte.d.ts +13 -10
  130. package/package/components/copilot/StepInputsGen.svelte +18 -19
  131. package/package/components/copilot/StepInputsGen.svelte.d.ts +4 -18
  132. package/package/components/copilot/autocomplete/Autocompletor.js +1 -1
  133. package/package/components/copilot/autocomplete/request.js +1 -1
  134. package/package/components/copilot/chat/AIChat.svelte +2 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +2 -1
  136. package/package/components/copilot/chat/AiChatLayout.svelte +2 -1
  137. package/package/components/copilot/chat/ProviderModelSelector.svelte +10 -9
  138. package/package/components/copilot/chat/ProviderModelSelector.svelte.d.ts +2 -17
  139. package/package/components/copilot/chat/flow/FlowAIButton.svelte +1 -1
  140. package/package/components/copilot/chat/script/core.js +2 -1
  141. package/package/components/copilot/chat/shared.js +2 -1
  142. package/package/components/copilot/lib.js +2 -1
  143. package/package/components/details/DetailPageLayout.svelte +3 -2
  144. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  145. package/package/components/flows/CreateActionsFlow.svelte +1 -1
  146. package/package/components/flows/FlowChatInterface.svelte +404 -0
  147. package/package/components/flows/FlowChatInterface.svelte.d.ts +19 -0
  148. package/package/components/flows/FlowChatMessage.svelte +41 -0
  149. package/package/components/flows/FlowChatMessage.svelte.d.ts +9 -0
  150. package/package/components/flows/FlowConversationsSidebar.svelte +213 -0
  151. package/package/components/flows/FlowConversationsSidebar.svelte.d.ts +15 -0
  152. package/package/components/flows/FlowEditor.svelte.d.ts +1 -1
  153. package/package/components/flows/FlowModuleIcon.svelte +10 -10
  154. package/package/components/flows/common/FlowCard.svelte +10 -2
  155. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  156. package/package/components/flows/common/FlowCardHeader.svelte +2 -1
  157. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  158. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -4
  159. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -1
  160. package/package/components/flows/content/FlowInput.svelte +381 -259
  161. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -1
  162. package/package/components/flows/content/FlowInputsQuick.svelte +55 -34
  163. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +2 -2
  164. package/package/components/flows/content/FlowModuleComponent.svelte +5 -10
  165. package/package/components/flows/flowInfers.d.ts +60 -0
  166. package/package/components/flows/flowInfers.js +72 -66
  167. package/package/components/flows/{flowStore.d.ts → flowStore.svelte.d.ts} +1 -0
  168. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -1
  169. package/package/components/flows/map/FlowErrorHandlerItem.svelte +4 -2
  170. package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -0
  171. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  172. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -2
  173. package/package/components/flows/map/FlowStickyNode.svelte +2 -2
  174. package/package/components/flows/map/FlowStickyNode.svelte.d.ts +1 -0
  175. package/package/components/flows/map/InsertModuleButton.svelte +5 -2
  176. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +4 -3
  177. package/package/components/flows/map/InsertModuleInner.svelte +3 -1
  178. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +2 -2
  179. package/package/components/flows/map/VirtualItem.svelte +1 -2
  180. package/package/components/flows/pickers/PickHubScriptQuick.svelte +8 -3
  181. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
  182. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +15 -12
  183. package/package/components/flows/propPicker/PropPickerWrapper.svelte +1 -15
  184. package/package/components/graph/FlowGraphV2.svelte +2 -1
  185. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  186. package/package/components/graph/graphBuilder.svelte.d.ts +2 -0
  187. package/package/components/graph/graphBuilder.svelte.js +1 -0
  188. package/package/components/graph/renderers/edges/BaseEdge.svelte +1 -0
  189. package/package/components/graph/renderers/nodes/InputNode.svelte +13 -2
  190. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +2 -27
  191. package/package/components/instanceSettings.js +17 -0
  192. package/package/components/progressBar/ProgressBar.svelte +1 -1
  193. package/package/components/raw_apps/FileEditorIcon.svelte +1 -1
  194. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +4 -18
  195. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +2 -8
  196. package/package/components/raw_apps/RawAppBackgroundRunner.svelte.d.ts +4 -18
  197. package/package/components/raw_apps/RawAppEditor.svelte +6 -7
  198. package/package/components/raw_apps/RawAppEditorHeader.svelte +48 -301
  199. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +18 -19
  200. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +10 -16
  201. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +13 -13
  202. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +8 -11
  203. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -2
  204. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +0 -1
  205. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +7 -13
  206. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +8 -8
  207. package/package/components/raw_apps/RawAppPreview.svelte +3 -7
  208. package/package/components/raw_apps/RawAppPreview.svelte.d.ts +5 -19
  209. package/package/components/raw_apps/utils.d.ts +1 -1
  210. package/package/components/raw_apps/utils.js +3 -3
  211. package/package/components/runs/RunOption.svelte +2 -2
  212. package/package/components/runs/RunsFilter.svelte +15 -12
  213. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  214. package/package/components/schema/EditableSchemaDrawer.svelte +19 -18
  215. package/package/components/schema/FlowPropertyEditor.svelte +9 -2
  216. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  217. package/package/components/schema/PropertyEditor.svelte +22 -26
  218. package/package/components/schema/SchemaFormDND.svelte +3 -2
  219. package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
  220. package/package/components/select/DraggableTags.svelte +2 -2
  221. package/package/components/select/MultiSelect.svelte +14 -8
  222. package/package/components/select/Select.svelte +12 -5
  223. package/package/components/select/Select.svelte.d.ts +11 -0
  224. package/package/components/select/SelectDropdown.svelte +98 -46
  225. package/package/components/select/SelectDropdown.svelte.d.ts +10 -0
  226. package/package/components/select/utils.svelte.js +2 -0
  227. package/package/components/settings/CreateToken.svelte +76 -49
  228. package/package/components/settings/WorkspaceUserSettings.svelte +20 -17
  229. package/package/components/sidebar/CriticalAlertTable.svelte +2 -1
  230. package/package/components/sidebar/Linkify.svelte +14 -0
  231. package/package/components/sidebar/Linkify.svelte.d.ts +5 -0
  232. package/package/components/sidebar/WorkspaceMenu.svelte +8 -3
  233. package/package/components/table/tableUtils.js +1 -1
  234. package/package/components/text_input/TextInput.svelte +30 -0
  235. package/package/components/text_input/TextInput.svelte.d.ts +17 -0
  236. package/package/components/triggers/TriggersEditor.svelte +11 -1
  237. package/package/components/triggers/triggers.svelte.d.ts +1 -1
  238. package/package/components/triggers/triggers.svelte.js +8 -4
  239. package/package/components/tutorials/FlowBuilderTutorialErrorHandler.svelte +2 -2
  240. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +3 -0
  241. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +49 -17
  242. package/package/components/tutorials/Tutorial.svelte +9 -0
  243. package/package/components/tutorials/Tutorial.svelte.d.ts +1 -0
  244. package/package/components/tutorials/app/AppTutorial.svelte +41 -57
  245. package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte +3 -5
  246. package/package/components/tutorials/app/ConnectionTutorial.svelte +2 -2
  247. package/package/components/tutorials/utils.js +2 -154
  248. package/package/components/vscode.js +16 -8
  249. package/package/components/workspaceSettings/AISettings.svelte +4 -3
  250. package/package/components/workspaceSettings/CreateWorkspace.svelte +2 -2
  251. package/package/components/workspaceSettings/DucklakeSettings.svelte +64 -7
  252. package/package/components/workspaceSettings/StorageSettings.svelte +24 -26
  253. package/package/editorUtils.d.ts +1 -1
  254. package/package/gen/core/OpenAPI.js +1 -1
  255. package/package/gen/schemas.gen.d.ts +82 -1
  256. package/package/gen/schemas.gen.js +82 -1
  257. package/package/gen/services.gen.d.ts +175 -1
  258. package/package/gen/services.gen.js +345 -2
  259. package/package/gen/types.gen.d.ts +1324 -549
  260. package/package/script_helpers.js +5 -5
  261. package/package/services/JobManager.js +4 -2
  262. package/package/stores.d.ts +4 -13
  263. package/package/stores.js +5 -68
  264. package/package/toast.js +2 -1
  265. package/package/utils.d.ts +1 -0
  266. package/package/utils.js +3 -0
  267. package/package.json +5 -5
  268. /package/package/components/flows/{flowStore.js → flowStore.svelte.js} +0 -0
@@ -0,0 +1,17 @@
1
+ export declare function inputBorderClass({ error, forceFocus }?: {
2
+ error?: boolean;
3
+ forceFocus?: boolean;
4
+ }): string;
5
+ export declare const inputBaseClass = "rounded-md focus:ring-0 no-default-style text-sm text-tertiary dark:text-secondary !bg-surface-secondary disabled:!bg-surface-disabled disabled:!border-none disabled:!text-hint disabled:cursor-not-allowed shadow-none py-2 px-3 placeholder-hint";
6
+ import type { HTMLInputAttributes } from 'svelte/elements';
7
+ type Props = {
8
+ inputProps?: HTMLInputAttributes;
9
+ value?: string;
10
+ class?: string;
11
+ error?: string;
12
+ };
13
+ declare const TextInput: import("svelte").Component<Props, {
14
+ focus: () => void;
15
+ }, "value">;
16
+ type TextInput = ReturnType<typeof TextInput>;
17
+ export default TextInput;
@@ -15,6 +15,7 @@ import { triggerTypeToCaptureKind, CLOUD_DISABLED_TRIGGER_TYPES } from './utils'
15
15
  import { isCloudHosted } from '../../cloud';
16
16
  import { ScheduleService, WebsocketTriggerService, PostgresTriggerService, KafkaTriggerService, NatsTriggerService, MqttTriggerService, HttpTriggerService, GcpTriggerService, SqsTriggerService, EmailTriggerService } from '../../gen';
17
17
  import { sendUserToast } from '../../toast';
18
+ import Alert from '../common/alert/Alert.svelte';
18
19
  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
20
  let config = $state({});
20
21
  let width = $state(0);
@@ -24,6 +25,8 @@ let renderCount = $state(0);
24
25
  let loading = $state(false);
25
26
  const useVerticalTriggerBar = $derived(width < 1000);
26
27
  const { triggersState, triggersCount } = getContext('TriggerContext');
28
+ const flowEditorContext = getContext('FlowEditorContext');
29
+ const chatInputEnabled = $derived(Boolean(flowEditorContext?.flowStore?.val?.value?.chat_input_enabled));
27
30
  const dispatch = createEventDispatcher();
28
31
  onDestroy(() => {
29
32
  dispatch('exitTriggers');
@@ -143,6 +146,13 @@ const cloudDisabled = $derived(CLOUD_DISABLED_TRIGGER_TYPES.includes(triggersSta
143
146
  </script>
144
147
 
145
148
  <div bind:clientWidth={width} class="h-full w-full">
149
+ {#if chatInputEnabled}
150
+ <div class="p-2 pb-0">
151
+ <Alert type="warning" title="Chat Input Mode Enabled" size="xs">
152
+ This flow will only accept <span class="font-mono text-xs bg-surface-secondary px-1 rounded">user_message</span> as input parameter.
153
+ </Alert>
154
+ </div>
155
+ {/if}
146
156
  <FlowCard {noEditor} noHeader>
147
157
  <Splitpanes horizontal>
148
158
  <Pane>
@@ -241,7 +251,7 @@ const cloudDisabled = $derived(CLOUD_DISABLED_TRIGGER_TYPES.includes(triggersSta
241
251
  {/key}
242
252
  {:else}
243
253
  <span class="text-sm text-tertiary text-center mx-auto mt-2"
244
- >{`Select a trigger from the ${useVerticalTriggerBar ? 'left toolbar' : 'table'} or a create a new one`}</span
254
+ >{`Select a trigger from the ${useVerticalTriggerBar ? 'left toolbar' : 'table'} or create a new one`}</span
245
255
  >
246
256
  {/if}
247
257
  </div>
@@ -1,6 +1,6 @@
1
1
  import { type TriggersCount } from '../../gen';
2
2
  import { type Trigger } from './utils';
3
- import type { Writable } from 'svelte/store';
3
+ import { type Writable } from 'svelte/store';
4
4
  import type { TriggerType } from './utils';
5
5
  import type { UserExt } from '../../stores';
6
6
  import type { ScheduleTrigger } from '../triggers';
@@ -1,5 +1,7 @@
1
1
  import { KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, HttpTriggerService, GcpTriggerService, EmailTriggerService } from '../../gen';
2
+ import { enterpriseLicense } from '../../stores';
2
3
  import { getLightConfig, sortTriggers, updateTriggersCount } from './utils';
4
+ import { get } from 'svelte/store';
3
5
  import { canWrite, formatCron, generateRandomString } from '../../utils';
4
6
  export class Triggers {
5
7
  #triggers = $state([]);
@@ -346,12 +348,14 @@ export class Triggers {
346
348
  this.fetchHttpTriggers(triggersCountStore, workspaceId, path, isFlow, user),
347
349
  this.fetchWebsocketTriggers(triggersCountStore, workspaceId, path, isFlow, user),
348
350
  this.fetchPostgresTriggers(triggersCountStore, workspaceId, path, isFlow, user),
349
- this.fetchKafkaTriggers(triggersCountStore, workspaceId, path, isFlow, user),
350
351
  this.fetchNatsTriggers(triggersCountStore, workspaceId, path, isFlow, user),
351
352
  this.fetchMqttTriggers(triggersCountStore, workspaceId, path, isFlow, user),
352
- this.fetchSqsTriggers(triggersCountStore, workspaceId, path, isFlow, user),
353
- this.fetchGcpTriggers(triggersCountStore, workspaceId, path, isFlow, user),
354
- this.fetchEmailTriggers(triggersCountStore, workspaceId, path, isFlow, user)
353
+ this.fetchEmailTriggers(triggersCountStore, workspaceId, path, isFlow, user),
354
+ ...(get(enterpriseLicense) ? [
355
+ this.fetchKafkaTriggers(triggersCountStore, workspaceId, path, isFlow, user),
356
+ this.fetchSqsTriggers(triggersCountStore, workspaceId, path, isFlow, user),
357
+ this.fetchGcpTriggers(triggersCountStore, workspaceId, path, isFlow, user)
358
+ ] : [])
355
359
  ]);
356
360
  }
357
361
  }
@@ -46,14 +46,14 @@ export function runTutorial() {
46
46
  }
47
47
  },
48
48
  {
49
- element: '#flow-editor-error-handler',
49
+ element: '#flow-editor-add-step-error-handler-button',
50
50
  popover: {
51
51
  title: 'Error handler',
52
52
  description:
53
53
  'You can add an error handler to your flow. It will be executed if any of the steps in the flow fails.',
54
54
 
55
55
  onNextClick: () => {
56
- triggerPointerDown('#flow-editor-error-handler button')
56
+ triggerPointerDown('#flow-editor-add-step-error-handler-button')
57
57
  setTimeout(() => {
58
58
  driver.moveNext()
59
59
  })
@@ -172,6 +172,9 @@ export function runTutorial(indexToInsertAt) {
172
172
 
173
173
  {
174
174
  element: '#flow-editor-step-input',
175
+ onHighlighted: () => {
176
+ document.querySelector('#flow-editor-plug')?.parentElement?.classList.remove('opacity-0')
177
+ },
175
178
  popover: {
176
179
  title: 'Flow inputs',
177
180
  description: 'UI is autogenerated from your code.'
@@ -3,6 +3,7 @@ import { updateProgress } from '../../tutorialUtils';
3
3
  import { clickButtonBySelector, isFlowTainted, setInputBySelector, triggerPointerDown, waitForElementLoading } from './utils';
4
4
  import Tutorial from './Tutorial.svelte';
5
5
  import { refreshStateStore } from '../../svelte5Utils.svelte';
6
+ import { wait } from '../../utils';
6
7
  const { flowStore } = getContext('FlowEditorContext');
7
8
  const dispatch = createEventDispatcher();
8
9
  let tutorial = undefined;
@@ -30,16 +31,13 @@ export function runTutorial() {
30
31
  popover: {
31
32
  title: 'Flows inputs',
32
33
  description: 'Flows have inputs that can be used in the flow',
33
- onNextClick: () => {
34
- clickButtonBySelector('#flow-editor-virtual-Input')
35
- tick()
36
- .then(() => clickButtonBySelector('#add-flow-input-btn'))
37
- .then(tick)
38
- .then(() => setInputBySelector('input[placeholder="Field name"]', 'firstname'))
39
-
40
- setTimeout(() => {
41
- driver.moveNext()
42
- })
34
+ onNextClick: async () => {
35
+ triggerPointerDown('#flow-editor-virtual-Input')
36
+ await wait(20)
37
+ clickButtonBySelector('#add-flow-input-btn')
38
+ await wait(0)
39
+ setInputBySelector('input[placeholder="Field name"]', 'firstname')
40
+ setTimeout(() => driver.moveNext())
43
41
  }
44
42
  },
45
43
  element: '#flow-editor-virtual-Input'
@@ -53,11 +51,15 @@ export function runTutorial() {
53
51
  setTimeout(() => {
54
52
  driver.moveNext()
55
53
  })
54
+ },
55
+ onPrevClick: () => {
56
+ clickButtonBySelector('#add-flow-input-btn') // Close the input drawer
57
+ setTimeout(() => driver.movePrevious())
56
58
  }
57
59
  }
58
60
  },
59
61
  {
60
- element: '#flow-editor-add-property',
62
+ element: '*:has(> #flow-editor-add-property)',
61
63
  popover: {
62
64
  title: 'Add your property',
63
65
  description: 'Click here to save your property',
@@ -76,16 +78,26 @@ export function runTutorial() {
76
78
  description: 'Click here to add a step to your flow',
77
79
  onNextClick: () => {
78
80
  triggerPointerDown(`#flow-editor-add-step-0`)
79
- setTimeout(() => {
80
- driver.moveNext()
81
- })
81
+ setTimeout(() => driver.moveNext())
82
+ },
83
+ onPrevClick: async () => {
84
+ clickButtonBySelector('.delete-schema-field-button')
85
+ await wait(0)
86
+ clickButtonBySelector('#add-flow-input-btn')
87
+ await wait(0)
88
+ setInputBySelector('input[placeholder="Field name"]', 'firstname')
89
+ setTimeout(() => driver.movePrevious())
82
90
  }
83
91
  }
84
92
  },
85
93
  {
86
94
  popover: {
87
95
  title: 'Steps kind',
88
- description: "Choose the kind of step you want to add. Let's start with a simple action"
96
+ description: "Choose the kind of step you want to add. Let's start with a simple action",
97
+ onPrevClick: () => {
98
+ triggerPointerDown(`#flow-editor-add-step-0`)
99
+ setTimeout(() => driver.movePrevious())
100
+ }
89
101
  },
90
102
  element: '#flow-editor-insert-module'
91
103
  },
@@ -138,6 +150,7 @@ export function runTutorial() {
138
150
  title: 'Action editor',
139
151
  description: 'Windmill provides a full code editor to write your actions',
140
152
  onPrevClick: () => {
153
+ triggerPointerDown(`#flow-editor-virtual-Input`)
141
154
  triggerPointerDown(`#flow-editor-add-step-0`)
142
155
  setTimeout(() => {
143
156
  driver.movePrevious()
@@ -147,6 +160,9 @@ export function runTutorial() {
147
160
  },
148
161
  {
149
162
  element: '#flow-editor-step-input',
163
+ onHighlighted: () => {
164
+ document.querySelector('#flow-editor-plug')?.parentElement?.classList.remove('opacity-0')
165
+ },
150
166
  popover: {
151
167
  title: 'Autogenerated schema',
152
168
  description: 'The schema and the UI is autogenerated from your code'
@@ -154,10 +170,14 @@ export function runTutorial() {
154
170
  },
155
171
  {
156
172
  element: '#flow-editor-plug',
173
+ onHighlighted: () => {
174
+ document.querySelector('#flow-editor-plug')?.parentElement?.classList.remove('opacity-0')
175
+ },
157
176
  popover: {
158
177
  title: 'Connect',
159
178
  description:
160
179
  'You can provide static values or connect to other nodes result. Here we will connect to the firstname input',
180
+
161
181
  onNextClick: () => {
162
182
  clickButtonBySelector('#flow-editor-plug')
163
183
  setTimeout(() => {
@@ -187,6 +207,10 @@ export function runTutorial() {
187
207
  setTimeout(() => {
188
208
  driver.moveNext()
189
209
  })
210
+ },
211
+ onPrevClick: () => {
212
+ clickButtonBySelector('#flow-editor-plug')
213
+ setTimeout(() => driver.movePrevious())
190
214
  }
191
215
  }
192
216
  },
@@ -195,7 +219,11 @@ export function runTutorial() {
195
219
  element: '#flow-editor-step-input',
196
220
  popover: {
197
221
  title: 'Input connected!',
198
- description: 'The input is now connected to the firstname input'
222
+ description: 'The input is now connected to the firstname input',
223
+ onPrevClick: () => {
224
+ clickButtonBySelector('#flow-editor-plug')
225
+ setTimeout(() => driver.movePrevious())
226
+ }
199
227
  }
200
228
  },
201
229
 
@@ -215,7 +243,7 @@ export function runTutorial() {
215
243
  },
216
244
 
217
245
  {
218
- element: '#flow-preview-content',
246
+ element: 'textarea.w-full',
219
247
  popover: {
220
248
  title: 'Flow input',
221
249
  description: 'Let’s provide an input to our flow',
@@ -225,6 +253,10 @@ export function runTutorial() {
225
253
  setTimeout(() => {
226
254
  driver.moveNext()
227
255
  })
256
+ },
257
+ onPrevClick: () => {
258
+ clickButtonBySelector('#flow-editor-test-flow') // Close the test drawer
259
+ setTimeout(() => driver.movePrevious())
228
260
  }
229
261
  }
230
262
  },
@@ -5,15 +5,21 @@ import { ignoredTutorials } from './ignoredTutorials';
5
5
  import SkipTutorials from './SkipTutorials.svelte';
6
6
  import TutorialControls from './TutorialControls.svelte';
7
7
  import TutorialInner from './TutorialInner.svelte';
8
+ import { isCurrentlyInTutorial } from '../../stores';
8
9
  export let index = 0;
9
10
  export let name = 'action';
10
11
  export let tainted = false;
12
+ export let onDestroyed = undefined;
11
13
  export let getSteps = () => [];
12
14
  let totalSteps = 0;
13
15
  let tutorial = undefined;
14
16
  const dispatch = createEventDispatcher();
15
17
  // Render controls needs to be exposed so steps that have a custom render can call it
16
18
  export function renderControls({ config, state }) {
19
+ const popoverContent = document.querySelector('#driver-popover-content');
20
+ popoverContent?.addEventListener('pointerdown', (event) => {
21
+ event.stopPropagation();
22
+ });
17
23
  const popoverDescription = document.querySelector('#driver-popover-description');
18
24
  if (!tutorial) {
19
25
  return;
@@ -88,6 +94,7 @@ export const runTutorial = (options) => {
88
94
  dispatch('error', { detail: name });
89
95
  return;
90
96
  }
97
+ isCurrentlyInTutorial.val = true;
91
98
  tutorial = driver({
92
99
  allowClose: true,
93
100
  disableActiveInteraction: true,
@@ -98,9 +105,11 @@ export const runTutorial = (options) => {
98
105
  renderControls({ config, state });
99
106
  },
100
107
  onDestroyed: () => {
108
+ onDestroyed?.();
101
109
  if (!tutorial?.hasNextStep()) {
102
110
  $ignoredTutorials = Array.from(new Set([...$ignoredTutorials, index]));
103
111
  }
112
+ isCurrentlyInTutorial.val = false;
104
113
  }
105
114
  });
106
115
  const steps = getSteps(tutorial, options);
@@ -16,6 +16,7 @@ declare const Tutorial: $$__sveltets_2_IsomorphicComponent<{
16
16
  index?: number;
17
17
  name?: string;
18
18
  tainted?: boolean;
19
+ onDestroyed?: (() => void) | undefined;
19
20
  getSteps?: (driver: Driver, options?: {
20
21
  indexToInsertAt?: number;
21
22
  skipStepsCount?: number;
@@ -4,10 +4,12 @@ import { getContext } from 'svelte';
4
4
  import Tutorial from '../Tutorial.svelte';
5
5
  import { clickButtonBySelector, clickFirstButtonBySelector, connectInlineRunnableInputToComponentOutput, isAppTainted, updateInlineRunnableCode } from '../utils';
6
6
  import { updateProgress } from '../../../tutorialUtils';
7
+ import {} from 'driver.js';
8
+ import { wait } from '../../../utils';
7
9
  export let name;
8
10
  export let index;
9
11
  let tutorial = undefined;
10
- const { app, selectedComponent, focusedGrid, connectingInput } = getContext('AppViewerContext');
12
+ const { app, selectedComponent, focusedGrid } = getContext('AppViewerContext');
11
13
  const { history } = getContext('AppEditorContext');
12
14
  export function runTutorial() {
13
15
  tutorial?.runTutorial();
@@ -28,7 +30,7 @@ function addComponent(appComponentType) {
28
30
  on:skipAll
29
31
  tainted={isAppTainted($app)}
30
32
  getSteps={(driver) => {
31
- const steps = [
33
+ const steps: DriveStep[] = [
32
34
  {
33
35
  popover: {
34
36
  title: 'App editor tutorial',
@@ -91,7 +93,7 @@ function addComponent(appComponentType) {
91
93
  popover: {
92
94
  title: 'Component input',
93
95
  description:
94
- 'There are several ways to set the input of a component. It can be static, the result of a JS expression, connected to the output of another component, or the result of a inline runnable. Here we will create an inline runnable that will convert the text to uppercase.',
96
+ 'There are several ways to set the input of a component. It can be static, the result of a JS expression, connected to the output of another component, or the result of an inline runnable. Here we will create an inline runnable that will convert the text to uppercase.',
95
97
  onNextClick: () => {
96
98
  clickFirstButtonBySelector('#component-input')
97
99
  setTimeout(() => {
@@ -122,9 +124,7 @@ function addComponent(appComponentType) {
122
124
  description: "Let's create an inline script.",
123
125
  onNextClick: () => {
124
126
  clickButtonBySelector('#app-editor-create-inline-script')
125
- setTimeout(() => {
126
- driver.moveNext()
127
- })
127
+ setTimeout(() => driver.moveNext())
128
128
  }
129
129
  }
130
130
  },
@@ -134,7 +134,7 @@ function addComponent(appComponentType) {
134
134
  popover: {
135
135
  title: 'Choose a language',
136
136
  description:
137
- 'You can choose the language of your runnable. They are two type of runnables: frontend and backend.'
137
+ 'You can choose the language of your runnable. There are two type of runnables: frontend and backend.'
138
138
  }
139
139
  },
140
140
 
@@ -156,87 +156,71 @@ function addComponent(appComponentType) {
156
156
  },
157
157
  {
158
158
  element: '#create-deno-script',
159
+ onHighlighted: () => {
160
+ document.querySelector('#schema-plug-x')?.parentElement?.classList.remove('opacity-0')
161
+ },
159
162
  popover: {
160
163
  title: 'Create a deno script',
161
164
  description:
162
165
  "Let's create a simple deno script. For the sake of this tutorial, we will create a script that converts the text to uppercase.",
163
- onNextClick: () => {
166
+ onNextClick: async () => {
164
167
  clickButtonBySelector('#create-deno-script')
165
- setTimeout(() => {
166
- if ($selectedComponent?.[0]) {
167
- updateInlineRunnableCode(
168
- $app,
169
- $selectedComponent[0],
170
- `export async function main(x: string) {
171
- return x?.toLocaleUpperCase();
172
- }
173
- `
174
- )
175
- }
168
+ await wait(50)
169
+ if ($selectedComponent?.[0]) {
170
+ updateInlineRunnableCode(
171
+ $app,
172
+ $selectedComponent[0],
173
+ 'export function main(x: string) {\n return x?.toLocaleUpperCase();\n}'
174
+ )
175
+ }
176
176
 
177
- driver.moveNext()
178
- })
177
+ driver.moveNext()
179
178
  }
180
179
  }
181
180
  },
182
181
  {
183
- element: '#schema-plug',
182
+ element: '#schema-plug-x',
183
+ onHighlighted: () => {
184
+ document.querySelector('#schema-plug-x')?.parentElement?.classList.remove('opacity-0')
185
+ },
184
186
  popover: {
185
187
  title: 'Connect the function input',
186
188
  description:
187
189
  "The function we created has an string input 'x'. We can connect the output of the text component to it.",
188
190
  onNextClick: () => {
189
- clickButtonBySelector('#schema-plug')
191
+ clickButtonBySelector('#schema-plug-x')
190
192
  setTimeout(() => {
191
193
  driver.moveNext()
192
194
  })
193
195
  }
194
196
  }
195
197
  },
196
-
197
198
  {
198
- element: '#connect-output-d',
199
+ element: '#connect-output-a',
199
200
  popover: {
200
201
  title: 'Select the output',
201
- description: ' ',
202
+ description: 'Open the output selector of the text input component.',
202
203
  onNextClick: () => {
203
- $connectingInput.opened = false
204
- $connectingInput.input = undefined
205
-
204
+ clickButtonBySelector('#connect-output-a')
206
205
  setTimeout(() => {
207
206
  driver.moveNext()
208
207
  })
209
- },
210
- onPopoverRender: (popover, opts) => {
211
- const wrapper = document.createElement('div')
212
- wrapper.classList.add('flex', 'flex-col', 'gap-2', 'w-full', 'items-start')
213
-
214
- const p1 = document.createElement('p')
215
- p1.innerText =
216
- 'You can now select the output in the output menu. Click on the little red button to open the menu.'
217
-
218
- const id = document.createElement('div')
219
- id.innerHTML = `<button class="bg-red-500/70 border border-red-600 px-1 py-0.5" title="Outputs" aria-label="Open output"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide-icon lucide lucide-plug-2 "><path d="M9 2v6"></path><path d="M15 2v6"></path><path d="M12 17v5"></path><path d="M5 8h14"></path><path d="M6 11V8h12v3a6 6 0 1 1-12 0v0Z"></path></svg></button>`
220
-
221
- const p2 = document.createElement('p')
222
- p2.innerText =
223
- 'Once opened, you can select the output you want to connect to. Here we will connect the result output of the text component to the input "x" of the inline runnable.'
224
-
225
- const objectViewer = document.createElement('div')
226
- objectViewer.innerHTML = `<div class="rounded-lg shadow-md border p-4 bg-surface"><span class="s-UNyBDXJ1E286"> <ul class="w-full pl-2 border-none s-UNyBDXJ1E286"><li class="s-UNyBDXJ1E286"><button class="whitespace-nowrap s-UNyBDXJ1E286"><span class="key border font-semibold rounded px-1 hover:bg-surface-hover text-2xs text-secondary s-UNyBDXJ1E286">result</span> :</button> <button class="val rounded px-1 hover:bg-blue-100 string s-UNyBDXJ1E286"><span title="" class="text-2xs s-UNyBDXJ1E286">""</span></button></li> </ul> </span> <span class="border border-blue-600 rounded px-1 cursor-pointer hover:bg-gray-200 s-UNyBDXJ1E286 hidden">{...}</span> </div>`
227
-
228
- wrapper.appendChild(p1)
229
- wrapper.appendChild(id)
230
- wrapper.appendChild(p2)
231
- wrapper.appendChild(objectViewer)
232
-
233
- popover.description.appendChild(wrapper)
234
-
235
- tutorial?.renderControls(opts)
236
208
  }
237
209
  }
238
210
  },
239
-
211
+ {
212
+ element: '.component-output-viewer-a li *:has(> button[title="result"])',
213
+ popover: {
214
+ title: 'Select the output',
215
+ description: "Let's select the result of the text input component.",
216
+ onNextClick: () => {
217
+ setTimeout(async () => {
218
+ clickButtonBySelector('.component-output-viewer-a li button[title="result"]')
219
+ driver.moveNext()
220
+ })
221
+ }
222
+ }
223
+ },
240
224
  {
241
225
  element: '.wm-app-viewer',
242
226
  popover: {
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">import { updateProgress } from '../../../tutorialUtils';
2
+ import {} from 'driver.js';
2
3
  import Tutorial from '../Tutorial.svelte';
3
4
  import { clickButtonBySelector } from '../utils';
4
5
  export let name;
@@ -16,7 +17,7 @@ export function runTutorial(skipStepsCount = undefined) {
16
17
  on:error
17
18
  on:skipAll
18
19
  getSteps={(driver, options) => {
19
- const steps = [
20
+ const steps: DriveStep[] = [
20
21
  {
21
22
  element: '#app-editor-runnable-panel',
22
23
  popover: {
@@ -33,10 +34,7 @@ export function runTutorial(skipStepsCount = undefined) {
33
34
  'Click here to create a runnable. Runnables are scripts that can be executed in the background. You can add as many runnables as you want.',
34
35
  onNextClick: () => {
35
36
  clickButtonBySelector('#create-background-runnable')
36
-
37
- setTimeout(() => {
38
- driver.moveNext()
39
- })
37
+ setTimeout(() => driver.moveNext())
40
38
  }
41
39
  }
42
40
  },
@@ -54,12 +54,12 @@ function addComponent() {
54
54
  }
55
55
  },
56
56
  {
57
- element: '#plug',
57
+ element: '[data-connection-button] button[title="Connect"]',
58
58
  popover: {
59
59
  title: 'Connect the text component',
60
60
  description: 'Click on the plug icon to connect the text component',
61
61
  onNextClick: () => {
62
- clickButtonBySelector('#plug')
62
+ clickButtonBySelector('[data-connection-button] button[title="Connect"]')
63
63
  setTimeout(() => {
64
64
  driver.moveNext()
65
65
  })