windmill-components 1.665.1 → 1.677.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 (253) hide show
  1. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
  2. package/dist/sharedUtils/base.d.ts +1 -0
  3. package/dist/sharedUtils/cloud.d.ts +1 -0
  4. package/dist/sharedUtils/common.d.ts +111 -0
  5. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
  6. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
  7. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
  8. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
  9. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
  10. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
  11. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
  12. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
  13. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
  14. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
  15. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
  16. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
  17. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
  18. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
  19. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
  20. package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
  21. package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
  22. package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
  23. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
  24. package/dist/sharedUtils/components/apps/types.d.ts +274 -0
  25. package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
  26. package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
  27. package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
  28. package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
  29. package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
  30. package/dist/sharedUtils/components/common/index.d.ts +24 -0
  31. package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
  32. package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
  33. package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
  34. package/dist/sharedUtils/components/ducklake.d.ts +1 -0
  35. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
  36. package/dist/sharedUtils/components/icons/index.d.ts +101 -0
  37. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
  38. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
  39. package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
  40. package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
  41. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
  42. package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
  43. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
  44. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
  45. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
  46. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
  47. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
  48. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
  49. package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
  50. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
  51. package/dist/sharedUtils/components/triggers.d.ts +20 -0
  52. package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
  53. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
  54. package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
  55. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
  56. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
  57. package/dist/sharedUtils/gen/core/request.d.ts +29 -0
  58. package/dist/sharedUtils/gen/index.d.ts +6 -0
  59. package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
  60. package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
  61. package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
  62. package/dist/sharedUtils/history.svelte.d.ts +9 -0
  63. package/dist/sharedUtils/hub.d.ts +49 -0
  64. package/dist/sharedUtils/jsr.json +6 -0
  65. package/dist/sharedUtils/lib.d.ts +5 -0
  66. package/dist/sharedUtils/lib.es.js +1588 -0
  67. package/dist/sharedUtils/package.json +12 -0
  68. package/dist/sharedUtils/schema.d.ts +3 -0
  69. package/dist/sharedUtils/stores.d.ts +97 -0
  70. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
  71. package/dist/sharedUtils/toast.d.ts +8 -0
  72. package/dist/sharedUtils/utils.d.ts +265 -0
  73. package/package/components/AddUser.svelte +67 -34
  74. package/package/components/AppConnectInner.svelte +9 -1
  75. package/package/components/ArgInfo.svelte +9 -1
  76. package/package/components/ArgInput.svelte +21 -1
  77. package/package/components/CompareWorkspaces.svelte +11 -2
  78. package/package/components/DedicatedWorkersSelector.svelte +262 -247
  79. package/package/components/DefaultTagsInner.svelte +40 -2
  80. package/package/components/DeployWorkspace.svelte +13 -0
  81. package/package/components/DiffEditor.svelte +44 -1
  82. package/package/components/EditableSchemaForm.svelte +5 -2
  83. package/package/components/EditableSchemaForm.svelte.d.ts +1 -0
  84. package/package/components/Editor.svelte +5 -1
  85. package/package/components/EditorBar.svelte +12 -3
  86. package/package/components/FilterSearchbar.svelte +26 -2
  87. package/package/components/FlowBuilder.svelte +6 -3
  88. package/package/components/FlowGraphDiffViewer.svelte +16 -17
  89. package/package/components/FlowGraphViewer.svelte +20 -6
  90. package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
  91. package/package/components/FlowGraphViewerStep.svelte +14 -32
  92. package/package/components/FlowMetadata.svelte +4 -1
  93. package/package/components/FlowPreviewContent.svelte +2 -0
  94. package/package/components/FlowStatusWaitingForEvents.svelte +25 -4
  95. package/package/components/HighlightCode.svelte +3 -0
  96. package/package/components/InstanceSetting.svelte +9 -25
  97. package/package/components/InstanceSettings.svelte +16 -0
  98. package/package/components/LabelsInput.svelte +149 -0
  99. package/package/components/LabelsInput.svelte.d.ts +8 -0
  100. package/package/components/Login.svelte +6 -1
  101. package/package/components/ObjectStoreConfigSettings.svelte +273 -1
  102. package/package/components/OktaSetting.svelte +6 -5
  103. package/package/components/Password.svelte +74 -20
  104. package/package/components/Password.svelte.d.ts +1 -0
  105. package/package/components/PasswordArgInput.svelte +2 -2
  106. package/package/components/PasswordArgInput.svelte.d.ts +1 -0
  107. package/package/components/Path.svelte +8 -10
  108. package/package/components/PathNameAutocomplete.svelte +308 -0
  109. package/package/components/PathNameAutocomplete.svelte.d.ts +27 -0
  110. package/package/components/PowerShellCommonParams.svelte +84 -0
  111. package/package/components/PowerShellCommonParams.svelte.d.ts +6 -0
  112. package/package/components/Range.svelte +8 -3
  113. package/package/components/ResourceEditor.svelte +6 -2
  114. package/package/components/RunForm.svelte +71 -7
  115. package/package/components/RunForm.svelte.d.ts +2 -1
  116. package/package/components/ScriptBuilder.svelte +7 -3
  117. package/package/components/ScriptEditor.svelte +221 -187
  118. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  119. package/package/components/ScriptSchema.svelte +1 -1
  120. package/package/components/StringTypeNarrowing.svelte +1 -1
  121. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  122. package/package/components/SummaryPathDisplay.svelte +32 -10
  123. package/package/components/SummaryPathDisplay.svelte.d.ts +2 -1
  124. package/package/components/VariableEditor.svelte +9 -2
  125. package/package/components/WorkerGroup.svelte +47 -2
  126. package/package/components/apps/editor/DeploymentHistory.svelte +112 -13
  127. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +135 -35
  128. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +3 -1
  129. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +11 -35
  130. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.d.ts +10 -0
  131. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.js +14 -0
  132. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.d.ts +1 -0
  133. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.js +34 -0
  134. package/package/components/assets/AssetButtons.svelte +21 -25
  135. package/package/components/assets/AssetsUsageDrawer.svelte +7 -9
  136. package/package/components/common/fileUpload/FileUpload.svelte +6 -2
  137. package/package/components/common/languageIcons/LanguageIcon.svelte +3 -0
  138. package/package/components/common/table/AppRow.svelte +18 -0
  139. package/package/components/common/table/FlowRow.svelte +18 -0
  140. package/package/components/common/table/ScriptRow.svelte +18 -0
  141. package/package/components/copilot/chat/AIChatManager.svelte.js +3 -3
  142. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  143. package/package/components/copilot/chat/flow/openFlowZod.js +3 -3
  144. package/package/components/custom_ui.d.ts +2 -0
  145. package/package/components/details/DetailPageHeader.svelte +2 -2
  146. package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
  147. package/package/components/flows/agentToolUtils.d.ts +5 -0
  148. package/package/components/flows/agentToolUtils.js +49 -0
  149. package/package/components/flows/agentToolUtils.test.d.ts +1 -0
  150. package/package/components/flows/agentToolUtils.test.js +55 -0
  151. package/package/components/flows/content/FlowInput.svelte +2 -0
  152. package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
  153. package/package/components/flows/content/FlowLoop.svelte +5 -12
  154. package/package/components/flows/content/FlowModuleScript.svelte +5 -3
  155. package/package/components/flows/content/FlowPathViewer.svelte +2 -2
  156. package/package/components/flows/content/FlowPathViewer.svelte.d.ts +1 -0
  157. package/package/components/flows/content/FlowSettings.svelte +2 -0
  158. package/package/components/flows/content/FlowWhileLoop.svelte +5 -12
  159. package/package/components/flows/flowInfers.js +8 -3
  160. package/package/components/flows/flowStore.svelte.d.ts +1 -1
  161. package/package/components/flows/map/FlowModuleSchemaMap.svelte +49 -9
  162. package/package/components/flows/pickers/PickHubScriptQuick.svelte +5 -3
  163. package/package/components/flows/scheduleUtils.js +2 -1
  164. package/package/components/graph/FlowGraphV2.svelte +13 -1
  165. package/package/components/graph/WacDiagram.svelte +96 -0
  166. package/package/components/graph/WacDiagram.svelte.d.ts +7 -0
  167. package/package/components/graph/noteEditor.svelte.d.ts +1 -1
  168. package/package/components/graph/noteEditor.svelte.js +12 -1
  169. package/package/components/graph/noteUtils.svelte.d.ts +1 -1
  170. package/package/components/graph/noteUtils.svelte.js +9 -2
  171. package/package/components/graph/renderers/edges/WacEdge.svelte +41 -0
  172. package/package/components/graph/renderers/edges/WacEdge.svelte.d.ts +4 -0
  173. package/package/components/graph/renderers/nodes/WacControlNode.svelte +51 -0
  174. package/package/components/graph/renderers/nodes/WacControlNode.svelte.d.ts +9 -0
  175. package/package/components/graph/renderers/nodes/WacStepNode.svelte +35 -0
  176. package/package/components/graph/renderers/nodes/WacStepNode.svelte.d.ts +9 -0
  177. package/package/components/graph/wacDagLayout.d.ts +10 -0
  178. package/package/components/graph/wacDagLayout.js +120 -0
  179. package/package/components/graph/wacToFlow.js +1 -1
  180. package/package/components/home/ItemsList.svelte +28 -4
  181. package/package/components/icons/RIcon.svelte +32 -0
  182. package/package/components/icons/RIcon.svelte.d.ts +7 -0
  183. package/package/components/instanceSettings/DbHealth.svelte +723 -0
  184. package/package/components/instanceSettings/DbHealth.svelte.d.ts +3 -0
  185. package/package/components/instanceSettings/SecretBackendConfig.svelte +343 -304
  186. package/package/components/instanceSettings/SmtpSettings.svelte +8 -0
  187. package/package/components/instanceSettings.js +14 -5
  188. package/package/components/mcp/McpScopeSelector.svelte +82 -16
  189. package/package/components/moveRenameManager.d.ts +1 -0
  190. package/package/components/moveRenameManager.js +7 -4
  191. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +14 -1
  192. package/package/components/raw_apps/rawAppPolicy.js +3 -2
  193. package/package/components/raw_apps/utils.test.d.ts +1 -0
  194. package/package/components/raw_apps/utils.test.js +38 -0
  195. package/package/components/resources/resourcesFilter.d.ts +15 -2
  196. package/package/components/resources/resourcesFilter.js +11 -2
  197. package/package/components/runs/JobDetailFieldConfig.js +5 -3
  198. package/package/components/runs/JobDetailHeader.svelte +5 -2
  199. package/package/components/runs/JobRunsPreview.svelte +1 -0
  200. package/package/components/runs/RunBadges.svelte +7 -4
  201. package/package/components/runs/RunRow.svelte +7 -7
  202. package/package/components/schedules/schedulesFilter.d.ts +15 -2
  203. package/package/components/schedules/schedulesFilter.js +11 -2
  204. package/package/components/schema/EditableSchemaWrapper.svelte +6 -8
  205. package/package/components/schema/PropertyEditor.svelte +22 -1
  206. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -0
  207. package/package/components/schema/editable_schema_wrapper.d.ts +1 -0
  208. package/package/components/secretArgUtils.d.ts +7 -0
  209. package/package/components/secretArgUtils.js +45 -0
  210. package/package/components/settings/WorkspaceUserSettings.svelte +359 -286
  211. package/package/components/sidebar/OperatorMenu.svelte +215 -197
  212. package/package/components/triggers/CaptureWrapper.svelte +1 -1
  213. package/package/components/triggers/TriggerFilters.svelte +17 -5
  214. package/package/components/triggers/TriggerFilters.svelte.d.ts +2 -1
  215. package/package/components/triggers/kafka/KafkaCapture.svelte +6 -2
  216. package/package/components/triggers/kafka/KafkaCapture.svelte.d.ts +1 -1
  217. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +5 -1
  218. package/package/components/triggers/kafka/utils.js +1 -0
  219. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +1 -1
  220. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +6 -0
  221. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +87 -1
  222. package/package/components/triggers/websocket/utils.js +2 -0
  223. package/package/components/variables/variablesFilter.d.ts +15 -2
  224. package/package/components/variables/variablesFilter.js +11 -2
  225. package/package/components/worker_group.js +1 -0
  226. package/package/components/workspaceSettings/DucklakeSettings.svelte +33 -41
  227. package/package/consts.d.ts +1 -0
  228. package/package/consts.js +1 -0
  229. package/package/editorLangUtils.d.ts +1 -1
  230. package/package/editorLangUtils.js +2 -0
  231. package/package/gen/core/OpenAPI.js +1 -1
  232. package/package/gen/schemas.gen.d.ts +346 -4
  233. package/package/gen/schemas.gen.js +347 -5
  234. package/package/gen/services.gen.d.ts +163 -1
  235. package/package/gen/services.gen.js +323 -17
  236. package/package/gen/types.gen.d.ts +671 -5
  237. package/package/hubPaths.json +6 -3
  238. package/package/infer.d.ts +55 -0
  239. package/package/infer.js +131 -0
  240. package/package/infer.svelte.js +2 -0
  241. package/package/mcpEndpointTools.js +213 -22
  242. package/package/script_helpers.d.ts +3 -0
  243. package/package/script_helpers.js +26 -0
  244. package/package/scripts.d.ts +2 -1
  245. package/package/scripts.js +15 -3
  246. package/package/stores.d.ts +2 -0
  247. package/package/system_prompts/prompts.d.ts +6 -5
  248. package/package/system_prompts/prompts.js +188 -29
  249. package/package/user.js +5 -1
  250. package/package/utils.js +21 -0
  251. package/package/utils_deployable.d.ts +11 -0
  252. package/package/utils_workspace_deploy.js +36 -8
  253. package/package.json +5 -4
@@ -46,6 +46,8 @@ export type FlowBuilderWhitelabelCustomUi = {
46
46
  tagLabel?: string;
47
47
  aiAgent?: boolean;
48
48
  aiSandbox?: boolean;
49
+ suggestIntegration?: boolean;
50
+ suggestScript?: boolean;
49
51
  };
50
52
  export type DisplayResultUi = {
51
53
  disableAiFix?: boolean;
@@ -7,7 +7,7 @@ import { createEventDispatcher, getContext, tick } from 'svelte';
7
7
  import SummaryPathDisplay from '../SummaryPathDisplay.svelte';
8
8
  import { Calendar } from 'lucide-svelte';
9
9
  const { triggersCount, triggersState } = $state(getContext('TriggerContext'));
10
- let { mainButtons = [], menuItems = [], summary, path, tag, errorHandlerKind, scriptOrFlowPath, errorHandlerMuted = $bindable(), onSaved, children, trigger_badges } = $props();
10
+ let { mainButtons = [], menuItems = [], summary, path, tag, errorHandlerKind, scriptOrFlowPath, errorHandlerMuted = $bindable(), labels = $bindable(), onSaved, children, trigger_badges } = $props();
11
11
  const dispatch = createEventDispatcher();
12
12
  </script>
13
13
 
@@ -18,7 +18,7 @@ const dispatch = createEventDispatcher();
18
18
  >
19
19
  <div class="grow px-2 inline-flex items-center gap-4 min-w-0">
20
20
  <div class={twMerge('min-w-0', $userStore?.operator ? 'pl-10' : '')}>
21
- <SummaryPathDisplay {summary} {path} {onSaved} kind={errorHandlerKind} />
21
+ <SummaryPathDisplay {summary} {path} bind:labels {onSaved} kind={errorHandlerKind} />
22
22
  </div>
23
23
  {#if tag}
24
24
  <Badge>tag: {tag}</Badge>
@@ -19,6 +19,7 @@ interface Props {
19
19
  errorHandlerKind: 'flow' | 'script';
20
20
  scriptOrFlowPath: string;
21
21
  errorHandlerMuted: boolean | undefined;
22
+ labels?: string[] | undefined;
22
23
  onSaved?: (newPath: string) => void;
23
24
  children?: import('svelte').Snippet;
24
25
  trigger_badges?: import('svelte').Snippet;
@@ -40,6 +41,6 @@ declare const DetailPageHeader: $$__sveltets_2_IsomorphicComponent<Props, {
40
41
  seeTriggers: CustomEvent<any>;
41
42
  } & {
42
43
  [evt: string]: CustomEvent<any>;
43
- }, {}, {}, "errorHandlerMuted">;
44
+ }, {}, {}, "labels" | "errorHandlerMuted">;
44
45
  type DetailPageHeader = InstanceType<typeof DetailPageHeader>;
45
46
  export default DetailPageHeader;
@@ -51,6 +51,11 @@ export declare function createMcpTool(id: string): McpTool;
51
51
  * Create a Websearch tool
52
52
  */
53
53
  export declare function createWebsearchTool(id: string): WebsearchTool;
54
+ /**
55
+ * Remove an AI agent tool by id, recursively traversing nested modules and nested AI agents.
56
+ * Returns true when a matching tool was found and removed.
57
+ */
58
+ export declare function removeAgentToolByIdDeep(modules: FlowModule[], id: string, onRemove?: (tool: AgentTool) => void): boolean;
54
59
  /**
55
60
  * Convert a FlowModuleTool to a FlowModule for use with loadFlowModuleState etc.
56
61
  * Strips the extra `tool_type` field and maps AgentTool fields to FlowModule fields.
@@ -78,6 +78,55 @@ export function createWebsearchTool(id) {
78
78
  }
79
79
  };
80
80
  }
81
+ /**
82
+ * Remove an AI agent tool by id, recursively traversing nested modules and nested AI agents.
83
+ * Returns true when a matching tool was found and removed.
84
+ */
85
+ export function removeAgentToolByIdDeep(modules, id, onRemove) {
86
+ for (const module of modules) {
87
+ if (module.value.type === 'forloopflow' || module.value.type === 'whileloopflow') {
88
+ if (removeAgentToolByIdDeep(module.value.modules, id, onRemove)) {
89
+ return true;
90
+ }
91
+ continue;
92
+ }
93
+ if (module.value.type === 'branchall') {
94
+ for (const branch of module.value.branches) {
95
+ if (removeAgentToolByIdDeep(branch.modules, id, onRemove)) {
96
+ return true;
97
+ }
98
+ }
99
+ continue;
100
+ }
101
+ if (module.value.type === 'branchone') {
102
+ if (removeAgentToolByIdDeep(module.value.default, id, onRemove)) {
103
+ return true;
104
+ }
105
+ for (const branch of module.value.branches) {
106
+ if (removeAgentToolByIdDeep(branch.modules, id, onRemove)) {
107
+ return true;
108
+ }
109
+ }
110
+ continue;
111
+ }
112
+ if (module.value.type !== 'aiagent') {
113
+ continue;
114
+ }
115
+ const toolIndex = module.value.tools.findIndex((tool) => tool.id === id);
116
+ if (toolIndex !== -1) {
117
+ const [removed] = module.value.tools.splice(toolIndex, 1);
118
+ onRemove?.(removed);
119
+ return true;
120
+ }
121
+ const nestedToolModules = module.value.tools
122
+ .filter(isFlowModuleTool)
123
+ .map((tool) => agentToolToFlowModule(tool));
124
+ if (removeAgentToolByIdDeep(nestedToolModules, id, onRemove)) {
125
+ return true;
126
+ }
127
+ }
128
+ return false;
129
+ }
81
130
  /**
82
131
  * Convert a FlowModuleTool to a FlowModule for use with loadFlowModuleState etc.
83
132
  * Strips the extra `tool_type` field and maps AgentTool fields to FlowModule fields.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ vi.mock('../aiProviderStorage', () => ({
3
+ loadStoredConfig: () => undefined
4
+ }));
5
+ vi.mock('./flowInfers', () => ({
6
+ AI_AGENT_SCHEMA: { properties: {} }
7
+ }));
8
+ import { removeAgentToolByIdDeep } from './agentToolUtils';
9
+ function makeRawModule(id) {
10
+ return {
11
+ id,
12
+ summary: id,
13
+ value: { type: 'rawscript', content: '', language: 'python3' }
14
+ };
15
+ }
16
+ function makeAiAgent(id, tools) {
17
+ return {
18
+ id,
19
+ summary: id,
20
+ value: {
21
+ type: 'aiagent',
22
+ tools,
23
+ input_transforms: {}
24
+ }
25
+ };
26
+ }
27
+ function makeFlowModuleTool(module) {
28
+ return {
29
+ id: module.id,
30
+ summary: module.summary,
31
+ value: {
32
+ tool_type: 'flowmodule',
33
+ ...module.value
34
+ }
35
+ };
36
+ }
37
+ describe('removeAgentToolByIdDeep', () => {
38
+ it('removes a direct tool from an ai agent', () => {
39
+ const tool = makeFlowModuleTool(makeRawModule('lookup_user'));
40
+ const agent = makeAiAgent('agent', [tool]);
41
+ const removed = [];
42
+ expect(removeAgentToolByIdDeep([agent], 'lookup_user', (x) => removed.push(x.id))).toBe(true);
43
+ expect(agent.value.tools).toEqual([]);
44
+ expect(removed).toEqual(['lookup_user']);
45
+ });
46
+ it('removes a nested tool from a nested ai agent tool', () => {
47
+ const nestedTool = makeFlowModuleTool(makeRawModule('create_ticket'));
48
+ const nestedAgent = makeAiAgent('support_agent', [nestedTool]);
49
+ const rootAgent = makeAiAgent('root_agent', [makeFlowModuleTool(nestedAgent)]);
50
+ const removed = [];
51
+ expect(removeAgentToolByIdDeep([rootAgent], 'create_ticket', (x) => removed.push(x.id))).toBe(true);
52
+ expect(rootAgent.value.tools[0].value.tools).toEqual([]);
53
+ expect(removed).toEqual(['create_ticket']);
54
+ });
55
+ });
@@ -568,6 +568,7 @@ function enableChatMode() {
568
568
  bind:schema={flowStore.val.schema}
569
569
  hiddenArgs={['user_message']}
570
570
  isFlowInput
571
+ showSensitiveToggle
571
572
  editTab={chatInputsEditTab ? 'inputEditor' : undefined}
572
573
  showDynOpt
573
574
  bind:dynCode
@@ -623,6 +624,7 @@ function enableChatMode() {
623
624
  bind:this={editableSchemaForm}
624
625
  bind:schema={flowStore.val.schema}
625
626
  isFlowInput
627
+ showSensitiveToggle
626
628
  on:delete={(e) => {
627
629
  addPropertyV2?.handleDeleteArgument([e.detail])
628
630
  }}
@@ -219,7 +219,7 @@ let aiLength = $derived(funcDesc?.length > 0 && !disableAi && selectedKind != 'f
219
219
  bind:selectedFilter={selected}
220
220
  resourceType
221
221
  />
222
- {#if !selected}
222
+ {#if !selected && customUi?.suggestIntegration != false}
223
223
  <div class="pl-2 py-1">
224
224
  <a
225
225
  href={`${$hubBaseUrlStore}?suggest_integration=true`}
@@ -25,7 +25,6 @@ import { emptySchema } from '../../../utils';
25
25
  import { slide } from 'svelte/transition';
26
26
  import ToggleButtonGroup from '../../common/toggleButton-v2/ToggleButtonGroup.svelte';
27
27
  import ToggleButton from '../../common/toggleButton-v2/ToggleButton.svelte';
28
- import Badge from '../../common/badge/Badge.svelte';
29
28
  const { previewArgs, flowStateStore, flowStore, currentEditor } = getContext('FlowEditorContext');
30
29
  let { mod = $bindable(), parentModule, previousModule, noEditor, enableAi = false } = $props();
31
30
  let editor = $state(undefined);
@@ -143,17 +142,11 @@ let suggestion = $state(undefined);
143
142
  <div class="flex-shrink-0">
144
143
  <div class="mb-2 text-sm font-bold"
145
144
  >Squash
146
-
147
- <Badge
148
- >Beta <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_loops">
149
- <span class="font-semibold"
150
- >This can result in unexpected behavior, use at your own risk for now.</span
151
- ><br />
152
- Squashing a for loop runs all iterations on the same worker, using a single runner
153
- per step for the entire loop. This eliminates cold starts between iterations for supported
154
- languages (Bun, Deno, and Python).
155
- </Tooltip>
156
- </Badge>
145
+ <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_loops">
146
+ Squashing a for loop runs all iterations on the same worker, using a single runner
147
+ per step for the entire loop. This eliminates cold starts between iterations for
148
+ supported languages (Bun, Deno, and Python).
149
+ </Tooltip>
157
150
  </div>
158
151
  <Toggle
159
152
  bind:checked={mod.value.squash}
@@ -52,9 +52,11 @@ function toggleShowAll() {
52
52
  async function loadCode(path, hash) {
53
53
  try {
54
54
  notFound = false;
55
- const script = hash
56
- ? await ScriptService.getScriptByHash({ workspace: $workspaceStore, hash })
57
- : await getScriptByPath(path);
55
+ const script = path.startsWith('hub/')
56
+ ? await getScriptByPath(path)
57
+ : hash
58
+ ? await ScriptService.getScriptByHash({ workspace: $workspaceStore, hash })
59
+ : await getScriptByPath(path);
58
60
  code = script.content;
59
61
  language = script.language;
60
62
  lock = script.lock;
@@ -6,7 +6,7 @@ import { FlowService } from '../../../gen';
6
6
  import { workspaceStore } from '../../../stores';
7
7
  import { setContext } from 'svelte';
8
8
  import { writable } from 'svelte/store';
9
- let { path, noSide = false } = $props();
9
+ let { path, noSide = false, fillAvailableHeight = false } = $props();
10
10
  let flow = $state(undefined);
11
11
  const triggersCount = writable(undefined);
12
12
  setContext('TriggerContext', {
@@ -26,7 +26,7 @@ run(() => {
26
26
 
27
27
  <div class="flex flex-col flex-1 h-full overflow-auto">
28
28
  {#if flow}
29
- <FlowGraphViewer triggerNode={true} {noSide} {flow} />
29
+ <FlowGraphViewer triggerNode={true} {noSide} {flow} {fillAvailableHeight} />
30
30
  {:else}
31
31
  <Skeleton layout={[[40]]} />
32
32
  {/if}
@@ -1,6 +1,7 @@
1
1
  interface Props {
2
2
  path: string;
3
3
  noSide?: boolean;
4
+ fillAvailableHeight?: boolean;
4
5
  }
5
6
  declare const FlowPathViewer: import("svelte").Component<Props, {}, "">;
6
7
  type FlowPathViewer = ReturnType<typeof FlowPathViewer>;
@@ -16,6 +16,7 @@ import ErrorHandlerToggleButtonV2 from '../../details/ErrorHandlerToggleButtonV2
16
16
  import WorkerTagPicker from '../../WorkerTagPicker.svelte';
17
17
  import MetadataGen from '../../copilot/MetadataGen.svelte';
18
18
  import Badge from '../../Badge.svelte';
19
+ import LabelsInput from '../../LabelsInput.svelte';
19
20
  import AIFormSettings from '../../copilot/AIFormSettings.svelte';
20
21
  import { twMerge } from 'tailwind-merge';
21
22
  import { inputBaseClass, inputBorderClass } from '../../text_input/TextInput.svelte';
@@ -95,6 +96,7 @@ let numberOfAdvancedOptionsOn = $derived(activeAdvancedOptionNames.length);
95
96
  }}
96
97
  />
97
98
  </Label>
99
+ <LabelsInput bind:labels={(flowStore.val as any).labels} class="-mt-4" />
98
100
 
99
101
  {#if !noEditor}
100
102
  <Label label="Path">
@@ -16,7 +16,6 @@ import FlowModuleDeleteAfterUse from './FlowModuleDeleteAfterUse.svelte';
16
16
  import FlowModuleSkip from './FlowModuleSkip.svelte';
17
17
  import TabsV2 from '../../common/tabs/TabsV2.svelte';
18
18
  import { useUiIntent } from '../../copilot/chat/flow/useUiIntent';
19
- import Badge from '../../common/badge/Badge.svelte';
20
19
  const { flowStateStore } = getContext('FlowEditorContext');
21
20
  let { mod = $bindable(), previousModule, parentModule, noEditor } = $props();
22
21
  let selected = $state('early-stop');
@@ -90,17 +89,11 @@ useUiIntent(`whileloopflow-${mod.id}`, {
90
89
  <div class="flex-shrink-0">
91
90
  <div class="mb-2 text-sm font-bold"
92
91
  >Squash
93
-
94
- <Badge
95
- >Beta <Tooltip documentationLink="https://www.windmill.dev/docs/flows/while_loops">
96
- <span class="font-semibold"
97
- >This can result in unexpected behavior, use at your own risk for now.</span
98
- ><br />
99
- Squashing a for loop runs all iterations on the same worker, using a single runner
100
- per step for the entire loop. This eliminates cold starts between iterations for supported
101
- languages (Bun, Deno, and Python).
102
- </Tooltip>
103
- </Badge>
92
+ <Tooltip documentationLink="https://www.windmill.dev/docs/flows/while_loops">
93
+ Squashing a while loop runs all iterations on the same worker, using a single runner
94
+ per step for the entire loop. This eliminates cold starts between iterations for
95
+ supported languages (Bun, Deno, and Python).
96
+ </Tooltip>
104
97
  </div>
105
98
  <Toggle
106
99
  bind:checked={mod.value.squash}
@@ -130,9 +130,9 @@ export const AI_AGENT_SCHEMA = {
130
130
  format: 'json-schema',
131
131
  showExpr: "fields.output_type === 'text'"
132
132
  },
133
- user_images: {
133
+ user_attachments: {
134
134
  type: 'array',
135
- description: 'Array of images to give as input to the AI agent. Requires a configured workspace S3 storage.',
135
+ description: 'Array of files (images or PDFs) to give as input to the AI agent. Requires a configured workspace S3 storage.',
136
136
  items: {
137
137
  type: 'object',
138
138
  resourceType: 's3object'
@@ -163,13 +163,18 @@ export const AI_AGENT_SCHEMA = {
163
163
  'streaming',
164
164
  'memory',
165
165
  'output_schema',
166
- 'user_images',
166
+ 'user_attachments',
167
167
  'max_completion_tokens',
168
168
  'temperature',
169
169
  'max_iterations'
170
170
  ]
171
171
  };
172
172
  function migrateAiAgentInputTransforms(inputTransforms) {
173
+ // Migrate user_images → user_attachments
174
+ if ('user_images' in inputTransforms && !('user_attachments' in inputTransforms)) {
175
+ inputTransforms.user_attachments = inputTransforms.user_images;
176
+ delete inputTransforms.user_images;
177
+ }
173
178
  // Check if this has the legacy format
174
179
  if ('messages_context_length' in inputTransforms && !('memory' in inputTransforms)) {
175
180
  const legacyValue = inputTransforms.messages_context_length;
@@ -65,7 +65,7 @@ export declare function getFirstStepSchema(flowState: FlowState, flow: OpenFlow)
65
65
  id: string;
66
66
  summary: string | undefined;
67
67
  value: {
68
- language?: "deno" | "bun" | "python3" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "oracledb" | "graphql" | "nativets" | "php" | "rust" | "ansible" | "csharp" | "nu" | "java" | "ruby" | "duckdb" | undefined;
68
+ language?: "deno" | "bun" | "python3" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "oracledb" | "graphql" | "nativets" | "php" | "rust" | "ansible" | "csharp" | "nu" | "java" | "ruby" | "rlang" | "duckdb" | undefined;
69
69
  path?: string | undefined;
70
70
  type: "rawscript" | "script" | "flow" | "forloopflow" | "whileloopflow" | "branchone" | "branchall" | "aiagent" | "identity";
71
71
  };
@@ -21,7 +21,7 @@ import { refreshStateStore } from '../../../svelte5Utils.svelte';
21
21
  import FlowStickyNode from './FlowStickyNode.svelte';
22
22
  import { getStepHistoryLoaderContext } from '../../stepHistoryLoader.svelte';
23
23
  import { ModulesTestStates } from '../../modulesTest.svelte';
24
- import { flowModuleToAgentTool, createMcpTool, createWebsearchTool, createAiAgentTool, SPECIAL_TOOL_KINDS, agentToolToFlowModule } from '../agentToolUtils';
24
+ import { flowModuleToAgentTool, createMcpTool, createWebsearchTool, createAiAgentTool, SPECIAL_TOOL_KINDS, agentToolToFlowModule, removeAgentToolByIdDeep } from '../agentToolUtils';
25
25
  import { loadFlowModuleState } from '../flowStateUtils.svelte';
26
26
  import { getNoteEditorContext } from '../../graph/noteEditor.svelte';
27
27
  import { GroupedModulesProxy } from '../../graph/groupedModulesProxy.svelte';
@@ -148,7 +148,7 @@ export async function insertNewModuleAtIndex(modules, index, kind, wsScript, wsF
148
148
  * Tools are always leaf nodes, so we just need to delete their state directly
149
149
  */
150
150
  function removeAgentToolById(tools, id) {
151
- const index = tools.findIndex((tool) => tool.id == id);
151
+ const index = tools.findIndex((tool) => tool.id === id);
152
152
  if (index != -1) {
153
153
  const [removed] = tools.splice(index, 1);
154
154
  deleteFlowStateById(removed.id, flowStateStore);
@@ -257,6 +257,16 @@ function toggleNoteMode() {
257
257
  noteMode = !noteMode;
258
258
  }
259
259
  export function deleteMultiple(ids) {
260
+ const structureIds = [];
261
+ const toolIds = [];
262
+ for (const id of ids) {
263
+ if (findInStructure(proxy.items, id)) {
264
+ structureIds.push(id);
265
+ }
266
+ else {
267
+ toolIds.push(id);
268
+ }
269
+ }
260
270
  const deletingSet = new Set(ids);
261
271
  const allDeps = {};
262
272
  for (const id of ids) {
@@ -268,17 +278,28 @@ export function deleteMultiple(ids) {
268
278
  }
269
279
  }
270
280
  const opts = { displayState: groupDisplayState };
271
- const { emptiedGroups, duplicateGroups, commit } = proxy.prepareMutation((tree) => {
272
- for (const id of ids) {
273
- const found = findInStructure(tree, id);
274
- if (found)
275
- found.parentChildren.splice(found.index, 1);
276
- }
277
- }, opts);
281
+ const { emptiedGroups, duplicateGroups, commit } = structureIds.length > 0
282
+ ? proxy.prepareMutation((tree) => {
283
+ for (const id of structureIds) {
284
+ const found = findInStructure(tree, id);
285
+ if (found)
286
+ found.parentChildren.splice(found.index, 1);
287
+ }
288
+ }, opts)
289
+ : {
290
+ emptiedGroups: [],
291
+ duplicateGroups: [],
292
+ commit: () => { }
293
+ };
278
294
  const affectedGroups = [...emptiedGroups, ...duplicateGroups];
279
295
  const cb = () => {
280
296
  push(history, flowStore.val);
281
297
  commit({ removeDuplicates: duplicateGroups.length > 0 });
298
+ for (const id of toolIds) {
299
+ removeAgentToolByIdDeep(flowStore.val.value.modules, id, (removed) => {
300
+ deleteFlowStateById(removed.id, flowStateStore);
301
+ });
302
+ }
282
303
  for (const id of ids) {
283
304
  delete flowStateStore.val[id];
284
305
  }
@@ -531,6 +552,25 @@ $effect(() => {
531
552
  return
532
553
  }
533
554
 
555
+ if (!findInStructure(proxy.items, id)) {
556
+ const cb = () => {
557
+ push(history, flowStore.val)
558
+ selectNextId(id)
559
+ const removed = removeAgentToolByIdDeep(flowStore.val.value.modules, id, (tool) => {
560
+ deleteFlowStateById(tool.id, flowStateStore)
561
+ })
562
+ if (!removed) return
563
+ refreshStateStore(flowStore)
564
+ onDelete?.(id)
565
+ }
566
+ if (Object.keys(dependents).length > 0) {
567
+ deleteCallback = cb
568
+ } else {
569
+ cb()
570
+ }
571
+ return
572
+ }
573
+
534
574
  const dsOpts = { displayState: groupDisplayState }
535
575
  const { emptiedGroups, duplicateGroups, commit } = proxy.prepareMutation((tree) => {
536
576
  const found = findInStructure(tree, id)
@@ -19,7 +19,7 @@ let listHubScriptsCached = createCache(async ({ filter, kind, appFilter }) => {
19
19
  });
20
20
  </script>
21
21
 
22
- <script lang="ts">import { createEventDispatcher, untrack } from 'svelte';
22
+ <script lang="ts">import { createEventDispatcher, getContext, untrack } from 'svelte';
23
23
  import { Skeleton } from '../../common';
24
24
  import { classNames, createCache, sendUserToast } from '../../../utils';
25
25
  import { APP_TO_ICON_COMPONENT } from '../../icons';
@@ -31,6 +31,7 @@ import { disableHubStore, hubBaseUrlStore, userStore } from '../../../stores';
31
31
  import { get } from 'svelte/store';
32
32
  import Button from '../../common/button/Button.svelte';
33
33
  import { Alert } from '../../common';
34
+ let customUi = getContext('customUi');
34
35
  let hubNotAvailable = $state(false);
35
36
  const dispatch = createEventDispatcher();
36
37
  let { kind = 'script', filter = $bindable(''), loading = $bindable(false), selected = undefined, appFilter = undefined, items = $bindable([]), displayPath = false, apps = $bindable([]), refreshCount = 0 } = $props();
@@ -118,7 +119,8 @@ $effect(() => {
118
119
  {:else if hubNotAvailable}
119
120
  <div class="px-3 py-2 mt-2">
120
121
  <Alert type="warning" title="Hub not available" size="xs">
121
- Could not connect to the Windmill Hub. If you are in a closed environment, you can disable the Hub in the <a href="/#superadmin-settings?tab=private_hub">instance settings</a>.
122
+ Could not connect to the Windmill Hub. If you are in a closed environment, you can disable the
123
+ Hub in the <a href="/#superadmin-settings?tab=private_hub">instance settings</a>.
122
124
  </Alert>
123
125
  </div>
124
126
  {:else if loading}
@@ -180,7 +182,7 @@ $effect(() => {
180
182
  <div class="text-2xs text-tercary font-extralight text-center py-2 px-3 items-center">
181
183
  There are more items than being displayed. Refine your search.
182
184
  </div>
183
- {:else}
185
+ {:else if customUi?.suggestScript != false}
184
186
  <div class="px-2 py-1">
185
187
  <a
186
188
  href={`${$hubBaseUrlStore}?suggest_script=true`}
@@ -144,7 +144,8 @@ export async function saveScheduleFromCfg(scheduleCfg, edit, workspace) {
144
144
  cron_version: scheduleCfg.cron_version,
145
145
  dynamic_skip: scheduleCfg.dynamic_skip,
146
146
  permissioned_as: scheduleCfg.permissioned_as,
147
- preserve_permissioned_as: scheduleCfg.preserve_permissioned_as
147
+ preserve_permissioned_as: scheduleCfg.preserve_permissioned_as,
148
+ labels: scheduleCfg.labels
148
149
  };
149
150
  try {
150
151
  if (edit) {
@@ -416,6 +416,18 @@ async function updateStores() {
416
416
  ...(assetNodesResult?.newAssetNodes ?? []),
417
417
  ...aiToolNodesResult.toolNodes
418
418
  ];
419
+ // Collect module IDs hidden inside collapsed groups so note cleanup preserves them
420
+ const collapsedModuleIds = new Set();
421
+ for (const n of finalNodes) {
422
+ if (n.type === 'collapsedGroup') {
423
+ const modules = n.data?.modules;
424
+ if (modules) {
425
+ for (const m of modules) {
426
+ collapsedModuleIds.add(m.id);
427
+ }
428
+ }
429
+ }
430
+ }
419
431
  // Compute note nodes (no position remapping)
420
432
  let noteNodesResult = showNotes
421
433
  ? computeNoteNodes(finalNodes.map((n) => ({
@@ -427,7 +439,7 @@ async function updateStores() {
427
439
  })), notes ?? [], noteTextHeights, (noteId, height) => {
428
440
  noteTextHeights[noteId] = height;
429
441
  noteManager.render();
430
- }, editMode, noteEditorContext)
442
+ }, editMode, noteEditorContext, collapsedModuleIds.size > 0 ? collapsedModuleIds : undefined)
431
443
  : undefined;
432
444
  // update nodes
433
445
  nodes = [...finalNodes, ...(noteNodesResult?.noteNodes ?? [])];
@@ -0,0 +1,96 @@
1
+ <script lang="ts">import { SvelteFlow, SvelteFlowProvider, Controls } from '@xyflow/svelte';
2
+ import { parseWacDag } from '../../infer';
3
+ import { dagToXyflow } from './wacDagLayout';
4
+ import WacStepNode from './renderers/nodes/WacStepNode.svelte';
5
+ import WacControlNode from './renderers/nodes/WacControlNode.svelte';
6
+ import WacEdge from './renderers/edges/WacEdge.svelte';
7
+ import { AlertTriangle, Workflow } from 'lucide-svelte';
8
+ let { code, language } = $props();
9
+ let nodes = $state.raw([]);
10
+ let edges = $state.raw([]);
11
+ let errors = $state([]);
12
+ let empty = $state(true);
13
+ let debounceTimer;
14
+ $effect(() => {
15
+ const _code = code;
16
+ const _lang = language;
17
+ clearTimeout(debounceTimer);
18
+ debounceTimer = setTimeout(async () => {
19
+ const result = await parseWacDag(_code, _lang);
20
+ if (result === null) {
21
+ nodes = [];
22
+ edges = [];
23
+ errors = [];
24
+ empty = true;
25
+ }
26
+ else if ('errors' in result) {
27
+ nodes = [];
28
+ edges = [];
29
+ errors = result.errors;
30
+ empty = false;
31
+ }
32
+ else {
33
+ const dag = result;
34
+ const layout = dagToXyflow(dag);
35
+ nodes = layout.nodes;
36
+ edges = layout.edges;
37
+ errors = [];
38
+ empty = dag.nodes.length === 0;
39
+ }
40
+ }, 300);
41
+ return () => clearTimeout(debounceTimer);
42
+ });
43
+ const nodeTypes = {
44
+ wacStep: WacStepNode,
45
+ wacControl: WacControlNode
46
+ };
47
+ const edgeTypes = {
48
+ wacEdge: WacEdge
49
+ };
50
+ const proOptions = { hideAttribution: true };
51
+ </script>
52
+
53
+ <div class="w-full h-full">
54
+ {#if errors.length > 0}
55
+ <div class="p-4 flex flex-col gap-2">
56
+ {#each errors as error (error.line)}
57
+ <div class="flex items-start gap-2 text-xs text-red-500">
58
+ <AlertTriangle size={14} class="shrink-0 mt-0.5" />
59
+ <span>
60
+ {#if error.line > 0}
61
+ <span class="font-mono">L{error.line}:</span>
62
+ {/if}
63
+ {error.message}
64
+ </span>
65
+ </div>
66
+ {/each}
67
+ </div>
68
+ {:else if empty}
69
+ <div class="p-4 flex flex-col items-center justify-center h-full text-tertiary text-xs gap-2">
70
+ <Workflow size={24} />
71
+ <span>No workflow diagram</span>
72
+ </div>
73
+ {:else}
74
+ <SvelteFlowProvider>
75
+ <SvelteFlow
76
+ {nodes}
77
+ {edges}
78
+ {nodeTypes}
79
+ {edgeTypes}
80
+ fitView
81
+ fitViewOptions={{ padding: 0.2 }}
82
+ nodesDraggable={false}
83
+ elementsSelectable={false}
84
+ panOnDrag={true}
85
+ zoomOnScroll={true}
86
+ zoomOnPinch={true}
87
+ zoomOnDoubleClick={false}
88
+ preventScrolling={true}
89
+ {proOptions}
90
+ style="background: transparent;"
91
+ >
92
+ <Controls position="top-right" orientation="horizontal" showLock={false} />
93
+ </SvelteFlow>
94
+ </SvelteFlowProvider>
95
+ {/if}
96
+ </div>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ code: string;
3
+ language: string;
4
+ }
5
+ declare const WacDiagram: import("svelte").Component<Props, {}, "">;
6
+ type WacDiagram = ReturnType<typeof WacDiagram>;
7
+ export default WacDiagram;
@@ -78,7 +78,7 @@ export declare class NoteEditor {
78
78
  cleanupGroupNotes(flowNodes: {
79
79
  id: string;
80
80
  parentIds?: string[];
81
- }[]): void;
81
+ }[], collapsedModuleIds?: Set<string>): void;
82
82
  }
83
83
  /**
84
84
  * Context type for NoteEditor